diff --git a/Android.bp b/Android.bp
deleted file mode 100644
index fd0ed55..0000000
--- a/Android.bp
+++ /dev/null
@@ -1,104 +0,0 @@
-//  Copyright (C) 2015 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 {
-    // See: http://go/android-license-faq
-    default_applicable_licenses: [
-        "Android-Apache-2.0",
-    ],
-}
-
-soong_config_module_type {
-    name: "messaging_java_defaults",
-    module_type: "java_defaults",
-    config_namespace: "messaging",
-    bool_variables: ["build_variant_eng"],
-    properties: ["optimize"],
-}
-
-messaging_java_defaults {
-    name: "messaging_defaults",
-    soong_config_variables: {
-        build_variant_eng: {
-            optimize: {
-                proguard_flags_files: [
-                    "proguard.flags",
-                    "proguard-test.flags",
-                ],
-            },
-            conditions_default: {
-                optimize: {
-                    proguard_flags_files: [
-                        "proguard.flags",
-                        "proguard-release.flags",
-                    ],
-                }
-            },
-        },
-    },
-}
-
-
-android_app {
-    name: "messaging",
-
-    srcs: ["src/**/*.java"],
-
-    defaults: ["messaging_defaults"],
-
-    static_libs: [
-        "androidx.appcompat_appcompat",
-        "androidx.collection_collection",
-        "androidx.core_core",
-        "androidx.fragment_fragment",
-        "androidx.media_media",
-        "androidx.legacy_legacy-support-core-utils",
-        "androidx.legacy_legacy-support-core-ui",
-        "androidx.palette_palette",
-        "androidx.recyclerview_recyclerview",
-        "androidx.viewpager_viewpager",
-        "androidx.legacy_legacy-support-v13",
-        "colorpicker",
-        "libchips",
-        "libphotoviewer",
-        "androidx.annotation_annotation",
-        "android-common",
-        "android-common-framesequence",
-        "com.android.vcard",
-        "guava",
-        "libphonenumber",
-    ],
-
-    aaptflags: [
-        "--version-name",
-        "1.0.001",
-        "--version-code",
-        "10001040",
-    ],
-    required: [
-        "libframesequence",
-        "libgiftranscode",
-    ],
-    optimize: {
-        obfuscate: true,
-        optimize: true,
-        enabled: true,
-    },
-
-    certificate: "platform",
-
-    sdk_version: "current",
-
-    product_specific: true,
-}
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
deleted file mode 100644
index fffcdab..0000000
--- a/AndroidManifest.xml
+++ /dev/null
@@ -1,533 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.android.messaging"
-    android:installLocation="internalOnly">
-
-    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="24" />
-
-    <!-- Application holds CPU wakelock while working in background -->
-    <uses-permission android:name="android.permission.WAKE_LOCK" />
-    <!-- Application needs SMS/MMS permissions -->
-    <uses-permission android:name="android.permission.READ_SMS"/>
-    <uses-permission android:name="android.permission.WRITE_SMS"/>
-    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
-    <uses-permission android:name="android.permission.RECEIVE_MMS"/>
-    <uses-permission android:name="android.permission.SEND_SMS"/>
-    <!-- Application needs access to MMS network -->
-    <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
-    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
-    <!-- Application needs CONTACT permissions -->
-    <uses-permission android:name="android.permission.READ_CONTACTS"/>
-    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
-    <!-- Application needs to read profiles for the user itself from CP2 -->
-    <uses-permission android:name="android.permission.READ_PROFILE"/>
-    <uses-permission android:name="android.permission.VIBRATE"/>
-    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
-
-    <uses-permission android:name="android.permission.CAMERA" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
-    <uses-permission android:name="android.permission.RECORD_AUDIO" />
-    <uses-permission android:name="android.permission.CALL_PHONE" />
-    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
-    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
-    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
-
-    <!--  Optional features -->
-    <uses-feature android:name="android.hardware.camera" android:required="false" />
-    <uses-feature android:name="android.hardware.camera.front" android:required="false" />
-    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
-    <uses-feature android:name="android.hardware.microphone" android:required="false" />
-    <uses-feature android:name="android.hardware.screen.portrait" android:required="false" />
-
-    <application
-        android:name="com.android.messaging.BugleApplication"
-        android:allowBackup="false"
-        android:icon="@drawable/ic_launcher"
-        android:label="@string/app_name"
-        android:theme="@style/BugleTheme"
-        android:supportsRtl="true">
-
-        <!-- Displays a list of conversations -->
-        <activity
-            android:name=".ui.conversationlist.ConversationListActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:label="@string/app_name"
-            android:exported="true"
-            android:theme="@style/BugleTheme.ConversationListActivity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.APP_MESSAGING" />
-            </intent-filter>
-        </activity>
-
-        <activity
-            android:name=".ui.PermissionCheckActivity"
-            android:screenOrientation="portrait"
-            android:configChanges="orientation|screenSize|keyboardHidden" />
-
-        <!-- Launches a conversation (ensures correct app name shown in recents) -->
-        <activity
-            android:name=".ui.conversation.LaunchConversationActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:theme="@style/Invisible"
-            android:noHistory="true"
-            android:exported="true"
-            android:documentLaunchMode="always">
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <action android:name="android.intent.action.SENDTO" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.BROWSABLE" />
-                <data android:scheme="sms" />
-                <data android:scheme="smsto" />
-                <data android:scheme="mms" />
-                <data android:scheme="mmsto" />
-            </intent-filter>
-        </activity>
-
-        <!-- Displays a list of archived conversations -->
-        <activity
-            android:name=".ui.conversationlist.ArchivedConversationListActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:label="@string/archived_activity_title"
-            android:theme="@style/BugleTheme.ArchivedConversationListActivity"
-            android:parentActivityName="com.android.messaging.ui.conversationlist.ConversationListActivity">
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:value="com.android.messaging.ui.conversationlist.ConversationListActivity" />
-        </activity>
-
-        <!-- Displays the contents of a single conversation -->
-        <activity
-            android:name=".ui.conversation.ConversationActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:windowSoftInputMode="stateHidden|adjustResize"
-            android:theme="@style/BugleTheme.ConversationActivity"
-            android:parentActivityName="com.android.messaging.ui.conversationlist.ConversationListActivity">
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:value="com.android.messaging.ui.conversationlist.ConversationListActivity" />
-        </activity>
-
-        <!-- Blocked Participants -->
-        <activity
-            android:name=".ui.BlockedParticipantsActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:label="@string/blocked_contacts_title"
-            android:theme="@style/BugleTheme"
-            android:parentActivityName="com.android.messaging.ui.conversationlist.ConversationListActivity">
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:value="com.android.messaging.ui.conversationlist.ConversationListActivity" />
-        </activity>
-
-        <!-- Full-screen photo viewer -->
-        <activity
-            android:name=".ui.photoviewer.BuglePhotoViewActivity"
-            android:label="@string/photo_view_activity_title"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:theme="@style/BuglePhotoViewTheme"
-        />
-
-        <!-- Settings -->
-        <activity
-            android:name=".ui.appsettings.SettingsActivity"
-            android:label="@string/settings_activity_title"
-            android:theme="@style/BugleTheme.SettingsActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:parentActivityName="com.android.messaging.ui.conversationlist.ConversationListActivity">
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:value="com.android.messaging.ui.conversationlist.ConversationListActivity" />
-        </activity>
-
-        <activity
-            android:name=".ui.appsettings.PerSubscriptionSettingsActivity"
-            android:label="@string/advanced_settings_activity_title"
-            android:theme="@style/BugleTheme.SettingsActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:parentActivityName="com.android.messaging.ui.appsettings.SettingsActivity">
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:value="com.android.messaging.ui.appsettings.SettingsActivity" />
-        </activity>
-
-        <activity
-            android:name=".ui.appsettings.ApplicationSettingsActivity"
-            android:label="@string/general_settings_activity_title"
-            android:theme="@style/BugleTheme.SettingsActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:parentActivityName="com.android.messaging.ui.appsettings.SettingsActivity">
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:exported="true"
-                android:value="com.android.messaging.ui.appsettings.SettingsActivity" />
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
-            </intent-filter>
-        </activity>
-
-        <!-- Handles sharing intent -->
-        <activity
-            android:name=".ui.conversationlist.ShareIntentActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:theme="@style/BugleTheme.DialogActivity"
-            android:excludeFromRecents="true"
-            android:exported="true"
-            android:documentLaunchMode="always">
-            <intent-filter
-                android:label="@string/share_intent_label">
-                <action android:name="android.intent.action.SEND" />
-                <action android:name="android.intent.action.SEND_MULTIPLE" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="text/plain" />
-                <data android:mimeType="text/x-vCard" />
-                <data android:mimeType="text/x-vcard" />
-                <data android:mimeType="image/*" />
-                <data android:mimeType="audio/*" />
-                <data android:mimeType="video/*" />
-                <data android:mimeType="application/ogg" />
-            </intent-filter>
-        </activity>
-
-        <!-- People & Options -->
-        <activity
-            android:name=".ui.conversationsettings.PeopleAndOptionsActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:label="@string/people_and_options_activity_title"
-            android:theme="@style/BugleTheme"
-            android:parentActivityName="com.android.messaging.ui.conversation.ConversationActivity">
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:value="com.android.messaging.ui.conversation.ConversationActivity" />
-        </activity>
-
-         <!-- License -->
-        <activity android:name=".ui.LicenseActivity"
-            android:exported="true"
-            android:theme="@android:style/Theme.Holo.Light.Dialog"
-            android:label="@string/menu_license">
-        </activity>
-
-        <!-- Message Forwarding -->
-        <activity
-            android:name=".ui.conversationlist.ForwardMessageActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:label="@string/forward_message_activity_title"
-            android:theme="@style/BugleTheme.DialogActivity">
-        </activity>
-
-        <!-- Entry point for handling remote input/actions. Currently, this is only used by Android
-             Wear to send voice replies. Since that uses PendingIntents, we don't need to export
-             this activity. If we want other apps to be able to use this activity at will,
-             we'll need to guard it with a signature-matching protected permission. We would also
-             need to add an intent filter and remove the android:exported attribute. -->
-        <activity
-            android:name=".ui.RemoteInputEntrypointActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:exported="false"
-            android:theme="@style/Invisible">
-        </activity>
-
-        <!-- VCard details -->
-        <activity
-            android:name=".ui.VCardDetailActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:label="@string/vcard_detail_activity_title"
-            android:theme="@style/BugleTheme">
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:value=".ui.conversation.ConversationActivity" />
-        </activity>
-
-        <!-- Attachment chooser -->
-        <activity
-            android:name=".ui.attachmentchooser.AttachmentChooserActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:label="@string/attachment_chooser_activity_title"
-            android:theme="@style/BugleTheme"
-            android:parentActivityName="com.android.messaging.ui.conversation.ConversationActivity">
-            <meta-data
-                android:name="android.support.PARENT_ACTIVITY"
-                android:value="com.android.messaging.ui.conversation.ConversationActivity" />
-        </activity>
-
-        <!-- Test activity that we use to host fragments/views. Unfortunately, apparently necessary
-             because Android framework test cases want activity to be in the instrumented package.
-             See http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html
-        -->
-        <activity
-            android:name=".ui.TestActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden">
-        </activity>
-
-        <activity
-            android:name=".ui.debug.DebugMmsConfigActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="user"
-            android:theme="@style/BugleTheme.DialogActivity"
-            android:exported="false">
-        </activity>
-
-        <provider android:name=".datamodel.MessagingContentProvider" android:label="@string/app_name"
-                  android:authorities="com.android.messaging.datamodel.MessagingContentProvider"
-                  android:exported="false" >
-        </provider>
-
-        <provider android:name=".datamodel.MmsFileProvider"
-                  android:authorities="com.android.messaging.datamodel.MmsFileProvider"
-                  android:grantUriPermissions="true"
-                  android:exported="false" />
-
-        <provider android:name=".datamodel.MediaScratchFileProvider"
-                  android:authorities="com.android.messaging.datamodel.MediaScratchFileProvider"
-                  android:grantUriPermissions="true"
-                  android:exported="false" />
-
-
-        <!-- Action Services -->
-        <service android:name=".datamodel.action.ActionServiceImpl"
-                 android:permission="android.permission.BIND_JOB_SERVICE"
-                 android:exported="true"/>
-        <service android:name=".datamodel.action.BackgroundWorkerService"
-                 android:permission="android.permission.BIND_JOB_SERVICE"
-                 android:exported="true"/>
-
-        <!-- Sms and Mms related items -->
-
-        <!-- Intents for Notification and Pre-KLP Delivery -->
-        <!-- Registered with the highest possible priority (max_int) -->
-        <receiver android:name=".receiver.MmsWapPushReceiver"
-                  android:enabled="false"
-                  android:exported="true"
-                  android:permission="android.permission.BROADCAST_WAP_PUSH">
-            <intent-filter android:priority="2147483647">
-                <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
-                <data android:mimeType="application/vnd.wap.mms-message" />
-            </intent-filter>
-        </receiver>
-        <receiver android:name=".receiver.SmsReceiver"
-                  android:enabled="false"
-                  android:exported="true"
-                  android:permission="android.permission.BROADCAST_SMS">
-            <intent-filter android:priority="2147483647">
-                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
-            </intent-filter>
-            <intent-filter android:priority="2147483647">
-                <action android:name="android.provider.Telephony.MMS_DOWNLOADED" />
-            </intent-filter>
-        </receiver>
-
-        <!-- Intents for aborting SMS/MMS broadcasts pre-KLP -->
-        <!-- Registered for a priority just ahead of inbox Messaging apps (2) -->
-        <receiver android:name=".receiver.AbortMmsWapPushReceiver"
-                  android:enabled="false"
-                  android:exported="true"
-                  android:permission="android.permission.BROADCAST_WAP_PUSH">
-            <intent-filter android:priority="3">
-                <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
-                <data android:mimeType="application/vnd.wap.mms-message" />
-            </intent-filter>
-        </receiver>
-        <receiver android:name=".receiver.AbortSmsReceiver"
-                  android:enabled="false"
-                  android:exported="true"
-                  android:permission="android.permission.BROADCAST_SMS">
-            <intent-filter android:priority="3">
-                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
-            </intent-filter>
-        </receiver>
-
-        <!-- Intents for KLP+ Delivery -->
-        <receiver android:name=".receiver.MmsWapPushDeliverReceiver"
-                  android:exported="true"
-                  android:permission="android.permission.BROADCAST_WAP_PUSH">
-            <intent-filter>
-                <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
-                <data android:mimeType="application/vnd.wap.mms-message" />
-            </intent-filter>
-        </receiver>
-        <receiver android:name=".receiver.SmsDeliverReceiver"
-                  android:exported="true"
-                  android:permission="android.permission.BROADCAST_SMS">
-            <intent-filter>
-                <action android:name="android.provider.Telephony.SMS_DELIVER" />
-            </intent-filter>
-        </receiver>
-
-        <receiver android:name=".receiver.SendStatusReceiver"
-                android:exported="false">
-            <intent-filter>
-                <action android:name="com.android.messaging.receiver.SendStatusReceiver.MESSAGE_SENT" />
-                <data android:scheme="content" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.messaging.receiver.SendStatusReceiver.MESSAGE_DELIVERED" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.messaging.receiver.SendStatusReceiver.MMS_SENT" />
-                <data android:scheme="content" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.messaging.receiver.SendStatusReceiver.MMS_DOWNLOADED" />
-                <data android:scheme="content" />
-            </intent-filter>
-        </receiver>
-
-        <service android:name=".datamodel.NoConfirmationSmsSendService"
-                 android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
-                 android:exported="true" >
-            <intent-filter>
-                <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:scheme="sms" />
-                <data android:scheme="smsto" />
-                <data android:scheme="mms" />
-                <data android:scheme="mmsto" />
-            </intent-filter>
-        </service>
-
-        <activity android:name=".ui.ClassZeroActivity"
-                  android:configChanges="orientation|screenSize|keyboardHidden"
-                  android:screenOrientation="user"
-                  android:label="@string/class_0_message_activity"
-                  android:theme="@style/BugleTheme.DialogActivity"
-                  android:launchMode="singleTask"
-                  android:excludeFromRecents="true">
-        </activity>
-
-        <activity android:name=".ui.SmsStorageLowWarningActivity"
-                  android:theme="@style/Translucent"
-                  android:configChanges="orientation|screenSize|keyboardHidden" />
-
-        <activity android:name=".ui.appsettings.ApnSettingsActivity"
-                  android:configChanges="orientation|screenSize|keyboardHidden"
-                  android:screenOrientation="user"
-                  android:theme="@style/BugleTheme"
-                  android:parentActivityName="com.android.messaging.ui.appsettings.SettingsActivity" />
-
-        <activity android:name=".ui.appsettings.ApnEditorActivity"
-                  android:configChanges="orientation|screenSize|keyboardHidden"
-                  android:screenOrientation="user"
-                  android:theme="@style/BugleTheme"
-                  android:parentActivityName="com.android.messaging.ui.appsettings.ApnSettingsActivity"/>
-
-        <receiver android:name=".receiver.StorageStatusReceiver"
-            android:exported="true">
-            <intent-filter>
-                <action android:name="android.intent.action.DEVICE_STORAGE_LOW" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.DEVICE_STORAGE_OK" />
-            </intent-filter>
-        </receiver>
-
-        <receiver android:name=".receiver.BootAndPackageReplacedReceiver"
-            android:exported="true">
-            <intent-filter>
-                <action android:name="android.intent.action.BOOT_COMPLETED"/>
-                <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
-            </intent-filter>
-        </receiver>
-
-        <!-- Broadcast receiver that will be notified to reset notifications -->
-        <receiver
-            android:name=".receiver.NotificationReceiver"
-            android:exported="false">
-        </receiver>
-
-        <!-- Broadcast receiver that will be notified for ActionService alarms. -->
-        <receiver
-            android:name=".datamodel.action.ActionServiceImpl$PendingActionReceiver"
-            android:exported="false">
-            <intent-filter>
-                <action android:name="com.android.messaging.datamodel.PENDING_ACTION" />
-            </intent-filter>
-        </receiver>
-
-        <receiver android:name=".receiver.DefaultSmsSubscriptionChangeReceiver"
-            android:exported="true">
-            <intent-filter>
-                <action android:name="android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED"/>
-            </intent-filter>
-        </receiver>
-
-        <!-- Widget that displays the conversation list -->
-        <receiver android:name=".widget.BugleWidgetProvider"
-                android:exported="true"
-                android:label="@string/widget_conversation_name">
-            <intent-filter>
-                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
-            </intent-filter>
-            <meta-data android:name="android.appwidget.provider"
-                       android:resource="@xml/widget_conversation_list" />
-        </receiver>
-
-        <!-- Widget that displays the messages of a single conversation -->
-        <receiver android:name=".widget.WidgetConversationProvider"
-                android:exported="true"
-                android:label="@string/widget_conversation_name">
-            <intent-filter>
-                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
-            </intent-filter>
-            <meta-data android:name="android.appwidget.provider"
-                       android:resource="@xml/widget_conversation" />
-        </receiver>
-
-        <service android:name=".widget.WidgetConversationListService"
-                 android:permission="android.permission.BIND_REMOTEVIEWS"
-                 android:exported="false" />
-
-        <service android:name=".widget.WidgetConversationService"
-                 android:permission="android.permission.BIND_REMOTEVIEWS"
-                 android:exported="false" />
-
-        <activity android:name=".ui.WidgetPickConversationActivity"
-            android:theme="@style/BugleTheme"
-                android:exported="true"
-            android:label="@string/app_name" >
-            <intent-filter>
-                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
-            </intent-filter>
-        </activity>
-
-        <service android:name="androidx.appcompat.mms.MmsService"/>
-    </application>
-
-</manifest>
diff --git a/CleanSpec.mk b/CleanSpec.mk
deleted file mode 100644
index 79e4ced..0000000
--- a/CleanSpec.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2017 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.
-#
-
-# If you don't need to do a full clean build but would like to touch
-# a file or delete some intermediate files, add a clean step to the end
-# of the list.  These steps will only be run once, if they haven't been
-# run before.
-#
-# E.g.:
-#     $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
-#     $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
-#
-# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
-# files that are missing or have been moved.
-#
-# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
-# Use $(OUT_DIR) to refer to the "out" directory.
-#
-# If you need to re-do something that's already mentioned, just copy
-# the command and add it to the bottom of the list.  E.g., if a change
-# that you made last week required touching a file and a change you
-# made today requires touching the same file, just copy the old
-# touch step and add it to the end of the list.
-#
-# ************************************************
-# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
-# ************************************************
-
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/messaging)
-$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/lib/libgiftranscode.so)
-$(call add-clean-step, rm -f $(PRODUCT_OUT)/system/lib64/libgiftranscode.so)
diff --git a/ForceProguard.mk b/ForceProguard.mk
deleted file mode 100755
index e6f4fea..0000000
--- a/ForceProguard.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-#  Copyright (C) 2015 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.
-
-# Check to see if we need to force proguard to re-run, typically after using tapas to
-# switch to/from eng builds. This is determined by comparing the flag files used in the previous
-# build. If the flag files have changed, proguard is rerun.
-
-# If the LOCAL_MODULE being setup isn't a build target, then don't run ForceProguard.
-ifneq (,$(findstring $(LOCAL_MODULE), $(TARGET_BUILD_APPS)))
-
-PREVIOUS_FLAG_FILES_USED_DIR := $(call local-intermediates-dir,1)
-
-# If the local intermediates dir doesn't exist, ForceProguard won't work.
-ifneq ($(wildcard $(PREVIOUS_FLAG_FILES_USED_DIR)),)
-PREVIOUS_FLAG_FILES_USED_FILE := $(PREVIOUS_FLAG_FILES_USED_DIR)/previous_proguard_flag_files
-PREVIOUS_FLAG_FILES_USED := $(if $(wildcard $(PREVIOUS_FLAG_FILES_USED_FILE)), \
-                                $(shell cat $(PREVIOUS_FLAG_FILES_USED_FILE)))
-
-ifneq ($(strip $(PREVIOUS_FLAG_FILES_USED)), $(strip $(LOCAL_PROGUARD_FLAG_FILES)))
-$(info *** Flag files used for proguard have changed; forcing proguard to rerun.)
-$(shell touch $(LOCAL_PATH)/proguard.flags)
-$(shell echo $(LOCAL_PROGUARD_FLAG_FILES) > $(PREVIOUS_FLAG_FILES_USED_FILE))
-endif
-
-endif
-# End local intermediates directory existence check
-
-endif
-# End LOCAL_MODULE is a build target check
diff --git a/OWNERS b/OWNERS
deleted file mode 100644
index f4ccae0..0000000
--- a/OWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-# Default code reviewers picked from top 3 or more developers.
-# Please update this list if you find better candidates.
-tomtaylor@google.com
-rtenneti@google.com
diff --git a/README b/README
deleted file mode 100644
index 15142ba..0000000
--- a/README
+++ /dev/null
@@ -1,2 +0,0 @@
-This app is not actively supported and the source is only available as a reference. This project will be removed from the source manifest sometime in the future.
-
diff --git a/assets/licenses.html b/assets/licenses.html
deleted file mode 100644
index aa9c3b7..0000000
--- a/assets/licenses.html
+++ /dev/null
@@ -1,666 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<title>
-</title>
-<style>
-body { font-family: sans-serif; }
-pre { background-color: #eeeeee; padding: 1em; white-space: pre-wrap; }
-</style>
-</head>
-<body>
-<h3>Notice for AOSP:</h3>
-<pre>
-    Copyright (c) 2005-2008, 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.
-
-       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.
-
-       Apache License
-       Version 2.0, January 2004
-       http://www.apache.org/licenses/
-
-       TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-       1. Definitions.
-
-          "License" shall mean the terms and conditions for use, reproduction,
-          and distribution as defined by Sections 1 through 9 of this document.
-
-          "Licensor" shall mean the copyright owner or entity authorized by
-          the copyright owner that is granting the License.
-
-          "Legal Entity" shall mean the union of the acting entity and all
-          other entities that control, are controlled by, or are under common
-          control with that entity. For the purposes of this definition,
-          "control" means (i) the power, direct or indirect, to cause the
-          direction or management of such entity, whether by contract or
-          otherwise, or (ii) ownership of fifty percent (50%) or more of the
-          outstanding shares, or (iii) beneficial ownership of such entity.
-
-          "You" (or "Your") shall mean an individual or Legal Entity
-          exercising permissions granted by this License.
-
-          "Source" form shall mean the preferred form for making modifications,
-          including but not limited to software source code, documentation
-          source, and configuration files.
-
-          "Object" form shall mean any form resulting from mechanical
-          transformation or translation of a Source form, including but
-          not limited to compiled object code, generated documentation,
-          and conversions to other media types.
-
-          "Work" shall mean the work of authorship, whether in Source or
-          Object form, made available under the License, as indicated by a
-          copyright notice that is included in or attached to the work
-          (an example is provided in the Appendix below).
-
-          "Derivative Works" shall mean any work, whether in Source or Object
-          form, that is based on (or derived from) the Work and for which the
-          editorial revisions, annotations, elaborations, or other modifications
-          represent, as a whole, an original work of authorship. For the purposes
-          of this License, Derivative Works shall not include works that remain
-          separable from, or merely link (or bind by name) to the interfaces of,
-          the Work and Derivative Works thereof.
-
-          "Contribution" shall mean any work of authorship, including
-          the original version of the Work and any modifications or additions
-          to that Work or Derivative Works thereof, that is intentionally
-          submitted to Licensor for inclusion in the Work by the copyright owner
-          or by an individual or Legal Entity authorized to submit on behalf of
-          the copyright owner. For the purposes of this definition, "submitted"
-          means any form of electronic, verbal, or written communication sent
-          to the Licensor or its representatives, including but not limited to
-          communication on electronic mailing lists, source code control systems,
-          and issue tracking systems that are managed by, or on behalf of, the
-          Licensor for the purpose of discussing and improving the Work, but
-          excluding communication that is conspicuously marked or otherwise
-          designated in writing by the copyright owner as "Not a Contribution."
-
-          "Contributor" shall mean Licensor and any individual or Legal Entity
-          on behalf of whom a Contribution has been received by Licensor and
-          subsequently incorporated within the Work.
-
-       2. Grant of Copyright License. Subject to the terms and conditions of
-          this License, each Contributor hereby grants to You a perpetual,
-          worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-          copyright license to reproduce, prepare Derivative Works of,
-          publicly display, publicly perform, sublicense, and distribute the
-          Work and such Derivative Works in Source or Object form.
-
-       3. Grant of Patent License. Subject to the terms and conditions of
-          this License, each Contributor hereby grants to You a perpetual,
-          worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-          (except as stated in this section) patent license to make, have made,
-          use, offer to sell, sell, import, and otherwise transfer the Work,
-          where such license applies only to those patent claims licensable
-          by such Contributor that are necessarily infringed by their
-          Contribution(s) alone or by combination of their Contribution(s)
-          with the Work to which such Contribution(s) was submitted. If You
-          institute patent litigation against any entity (including a
-          cross-claim or counterclaim in a lawsuit) alleging that the Work
-          or a Contribution incorporated within the Work constitutes direct
-          or contributory patent infringement, then any patent licenses
-          granted to You under this License for that Work shall terminate
-          as of the date such litigation is filed.
-
-       4. Redistribution. You may reproduce and distribute copies of the
-          Work or Derivative Works thereof in any medium, with or without
-          modifications, and in Source or Object form, provided that You
-          meet the following conditions:
-
-          (a) You must give any other recipients of the Work or
-              Derivative Works a copy of this License; and
-
-          (b) You must cause any modified files to carry prominent notices
-              stating that You changed the files; and
-
-          (c) You must retain, in the Source form of any Derivative Works
-              that You distribute, all copyright, patent, trademark, and
-              attribution notices from the Source form of the Work,
-              excluding those notices that do not pertain to any part of
-              the Derivative Works; and
-
-          (d) If the Work includes a "NOTICE" text file as part of its
-              distribution, then any Derivative Works that You distribute must
-              include a readable copy of the attribution notices contained
-              within such NOTICE file, excluding those notices that do not
-              pertain to any part of the Derivative Works, in at least one
-              of the following places: within a NOTICE text file distributed
-              as part of the Derivative Works; within the Source form or
-              documentation, if provided along with the Derivative Works; or,
-              within a display generated by the Derivative Works, if and
-              wherever such third-party notices normally appear. The contents
-              of the NOTICE file are for informational purposes only and
-              do not modify the License. You may add Your own attribution
-              notices within Derivative Works that You distribute, alongside
-              or as an addendum to the NOTICE text from the Work, provided
-              that such additional attribution notices cannot be construed
-              as modifying the License.
-
-          You may add Your own copyright statement to Your modifications and
-          may provide additional or different license terms and conditions
-          for use, reproduction, or distribution of Your modifications, or
-          for any such Derivative Works as a whole, provided Your use,
-          reproduction, and distribution of the Work otherwise complies with
-          the conditions stated in this License.
-
-       5. Submission of Contributions. Unless You explicitly state otherwise,
-          any Contribution intentionally submitted for inclusion in the Work
-          by You to the Licensor shall be under the terms and conditions of
-          this License, without any additional terms or conditions.
-          Notwithstanding the above, nothing herein shall supersede or modify
-          the terms of any separate license agreement you may have executed
-          with Licensor regarding such Contributions.
-
-       6. Trademarks. This License does not grant permission to use the trade
-          names, trademarks, service marks, or product names of the Licensor,
-          except as required for reasonable and customary use in describing the
-          origin of the Work and reproducing the content of the NOTICE file.
-
-       7. Disclaimer of Warranty. Unless required by applicable law or
-          agreed to in writing, Licensor provides the Work (and each
-          Contributor provides its Contributions) on an "AS IS" BASIS,
-          WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-          implied, including, without limitation, any warranties or conditions
-          of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-          PARTICULAR PURPOSE. You are solely responsible for determining the
-          appropriateness of using or redistributing the Work and assume any
-          risks associated with Your exercise of permissions under this License.
-
-       8. Limitation of Liability. In no event and under no legal theory,
-          whether in tort (including negligence), contract, or otherwise,
-          unless required by applicable law (such as deliberate and grossly
-          negligent acts) or agreed to in writing, shall any Contributor be
-          liable to You for damages, including any direct, indirect, special,
-          incidental, or consequential damages of any character arising as a
-          result of this License or out of the use or inability to use the
-          Work (including but not limited to damages for loss of goodwill,
-          work stoppage, computer failure or malfunction, or any and all
-          other commercial damages or losses), even if such Contributor
-          has been advised of the possibility of such damages.
-
-       9. Accepting Warranty or Additional Liability. While redistributing
-          the Work or Derivative Works thereof, You may choose to offer,
-          and charge a fee for, acceptance of support, warranty, indemnity,
-          or other liability obligations and/or rights consistent with this
-          License. However, in accepting such obligations, You may act only
-          on Your own behalf and on Your sole responsibility, not on behalf
-          of any other Contributor, and only if You agree to indemnify,
-          defend, and hold each Contributor harmless for any liability
-          incurred by, or claims asserted against, such Contributor by reason
-          of your accepting any such warranty or additional liability.
-</pre>
-
-<h3>Notices for Guava: Google Core Libraries for Java</h3>
-<pre>
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-</pre>
-
-<h3>Notices for JSR 305</h3>
-<pre>
-Copyright (c) 2007-2009, JSR305 expert group
-All rights reserved.
-
-http://www.opensource.org/licenses/bsd-license.php
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of the JSR305 expert group nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-</pre>
-
-<h3>Notices for libphonenumber</h3>
-<pre>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-</pre>
-
-<h3>Notices for GIFLIB</h3>
-<pre>
-The GIFLIB distribution is Copyright (c) 1997  Eric S. Raymond
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-</pre>
-</body></html>
diff --git a/jni/Android.bp b/jni/Android.bp
deleted file mode 100644
index 22840ea..0000000
--- a/jni/Android.bp
+++ /dev/null
@@ -1,40 +0,0 @@
-//  Copyright (C) 2015 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 {
-    // See: http://go/android-license-faq
-    default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-cc_library_shared {
-    name: "libgiftranscode",
-    static_libs: ["libgif"],
-    // Link to Android logging (liblog.so) and dynamic linker (libdl.so) libraries
-    shared_libs: [
-        "liblog",
-        "libdl",
-    ],
-    // for including the jni.h file
-    header_libs: ["jni_headers"],
-    include_dirs: ["external/giflib"],
-    srcs: ["GifTranscoder.cpp"],
-    cflags: [
-        "-Wno-unused-parameter",
-        "-Wno-switch",
-    ],
-    sdk_version: "19",
-    // LLVM libc++
-    stl: "c++_static",
-    product_specific: true,
-}
diff --git a/jni/GifTranscoder.cpp b/jni/GifTranscoder.cpp
deleted file mode 100644
index 324d315..0000000
--- a/jni/GifTranscoder.cpp
+++ /dev/null
@@ -1,583 +0,0 @@
-/*
- * Copyright (C) 2015 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.
- */
-
-#include <jni.h>
-#include <time.h>
-#include <stdio.h>
-#include <memory>
-#include <vector>
-
-#include <android/log.h>
-
-#include "GifTranscoder.h"
-
-#define SQUARE(a) ((a)*(a))
-
-// GIF does not support partial transparency, so our alpha channels are always 0x0 or 0xff.
-static const ColorARGB TRANSPARENT = 0x0;
-
-#define ALPHA(color) (((color) >> 24) & 0xff)
-#define RED(color)   (((color) >> 16) & 0xff)
-#define GREEN(color) (((color) >>  8) & 0xff)
-#define BLUE(color)  (((color) >>  0) & 0xff)
-
-#define MAKE_COLOR_ARGB(a, r, g, b) \
-    ((a) << 24 | (r) << 16 | (g) << 8 | (b))
-
-#define MAX_COLOR_DISTANCE (255 * 255 * 255)
-
-#define TAG "GifTranscoder.cpp"
-#define LOGD_ENABLED 0
-#if LOGD_ENABLED
-#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__))
-#else
-#define LOGD(...) ((void)0)
-#endif
-#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__))
-#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__))
-#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__))
-
-// This macro expects the assertion to pass, but logs a FATAL if not.
-#define ASSERT(cond, ...) \
-    ( (__builtin_expect((cond) == 0, 0)) \
-    ? ((void)__android_log_assert(#cond, TAG, ## __VA_ARGS__)) \
-    : (void) 0 )
-#define ASSERT_ENABLED 1
-
-namespace {
-
-// Current time in milliseconds since Unix epoch.
-double now(void) {
-    struct timespec res;
-    clock_gettime(CLOCK_REALTIME, &res);
-    return 1000.0 * res.tv_sec + (double) res.tv_nsec / 1e6;
-}
-
-// Gets the pixel at position (x,y) from a buffer that uses row-major order to store an image with
-// the specified width.
-template <typename T>
-T* getPixel(T* buffer, int width, int x, int y) {
-    return buffer + (y * width + x);
-}
-
-} // namespace
-
-int GifTranscoder::transcode(const char* pathIn, const char* pathOut) {
-    int error;
-    double t0;
-    GifFileType* gifIn;
-    GifFileType* gifOut;
-
-    // Automatically closes the GIF files when this method returns
-    GifFilesCloser closer;
-
-    gifIn = DGifOpenFileName(pathIn, &error);
-    if (gifIn) {
-        closer.setGifIn(gifIn);
-        LOGD("Opened input GIF: %s", pathIn);
-    } else {
-        LOGE("Could not open input GIF: %s, error = %d", pathIn, error);
-        return GIF_ERROR;
-    }
-
-    gifOut = EGifOpenFileName(pathOut, false, &error);
-    if (gifOut) {
-        closer.setGifOut(gifOut);
-        LOGD("Opened output GIF: %s", pathOut);
-    } else {
-        LOGE("Could not open output GIF: %s, error = %d", pathOut, error);
-        return GIF_ERROR;
-    }
-
-    t0 = now();
-    if (resizeBoxFilter(gifIn, gifOut)) {
-        LOGD("Resized GIF in %.2f ms", now() - t0);
-    } else {
-        LOGE("Could not resize GIF");
-        return GIF_ERROR;
-    }
-
-    return GIF_OK;
-}
-
-bool GifTranscoder::resizeBoxFilter(GifFileType* gifIn, GifFileType* gifOut) {
-    ASSERT(gifIn != NULL, "gifIn cannot be NULL");
-    ASSERT(gifOut != NULL, "gifOut cannot be NULL");
-
-    if (gifIn->SWidth < 0 || gifIn->SHeight < 0) {
-        LOGE("Input GIF has invalid size: %d x %d", gifIn->SWidth, gifIn->SHeight);
-        return false;
-    }
-
-    // Output GIF will be 50% the size of the original.
-    if (EGifPutScreenDesc(gifOut,
-                          gifIn->SWidth / 2,
-                          gifIn->SHeight / 2,
-                          gifIn->SColorResolution,
-                          gifIn->SBackGroundColor,
-                          gifIn->SColorMap) == GIF_ERROR) {
-        LOGE("Could not write screen descriptor");
-        return false;
-    }
-    LOGD("Wrote screen descriptor");
-
-    // Index of the current image.
-    int imageIndex = 0;
-
-    // Transparent color of the current image.
-    int transparentColor = NO_TRANSPARENT_COLOR;
-
-    // Buffer for reading raw images from the input GIF.
-    std::vector<GifByteType> srcBuffer(gifIn->SWidth * gifIn->SHeight);
-
-    // Buffer for rendering images from the input GIF.
-    std::unique_ptr<ColorARGB[]> renderBuffer(new ColorARGB[gifIn->SWidth * gifIn->SHeight]);
-
-    // Buffer for writing new images to output GIF (one row at a time).
-    std::unique_ptr<GifByteType[]> dstRowBuffer(new GifByteType[gifOut->SWidth]);
-
-    // Many GIFs use DISPOSE_DO_NOT to make images draw on top of previous images. They can also
-    // use DISPOSE_BACKGROUND to clear the last image region before drawing the next one. We need
-    // to keep track of the disposal mode as we go along to properly render the GIF.
-    int disposalMode = DISPOSAL_UNSPECIFIED;
-    int prevImageDisposalMode = DISPOSAL_UNSPECIFIED;
-    GifImageDesc prevImageDimens;
-
-    // Background color (applies to entire GIF).
-    ColorARGB bgColor = TRANSPARENT;
-
-    GifRecordType recordType;
-    do {
-        if (DGifGetRecordType(gifIn, &recordType) == GIF_ERROR) {
-            LOGE("Could not get record type");
-            return false;
-        }
-        LOGD("Read record type: %d", recordType);
-        switch (recordType) {
-            case IMAGE_DESC_RECORD_TYPE: {
-                if (DGifGetImageDesc(gifIn) == GIF_ERROR) {
-                    LOGE("Could not read image descriptor (%d)", imageIndex);
-                    return false;
-                }
-
-                // Check the current image position.
-                if (gifIn->Image.Left < 0 ||
-                        gifIn->Image.Top < 0 ||
-                        gifIn->Image.Left + gifIn->Image.Width > gifIn->SWidth ||
-                        gifIn->Image.Top + gifIn->Image.Height > gifIn->SHeight) {
-                    LOGE("GIF image extends beyond logical screen");
-                    return false;
-                }
-
-                // Write the new image descriptor.
-                if (EGifPutImageDesc(gifOut,
-                                     0, // Left
-                                     0, // Top
-                                     gifOut->SWidth,
-                                     gifOut->SHeight,
-                                     false, // Interlace
-                                     gifIn->Image.ColorMap) == GIF_ERROR) {
-                    LOGE("Could not write image descriptor (%d)", imageIndex);
-                    return false;
-                }
-
-                // Read the image from the input GIF. The buffer is already initialized to the
-                // size of the GIF, which is usually equal to the size of all the images inside it.
-                // If not, the call to resize below ensures that the buffer is the right size.
-                srcBuffer.resize(gifIn->Image.Width * gifIn->Image.Height);
-                if (readImage(gifIn, srcBuffer.data()) == false) {
-                    LOGE("Could not read image data (%d)", imageIndex);
-                    return false;
-                }
-                LOGD("Read image data (%d)", imageIndex);
-                // Render the image from the input GIF.
-                if (renderImage(gifIn,
-                                srcBuffer.data(),
-                                imageIndex,
-                                transparentColor,
-                                renderBuffer.get(),
-                                bgColor,
-                                prevImageDimens,
-                                prevImageDisposalMode) == false) {
-                    LOGE("Could not render %d", imageIndex);
-                    return false;
-                }
-                LOGD("Rendered image (%d)", imageIndex);
-
-                // Generate the image in the output GIF.
-                for (int y = 0; y < gifOut->SHeight; y++) {
-                    for (int x = 0; x < gifOut->SWidth; x++) {
-                      const GifByteType dstColorIndex = computeNewColorIndex(
-                          gifIn, transparentColor, renderBuffer.get(), x, y);
-                      *(dstRowBuffer.get() + x) = dstColorIndex;
-                    }
-                    if (EGifPutLine(gifOut, dstRowBuffer.get(), gifOut->SWidth) == GIF_ERROR) {
-                        LOGE("Could not write raster data (%d)", imageIndex);
-                        return false;
-                    }
-                }
-                LOGD("Wrote raster data (%d)", imageIndex);
-
-                // Save the disposal mode for rendering the next image.
-                // We only support DISPOSE_DO_NOT and DISPOSE_BACKGROUND.
-                prevImageDisposalMode = disposalMode;
-                if (prevImageDisposalMode == DISPOSAL_UNSPECIFIED) {
-                    prevImageDisposalMode = DISPOSE_DO_NOT;
-                } else if (prevImageDisposalMode == DISPOSE_PREVIOUS) {
-                    prevImageDisposalMode = DISPOSE_BACKGROUND;
-                }
-                if (prevImageDisposalMode == DISPOSE_BACKGROUND) {
-                    prevImageDimens.Left = gifIn->Image.Left;
-                    prevImageDimens.Top = gifIn->Image.Top;
-                    prevImageDimens.Width = gifIn->Image.Width;
-                    prevImageDimens.Height = gifIn->Image.Height;
-                }
-
-                if (gifOut->Image.ColorMap) {
-                    GifFreeMapObject(gifOut->Image.ColorMap);
-                    gifOut->Image.ColorMap = NULL;
-                }
-
-                imageIndex++;
-            } break;
-            case EXTENSION_RECORD_TYPE: {
-                int extCode;
-                GifByteType* ext;
-                if (DGifGetExtension(gifIn, &extCode, &ext) == GIF_ERROR) {
-                    LOGE("Could not read extension block");
-                    return false;
-                }
-                LOGD("Read extension block, code: %d", extCode);
-                if (extCode == GRAPHICS_EXT_FUNC_CODE) {
-                    GraphicsControlBlock gcb;
-                    if (DGifExtensionToGCB(ext[0], ext + 1, &gcb) == GIF_ERROR) {
-                        LOGE("Could not interpret GCB extension");
-                        return false;
-                    }
-                    transparentColor = gcb.TransparentColor;
-
-                    // This logic for setting the background color based on the first GCB
-                    // doesn't quite match the GIF spec, but empirically it seems to work and it
-                    // matches what libframesequence (Rastermill) does.
-                    if (imageIndex == 0 && gifIn->SColorMap) {
-                        if (gcb.TransparentColor == NO_TRANSPARENT_COLOR) {
-                            if (gifIn->SBackGroundColor < 0 ||
-                                gifIn->SBackGroundColor >= gifIn->SColorMap->ColorCount) {
-                                LOGE("SBackGroundColor overflow");
-                                return false;
-                            }
-                            GifColorType bgColorIndex =
-                                    gifIn->SColorMap->Colors[gifIn->SBackGroundColor];
-                            bgColor = gifColorToColorARGB(bgColorIndex);
-                            LOGD("Set background color based on first GCB");
-                        }
-                    }
-
-                    // Record the original disposal mode and then update it.
-                    disposalMode = gcb.DisposalMode;
-                    gcb.DisposalMode = DISPOSE_BACKGROUND;
-                    EGifGCBToExtension(&gcb, ext + 1);
-                }
-                if (EGifPutExtensionLeader(gifOut, extCode) == GIF_ERROR) {
-                    LOGE("Could not write extension leader");
-                    return false;
-                }
-                if (EGifPutExtensionBlock(gifOut, ext[0], ext + 1) == GIF_ERROR) {
-                    LOGE("Could not write extension block");
-                    return false;
-                }
-                LOGD("Wrote extension block");
-                while (ext != NULL) {
-                    if (DGifGetExtensionNext(gifIn, &ext) == GIF_ERROR) {
-                        LOGE("Could not read extension continuation");
-                        return false;
-                    }
-                    if (ext != NULL) {
-                        LOGD("Read extension continuation");
-                        if (EGifPutExtensionBlock(gifOut, ext[0], ext + 1) == GIF_ERROR) {
-                            LOGE("Could not write extension continuation");
-                            return false;
-                        }
-                        LOGD("Wrote extension continuation");
-                    }
-                }
-                if (EGifPutExtensionTrailer(gifOut) == GIF_ERROR) {
-                    LOGE("Could not write extension trailer");
-                    return false;
-                }
-            } break;
-        }
-
-    } while (recordType != TERMINATE_RECORD_TYPE);
-    LOGD("No more records");
-
-    return true;
-}
-
-bool GifTranscoder::readImage(GifFileType* gifIn, GifByteType* rasterBits) {
-    if (gifIn->Image.Interlace) {
-        int interlacedOffset[] = { 0, 4, 2, 1 };
-        int interlacedJumps[] = { 8, 8, 4, 2 };
-
-        // Need to perform 4 passes on the image
-        for (int i = 0; i < 4; i++) {
-            for (int j = interlacedOffset[i]; j < gifIn->Image.Height; j += interlacedJumps[i]) {
-                if (DGifGetLine(gifIn,
-                                rasterBits + j * gifIn->Image.Width,
-                                gifIn->Image.Width) == GIF_ERROR) {
-                    LOGE("Could not read interlaced raster data");
-                    return false;
-                }
-            }
-        }
-    } else {
-        if (DGifGetLine(gifIn, rasterBits, gifIn->Image.Width * gifIn->Image.Height) == GIF_ERROR) {
-            LOGE("Could not read raster data");
-            return false;
-        }
-    }
-    return true;
-}
-
-bool GifTranscoder::renderImage(GifFileType* gifIn,
-                                GifByteType* rasterBits,
-                                int imageIndex,
-                                int transparentColorIndex,
-                                ColorARGB* renderBuffer,
-                                ColorARGB bgColor,
-                                GifImageDesc prevImageDimens,
-                                int prevImageDisposalMode) {
-    ASSERT(imageIndex < gifIn->ImageCount,
-           "Image index %d is out of bounds (count=%d)", imageIndex, gifIn->ImageCount);
-
-    ColorMapObject* colorMap = getColorMap(gifIn);
-    if (colorMap == NULL) {
-        LOGE("No GIF color map found");
-        return false;
-    }
-
-    // Clear all or part of the background, before drawing the first image and maybe before drawing
-    // subsequent images (depending on the DisposalMode).
-    if (imageIndex == 0) {
-        fillRect(renderBuffer, gifIn->SWidth, gifIn->SHeight,
-                 0, 0, gifIn->SWidth, gifIn->SHeight, bgColor);
-    } else if (prevImageDisposalMode == DISPOSE_BACKGROUND) {
-        fillRect(renderBuffer, gifIn->SWidth, gifIn->SHeight,
-                 prevImageDimens.Left, prevImageDimens.Top,
-                 prevImageDimens.Width, prevImageDimens.Height, TRANSPARENT);
-    }
-
-    // Paint this image onto the canvas
-    for (int y = 0; y < gifIn->Image.Height; y++) {
-        for (int x = 0; x < gifIn->Image.Width; x++) {
-            GifByteType colorIndex = *getPixel(rasterBits, gifIn->Image.Width, x, y);
-            if (colorIndex >= colorMap->ColorCount) {
-                LOGE("Color Index %d is out of bounds (count=%d)", colorIndex,
-                    colorMap->ColorCount);
-                return false;
-            }
-
-            // This image may be smaller than the GIF's "logical screen"
-            int renderX = x + gifIn->Image.Left;
-            int renderY = y + gifIn->Image.Top;
-
-            // Skip drawing transparent pixels if this image renders on top of the last one
-            if (imageIndex > 0 && prevImageDisposalMode == DISPOSE_DO_NOT &&
-                colorIndex == transparentColorIndex) {
-                continue;
-            }
-
-            ColorARGB* renderPixel = getPixel(renderBuffer, gifIn->SWidth, renderX, renderY);
-            *renderPixel = getColorARGB(colorMap, transparentColorIndex, colorIndex);
-        }
-    }
-    return true;
-}
-
-void GifTranscoder::fillRect(ColorARGB* renderBuffer,
-                             int imageWidth,
-                             int imageHeight,
-                             int left,
-                             int top,
-                             int width,
-                             int height,
-                             ColorARGB color) {
-    ASSERT(left + width <= imageWidth, "Rectangle is outside image bounds");
-    ASSERT(top + height <= imageHeight, "Rectangle is outside image bounds");
-
-    for (int y = 0; y < height; y++) {
-        for (int x = 0; x < width; x++) {
-            ColorARGB* renderPixel = getPixel(renderBuffer, imageWidth, x + left, y + top);
-            *renderPixel = color;
-        }
-    }
-}
-
-GifByteType GifTranscoder::computeNewColorIndex(GifFileType* gifIn,
-                                                int transparentColorIndex,
-                                                ColorARGB* renderBuffer,
-                                                int x,
-                                                int y) {
-    ColorMapObject* colorMap = getColorMap(gifIn);
-
-    // Compute the average color of 4 adjacent pixels from the input image.
-    ColorARGB c1 = *getPixel(renderBuffer, gifIn->SWidth, x * 2, y * 2);
-    ColorARGB c2 = *getPixel(renderBuffer, gifIn->SWidth, x * 2 + 1, y * 2);
-    ColorARGB c3 = *getPixel(renderBuffer, gifIn->SWidth, x * 2, y * 2 + 1);
-    ColorARGB c4 = *getPixel(renderBuffer, gifIn->SWidth, x * 2 + 1, y * 2 + 1);
-    ColorARGB avgColor = computeAverage(c1, c2, c3, c4);
-
-    // Search the color map for the best match.
-    return findBestColor(colorMap, transparentColorIndex, avgColor);
-}
-
-ColorARGB GifTranscoder::computeAverage(ColorARGB c1, ColorARGB c2, ColorARGB c3, ColorARGB c4) {
-    char avgAlpha = (char)(((int) ALPHA(c1) + (int) ALPHA(c2) +
-                            (int) ALPHA(c3) + (int) ALPHA(c4)) / 4);
-    char avgRed =   (char)(((int) RED(c1) + (int) RED(c2) +
-                            (int) RED(c3) + (int) RED(c4)) / 4);
-    char avgGreen = (char)(((int) GREEN(c1) + (int) GREEN(c2) +
-                            (int) GREEN(c3) + (int) GREEN(c4)) / 4);
-    char avgBlue =  (char)(((int) BLUE(c1) + (int) BLUE(c2) +
-                            (int) BLUE(c3) + (int) BLUE(c4)) / 4);
-    return MAKE_COLOR_ARGB(avgAlpha, avgRed, avgGreen, avgBlue);
-}
-
-GifByteType GifTranscoder::findBestColor(ColorMapObject* colorMap, int transparentColorIndex,
-                                         ColorARGB targetColor) {
-    // Return the transparent color if the average alpha is zero.
-    char alpha = ALPHA(targetColor);
-    if (alpha == 0 && transparentColorIndex != NO_TRANSPARENT_COLOR) {
-        return transparentColorIndex;
-    }
-
-    GifByteType closestColorIndex = 0;
-    int closestColorDistance = MAX_COLOR_DISTANCE;
-    for (int i = 0; i < colorMap->ColorCount; i++) {
-        // Skip the transparent color (we've already eliminated that option).
-        if (i == transparentColorIndex) {
-            continue;
-        }
-        ColorARGB indexedColor = gifColorToColorARGB(colorMap->Colors[i]);
-        int distance = computeDistance(targetColor, indexedColor);
-        if (distance < closestColorDistance) {
-            closestColorIndex = i;
-            closestColorDistance = distance;
-        }
-    }
-    return closestColorIndex;
-}
-
-int GifTranscoder::computeDistance(ColorARGB c1, ColorARGB c2) {
-    return SQUARE(RED(c1) - RED(c2)) +
-           SQUARE(GREEN(c1) - GREEN(c2)) +
-           SQUARE(BLUE(c1) - BLUE(c2));
-}
-
-ColorMapObject* GifTranscoder::getColorMap(GifFileType* gifIn) {
-    if (gifIn->Image.ColorMap) {
-        return gifIn->Image.ColorMap;
-    }
-    return gifIn->SColorMap;
-}
-
-ColorARGB GifTranscoder::getColorARGB(ColorMapObject* colorMap, int transparentColorIndex,
-                                      GifByteType colorIndex) {
-    if (colorIndex == transparentColorIndex) {
-        return TRANSPARENT;
-    }
-    return gifColorToColorARGB(colorMap->Colors[colorIndex]);
-}
-
-ColorARGB GifTranscoder::gifColorToColorARGB(const GifColorType& color) {
-    return MAKE_COLOR_ARGB(0xff, color.Red, color.Green, color.Blue);
-}
-
-GifFilesCloser::~GifFilesCloser() {
-    if (mGifIn) {
-        DGifCloseFile(mGifIn, NULL);
-        mGifIn = NULL;
-    }
-    if (mGifOut) {
-        EGifCloseFile(mGifOut, NULL);
-        mGifOut = NULL;
-    }
-}
-
-void GifFilesCloser::setGifIn(GifFileType* gifIn) {
-    ASSERT(mGifIn == NULL, "mGifIn is already set");
-    mGifIn = gifIn;
-}
-
-void GifFilesCloser::releaseGifIn() {
-    ASSERT(mGifIn != NULL, "mGifIn is already NULL");
-    mGifIn = NULL;
-}
-
-void GifFilesCloser::setGifOut(GifFileType* gifOut) {
-    ASSERT(mGifOut == NULL, "mGifOut is already set");
-    mGifOut = gifOut;
-}
-
-void GifFilesCloser::releaseGifOut() {
-    ASSERT(mGifOut != NULL, "mGifOut is already NULL");
-    mGifOut = NULL;
-}
-
-// JNI stuff
-
-jboolean transcode(JNIEnv* env, jobject clazz, jstring filePath, jstring outFilePath) {
-    const char* pathIn = env->GetStringUTFChars(filePath, JNI_FALSE);
-    const char* pathOut = env->GetStringUTFChars(outFilePath, JNI_FALSE);
-
-    GifTranscoder transcoder;
-    int gifCode = transcoder.transcode(pathIn, pathOut);
-
-    env->ReleaseStringUTFChars(filePath, pathIn);
-    env->ReleaseStringUTFChars(outFilePath, pathOut);
-
-    return (gifCode == GIF_OK);
-}
-
-const char *kClassPathName = "com/android/messaging/util/GifTranscoder";
-
-JNINativeMethod kMethods[] = {
-        { "transcodeInternal", "(Ljava/lang/String;Ljava/lang/String;)Z", (void*)transcode },
-};
-
-int registerNativeMethods(JNIEnv* env, const char* className,
-                          JNINativeMethod* gMethods, int numMethods) {
-    jclass clazz = env->FindClass(className);
-    if (clazz == NULL) {
-        return JNI_FALSE;
-    }
-    if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
-        return JNI_FALSE;
-    }
-    return JNI_TRUE;
-}
-
-jint JNI_OnLoad(JavaVM* vm, void* reserved) {
-    JNIEnv* env;
-    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
-        return -1;
-    }
-    if (!registerNativeMethods(env, kClassPathName,
-                               kMethods, sizeof(kMethods) / sizeof(kMethods[0]))) {
-      return -1;
-    }
-    return JNI_VERSION_1_6;
-}
diff --git a/jni/GifTranscoder.h b/jni/GifTranscoder.h
deleted file mode 100644
index 39ecc24..0000000
--- a/jni/GifTranscoder.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2015 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.
- */
-
-#ifndef GIF_TRANSCODER_H
-#define GIF_TRANSCODER_H
-
-#include <sys/types.h>
-
-#include "gif_lib.h"
-
-// 24-bit color with alpha, stored in order: A, R, G, B.
-// The internal GIF render buffer stores pixels using this format.
-typedef uint32_t ColorARGB;
-
-// Compresses a GIF (probably animated) so it can be sent via MMS, which generally has a 1 MB limit
-// on attachments. GIF image data is already compressed (LZW), so to achieve further reduction in
-// file size, we reduce the image dimensions.
-//
-// Helpful GIF references:
-// GIF89A spec: http://www.w3.org/Graphics/GIF/spec-gif89a.txt
-// What's in a GIF: http://giflib.sourceforge.net/whatsinagif/index.html
-//
-class GifTranscoder {
-public:
-    GifTranscoder() {}
-    ~GifTranscoder() {}
-
-    // Resizes a GIF's width and height to 50% of their original dimensions. The new file is
-    // written to pathOut.
-    //
-    // The image is resized using a box filter, which averages the colors in each 2x2 box of pixels
-    // in the source to generate the color of the pixel in the destination.
-    //
-    // Returns GIF_OK (1) on success, or GIF_ERROR (0) on failure.
-    int transcode(const char* pathIn, const char* pathOut);
-
-private:
-    // Implementation of the box filter algorithm.
-    static bool resizeBoxFilter(GifFileType* gifIn, GifFileType* gifOut);
-
-    // Reads the raster data for the current image of the GIF.
-    static bool readImage(GifFileType* gifIn, GifByteType* rasterBits);
-
-    // Renders the current image of the GIF into the supplied render buffer.
-    static bool renderImage(GifFileType* gifIn,
-                            GifByteType* rasterBits,
-                            int imageIndex,
-                            int transparentColorIndex,
-                            ColorARGB* renderBuffer,
-                            ColorARGB bgColor,
-                            GifImageDesc prevImageDimens,
-                            int prevImageDisposalMode);
-
-    // Fills a rectangle in the buffer with a solid color.
-    static void fillRect(ColorARGB* renderBuffer,
-                         int imageWidth,
-                         int imageHeight,
-                         int left,
-                         int top,
-                         int width,
-                         int height,
-                         ColorARGB color);
-
-    // Computes the color for the pixel (x,y) in the current image in the output GIF.
-    static GifByteType computeNewColorIndex(GifFileType* gifIn,
-                                            int transparentColorIndex,
-                                            ColorARGB* renderBuffer,
-                                            int x,
-                                            int y);
-
-    // Computes the average color (by averaging the per-channel (ARGB) values).
-    static ColorARGB computeAverage(ColorARGB c1, ColorARGB c2, ColorARGB c3, ColorARGB c4);
-
-    // Searches a color map for the color closest (Euclidean distance) to the target color.
-    static GifByteType findBestColor(ColorMapObject* colorMap, int transparentColorIndex,
-                                     ColorARGB targetColor);
-
-    // Computes distance (squared) between 2 colors, considering each channel a separate dimension.
-    static int computeDistance(ColorARGB c1, ColorARGB c2);
-
-    // Returns the local color map of the current image (if any), or else the global color map.
-    static ColorMapObject* getColorMap(GifFileType* gifIn);
-
-    // Returns an indexed color from the color map.
-    static ColorARGB getColorARGB(ColorMapObject* colorMap, int transparentColorIndex,
-                                  GifByteType colorIndex);
-
-    // Converts a 24-bit GIF color (RGB) to a 32-bit ARGB color.
-    static ColorARGB gifColorToColorARGB(const GifColorType& color);
-};
-
-// Wrapper class that automatically closes the GIF files when the wrapper goes out of scope.
-class GifFilesCloser {
-public:
-    GifFilesCloser() {}
-    ~GifFilesCloser();
-
-    void setGifIn(GifFileType* gifIn);
-    void releaseGifIn();
-
-    void setGifOut(GifFileType* gifOut);
-    void releaseGifOut();
-
-private:
-    GifFileType* mGifIn = NULL;
-    GifFileType* mGifOut = NULL;
-};
-
-#endif // GIF_TRANSCODER_H
diff --git a/proguard-release.flags b/proguard-release.flags
deleted file mode 100644
index 67ae150..0000000
--- a/proguard-release.flags
+++ /dev/null
@@ -1,26 +0,0 @@
-#  Copyright (C) 2015 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.
-
--keep class com.android.messaging.ui.contact.* { *; }
-
--assumenosideeffects public class com.android.messaging.util.Trace {
-    public void beginSection(...);
-    public void endSection(...);
-}
--assumenosideeffects public class com.android.messaging.util.Assert {
-    private void setIfEngBuild();
-}
--assumenosideeffects public class com.android.messaging.util.DebugUtils {
-    public void logCurrentMethod(...);
-}
diff --git a/proguard-test.flags b/proguard-test.flags
deleted file mode 100755
index 50f69a2..0000000
--- a/proguard-test.flags
+++ /dev/null
@@ -1,41 +0,0 @@
-#  Copyright (C) 2015 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.
-#
-# These flags are in addition to the one in proguard.flags, which is included by the build
-# directives in Android.mk.
-
--dontobfuscate
--dontoptimize
-
-# FLAG(dnotario): Until we rationalize how to handle tests (extensive unit tests will want similar
-# settings to these, but maybe we want to require VisibleForTesting attribute), just expose all
-# non-private methods. This means we cannot run tests on user builds for the moment.
--keep class com.android.messaging.* {
-  !private *;
-}
-
--keep class com.android.messaging.*.* {
-  !private *;
-}
-
--keep class com.android.messaging.*.*.* {
-  !private *;
-}
-
--keep class com.android.messaging.ui.*.* { *; }
-
-# Keep the classes needed by emma
--keep class com.vladium.** { *; }
-
-# End of Test Rules
diff --git a/proguard.flags b/proguard.flags
deleted file mode 100644
index c5bbb42..0000000
--- a/proguard.flags
+++ /dev/null
@@ -1,64 +0,0 @@
-#  Copyright (C) 2015 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.
-#
-# Keep enough data for stack traces
--renamesourcefileattribute SourceFile
--keepattributes SourceFile,LineNumberTable,*Annotation*
-
-# Keep classes and methods that have the guava @VisibleForTesting annotation
--keep @com.google.common.annotations.VisibleForTesting class *
--keepclassmembers class * {
-  @com.google.common.annotations.VisibleForTesting *;
-}
--keep class com.android.messaging.* { *; }
--keep class com.android.messaging.*.* { *; }
--keep class com.android.messaging.*.*.* { *; }
-
-# Keep methods that have the @VisibleForAnimation annotation
--keep @interface com.android.messaging.annotation.VisibleForAnimation
--keepclassmembers class * {
-  @com.android.messaging.annotation.VisibleForAnimation *;
-}
-
--keep public class * extends android.app.Activity
--keep public class * extends android.app.Application
--keep public class * extends android.app.Service
--keep public class * extends android.content.BroadcastReceiver
--keep public class * extends android.content.ContentProvider
--keep public class * extends android.app.backup.BackupAgentHelper
--keep public class * extends android.preference.Preference
--keep public class * extends androidx.fragment.app.Fragment
--keep public class com.android.vcard.* { *; }
-
--keep class androidx.collection.* { *; }
--keep class androidx.core.* { *; }
--keep class androidx.core.*.* { *; }
--keep class androidx.appcompat.* { *; }
--keep class androidx.appcompat.*.* { *; }
--keep class androidx.recyclerview.widget.* { *; }
--keep class androidx.viewpager.widget.* { *; }
-
-# Keep rastermill classes that need to be accessed from native code (JNI)
--keep class android.support.rastermill.** { *; }
-
-# Preserve the name of the getCaller method so it can find itself in the stack trace it generates
--keepclassmembers public class com.android.messaging.util.DebugUtils {
-  public static java.lang.StackTraceElement getCaller(...);
-}
-
-# Keep the static fields of referenced inner classes of auto-generated R classes, in case we
-# access those fields by reflection (e.g. EmojiMarkup)
--keepclassmembers class **.R$* {
-    public static <fields>;
-}
diff --git a/res/animator/fab_anim.xml b/res/animator/fab_anim.xml
deleted file mode 100644
index e06416e..0000000
--- a/res/animator/fab_anim.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item
-        android:state_enabled="true"
-        android:state_pressed="true">
-        <objectAnimator
-            android:duration="@android:integer/config_shortAnimTime"
-            android:propertyName="translationZ"
-            android:valueTo="@dimen/fab_elevation_pressed"
-            android:valueType="floatType" />
-    </item>
-
-    <item>
-        <objectAnimator
-            android:duration="@android:integer/config_shortAnimTime"
-            android:propertyName="translationZ"
-            android:valueTo="@dimen/fab_elevation"
-            android:valueType="floatType" />
-    </item>
-
-</selector>
diff --git a/res/color/tab_text_color.xml b/res/color/tab_text_color.xml
deleted file mode 100644
index dec20dd..0000000
--- a/res/color/tab_text_color.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:color="@android:color/white"
-        android:state_selected="true"/>
-    <item
-        android:color="@color/translucent_white" />
-</selector>
\ No newline at end of file
diff --git a/res/drawable-hdpi/contact_popup_background.9.png b/res/drawable-hdpi/contact_popup_background.9.png
deleted file mode 100644
index 060ffad..0000000
--- a/res/drawable-hdpi/contact_popup_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/fab_new_message_static_shadow.png b/res/drawable-hdpi/fab_new_message_static_shadow.png
deleted file mode 100644
index 22e1764..0000000
--- a/res/drawable-hdpi/fab_new_message_static_shadow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_add_white.png b/res/drawable-hdpi/ic_add_white.png
deleted file mode 100644
index b52309f..0000000
--- a/res/drawable-hdpi/ic_add_white.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_archive_small_dark.png b/res/drawable-hdpi/ic_archive_small_dark.png
deleted file mode 100644
index b679ebb..0000000
--- a/res/drawable-hdpi/ic_archive_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_archive_undo_small_dark.png b/res/drawable-hdpi/ic_archive_undo_small_dark.png
deleted file mode 100644
index 505988d..0000000
--- a/res/drawable-hdpi/ic_archive_undo_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_arrow_back_light.png b/res/drawable-hdpi/ic_arrow_back_light.png
deleted file mode 100644
index fa1f67b..0000000
--- a/res/drawable-hdpi/ic_arrow_back_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_attachment_dark.png b/res/drawable-hdpi/ic_attachment_dark.png
deleted file mode 100644
index 10a1028..0000000
--- a/res/drawable-hdpi/ic_attachment_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_audio_light.png b/res/drawable-hdpi/ic_audio_light.png
deleted file mode 100644
index 9605a5c..0000000
--- a/res/drawable-hdpi/ic_audio_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_audio_pause.png b/res/drawable-hdpi/ic_audio_pause.png
deleted file mode 100644
index 8797ad0..0000000
--- a/res/drawable-hdpi/ic_audio_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_audio_play.png b/res/drawable-hdpi/ic_audio_play.png
deleted file mode 100644
index 552dc9c..0000000
--- a/res/drawable-hdpi/ic_audio_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_camera_front_light.png b/res/drawable-hdpi/ic_camera_front_light.png
deleted file mode 100644
index c0ddaf6..0000000
--- a/res/drawable-hdpi/ic_camera_front_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_camera_light.png b/res/drawable-hdpi/ic_camera_light.png
deleted file mode 100644
index d0406e4..0000000
--- a/res/drawable-hdpi/ic_camera_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_camera_rear_light.png b/res/drawable-hdpi/ic_camera_rear_light.png
deleted file mode 100644
index 6624c55..0000000
--- a/res/drawable-hdpi/ic_camera_rear_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_cancel_small_dark.png b/res/drawable-hdpi/ic_cancel_small_dark.png
deleted file mode 100644
index 5de5cfb..0000000
--- a/res/drawable-hdpi/ic_cancel_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_cancel_small_light.png b/res/drawable-hdpi/ic_cancel_small_light.png
deleted file mode 100644
index 05c6b19..0000000
--- a/res/drawable-hdpi/ic_cancel_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_checkbox_blank_light.png b/res/drawable-hdpi/ic_checkbox_blank_light.png
deleted file mode 100644
index 879a770..0000000
--- a/res/drawable-hdpi/ic_checkbox_blank_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_checkbox_light.png b/res/drawable-hdpi/ic_checkbox_light.png
deleted file mode 100644
index e41ba42..0000000
--- a/res/drawable-hdpi/ic_checkbox_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_checkbox_outline_light.png b/res/drawable-hdpi/ic_checkbox_outline_light.png
deleted file mode 100644
index 44ed34e..0000000
--- a/res/drawable-hdpi/ic_checkbox_outline_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_checkmark_circle_blue.png b/res/drawable-hdpi/ic_checkmark_circle_blue.png
deleted file mode 100644
index 7932c30..0000000
--- a/res/drawable-hdpi/ic_checkmark_circle_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_checkmark_large.png b/res/drawable-hdpi/ic_checkmark_large.png
deleted file mode 100644
index b8ecc06..0000000
--- a/res/drawable-hdpi/ic_checkmark_large.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_checkmark_large_light.png b/res/drawable-hdpi/ic_checkmark_large_light.png
deleted file mode 100644
index 48bf283..0000000
--- a/res/drawable-hdpi/ic_checkmark_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_checkmark_small_light.png b/res/drawable-hdpi/ic_checkmark_small_light.png
deleted file mode 100644
index ae0bf6d..0000000
--- a/res/drawable-hdpi/ic_checkmark_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_content_copy_dark.png b/res/drawable-hdpi/ic_content_copy_dark.png
deleted file mode 100644
index 22d2516..0000000
--- a/res/drawable-hdpi/ic_content_copy_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_delete_small_dark.png b/res/drawable-hdpi/ic_delete_small_dark.png
deleted file mode 100644
index 901f992..0000000
--- a/res/drawable-hdpi/ic_delete_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_dnd_on_dark.png b/res/drawable-hdpi/ic_dnd_on_dark.png
deleted file mode 100644
index 181df02..0000000
--- a/res/drawable-hdpi/ic_dnd_on_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_failed_light.png b/res/drawable-hdpi/ic_failed_light.png
deleted file mode 100644
index 3614fbe..0000000
--- a/res/drawable-hdpi/ic_failed_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_failed_status_red.png b/res/drawable-hdpi/ic_failed_status_red.png
deleted file mode 100644
index aa2d138..0000000
--- a/res/drawable-hdpi/ic_failed_status_red.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_file_download_dark.png b/res/drawable-hdpi/ic_file_download_dark.png
deleted file mode 100644
index 028c85e..0000000
--- a/res/drawable-hdpi/ic_file_download_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_file_download_light.png b/res/drawable-hdpi/ic_file_download_light.png
deleted file mode 100644
index ffa5b82..0000000
--- a/res/drawable-hdpi/ic_file_download_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_forward_dark.png b/res/drawable-hdpi/ic_forward_dark.png
deleted file mode 100644
index e8b718a..0000000
--- a/res/drawable-hdpi/ic_forward_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_image_light.png b/res/drawable-hdpi/ic_image_light.png
deleted file mode 100644
index 744f920..0000000
--- a/res/drawable-hdpi/ic_image_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_ime_light.png b/res/drawable-hdpi/ic_ime_light.png
deleted file mode 100644
index da65039..0000000
--- a/res/drawable-hdpi/ic_ime_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_info_dark.png b/res/drawable-hdpi/ic_info_dark.png
deleted file mode 100644
index 1453228..0000000
--- a/res/drawable-hdpi/ic_info_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png
deleted file mode 100644
index 5e4e62f..0000000
--- a/res/drawable-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_mp_audio_mic.png b/res/drawable-hdpi/ic_mp_audio_mic.png
deleted file mode 100644
index 9c005d6..0000000
--- a/res/drawable-hdpi/ic_mp_audio_mic.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_mp_camera_small_light.png b/res/drawable-hdpi/ic_mp_camera_small_light.png
deleted file mode 100644
index 6e3b09b..0000000
--- a/res/drawable-hdpi/ic_mp_camera_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_mp_capture_stop_large_light.png b/res/drawable-hdpi/ic_mp_capture_stop_large_light.png
deleted file mode 100644
index 5e29fdd..0000000
--- a/res/drawable-hdpi/ic_mp_capture_stop_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_mp_full_screen_light.png b/res/drawable-hdpi/ic_mp_full_screen_light.png
deleted file mode 100644
index 9c69eb8..0000000
--- a/res/drawable-hdpi/ic_mp_full_screen_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_mp_video_large_light.png b/res/drawable-hdpi/ic_mp_video_large_light.png
deleted file mode 100644
index d6db42c..0000000
--- a/res/drawable-hdpi/ic_mp_video_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_mp_video_small_light.png b/res/drawable-hdpi/ic_mp_video_small_light.png
deleted file mode 100644
index 9816af7..0000000
--- a/res/drawable-hdpi/ic_mp_video_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_music.png b/res/drawable-hdpi/ic_music.png
deleted file mode 100644
index 033b402..0000000
--- a/res/drawable-hdpi/ic_music.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_notifications_off_dark.png b/res/drawable-hdpi/ic_notifications_off_dark.png
deleted file mode 100644
index 9bcdc62..0000000
--- a/res/drawable-hdpi/ic_notifications_off_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_notifications_off_light.png b/res/drawable-hdpi/ic_notifications_off_light.png
deleted file mode 100644
index 433b6a9..0000000
--- a/res/drawable-hdpi/ic_notifications_off_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_notifications_off_small_light.png b/res/drawable-hdpi/ic_notifications_off_small_light.png
deleted file mode 100644
index fbd0ad5..0000000
--- a/res/drawable-hdpi/ic_notifications_off_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_notifications_on_dark.png b/res/drawable-hdpi/ic_notifications_on_dark.png
deleted file mode 100644
index 21e48a5..0000000
--- a/res/drawable-hdpi/ic_notifications_on_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_notifications_on_light.png b/res/drawable-hdpi/ic_notifications_on_light.png
deleted file mode 100644
index 6b39fec..0000000
--- a/res/drawable-hdpi/ic_notifications_on_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_numeric_dialpad.png b/res/drawable-hdpi/ic_numeric_dialpad.png
deleted file mode 100644
index 5460fd7..0000000
--- a/res/drawable-hdpi/ic_numeric_dialpad.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_oobe_conv_list.png b/res/drawable-hdpi/ic_oobe_conv_list.png
deleted file mode 100644
index 3b904ba..0000000
--- a/res/drawable-hdpi/ic_oobe_conv_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_oobe_freq_list.png b/res/drawable-hdpi/ic_oobe_freq_list.png
deleted file mode 100644
index 148a9ea..0000000
--- a/res/drawable-hdpi/ic_oobe_freq_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_people_add_light.png b/res/drawable-hdpi/ic_people_add_light.png
deleted file mode 100644
index c506e9a..0000000
--- a/res/drawable-hdpi/ic_people_add_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_add_dark.png b/res/drawable-hdpi/ic_person_add_dark.png
deleted file mode 100644
index 71ca2a0..0000000
--- a/res/drawable-hdpi/ic_person_add_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_add_light.png b/res/drawable-hdpi/ic_person_add_light.png
deleted file mode 100644
index bb8ad3e..0000000
--- a/res/drawable-hdpi/ic_person_add_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_light.png b/res/drawable-hdpi/ic_person_light.png
deleted file mode 100644
index b439c93..0000000
--- a/res/drawable-hdpi/ic_person_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_light_large.png b/res/drawable-hdpi/ic_person_light_large.png
deleted file mode 100644
index 5ddf265..0000000
--- a/res/drawable-hdpi/ic_person_light_large.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_phone_small_light.png b/res/drawable-hdpi/ic_phone_small_light.png
deleted file mode 100644
index 35cf121..0000000
--- a/res/drawable-hdpi/ic_phone_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_photo_library_light.png b/res/drawable-hdpi/ic_photo_library_light.png
deleted file mode 100644
index 55b956a..0000000
--- a/res/drawable-hdpi/ic_photo_library_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_preview_pause.png b/res/drawable-hdpi/ic_preview_pause.png
deleted file mode 100644
index 06b1db4..0000000
--- a/res/drawable-hdpi/ic_preview_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_preview_play.png b/res/drawable-hdpi/ic_preview_play.png
deleted file mode 100644
index 6fc389a..0000000
--- a/res/drawable-hdpi/ic_preview_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_remove_light.png b/res/drawable-hdpi/ic_remove_light.png
deleted file mode 100644
index 2222274..0000000
--- a/res/drawable-hdpi/ic_remove_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_remove_small_light.png b/res/drawable-hdpi/ic_remove_small_light.png
deleted file mode 100644
index 07e668c..0000000
--- a/res/drawable-hdpi/ic_remove_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_save_dark.png b/res/drawable-hdpi/ic_save_dark.png
deleted file mode 100644
index 7cf01da..0000000
--- a/res/drawable-hdpi/ic_save_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_save_light.png b/res/drawable-hdpi/ic_save_light.png
deleted file mode 100644
index b76adb2..0000000
--- a/res/drawable-hdpi/ic_save_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_send_dark.png b/res/drawable-hdpi/ic_send_dark.png
deleted file mode 100644
index 62108ef..0000000
--- a/res/drawable-hdpi/ic_send_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_send_light.png b/res/drawable-hdpi/ic_send_light.png
deleted file mode 100644
index 724783d..0000000
--- a/res/drawable-hdpi/ic_send_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_share_dark.png b/res/drawable-hdpi/ic_share_dark.png
deleted file mode 100644
index bd27042..0000000
--- a/res/drawable-hdpi/ic_share_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_share_light.png b/res/drawable-hdpi/ic_share_light.png
deleted file mode 100644
index dadb3e8..0000000
--- a/res/drawable-hdpi/ic_share_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_sim_card_send.png b/res/drawable-hdpi/ic_sim_card_send.png
deleted file mode 100644
index 426b153..0000000
--- a/res/drawable-hdpi/ic_sim_card_send.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_sms_delivery_ok.png b/res/drawable-hdpi/ic_sms_delivery_ok.png
deleted file mode 100644
index e038563..0000000
--- a/res/drawable-hdpi/ic_sms_delivery_ok.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_sms_light.png b/res/drawable-hdpi/ic_sms_light.png
deleted file mode 100644
index aaeec4e..0000000
--- a/res/drawable-hdpi/ic_sms_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_sms_multi_light.png b/res/drawable-hdpi/ic_sms_multi_light.png
deleted file mode 100644
index 81ac2e7..0000000
--- a/res/drawable-hdpi/ic_sms_multi_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_video_play_light.png b/res/drawable-hdpi/ic_video_play_light.png
deleted file mode 100644
index 4a74f37..0000000
--- a/res/drawable-hdpi/ic_video_play_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wear_reply.png b/res/drawable-hdpi/ic_wear_reply.png
deleted file mode 100644
index 19ce472..0000000
--- a/res/drawable-hdpi/ic_wear_reply.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_widget_avatar_shadow.png b/res/drawable-hdpi/ic_widget_avatar_shadow.png
deleted file mode 100644
index 9e0d519..0000000
--- a/res/drawable-hdpi/ic_widget_avatar_shadow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_widget_list.png b/res/drawable-hdpi/ic_widget_list.png
deleted file mode 100644
index 06f9732..0000000
--- a/res/drawable-hdpi/ic_widget_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_work_profile.png b/res/drawable-hdpi/ic_work_profile.png
deleted file mode 100644
index 5c2e457..0000000
--- a/res/drawable-hdpi/ic_work_profile.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/msg_bubble_error.9.png b/res/drawable-hdpi/msg_bubble_error.9.png
deleted file mode 100644
index 6a26c30..0000000
--- a/res/drawable-hdpi/msg_bubble_error.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/msg_bubble_incoming.9.png b/res/drawable-hdpi/msg_bubble_incoming.9.png
deleted file mode 100644
index 7fed0a8..0000000
--- a/res/drawable-hdpi/msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/msg_bubble_input.9.png b/res/drawable-hdpi/msg_bubble_input.9.png
deleted file mode 100644
index 01076da..0000000
--- a/res/drawable-hdpi/msg_bubble_input.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/msg_bubble_outgoing.9.png b/res/drawable-hdpi/msg_bubble_outgoing.9.png
deleted file mode 100644
index 8e7ccc0..0000000
--- a/res/drawable-hdpi/msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/permissions.png b/res/drawable-hdpi/permissions.png
deleted file mode 100644
index 20697cf..0000000
--- a/res/drawable-hdpi/permissions.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/swipe_shadow.9.png b/res/drawable-hdpi/swipe_shadow.9.png
deleted file mode 100644
index 8405721..0000000
--- a/res/drawable-hdpi/swipe_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/swipe_shadow_drag.9.png b/res/drawable-hdpi/swipe_shadow_drag.9.png
deleted file mode 100644
index 950ec71..0000000
--- a/res/drawable-hdpi/swipe_shadow_drag.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_btn_bg_normal.9.png b/res/drawable-hdpi/tab_btn_bg_normal.9.png
deleted file mode 100644
index 791bb40..0000000
--- a/res/drawable-hdpi/tab_btn_bg_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_btn_bg_pressed.9.png b/res/drawable-hdpi/tab_btn_bg_pressed.9.png
deleted file mode 100644
index b2b488c..0000000
--- a/res/drawable-hdpi/tab_btn_bg_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_selected.9.png b/res/drawable-hdpi/tab_selected.9.png
deleted file mode 100644
index 84e63df..0000000
--- a/res/drawable-hdpi/tab_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_selected_focused_holo.9.png b/res/drawable-hdpi/tab_selected_focused_holo.9.png
deleted file mode 100644
index 5cdc5b4..0000000
--- a/res/drawable-hdpi/tab_selected_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_selected_pressed_focused_holo.9.png b/res/drawable-hdpi/tab_selected_pressed_focused_holo.9.png
deleted file mode 100644
index ca3eb7b..0000000
--- a/res/drawable-hdpi/tab_selected_pressed_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_selected_pressed_holo.9.png b/res/drawable-hdpi/tab_selected_pressed_holo.9.png
deleted file mode 100644
index 08e5edb..0000000
--- a/res/drawable-hdpi/tab_selected_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_unselected.9.png b/res/drawable-hdpi/tab_unselected.9.png
deleted file mode 100644
index bbcfb2c..0000000
--- a/res/drawable-hdpi/tab_unselected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_unselected_focused_holo.9.png b/res/drawable-hdpi/tab_unselected_focused_holo.9.png
deleted file mode 100644
index a0c8bc3..0000000
--- a/res/drawable-hdpi/tab_unselected_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_unselected_pressed_focused_holo.9.png b/res/drawable-hdpi/tab_unselected_pressed_focused_holo.9.png
deleted file mode 100644
index 6cf948e..0000000
--- a/res/drawable-hdpi/tab_unselected_pressed_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/tab_unselected_pressed_holo.9.png b/res/drawable-hdpi/tab_unselected_pressed_holo.9.png
deleted file mode 100644
index a5dce50..0000000
--- a/res/drawable-hdpi/tab_unselected_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/widget_hr.9.png b/res/drawable-hdpi/widget_hr.9.png
deleted file mode 100644
index 7590256..0000000
--- a/res/drawable-hdpi/widget_hr.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/widget_msg_bubble_incoming.9.png b/res/drawable-hdpi/widget_msg_bubble_incoming.9.png
deleted file mode 100644
index c6e77a7..0000000
--- a/res/drawable-hdpi/widget_msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/widget_msg_bubble_outgoing.9.png b/res/drawable-hdpi/widget_msg_bubble_outgoing.9.png
deleted file mode 100644
index 476efae..0000000
--- a/res/drawable-hdpi/widget_msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_send_light.png b/res/drawable-ldrtl-hdpi/ic_send_light.png
deleted file mode 100644
index 4ee98a3..0000000
--- a/res/drawable-ldrtl-hdpi/ic_send_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/msg_bubble_incoming.9.png b/res/drawable-ldrtl-hdpi/msg_bubble_incoming.9.png
deleted file mode 100644
index 8e7ccc0..0000000
--- a/res/drawable-ldrtl-hdpi/msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/msg_bubble_input.9.png b/res/drawable-ldrtl-hdpi/msg_bubble_input.9.png
deleted file mode 100644
index c3f68b0..0000000
--- a/res/drawable-ldrtl-hdpi/msg_bubble_input.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/msg_bubble_outgoing.9.png b/res/drawable-ldrtl-hdpi/msg_bubble_outgoing.9.png
deleted file mode 100644
index 7fed0a8..0000000
--- a/res/drawable-ldrtl-hdpi/msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_send_light.png b/res/drawable-ldrtl-mdpi/ic_send_light.png
deleted file mode 100644
index 1267d66..0000000
--- a/res/drawable-ldrtl-mdpi/ic_send_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/msg_bubble_incoming.9.png b/res/drawable-ldrtl-mdpi/msg_bubble_incoming.9.png
deleted file mode 100644
index 5ca9b14..0000000
--- a/res/drawable-ldrtl-mdpi/msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/msg_bubble_input.9.png b/res/drawable-ldrtl-mdpi/msg_bubble_input.9.png
deleted file mode 100644
index 6f0b4bc..0000000
--- a/res/drawable-ldrtl-mdpi/msg_bubble_input.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/msg_bubble_outgoing.9.png b/res/drawable-ldrtl-mdpi/msg_bubble_outgoing.9.png
deleted file mode 100644
index 4e7e464..0000000
--- a/res/drawable-ldrtl-mdpi/msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_send_light.png b/res/drawable-ldrtl-xhdpi/ic_send_light.png
deleted file mode 100644
index 178c3cf..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_send_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/msg_bubble_incoming.9.png b/res/drawable-ldrtl-xhdpi/msg_bubble_incoming.9.png
deleted file mode 100644
index 52cb936..0000000
--- a/res/drawable-ldrtl-xhdpi/msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/msg_bubble_input.9.png b/res/drawable-ldrtl-xhdpi/msg_bubble_input.9.png
deleted file mode 100644
index 4c5f45d..0000000
--- a/res/drawable-ldrtl-xhdpi/msg_bubble_input.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/msg_bubble_outgoing.9.png b/res/drawable-ldrtl-xhdpi/msg_bubble_outgoing.9.png
deleted file mode 100644
index 0661fdb..0000000
--- a/res/drawable-ldrtl-xhdpi/msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_send_light.png b/res/drawable-ldrtl-xxhdpi/ic_send_light.png
deleted file mode 100644
index 74ffc46..0000000
--- a/res/drawable-ldrtl-xxhdpi/ic_send_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/msg_bubble_incoming.9.png b/res/drawable-ldrtl-xxhdpi/msg_bubble_incoming.9.png
deleted file mode 100644
index 5d8fc74..0000000
--- a/res/drawable-ldrtl-xxhdpi/msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/msg_bubble_input.9.png b/res/drawable-ldrtl-xxhdpi/msg_bubble_input.9.png
deleted file mode 100644
index 6d59b8f..0000000
--- a/res/drawable-ldrtl-xxhdpi/msg_bubble_input.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/msg_bubble_outgoing.9.png b/res/drawable-ldrtl-xxhdpi/msg_bubble_outgoing.9.png
deleted file mode 100644
index 009c721..0000000
--- a/res/drawable-ldrtl-xxhdpi/msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xxxhdpi/ic_send_light.png b/res/drawable-ldrtl-xxxhdpi/ic_send_light.png
deleted file mode 100644
index cd8e266..0000000
--- a/res/drawable-ldrtl-xxxhdpi/ic_send_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xxxhdpi/msg_bubble_incoming.9.png b/res/drawable-ldrtl-xxxhdpi/msg_bubble_incoming.9.png
deleted file mode 100644
index 8378db5..0000000
--- a/res/drawable-ldrtl-xxxhdpi/msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xxxhdpi/msg_bubble_input.9.png b/res/drawable-ldrtl-xxxhdpi/msg_bubble_input.9.png
deleted file mode 100644
index a707db0..0000000
--- a/res/drawable-ldrtl-xxxhdpi/msg_bubble_input.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xxxhdpi/msg_bubble_outgoing.9.png b/res/drawable-ldrtl-xxxhdpi/msg_bubble_outgoing.9.png
deleted file mode 100644
index f0d0d9e..0000000
--- a/res/drawable-ldrtl-xxxhdpi/msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/contact_popup_background.9.png b/res/drawable-mdpi/contact_popup_background.9.png
deleted file mode 100644
index 2989590..0000000
--- a/res/drawable-mdpi/contact_popup_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/fab_new_message_static_shadow.png b/res/drawable-mdpi/fab_new_message_static_shadow.png
deleted file mode 100644
index 2e24f0a..0000000
--- a/res/drawable-mdpi/fab_new_message_static_shadow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_add_white.png b/res/drawable-mdpi/ic_add_white.png
deleted file mode 100644
index 4a14229..0000000
--- a/res/drawable-mdpi/ic_add_white.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_archive_small_dark.png b/res/drawable-mdpi/ic_archive_small_dark.png
deleted file mode 100644
index a733f56..0000000
--- a/res/drawable-mdpi/ic_archive_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_archive_undo_small_dark.png b/res/drawable-mdpi/ic_archive_undo_small_dark.png
deleted file mode 100644
index bc9dead..0000000
--- a/res/drawable-mdpi/ic_archive_undo_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_arrow_back_light.png b/res/drawable-mdpi/ic_arrow_back_light.png
deleted file mode 100644
index c59a517..0000000
--- a/res/drawable-mdpi/ic_arrow_back_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_attachment_dark.png b/res/drawable-mdpi/ic_attachment_dark.png
deleted file mode 100644
index 2315e23..0000000
--- a/res/drawable-mdpi/ic_attachment_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_audio_light.png b/res/drawable-mdpi/ic_audio_light.png
deleted file mode 100644
index 78bc072..0000000
--- a/res/drawable-mdpi/ic_audio_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_audio_pause.png b/res/drawable-mdpi/ic_audio_pause.png
deleted file mode 100644
index e74d158..0000000
--- a/res/drawable-mdpi/ic_audio_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_audio_play.png b/res/drawable-mdpi/ic_audio_play.png
deleted file mode 100644
index 0d986a4..0000000
--- a/res/drawable-mdpi/ic_audio_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_camera_front_light.png b/res/drawable-mdpi/ic_camera_front_light.png
deleted file mode 100644
index a537897..0000000
--- a/res/drawable-mdpi/ic_camera_front_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_camera_light.png b/res/drawable-mdpi/ic_camera_light.png
deleted file mode 100644
index 429bef4..0000000
--- a/res/drawable-mdpi/ic_camera_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_camera_rear_light.png b/res/drawable-mdpi/ic_camera_rear_light.png
deleted file mode 100644
index 4da3328..0000000
--- a/res/drawable-mdpi/ic_camera_rear_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_cancel_small_dark.png b/res/drawable-mdpi/ic_cancel_small_dark.png
deleted file mode 100644
index f63f351..0000000
--- a/res/drawable-mdpi/ic_cancel_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_cancel_small_light.png b/res/drawable-mdpi/ic_cancel_small_light.png
deleted file mode 100644
index 33fdf10..0000000
--- a/res/drawable-mdpi/ic_cancel_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_checkbox_blank_light.png b/res/drawable-mdpi/ic_checkbox_blank_light.png
deleted file mode 100644
index baec804..0000000
--- a/res/drawable-mdpi/ic_checkbox_blank_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_checkbox_light.png b/res/drawable-mdpi/ic_checkbox_light.png
deleted file mode 100644
index b1b1269..0000000
--- a/res/drawable-mdpi/ic_checkbox_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_checkbox_outline_light.png b/res/drawable-mdpi/ic_checkbox_outline_light.png
deleted file mode 100644
index 4c3c722..0000000
--- a/res/drawable-mdpi/ic_checkbox_outline_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_checkmark_circle_blue.png b/res/drawable-mdpi/ic_checkmark_circle_blue.png
deleted file mode 100644
index 6cf348e..0000000
--- a/res/drawable-mdpi/ic_checkmark_circle_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_checkmark_large.png b/res/drawable-mdpi/ic_checkmark_large.png
deleted file mode 100644
index 95206d1..0000000
--- a/res/drawable-mdpi/ic_checkmark_large.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_checkmark_large_light.png b/res/drawable-mdpi/ic_checkmark_large_light.png
deleted file mode 100644
index 4c33ce6..0000000
--- a/res/drawable-mdpi/ic_checkmark_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_checkmark_small_light.png b/res/drawable-mdpi/ic_checkmark_small_light.png
deleted file mode 100644
index 414fe8f..0000000
--- a/res/drawable-mdpi/ic_checkmark_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_content_copy_dark.png b/res/drawable-mdpi/ic_content_copy_dark.png
deleted file mode 100644
index 4b99a83..0000000
--- a/res/drawable-mdpi/ic_content_copy_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_delete_small_dark.png b/res/drawable-mdpi/ic_delete_small_dark.png
deleted file mode 100644
index 86c0002..0000000
--- a/res/drawable-mdpi/ic_delete_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dnd_on_dark.png b/res/drawable-mdpi/ic_dnd_on_dark.png
deleted file mode 100644
index 4e911a9..0000000
--- a/res/drawable-mdpi/ic_dnd_on_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_failed_light.png b/res/drawable-mdpi/ic_failed_light.png
deleted file mode 100644
index 02a4d0b..0000000
--- a/res/drawable-mdpi/ic_failed_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_failed_status_red.png b/res/drawable-mdpi/ic_failed_status_red.png
deleted file mode 100644
index f6feafe..0000000
--- a/res/drawable-mdpi/ic_failed_status_red.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_file_download_dark.png b/res/drawable-mdpi/ic_file_download_dark.png
deleted file mode 100644
index 8104657..0000000
--- a/res/drawable-mdpi/ic_file_download_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_file_download_light.png b/res/drawable-mdpi/ic_file_download_light.png
deleted file mode 100644
index d066170..0000000
--- a/res/drawable-mdpi/ic_file_download_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_forward_dark.png b/res/drawable-mdpi/ic_forward_dark.png
deleted file mode 100644
index 7930393..0000000
--- a/res/drawable-mdpi/ic_forward_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_image_light.png b/res/drawable-mdpi/ic_image_light.png
deleted file mode 100644
index 3bd919e..0000000
--- a/res/drawable-mdpi/ic_image_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_ime_light.png b/res/drawable-mdpi/ic_ime_light.png
deleted file mode 100644
index fd58cb5..0000000
--- a/res/drawable-mdpi/ic_ime_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_info_dark.png b/res/drawable-mdpi/ic_info_dark.png
deleted file mode 100644
index 67457a3..0000000
--- a/res/drawable-mdpi/ic_info_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher.png b/res/drawable-mdpi/ic_launcher.png
deleted file mode 100644
index ef6a3c5..0000000
--- a/res/drawable-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_mp_audio_mic.png b/res/drawable-mdpi/ic_mp_audio_mic.png
deleted file mode 100644
index 918d799..0000000
--- a/res/drawable-mdpi/ic_mp_audio_mic.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_mp_camera_small_light.png b/res/drawable-mdpi/ic_mp_camera_small_light.png
deleted file mode 100644
index fe1dc7e..0000000
--- a/res/drawable-mdpi/ic_mp_camera_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_mp_capture_stop_large_light.png b/res/drawable-mdpi/ic_mp_capture_stop_large_light.png
deleted file mode 100644
index a9705c1..0000000
--- a/res/drawable-mdpi/ic_mp_capture_stop_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_mp_full_screen_light.png b/res/drawable-mdpi/ic_mp_full_screen_light.png
deleted file mode 100644
index 5462c59..0000000
--- a/res/drawable-mdpi/ic_mp_full_screen_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_mp_video_large_light.png b/res/drawable-mdpi/ic_mp_video_large_light.png
deleted file mode 100644
index fa8e3e2..0000000
--- a/res/drawable-mdpi/ic_mp_video_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_mp_video_small_light.png b/res/drawable-mdpi/ic_mp_video_small_light.png
deleted file mode 100644
index 9204827..0000000
--- a/res/drawable-mdpi/ic_mp_video_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_music.png b/res/drawable-mdpi/ic_music.png
deleted file mode 100644
index 106f912..0000000
--- a/res/drawable-mdpi/ic_music.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_notifications_off_dark.png b/res/drawable-mdpi/ic_notifications_off_dark.png
deleted file mode 100644
index 4a5a7e9..0000000
--- a/res/drawable-mdpi/ic_notifications_off_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_notifications_off_light.png b/res/drawable-mdpi/ic_notifications_off_light.png
deleted file mode 100644
index 33e0b4a..0000000
--- a/res/drawable-mdpi/ic_notifications_off_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_notifications_off_small_light.png b/res/drawable-mdpi/ic_notifications_off_small_light.png
deleted file mode 100644
index 4bd9563..0000000
--- a/res/drawable-mdpi/ic_notifications_off_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_notifications_on_dark.png b/res/drawable-mdpi/ic_notifications_on_dark.png
deleted file mode 100644
index 77a2a7d..0000000
--- a/res/drawable-mdpi/ic_notifications_on_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_notifications_on_light.png b/res/drawable-mdpi/ic_notifications_on_light.png
deleted file mode 100644
index eae03a5..0000000
--- a/res/drawable-mdpi/ic_notifications_on_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_numeric_dialpad.png b/res/drawable-mdpi/ic_numeric_dialpad.png
deleted file mode 100644
index 5802167..0000000
--- a/res/drawable-mdpi/ic_numeric_dialpad.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_oobe_conv_list.png b/res/drawable-mdpi/ic_oobe_conv_list.png
deleted file mode 100644
index 1648f2e..0000000
--- a/res/drawable-mdpi/ic_oobe_conv_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_oobe_freq_list.png b/res/drawable-mdpi/ic_oobe_freq_list.png
deleted file mode 100644
index 8d7d47f..0000000
--- a/res/drawable-mdpi/ic_oobe_freq_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_people_add_light.png b/res/drawable-mdpi/ic_people_add_light.png
deleted file mode 100644
index 4bc974f..0000000
--- a/res/drawable-mdpi/ic_people_add_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_add_dark.png b/res/drawable-mdpi/ic_person_add_dark.png
deleted file mode 100644
index 6f1fd49..0000000
--- a/res/drawable-mdpi/ic_person_add_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_add_light.png b/res/drawable-mdpi/ic_person_add_light.png
deleted file mode 100644
index ba83709..0000000
--- a/res/drawable-mdpi/ic_person_add_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_light.png b/res/drawable-mdpi/ic_person_light.png
deleted file mode 100644
index 5698835..0000000
--- a/res/drawable-mdpi/ic_person_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_light_large.png b/res/drawable-mdpi/ic_person_light_large.png
deleted file mode 100644
index 7aa150b..0000000
--- a/res/drawable-mdpi/ic_person_light_large.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_phone_small_light.png b/res/drawable-mdpi/ic_phone_small_light.png
deleted file mode 100644
index dfcbba0..0000000
--- a/res/drawable-mdpi/ic_phone_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_photo_library_light.png b/res/drawable-mdpi/ic_photo_library_light.png
deleted file mode 100644
index 26c58f3..0000000
--- a/res/drawable-mdpi/ic_photo_library_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_preview_pause.png b/res/drawable-mdpi/ic_preview_pause.png
deleted file mode 100644
index fbc3ff8..0000000
--- a/res/drawable-mdpi/ic_preview_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_preview_play.png b/res/drawable-mdpi/ic_preview_play.png
deleted file mode 100644
index f839d44..0000000
--- a/res/drawable-mdpi/ic_preview_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_remove_light.png b/res/drawable-mdpi/ic_remove_light.png
deleted file mode 100644
index 5b1712a..0000000
--- a/res/drawable-mdpi/ic_remove_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_remove_small_light.png b/res/drawable-mdpi/ic_remove_small_light.png
deleted file mode 100644
index 2131b6e..0000000
--- a/res/drawable-mdpi/ic_remove_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_save_dark.png b/res/drawable-mdpi/ic_save_dark.png
deleted file mode 100644
index f9b0de5..0000000
--- a/res/drawable-mdpi/ic_save_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_save_light.png b/res/drawable-mdpi/ic_save_light.png
deleted file mode 100644
index 4faf5d5..0000000
--- a/res/drawable-mdpi/ic_save_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_send_dark.png b/res/drawable-mdpi/ic_send_dark.png
deleted file mode 100644
index 965a9f0..0000000
--- a/res/drawable-mdpi/ic_send_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_send_light.png b/res/drawable-mdpi/ic_send_light.png
deleted file mode 100644
index 46d2dcd..0000000
--- a/res/drawable-mdpi/ic_send_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_share_dark.png b/res/drawable-mdpi/ic_share_dark.png
deleted file mode 100644
index c6ba4c9..0000000
--- a/res/drawable-mdpi/ic_share_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_share_light.png b/res/drawable-mdpi/ic_share_light.png
deleted file mode 100644
index 362c862..0000000
--- a/res/drawable-mdpi/ic_share_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_sim_card_send.png b/res/drawable-mdpi/ic_sim_card_send.png
deleted file mode 100644
index 1f26017..0000000
--- a/res/drawable-mdpi/ic_sim_card_send.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_sms_delivery_ok.png b/res/drawable-mdpi/ic_sms_delivery_ok.png
deleted file mode 100644
index ffccf64..0000000
--- a/res/drawable-mdpi/ic_sms_delivery_ok.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_sms_light.png b/res/drawable-mdpi/ic_sms_light.png
deleted file mode 100644
index 518c989..0000000
--- a/res/drawable-mdpi/ic_sms_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_sms_multi_light.png b/res/drawable-mdpi/ic_sms_multi_light.png
deleted file mode 100644
index bd6f4c6..0000000
--- a/res/drawable-mdpi/ic_sms_multi_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_video_play_light.png b/res/drawable-mdpi/ic_video_play_light.png
deleted file mode 100644
index e0ac1e4..0000000
--- a/res/drawable-mdpi/ic_video_play_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wear_reply.png b/res/drawable-mdpi/ic_wear_reply.png
deleted file mode 100644
index 47bb396..0000000
--- a/res/drawable-mdpi/ic_wear_reply.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_widget_avatar_shadow.png b/res/drawable-mdpi/ic_widget_avatar_shadow.png
deleted file mode 100644
index 1a8dc8e..0000000
--- a/res/drawable-mdpi/ic_widget_avatar_shadow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_widget_list.png b/res/drawable-mdpi/ic_widget_list.png
deleted file mode 100644
index 9bf4b11..0000000
--- a/res/drawable-mdpi/ic_widget_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_work_profile.png b/res/drawable-mdpi/ic_work_profile.png
deleted file mode 100644
index b7ffd2b..0000000
--- a/res/drawable-mdpi/ic_work_profile.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/msg_bubble_error.9.png b/res/drawable-mdpi/msg_bubble_error.9.png
deleted file mode 100644
index 694d117..0000000
--- a/res/drawable-mdpi/msg_bubble_error.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/msg_bubble_incoming.9.png b/res/drawable-mdpi/msg_bubble_incoming.9.png
deleted file mode 100644
index 4e7e464..0000000
--- a/res/drawable-mdpi/msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/msg_bubble_input.9.png b/res/drawable-mdpi/msg_bubble_input.9.png
deleted file mode 100644
index 1810ffb..0000000
--- a/res/drawable-mdpi/msg_bubble_input.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/msg_bubble_outgoing.9.png b/res/drawable-mdpi/msg_bubble_outgoing.9.png
deleted file mode 100644
index 5ca9b14..0000000
--- a/res/drawable-mdpi/msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/permissions.png b/res/drawable-mdpi/permissions.png
deleted file mode 100644
index 2d754ec..0000000
--- a/res/drawable-mdpi/permissions.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/swipe_shadow.9.png b/res/drawable-mdpi/swipe_shadow.9.png
deleted file mode 100644
index e2ed6d4..0000000
--- a/res/drawable-mdpi/swipe_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/swipe_shadow_drag.9.png b/res/drawable-mdpi/swipe_shadow_drag.9.png
deleted file mode 100644
index 94be3f9..0000000
--- a/res/drawable-mdpi/swipe_shadow_drag.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_btn_bg_normal.9.png b/res/drawable-mdpi/tab_btn_bg_normal.9.png
deleted file mode 100644
index d56cd94..0000000
--- a/res/drawable-mdpi/tab_btn_bg_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_btn_bg_pressed.9.png b/res/drawable-mdpi/tab_btn_bg_pressed.9.png
deleted file mode 100644
index 4d4c932..0000000
--- a/res/drawable-mdpi/tab_btn_bg_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_selected.9.png b/res/drawable-mdpi/tab_selected.9.png
deleted file mode 100644
index 4b00f35..0000000
--- a/res/drawable-mdpi/tab_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_selected_focused_holo.9.png b/res/drawable-mdpi/tab_selected_focused_holo.9.png
deleted file mode 100644
index c77808d..0000000
--- a/res/drawable-mdpi/tab_selected_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_selected_pressed_focused_holo.9.png b/res/drawable-mdpi/tab_selected_pressed_focused_holo.9.png
deleted file mode 100644
index 1e28bb6..0000000
--- a/res/drawable-mdpi/tab_selected_pressed_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_selected_pressed_holo.9.png b/res/drawable-mdpi/tab_selected_pressed_holo.9.png
deleted file mode 100644
index 098bf7d..0000000
--- a/res/drawable-mdpi/tab_selected_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_unselected.9.png b/res/drawable-mdpi/tab_unselected.9.png
deleted file mode 100644
index bb45ab9..0000000
--- a/res/drawable-mdpi/tab_unselected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_unselected_focused_holo.9.png b/res/drawable-mdpi/tab_unselected_focused_holo.9.png
deleted file mode 100644
index e00e256..0000000
--- a/res/drawable-mdpi/tab_unselected_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_unselected_pressed_focused_holo.9.png b/res/drawable-mdpi/tab_unselected_pressed_focused_holo.9.png
deleted file mode 100644
index 80e8f0c..0000000
--- a/res/drawable-mdpi/tab_unselected_pressed_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/tab_unselected_pressed_holo.9.png b/res/drawable-mdpi/tab_unselected_pressed_holo.9.png
deleted file mode 100644
index eb9422e..0000000
--- a/res/drawable-mdpi/tab_unselected_pressed_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/widget_hr.9.png b/res/drawable-mdpi/widget_hr.9.png
deleted file mode 100644
index 93f3417..0000000
--- a/res/drawable-mdpi/widget_hr.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/widget_msg_bubble_incoming.9.png b/res/drawable-mdpi/widget_msg_bubble_incoming.9.png
deleted file mode 100644
index ddadf73..0000000
--- a/res/drawable-mdpi/widget_msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/widget_msg_bubble_outgoing.9.png b/res/drawable-mdpi/widget_msg_bubble_outgoing.9.png
deleted file mode 100644
index 00432c3..0000000
--- a/res/drawable-mdpi/widget_msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/bg_sms.jpg b/res/drawable-nodpi/bg_sms.jpg
deleted file mode 100644
index d8711e7..0000000
--- a/res/drawable-nodpi/bg_sms.jpg
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/ic_person_wear.png b/res/drawable-nodpi/ic_person_wear.png
deleted file mode 100644
index 97be017..0000000
--- a/res/drawable-nodpi/ic_person_wear.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/messenger_widget_conversation_preview.png b/res/drawable-nodpi/messenger_widget_conversation_preview.png
deleted file mode 100644
index e26ae97..0000000
--- a/res/drawable-nodpi/messenger_widget_conversation_preview.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/messenger_widget_preview.png b/res/drawable-nodpi/messenger_widget_preview.png
deleted file mode 100644
index a5d40b2..0000000
--- a/res/drawable-nodpi/messenger_widget_preview.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-v21/contact_picker_tab_background_selector.xml b/res/drawable-v21/contact_picker_tab_background_selector.xml
deleted file mode 100644
index 59bdf95..0000000
--- a/res/drawable-v21/contact_picker_tab_background_selector.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/contact_picker_tab_pressed" />
\ No newline at end of file
diff --git a/res/drawable-v21/fab_new_message_bg.xml b/res/drawable-v21/fab_new_message_bg.xml
deleted file mode 100644
index 8043f0f..0000000
--- a/res/drawable-v21/fab_new_message_bg.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/fab_ripple" >
-
-    <item>
-        <shape android:shape="oval">
-            <solid android:color="@color/fab_color" />
-        </shape>
-    </item>
-
-</ripple>
\ No newline at end of file
diff --git a/res/drawable-v21/gallery_image_background_selector.xml b/res/drawable-v21/gallery_image_background_selector.xml
deleted file mode 100644
index 7486fad..0000000
--- a/res/drawable-v21/gallery_image_background_selector.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@color/gallery_image_pressed">
-    <item android:id="@android:id/mask"
-          android:drawable="@android:color/white" />
-</ripple>
diff --git a/res/drawable-v21/mediapicker_tab_button_background.xml b/res/drawable-v21/mediapicker_tab_button_background.xml
deleted file mode 100644
index 10c4474..0000000
--- a/res/drawable-v21/mediapicker_tab_button_background.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@color/background_item_pressed" />
diff --git a/res/drawable-v21/transparent_button_background.xml b/res/drawable-v21/transparent_button_background.xml
deleted file mode 100644
index 10c4474..0000000
--- a/res/drawable-v21/transparent_button_background.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-        android:color="@color/background_item_pressed" />
diff --git a/res/drawable-v21/widget_item_background.xml b/res/drawable-v21/widget_item_background.xml
deleted file mode 100644
index eb20c06..0000000
--- a/res/drawable-v21/widget_item_background.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/ripple_material_light" >
-    <item android:id="@android:id/mask">
-        <color android:color="@android:color/white" />
-    </item>
-</ripple>
diff --git a/res/drawable-xhdpi/contact_popup_background.9.png b/res/drawable-xhdpi/contact_popup_background.9.png
deleted file mode 100644
index f8b809a..0000000
--- a/res/drawable-xhdpi/contact_popup_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/fab_new_message_static_shadow.png b/res/drawable-xhdpi/fab_new_message_static_shadow.png
deleted file mode 100644
index 7075cb9..0000000
--- a/res/drawable-xhdpi/fab_new_message_static_shadow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_white.png b/res/drawable-xhdpi/ic_add_white.png
deleted file mode 100644
index 7ef4fc1..0000000
--- a/res/drawable-xhdpi/ic_add_white.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_archive_small_dark.png b/res/drawable-xhdpi/ic_archive_small_dark.png
deleted file mode 100644
index ea31204..0000000
--- a/res/drawable-xhdpi/ic_archive_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_archive_undo_small_dark.png b/res/drawable-xhdpi/ic_archive_undo_small_dark.png
deleted file mode 100644
index 7508484..0000000
--- a/res/drawable-xhdpi/ic_archive_undo_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_arrow_back_light.png b/res/drawable-xhdpi/ic_arrow_back_light.png
deleted file mode 100644
index fa3d493..0000000
--- a/res/drawable-xhdpi/ic_arrow_back_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_attachment_dark.png b/res/drawable-xhdpi/ic_attachment_dark.png
deleted file mode 100644
index 61e565c..0000000
--- a/res/drawable-xhdpi/ic_attachment_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_audio_light.png b/res/drawable-xhdpi/ic_audio_light.png
deleted file mode 100644
index fab5ba4..0000000
--- a/res/drawable-xhdpi/ic_audio_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_audio_pause.png b/res/drawable-xhdpi/ic_audio_pause.png
deleted file mode 100644
index e33b655..0000000
--- a/res/drawable-xhdpi/ic_audio_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_audio_play.png b/res/drawable-xhdpi/ic_audio_play.png
deleted file mode 100644
index ff93063..0000000
--- a/res/drawable-xhdpi/ic_audio_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_camera_front_light.png b/res/drawable-xhdpi/ic_camera_front_light.png
deleted file mode 100644
index 9cd577d..0000000
--- a/res/drawable-xhdpi/ic_camera_front_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_camera_light.png b/res/drawable-xhdpi/ic_camera_light.png
deleted file mode 100644
index 3b74ad6..0000000
--- a/res/drawable-xhdpi/ic_camera_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_camera_rear_light.png b/res/drawable-xhdpi/ic_camera_rear_light.png
deleted file mode 100644
index 92727af..0000000
--- a/res/drawable-xhdpi/ic_camera_rear_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_cancel_small_dark.png b/res/drawable-xhdpi/ic_cancel_small_dark.png
deleted file mode 100644
index 8b34b9b..0000000
--- a/res/drawable-xhdpi/ic_cancel_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_cancel_small_light.png b/res/drawable-xhdpi/ic_cancel_small_light.png
deleted file mode 100644
index dea984f..0000000
--- a/res/drawable-xhdpi/ic_cancel_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_checkbox_blank_light.png b/res/drawable-xhdpi/ic_checkbox_blank_light.png
deleted file mode 100644
index 7f6e917..0000000
--- a/res/drawable-xhdpi/ic_checkbox_blank_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_checkbox_light.png b/res/drawable-xhdpi/ic_checkbox_light.png
deleted file mode 100644
index a388a2b..0000000
--- a/res/drawable-xhdpi/ic_checkbox_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_checkbox_outline_light.png b/res/drawable-xhdpi/ic_checkbox_outline_light.png
deleted file mode 100644
index 64f0a2b..0000000
--- a/res/drawable-xhdpi/ic_checkbox_outline_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_checkmark_circle_blue.png b/res/drawable-xhdpi/ic_checkmark_circle_blue.png
deleted file mode 100644
index ae0ac2d..0000000
--- a/res/drawable-xhdpi/ic_checkmark_circle_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_checkmark_large.png b/res/drawable-xhdpi/ic_checkmark_large.png
deleted file mode 100644
index fd4420b..0000000
--- a/res/drawable-xhdpi/ic_checkmark_large.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_checkmark_large_light.png b/res/drawable-xhdpi/ic_checkmark_large_light.png
deleted file mode 100644
index d841688..0000000
--- a/res/drawable-xhdpi/ic_checkmark_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_checkmark_small_light.png b/res/drawable-xhdpi/ic_checkmark_small_light.png
deleted file mode 100644
index cd084fb..0000000
--- a/res/drawable-xhdpi/ic_checkmark_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_content_copy_dark.png b/res/drawable-xhdpi/ic_content_copy_dark.png
deleted file mode 100644
index 0114555..0000000
--- a/res/drawable-xhdpi/ic_content_copy_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_delete_small_dark.png b/res/drawable-xhdpi/ic_delete_small_dark.png
deleted file mode 100644
index b9b0cbd..0000000
--- a/res/drawable-xhdpi/ic_delete_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dnd_on_dark.png b/res/drawable-xhdpi/ic_dnd_on_dark.png
deleted file mode 100644
index c40fe99..0000000
--- a/res/drawable-xhdpi/ic_dnd_on_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_failed_light.png b/res/drawable-xhdpi/ic_failed_light.png
deleted file mode 100644
index 33d3436..0000000
--- a/res/drawable-xhdpi/ic_failed_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_failed_status_red.png b/res/drawable-xhdpi/ic_failed_status_red.png
deleted file mode 100644
index 3c6616a..0000000
--- a/res/drawable-xhdpi/ic_failed_status_red.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_file_download_dark.png b/res/drawable-xhdpi/ic_file_download_dark.png
deleted file mode 100644
index c31257a..0000000
--- a/res/drawable-xhdpi/ic_file_download_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_file_download_light.png b/res/drawable-xhdpi/ic_file_download_light.png
deleted file mode 100644
index b894fa6..0000000
--- a/res/drawable-xhdpi/ic_file_download_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_forward_dark.png b/res/drawable-xhdpi/ic_forward_dark.png
deleted file mode 100644
index b62f0de..0000000
--- a/res/drawable-xhdpi/ic_forward_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_image_light.png b/res/drawable-xhdpi/ic_image_light.png
deleted file mode 100644
index b2aecfb..0000000
--- a/res/drawable-xhdpi/ic_image_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ime_light.png b/res/drawable-xhdpi/ic_ime_light.png
deleted file mode 100644
index 14b57f8..0000000
--- a/res/drawable-xhdpi/ic_ime_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_info_dark.png b/res/drawable-xhdpi/ic_info_dark.png
deleted file mode 100644
index 31d1e05..0000000
--- a/res/drawable-xhdpi/ic_info_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index ad1acb4..0000000
--- a/res/drawable-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_mp_audio_mic.png b/res/drawable-xhdpi/ic_mp_audio_mic.png
deleted file mode 100644
index b35d0f1..0000000
--- a/res/drawable-xhdpi/ic_mp_audio_mic.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_mp_camera_small_light.png b/res/drawable-xhdpi/ic_mp_camera_small_light.png
deleted file mode 100644
index 75094e1..0000000
--- a/res/drawable-xhdpi/ic_mp_camera_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_mp_capture_stop_large_light.png b/res/drawable-xhdpi/ic_mp_capture_stop_large_light.png
deleted file mode 100644
index 62125b3..0000000
--- a/res/drawable-xhdpi/ic_mp_capture_stop_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_mp_full_screen_light.png b/res/drawable-xhdpi/ic_mp_full_screen_light.png
deleted file mode 100644
index 02cbd48..0000000
--- a/res/drawable-xhdpi/ic_mp_full_screen_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_mp_video_large_light.png b/res/drawable-xhdpi/ic_mp_video_large_light.png
deleted file mode 100644
index 723b052..0000000
--- a/res/drawable-xhdpi/ic_mp_video_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_mp_video_small_light.png b/res/drawable-xhdpi/ic_mp_video_small_light.png
deleted file mode 100644
index 00fde5f..0000000
--- a/res/drawable-xhdpi/ic_mp_video_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_music.png b/res/drawable-xhdpi/ic_music.png
deleted file mode 100644
index 1de4c3b..0000000
--- a/res/drawable-xhdpi/ic_music.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_notifications_off_dark.png b/res/drawable-xhdpi/ic_notifications_off_dark.png
deleted file mode 100644
index 4f3b924..0000000
--- a/res/drawable-xhdpi/ic_notifications_off_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_notifications_off_light.png b/res/drawable-xhdpi/ic_notifications_off_light.png
deleted file mode 100644
index 16ae132..0000000
--- a/res/drawable-xhdpi/ic_notifications_off_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_notifications_off_small_light.png b/res/drawable-xhdpi/ic_notifications_off_small_light.png
deleted file mode 100644
index e54fc52..0000000
--- a/res/drawable-xhdpi/ic_notifications_off_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_notifications_on_dark.png b/res/drawable-xhdpi/ic_notifications_on_dark.png
deleted file mode 100644
index 40f2909..0000000
--- a/res/drawable-xhdpi/ic_notifications_on_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_notifications_on_light.png b/res/drawable-xhdpi/ic_notifications_on_light.png
deleted file mode 100644
index 3c44f93..0000000
--- a/res/drawable-xhdpi/ic_notifications_on_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_numeric_dialpad.png b/res/drawable-xhdpi/ic_numeric_dialpad.png
deleted file mode 100644
index b22360f..0000000
--- a/res/drawable-xhdpi/ic_numeric_dialpad.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_oobe_conv_list.png b/res/drawable-xhdpi/ic_oobe_conv_list.png
deleted file mode 100644
index b41d322..0000000
--- a/res/drawable-xhdpi/ic_oobe_conv_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_oobe_freq_list.png b/res/drawable-xhdpi/ic_oobe_freq_list.png
deleted file mode 100644
index 898daf5..0000000
--- a/res/drawable-xhdpi/ic_oobe_freq_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_people_add_light.png b/res/drawable-xhdpi/ic_people_add_light.png
deleted file mode 100644
index f57f056..0000000
--- a/res/drawable-xhdpi/ic_people_add_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_add_dark.png b/res/drawable-xhdpi/ic_person_add_dark.png
deleted file mode 100644
index 6f325cf..0000000
--- a/res/drawable-xhdpi/ic_person_add_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_add_light.png b/res/drawable-xhdpi/ic_person_add_light.png
deleted file mode 100644
index 840f063..0000000
--- a/res/drawable-xhdpi/ic_person_add_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_light.png b/res/drawable-xhdpi/ic_person_light.png
deleted file mode 100644
index 5d23639..0000000
--- a/res/drawable-xhdpi/ic_person_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_light_large.png b/res/drawable-xhdpi/ic_person_light_large.png
deleted file mode 100644
index 22a4ff1..0000000
--- a/res/drawable-xhdpi/ic_person_light_large.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_phone_small_light.png b/res/drawable-xhdpi/ic_phone_small_light.png
deleted file mode 100644
index b2cab28..0000000
--- a/res/drawable-xhdpi/ic_phone_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_photo_library_light.png b/res/drawable-xhdpi/ic_photo_library_light.png
deleted file mode 100644
index 627ff48..0000000
--- a/res/drawable-xhdpi/ic_photo_library_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_preview_pause.png b/res/drawable-xhdpi/ic_preview_pause.png
deleted file mode 100644
index bbfce5f..0000000
--- a/res/drawable-xhdpi/ic_preview_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_preview_play.png b/res/drawable-xhdpi/ic_preview_play.png
deleted file mode 100644
index 8b22c75..0000000
--- a/res/drawable-xhdpi/ic_preview_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_remove_light.png b/res/drawable-xhdpi/ic_remove_light.png
deleted file mode 100644
index 9424e1e..0000000
--- a/res/drawable-xhdpi/ic_remove_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_remove_small_light.png b/res/drawable-xhdpi/ic_remove_small_light.png
deleted file mode 100644
index 222b86c..0000000
--- a/res/drawable-xhdpi/ic_remove_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_save_dark.png b/res/drawable-xhdpi/ic_save_dark.png
deleted file mode 100644
index 7927ba6..0000000
--- a/res/drawable-xhdpi/ic_save_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_save_light.png b/res/drawable-xhdpi/ic_save_light.png
deleted file mode 100644
index 298bb47..0000000
--- a/res/drawable-xhdpi/ic_save_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_send_dark.png b/res/drawable-xhdpi/ic_send_dark.png
deleted file mode 100644
index a6b3699..0000000
--- a/res/drawable-xhdpi/ic_send_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_send_light.png b/res/drawable-xhdpi/ic_send_light.png
deleted file mode 100644
index a19b335..0000000
--- a/res/drawable-xhdpi/ic_send_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_share_dark.png b/res/drawable-xhdpi/ic_share_dark.png
deleted file mode 100644
index a4b822a..0000000
--- a/res/drawable-xhdpi/ic_share_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_share_light.png b/res/drawable-xhdpi/ic_share_light.png
deleted file mode 100644
index 711797c..0000000
--- a/res/drawable-xhdpi/ic_share_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_sim_card_send.png b/res/drawable-xhdpi/ic_sim_card_send.png
deleted file mode 100644
index 9fc7e9a..0000000
--- a/res/drawable-xhdpi/ic_sim_card_send.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_sms_delivery_ok.png b/res/drawable-xhdpi/ic_sms_delivery_ok.png
deleted file mode 100644
index c12ae0a..0000000
--- a/res/drawable-xhdpi/ic_sms_delivery_ok.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_sms_light.png b/res/drawable-xhdpi/ic_sms_light.png
deleted file mode 100644
index 4b24a4b..0000000
--- a/res/drawable-xhdpi/ic_sms_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_sms_multi_light.png b/res/drawable-xhdpi/ic_sms_multi_light.png
deleted file mode 100644
index f3ba620..0000000
--- a/res/drawable-xhdpi/ic_sms_multi_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_video_play_light.png b/res/drawable-xhdpi/ic_video_play_light.png
deleted file mode 100644
index 89397a8..0000000
--- a/res/drawable-xhdpi/ic_video_play_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wear_reply.png b/res/drawable-xhdpi/ic_wear_reply.png
deleted file mode 100644
index c909c59..0000000
--- a/res/drawable-xhdpi/ic_wear_reply.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_widget_avatar_shadow.png b/res/drawable-xhdpi/ic_widget_avatar_shadow.png
deleted file mode 100644
index 37600aa..0000000
--- a/res/drawable-xhdpi/ic_widget_avatar_shadow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_widget_list.png b/res/drawable-xhdpi/ic_widget_list.png
deleted file mode 100644
index a12764f..0000000
--- a/res/drawable-xhdpi/ic_widget_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_work_profile.png b/res/drawable-xhdpi/ic_work_profile.png
deleted file mode 100644
index b47b485..0000000
--- a/res/drawable-xhdpi/ic_work_profile.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/msg_bubble_error.9.png b/res/drawable-xhdpi/msg_bubble_error.9.png
deleted file mode 100644
index 96b139b..0000000
--- a/res/drawable-xhdpi/msg_bubble_error.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/msg_bubble_incoming.9.png b/res/drawable-xhdpi/msg_bubble_incoming.9.png
deleted file mode 100644
index 0661fdb..0000000
--- a/res/drawable-xhdpi/msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/msg_bubble_input.9.png b/res/drawable-xhdpi/msg_bubble_input.9.png
deleted file mode 100644
index 67f92ff..0000000
--- a/res/drawable-xhdpi/msg_bubble_input.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/msg_bubble_outgoing.9.png b/res/drawable-xhdpi/msg_bubble_outgoing.9.png
deleted file mode 100644
index 52cb936..0000000
--- a/res/drawable-xhdpi/msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/permissions.png b/res/drawable-xhdpi/permissions.png
deleted file mode 100644
index 39a81bc..0000000
--- a/res/drawable-xhdpi/permissions.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/swipe_shadow.9.png b/res/drawable-xhdpi/swipe_shadow.9.png
deleted file mode 100644
index 45d965d..0000000
--- a/res/drawable-xhdpi/swipe_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/swipe_shadow_drag.9.png b/res/drawable-xhdpi/swipe_shadow_drag.9.png
deleted file mode 100644
index b443b5c..0000000
--- a/res/drawable-xhdpi/swipe_shadow_drag.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/tab_btn_bg_normal.9.png b/res/drawable-xhdpi/tab_btn_bg_normal.9.png
deleted file mode 100644
index d9446c6..0000000
--- a/res/drawable-xhdpi/tab_btn_bg_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/tab_btn_bg_pressed.9.png b/res/drawable-xhdpi/tab_btn_bg_pressed.9.png
deleted file mode 100644
index de76c06..0000000
--- a/res/drawable-xhdpi/tab_btn_bg_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/widget_hr.9.png b/res/drawable-xhdpi/widget_hr.9.png
deleted file mode 100644
index 31fcc7e..0000000
--- a/res/drawable-xhdpi/widget_hr.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/widget_msg_bubble_incoming.9.png b/res/drawable-xhdpi/widget_msg_bubble_incoming.9.png
deleted file mode 100644
index 2abb496..0000000
--- a/res/drawable-xhdpi/widget_msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/widget_msg_bubble_outgoing.9.png b/res/drawable-xhdpi/widget_msg_bubble_outgoing.9.png
deleted file mode 100644
index 35b58cd..0000000
--- a/res/drawable-xhdpi/widget_msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/contact_popup_background.9.png b/res/drawable-xxhdpi/contact_popup_background.9.png
deleted file mode 100644
index bb4f281..0000000
--- a/res/drawable-xxhdpi/contact_popup_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/fab_new_message_static_shadow.png b/res/drawable-xxhdpi/fab_new_message_static_shadow.png
deleted file mode 100644
index adfd569..0000000
--- a/res/drawable-xxhdpi/fab_new_message_static_shadow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_add_white.png b/res/drawable-xxhdpi/ic_add_white.png
deleted file mode 100644
index 7b4d52c..0000000
--- a/res/drawable-xxhdpi/ic_add_white.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_archive_small_dark.png b/res/drawable-xxhdpi/ic_archive_small_dark.png
deleted file mode 100644
index 64aa9d5..0000000
--- a/res/drawable-xxhdpi/ic_archive_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_archive_undo_small_dark.png b/res/drawable-xxhdpi/ic_archive_undo_small_dark.png
deleted file mode 100644
index a3f7503..0000000
--- a/res/drawable-xxhdpi/ic_archive_undo_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_arrow_back_light.png b/res/drawable-xxhdpi/ic_arrow_back_light.png
deleted file mode 100644
index 8b532d0..0000000
--- a/res/drawable-xxhdpi/ic_arrow_back_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_attachment_dark.png b/res/drawable-xxhdpi/ic_attachment_dark.png
deleted file mode 100644
index 64d9dad..0000000
--- a/res/drawable-xxhdpi/ic_attachment_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_audio_light.png b/res/drawable-xxhdpi/ic_audio_light.png
deleted file mode 100644
index 9b2f05c..0000000
--- a/res/drawable-xxhdpi/ic_audio_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_audio_pause.png b/res/drawable-xxhdpi/ic_audio_pause.png
deleted file mode 100644
index d294f3c..0000000
--- a/res/drawable-xxhdpi/ic_audio_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_audio_play.png b/res/drawable-xxhdpi/ic_audio_play.png
deleted file mode 100644
index cb84ee6..0000000
--- a/res/drawable-xxhdpi/ic_audio_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_camera_front_light.png b/res/drawable-xxhdpi/ic_camera_front_light.png
deleted file mode 100644
index 53616e4..0000000
--- a/res/drawable-xxhdpi/ic_camera_front_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_camera_light.png b/res/drawable-xxhdpi/ic_camera_light.png
deleted file mode 100644
index 64e9873..0000000
--- a/res/drawable-xxhdpi/ic_camera_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_camera_rear_light.png b/res/drawable-xxhdpi/ic_camera_rear_light.png
deleted file mode 100644
index 8e478e3..0000000
--- a/res/drawable-xxhdpi/ic_camera_rear_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_cancel_small_dark.png b/res/drawable-xxhdpi/ic_cancel_small_dark.png
deleted file mode 100644
index c8f583c..0000000
--- a/res/drawable-xxhdpi/ic_cancel_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_cancel_small_light.png b/res/drawable-xxhdpi/ic_cancel_small_light.png
deleted file mode 100644
index b3eacda..0000000
--- a/res/drawable-xxhdpi/ic_cancel_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_checkbox_blank_light.png b/res/drawable-xxhdpi/ic_checkbox_blank_light.png
deleted file mode 100644
index 0556578..0000000
--- a/res/drawable-xxhdpi/ic_checkbox_blank_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_checkbox_light.png b/res/drawable-xxhdpi/ic_checkbox_light.png
deleted file mode 100644
index b10c8e9..0000000
--- a/res/drawable-xxhdpi/ic_checkbox_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_checkbox_outline_light.png b/res/drawable-xxhdpi/ic_checkbox_outline_light.png
deleted file mode 100644
index cc77c5e..0000000
--- a/res/drawable-xxhdpi/ic_checkbox_outline_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_checkmark_circle_blue.png b/res/drawable-xxhdpi/ic_checkmark_circle_blue.png
deleted file mode 100644
index d40bb93..0000000
--- a/res/drawable-xxhdpi/ic_checkmark_circle_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_checkmark_large.png b/res/drawable-xxhdpi/ic_checkmark_large.png
deleted file mode 100644
index 1be0e02..0000000
--- a/res/drawable-xxhdpi/ic_checkmark_large.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_checkmark_large_light.png b/res/drawable-xxhdpi/ic_checkmark_large_light.png
deleted file mode 100644
index b5f4e24..0000000
--- a/res/drawable-xxhdpi/ic_checkmark_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_checkmark_small_light.png b/res/drawable-xxhdpi/ic_checkmark_small_light.png
deleted file mode 100644
index 7aeac03..0000000
--- a/res/drawable-xxhdpi/ic_checkmark_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_content_copy_dark.png b/res/drawable-xxhdpi/ic_content_copy_dark.png
deleted file mode 100644
index e3518ae..0000000
--- a/res/drawable-xxhdpi/ic_content_copy_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_delete_small_dark.png b/res/drawable-xxhdpi/ic_delete_small_dark.png
deleted file mode 100644
index 146ac39..0000000
--- a/res/drawable-xxhdpi/ic_delete_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dnd_on_dark.png b/res/drawable-xxhdpi/ic_dnd_on_dark.png
deleted file mode 100644
index a9ccb88..0000000
--- a/res/drawable-xxhdpi/ic_dnd_on_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_failed_light.png b/res/drawable-xxhdpi/ic_failed_light.png
deleted file mode 100644
index 7612138..0000000
--- a/res/drawable-xxhdpi/ic_failed_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_failed_status_red.png b/res/drawable-xxhdpi/ic_failed_status_red.png
deleted file mode 100644
index 26f76cc..0000000
--- a/res/drawable-xxhdpi/ic_failed_status_red.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_file_download_dark.png b/res/drawable-xxhdpi/ic_file_download_dark.png
deleted file mode 100644
index d7fc0b3..0000000
--- a/res/drawable-xxhdpi/ic_file_download_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_file_download_light.png b/res/drawable-xxhdpi/ic_file_download_light.png
deleted file mode 100644
index 42eadbc..0000000
--- a/res/drawable-xxhdpi/ic_file_download_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_forward_dark.png b/res/drawable-xxhdpi/ic_forward_dark.png
deleted file mode 100644
index cd071be..0000000
--- a/res/drawable-xxhdpi/ic_forward_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_image_light.png b/res/drawable-xxhdpi/ic_image_light.png
deleted file mode 100644
index 16b7e7b..0000000
--- a/res/drawable-xxhdpi/ic_image_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ime_light.png b/res/drawable-xxhdpi/ic_ime_light.png
deleted file mode 100644
index 159d085..0000000
--- a/res/drawable-xxhdpi/ic_ime_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_info_dark.png b/res/drawable-xxhdpi/ic_info_dark.png
deleted file mode 100644
index 2df42de..0000000
--- a/res/drawable-xxhdpi/ic_info_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_launcher.png b/res/drawable-xxhdpi/ic_launcher.png
deleted file mode 100644
index de56e98..0000000
--- a/res/drawable-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_mp_audio_mic.png b/res/drawable-xxhdpi/ic_mp_audio_mic.png
deleted file mode 100644
index a01388b..0000000
--- a/res/drawable-xxhdpi/ic_mp_audio_mic.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_mp_camera_small_light.png b/res/drawable-xxhdpi/ic_mp_camera_small_light.png
deleted file mode 100644
index 8012fce..0000000
--- a/res/drawable-xxhdpi/ic_mp_camera_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_mp_capture_stop_large_light.png b/res/drawable-xxhdpi/ic_mp_capture_stop_large_light.png
deleted file mode 100644
index d34667a..0000000
--- a/res/drawable-xxhdpi/ic_mp_capture_stop_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_mp_full_screen_light.png b/res/drawable-xxhdpi/ic_mp_full_screen_light.png
deleted file mode 100644
index 483a1a3..0000000
--- a/res/drawable-xxhdpi/ic_mp_full_screen_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_mp_video_large_light.png b/res/drawable-xxhdpi/ic_mp_video_large_light.png
deleted file mode 100644
index 0a34b5e..0000000
--- a/res/drawable-xxhdpi/ic_mp_video_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_mp_video_small_light.png b/res/drawable-xxhdpi/ic_mp_video_small_light.png
deleted file mode 100644
index 1cb7798..0000000
--- a/res/drawable-xxhdpi/ic_mp_video_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_music.png b/res/drawable-xxhdpi/ic_music.png
deleted file mode 100644
index f8016cc..0000000
--- a/res/drawable-xxhdpi/ic_music.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_notifications_off_dark.png b/res/drawable-xxhdpi/ic_notifications_off_dark.png
deleted file mode 100644
index 27d3754..0000000
--- a/res/drawable-xxhdpi/ic_notifications_off_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_notifications_off_light.png b/res/drawable-xxhdpi/ic_notifications_off_light.png
deleted file mode 100644
index a2aedec..0000000
--- a/res/drawable-xxhdpi/ic_notifications_off_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_notifications_off_small_light.png b/res/drawable-xxhdpi/ic_notifications_off_small_light.png
deleted file mode 100644
index 2a90e07..0000000
--- a/res/drawable-xxhdpi/ic_notifications_off_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_notifications_on_dark.png b/res/drawable-xxhdpi/ic_notifications_on_dark.png
deleted file mode 100644
index e64da6b..0000000
--- a/res/drawable-xxhdpi/ic_notifications_on_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_notifications_on_light.png b/res/drawable-xxhdpi/ic_notifications_on_light.png
deleted file mode 100644
index f8f7d15..0000000
--- a/res/drawable-xxhdpi/ic_notifications_on_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_numeric_dialpad.png b/res/drawable-xxhdpi/ic_numeric_dialpad.png
deleted file mode 100644
index a0d9e5e..0000000
--- a/res/drawable-xxhdpi/ic_numeric_dialpad.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_oobe_conv_list.png b/res/drawable-xxhdpi/ic_oobe_conv_list.png
deleted file mode 100644
index f6fcde1..0000000
--- a/res/drawable-xxhdpi/ic_oobe_conv_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_oobe_freq_list.png b/res/drawable-xxhdpi/ic_oobe_freq_list.png
deleted file mode 100644
index 4d7543d..0000000
--- a/res/drawable-xxhdpi/ic_oobe_freq_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_people_add_light.png b/res/drawable-xxhdpi/ic_people_add_light.png
deleted file mode 100644
index 915b91d..0000000
--- a/res/drawable-xxhdpi/ic_people_add_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_add_dark.png b/res/drawable-xxhdpi/ic_person_add_dark.png
deleted file mode 100644
index 1d9bb20..0000000
--- a/res/drawable-xxhdpi/ic_person_add_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_add_light.png b/res/drawable-xxhdpi/ic_person_add_light.png
deleted file mode 100644
index 5a17f08..0000000
--- a/res/drawable-xxhdpi/ic_person_add_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_light.png b/res/drawable-xxhdpi/ic_person_light.png
deleted file mode 100644
index adab957..0000000
--- a/res/drawable-xxhdpi/ic_person_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_light_large.png b/res/drawable-xxhdpi/ic_person_light_large.png
deleted file mode 100644
index 3cf214f..0000000
--- a/res/drawable-xxhdpi/ic_person_light_large.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_phone_small_light.png b/res/drawable-xxhdpi/ic_phone_small_light.png
deleted file mode 100644
index 8d7c25f..0000000
--- a/res/drawable-xxhdpi/ic_phone_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_photo_library_light.png b/res/drawable-xxhdpi/ic_photo_library_light.png
deleted file mode 100644
index cd72bdf..0000000
--- a/res/drawable-xxhdpi/ic_photo_library_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_preview_pause.png b/res/drawable-xxhdpi/ic_preview_pause.png
deleted file mode 100644
index 7ead0d7..0000000
--- a/res/drawable-xxhdpi/ic_preview_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_preview_play.png b/res/drawable-xxhdpi/ic_preview_play.png
deleted file mode 100644
index 2db591b..0000000
--- a/res/drawable-xxhdpi/ic_preview_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_remove_light.png b/res/drawable-xxhdpi/ic_remove_light.png
deleted file mode 100644
index 6f07cc5..0000000
--- a/res/drawable-xxhdpi/ic_remove_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_remove_small_light.png b/res/drawable-xxhdpi/ic_remove_small_light.png
deleted file mode 100644
index c69e993..0000000
--- a/res/drawable-xxhdpi/ic_remove_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_save_dark.png b/res/drawable-xxhdpi/ic_save_dark.png
deleted file mode 100644
index 8267484..0000000
--- a/res/drawable-xxhdpi/ic_save_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_save_light.png b/res/drawable-xxhdpi/ic_save_light.png
deleted file mode 100644
index 4b944cf..0000000
--- a/res/drawable-xxhdpi/ic_save_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_send_dark.png b/res/drawable-xxhdpi/ic_send_dark.png
deleted file mode 100644
index 44729b1..0000000
--- a/res/drawable-xxhdpi/ic_send_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_send_light.png b/res/drawable-xxhdpi/ic_send_light.png
deleted file mode 100644
index a1a6cab..0000000
--- a/res/drawable-xxhdpi/ic_send_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_share_dark.png b/res/drawable-xxhdpi/ic_share_dark.png
deleted file mode 100644
index 790670a..0000000
--- a/res/drawable-xxhdpi/ic_share_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_share_light.png b/res/drawable-xxhdpi/ic_share_light.png
deleted file mode 100644
index 880c6a2..0000000
--- a/res/drawable-xxhdpi/ic_share_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_sim_card_send.png b/res/drawable-xxhdpi/ic_sim_card_send.png
deleted file mode 100644
index 8eae7c3..0000000
--- a/res/drawable-xxhdpi/ic_sim_card_send.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_sms_delivery_ok.png b/res/drawable-xxhdpi/ic_sms_delivery_ok.png
deleted file mode 100644
index 2c8c9b0..0000000
--- a/res/drawable-xxhdpi/ic_sms_delivery_ok.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_sms_light.png b/res/drawable-xxhdpi/ic_sms_light.png
deleted file mode 100644
index 7a8b491..0000000
--- a/res/drawable-xxhdpi/ic_sms_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_sms_multi_light.png b/res/drawable-xxhdpi/ic_sms_multi_light.png
deleted file mode 100644
index 6496cb8..0000000
--- a/res/drawable-xxhdpi/ic_sms_multi_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_video_play_light.png b/res/drawable-xxhdpi/ic_video_play_light.png
deleted file mode 100644
index f49c653..0000000
--- a/res/drawable-xxhdpi/ic_video_play_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wear_reply.png b/res/drawable-xxhdpi/ic_wear_reply.png
deleted file mode 100644
index 0790ee8..0000000
--- a/res/drawable-xxhdpi/ic_wear_reply.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_widget_avatar_shadow.png b/res/drawable-xxhdpi/ic_widget_avatar_shadow.png
deleted file mode 100644
index ea4e26d..0000000
--- a/res/drawable-xxhdpi/ic_widget_avatar_shadow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_widget_list.png b/res/drawable-xxhdpi/ic_widget_list.png
deleted file mode 100644
index c370ee8..0000000
--- a/res/drawable-xxhdpi/ic_widget_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_work_profile.png b/res/drawable-xxhdpi/ic_work_profile.png
deleted file mode 100644
index de257e7..0000000
--- a/res/drawable-xxhdpi/ic_work_profile.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/msg_bubble_error.9.png b/res/drawable-xxhdpi/msg_bubble_error.9.png
deleted file mode 100644
index f8bdc96..0000000
--- a/res/drawable-xxhdpi/msg_bubble_error.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/msg_bubble_incoming.9.png b/res/drawable-xxhdpi/msg_bubble_incoming.9.png
deleted file mode 100644
index ab693b3..0000000
--- a/res/drawable-xxhdpi/msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/msg_bubble_input.9.png b/res/drawable-xxhdpi/msg_bubble_input.9.png
deleted file mode 100644
index de41ef4..0000000
--- a/res/drawable-xxhdpi/msg_bubble_input.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/msg_bubble_outgoing.9.png b/res/drawable-xxhdpi/msg_bubble_outgoing.9.png
deleted file mode 100644
index 5b2a2ff..0000000
--- a/res/drawable-xxhdpi/msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/permissions.png b/res/drawable-xxhdpi/permissions.png
deleted file mode 100644
index fd61476..0000000
--- a/res/drawable-xxhdpi/permissions.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/swipe_shadow.9.png b/res/drawable-xxhdpi/swipe_shadow.9.png
deleted file mode 100644
index 0491faa..0000000
--- a/res/drawable-xxhdpi/swipe_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/swipe_shadow_drag.9.png b/res/drawable-xxhdpi/swipe_shadow_drag.9.png
deleted file mode 100644
index 0153c5b..0000000
--- a/res/drawable-xxhdpi/swipe_shadow_drag.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/tab_btn_bg_normal.9.png b/res/drawable-xxhdpi/tab_btn_bg_normal.9.png
deleted file mode 100644
index 9f3a0f9..0000000
--- a/res/drawable-xxhdpi/tab_btn_bg_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/tab_btn_bg_pressed.9.png b/res/drawable-xxhdpi/tab_btn_bg_pressed.9.png
deleted file mode 100644
index 53f226e..0000000
--- a/res/drawable-xxhdpi/tab_btn_bg_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/widget_hr.9.png b/res/drawable-xxhdpi/widget_hr.9.png
deleted file mode 100644
index 375272b..0000000
--- a/res/drawable-xxhdpi/widget_hr.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/widget_msg_bubble_incoming.9.png b/res/drawable-xxhdpi/widget_msg_bubble_incoming.9.png
deleted file mode 100644
index 5093c23..0000000
--- a/res/drawable-xxhdpi/widget_msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/widget_msg_bubble_outgoing.9.png b/res/drawable-xxhdpi/widget_msg_bubble_outgoing.9.png
deleted file mode 100644
index 6ae5608..0000000
--- a/res/drawable-xxhdpi/widget_msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/contact_popup_background.9.png b/res/drawable-xxxhdpi/contact_popup_background.9.png
deleted file mode 100644
index 30919fa..0000000
--- a/res/drawable-xxxhdpi/contact_popup_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/fab_new_message_static_shadow.png b/res/drawable-xxxhdpi/fab_new_message_static_shadow.png
deleted file mode 100644
index e1d16a6..0000000
--- a/res/drawable-xxxhdpi/fab_new_message_static_shadow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_add_white.png b/res/drawable-xxxhdpi/ic_add_white.png
deleted file mode 100644
index 0ed23b1..0000000
--- a/res/drawable-xxxhdpi/ic_add_white.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_archive_small_dark.png b/res/drawable-xxxhdpi/ic_archive_small_dark.png
deleted file mode 100644
index c380363..0000000
--- a/res/drawable-xxxhdpi/ic_archive_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_archive_undo_small_dark.png b/res/drawable-xxxhdpi/ic_archive_undo_small_dark.png
deleted file mode 100644
index b2e4f8b..0000000
--- a/res/drawable-xxxhdpi/ic_archive_undo_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_arrow_back_light.png b/res/drawable-xxxhdpi/ic_arrow_back_light.png
deleted file mode 100644
index 54a5687..0000000
--- a/res/drawable-xxxhdpi/ic_arrow_back_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_attachment_dark.png b/res/drawable-xxxhdpi/ic_attachment_dark.png
deleted file mode 100644
index 7cf871a..0000000
--- a/res/drawable-xxxhdpi/ic_attachment_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_audio_light.png b/res/drawable-xxxhdpi/ic_audio_light.png
deleted file mode 100644
index 768ac89..0000000
--- a/res/drawable-xxxhdpi/ic_audio_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_audio_pause.png b/res/drawable-xxxhdpi/ic_audio_pause.png
deleted file mode 100644
index f7ae29f..0000000
--- a/res/drawable-xxxhdpi/ic_audio_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_audio_play.png b/res/drawable-xxxhdpi/ic_audio_play.png
deleted file mode 100644
index 71f21e7..0000000
--- a/res/drawable-xxxhdpi/ic_audio_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_camera_front_light.png b/res/drawable-xxxhdpi/ic_camera_front_light.png
deleted file mode 100644
index 3af175b..0000000
--- a/res/drawable-xxxhdpi/ic_camera_front_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_camera_light.png b/res/drawable-xxxhdpi/ic_camera_light.png
deleted file mode 100644
index c3484b6..0000000
--- a/res/drawable-xxxhdpi/ic_camera_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_camera_rear_light.png b/res/drawable-xxxhdpi/ic_camera_rear_light.png
deleted file mode 100644
index c59b65b..0000000
--- a/res/drawable-xxxhdpi/ic_camera_rear_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_cancel_small_dark.png b/res/drawable-xxxhdpi/ic_cancel_small_dark.png
deleted file mode 100644
index f454d2a..0000000
--- a/res/drawable-xxxhdpi/ic_cancel_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_cancel_small_light.png b/res/drawable-xxxhdpi/ic_cancel_small_light.png
deleted file mode 100644
index cce1904..0000000
--- a/res/drawable-xxxhdpi/ic_cancel_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_checkbox_blank_light.png b/res/drawable-xxxhdpi/ic_checkbox_blank_light.png
deleted file mode 100644
index ad983af..0000000
--- a/res/drawable-xxxhdpi/ic_checkbox_blank_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_checkbox_light.png b/res/drawable-xxxhdpi/ic_checkbox_light.png
deleted file mode 100644
index f4c0cfc..0000000
--- a/res/drawable-xxxhdpi/ic_checkbox_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_checkbox_outline_light.png b/res/drawable-xxxhdpi/ic_checkbox_outline_light.png
deleted file mode 100644
index eb0a803..0000000
--- a/res/drawable-xxxhdpi/ic_checkbox_outline_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_checkmark_circle_blue.png b/res/drawable-xxxhdpi/ic_checkmark_circle_blue.png
deleted file mode 100644
index 0c2a7d5..0000000
--- a/res/drawable-xxxhdpi/ic_checkmark_circle_blue.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_checkmark_large.png b/res/drawable-xxxhdpi/ic_checkmark_large.png
deleted file mode 100644
index 8119ff2..0000000
--- a/res/drawable-xxxhdpi/ic_checkmark_large.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_checkmark_large_light.png b/res/drawable-xxxhdpi/ic_checkmark_large_light.png
deleted file mode 100644
index dddac27..0000000
--- a/res/drawable-xxxhdpi/ic_checkmark_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_checkmark_small_light.png b/res/drawable-xxxhdpi/ic_checkmark_small_light.png
deleted file mode 100644
index 380f4e8..0000000
--- a/res/drawable-xxxhdpi/ic_checkmark_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_content_copy_dark.png b/res/drawable-xxxhdpi/ic_content_copy_dark.png
deleted file mode 100644
index 24dc390..0000000
--- a/res/drawable-xxxhdpi/ic_content_copy_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_delete_small_dark.png b/res/drawable-xxxhdpi/ic_delete_small_dark.png
deleted file mode 100644
index 497e7a7..0000000
--- a/res/drawable-xxxhdpi/ic_delete_small_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_dnd_on_dark.png b/res/drawable-xxxhdpi/ic_dnd_on_dark.png
deleted file mode 100644
index de2f17b..0000000
--- a/res/drawable-xxxhdpi/ic_dnd_on_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_failed_light.png b/res/drawable-xxxhdpi/ic_failed_light.png
deleted file mode 100644
index 53d374c..0000000
--- a/res/drawable-xxxhdpi/ic_failed_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_failed_status_red.png b/res/drawable-xxxhdpi/ic_failed_status_red.png
deleted file mode 100644
index ee1ed24..0000000
--- a/res/drawable-xxxhdpi/ic_failed_status_red.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_file_download_dark.png b/res/drawable-xxxhdpi/ic_file_download_dark.png
deleted file mode 100644
index 0012e5e..0000000
--- a/res/drawable-xxxhdpi/ic_file_download_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_file_download_light.png b/res/drawable-xxxhdpi/ic_file_download_light.png
deleted file mode 100644
index 6d7ca08..0000000
--- a/res/drawable-xxxhdpi/ic_file_download_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_forward_dark.png b/res/drawable-xxxhdpi/ic_forward_dark.png
deleted file mode 100644
index 6408fb9..0000000
--- a/res/drawable-xxxhdpi/ic_forward_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_image_light.png b/res/drawable-xxxhdpi/ic_image_light.png
deleted file mode 100644
index 0d229e2..0000000
--- a/res/drawable-xxxhdpi/ic_image_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_ime_light.png b/res/drawable-xxxhdpi/ic_ime_light.png
deleted file mode 100644
index 031d086..0000000
--- a/res/drawable-xxxhdpi/ic_ime_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_info_dark.png b/res/drawable-xxxhdpi/ic_info_dark.png
deleted file mode 100644
index 107385b..0000000
--- a/res/drawable-xxxhdpi/ic_info_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_launcher.png b/res/drawable-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 9ac88b4..0000000
--- a/res/drawable-xxxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_mp_audio_mic.png b/res/drawable-xxxhdpi/ic_mp_audio_mic.png
deleted file mode 100644
index 9f51c4b..0000000
--- a/res/drawable-xxxhdpi/ic_mp_audio_mic.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_mp_camera_small_light.png b/res/drawable-xxxhdpi/ic_mp_camera_small_light.png
deleted file mode 100644
index d6d8c9d..0000000
--- a/res/drawable-xxxhdpi/ic_mp_camera_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_mp_capture_stop_large_light.png b/res/drawable-xxxhdpi/ic_mp_capture_stop_large_light.png
deleted file mode 100644
index 30e725f..0000000
--- a/res/drawable-xxxhdpi/ic_mp_capture_stop_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_mp_full_screen_light.png b/res/drawable-xxxhdpi/ic_mp_full_screen_light.png
deleted file mode 100644
index 4860109..0000000
--- a/res/drawable-xxxhdpi/ic_mp_full_screen_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_mp_video_large_light.png b/res/drawable-xxxhdpi/ic_mp_video_large_light.png
deleted file mode 100644
index 32c4317..0000000
--- a/res/drawable-xxxhdpi/ic_mp_video_large_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_mp_video_small_light.png b/res/drawable-xxxhdpi/ic_mp_video_small_light.png
deleted file mode 100644
index 6d2a14b..0000000
--- a/res/drawable-xxxhdpi/ic_mp_video_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_music.png b/res/drawable-xxxhdpi/ic_music.png
deleted file mode 100644
index 11d67ae..0000000
--- a/res/drawable-xxxhdpi/ic_music.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_notifications_off_dark.png b/res/drawable-xxxhdpi/ic_notifications_off_dark.png
deleted file mode 100644
index 10ac318..0000000
--- a/res/drawable-xxxhdpi/ic_notifications_off_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_notifications_off_light.png b/res/drawable-xxxhdpi/ic_notifications_off_light.png
deleted file mode 100644
index 8eb5782..0000000
--- a/res/drawable-xxxhdpi/ic_notifications_off_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_notifications_off_small_light.png b/res/drawable-xxxhdpi/ic_notifications_off_small_light.png
deleted file mode 100644
index 3756943..0000000
--- a/res/drawable-xxxhdpi/ic_notifications_off_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_notifications_on_dark.png b/res/drawable-xxxhdpi/ic_notifications_on_dark.png
deleted file mode 100644
index 3896212..0000000
--- a/res/drawable-xxxhdpi/ic_notifications_on_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_notifications_on_light.png b/res/drawable-xxxhdpi/ic_notifications_on_light.png
deleted file mode 100644
index 47794fd..0000000
--- a/res/drawable-xxxhdpi/ic_notifications_on_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_numeric_dialpad.png b/res/drawable-xxxhdpi/ic_numeric_dialpad.png
deleted file mode 100644
index 5e0986c..0000000
--- a/res/drawable-xxxhdpi/ic_numeric_dialpad.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_oobe_conv_list.png b/res/drawable-xxxhdpi/ic_oobe_conv_list.png
deleted file mode 100644
index 0decb23..0000000
--- a/res/drawable-xxxhdpi/ic_oobe_conv_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_oobe_freq_list.png b/res/drawable-xxxhdpi/ic_oobe_freq_list.png
deleted file mode 100644
index 4522cb6..0000000
--- a/res/drawable-xxxhdpi/ic_oobe_freq_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_people_add_light.png b/res/drawable-xxxhdpi/ic_people_add_light.png
deleted file mode 100644
index 5db76a9..0000000
--- a/res/drawable-xxxhdpi/ic_people_add_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_add_dark.png b/res/drawable-xxxhdpi/ic_person_add_dark.png
deleted file mode 100644
index 37e252f..0000000
--- a/res/drawable-xxxhdpi/ic_person_add_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_add_light.png b/res/drawable-xxxhdpi/ic_person_add_light.png
deleted file mode 100644
index b279246..0000000
--- a/res/drawable-xxxhdpi/ic_person_add_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_light.png b/res/drawable-xxxhdpi/ic_person_light.png
deleted file mode 100644
index 59853fc..0000000
--- a/res/drawable-xxxhdpi/ic_person_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_light_large.png b/res/drawable-xxxhdpi/ic_person_light_large.png
deleted file mode 100644
index 44d4809..0000000
--- a/res/drawable-xxxhdpi/ic_person_light_large.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_phone_small_light.png b/res/drawable-xxxhdpi/ic_phone_small_light.png
deleted file mode 100644
index 433e4a7..0000000
--- a/res/drawable-xxxhdpi/ic_phone_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_photo_library_light.png b/res/drawable-xxxhdpi/ic_photo_library_light.png
deleted file mode 100644
index 9fe62f4..0000000
--- a/res/drawable-xxxhdpi/ic_photo_library_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_preview_pause.png b/res/drawable-xxxhdpi/ic_preview_pause.png
deleted file mode 100644
index 72ee671..0000000
--- a/res/drawable-xxxhdpi/ic_preview_pause.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_preview_play.png b/res/drawable-xxxhdpi/ic_preview_play.png
deleted file mode 100644
index b54968f..0000000
--- a/res/drawable-xxxhdpi/ic_preview_play.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_remove_light.png b/res/drawable-xxxhdpi/ic_remove_light.png
deleted file mode 100644
index e32a4dc..0000000
--- a/res/drawable-xxxhdpi/ic_remove_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_remove_small_light.png b/res/drawable-xxxhdpi/ic_remove_small_light.png
deleted file mode 100644
index 0e0cb05..0000000
--- a/res/drawable-xxxhdpi/ic_remove_small_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_save_dark.png b/res/drawable-xxxhdpi/ic_save_dark.png
deleted file mode 100644
index 2819de2..0000000
--- a/res/drawable-xxxhdpi/ic_save_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_save_light.png b/res/drawable-xxxhdpi/ic_save_light.png
deleted file mode 100644
index ba7564b..0000000
--- a/res/drawable-xxxhdpi/ic_save_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_send_dark.png b/res/drawable-xxxhdpi/ic_send_dark.png
deleted file mode 100644
index 5f52b29..0000000
--- a/res/drawable-xxxhdpi/ic_send_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_send_light.png b/res/drawable-xxxhdpi/ic_send_light.png
deleted file mode 100644
index b4e8563..0000000
--- a/res/drawable-xxxhdpi/ic_send_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_share_dark.png b/res/drawable-xxxhdpi/ic_share_dark.png
deleted file mode 100644
index a6ddd2d..0000000
--- a/res/drawable-xxxhdpi/ic_share_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_share_light.png b/res/drawable-xxxhdpi/ic_share_light.png
deleted file mode 100644
index ac63637..0000000
--- a/res/drawable-xxxhdpi/ic_share_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_sim_card_send.png b/res/drawable-xxxhdpi/ic_sim_card_send.png
deleted file mode 100644
index 0db661b..0000000
--- a/res/drawable-xxxhdpi/ic_sim_card_send.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_sms_delivery_ok.png b/res/drawable-xxxhdpi/ic_sms_delivery_ok.png
deleted file mode 100644
index 487525d..0000000
--- a/res/drawable-xxxhdpi/ic_sms_delivery_ok.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_sms_light.png b/res/drawable-xxxhdpi/ic_sms_light.png
deleted file mode 100644
index 98d1bc8..0000000
--- a/res/drawable-xxxhdpi/ic_sms_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_sms_multi_light.png b/res/drawable-xxxhdpi/ic_sms_multi_light.png
deleted file mode 100644
index e2f4bfc..0000000
--- a/res/drawable-xxxhdpi/ic_sms_multi_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_video_play_light.png b/res/drawable-xxxhdpi/ic_video_play_light.png
deleted file mode 100644
index 9192f84..0000000
--- a/res/drawable-xxxhdpi/ic_video_play_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wear_reply.png b/res/drawable-xxxhdpi/ic_wear_reply.png
deleted file mode 100644
index 34065f6..0000000
--- a/res/drawable-xxxhdpi/ic_wear_reply.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_widget_avatar_shadow.png b/res/drawable-xxxhdpi/ic_widget_avatar_shadow.png
deleted file mode 100644
index 83d02ce..0000000
--- a/res/drawable-xxxhdpi/ic_widget_avatar_shadow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_widget_list.png b/res/drawable-xxxhdpi/ic_widget_list.png
deleted file mode 100644
index f316487..0000000
--- a/res/drawable-xxxhdpi/ic_widget_list.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_work_profile.png b/res/drawable-xxxhdpi/ic_work_profile.png
deleted file mode 100644
index 72292bd..0000000
--- a/res/drawable-xxxhdpi/ic_work_profile.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/msg_bubble_error.9.png b/res/drawable-xxxhdpi/msg_bubble_error.9.png
deleted file mode 100644
index fb8161c..0000000
--- a/res/drawable-xxxhdpi/msg_bubble_error.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/msg_bubble_incoming.9.png b/res/drawable-xxxhdpi/msg_bubble_incoming.9.png
deleted file mode 100644
index 34130fc..0000000
--- a/res/drawable-xxxhdpi/msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/msg_bubble_input.9.png b/res/drawable-xxxhdpi/msg_bubble_input.9.png
deleted file mode 100644
index d330459..0000000
--- a/res/drawable-xxxhdpi/msg_bubble_input.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/msg_bubble_outgoing.9.png b/res/drawable-xxxhdpi/msg_bubble_outgoing.9.png
deleted file mode 100644
index cfd5734..0000000
--- a/res/drawable-xxxhdpi/msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/permissions.png b/res/drawable-xxxhdpi/permissions.png
deleted file mode 100644
index 2a7a0d7..0000000
--- a/res/drawable-xxxhdpi/permissions.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/swipe_shadow.9.png b/res/drawable-xxxhdpi/swipe_shadow.9.png
deleted file mode 100644
index 4726ef4..0000000
--- a/res/drawable-xxxhdpi/swipe_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/swipe_shadow_drag.9.png b/res/drawable-xxxhdpi/swipe_shadow_drag.9.png
deleted file mode 100644
index d48e311..0000000
--- a/res/drawable-xxxhdpi/swipe_shadow_drag.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/tab_btn_bg_normal.9.png b/res/drawable-xxxhdpi/tab_btn_bg_normal.9.png
deleted file mode 100644
index 1290a0d..0000000
--- a/res/drawable-xxxhdpi/tab_btn_bg_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/tab_btn_bg_pressed.9.png b/res/drawable-xxxhdpi/tab_btn_bg_pressed.9.png
deleted file mode 100644
index 9fce798..0000000
--- a/res/drawable-xxxhdpi/tab_btn_bg_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/widget_hr.9.png b/res/drawable-xxxhdpi/widget_hr.9.png
deleted file mode 100644
index 80fdaf6..0000000
--- a/res/drawable-xxxhdpi/widget_hr.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/widget_msg_bubble_incoming.9.png b/res/drawable-xxxhdpi/widget_msg_bubble_incoming.9.png
deleted file mode 100644
index 383133e..0000000
--- a/res/drawable-xxxhdpi/widget_msg_bubble_incoming.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/widget_msg_bubble_outgoing.9.png b/res/drawable-xxxhdpi/widget_msg_bubble_outgoing.9.png
deleted file mode 100644
index daf33b5..0000000
--- a/res/drawable-xxxhdpi/widget_msg_bubble_outgoing.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/attachment_audio_preview_background.xml b/res/drawable/attachment_audio_preview_background.xml
deleted file mode 100644
index 8b62415..0000000
--- a/res/drawable/attachment_audio_preview_background.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@android:color/white" />
-    <corners android:radius="2dp" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/attachment_image_placeholder_background.xml b/res/drawable/attachment_image_placeholder_background.xml
deleted file mode 100644
index b3315e8..0000000
--- a/res/drawable/attachment_image_placeholder_background.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@android:color/white" />
-    <corners android:radius="@dimen/attachment_rounded_corner_radius" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/attachment_more_items_background.xml b/res/drawable/attachment_more_items_background.xml
deleted file mode 100644
index 0ef8e61..0000000
--- a/res/drawable/attachment_more_items_background.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/attachment_preview_more_items_text_background" />
-    <corners android:radius="@dimen/attachment_rounded_corner_radius" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/attachment_vcard_preview_background.xml b/res/drawable/attachment_vcard_preview_background.xml
deleted file mode 100644
index 8b62415..0000000
--- a/res/drawable/attachment_vcard_preview_background.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@android:color/white" />
-    <corners android:radius="2dp" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/audio_progress_bar_background_incoming.xml b/res/drawable/audio_progress_bar_background_incoming.xml
deleted file mode 100644
index 990e1de..0000000
--- a/res/drawable/audio_progress_bar_background_incoming.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <stroke
-        android:color="@color/conversation_background"
-        android:width="1dp" />
-    <corners android:radius="3dp" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/audio_progress_bar_background_outgoing.xml b/res/drawable/audio_progress_bar_background_outgoing.xml
deleted file mode 100644
index 351cf18..0000000
--- a/res/drawable/audio_progress_bar_background_outgoing.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/conversation_background" />
-    <corners android:radius="3dp" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/audio_progress_bar_progress.xml b/res/drawable/audio_progress_bar_progress.xml
deleted file mode 100644
index a70ff32..0000000
--- a/res/drawable/audio_progress_bar_progress.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/audio_progress_bar_color" />
-    <corners android:radius="3dp" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/audio_record_control_button_background.xml b/res/drawable/audio_record_control_button_background.xml
deleted file mode 100644
index 02f329e..0000000
--- a/res/drawable/audio_record_control_button_background.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="oval">
-    <stroke
-        android:width="1dp"
-        android:color="@color/audio_record_control_button_stroke"/>
-    <solid
-        android:color="@android:color/white"/>
-</shape>
\ No newline at end of file
diff --git a/res/drawable/chips_dropdown_background.xml b/res/drawable/chips_dropdown_background.xml
deleted file mode 100644
index 48a727d..0000000
--- a/res/drawable/chips_dropdown_background.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:drawable="@color/chips_dropdown_background_activated"
-          android:state_activated="true"/>
-    <item android:drawable="@color/chips_dropdown_background_pressed" android:state_pressed="true"/>
-    <item android:drawable="@android:color/white"/>
-</selector>
\ No newline at end of file
diff --git a/res/drawable/chips_dropdown_text_color.xml b/res/drawable/chips_dropdown_text_color.xml
deleted file mode 100644
index 5f06751..0000000
--- a/res/drawable/chips_dropdown_text_color.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_activated="true" android:color="@android:color/white" />
-    <item android:state_checked="true" android:color="@android:color/white" />
-    <item android:state_selected="true" android:color="@android:color/white" />
-    <item android:color="#333333"/>
-</selector>
\ No newline at end of file
diff --git a/res/drawable/compose_chips_divider_gradient.xml b/res/drawable/compose_chips_divider_gradient.xml
deleted file mode 100644
index 65c6601..0000000
--- a/res/drawable/compose_chips_divider_gradient.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <gradient
-        android:startColor="@color/compose_contact_divider"
-        android:endColor="@android:color/transparent"
-        android:angle="-90"
-        android:dither="true"
-     />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/contact_picker_tab_background_selector.xml b/res/drawable/contact_picker_tab_background_selector.xml
deleted file mode 100644
index 78c443b..0000000
--- a/res/drawable/contact_picker_tab_background_selector.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_pressed="true"
-        android:drawable="@color/contact_picker_tab_pressed" />
-</selector>
\ No newline at end of file
diff --git a/res/drawable/contacts_fastscroll_label_left.xml b/res/drawable/contacts_fastscroll_label_left.xml
deleted file mode 100644
index 5ed079a..0000000
--- a/res/drawable/contacts_fastscroll_label_left.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<inset xmlns:android="http://schemas.android.com/apk/res/android"
-       android:insetLeft="@dimen/fastscroll_preview_margin_left_right">
-    <shape
-            android:shape="rectangle">
-        <corners
-                android:topLeftRadius="@dimen/fastscroll_preview_corner_radius"
-                android:topRightRadius="@dimen/fastscroll_preview_corner_radius"
-                android:bottomRightRadius="@dimen/fastscroll_preview_corner_radius" />
-        <solid android:color="@color/action_bar_background_color" />
-    </shape>
-</inset>
\ No newline at end of file
diff --git a/res/drawable/contacts_fastscroll_label_right.xml b/res/drawable/contacts_fastscroll_label_right.xml
deleted file mode 100644
index 67c4622..0000000
--- a/res/drawable/contacts_fastscroll_label_right.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<inset xmlns:android="http://schemas.android.com/apk/res/android"
-       android:insetRight="@dimen/fastscroll_preview_margin_left_right">
-    <shape
-            android:shape="rectangle">
-        <corners
-                android:topLeftRadius="@dimen/fastscroll_preview_corner_radius"
-                android:topRightRadius="@dimen/fastscroll_preview_corner_radius"
-                android:bottomLeftRadius="@dimen/fastscroll_preview_corner_radius" />
-        <solid android:color="@color/action_bar_background_color" />
-    </shape>
-</inset>
\ No newline at end of file
diff --git a/res/drawable/conversation_compose_divider_gradient.xml b/res/drawable/conversation_compose_divider_gradient.xml
deleted file mode 100644
index 2c8a180..0000000
--- a/res/drawable/conversation_compose_divider_gradient.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <gradient
-        android:startColor="@color/conversation_compose_divider_start"
-        android:endColor="@android:color/transparent"
-        android:angle="90"
-        android:dither="true"
-     />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/default_image.xml b/res/drawable/default_image.xml
deleted file mode 100644
index 749e73b..0000000
--- a/res/drawable/default_image.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<!--
-     This overrides frameworks/opt/photoviewer/res/drawable/default_image.xml
-     as a workaround for http://b/17510888. It should be removed after that
-     but is fixed.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-       android:shape="rectangle">
-
-  <!-- these are the dimensions of the original default_image.png -->
-  <size
-      android:width="215dp"
-      android:height="210dp" />
-
-  <solid
-      android:color="#00000000" />
-
-</shape>
diff --git a/res/drawable/fab_new_message_bg.xml b/res/drawable/fab_new_message_bg.xml
deleted file mode 100644
index 741b4b5..0000000
--- a/res/drawable/fab_new_message_bg.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<layer-list
-    xmlns:android="http://schemas.android.com/apk/res/android">
-    <item>
-        <bitmap
-            android:src="@drawable/fab_new_message_static_shadow" />
-    </item>
-    <item
-        android:left="2dp"
-        android:right="2dp"
-        android:bottom="@dimen/fab_padding_bottom">
-        <selector>
-            <item
-                android:state_pressed="true">
-                <shape
-                    android:shape="oval" >
-                    <solid
-                        android:color="@color/fab_pressed_color" />
-                </shape>
-            </item>
-            <item>
-                <shape
-                    android:shape="oval" >
-                    <solid
-                        android:color="@color/fab_color" />
-                </shape>
-            </item>
-        </selector>
-    </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/fastscroll_preview_left.xml b/res/drawable/fastscroll_preview_left.xml
deleted file mode 100644
index 165a222..0000000
--- a/res/drawable/fastscroll_preview_left.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <corners
-        android:topLeftRadius="@dimen/fastscroll_preview_corner_radius"
-        android:topRightRadius="@dimen/fastscroll_preview_corner_radius"
-        android:bottomRightRadius="@dimen/fastscroll_preview_corner_radius" />
-    <solid android:color="@color/color_filter_base_color" />
-</shape>
diff --git a/res/drawable/fastscroll_preview_right.xml b/res/drawable/fastscroll_preview_right.xml
deleted file mode 100644
index 7c0dc09..0000000
--- a/res/drawable/fastscroll_preview_right.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <corners
-        android:topLeftRadius="@dimen/fastscroll_preview_corner_radius"
-        android:topRightRadius="@dimen/fastscroll_preview_corner_radius"
-        android:bottomLeftRadius="@dimen/fastscroll_preview_corner_radius" />
-    <solid android:color="@color/color_filter_base_color" />
-</shape>
diff --git a/res/drawable/fastscroll_thumb.xml b/res/drawable/fastscroll_thumb.xml
deleted file mode 100644
index be7c96f..0000000
--- a/res/drawable/fastscroll_thumb.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <solid android:color="@color/fastscroll_thumb_color" />
-    <size android:width="@dimen/fastscroll_track_width"
-        android:height="@dimen/fastscroll_thumb_height" />
-</shape>
diff --git a/res/drawable/fastscroll_thumb_pressed.xml b/res/drawable/fastscroll_thumb_pressed.xml
deleted file mode 100644
index 39de5a6..0000000
--- a/res/drawable/fastscroll_thumb_pressed.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <solid android:color="@color/color_filter_base_color" />
-    <size android:width="@dimen/fastscroll_track_width"
-        android:height="@dimen/fastscroll_thumb_height" />
-</shape>
diff --git a/res/drawable/fastscroll_track.xml b/res/drawable/fastscroll_track.xml
deleted file mode 100644
index f3bf96d..0000000
--- a/res/drawable/fastscroll_track.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle" >
-    <solid android:color="@color/fastscroll_track_color" />
-    <size android:width="@dimen/fastscroll_track_width" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/gallery_checkbox_selector.xml b/res/drawable/gallery_checkbox_selector.xml
deleted file mode 100644
index cdd9734..0000000
--- a/res/drawable/gallery_checkbox_selector.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<selector
-    xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_checked="true"
-        android:drawable="@drawable/ic_checkbox_light" />
-    <item
-        android:state_selected="true"
-        android:drawable="@drawable/ic_checkbox_light" />
-    <item
-        android:drawable="@drawable/ic_checkbox_blank_light" />
-</selector>
\ No newline at end of file
diff --git a/res/drawable/gallery_image_background_selector.xml b/res/drawable/gallery_image_background_selector.xml
deleted file mode 100644
index 0b902fd..0000000
--- a/res/drawable/gallery_image_background_selector.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_pressed="true"
-        android:drawable="@color/gallery_image_pressed" />
-    <item
-        android:drawable="@android:color/transparent" />
-</selector>
\ No newline at end of file
diff --git a/res/drawable/generic_video_icon.xml b/res/drawable/generic_video_icon.xml
deleted file mode 100644
index e98cb94..0000000
--- a/res/drawable/generic_video_icon.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 Google Inc.
--->
-
-<shape
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <solid
-        android:color="@color/generic_video_icon"/>
-</shape>
\ No newline at end of file
diff --git a/res/drawable/mediapicker_tab_button_background.xml b/res/drawable/mediapicker_tab_button_background.xml
deleted file mode 100644
index 08dbf5c..0000000
--- a/res/drawable/mediapicker_tab_button_background.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_pressed="true"
-        android:drawable="@color/background_item_pressed" />
-    <item
-        android:state_activated="true"
-        android:drawable="@color/background_item_activated" />
-    <item
-        android:drawable="@color/background_item_transparent" />
-</selector>
\ No newline at end of file
diff --git a/res/drawable/message_bubble_incoming_no_arrow.xml b/res/drawable/message_bubble_incoming_no_arrow.xml
deleted file mode 100644
index d234508..0000000
--- a/res/drawable/message_bubble_incoming_no_arrow.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/color_filter_base_color" />
-    <corners android:radius="3dp" />
-</shape>
diff --git a/res/drawable/message_bubble_outgoing_no_arrow.xml b/res/drawable/message_bubble_outgoing_no_arrow.xml
deleted file mode 100644
index d234508..0000000
--- a/res/drawable/message_bubble_outgoing_no_arrow.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/color_filter_base_color" />
-    <corners android:radius="3dp" />
-</shape>
diff --git a/res/drawable/send_arrow_background.xml b/res/drawable/send_arrow_background.xml
deleted file mode 100644
index 4434997..0000000
--- a/res/drawable/send_arrow_background.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<selector
-    xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_pressed="true">
-        <shape
-            android:shape="oval" >
-            <solid android:color="@color/compose_message_send_color_pressed" />
-        </shape>
-     </item>
-    <item>
-        <shape
-            android:shape="oval" >
-            <solid android:color="@color/compose_message_send_color" />
-        </shape>
-    </item>
-</selector>
\ No newline at end of file
diff --git a/res/drawable/sim_selector_background_gradient.xml b/res/drawable/sim_selector_background_gradient.xml
deleted file mode 100644
index ea7e440..0000000
--- a/res/drawable/sim_selector_background_gradient.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <gradient
-        android:startColor="@color/sim_selector_background_start"
-        android:endColor="@color/sim_selector_background_end"
-        android:angle="90"
-        android:dither="true"
-     />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/subject_editor_bubble.xml b/res/drawable/subject_editor_bubble.xml
deleted file mode 100644
index 21f0248..0000000
--- a/res/drawable/subject_editor_bubble.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item>
-         <shape>
-             <solid android:color="@color/subject_editor_bubble" />
-             <corners android:radius="3dp" />
-         </shape>
-    </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/tab_btn_bg.xml b/res/drawable/tab_btn_bg.xml
deleted file mode 100644
index f7f03dd..0000000
--- a/res/drawable/tab_btn_bg.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_pressed="true"
-        android:drawable="@drawable/tab_btn_bg_pressed" />
-    <item
-        android:state_focused="true"
-        android:drawable="@drawable/tab_btn_bg_pressed" />
-    <item
-        android:drawable="@drawable/tab_btn_bg_normal" />
-</selector>
diff --git a/res/drawable/transparent_button_background.xml b/res/drawable/transparent_button_background.xml
deleted file mode 100644
index 08dbf5c..0000000
--- a/res/drawable/transparent_button_background.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_pressed="true"
-        android:drawable="@color/background_item_pressed" />
-    <item
-        android:state_activated="true"
-        android:drawable="@color/background_item_activated" />
-    <item
-        android:drawable="@color/background_item_transparent" />
-</selector>
\ No newline at end of file
diff --git a/res/drawable/widget_bottom_background.xml b/res/drawable/widget_bottom_background.xml
deleted file mode 100644
index 198b2d6..0000000
--- a/res/drawable/widget_bottom_background.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/widget_background_color" />
-    <corners android:radius="2dp"
-             android:bottomRightRadius="2dp"
-             android:topRightRadius="0dp"
-             android:bottomLeftRadius="2dp"
-             android:topLeftRadius="0dp"
-             />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/widget_top_background.xml b/res/drawable/widget_top_background.xml
deleted file mode 100644
index 1476c95..0000000
--- a/res/drawable/widget_top_background.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/action_bar_background_color" />
-    <corners android:radius="2dp"
-             android:bottomRightRadius="0dp"
-             android:topRightRadius="2dp"
-             android:bottomLeftRadius="0dp"
-             android:topLeftRadius="2dp"
-             />
-</shape>
\ No newline at end of file
diff --git a/res/layout/action_bar_conversation_name.xml b/res/layout/action_bar_conversation_name.xml
deleted file mode 100644
index 586cf83..0000000
--- a/res/layout/action_bar_conversation_name.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/conversation_title_container"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_gravity="fill_horizontal" >
-
-      <TextView
-            android:id="@+id/conversation_title"
-            style="@style/ConversationActionBarTitleTextStyle"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_centerVertical="true" />
-</RelativeLayout>
\ No newline at end of file
diff --git a/res/layout/add_contacts_confirmation_dialog_body.xml b/res/layout/add_contacts_confirmation_dialog_body.xml
deleted file mode 100644
index 07f3d0f..0000000
--- a/res/layout/add_contacts_confirmation_dialog_body.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:orientation="horizontal"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout_gravity="center_vertical"
-    android:padding="20dp" >
-
-    <com.android.messaging.ui.ContactIconView
-        android:id="@+id/contact_icon"
-        android:layout_width="@dimen/conversation_list_contact_icon_size"
-        android:layout_height="@dimen/conversation_list_contact_icon_size"
-        android:importantForAccessibility="no"
-        app:iconSize="large"
-        android:layout_gravity="center_vertical"
-        android:clickable="true" />
-
-    <TextView
-        android:id="@+id/participant_name"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:singleLine="true"
-        android:maxLines="1"
-        android:ellipsize="end"
-        style="@style/AddContactConfirmationTextStyle"
-        android:layout_gravity="center_vertical" />
-
-</LinearLayout>
diff --git a/res/layout/all_contacts_list_view.xml b/res/layout/all_contacts_list_view.xml
deleted file mode 100644
index fe05c4d..0000000
--- a/res/layout/all_contacts_list_view.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <ListView
-        android:id="@+id/all_contacts_list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:paddingTop="8dp"
-        android:paddingBottom="8dp"
-        android:clipToPadding="false"
-        android:divider="@null"
-        android:dividerHeight="0px"
-        android:fastScrollEnabled="true" />
-
-    <include
-        layout="@layout/list_empty_view"
-        android:id="@+id/empty_view"
-        android:visibility="gone" />
-
-</FrameLayout>
diff --git a/res/layout/apn_preference_layout.xml b/res/layout/apn_preference_layout.xml
deleted file mode 100644
index 12693d4..0000000
--- a/res/layout/apn_preference_layout.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<!--
-    This is the layout file for an ApnPreference in the ApnSettingsActivity. The preference
-    is a list item.
--->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:minHeight="?android:attr/listPreferredItemHeight"
-    android:gravity="center_vertical"
-    style="@style/ApnPreferenceLayoutStyle">
-
-    <RelativeLayout
-        android:id="@+id/text_layout"
-        android:layout_width="0dip"
-        android:layout_height="match_parent"
-        android:gravity="center_vertical"
-        android:layout_weight="1"
-        android:focusable="true"
-        android:background="?android:attr/selectableItemBackground">
-
-        <TextView
-            android:id="@android:id/title"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:focusable="true"
-            android:singleLine="true"
-            android:textAppearance="?android:attr/textAppearanceListItem" />
-
-        <TextView
-            android:id="@android:id/summary"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_below="@android:id/title"
-            android:layout_alignStart="@android:id/title"
-            android:textAppearance="?android:attr/textAppearanceListItemSecondary"
-            android:textColor="?android:attr/textColorSecondary"
-            android:maxLines="2" />
-
-    </RelativeLayout>
-
-    <RadioButton
-        android:id="@+id/apn_radiobutton"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="8dip"
-        android:layout_marginEnd="8dip"
-        android:layout_gravity="center_vertical"
-        android:clickable="true" />
-
-</LinearLayout>
diff --git a/res/layout/attachment_chooser_activity.xml b/res/layout/attachment_chooser_activity.xml
deleted file mode 100644
index 850716e..0000000
--- a/res/layout/attachment_chooser_activity.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<fragment
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.messaging.ui.attachmentchooser.AttachmentChooserFragment"
-    android:id="@+id/attachment_chooser_fragment"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/res/layout/attachment_chooser_audio.xml b/res/layout/attachment_chooser_audio.xml
deleted file mode 100644
index ea2f431..0000000
--- a/res/layout/attachment_chooser_audio.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/audio_attachment_background"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/attachment_chooser_audio_background">
-
-    <com.android.messaging.ui.AudioAttachmentView
-        android:id="@+id/audio_attachment_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:gravity="center"
-        app:layoutMode="compact" />
-
-</FrameLayout>
diff --git a/res/layout/attachment_chooser_fragment.xml b/res/layout/attachment_chooser_fragment.xml
deleted file mode 100644
index 15e249a..0000000
--- a/res/layout/attachment_chooser_fragment.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.attachmentchooser.AttachmentGridView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/grid"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:padding="6dp"
-    android:columnWidth="@dimen/attachment_grid_image_cell_size"
-    android:numColumns="auto_fit"
-    android:verticalSpacing="6dp"
-    android:horizontalSpacing="6dp"
-    android:stretchMode="columnWidth"
-    android:gravity="center"
-    android:clipToPadding="false" />
diff --git a/res/layout/attachment_chooser_image.xml b/res/layout/attachment_chooser_image.xml
deleted file mode 100644
index b635161..0000000
--- a/res/layout/attachment_chooser_image.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.AsyncImageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/attachment_image_view"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:minWidth="@dimen/single_attachment_min_dimen"
-    android:minHeight="@dimen/single_attachment_min_dimen"
-    android:scaleType="centerCrop"
-    android:adjustViewBounds="true" />
diff --git a/res/layout/attachment_chooser_vcard.xml b/res/layout/attachment_chooser_vcard.xml
deleted file mode 100644
index e6f1072..0000000
--- a/res/layout/attachment_chooser_vcard.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/attachment_chooser_vcard_background">
-
-    <com.android.messaging.ui.PersonItemView
-        android:id="@+id/vcard_attachment_view"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center" />
-
-</FrameLayout>
diff --git a/res/layout/attachment_chooser_video.xml b/res/layout/attachment_chooser_video.xml
deleted file mode 100644
index 4ae4b0a..0000000
--- a/res/layout/attachment_chooser_video.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.VideoThumbnailView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/attachment_video_thumbnail"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    app:mode="imageThumbnail"
-    app:allowCrop="true" />
diff --git a/res/layout/attachment_grid_item_view.xml b/res/layout/attachment_grid_item_view.xml
deleted file mode 100644
index 639ea64..0000000
--- a/res/layout/attachment_grid_item_view.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.attachmentchooser.AttachmentGridItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/attachment_grid_image_cell_size"
-    android:clickable="true">
-
-    <FrameLayout
-        android:id="@+id/attachment_container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:background="?android:attr/selectableItemBackground" />
-
-    <CheckBox
-        android:id="@+id/checkbox"
-        style="@style/AttachmentGridItemViewCheckBoxStyle"
-        android:button="@drawable/gallery_checkbox_selector"
-        android:background="@null"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="top|end"
-        android:paddingTop="4dp"
-        android:contentDescription="@string/gallery_checkbox_content_description" />
-</com.android.messaging.ui.attachmentchooser.AttachmentGridItemView>
diff --git a/res/layout/attachment_more_text_view.xml b/res/layout/attachment_more_text_view.xml
deleted file mode 100644
index 1a99a63..0000000
--- a/res/layout/attachment_more_text_view.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    style="@style/AttachmentPreviewMoreItemsText"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:gravity="center"
-    android:background="@drawable/attachment_more_items_background" />
\ No newline at end of file
diff --git a/res/layout/attachment_multiple_audio.xml b/res/layout/attachment_multiple_audio.xml
deleted file mode 100644
index 48440f0..0000000
--- a/res/layout/attachment_multiple_audio.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/audio_attachment_background"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@drawable/attachment_audio_preview_background">
-
-    <com.android.messaging.ui.AudioAttachmentView
-        android:id="@+id/audio_attachment_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:gravity="center"
-        app:layoutMode="compact" />
-
-</FrameLayout>
diff --git a/res/layout/attachment_multiple_image.xml b/res/layout/attachment_multiple_image.xml
deleted file mode 100644
index 7d911ac..0000000
--- a/res/layout/attachment_multiple_image.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<com.android.messaging.ui.AsyncImageView xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/attachment_image_view"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:maxWidth="@dimen/multiple_attachment_preview_width"
-    android:maxHeight="@dimen/multiple_attachment_preview_height"
-    android:scaleType="centerCrop"
-    android:adjustViewBounds="true"
-    app:fadeIn="false"
-    app:cornerRadius="@dimen/attachment_rounded_corner_radius"
-    app:placeholderDrawable="@drawable/attachment_image_placeholder_background" />
diff --git a/res/layout/attachment_multiple_vcard.xml b/res/layout/attachment_multiple_vcard.xml
deleted file mode 100644
index e03d47b..0000000
--- a/res/layout/attachment_multiple_vcard.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:background="@drawable/attachment_vcard_preview_background">
-
-    <com.android.messaging.ui.PersonItemView
-        android:id="@+id/vcard_attachment_view"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center" />
-
-</FrameLayout>
diff --git a/res/layout/attachment_multiple_video.xml b/res/layout/attachment_multiple_video.xml
deleted file mode 100644
index fdbc423..0000000
--- a/res/layout/attachment_multiple_video.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<com.android.messaging.ui.VideoThumbnailView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/attachment_video_thumbnail"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    app:mode="imageThumbnail"
-    app:allowCrop="true" />
diff --git a/res/layout/attachment_pending_item.xml b/res/layout/attachment_pending_item.xml
deleted file mode 100644
index 3e9bec7..0000000
--- a/res/layout/attachment_pending_item.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:orientation="vertical">
-
-    <ImageView
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/pending_item_view"
-        android:layout_width="@dimen/pending_attachment_size"
-        android:layout_height="@dimen/pending_attachment_size"
-        android:scaleType="center"
-        android:background="@android:color/white"
-        android:src="@drawable/ic_attachment_dark"
-        android:importantForAccessibility="no"
-        android:contentDescription="@null"/>
-
-    <TextView
-            android:id="@+id/caption"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:maxLines="3"
-            android:ellipsize="end"
-            android:padding="8dp"
-            android:background="@color/message_bubble_color_outgoing"
-            style="@style/ConversationMessage" />
-
-</LinearLayout>
diff --git a/res/layout/attachment_preview.xml b/res/layout/attachment_preview.xml
deleted file mode 100644
index 36ea038..0000000
--- a/res/layout/attachment_preview.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.AttachmentPreview
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="match_parent"
-    android:scrollbars="none">
-
-    <FrameLayout
-        android:id="@+id/attachment_content"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="right">
-        <FrameLayout
-            android:id="@+id/attachment_view"
-            style="@style/AttachmentPreviewAttachmentStyle"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="10dp" />
-
-        <ImageButton
-            android:id="@+id/close_button"
-            style="@style/AttachmentPreviewCloseButtonStyle"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:background="@null"
-            android:src="@drawable/ic_remove_light"
-            android:contentDescription="@null" />
-    </FrameLayout>
-</com.android.messaging.ui.AttachmentPreview>
\ No newline at end of file
diff --git a/res/layout/attachment_single_audio.xml b/res/layout/attachment_single_audio.xml
deleted file mode 100644
index 3ad02a8..0000000
--- a/res/layout/attachment_single_audio.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/audio_attachment_background"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:background="@drawable/attachment_audio_preview_background"
-    style="@style/AudioAttachmentViewStyle">
-
-    <com.android.messaging.ui.AudioAttachmentView
-        android:id="@+id/audio_attachment_view"
-        android:layout_width="match_parent"
-        android:layout_height="70dp" />
-
-</FrameLayout>
diff --git a/res/layout/attachment_single_image.xml b/res/layout/attachment_single_image.xml
deleted file mode 100644
index 7338368..0000000
--- a/res/layout/attachment_single_image.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:orientation="vertical">
-
-    <com.android.messaging.ui.AsyncImageView
-        android:id="@+id/attachment_image_view"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:minWidth="@dimen/single_attachment_min_dimen"
-        android:minHeight="@dimen/single_attachment_min_dimen"
-        android:maxHeight="@dimen/single_attachment_max_height"
-        android:scaleType="fitCenter"
-        android:adjustViewBounds="true"
-        app:fadeIn="false"
-        app:cornerRadius="@dimen/attachment_rounded_corner_radius" />
-
-    <TextView
-        android:id="@+id/caption"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:maxLines="3"
-        android:ellipsize="end"
-        android:padding="8dp"
-        android:background="@color/message_bubble_color_outgoing"
-        style="@style/ConversationMessage" />
-
-</LinearLayout>
diff --git a/res/layout/attachment_single_vcard.xml b/res/layout/attachment_single_vcard.xml
deleted file mode 100644
index 6016593..0000000
--- a/res/layout/attachment_single_vcard.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:background="@drawable/attachment_vcard_preview_background">
-
-    <com.android.messaging.ui.PersonItemView
-        android:id="@+id/vcard_attachment_view"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:paddingTop="@dimen/message_text_top_padding"
-        android:paddingBottom="@dimen/message_text_bottom_padding"
-        style="@style/VcardAttachmentSingleStyle" />
-
-</FrameLayout>
diff --git a/res/layout/attachment_single_video.xml b/res/layout/attachment_single_video.xml
deleted file mode 100644
index fba594f..0000000
--- a/res/layout/attachment_single_video.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<com.android.messaging.ui.VideoThumbnailView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/attachment_video_thumbnail"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:minWidth="120dp"
-    android:minHeight="120dp"
-    android:maxHeight="@dimen/single_attachment_max_height"
-    app:allowCrop="true"
-    app:mode="imageThumbnail" />
diff --git a/res/layout/audio_attachment_view.xml b/res/layout/audio_attachment_view.xml
deleted file mode 100644
index 6fcf89c..0000000
--- a/res/layout/audio_attachment_view.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<!-- A reusable view that hosts an inline audio player. The view is used by both the media picker
-     and the conversation to show an audio attachment -->
-<merge
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="horizontal">
-
-    <com.android.messaging.ui.AudioAttachmentPlayPauseButton
-        android:id="@+id/play_pause_button"
-        style="@style/AudioAttachmentViewPlayPauseButtonStyle"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center">
-        <ImageView
-            android:id="@+id/play_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:src="@drawable/ic_audio_play"
-            android:contentDescription="@string/audio_play_content_description"/>
-
-        <ImageView
-            android:id="@+id/pause_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:src="@drawable/ic_audio_pause"
-            android:contentDescription="@string/audio_pause_content_description"/>
-    </com.android.messaging.ui.AudioAttachmentPlayPauseButton>
-
-    <com.android.messaging.ui.mediapicker.PausableChronometer
-        android:id="@+id/timer"
-        style="@style/AudioAttachmentTimerText"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center" />
-
-    <com.android.messaging.ui.AudioPlaybackProgressBar
-        android:id="@+id/progress"
-        style="@android:style/Widget.ProgressBar.Horizontal"
-        android:layout_width="0dp"
-        android:layout_weight="1"
-        android:layout_height="@dimen/audio_progress_bar_height"
-        android:layout_gravity="center" />
-
-</merge>
diff --git a/res/layout/blocked_participant_list_item_view.xml b/res/layout/blocked_participant_list_item_view.xml
deleted file mode 100644
index 7ac0ec9..0000000
--- a/res/layout/blocked_participant_list_item_view.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.BlockedParticipantListItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    android:orientation="horizontal"
-    android:padding="@dimen/blocked_participant_list_item_view_padding">
-    <com.android.messaging.ui.ContactIconView
-        android:id="@+id/contact_icon"
-        android:layout_width="@dimen/contact_list_icon_size"
-        android:layout_height="@dimen/contact_list_icon_size"
-        android:importantForAccessibility="no"
-        app:iconSize="normal"
-        android:layout_gravity="center_vertical"/>
-    <TextView
-        android:id="@+id/name"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:singleLine="true"
-        android:maxLines="1"
-        android:ellipsize="end"
-        style="@style/ParticipantListItem"
-        android:layout_gravity="center_vertical"
-        android:padding="@dimen/blocked_participant_list_item_view_padding"/>
-    <TextView
-        android:id="@+id/tap_to_unblock"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:singleLine="true"
-        android:textColor="@color/unblock_item_text_color"
-        android:text="@string/tap_to_unblock_message"
-        android:layout_gravity="center_vertical"
-        android:gravity="right"
-        android:padding="@dimen/blocked_participant_list_item_view_padding"/>
-</com.android.messaging.ui.BlockedParticipantListItemView>
diff --git a/res/layout/blocked_participants_activity.xml b/res/layout/blocked_participants_activity.xml
deleted file mode 100644
index e00f20f..0000000
--- a/res/layout/blocked_participants_activity.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<fragment
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.messaging.ui.BlockedParticipantsFragment"
-    android:id="@+id/blocked_participants_fragment"
-    android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
-    android:layout_width="fill_parent"
-    android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/res/layout/blocked_participants_fragment.xml b/res/layout/blocked_participants_fragment.xml
deleted file mode 100644
index 7bb3c6a..0000000
--- a/res/layout/blocked_participants_fragment.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ListView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/list"
-    android:layout_width="fill_parent"
-    android:layout_height="match_parent"
-    android:divider="@null"
-    android:dividerHeight="0px" />
\ No newline at end of file
diff --git a/res/layout/chips_alternates_dropdown_item.xml b/res/layout/chips_alternates_dropdown_item.xml
deleted file mode 100644
index dad052c..0000000
--- a/res/layout/chips_alternates_dropdown_item.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="72dp"
-    android:background="@drawable/chips_dropdown_background"
-    android:padding="12dp">
-
-    <com.android.messaging.ui.ContactIconView
-        android:id="@android:id/icon"
-        style="@style/ChipIconStyle"
-        android:layout_width="40dp"
-        android:layout_height="40dp"
-        android:layout_gravity="center_vertical"
-        android:importantForAccessibility="no" />
-
-    <LinearLayout
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:layout_gravity="center_vertical"
-        android:orientation="vertical">
-
-        <TextView
-            android:id="@android:id/title"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:ellipsize="middle"
-            android:singleLine="true"
-            android:textAlignment="viewStart"
-            android:textColor="@drawable/chips_dropdown_text_color"
-            android:textSize="16sp" />
-
-        <TextView
-            android:id="@android:id/text1"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:ellipsize="middle"
-            android:singleLine="true"
-            android:textAlignment="viewStart"
-            android:textColor="@drawable/chips_dropdown_text_color"
-            android:textSize="14sp"/>
-
-    </LinearLayout>
-
-    <ImageView
-        android:id="@android:id/icon1"
-        style="@style/ChipDeleteIconStyle"
-        android:layout_width="36dp"
-        android:layout_height="48dp"
-        android:layout_gravity="center_vertical"
-        android:paddingTop="10dp"
-        android:paddingBottom="10dp"
-        android:contentDescription="@string/chips_delete_content_description" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/compose_message_view.xml b/res/layout/compose_message_view.xml
deleted file mode 100644
index 8bb8249..0000000
--- a/res/layout/compose_message_view.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.conversation.ComposeMessageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/message_compose_view_container"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical" >
-
-    <!-- Note it may seem off to have the layout_weight="1" on the compose bar and attachment view
-     when it's the media picker that expands, but this is correct because weight also works when
-     there's not enough space.  Any views with positive weights will be shrunk to make space.
-     When the media picker goes full screen, it fills the parent, leaving no room for the compose
-     bar -->
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:clipChildren="false"
-        android:clipToPadding="false"
-        android:orientation="vertical">
-
-        <View
-            android:id="@+id/top_margin"
-            android:layout_width="match_parent"
-            android:layout_height="16dp" />
-
-        <include layout="@layout/attachment_preview"
-            android:id="@+id/attachment_draft_view"
-            style="@style/ComposeMessageViewDraftViewStyle"
-            android:layout_width="match_parent"
-            android:layout_height="0dp"
-            android:layout_marginBottom="4dp"
-            android:layout_weight="1"
-            android:visibility="gone" />
-
-        <RelativeLayout
-            android:id="@+id/subject_view"
-            style="@style/SubjectViewStyle"
-            android:paddingTop="@dimen/compose_message_subject_top_padding"
-            android:paddingBottom="@dimen/compose_message_subject_bottom_padding"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:visibility="gone"
-            android:clipChildren="false"
-            android:clipToPadding="false"
-            android:orientation="horizontal">
-
-            <com.android.messaging.ui.PlainTextEditText
-                android:background="@drawable/subject_editor_bubble"
-                android:id="@+id/compose_subject_text"
-                style="@style/ConversationComposeSubjectText"
-                android:hint="@string/compose_message_view_subject_hint_text"
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                android:imeOptions="flagNoExtractUi" />
-
-            <ImageButton
-                android:id="@+id/delete_subject_button"
-                style="@style/AttachmentPreviewCloseButtonStyle"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:background="@null"
-                android:src="@drawable/ic_remove_light"
-                android:translationY="@dimen/compose_message_subject_cancel_top_offset"
-                android:contentDescription="@string/delete_subject_content_description" />
-
-        </RelativeLayout>
-
-        <!-- Holds all views that create the actual compose box -->
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal">
-
-            <!-- Contains compose message bubble and character counter for SMS or attachments size
-                 for MMS which should be left aligned -->
-            <LinearLayout
-                android:layout_width="0dp"
-                android:layout_weight="1"
-                android:layout_height="wrap_content"
-                android:orientation="vertical">
-
-                <!-- Contains media button and compose message bubble whose centers should be
-                vertically aligned -->
-                <LinearLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:orientation="horizontal">
-
-                    <ImageButton
-                        android:id="@+id/attach_media_button"
-                        style="@style/ComposeMessageViewAttachMediaButtonStyle"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="center_vertical"
-                        android:src="@drawable/ic_attachment_dark"
-                        android:paddingTop="@dimen/compose_message_attachment_padding_topBottom"
-                        android:paddingBottom="@dimen/compose_message_attachment_padding_topBottom"
-                        android:contentDescription="@string/attachMediaButtonContentDescription" />
-
-                    <com.android.messaging.ui.PlainTextEditText
-                        android:id="@+id/compose_message_text"
-                        style="@style/ConversationComposeSendText"
-                        android:layout_height="wrap_content"
-                        android:layout_width="0dp"
-                        android:layout_weight="1"
-                        android:layout_gravity="center"
-                        android:background="@drawable/msg_bubble_input"
-                        android:hint="@string/compose_message_view_hint_text"
-                        android:imeOptions="actionSend|flagNoEnterAction|flagNoExtractUi" />
-
-                </LinearLayout>
-
-                <TextView
-                    android:id="@+id/message_body_size"
-                    style="@style/ComposeMessageViewMessageBodySizeStyle"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:singleLine="true"
-                    android:maxLines="1"
-                    android:visibility="invisible" />
-            </LinearLayout>
-
-            <LinearLayout
-                android:orientation="vertical"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content">
-
-                <FrameLayout
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    style="@style/ComposeMessageViewFrameLayoutStyle"
-                    android:layout_gravity="top" >
-                    <com.android.messaging.ui.conversation.SimIconView
-                        android:id="@+id/self_send_icon"
-                        android:layout_width="@dimen/conversation_message_contact_icon_size"
-                        android:layout_height="@dimen/conversation_message_contact_icon_size"
-                        android:importantForAccessibility="no"
-                        app:iconSize="normal"
-                        app:reveal="true"
-                        android:clickable="true" />
-                    <ImageButton
-                        android:id="@+id/send_message_button"
-                        android:layout_width="@dimen/conversation_message_contact_icon_size"
-                        android:layout_height="@dimen/conversation_message_contact_icon_size"
-                        android:src="@drawable/ic_send_light"
-                        android:background="@drawable/send_arrow_background"
-                        android:contentDescription="@string/sendButtonContentDescription"
-                        android:visibility="gone" />
-                </FrameLayout>
-
-                <TextView
-                    android:id="@+id/mms_indicator"
-                    style="@style/MmsIndicatorStyle"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:singleLine="true"
-                    android:maxLines="1"
-                    android:visibility="invisible"
-                    android:text="@string/mms_text" />
-            </LinearLayout>
-        </LinearLayout>
-    </LinearLayout>
-
-    <FrameLayout
-        android:id="@+id/mediapicker_container"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_weight="0" />
-
-</com.android.messaging.ui.conversation.ComposeMessageView>
diff --git a/res/layout/contact_list_item_view.xml b/res/layout/contact_list_item_view.xml
deleted file mode 100644
index 71a7370..0000000
--- a/res/layout/contact_list_item_view.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.contact.ContactListItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    style="@style/ContactListItemViewStyle"
-    android:orientation="horizontal"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingTop="8dp"
-    android:paddingBottom="8dp"
-    android:background="?android:attr/selectableItemBackground">
-
-    <TextView
-        style="@style/ContactListAlphabetHeader"
-        android:id="@+id/alphabet_header"
-        android:layout_height="wrap_content"
-        android:layout_width="56dp"
-        android:layout_gravity="center_vertical"
-        android:visibility="gone" />
-
-    <FrameLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical">
-
-        <com.android.messaging.ui.ContactIconView
-            android:id="@+id/contact_icon"
-            android:layout_width="@dimen/contact_list_icon_size"
-            android:layout_height="@dimen/contact_list_icon_size"
-            android:importantForAccessibility="no"
-            app:iconSize="normal"
-            android:clickable="true" />
-
-        <ImageView
-            android:id="@+id/contact_checkmark"
-            android:layout_width="@dimen/contact_list_icon_size"
-            android:layout_height="@dimen/contact_list_icon_size"
-            android:src="@drawable/ic_checkmark_circle_blue"
-            android:visibility="gone"
-            android:importantForAccessibility="no"
-        android:contentDescription="@null"/>
-
-    </FrameLayout>
-
-    <LinearLayout
-        android:orientation="vertical"
-        style="@style/ContactListItemLinearLayoutStyle"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical" >
-
-    <LinearLayout
-        android:orientation="horizontal"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-            <TextView
-                android:id="@+id/contact_name"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:paddingBottom="4dp"
-                android:singleLine="true"
-                android:maxLines="1"
-                android:ellipsize="end"
-                style="@style/ContactListItem" />
-
-            <ImageView android:id="@+id/work_profile_icon"
-                android:src="@drawable/ic_work_profile"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:scaleType="center"
-                android:layout_gravity="center_vertical"
-                android:visibility="gone" />
-        </LinearLayout>
-
-        <LinearLayout
-            android:orientation="horizontal"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content">
-            <TextView
-                android:id="@+id/contact_details"
-                android:layout_width="0dp"
-                android:layout_weight="1"
-                android:layout_height="wrap_content"
-                android:singleLine="true"
-                android:maxLines="1"
-                android:ellipsize="end"
-                style="@style/ContactListItemDetail" />
-
-            <TextView
-                android:id="@+id/contact_detail_type"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                style="@style/ContactListItemDetailType" />
-        </LinearLayout>
-    </LinearLayout>
-</com.android.messaging.ui.contact.ContactListItemView>
diff --git a/res/layout/contact_picker_fragment.xml b/res/layout/contact_picker_fragment.xml
deleted file mode 100644
index 78350d7..0000000
--- a/res/layout/contact_picker_fragment.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <androidx.appcompat.widget.Toolbar
-        android:id="@+id/toolbar"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:minHeight="?attr/actionBarSize"
-        android:background="@color/action_bar_background_color"
-        app:theme="@style/ThemeOverlay.AppCompat.ActionBar">
-
-        <com.android.messaging.ui.MaxHeightScrollView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_horizontal"
-            android:maxHeight="@dimen/compose_message_chips_view_max_height">
-
-            <com.android.messaging.ui.contact.ContactRecipientAutoCompleteView
-                android:id="@+id/recipient_text_view"
-                style="@style/RecipientEditTextView"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_vertical"
-                android:minHeight="@dimen/compose_message_contacts_height"
-                android:popupBackground="@drawable/contact_popup_background"
-                android:dropDownWidth="match_parent"
-                android:hint="@string/recipient_hint"
-                app:avatarPosition="start"
-                app:chipHeight="@dimen/compose_message_chip_height"
-                app:chipPadding="@dimen/compose_message_chip_padding"
-                app:imageSpanAlignment="baseline"
-                app:unselectedChipTextColor="@color/chips_text_color"
-                app:unselectedChipBackgroundColor="@color/chips_background_color">
-
-                <!-- Put focus on the chips view by default so soft keyboard can be shown -->
-                <requestFocus />
-            </com.android.messaging.ui.contact.ContactRecipientAutoCompleteView>
-
-        </com.android.messaging.ui.MaxHeightScrollView>
-
-    </androidx.appcompat.widget.Toolbar>
-
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1">
-        <com.android.messaging.ui.CustomHeaderViewPager
-            android:id="@+id/contact_pager"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"/>
-
-        <View
-            android:id="@+id/compose_contact_divider"
-            android:layout_width="match_parent"
-            android:layout_height="4dp"
-            android:layout_gravity="top"
-            android:background="@drawable/compose_chips_divider_gradient"/>
-    </FrameLayout>
-</LinearLayout>
diff --git a/res/layout/conversation_activity.xml b/res/layout/conversation_activity.xml
deleted file mode 100644
index 8879704..0000000
--- a/res/layout/conversation_activity.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.ImeDetectFrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/conversation_and_compose_container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <FrameLayout
-        android:id="@+id/conversation_fragment_container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
-    <FrameLayout
-        android:id="@+id/contact_picker_fragment_container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-</com.android.messaging.ui.ImeDetectFrameLayout>
\ No newline at end of file
diff --git a/res/layout/conversation_fragment.xml b/res/layout/conversation_fragment.xml
deleted file mode 100644
index 0bf42f5..0000000
--- a/res/layout/conversation_fragment.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical"
-    android:weightSum="1.0">
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:orientation="vertical">
-        <!-- This FrameLayout will take all available height (excluding media picker)
-        but setting height to 0dp causes it not to shrink properly in KK, so a height of match_parent
-        works equally well -->
-        <FrameLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_weight="1" >
-            <!-- Message list -->
-            <androidx.recyclerview.widget.RecyclerView
-                android:id="@android:id/list"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:listSelector="@android:color/transparent"
-                android:paddingTop="@dimen/action_bar_height"
-                android:clipToPadding="false" />
-
-            <View
-                android:id="@+id/conversation_compose_divider"
-                android:layout_width="match_parent"
-                android:layout_height="4dp"
-                android:layout_gravity="bottom"
-                android:background="@drawable/conversation_compose_divider_gradient"
-                android:alpha="0"
-                android:importantForAccessibility="no" />
-
-            <include layout="@layout/sim_selector_view"
-                android:id="@+id/sim_selector"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:visibility="gone" />
-        </FrameLayout>
-
-        <!-- Attachments to send, compose message view, media picker. -->
-        <include layout="@layout/compose_message_view"
-            android:id="@+id/message_compose_view_container"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"/>
-    </LinearLayout>
-
-</LinearLayout>
diff --git a/res/layout/conversation_list_activity.xml b/res/layout/conversation_list_activity.xml
deleted file mode 100644
index 48f3b15..0000000
--- a/res/layout/conversation_list_activity.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<fragment
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.messaging.ui.conversationlist.ConversationListFragment"
-    android:id="@+id/conversation_list_fragment"
-    android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/res/layout/conversation_list_fragment.xml b/res/layout/conversation_list_fragment.xml
deleted file mode 100644
index 7fa2a9a..0000000
--- a/res/layout/conversation_list_fragment.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout
-    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" >
-
-    <androidx.recyclerview.widget.RecyclerView
-        android:id="@android:id/list"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingTop="@dimen/conversation_list_first_item_extra_padding"
-        android:clipToPadding="false"
-        android:listSelector="?android:attr/listSelector"
-        android:dividerHeight="0px" />
-
-    <include
-        layout="@layout/list_empty_view"
-        android:id="@+id/no_conversations_view"
-        android:visibility="gone"
-        android:layout_marginBottom="@dimen/conversation_list_empty_text_bottom_margin" />
-
-    <ImageView
-        style="@style/ConversationListFragmentStartNewButtonStyle"
-        android:id="@+id/start_new_conversation_button"
-        android:layout_width="@dimen/fab_size"
-        android:layout_height="@dimen/fab_size"
-        android:layout_gravity="bottom|end"
-        android:layout_marginBottom="@dimen/fab_bottom_margin"
-        android:paddingBottom="@dimen/fab_padding_bottom"
-        android:background="@drawable/fab_new_message_bg"
-        android:elevation="@dimen/fab_elevation"
-        android:scaleType="center"
-        android:src="@drawable/ic_add_white"
-        android:stateListAnimator="@animator/fab_anim"
-        android:contentDescription="@string/start_new_conversation"/>
-
-</FrameLayout>
diff --git a/res/layout/conversation_list_item_view.xml b/res/layout/conversation_list_item_view.xml
deleted file mode 100644
index 636616b..0000000
--- a/res/layout/conversation_list_item_view.xml
+++ /dev/null
@@ -1,205 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.conversationlist.ConversationListItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <!-- The background displayed when the conversation is swiped sideways -->
-    <LinearLayout
-        android:id="@+id/crossSwipeBackground"
-        android:orientation="horizontal"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:gravity="center_vertical|start"
-        android:baselineAligned="false"
-        android:background="@drawable/swipe_shadow"
-        android:visibility="gone"
-        android:padding="@dimen/conversation_list_item_view_padding">
-        <ImageView
-            android:id="@+id/crossSwipeArchiveIconLeft"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center_vertical|left"
-            android:visibility="gone"
-            android:src="@drawable/ic_archive_small_dark"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null"/>
-        <FrameLayout
-            android:layout_width="0dp"
-            android:layout_height="match_parent"
-            android:layout_weight="1" />
-        <ImageView
-            android:id="@+id/crossSwipeArchiveIconRight"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical|right"
-            android:visibility="gone"
-            android:src="@drawable/ic_archive_small_dark"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null"/>
-    </LinearLayout>
-
-    <FrameLayout
-        android:id="@+id/swipeableContainer"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:importantForAccessibility="no" >
-        <LinearLayout
-            android:id="@+id/swipeableContent"
-            android:orientation="horizontal"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:background="?android:attr/selectableItemBackground"
-            android:clipToPadding="false"
-            android:duplicateParentState="true"
-            android:padding="@dimen/conversation_list_item_view_padding">
-
-            <!-- Contact avatar on the left side of the view -->
-            <FrameLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:background="@android:color/transparent">
-                <com.android.messaging.ui.ContactIconView
-                    android:id="@+id/conversation_icon"
-                    android:layout_width="@dimen/conversation_list_contact_icon_size"
-                    android:layout_height="@dimen/conversation_list_contact_icon_size"
-                    android:importantForAccessibility="no"
-                    android:contentDescription="@null"
-                    app:iconSize="large"
-                    android:clickable="true"
-                    android:background="@android:color/transparent" />
-                <ImageView
-                    android:id="@+id/conversation_checkmark"
-                    android:layout_width="@dimen/conversation_list_contact_icon_size"
-                    android:layout_height="@dimen/conversation_list_contact_icon_size"
-                    android:src="@drawable/ic_checkmark_circle_blue"
-                    android:visibility="gone"
-                    android:importantForAccessibility="no"
-                    android:background="@android:color/transparent" />
-                <ImageView
-                    android:id="@+id/conversation_failed_status_icon"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="bottom|end"
-                    android:src="@drawable/ic_failed_status_red"
-                    android:visibility="gone"
-                    android:importantForAccessibility="no"
-                    android:contentDescription="@null"
-                    android:background="@android:color/transparent" />
-            </FrameLayout>
-
-            <!-- The conversation name, message preview, etc -->
-            <LinearLayout
-                style="@style/ConversationListItemViewPaddingStyle"
-                android:orientation="vertical"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:layout_gravity="top"
-                android:background="@android:color/transparent">
-                <LinearLayout
-                    android:orientation="horizontal"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:background="@android:color/transparent">
-                    <LinearLayout
-                            android:layout_width="0dp"
-                            android:layout_height="wrap_content"
-                            android:layout_weight="1"
-                            android:background="@android:color/transparent">
-                        <ImageView
-                            android:id="@+id/conversation_notification_bell"
-                            style="@style/ConversationListNotificationBellPaddingStyle"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:src="@drawable/ic_notifications_off_small_light"
-                            android:visibility="gone"
-                            android:importantForAccessibility="no"
-                            android:contentDescription="@null"
-                            android:layout_gravity="center_vertical"
-                            android:background="@android:color/transparent" />
-                        <TextView
-                            android:id="@+id/conversation_name"
-                            style="@style/ConversationListItemViewConversationNameStyle"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content"
-                            android:singleLine="true"
-                            android:layout_gravity="center_vertical"
-                            android:paddingBottom="2dp" />
-                    </LinearLayout>
-                    <ImageView
-                            android:id="@+id/work_profile_icon"
-                            android:layout_width="wrap_content"
-                            android:layout_height="wrap_content"
-                            android:layout_gravity="right"
-                            android:background="@android:color/transparent"
-                            android:scaleType="center"
-                            android:src="@drawable/ic_work_profile"
-                            android:visibility="gone"/>
-                </LinearLayout>
-                <TextView
-                    android:id="@+id/conversation_subject"
-                    style="@style/ConversationListItemViewTextStyle"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:singleLine="true"
-                    android:paddingBottom="3dp"
-                    android:ellipsize="end"
-                    android:visibility="gone" />
-                <TextView
-                    android:id="@+id/conversation_snippet"
-                    style="@style/ConversationListItemViewTextStyle"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:paddingBottom="3dp"
-                    android:ellipsize="end" />
-                <TextView
-                    android:id="@+id/conversation_timestamp"
-                    style="@style/ConversationListItemViewTextStyle"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content" />
-            </LinearLayout>
-
-            <!-- The attachment preview on the right side of the view -->
-            <FrameLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="top|end"
-                android:background="@android:color/transparent">
-                <com.android.messaging.ui.AsyncImageView
-                    android:id="@+id/conversation_image_preview"
-                    style="@style/ConversationListItemViewPaddingStyle"
-                    app:cornerRadius="@dimen/conversation_list_image_preview_corner_radius"
-                    android:layout_width="@dimen/conversation_list_image_preview_size"
-                    android:layout_height="@dimen/conversation_list_image_preview_size"
-                    android:visibility="gone"
-                    android:scaleType="centerCrop"
-                    android:contentDescription="@string/message_image_content_description"
-                    android:background="@android:color/transparent" />
-                <com.android.messaging.ui.AudioAttachmentView
-                    android:id="@+id/audio_attachment_view"
-                    android:layout_width="@dimen/conversation_list_image_preview_size"
-                    android:layout_height="@dimen/conversation_list_image_preview_size"
-                    app:layoutMode="subcompact"
-                    android:visibility="gone"
-                    android:background="@android:color/transparent" />
-            </FrameLayout>
-        </LinearLayout>
-    </FrameLayout>
-</com.android.messaging.ui.conversationlist.ConversationListItemView>
diff --git a/res/layout/conversation_message_view.xml b/res/layout/conversation_message_view.xml
deleted file mode 100644
index daad600..0000000
--- a/res/layout/conversation_message_view.xml
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.conversation.ConversationMessageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    style="@style/ConversationMessageViewStyle"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content" >
-
-    <com.android.messaging.ui.ContactIconView
-        android:id="@+id/conversation_icon"
-        android:layout_width="@dimen/conversation_message_contact_icon_size"
-        android:layout_height="@dimen/conversation_message_contact_icon_size"
-        app:iconSize="normal"
-        android:clickable="true"
-        android:layout_gravity="center_vertical"
-        android:importantForAccessibility="no" />
-
-    <com.android.messaging.ui.conversation.ConversationMessageBubbleView
-        android:id="@+id/message_content"
-        android:orientation="vertical"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical">
-
-        <LinearLayout
-            android:id="@+id/message_attachments"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:visibility="gone" >
-
-            <!-- Video, audio and vcard attachments (if present) will be added here -->
-
-            <com.android.messaging.ui.MultiAttachmentLayout
-                android:id="@+id/multiple_attachments"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:visibility="gone" />
-
-            <com.android.messaging.ui.AsyncImageView
-                android:id="@+id/message_image"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:minWidth="@dimen/conversation_message_photo_min_size"
-                android:minHeight="@dimen/conversation_message_photo_min_size"
-                android:adjustViewBounds="true"
-                android:scaleType="fitCenter"
-                android:layout_gravity="center_vertical"
-                android:visibility="gone"
-                app:placeholderDrawable="@drawable/attachment_image_placeholder_background"
-                app:cornerRadius="@dimen/attachment_rounded_corner_radius"
-                android:contentDescription="@string/message_image_content_description" />
-
-        </LinearLayout>
-
-        <com.android.messaging.ui.conversation.MessageBubbleBackground
-            android:id="@+id/message_text_and_info"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical">
-
-            <LinearLayout
-                android:id="@+id/message_title_layout"
-                android:orientation="vertical"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:visibility="gone"
-                android:importantForAccessibility="noHideDescendants" >
-
-                <TextView
-                    android:id="@+id/message_title"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    style="@style/ConversationMessageTitle" />
-
-                <TextView
-                    android:id="@+id/mms_info"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    style="@style/ConversationMessageInfo" />
-
-            </LinearLayout>
-
-            <LinearLayout
-                android:id="@+id/subject_container"
-                android:orientation="horizontal"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:importantForAccessibility="noHideDescendants" >
-
-                <TextView
-                    android:id="@+id/subject_label"
-                    android:text="@string/conversation_message_view_subject_text"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    style="@style/ConversationMessage" />
-
-                <TextView
-                    android:id="@+id/subject_text"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    style="@style/ConversationMessage" />
-
-            </LinearLayout>
-
-            <TextView
-                android:id="@+id/message_text"
-                style="@style/ConversationMessage"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:visibility="gone"
-                android:importantForAccessibility="no" />
-
-            <com.android.messaging.ui.LineWrapLayout
-                android:id="@+id/message_metadata"
-                android:orientation="horizontal"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:importantForAccessibility="noHideDescendants" >
-
-                <TextView
-                    android:id="@+id/message_sender_name"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginRight="4dp"
-                    style="@style/ConversationMessageStatus"
-                    android:visibility="gone" />
-                <TextView
-                    android:id="@+id/message_status"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    style="@style/ConversationMessageStatus"
-                    android:visibility="gone" />
-                <TextView
-                    android:id="@+id/sim_name"
-                    style="@style/MessageSimIndicator"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:visibility="gone" />
-                <ImageView
-                    android:id="@+id/smsDeliveredBadge"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center"
-                    style="@style/SmsDeliverdBadge"
-                    android:src="@drawable/ic_sms_delivery_ok"
-                    android:visibility="gone" />
-            </com.android.messaging.ui.LineWrapLayout>
-
-        </com.android.messaging.ui.conversation.MessageBubbleBackground>
-
-    </com.android.messaging.ui.conversation.ConversationMessageBubbleView>
-
-</com.android.messaging.ui.conversation.ConversationMessageView>
diff --git a/res/layout/copy_contact_dialog_view.xml b/res/layout/copy_contact_dialog_view.xml
deleted file mode 100644
index 15e07f7..0000000
--- a/res/layout/copy_contact_dialog_view.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    style="@style/CopyContactDialogTextStyle"
-    android:ellipsize="end"
-    android:paddingTop="@dimen/copy_contact_dialog_top_padding"/>
\ No newline at end of file
diff --git a/res/layout/custom_header_view_pager.xml b/res/layout/custom_header_view_pager.xml
deleted file mode 100644
index 96f8fa8..0000000
--- a/res/layout/custom_header_view_pager.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <com.android.messaging.ui.ViewPagerTabs
-        android:id="@+id/tab_strip"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:textAllCaps="true"
-        android:orientation="horizontal"
-        style="@style/PagerTabHeader" />
-
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1">
-
-        <androidx.viewpager.widget.ViewPager
-            android:id="@+id/pager"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" />
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="2dp"
-            android:layout_gravity="top"
-            android:background="@drawable/compose_chips_divider_gradient"/>
-
-    </FrameLayout>
-</merge>
\ No newline at end of file
diff --git a/res/layout/debug_mmsconfig_activity.xml b/res/layout/debug_mmsconfig_activity.xml
deleted file mode 100644
index 4056317..0000000
--- a/res/layout/debug_mmsconfig_activity.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<fragment
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.messaging.ui.debug.DebugMmsConfigFragment"
-    android:id="@+id/debug_mmsconfig_fragment"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/res/layout/debug_mmsconfig_fragment.xml b/res/layout/debug_mmsconfig_fragment.xml
deleted file mode 100644
index be61710..0000000
--- a/res/layout/debug_mmsconfig_fragment.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ListView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/list"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:divider="@null"
-    android:dividerHeight="0px" />
\ No newline at end of file
diff --git a/res/layout/debug_mmsconfig_item_view.xml b/res/layout/debug_mmsconfig_item_view.xml
deleted file mode 100644
index a825ee5..0000000
--- a/res/layout/debug_mmsconfig_item_view.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.debug.DebugMmsConfigItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="horizontal"
-    android:layout_width="match_parent"
-    android:layout_height="56dp"
-    android:background="@android:color/background_light"
-    android:gravity="center_vertical"
-    android:clickable="true"
-    style="@style/DebugMmsConfigItemStyle" >
-    <TextView
-        android:id="@+id/title"
-        android:layout_width="0dp"
-        android:layout_weight="1"
-        android:layout_height="match_parent"
-        android:singleLine="true"
-        android:maxLines="1"
-        android:gravity="center_vertical"/>
-    <Switch
-        android:id="@+id/switch_button"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:visibility="gone" />
-    <TextView
-        android:id="@+id/text_value"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        android:singleLine="true"
-        android:gravity="center_vertical"
-        android:visibility="gone"/>
-</com.android.messaging.ui.debug.DebugMmsConfigItemView>
diff --git a/res/layout/debug_sms_mms_from_dump_file_dialog.xml b/res/layout/debug_sms_mms_from_dump_file_dialog.xml
deleted file mode 100644
index 342f489..0000000
--- a/res/layout/debug_sms_mms_from_dump_file_dialog.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:padding="6dp"
-    android:background="@color/conversation_background"
-    >
-
-    <ListView android:id="@+id/dump_file_list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:drawSelectorOnTop="false"
-        android:longClickable="false"/>
-
-</FrameLayout>
diff --git a/res/layout/enter_phone_number_view.xml b/res/layout/enter_phone_number_view.xml
deleted file mode 100644
index 825ac51..0000000
--- a/res/layout/enter_phone_number_view.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<EditText
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingTop="16dp"
-    android:paddingLeft="24dp"
-    android:paddingRight="24dp"
-    android:singleLine="true"
-    android:maxLines="1"
-    android:hint="@string/enter_phone_number_hint"
-    android:inputType="number|phone"
-    />
diff --git a/res/layout/fastscroll_preview.xml b/res/layout/fastscroll_preview.xml
deleted file mode 100644
index ab72744..0000000
--- a/res/layout/fastscroll_preview.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:gravity="center"
-    android:paddingLeft="@dimen/fastscroll_preview_padding"
-    android:paddingRight="@dimen/fastscroll_preview_padding"
-    android:textColor="@color/fastscroll_preview_text_color"
-    android:textSize="@dimen/fastscroll_preview_text_size" />
diff --git a/res/layout/fastscroll_thumb.xml b/res/layout/fastscroll_thumb.xml
deleted file mode 100644
index 6f57056..0000000
--- a/res/layout/fastscroll_thumb.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ImageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:scaleType="fitXY" />
\ No newline at end of file
diff --git a/res/layout/fastscroll_track.xml b/res/layout/fastscroll_track.xml
deleted file mode 100644
index 6a35e94..0000000
--- a/res/layout/fastscroll_track.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ImageView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:scaleType="fitXY"
-    android:src="@drawable/fastscroll_track" />
diff --git a/res/layout/frequent_contacts_list_view.xml b/res/layout/frequent_contacts_list_view.xml
deleted file mode 100644
index 9cb0c3a..0000000
--- a/res/layout/frequent_contacts_list_view.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <ListView
-        android:id="@+id/frequent_contacts_list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:paddingTop="8dp"
-        android:paddingBottom="8dp"
-        android:clipToPadding="false"
-        android:divider="@null"
-        android:dividerHeight="0px"
-        android:fastScrollEnabled="true" />
-
-    <include
-        layout="@layout/list_empty_view"
-        android:id="@+id/empty_view"
-        android:visibility="gone" />
-
-</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/gallery_grid_item_view.xml b/res/layout/gallery_grid_item_view.xml
deleted file mode 100644
index f8f3920..0000000
--- a/res/layout/gallery_grid_item_view.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.mediapicker.GalleryGridItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/gallery_image_cell_size"
-    android:background="@color/gallery_image_default_background"
-    android:clickable="true">
-
-    <!-- Thumbnail for image and video contents. -->
-    <com.android.messaging.ui.AsyncImageView
-        android:id="@+id/thumbnail"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:scaleType="centerCrop" />
-
-    <!-- Additional info such as icon, name and etc. -->
-    <RelativeLayout
-        android:id="@+id/additional_info"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_gravity="center"
-        android:orientation="vertical"
-        android:visibility="gone" >
-
-        <FrameLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_above="@id/file_info" >
-            <ImageView
-                android:id="@+id/icon"
-                android:layout_width="@dimen/gallery_icon_size"
-                android:layout_height="@dimen/gallery_icon_size"
-                android:layout_gravity="center"
-                android:scaleType="fitCenter"
-                android:background="@color/background_item_transparent"
-                android:visibility="gone" />
-        </FrameLayout>
-
-        <!-- File info for audio contents only -->
-        <LinearLayout
-            android:id="@+id/file_info"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_alignParentBottom="true"
-            android:layout_marginBottom="4dp"
-            android:paddingLeft="4dp"
-            android:paddingRight="4dp"
-            android:orientation="vertical"
-            android:visibility="gone" >
-
-            <TextView
-                android:id="@+id/file_name"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:singleLine="true"
-                android:ellipsize="end"
-                android:textAppearance="@android:style/TextAppearance.Material.Subhead" />
-
-            <TextView
-                android:id="@+id/file_type"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:singleLine="true"
-                android:ellipsize="end"
-                android:gravity="right"
-                android:textAppearance="@android:style/TextAppearance.Material.Caption" />
-        </LinearLayout>
-    </RelativeLayout>
-
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:focusableInTouchMode="true"
-        android:background="@drawable/gallery_image_background_selector" />
-
-    <CheckBox
-        android:id="@+id/checkbox"
-        style="@style/GalleryGridItemViewCheckBoxStyle"
-        android:button="@drawable/gallery_checkbox_selector"
-        android:background="@null"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="top|end"
-        android:paddingTop="4dp"
-        android:visibility="gone"
-        android:contentDescription="@string/gallery_checkbox_content_description" />
-
-</com.android.messaging.ui.mediapicker.GalleryGridItemView>
diff --git a/res/layout/group_mms_setting_dialog.xml b/res/layout/group_mms_setting_dialog.xml
deleted file mode 100644
index efc3b00..0000000
--- a/res/layout/group_mms_setting_dialog.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<RadioGroup
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical">
-
-    <RadioButton
-        android:id="@+id/disable_group_mms_button"
-        style="@style/GroupMmsSettingItem"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/disable_group_mms"/>
-
-    <RadioButton
-        android:id="@+id/enable_group_mms_button"
-        style="@style/GroupMmsSettingItem"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/enable_group_mms"/>
-
-</RadioGroup>
diff --git a/res/layout/license_activity.xml b/res/layout/license_activity.xml
deleted file mode 100644
index 1475ac2..0000000
--- a/res/layout/license_activity.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<WebView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/content"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-</WebView>
\ No newline at end of file
diff --git a/res/layout/list_empty_view.xml b/res/layout/list_empty_view.xml
deleted file mode 100644
index aa4b4fb..0000000
--- a/res/layout/list_empty_view.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.ListEmptyView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_gravity="center_vertical">
-
-    <ImageView
-        android:id="@+id/empty_image_hint"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:importantForAccessibility="no"
-        android:contentDescription="@null"/>
-
-    <TextView
-        android:id="@+id/empty_text_hint"
-        android:gravity="center_horizontal"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:layout_marginLeft="@dimen/list_empty_text_left_right_margin"
-        android:layout_marginRight="@dimen/list_empty_text_left_right_margin"
-        android:layout_marginTop="@dimen/list_empty_text_top_margin"
-        style="@style/ListEmptyText"/>
-</com.android.messaging.ui.ListEmptyView>
diff --git a/res/layout/mediapicker_audio_chooser.xml b/res/layout/mediapicker_audio_chooser.xml
deleted file mode 100644
index 795d2f8..0000000
--- a/res/layout/mediapicker_audio_chooser.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.mediapicker.AudioRecordView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@android:color/white"
-    android:importantForAccessibility="no" >
-
-    <FrameLayout
-        android:id="@+id/mediapicker_enabled"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" >
-
-        <TextView
-            android:id="@+id/hint_text"
-            style="@style/AudioPickerHintText"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="top|center"
-            android:layout_marginTop="16dp"
-            android:text="@string/audio_picker_hint_text"
-            android:importantForAccessibility="no" />
-
-        <com.android.messaging.ui.mediapicker.PausableChronometer
-            android:id="@+id/timer_text"
-            style="@style/AudioPickerTimerText"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="top|center"
-            android:layout_marginTop="16dp"
-            android:visibility="gone" />
-
-        <com.android.messaging.ui.mediapicker.SoundLevels
-            android:id="@+id/sound_levels"
-            android:layout_width="260dp"
-            android:layout_height="260dp"
-            android:layout_gravity="center"
-            android:focusableInTouchMode="false"
-            app:minLevelRadius="55dp"
-            app:maxLevelRadius="130dp"
-            app:primaryColor="@color/audio_picker_level_primary_color" />
-
-        <!-- View to make the touachable area larger for accessibility's two-finger touch -->
-        <FrameLayout
-            android:id="@+id/record_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            android:padding="30dp"
-            android:focusable="true"
-            android:focusableInTouchMode="true"
-            android:contentDescription="@string/audio_record_view_content_description" >
-
-            <ImageView
-                android:id="@+id/record_button_visual"
-                android:layout_width="70dp"
-                android:layout_height="70dp"
-                android:layout_margin="30dp"
-                android:layout_gravity="center"
-                android:scaleType="center"
-                android:src="@drawable/ic_mp_audio_mic"
-                android:background="@drawable/audio_record_control_button_background"
-                android:importantForAccessibility="no"
-                android:contentDescription="@null" />
-        </FrameLayout>
-
-    </FrameLayout>
-
-    <!-- This view will hide all other views if the required permission is not granted -->
-    <TextView
-        android:id="@+id/missing_permission_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:text="@string/enable_permission_procedure"
-        android:contentDescription="@string/enable_permission_procedure_description"
-        android:background="@android:color/white"
-        android:gravity="center"
-        android:visibility="gone" />
-
-</com.android.messaging.ui.mediapicker.AudioRecordView>
diff --git a/res/layout/mediapicker_camera_chooser.xml b/res/layout/mediapicker_camera_chooser.xml
deleted file mode 100644
index 27d26bd..0000000
--- a/res/layout/mediapicker_camera_chooser.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<com.android.messaging.ui.mediapicker.CameraMediaChooserView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@android:color/black">
-
-    <FrameLayout
-        android:id="@+id/mediapicker_enabled"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" >
-
-        <!-- Default to using the hardware rendered camera preview, we will fall back to
-        SoftwareCameraPreview in CameraMediaChooserView if needed -->
-        <com.android.messaging.ui.mediapicker.HardwareCameraPreview
-            android:id="@+id/camera_preview"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_gravity="center" />
-
-        <com.android.messaging.ui.mediapicker.camerafocus.RenderOverlay
-            android:id="@+id/focus_visual"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent" />
-
-        <View
-            android:id="@+id/camera_shutter_visual"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:background="@android:color/white"
-            android:visibility="gone" />
-
-        <!-- Need a background on this view in order for the ripple effect to have a place to draw -->
-        <FrameLayout
-            android:id="@+id/camera_button_container"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:background="@android:color/transparent"
-            android:paddingTop="20dp"
-            android:layout_gravity="bottom">
-
-            <FrameLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="start|center_vertical"
-                style="@style/CameraChooserFrameStyle">
-
-                <ImageButton
-                    android:id="@+id/camera_swap_mode_button"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:minWidth="48dp"
-                    android:minHeight="48dp"
-                    android:background="@drawable/transparent_button_background"
-                    android:src="@drawable/ic_mp_video_small_light"
-                    android:contentDescription="@string/camera_switch_to_video_mode"/>
-
-                <Chronometer
-                    android:id="@+id/camera_video_counter"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:textColor="@android:color/white"
-                    android:textSize="18sp"
-                    android:padding="16dp"
-                    android:visibility="gone" />
-
-            </FrameLayout>
-
-            <ImageButton
-                android:id="@+id/camera_capture_button"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:minWidth="96dp"
-                android:minHeight="96dp"
-                android:background="@drawable/transparent_button_background"
-                android:src="@drawable/ic_checkmark_large_light"
-                android:contentDescription="@string/camera_take_picture"/>
-
-            <FrameLayout
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="end|center_vertical"
-                android:paddingEnd="16dp">
-
-                <ImageButton
-                    android:id="@+id/camera_fullScreen_button"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:minWidth="48dp"
-                    android:minHeight="48dp"
-                    android:background="@drawable/transparent_button_background"
-                    android:src="@drawable/ic_mp_full_screen_light"
-                    android:contentDescription="@string/camera_switch_full_screen" />
-
-                <ImageButton
-                    android:id="@+id/camera_swapCamera_button"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:minWidth="48dp"
-                    android:minHeight="48dp"
-                    android:background="@drawable/transparent_button_background"
-                    android:visibility="gone"
-                    android:contentDescription="@string/camera_switch_camera_facing"/>
-
-                <ImageButton
-                    android:id="@+id/camera_cancel_button"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:minWidth="48dp"
-                    android:minHeight="48dp"
-                    android:background="@drawable/transparent_button_background"
-                    android:src="@drawable/ic_remove_small_light"
-                    android:visibility="gone"
-                    android:contentDescription="@string/camera_cancel_recording" />
-
-            </FrameLayout>
-
-        </FrameLayout>
-
-    </FrameLayout>
-
-    <!-- This view will hide all other views if the required permission is not granted -->
-    <TextView
-        android:id="@+id/missing_permission_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:text="@string/enable_permission_procedure"
-        android:contentDescription="@string/enable_permission_procedure_description"
-        android:background="@android:color/white"
-        android:gravity="center"
-        android:visibility="gone" />
-
-</com.android.messaging.ui.mediapicker.CameraMediaChooserView>
diff --git a/res/layout/mediapicker_contact_chooser.xml b/res/layout/mediapicker_contact_chooser.xml
deleted file mode 100644
index dcace4f..0000000
--- a/res/layout/mediapicker_contact_chooser.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2020 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.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@android:color/white"
-    android:importantForAccessibility="no" >
-
-    <FrameLayout
-        android:id="@+id/mediapicker_enabled"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" >
-
-        <TextView
-            style="@style/ContactPickerHintText"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="top|center"
-            android:layout_marginTop="16dp"
-            android:text="@string/contact_picker_hint_text"
-            android:importantForAccessibility="no" />
-
-        <ImageView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            android:scaleType="center"
-            android:src="@drawable/ic_person_light_large"
-            android:tint="@color/primary_color"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null" />
-    </FrameLayout>
-
-    <!-- This view will hide all other views if the required permission is not granted -->
-    <TextView
-        android:id="@+id/missing_permission_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:text="@string/enable_permission_procedure"
-        android:contentDescription="@string/enable_permission_procedure_description"
-        android:background="@android:color/white"
-        android:gravity="center"
-        android:visibility="gone" />
-
-</FrameLayout>
diff --git a/res/layout/mediapicker_fragment.xml b/res/layout/mediapicker_fragment.xml
deleted file mode 100644
index 2e414bd..0000000
--- a/res/layout/mediapicker_fragment.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<com.android.messaging.ui.mediapicker.MediaPickerPanel
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <com.android.messaging.ui.PagingAwareViewPager
-        android:id="@+id/mediapicker_view_pager"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:minHeight="@dimen/mediapicker_default_chooser_height" />
-    <LinearLayout
-        android:id="@+id/mediapicker_tabstrip"
-        android:layout_width="match_parent"
-        android:layout_height="48dp"
-        android:orientation="horizontal"
-        android:gravity="center" />
-</com.android.messaging.ui.mediapicker.MediaPickerPanel>
diff --git a/res/layout/mediapicker_gallery_chooser.xml b/res/layout/mediapicker_gallery_chooser.xml
deleted file mode 100644
index b4f3c01..0000000
--- a/res/layout/mediapicker_gallery_chooser.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <com.android.messaging.ui.mediapicker.GalleryGridView
-        android:id="@+id/gallery_grid_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:padding="6dp"
-        android:columnWidth="@dimen/gallery_image_cell_size"
-        android:numColumns="auto_fit"
-        android:verticalSpacing="6dp"
-        android:horizontalSpacing="6dp"
-        android:stretchMode="columnWidth"
-        android:gravity="center"
-        android:clipToPadding="false"
-        android:background="@android:color/white" />
-    <!-- This view will hide all other views if the required permission is not granted -->
-    <TextView
-        android:id="@+id/missing_permission_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:text="@string/enable_permission_procedure"
-        android:contentDescription="@string/enable_permission_procedure_description"
-        android:background="@android:color/white"
-        android:gravity="center"
-        android:visibility="gone" />
-</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/mediapicker_location_chooser.xml b/res/layout/mediapicker_location_chooser.xml
deleted file mode 100644
index 9135299..0000000
--- a/res/layout/mediapicker_location_chooser.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<fragment
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/place_picker_fragment"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:name="com.google.android.location.places.ui.placepicker.PlacePickerFragment" />
diff --git a/res/layout/mediapicker_location_container.xml b/res/layout/mediapicker_location_container.xml
deleted file mode 100644
index 6f476d3..0000000
--- a/res/layout/mediapicker_location_container.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/place_picker_container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    >
-    <!-- This view will be hidden by the PlacePickerFragment if the required permission is granted -->
-    <TextView
-        android:id="@+id/missing_permission_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:gravity="center"
-        android:text="@string/enable_permission_procedure"
-        android:contentDescription="@string/enable_permission_procedure_description" />
-    </FrameLayout>
diff --git a/res/layout/mediapicker_tab_button.xml b/res/layout/mediapicker_tab_button.xml
deleted file mode 100644
index 353c871..0000000
--- a/res/layout/mediapicker_tab_button.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<!-- android:contentDescription is set in code -->
-<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="48dp"
-    android:layout_height="48dp"
-    android:background="@drawable/mediapicker_tab_button_background"
-    android:contentDescription="@null">
-</ImageButton>
\ No newline at end of file
diff --git a/res/layout/message_audio_attachment.xml b/res/layout/message_audio_attachment.xml
deleted file mode 100644
index 0854269..0000000
--- a/res/layout/message_audio_attachment.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.AudioAttachmentView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="70dp"
-    android:importantForAccessibility="no"
-    style="@style/AudioAttachmentViewStyle" />
diff --git a/res/layout/message_vcard_attachment.xml b/res/layout/message_vcard_attachment.xml
deleted file mode 100644
index 0da6e2d..0000000
--- a/res/layout/message_vcard_attachment.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.PersonItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:paddingTop="@dimen/message_text_top_padding"
-    android:paddingBottom="@dimen/message_text_bottom_padding"
-    style="@style/MessageVcardAttachmentStyle" />
diff --git a/res/layout/message_video_attachment.xml b/res/layout/message_video_attachment.xml
deleted file mode 100644
index 8aa2061..0000000
--- a/res/layout/message_video_attachment.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.VideoThumbnailView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:layout_gravity="center_vertical"
-    android:minWidth="@dimen/video_message_min_size"
-    android:minHeight="@dimen/video_message_min_size"
-    app:mode="imageThumbnail" />
diff --git a/res/layout/mms_config_debug_fragment.xml b/res/layout/mms_config_debug_fragment.xml
deleted file mode 100644
index 27528f9..0000000
--- a/res/layout/mms_config_debug_fragment.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="horizontal"
-        android:layout_margin="16dp">
-        <TextView
-            android:id="@+id/sim_title"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/debug_sub_id_spinner_text" />
-        <Spinner
-            android:id="@+id/sim_selector"
-            android:layout_width="0dp"
-            android:layout_weight="1"
-            android:layout_height="wrap_content" />
-    </LinearLayout>
-
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="1dp"
-        android:background="#555555" />
-
-    <ListView
-        android:id="@android:id/list"
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:divider="@null"
-        android:dividerHeight="0px" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/open_source_licenses.xml b/res/layout/open_source_licenses.xml
deleted file mode 100644
index 89995eb..0000000
--- a/res/layout/open_source_licenses.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<WebView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/osl_web_view"
-    android:layout_height="wrap_content"
-    android:layout_width="match_parent"
-    />
diff --git a/res/layout/people_and_options_activity.xml b/res/layout/people_and_options_activity.xml
deleted file mode 100644
index af879a0..0000000
--- a/res/layout/people_and_options_activity.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<fragment
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.messaging.ui.conversationsettings.PeopleAndOptionsFragment"
-    android:id="@+id/people_and_options_fragment"
-    android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/res/layout/people_and_options_fragment.xml b/res/layout/people_and_options_fragment.xml
deleted file mode 100644
index be61710..0000000
--- a/res/layout/people_and_options_fragment.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ListView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/list"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:divider="@null"
-    android:dividerHeight="0px" />
\ No newline at end of file
diff --git a/res/layout/people_and_options_section_header.xml b/res/layout/people_and_options_section_header.xml
deleted file mode 100644
index 44b10c1..0000000
--- a/res/layout/people_and_options_section_header.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/people_and_options_header"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical">
-
-    <View
-        android:id="@+id/divider"
-        android:layout_width="match_parent"
-        android:layout_height="1dp"
-        android:background="@color/people_and_options_list_divider"/>
-
-    <TextView
-        android:id="@+id/header_text"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:padding="16dp"
-        android:text="@string/participant_list_title"
-        style="@style/PeopleAndOptionsSectionHeader" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/people_list_item_view.xml b/res/layout/people_list_item_view.xml
deleted file mode 100644
index e4c07e4..0000000
--- a/res/layout/people_list_item_view.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.PersonItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:orientation="horizontal"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingTop="8dp"
-    android:paddingBottom="8dp"
-    android:background="?android:attr/selectableItemBackground"
-    style="@style/PeopleListItemViewStyle" />
diff --git a/res/layout/people_options_item_view.xml b/res/layout/people_options_item_view.xml
deleted file mode 100644
index 8821eec..0000000
--- a/res/layout/people_options_item_view.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.conversationsettings.PeopleOptionsItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="horizontal"
-    android:layout_width="match_parent"
-    android:layout_height="56dp"
-    android:gravity="center_vertical"
-    android:background="?android:attr/selectableItemBackground"
-    android:clickable="true"
-    style="@style/PeopleAndOptionsItemStyle">
-
-    <LinearLayout
-        android:layout_width="0dp"
-        android:layout_weight="1"
-        android:layout_height="match_parent"
-        android:orientation="vertical"
-        android:gravity="center_vertical">
-
-        <TextView
-            android:id="@+id/title"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:maxLines="1"
-            android:ellipsize="end"
-            style="@style/ParticipantListItem"
-            android:layout_gravity="center_vertical" />
-
-        <TextView
-            android:id="@+id/subtitle"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:maxLines="1"
-            android:ellipsize="end"
-            style="@style/ParticipantListItemDetail"
-            android:layout_gravity="center_vertical" />
-
-    </LinearLayout>
-
-    <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/switch_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:focusable="false"
-        android:clickable="false"
-        android:visibility="gone" />
-
-</com.android.messaging.ui.conversationsettings.PeopleOptionsItemView>
diff --git a/res/layout/permission_check_activity.xml b/res/layout/permission_check_activity.xml
deleted file mode 100644
index 57f665c..0000000
--- a/res/layout/permission_check_activity.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/permission_check_activity_background"
-    android:orientation="vertical" >
-    <TextView
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/required_permissions_promo"
-        android:paddingTop="96dp"
-        style="@style/PromoScreenTextStyle.CenterAligned" />
-    <TextView
-        android:id="@+id/enable_permission_procedure"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingTop="16dp"
-        android:text="@string/enable_permission_procedure"
-        android:contentDescription="@string/enable_permission_procedure_description"
-        style="@style/PromoScreenTextStyle.CenterAligned"
-        android:visibility="invisible"/>
-    <ImageView
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:paddingTop="40dp"
-        android:src="@drawable/permissions"
-        android:scaleType="centerInside"
-        android:importantForAccessibility="no" />
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="1dp"
-        android:background="@android:color/white" />
-    <!-- Buttons -->
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="48dp"
-        android:orientation="horizontal" >
-        <TextView
-            android:id="@+id/exit"
-            android:layout_width="0dp"
-            android:layout_height="match_parent"
-            android:layout_weight="1"
-            android:text="@string/exit"
-            style="@style/PromoScreenButtonStyle" />
-        <TextView
-            android:id="@+id/next"
-            android:layout_width="0dp"
-            android:layout_height="match_parent"
-            android:layout_weight="1"
-            android:text="@string/next_with_arrow"
-            android:contentDescription="@string/next"
-            style="@style/PromoScreenButtonStyle" />
-        <TextView
-            android:id="@+id/settings"
-            android:layout_width="0dp"
-            android:layout_height="match_parent"
-            android:layout_weight="1"
-            android:text="@string/settings_with_arrow"
-            android:contentDescription="@string/settings"
-            style="@style/PromoScreenButtonStyle"
-            android:visibility="gone"/>
-        </LinearLayout>
-</LinearLayout>
diff --git a/res/layout/person_item_view.xml b/res/layout/person_item_view.xml
deleted file mode 100644
index 9645024..0000000
--- a/res/layout/person_item_view.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<merge
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="horizontal">
-
-    <com.android.messaging.ui.ContactIconView
-        android:id="@+id/contact_icon"
-        android:layout_width="@dimen/contact_list_icon_size"
-        android:layout_height="@dimen/contact_list_icon_size"
-        android:importantForAccessibility="no"
-        app:iconSize="normal"
-        android:layout_gravity="center_vertical" />
-
-    <LinearLayout
-        android:id="@+id/details_container"
-        android:orientation="vertical"
-        style="@style/ContactListItemLinearLayoutStyle"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:layout_gravity="center_vertical"
-        android:background="@android:color/transparent">
-
-        <TextView
-            android:id="@+id/name"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:maxLines="1"
-            android:ellipsize="end"
-            style="@style/ParticipantListItem" />
-
-        <TextView
-            android:id="@+id/details"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:maxLines="2"
-            android:ellipsize="end"
-            style="@style/ContactListItemDetail" />
-
-    </LinearLayout>
-</merge>
diff --git a/res/layout/place_card.xml b/res/layout/place_card.xml
deleted file mode 100644
index 93b9e8c..0000000
--- a/res/layout/place_card.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android"
-   android:layout_width="wrap_content"
-   android:layout_height="wrap_content">
-
-    <com.android.messaging.ui.AsyncImageView
-        android:id="@+id/map_image"
-        android:layout_gravity="center_horizontal"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:scaleType="fitCenter"
-        android:adjustViewBounds="true" />
-
-    <TextView
-        android:id="@+id/place_title"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:maxLines="1"
-        android:ellipsize="end"
-        android:textSize="16sp"
-        android:textStyle="bold" />
-
-    <TextView
-        android:id="@+id/place_subtitle"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:maxLines="2"
-        android:ellipsize="end"
-        android:textSize="14sp" />
-
-    <TextView
-        android:id="@+id/place_notes"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textSize="14sp" />
-
-</merge>
\ No newline at end of file
diff --git a/res/layout/settings_fragment.xml b/res/layout/settings_fragment.xml
deleted file mode 100644
index b62b245..0000000
--- a/res/layout/settings_fragment.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<ListView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/list"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/res/layout/settings_item_view.xml b/res/layout/settings_item_view.xml
deleted file mode 100644
index a434c11..0000000
--- a/res/layout/settings_item_view.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/settings_list_item_height"
-    android:gravity="center_vertical"
-    android:paddingLeft="16dp"
-    android:paddingRight="16dp"
-    android:background="?android:attr/selectableItemBackground" >
-
-    <TextView
-        android:id="@+id/title"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:singleLine="true"
-        android:maxLines="1"
-        android:ellipsize="end"
-        style="@style/SettingsListItem" />
-
-    <TextView
-        android:id="@+id/subtitle"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:maxLines="2"
-        android:ellipsize="end"
-        style="@style/SettingsListItemDetail" />
-
-</LinearLayout>
diff --git a/res/layout/share_intent_activity.xml b/res/layout/share_intent_activity.xml
deleted file mode 100644
index d1e59ff..0000000
--- a/res/layout/share_intent_activity.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<fragment xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.messaging.ui.conversationlist.ShareIntentFragment"
-    android:id="@+id/share_intent_fragment"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" />
diff --git a/res/layout/share_intent_conversation_list_view.xml b/res/layout/share_intent_conversation_list_view.xml
deleted file mode 100644
index 1dec1fe..0000000
--- a/res/layout/share_intent_conversation_list_view.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:paddingTop="8dp"
-    android:orientation="vertical">
-  <FrameLayout
-      android:layout_width="match_parent"
-      android:layout_height="0dp"
-      android:layout_weight="1">
-      <androidx.recyclerview.widget.RecyclerView
-          android:id="@android:id/list"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:paddingTop="@dimen/conversation_list_first_item_extra_padding"
-          android:clipToPadding="false"
-          android:listSelector="?android:attr/listSelector"
-          android:dividerHeight="0px" />
-      <include
-          layout="@layout/list_empty_view"
-          android:id="@+id/no_conversations_view"
-          android:visibility="gone"/>
-  </FrameLayout>
-  <View
-      android:layout_width="match_parent"
-      android:layout_height="1dp"
-      android:background="#d2d2d2"/>
-</LinearLayout>
diff --git a/res/layout/sim_selector_item_view.xml b/res/layout/sim_selector_item_view.xml
deleted file mode 100644
index a20c4a9..0000000
--- a/res/layout/sim_selector_item_view.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.conversation.SimSelectorItemView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="horizontal"
-    android:background="?android:attr/selectableItemBackground"
-    android:padding="12dp"
-    android:clipToPadding="false">
-
-    <LinearLayout
-        android:id="@+id/details_container"
-        android:orientation="vertical"
-        style="@style/SimSelectorItemLinearLayoutStyle"
-        android:layout_width="0dp"
-        android:layout_weight="1"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical" >
-
-        <TextView
-            android:id="@+id/name"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:maxLines="1"
-            android:ellipsize="end"
-            style="@style/SimSelectorItem" />
-
-        <TextView
-            android:id="@+id/details"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:singleLine="true"
-            android:maxLines="1"
-            android:ellipsize="end"
-            style="@style/SimSelectorItemDetail" />
-
-    </LinearLayout>
-
-    <com.android.messaging.ui.conversation.SimIconView
-        android:id="@+id/sim_icon"
-        android:layout_width="@dimen/sim_selector_icon_size"
-        android:layout_height="@dimen/sim_selector_icon_size"
-        android:importantForAccessibility="no"
-        android:layout_gravity="center_vertical"
-        android:elevation="3dp"
-        app:iconSize="normal" />
-
-</com.android.messaging.ui.conversation.SimSelectorItemView>
diff --git a/res/layout/sim_selector_view.xml b/res/layout/sim_selector_view.xml
deleted file mode 100644
index 816a2cc..0000000
--- a/res/layout/sim_selector_view.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<com.android.messaging.ui.conversation.SimSelectorView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@drawable/sim_selector_background_gradient">
-
-    <ListView
-        android:id="@+id/sim_list"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_gravity="bottom"
-        android:divider="@null"
-        android:dividerHeight="0px"
-        android:visibility="gone" />
-
-</com.android.messaging.ui.conversation.SimSelectorView>
diff --git a/res/layout/sms_free_storage_action_item_view.xml b/res/layout/sms_free_storage_action_item_view.xml
deleted file mode 100644
index fd71904..0000000
--- a/res/layout/sms_free_storage_action_item_view.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/action"
-    android:padding="8dp"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    style="@style/LowStorageActionItemStyle" />
diff --git a/res/layout/sms_mms_dump_file_list_item.xml b/res/layout/sms_mms_dump_file_list_item.xml
deleted file mode 100644
index a939db2..0000000
--- a/res/layout/sms_mms_dump_file_list_item.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/file"
-    android:paddingLeft="8dip"
-    android:paddingRight="8dip"
-    android:paddingTop="10dip"
-    android:paddingBottom="10dip"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout_alignParentLeft="true"
-    android:textSize="16sp"
-    android:textColor="@color/compose_send_text_color"
-    android:singleLine="false"
-    style="@style/ConversationComposeSendText" />
diff --git a/res/layout/sms_storage_low_warning_dialog.xml b/res/layout/sms_storage_low_warning_dialog.xml
deleted file mode 100644
index 965cab6..0000000
--- a/res/layout/sms_storage_low_warning_dialog.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:padding="6dp"
-    android:background="@android:color/background_light">
-
-    <ListView android:id="@+id/free_storage_action_list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:drawSelectorOnTop="false"
-        android:listSelector="?android:attr/selectableItemBackground"
-        android:longClickable="false"/>
-
-</FrameLayout>
diff --git a/res/layout/snack_bar.xml b/res/layout/snack_bar.xml
deleted file mode 100644
index 1cdabc3..0000000
--- a/res/layout/snack_bar.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/snackbarContainer"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="horizontal">
-
-    <!--
-        First child is also a LinearLayout to preserve it's styles from getting
-        overridden by the LayoutParams set by the WindowManager.
-        Also, it is the view being animated within the root view.
-    -->
-
-   <LinearLayout
-        android:id="@+id/snack_bar"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="horizontal"
-        android:background="#323232" >
-
-        <FrameLayout
-            android:id="@+id/snack_bar_message_wrapper"
-            style="@style/SnackBarMessageWrapper"
-            android:layout_marginTop="@dimen/snack_bar_top_bottom_margin"
-            android:layout_marginBottom="@dimen/snack_bar_top_bottom_margin"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_weight="1" >
-            <TextView
-                android:id="@+id/snack_bar_message"
-                style="@style/SnackBarText"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content" />
-        </FrameLayout>
-
-        <TextView
-            android:id="@+id/snack_bar_action"
-            style="@style/SnackBarText"
-            android:paddingLeft="@dimen/snack_bar_left_right_margin"
-            android:paddingRight="@dimen/snack_bar_left_right_margin"
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:gravity="center_vertical"
-            android:textColor="#EEFF41"
-            android:textAllCaps="true" />
-    </LinearLayout>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/test_activity.xml b/res/layout/test_activity.xml
deleted file mode 100644
index a34b17a..0000000
--- a/res/layout/test_activity.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/test_container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    >
-
-    <FrameLayout
-        android:id="@+id/test_content"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
-
-</FrameLayout>
diff --git a/res/layout/vcard_detail_activity.xml b/res/layout/vcard_detail_activity.xml
deleted file mode 100644
index aa4c3b9..0000000
--- a/res/layout/vcard_detail_activity.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<fragment
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.messaging.ui.VCardDetailFragment"
-    android:id="@+id/vcard_detail_fragment"
-    android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/res/layout/vcard_detail_fragment.xml b/res/layout/vcard_detail_fragment.xml
deleted file mode 100644
index 8689df0..0000000
--- a/res/layout/vcard_detail_fragment.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/list_layout_parent"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <ExpandableListView
-        android:id="@+id/list"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:drawSelectorOnTop="false" />
-
-</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/video_thumbnail_view.xml b/res/layout/video_thumbnail_view.xml
deleted file mode 100644
index 7c009cb..0000000
--- a/res/layout/video_thumbnail_view.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <com.android.messaging.ui.AsyncImageView
-        android:id="@+id/video_thumbnail_image"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:cornerRadius="@dimen/attachment_rounded_corner_radius" />
-
-    <ImageButton
-        android:id="@+id/video_thumbnail_play_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:background="@drawable/transparent_button_background"
-        android:src="@drawable/ic_video_play_light"
-        android:contentDescription="@string/video_thumbnail_view_play_button_content_description" />
-
-</merge>
\ No newline at end of file
diff --git a/res/layout/viewgroup_vertical_explode_animation_popup.xml b/res/layout/viewgroup_vertical_explode_animation_popup.xml
deleted file mode 100644
index 8a8aa60..0000000
--- a/res/layout/viewgroup_vertical_explode_animation_popup.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<view
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.messaging.ui.animation.ViewGroupItemVerticalExplodeAnimation$VerticalExplodePopupRootView"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="#55000000">
-
-    <ImageView
-        android:id="@+id/explode_view"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:importantForAccessibility="no" />
-
-</view>
diff --git a/res/layout/widget_conversation.xml b/res/layout/widget_conversation.xml
deleted file mode 100644
index 2c7edee..0000000
--- a/res/layout/widget_conversation.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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"
-    android:padding="@dimen/widget_margin"
-    android:background="@android:color/transparent" >
-    <LinearLayout
-        android:id="@+id/widget_header"
-        android:layout_width="match_parent"
-        android:layout_height="48dp"
-        android:orientation="horizontal"
-        android:paddingLeft="10dip"
-        android:paddingRight="10dip"
-        android:layout_alignParentTop="true">
-        <TextView
-            android:id="@+id/widget_label"
-            style="@style/WidgetConversationTitle"
-            android:layout_height="wrap_content"
-            android:layout_width="0dip"
-            android:layout_weight = "1"
-            android:layout_gravity="center_vertical"
-            android:freezesText="true" />
-        <ImageView
-            android:id="@+id/launcher_icon"
-            android:src="@drawable/ic_launcher"
-            android:layout_height="wrap_content"
-            android:layout_width="0dip"
-            android:layout_weight = "1"
-            android:scaleType="fitStart"
-            android:paddingTop="12dip"
-            android:paddingBottom="12dip"
-            android:visibility="gone"
-            android:importantForAccessibility="no" />
-        <ImageButton
-            android:id="@+id/widget_goto_conversation_list"
-            style="@style/WidgetHeaderImage"
-            android:layout_width="@dimen/widget_header_new_conv_button_width"
-            android:layout_height="match_parent"
-            android:src="@drawable/ic_widget_list"
-            android:background="?android:attr/selectableItemBackground"
-            android:contentDescription="@string/widget_conversation_list_content_description"
-            android:layout_gravity="center_vertical" />
-    </LinearLayout>
-    <ListView
-        android:id="@+id/message_list"
-        android:layout_below="@+id/top_line"
-        android:layout_above="@+id/bottom_line"
-        android:layout_marginTop="-2dp"
-        android:layout_width="match_parent"
-        android:layout_height="0dip"
-        android:layout_weight="1"
-        android:drawSelectorOnTop="true"
-        android:transcriptMode="alwaysScroll"
-        android:stackFromBottom="true"
-        android:overScrollMode="never"
-        android:divider="@null" />
-    <TextView
-        android:id="@+id/widget_configuration"
-        style="@style/WidgetConversationTitle"
-        android:layout_below="@+id/top_line"
-        android:layout_above="@+id/bottom_line"
-        android:layout_width="match_parent"
-        android:layout_height="0dip"
-        android:layout_weight="1"
-        android:orientation="horizontal"
-        android:gravity="center_vertical"
-        android:visibility="gone"
-        android:singleLine="false"
-        android:paddingRight="20dp"
-        android:paddingLeft="20dp"
-        android:paddingBottom="20dp"
-        android:text="@string/tap_to_configure" />
-    <ImageView
-        android:id="@id/top_line"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:background="@drawable/widget_hr"
-        android:importantForAccessibility="no"
-        android:contentDescription="@null"
-        android:layout_marginTop="-2dp"
-        android:layout_below="@id/widget_header"
-        />
-    <ImageView
-        android:id="@id/bottom_line"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:background="@drawable/widget_hr"
-        android:importantForAccessibility="no"
-        android:contentDescription="@null"
-        android:layout_marginTop="-2dp"
-        android:layout_alignParentBottom="true"
-        />
-</RelativeLayout>
diff --git a/res/layout/widget_conversation_list.xml b/res/layout/widget_conversation_list.xml
deleted file mode 100644
index 822fe55..0000000
--- a/res/layout/widget_conversation_list.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:padding="@dimen/widget_margin"
-    android:orientation="vertical">
-    <LinearLayout
-        android:id="@+id/widget_header"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/widget_header_height"
-        android:orientation="horizontal"
-        android:paddingLeft="8dip"
-        android:background="@drawable/widget_top_background"
-        android:gravity="center_vertical">
-        <TextView
-            android:id="@+id/widget_label"
-            style="@style/WidgetTitle"
-            android:layout_height="wrap_content"
-            android:layout_width="0dip"
-            android:layout_weight = "1"
-            android:contentDescription="@string/widget_title_content_description"
-            android:freezesText="true" />
-        <ImageButton
-            android:id="@+id/widget_compose"
-            style="@style/WidgetHeaderImage"
-            android:layout_width="@dimen/widget_header_new_conv_button_width"
-            android:layout_height="match_parent"
-            android:src="@drawable/ic_add_white"
-            android:background="?android:attr/selectableItemBackground"
-            android:contentDescription="@string/widget_new_conversation_content_description"
-            android:paddingRight="8dip"
-            android:paddingBottom="4dip" />
-    </LinearLayout>
-    <ImageView
-        android:layout_width="match_parent"
-        android:layout_height="1dp"
-        android:background="#aaaaaa"
-        android:importantForAccessibility="no"
-        android:contentDescription="@null" />
-    <ListView
-        android:id="@+id/conversation_list"
-        android:layout_width="match_parent"
-        android:layout_height="0dip"
-        android:layout_weight="1"
-        android:cacheColorHint="#00000000"
-        android:divider="@android:drawable/divider_horizontal_bright"
-        android:background="@drawable/widget_bottom_background" />
-</LinearLayout>
diff --git a/res/layout/widget_conversation_list_item.xml b/res/layout/widget_conversation_list_item.xml
deleted file mode 100644
index e0115a2..0000000
--- a/res/layout/widget_conversation_list_item.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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:id="@+id/widget_conversation_list_item"
-    android:layout_width="match_parent"
-    style="@style/WidgetConversationListItemStyle"
-    android:paddingLeft="8dip"
-    android:paddingRight="8dip" >
-
-    <FrameLayout
-        android:id="@+id/avatarFrame"
-        android:layout_centerVertical="true"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content">
-        <ImageView
-            android:id="@+id/avatarView"
-            style="@style/WidgetConversationListItemAvatar"
-            android:layout_width="@dimen/contact_icon_view_normal_size"
-            android:layout_height="@dimen/contact_icon_view_normal_size"
-            android:layout_centerVertical="true"
-            android:scaleType="fitXY"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null" />
-        <ImageView
-            android:id="@+id/conversation_failed_status_icon"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            style="@style/WidgetConversationItemFailed"
-            android:src="@drawable/ic_failed_status_red"
-            android:visibility="gone"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null"/>
-    </FrameLayout>
-
-    <LinearLayout
-        android:layout_centerVertical="true"
-        android:orientation="vertical"
-        style="@style/WidgetConversationListItemBody"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" >
-
-        <RelativeLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content" >
-
-            <LinearLayout
-                android:orientation="horizontal"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="6dip"
-                android:layout_alignParentTop="true"
-                android:gravity="center_vertical"
-                android:background="@android:color/transparent">
-                <ImageView
-                    android:id="@+id/conversation_notification_bell"
-                    style="@style/ConversationListNotificationBellPaddingStyle"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:src="@drawable/ic_notifications_off_small_light"
-                    android:visibility="gone"
-                    android:importantForAccessibility="no"
-                    android:contentDescription="@null"
-                    android:layout_gravity="center_vertical"
-                    android:background="@android:color/transparent" />
-
-                <TextView android:id="@+id/from"
-                    style="@style/WidgetConversationListItemFrom"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:textAppearance="?android:attr/textAppearanceMediumInverse"
-                    android:singleLine="true"
-                    android:textSize="18sp"
-                    android:textColor="@color/widget_text_color"
-                    android:ellipsize="marquee"  />
-
-                <TextView android:id="@+id/date"
-                    style="@style/WidgetConversationListItemDate"
-                    android:paddingTop="4dp"
-                    android:textSize="12sp"
-                    android:layout_height="wrap_content"
-                    android:layout_width="wrap_content"
-                    android:textAppearance="?android:attr/textAppearanceSmallInverse"
-                    android:singleLine="true"
-                    android:textColor="@color/widget_text_color" />
-            </LinearLayout>
-        </RelativeLayout>
-
-        <TextView android:id="@+id/snippet"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmallInverse"
-            android:maxLines="2"
-            android:textSize="13sp"
-            android:layout_marginBottom="5dip"
-            android:layout_alignParentBottom="true"
-            android:textColor="@color/widget_text_color"
-            android:ellipsize="end" />
-
-        <LinearLayout android:id="@+id/errorBlock"
-            android:orientation="vertical"
-            android:layout_alignParentBottom="true"
-            android:visibility="gone"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content" >
-
-            <TextView android:id="@+id/errorSnippet"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textAppearance="?android:attr/textAppearanceSmallInverse"
-                android:maxLines="1"
-                android:textSize="13sp"
-                android:textColor="@color/widget_text_color"
-                android:ellipsize="end" />
-
-            <TextView android:id="@+id/errorText"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:textAppearance="?android:attr/textAppearanceSmallInverse"
-                android:maxLines="2"
-                android:textSize="13sp"
-                android:layout_marginBottom="5dip"
-                android:textColor="@color/conversation_list_error"
-                android:ellipsize="end" />
-
-        </LinearLayout>
-    </LinearLayout>
-</RelativeLayout>
diff --git a/res/layout/widget_loading.xml b/res/layout/widget_loading.xml
deleted file mode 100644
index 8282b5d..0000000
--- a/res/layout/widget_loading.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/widget_loading"
-    android:layout_width="match_parent"
-    android:layout_height="64sp" >
-    <TextView
-        android:id="@+id/loading_text"
-        style="@style/WidgetLoading"
-        android:layout_height="match_parent"
-        android:layout_width="match_parent"
-        android:gravity="center"
-        android:textColor="@android:color/black"
-        android:textSize="12sp" />
-</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/widget_message_item_incoming.xml b/res/layout/widget_message_item_incoming.xml
deleted file mode 100644
index 786385b..0000000
--- a/res/layout/widget_message_item_incoming.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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:id="@+id/widget_message_item_incoming"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingBottom="8dp"
-    android:paddingLeft="8dip"
-    android:paddingRight="8dip" >
-
-    <FrameLayout
-        android:id="@+id/avatarFrame"
-        android:layout_gravity="top"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content">
-        <ImageView
-            android:id="@+id/avatarShadow"
-            style="@style/WidgetConversationItemIncomingAvatarShadow"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
-            android:src="@drawable/ic_widget_avatar_shadow"
-            android:layout_marginTop="-4dp"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null" />
-        <ImageView
-            android:id="@+id/avatarView"
-            style="@style/WidgetConversationItemAvatarIncoming"
-            android:layout_width="@dimen/contact_icon_view_normal_size"
-            android:layout_height="@dimen/contact_icon_view_normal_size"
-            android:layout_centerVertical="true"
-            android:scaleType="fitXY"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null" />
-        <ImageView
-            android:id="@+id/conversation_failed_status_icon"
-            style="@style/WidgetConversationItemFailed"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:src="@drawable/ic_failed_status_red"
-            android:visibility="gone"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null"/>
-    </FrameLayout>
-
-    <LinearLayout
-        android:layout_gravity="top"
-        android:orientation="vertical"
-        style="@style/WidgetConversationItemBodyIncoming"
-        android:background="@drawable/widget_msg_bubble_incoming"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content" >
-
-        <TextView android:id="@+id/message"
-            style="@style/WidgetConversationItemWidget"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmallInverse"
-            android:textSize="16sp"
-            android:paddingTop="6dp"
-            android:paddingLeft="6dp"
-            android:paddingRight="6dp"
-            android:layout_marginBottom="3dip"
-            android:layout_alignParentBottom="true"
-            android:textColor="@color/widget_incoming_text_color"
-            android:ellipsize="end" />
-
-        <TextView android:id="@+id/date"
-            style="@style/WidgetConversationItemDate"
-            android:paddingLeft="6dp"
-            android:paddingRight="6dp"
-            android:layout_marginBottom="9dip"
-            android:textSize="12sp"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmallInverse"
-            android:singleLine="true"
-            android:textColor="@color/timestamp_text_incoming" />
-
-        <FrameLayout
-            android:id="@+id/attachmentFrame"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content">
-            <ImageView
-                android:id="@+id/attachment"
-                style="@style/WidgetConversationItemAttachment"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:importantForAccessibility="no"
-                android:adjustViewBounds="true"
-                android:contentDescription="@null"/>
-            <ImageView
-                android:id="@+id/playButton"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:visibility="gone"
-                android:src="@drawable/ic_video_play_light"
-                android:importantForAccessibility="no"
-                android:contentDescription="@null"/>
-        </FrameLayout>
-    </LinearLayout>
-</RelativeLayout>
diff --git a/res/layout/widget_message_item_outgoing.xml b/res/layout/widget_message_item_outgoing.xml
deleted file mode 100644
index c3d734e..0000000
--- a/res/layout/widget_message_item_outgoing.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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:id="@+id/widget_message_item_outgoing"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingBottom="8dp"
-    android:paddingLeft="8dip"
-    android:paddingRight="8dip" >
-
-    <FrameLayout
-        android:id="@+id/avatarFrame"
-        android:layout_gravity="top"
-        style="@style/WidgetConversationItemAvatarOutgoing"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content">
-        <ImageView
-            android:id="@+id/avatarShadow"
-            style="@style/WidgetConversationItemOutgoingAvatarShadow"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_centerVertical="true"
-            android:src="@drawable/ic_widget_avatar_shadow"
-            android:layout_marginTop="-4dp"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null" />
-        <ImageView
-            android:id="@+id/avatarView"
-            android:layout_width="@dimen/contact_icon_view_normal_size"
-            android:layout_height="@dimen/contact_icon_view_normal_size"
-            android:layout_centerVertical="true"
-            android:scaleType="fitXY"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null" />
-        <ImageView
-            android:id="@+id/conversation_failed_status_icon"
-            style="@style/WidgetConversationItemFailed"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:src="@drawable/ic_failed_status_red"
-            android:visibility="gone"
-            android:importantForAccessibility="no"
-            android:contentDescription="@null"/>
-    </FrameLayout>
-
-    <LinearLayout
-        android:layout_gravity="top"
-        android:orientation="vertical"
-        style="@style/WidgetConversationItemBodyOutgoing"
-        android:background="@drawable/widget_msg_bubble_outgoing"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content" >
-
-        <TextView android:id="@+id/message"
-            style="@style/WidgetConversationItemWidget"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmallInverse"
-            android:textSize="16sp"
-            android:paddingTop="6dp"
-            android:paddingLeft="6dp"
-            android:paddingRight="6dp"
-            android:layout_marginBottom="3dip"
-            android:layout_alignParentBottom="true"
-            android:textColor="@color/widget_outgoing_text_color"
-            android:ellipsize="end" />
-
-        <TextView android:id="@+id/date"
-            style="@style/WidgetConversationItemDate"
-            android:paddingLeft="6dp"
-            android:paddingRight="6dp"
-            android:layout_marginBottom="9dip"
-            android:textSize="12sp"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmallInverse"
-            android:singleLine="true"
-            android:textColor="@color/timestamp_text_outgoing" />
-
-        <FrameLayout
-            android:id="@+id/attachmentFrame"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content">
-            <ImageView
-                android:id="@+id/attachment"
-                style="@style/WidgetConversationItemAttachment"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:importantForAccessibility="no"
-                android:adjustViewBounds="true"
-                android:contentDescription="@null"/>
-            <ImageView
-                android:id="@+id/playButton"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:visibility="gone"
-                android:src="@drawable/ic_video_play_light"
-                android:importantForAccessibility="no"
-                android:contentDescription="@null"/>
-        </FrameLayout>
-
-    </LinearLayout>
-</RelativeLayout>
diff --git a/res/layout/widget_missing_permission.xml b/res/layout/widget_missing_permission.xml
deleted file mode 100644
index 712ad02..0000000
--- a/res/layout/widget_missing_permission.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="match_parent"
-    android:layout_width="match_parent"
-    android:text="@string/required_permissions_promo"
-    android:gravity="center"
-    style="@android:style/TextAppearance.Medium"
-    android:background="@color/action_bar_background_color"
-    android:freezesText="true" />
diff --git a/res/layout/work_directory_header.xml b/res/layout/work_directory_header.xml
deleted file mode 100644
index 3c882f5..0000000
--- a/res/layout/work_directory_header.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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 A`NY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- Layout used for list section separators. -->
-<TextView
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:text="@string/work_directory_display_name"
-        style="@style/DirectoryHeaderStyle"
-        />
diff --git a/res/menu/archived_conversation_list_menu.xml b/res/menu/archived_conversation_list_menu.xml
deleted file mode 100644
index a3a2a19..0000000
--- a/res/menu/archived_conversation_list_menu.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools" >
-    <item
-        android:id="@+id/action_debug_options"
-        android:orderInCategory="9900"
-        android:title="@string/action_debug_options"
-        android:showAsAction="never"/>
-
-</menu>
diff --git a/res/menu/attachment_chooser_menu.xml b/res/menu/attachment_chooser_menu.xml
deleted file mode 100644
index 99345c9..0000000
--- a/res/menu/attachment_chooser_menu.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:appcompat="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools" >
-    <item
-        android:id="@+id/action_confirm_selection"
-        android:icon="@drawable/ic_checkmark_small_light"
-        android:orderInCategory="100"
-        android:title="@string/action_confirm_selection"
-        appcompat:showAsAction="always"/>
-</menu>
diff --git a/res/menu/compose_menu.xml b/res/menu/compose_menu.xml
deleted file mode 100644
index a384f57..0000000
--- a/res/menu/compose_menu.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    xmlns:appcompat="http://schemas.android.com/apk/res-auto"
-    tools:context="com.android.messaging.ConversationActivity" >
-
-    <!-- This must always be the first item so it appears right next to the chip view -->
-    <item
-        android:id="@+id/action_delete_text"
-        android:icon="@drawable/ic_cancel_small_light"
-        android:orderInCategory="0"
-        android:title="@string/chips_text_delete_button_content_description"
-        appcompat:showAsAction="always"/>
-
-    <item
-        android:id="@+id/action_ime_dialpad_toggle"
-        android:icon="@drawable/ic_numeric_dialpad"
-        android:orderInCategory="100"
-        android:title="@string/numeric_text_keyboard_toggle_button_content_description"
-        appcompat:showAsAction="always"/>
-
-    <item
-        android:id="@+id/action_add_more_participants"
-        android:icon="@drawable/ic_people_add_light"
-        android:orderInCategory="110"
-        android:title="@string/add_more_participants_button_content_description"
-        appcompat:showAsAction="always"/>
-
-    <item
-        android:id="@+id/action_confirm_participants"
-        android:icon="@drawable/ic_checkmark_small_light"
-        android:orderInCategory="120"
-        android:title="@string/confrim_participants_button_content_description"
-        appcompat:showAsAction="always"/>
-
-</menu>
diff --git a/res/menu/conversation_fragment_select_menu.xml b/res/menu/conversation_fragment_select_menu.xml
deleted file mode 100644
index 7ce0829..0000000
--- a/res/menu/conversation_fragment_select_menu.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:appcompat="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools" >
-
-    <item
-        android:id="@+id/share_message_menu"
-        android:title="@string/action_share"
-        android:icon="@drawable/ic_share_dark"
-        appcompat:showAsAction="collapseActionView|always" />
-    <item
-        android:id="@+id/forward_message_menu"
-        android:title="@string/message_context_menu_forward_message"
-        android:icon="@drawable/ic_forward_dark"
-        appcompat:showAsAction="collapseActionView|always"/>
-    <item
-        android:id="@+id/save_attachment"
-        android:title="@string/save"
-        android:icon="@drawable/ic_save_dark"
-        appcompat:showAsAction="collapseActionView|always" />
-    <item
-        android:id="@+id/copy_text"
-        android:title="@string/message_context_menu_copy_text"
-        android:icon="@drawable/ic_content_copy_dark"
-        appcompat:showAsAction="collapseActionView|always"/>
-
-    <item
-        android:id="@+id/details_menu"
-        android:title="@string/message_context_menu_view_details"
-        android:icon="@drawable/ic_info_dark"
-        appcompat:showAsAction="collapseActionView|always"/>
-
-    <item
-        android:id="@+id/action_send"
-        android:icon="@drawable/ic_send_dark"
-        android:title="@string/action_send"
-        appcompat:showAsAction="collapseActionView|always"/>
-    <item
-        android:id="@+id/action_download"
-        android:icon="@drawable/ic_file_download_dark"
-        android:title="@string/action_download"
-        appcompat:showAsAction="collapseActionView|always"/>
-    <item
-        android:id="@+id/action_delete_message"
-        android:icon="@drawable/ic_delete_small_dark"
-        android:title="@string/action_delete_message"
-        appcompat:showAsAction="collapseActionView|always"/>
-</menu>
diff --git a/res/menu/conversation_list_fragment_menu.xml b/res/menu/conversation_list_fragment_menu.xml
deleted file mode 100644
index a83a2a5..0000000
--- a/res/menu/conversation_list_fragment_menu.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:appcompat="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools" >
-
-    <item android:id="@+id/action_start_new_conversation"
-        android:title="@string/start_new_conversation"
-        android:icon="@drawable/ic_add_white"
-        android:visible="false"
-        appcompat:showAsAction="ifRoom" />
-
-    <item
-        android:id="@+id/action_show_archived"
-        android:orderInCategory="200"
-        android:title="@string/action_menu_show_archived"
-        android:showAsAction="never"/>
-
-    <item
-        android:id="@+id/action_show_blocked_contacts"
-        android:orderInCategory="300"
-        android:title="@string/blocked_contacts_title"
-        appcompat:showAsAction="never"/>
-
-    <item
-        android:id="@+id/action_settings"
-        android:orderInCategory="400"
-        android:title="@string/action_settings"
-        appcompat:showAsAction="never"/>
-
-    <item
-        android:id="@+id/action_debug_options"
-        android:orderInCategory="9900"
-        android:title="@string/action_debug_options"
-        appcompat:showAsAction="never"/>
-
-</menu>
diff --git a/res/menu/conversation_list_fragment_select_menu.xml b/res/menu/conversation_list_fragment_select_menu.xml
deleted file mode 100644
index 8704691..0000000
--- a/res/menu/conversation_list_fragment_select_menu.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:appcompat="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools" >
-
-    <item
-        android:id="@+id/action_archive"
-        android:icon="@drawable/ic_archive_small_dark"
-        android:orderInCategory="50"
-        android:title="@string/action_archive"
-        appcompat:showAsAction="collapseActionView|always"/>
-    <item
-        android:id="@+id/action_unarchive"
-        android:icon="@drawable/ic_archive_undo_small_dark"
-        android:orderInCategory="50"
-        android:title="@string/action_unarchive"
-        appcompat:showAsAction="collapseActionView|always"/>
-    <item
-        android:id="@+id/action_delete"
-        android:icon="@drawable/ic_delete_small_dark"
-        android:orderInCategory="60"
-        android:title="@string/action_delete"
-        appcompat:showAsAction="collapseActionView|always"/>
-    <item
-        android:id="@+id/action_notification_off"
-        android:icon="@drawable/ic_notifications_off_dark"
-        android:orderInCategory="70"
-        android:title="@string/action_notification_off"
-        appcompat:showAsAction="collapseActionView|always"/>
-    <item
-        android:id="@+id/action_notification_on"
-        android:icon="@drawable/ic_notifications_on_dark"
-        android:orderInCategory="80"
-        android:title="@string/action_notification_on"
-        appcompat:showAsAction="collapseActionView|always"/>
-    <item
-        android:id="@+id/action_add_contact"
-        android:icon="@drawable/ic_person_add_dark"
-        android:orderInCategory="90"
-        android:title="@string/action_add_contact"
-        appcompat:showAsAction="collapseActionView|always"/>
-    <item
-        android:id="@+id/action_block"
-        android:icon="@drawable/ic_dnd_on_dark"
-        android:orderInCategory="100"
-        android:title="@string/action_block"
-        appcompat:showAsAction="collapseActionView|always"/>
-</menu>
diff --git a/res/menu/conversation_menu.xml b/res/menu/conversation_menu.xml
deleted file mode 100644
index 57e561b..0000000
--- a/res/menu/conversation_menu.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    xmlns:appcompat="http://schemas.android.com/apk/res-auto"
-    tools:context="com.android.messaging.ConversationActivity" >
-
-    <item
-        android:id="@+id/action_call"
-        android:icon="@drawable/ic_phone_small_light"
-        android:orderInCategory="80"
-        android:title="@string/action_call"
-        appcompat:showAsAction="ifRoom"/>
-
-    <item
-        android:id="@+id/action_add_contact"
-        android:icon="@drawable/ic_person_add_light"
-        android:orderInCategory="90"
-        android:title="@string/action_add_contact"
-        android:showAsAction="never"/>
-
-    <item
-        android:id="@+id/action_people_and_options"
-        android:orderInCategory="100"
-        android:title="@string/action_people_and_options"
-        appcompat:showAsAction="never"/>
-
-    <item
-        android:id="@+id/action_archive"
-        android:orderInCategory="120"
-        android:title="@string/action_archive"
-        android:showAsAction="never"/>
-
-    <item
-        android:id="@+id/action_unarchive"
-        android:orderInCategory="130"
-        android:title="@string/action_unarchive"
-        android:showAsAction="never"/>
-
-    <item
-        android:id="@+id/action_delete"
-        android:orderInCategory="140"
-        android:title="@string/action_delete"
-        android:showAsAction="never"/>
-
-</menu>
diff --git a/res/menu/gallery_picker_menu.xml b/res/menu/gallery_picker_menu.xml
deleted file mode 100644
index 428f1e7..0000000
--- a/res/menu/gallery_picker_menu.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:appcompat="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools" >
-
-    <item
-        android:id="@+id/action_multiselect"
-        android:icon="@drawable/ic_checkbox_outline_light"
-        android:orderInCategory="100"
-        android:title="@string/action_multiselect"
-        appcompat:showAsAction="always"/>
-
-    <item
-        android:id="@+id/action_confirm_multiselect"
-        android:icon="@drawable/ic_checkmark_small_light"
-        android:orderInCategory="101"
-        android:title="@string/action_confirm_multiselect"
-        appcompat:showAsAction="always"/>
-</menu>
diff --git a/res/menu/photo_view_menu.xml b/res/menu/photo_view_menu.xml
deleted file mode 100644
index 10a4367..0000000
--- a/res/menu/photo_view_menu.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools" >
-
-    <item
-        android:id="@+id/action_share"
-        android:title="@string/action_share"
-        android:actionProviderClass="android.widget.ShareActionProvider"
-        android:showAsAction="ifRoom"/>
-    <item
-        android:id="@+id/action_save"
-        android:title="@string/save"
-        android:icon="@drawable/ic_save_light"
-        android:showAsAction="ifRoom"/>
-
-</menu>
diff --git a/res/menu/settings_menu.xml b/res/menu/settings_menu.xml
deleted file mode 100644
index 3002be8..0000000
--- a/res/menu/settings_menu.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:appcompat="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools" >
-
-    <item
-        android:id="@+id/action_license"
-        android:orderInCategory="100"
-        android:title="@string/menu_license"
-        android:showAsAction="never"/>
-
-</menu>
diff --git a/res/menu/vcard_detail_fragment_menu.xml b/res/menu/vcard_detail_fragment_menu.xml
deleted file mode 100644
index ea923cb..0000000
--- a/res/menu/vcard_detail_fragment_menu.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    xmlns:appcompat="http://schemas.android.com/apk/res-auto" >
-
-    <item
-        android:id="@+id/action_add_contact"
-        android:icon="@drawable/ic_person_add_light"
-        android:orderInCategory="100"
-        android:title="@string/action_add_contact"
-        appcompat:showAsAction="always"/>
-</menu>
diff --git a/res/raw/audio_end.wav b/res/raw/audio_end.wav
deleted file mode 100644
index 01d08f5..0000000
--- a/res/raw/audio_end.wav
+++ /dev/null
Binary files differ
diff --git a/res/raw/audio_initiate.wav b/res/raw/audio_initiate.wav
deleted file mode 100644
index e335d0d..0000000
--- a/res/raw/audio_initiate.wav
+++ /dev/null
Binary files differ
diff --git a/res/raw/db_op_debug.wav b/res/raw/db_op_debug.wav
deleted file mode 100644
index b807636..0000000
--- a/res/raw/db_op_debug.wav
+++ /dev/null
Binary files differ
diff --git a/res/raw/message_failure.wav b/res/raw/message_failure.wav
deleted file mode 100644
index 270a0b7..0000000
--- a/res/raw/message_failure.wav
+++ /dev/null
Binary files differ
diff --git a/res/raw/message_inc_thread.wav b/res/raw/message_inc_thread.wav
deleted file mode 100644
index 7dce364..0000000
--- a/res/raw/message_inc_thread.wav
+++ /dev/null
Binary files differ
diff --git a/res/raw/message_sent.wav b/res/raw/message_sent.wav
deleted file mode 100644
index 1d45718..0000000
--- a/res/raw/message_sent.wav
+++ /dev/null
Binary files differ
diff --git a/res/raw/server_request_debug.wav b/res/raw/server_request_debug.wav
deleted file mode 100644
index 864a7dd..0000000
--- a/res/raw/server_request_debug.wav
+++ /dev/null
Binary files differ
diff --git a/res/transition/explode.xml b/res/transition/explode.xml
deleted file mode 100644
index a3a94ba..0000000
--- a/res/transition/explode.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<explode/>
\ No newline at end of file
diff --git a/res/transition/fade.xml b/res/transition/fade.xml
deleted file mode 100644
index e3617dc..0000000
--- a/res/transition/fade.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<fade/>
\ No newline at end of file
diff --git a/res/values-af/arrays.xml b/res/values-af/arrays.xml
deleted file mode 100644
index d780ddc..0000000
--- a/res/values-af/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"geen onderwerp nie"</item>
-    <item msgid="272485471009191934">"geen onderwerp nie"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ja"</item>
-    <item msgid="6049132459802288033">"Nee"</item>
-    <item msgid="3084376867445867895">"Goed"</item>
-    <item msgid="3155097332660174689">"Hê-hê"</item>
-    <item msgid="2611328818571146775">"Dankie"</item>
-    <item msgid="4881335087096496747">"Ek stem saam"</item>
-    <item msgid="2422296858597420738">"Lekker"</item>
-    <item msgid="4805581752819452687">"Op pad"</item>
-    <item msgid="4746700499431366214">"OK, laat ek jou later antwoord"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
deleted file mode 100644
index 901bd27..0000000
--- a/res/values-af/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Boodskappe"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Boodskappe"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Kies gesprek"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Instellings"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Stuur boodskap"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Voeg \'n aanhegsel by"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Hulp"</string>
-    <string name="welcome" msgid="2857560951820802321">"Welkom"</string>
-    <string name="skip" msgid="7238879696319945853">"Slaan oor"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Volgende &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Volgende"</string>
-    <string name="exit" msgid="1905187380359981199">"Gaan uit"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Instellings &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Instellings"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Boodskappe het toestemming nodig vir SMS, foon en kontakte."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Jy kan toestemmings verander in Instellings &gt; Programme &gt; Boodskappe &gt; Toestemmings."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Jy kan toestemmings verander in Instellings, Programme, Boodskappe, Toestemmings."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Gereeldes"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Alle kontakte"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Stuur na <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Neem foto\'s of video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Kies prente van hierdie toestel af"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Neem oudio op"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Kies foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Die media is gekies."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Die media is nie gekies nie."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> gekies"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"prent <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"prent"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Neem oudio op"</string>
-    <string name="action_share" msgid="2143483844803153871">"Deel"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Nou net"</string>
-    <string name="posted_now" msgid="867560789350406701">"Nou"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min.</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min.</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> uur</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> uur</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dae</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> dag</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> weke</item>
-      <item quantity="one">\'n week</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> maande</item>
-      <item quantity="one">\'n maand</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> jaar</item>
-      <item quantity="one">\'n jaar</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Klas 0-boodskap"</string>
-    <string name="save" msgid="5081141452059463572">"Stoor"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Toestel het min spasie. Boodskappe sal ouer boodskappe outomaties uitvee om spasie beskikbaar te stel."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Bergingspasie word min"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Boodskappe sal dalk nie boodskappe stuur of ontvang voordat meer spasie op jou toestel beskikbaar is nie."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Min SMS-berging. Jy sal dalk boodskappe moet uitvee."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Bevestig jou foonnommer"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Hierdie eenmalige stap sal sorg dat Boodskappe jou groepboodskappe toepaslik aflewer."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Foonnommer"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Vee alle boodskappe met media uit"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Vee boodskappe ouer as <xliff:g id="DURATION">%s</xliff:g> uit"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Vee boodskappe ouer as <xliff:g id="DURATION">%s</xliff:g> outomaties uit"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignoreer"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Vee alle boodskappe met media uit?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Vee boodskappe ouer as <xliff:g id="DURATION">%s</xliff:g> uit?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Vee boodskappe ouer as <xliff:g id="DURATION">%s</xliff:g> uit en skakel outomatiese uitvee aan?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> het gesê"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Jy het gesê"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Boodskap van <xliff:g id="SENDER">%s</xliff:g> af"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Jy het \'n boodskap gestuur"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Stuur tans …"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Nie gestuur nie. Raak om weer te probeer."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Nie gestuur nie. Probeer tans weer …"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Herstuur of vee uit"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Maak asseblief \'n stemoproep na nooddienste. Jou SMS kon nie in hierdie stadium afgelewer word nie."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Het misluk"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nuwe MMS-boodskap om af te laai"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nuwe MMS-boodskap"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Kon nie aflaai nie"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Raak om weer te probeer"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Raak om af te laai"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Laai af of vee uit"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Laai tans af …"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Boodskap het verval of is nie beskikbaar nie"</string>
-    <string name="mms_info" msgid="3402311750134118165">"grootte: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, verval: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Kan nie stuur nie. Ontvanger nie geldig nie."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Diens nie in netwerk geaktiveer nie"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Kon weens netwerkprobleem nie stuur nie"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Boodskap het verval of is nie beskikbaar nie"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Geen onderwerp nie)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Onbekende afsender"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Afgelewer"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Kon nie boodskap <xliff:g id="SUBJECT">%1$s</xliff:g> van <xliff:g id="FROM">%2$s</xliff:g> aflaai nie."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Kon nie databasishandeling voltooi nie weens lae geheue"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Boodskap nie gestuur nie"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Sommige boodskappe is nie in Boodskappe gestuur nie"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> boodskappe in <xliff:g id="CONVERSATIONS">%d</xliff:g> gesprekke</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> boodskappe in een gesprek</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Boodskap het nie afgelaai nie"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Sommige boodskappe is nie in Boodskappe afgelaai nie"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> boodskappe in <xliff:g id="CONVERSATIONS">%d</xliff:g> gesprekke</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> boodskappe in een gesprek</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Boodskap aan <xliff:g id="NUMBER">%1$s</xliff:g> nie gestuur nie"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Maak asseblief \'n stemoproep na nooddienste. Jou SMS na <xliff:g id="NUMBER">%1$s</xliff:g> kon nie in hierdie stadium afgelewer word nie."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nuwe boodskappe</item>
-      <item quantity="one">Nuwe boodskap</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Begin"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera nie beskikbaar nie"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera nie beskikbaar nie"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Video-opname nie beskikbaar nie"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Kan nie media stoor nie"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Kan nie foto neem nie"</string>
-    <string name="back" msgid="1477626055115561645">"Terug"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Geargiveer"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Vee uit"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Argiveer"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Deargiveer"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Skakel kennisgewings af"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Skakel kennisgewings aan"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Voeg kontak by"</string>
-    <string name="action_download" msgid="7786338136368564146">"Laai af"</string>
-    <string name="action_send" msgid="377635240181672039">"Stuur"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Vee uit"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Vee hierdie boodskap uit?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Hierdie handeling kan nie ontdoen word nie."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Vee uit"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Vee hierdie gesprekke uit?</item>
-      <item quantity="one">Vee hierdie gesprek uit?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Vee uit"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Kanselleer"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Aan"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Kies verskeie prente"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Bevestig keuse"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Kan nie oudio opneem nie. Probeer weer."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Kan nie oudio speel nie. Probeer weer."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Kon nie oudio stoor nie. Probeer weer."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Raak en hou"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Prent"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Oudiosnit"</string>
-    <string name="notification_video" msgid="4331423498662606204">"video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kontakkaartjie"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Laai af"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Antwoord via SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Antwoord via MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Antwoord"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> deelnemers</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> deelnemer</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ek"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontak geblokkeer en geargiveer"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontak gedeblokkeer en gedeargiveer"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> geargiveer"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> gedeargiveer"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Kennisgewings afgeskakel"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Kennisgewings aangeskakel"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Alles is gereed. Raak om weer te stuur."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Boodskappe is suksesvol as die verstek-SMS-program gestel."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Gooi aanhegsels weg</item>
-      <item quantity="one">Gooi aanhegsel weg</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Oudio-aanhegsel"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Speel oudio-aanhegsel"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Wag"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Boodskap vanaf <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Mislukte boodskap van <xliff:g id="SENDER">%1$s</xliff:g> af: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Boodskap van <xliff:g id="SENDER">%1$s</xliff:g> af: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Ongestuurde boodskap aan <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Stuur tans boodskap aan <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Kon nie boodskap aan <xliff:g id="CONTACT">%1$s</xliff:g> stuur nie: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Boodskap aan <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Mislukte boodskap van <xliff:g id="SENDER">%1$s</xliff:g> af: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Boodskap van <xliff:g id="SENDER">%1$s</xliff:g> af: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Ongestuurde boodskap aan <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Stuur tans boodskap aan <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Kon nie boodskap aan <xliff:g id="GROUP">%1$s</xliff:g> stuur nie: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Boodskap aan <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tyd: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Kon nie boodskap stuur nie. Raak om weer te probeer."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Gesprek met <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Vee onderwerp uit"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Neem video op"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Vang \'n stilprent vas"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Neem foto"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Begin video opneem"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Skakel na volskerm-kamera oor"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Wissel tussen voorste en agterste kamera"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Staak opname en heg video aan"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Stop video-opname"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Foto\'s uit Boodskappe"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> foto\'s is na \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"-album gestoor</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> foto is na \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"-album gestoor</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> video\'s is na \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"-album gestoor</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video is na \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"-album gestoor</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> aanhegsels is na \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"-album gestoor</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> aanhegsel is na \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"-album gestoor</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> aanhegsels is na \"Aflaaie\" gestoor</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> aanhegsel is na \"Aflaaie\" gestoor</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> aanhegsels is gestoor</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> aanhegsel is gestoor</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Kon <xliff:g id="QUANTITY_1">%d</xliff:g> aanhegsels nie stoor nie</item>
-      <item quantity="one">Kon <xliff:g id="QUANTITY_0">%d</xliff:g> aanhegsel nie stoor nie</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS-aanhegsel gestoor"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Instellings"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Geargiveer"</string>
-    <string name="action_close" msgid="1840519376200478419">"Maak toe"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Gevorderd"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Ontfout"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Kennisgewings"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Klank"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Stil"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibreer"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Geblokkeer"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS-afleweringverslae"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Versoek \'n afleweringsverslag vir elke SMS wat jy stuur"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Haal outomaties op"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Gaan haal MMS-boodskappe outomaties"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Outoherwinning wanneer swerf"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Laai MMS outomaties af terwyl geswerf word"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Groepboodskappe"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Gebruik MMS om \'n enkele boodskap te stuur wanneer daar veelvuldige ontvangers is"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Verstek-SMS-program"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Verstek-SMS-program"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Jou foonnommer"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Onbekend"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Klanke vir uitgaande boodskappe"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Gooi SMS weg"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Stort rou data van ontvangde SMS in eksterne berginglêer"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Gooi MMS weg"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Stort rou data van ontvangde MMS in eksterne berginglêer"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Draadlose waarskuwings"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Boodskapopsies"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopieer teks"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Bekyk besonderhede"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Vee uit"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Stuur aan"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Boodskapbesonderhede"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tipe: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Teksboodskap"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimediaboodskap"</string>
-    <string name="from_label" msgid="1947831848146564875">"Van: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Aan: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Gestuur: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Ontvang: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Onderwerp: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Grootte: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioriteit: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Hoog"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normaal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Laag"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Versteekte afsenderadres"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Kan nie boodskap stuur terwyl aanhegsels gelaai word nie."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Kan nie aanhegsel laai nie. Probeer weer."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Netwerk is nie gereed nie. Probeer weer."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Vee teks uit"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Wissel tussen invoer van teks en syfers"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Voeg meer deelnemers by"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Bevestig deelnemers"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Begin nuwe gesprek"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Kies hierdie item"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Speel video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Mense en opsies"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Ontfout"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Mense en opsies"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Algemeen"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Mense in hierdie gesprek"</string>
-    <string name="action_call" msgid="6596167921517350362">"Maak \'n oproep"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Stuur boodskap"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Stuur boodskap&lt;br/&gt;&lt;small&gt;van <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt; af"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Stuur foto\'s</item>
-      <item quantity="one">Stuur foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Stuur oudio\'s</item>
-      <item quantity="one">Stuur oudio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Stuur video\'s</item>
-      <item quantity="one">Stuur video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Stuur kontakkaarte</item>
-      <item quantity="one">Stuur kontakkaart</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Stuur aanhegsels</item>
-      <item quantity="one">Stuur aanhegsel</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> aanhegsels is gereed om te stuur</item>
-      <item quantity="one">Een aanhegsel is gereed om te stuur</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Stuur terugvoer"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Bekyk in Google Play Winkel"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Weergawe-inligting"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Weergawe %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Oopbronlisensies"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Kennisgewings"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Aanhegsellimiet is bereik"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Kon nie aanhegsel laai nie."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Voeg by kontakte?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Voeg kontak by"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Onderwerp"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Onderwerp: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Laai tans kontakkaart"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kon nie kontakkaart laai nie"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Bekyk kontakkaart"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakte</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontak</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontakkaarte"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Verjaardag"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notas"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Aanstuurboodskap"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Antwoord"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS gedeaktiveer"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Stel Boodskappe as die verstek-SMS-program om te stuur"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Stel Boodskappe as die verstek-SMS-program"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Verander"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Stel Boodskappe as die verstek-SMS-program om boodskappe te ontvang"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Geen voorkeur-SIM vir die stuur van SMS-boodskappe gekies nie"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Hierdie program word nie deur die toesteleienaar toegelaat nie."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Goed"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Te veel deelnemers aan \'n gesprek"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Ongeldige kontakte</item>
-      <item quantity="one">Ongeldige kontak</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Kon nie kameraprent laai nie"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Jy: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Konsep"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Sodra jy \'n nuwe gesprek begin, sal jy dit hier gelys sien"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Geargiveerde gesprekke verskyn hier"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Laai tans gesprekke …"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Prent"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Oudiosnit"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kontakkaartjie"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Ontdoen"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Herprobeer"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Voer \'n kontaknaam of foonnommer in om \'n nuwe boodskap te begin"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokkeer"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blokkeer <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Deblokkeer <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Blokkeer <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Jy sal steeds boodskappe van hierdie nommer af ontvang, maar sal nie meer in kennis gestel word nie. Hierdie gesprek sal geargiveer word."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Geblokkeerde kontakte"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DEBLOKKEER"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Geblokkeerde kontakte"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Kies prent uit dokumentbiblioteek"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Stuur tans boodskap"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Boodskap gestuur"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Sellulêre data is afgeskakel. Gaan jou instellings na."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Kan nie boodskappe in vliegtuigmodus stuur nie"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Kon nie boodskap stuur nie"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Boodskap afgelaai"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Sellulêre data is afgeskakel. Gaan jou instellings na."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Kan nie boodskappe in vliegtuigmodus aflaai nie"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Boodskap kon nie afgelaai word nie"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nul"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Een"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Twee"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Drie"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Vier"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Vyf"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Ses"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sewe"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Agt"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nege"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Kan nie boodskap met <xliff:g id="CARRIERNAME">%1$s</xliff:g> stuur nie, fout <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Kan nie boodskap met onbekende diensverskaffer stuur nie, fout <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Boodskap nie gestuur nie: diens nie in netwerk geaktiveer nie"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Boodskap nie gestuur nie: ongeldige bestemmingsadres"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Boodskap nie gestuur nie: ongeldige boodskap"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Boodskap nie gestuur nie: inhoud word nie gesteun nie"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Boodskap nie gestuur nie: boodskap word nie gesteun nie"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Boodskap nie gestuur nie; te groot"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nuwe boodskap"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Bekyk"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Prent"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Kon nie \'n toepaslike program vind nie"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Verwyder ontvanger"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nuwe boodskap"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Kanselleer"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Wysig toegangspunt"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nie gestel nie"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Naam"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS-volmag"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS-poort"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN-tipe"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Vee APN uit"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nuwe APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Stoor"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Gooi weg"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Die naamveld kan nie leeg wees nie."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Die APN kan nie leeg wees nie."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC-veld moet 3 syfers wees."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Die MNC-veld moet uit 2 of 3 syfers bestaan."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Stel tans verstekinstellings vir APN terug."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Stel terug na verstek"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Terugstel van verstek-APN-instellings voltooi."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Titelloos"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"APN\'e"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN\'e"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nuwe APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"APN-instellings is nie vir hierdie gebruiker beskikbaar nie"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Kopieer na knipbord?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopieer"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"aan <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Algemeen"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Gevorderd"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Algemene instellings"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Gevorderde instellings"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\"-SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Stuur individuele SMS-boodskappe aan alle ontvangers. Net jy sal enige antwoorde kry"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Stuur \'n enkele MMS aan alle ontvangers"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Onbekende nommer"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nuwe boodskap"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nuwe boodskap."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM-selekteerder"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> gekies, SIM-selekteerder"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Wysig onderwerp"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Kies SIM of wysig onderwerp"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Raak en hou om oudio op te neem"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Begin nuwe gesprek"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Boodskappe"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Boodskappe-lys"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Boodskappe"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nuwe boodskap"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Gespreklys"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Laai tans gesprekke"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Laai tans boodskappe"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Bekyk nog gesprekke"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Bekyk nog boodskappe"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Gesprek uitgevee"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Gesprek is uitgevee. Raak om \'n ander Boodskappe-gesprek te wys"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Geblokkeer"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Gedeblokkeer"</string>
-    <string name="db_full" msgid="8459265782521418031">"Daar is min bergingspasie. Sommige data kan verloor word."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Kies aanhegsels"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Bevestig keuse"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> gekies"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Verwyder asseblief een of meer aanhegsels en probeer weer."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Jy kan probeer om jou boodskap te stuur, maar dit sal dalk nie afgelewer word tensy jy een of meer aanhegsels verwyder nie."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Jy kan net een video per boodskap stuur. Verwyder bykomende video\'s en probeer weer."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Boodskappe kon nie aanhegsel laai nie."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Stuur in elk geval"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Kon nie gesprek begin nie"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> gekies"</string>
-</resources>
diff --git a/res/values-am/arrays.xml b/res/values-am/arrays.xml
deleted file mode 100644
index 225008e..0000000
--- a/res/values-am/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"ርዕሰ-ጉዳይ የሌለው"</item>
-    <item msgid="272485471009191934">"ምንም ርእስ የለውም"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"አዎ"</item>
-    <item msgid="6049132459802288033">"አይ"</item>
-    <item msgid="3084376867445867895">"እሺ"</item>
-    <item msgid="3155097332660174689">"ሃሃ"</item>
-    <item msgid="2611328818571146775">"እናመሰግናለን"</item>
-    <item msgid="4881335087096496747">"እስማማለሁ"</item>
-    <item msgid="2422296858597420738">"በጣም ጥሩ"</item>
-    <item msgid="4805581752819452687">"እየመጣሁ ነኝ"</item>
-    <item msgid="4746700499431366214">"እሺ፣ በኋላ ላይ ላግኝዎት"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
deleted file mode 100644
index bea9e6f..0000000
--- a/res/values-am/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"መልዕክት መላኪያ"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"መልዕክት መላኪያ"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"ውይይት ምረጥ"</string>
-    <string name="action_settings" msgid="1329008122345201684">"ቅንብሮች"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"መልዕክት ላከ"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"ዓባሪ አክል"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"እገዛ"</string>
-    <string name="welcome" msgid="2857560951820802321">"እንኳን በደህና መጡ"</string>
-    <string name="skip" msgid="7238879696319945853">"ዝለል"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"ቀጣይ &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"ቀጣይ"</string>
-    <string name="exit" msgid="1905187380359981199">"ውጣ"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"ቅንብሮች &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"ቅንብሮች"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"አላላክ የኤስኤምኤስ፣ ስልክ እና እውቂያዎች ፍቃድ ያስፈልገዋል።"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"ፍቃዶችን በቅንብሮች &gt; መተግበሪያዎች &gt; አላላክ &gt; ፍቃዶች ውስጥ መለወጥ ይችላሉ።"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"ፍቃዶችን በቅንብሮች፣ መተግበሪያዎች፣ አላላክ፣ ፍቃዶች ውስጥ መለወጥ ይችላሉ።"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"ተደጋጋሚዎች"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"ሁሉም ዕውቂያዎች"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"ወደ <xliff:g id="DESTINATION">%s</xliff:g> ላክ"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"ስዕሎችን አንሳ ወይም ቪዲዮ ቅረጽ"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"ከዚህ መሣሪያ ላይ ምስሎችን ይምረጡ"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ተሰሚ ቅረጽ"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ፎቶ ይምረጡ"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"ሚዲያው ተመርጧል።"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"ሚዲያው አልተመረጠም።"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> ተመርጠዋል"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"ምስል <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"ምስል"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ተሰሚ ቅረጽ"</string>
-    <string name="action_share" msgid="2143483844803153871">"አጋራ"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ገና አሁን"</string>
-    <string name="posted_now" msgid="867560789350406701">"አሁን"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ደቂቃዎች</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ደቂቃዎች</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ሰዓቶች</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ሰዓቶች</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ቀኖች</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ቀኖች</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ሳምንቶች</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ሳምንቶች</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ወሮች</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ወሮች</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ዓመቶች</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ዓመቶች</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"የመደብ 0 መልዕክት"</string>
-    <string name="save" msgid="5081141452059463572">"አስቀምጥ"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"መሣሪያው አነስተኛ ቦታ ነው ያለው። አላላክ ቦታን ለማስለቀቅ የቆዩ መልዕክቶችን በራስ ሰር ይሰርዛል።"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"የማከማቻ ቦታ እያለቀ ነው"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"መሣሪያዎ ላይ ተጨማሪ ቦታ እስኪገኝ ድረስ አላላክ መልዕክቶችን ላይልክ ወይም ላይቀበል ይችላል።"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"ዝቅተኛ የኤስኤምኤስ ማከማቻ። መልዕክቶችን መሰረዝ ሊኖርብዎ ይችላል።"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"ስልክ ቁጥርዎን ያረጋግጡ"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"ይሄ የአንድ ጊዜ እርምጃ አላላክ የቡድን መልዕክቶችዎን በአግባቡ እንደሚልክ ያረጋግጣል።"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ስልክ ቁጥር"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"ማህደረመረጃ ያላቸው ሁሉንም መልዕክቶች ሰርዝ"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"ከ<xliff:g id="DURATION">%s</xliff:g> በላይ የቆዩ መልዕክቶችን ሰርዝ"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"ከ<xliff:g id="DURATION">%s</xliff:g> በላይ የቆዩ መልዕክቶችን በራስ-ሰር ሰርዝ"</string>
-    <string name="ignore" msgid="7063392681130898793">"ችላ በል"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"ማህደረመረጃ ያላቸው ሁሉም መልዕክቶች ይሰረዙ?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"ከ<xliff:g id="DURATION">%s</xliff:g> በላይ የቆዩ መልዕክቶች ይሰረዙ?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"ከ<xliff:g id="DURATION">%s</xliff:g> በላይ የቆዩ መልዕክቶች ይሰረዙ እና ራስ-ሰር ሰራዥ ይብራ?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> እንዲህ ብለዋል፦"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"እርስዎ እንዲህ ብለዋል፦"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"መልዕክት ከ<xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"እርስዎ መልዕክት ልከዋል"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"በመላክ ላይ…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"አልተላከም። እንደገና ለመሞከር ይንኩ።"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"አልተላከም። እንደገና በመሞከር ላይ…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"ዳግም ላክ ወይም ሰርዝ"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"ወደ ድንገተኛ አገልግሎቶች እባክዎ የድምፅ ጥሪ ያድርጉ። የእርስዎ የጽሑፍ መልዕክት አሁን ላይ ሊደርስ አይችልም።"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"አልተሳካም"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"አዲስ የሚወርድ የኤምኤምኤስ መልዕክት"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"አዲስ የኤምኤምኤስ መልዕክት"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ማውረድ አልተቻለም"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"እንደገና ለመሞከር ይንኩ"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ለማውረድ ይንኩ"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"አውርድ ወይም ሰርዝ"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"በማውረድ ላይ…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"መልዕክቱ ጊዜው አልፎበታል ወይም አይገኝም።"</string>
-    <string name="mms_info" msgid="3402311750134118165">"መጠን፦ <xliff:g id="MESSAGESIZE">%1$s</xliff:g>፣ ጊዜው የሚያልፍበት፦ <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"መላክ አይቻልም። ተቀባይ ልክ አይደለም።"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"አገልግሎት በአውታረ መረብ ላይ አልገበረም"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"በአውታረ መረብ ችግር ምክንያት መላክ አልተቻለም"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"መልዕክቱ ጊዜው አልፎበታል ወይም አይገኝም።"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(ርዕስ ጉዳይ የለውም)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"ያልታወቀ ላኪ"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"ደርሷል"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"መልዕክት <xliff:g id="SUBJECT">%1$s</xliff:g> ከ<xliff:g id="FROM">%2$s</xliff:g> ማውረድ አልተቻለም።"</string>
-    <string name="low_memory" msgid="5300743415198486619">"በአነስተኛ ማህደረ ትውስታ ምክንያት የውሂብ ጎታ ክወና ማጠናቀቅ አልተቻለም"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"መልዕክት አልተላከም"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"አንዳንድ መልዕክቶች በአላላክ ውስጥ አልተላኩም"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> መልዕክቶች በ<xliff:g id="CONVERSATIONS">%d</xliff:g> ውይይቶች ውስጥ</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> መልዕክቶች በ<xliff:g id="CONVERSATIONS">%d</xliff:g> ውይይቶች ውስጥ</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"መልዕክት አልወረደም"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"አንዳንድ መልዕክቶች በአላላክ ውስጥ አልወረዱም"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> መልዕክቶች በ<xliff:g id="CONVERSATIONS">%d</xliff:g> ውይይቶች ውስጥ</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> መልዕክቶች በ<xliff:g id="CONVERSATIONS">%d</xliff:g> ውይይቶች ውስጥ</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"ወደ <xliff:g id="NUMBER">%1$s</xliff:g> የሚሄድ መልዕክት አልተላከም"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"ወደ ድንገተኛ አገልግሎቶች እባክዎ የድምፅ ጥሪ ያድርጉ። የእርስዎ ወደ <xliff:g id="NUMBER">%1$s</xliff:g> የጽሑፍ መልዕክት አሁን ላይ ሊደርስ አይችልም።"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> አዲስ መልዕክቶች</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> አዲስ መልዕክቶች</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"ጀምር"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"ካሜራ ሊገኝ አይችልም"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"ካሜራ ሊገኝ አይችልም"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"የቪዲዮ ቀረጻ ሊገኝ አይችልም"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"ማህደረ መረጃን ማስቀመጥ አይቻልም"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"ስዕል ማንሳት አልተቻለም"</string>
-    <string name="back" msgid="1477626055115561645">"ተመለስ"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"በማህደር ተቀምጧል"</string>
-    <string name="action_delete" msgid="4076795795307486019">"ሰርዝ"</string>
-    <string name="action_archive" msgid="5437034800324083170">"በማህደር አስቀምጥ"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"ከማህደር አስወጣ"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"ማሳወቂያዎችን አጥፋ"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"ማሳወቂያዎችን አብራ"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"እውቂያ አክል"</string>
-    <string name="action_download" msgid="7786338136368564146">"አውርድ"</string>
-    <string name="action_send" msgid="377635240181672039">"ላክ"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"ሰርዝ"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"ይህን መልዕክት ይሰረዝ?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"ይህ እርምጃ ሊቀለበስ አይችልም።"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"ሰርዝ"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">እነዚህ ውይይቶች ይሰርዙ?</item>
-      <item quantity="other">እነዚህ ውይይቶች ይሰርዙ?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"ሰርዝ"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"ይቅር"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"ለ"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"በርካታ ምስሎችን ምረጥ"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"ምርጫ አረጋግጥ"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ድምፅን መቅዳት አልተቻለም። እንደገና ይሞክሩ።"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ድምፅን ማጫወት አልተቻለም። እንደገና ይሞክሩ።"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ድምፅን ማስቀመጥ አልተቻለም። እንደገና ይሞክሩ።"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"ነካ ያድርጉ እና ይያዙ"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">"፣ "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">"፦ "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"ስዕል"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"የተሰሚ ቅንጥብ"</string>
-    <string name="notification_video" msgid="4331423498662606204">"ቪዲዮ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"የእውቂያ ካርድ"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"አውርድ"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"በኤስኤምኤስ በኩል መልስ ስጥ"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"በኤምኤምኤስ በኩል ምላሽ ስጥ"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"ምላሽ ስጥ"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ተሳታፊዎች</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ተሳታፊዎች</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"እኔ"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"እውቂያ ታግዶ በማህደር ውስጥ ተቀምጧል"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"እውቂያ እገዳው ተነስቷል እና ከቤተማከማቻ ወጥቷል"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> በማህደር ተቀምጧል"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> ከማህደር ወጥተዋል"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"ማሳወቂያዎች ጠፍተዋል"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"ማሳወቂያዎች በርተዋል"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"ሁሉም ተቀናብሯል። እንደገና ላክ የሚለውን ይንኩ።"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"የአላላክ በተሳካ ሁኔታ እንደ ነባሪ የኤስኤምኤስ መተግበሪያ ተዘጋጅቷል።"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">ዓባሪዎችን አስወግድ</item>
-      <item quantity="other">ዓባሪዎችን አስወግድ</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"የኦዲዮ ዓባሪ"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"የኦዲዮ ዓባሪ ያጫውቱ"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"ለአፍታ አቁም"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"መልእክት ከ <xliff:g id="SENDER">%1$s</xliff:g>፦ <xliff:g id="MESSAGE">%2$s</xliff:g>።"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"ያልተሳካ መልዕክት ከ<xliff:g id="SENDER">%1$s</xliff:g>፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>።"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"ከ<xliff:g id="SENDER">%1$s</xliff:g> የመጣ መልዕክት፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>።"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"ወደ <xliff:g id="CONTACT">%1$s</xliff:g> የሚሄድ ያልተላከ መልዕክት፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>።"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"መልዕክት ወደ <xliff:g id="CONTACT">%1$s</xliff:g> በመላክ ላይ፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>።"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"ያልተሳካ ወደ <xliff:g id="CONTACT">%1$s</xliff:g> የሚሄድ መልዕክት፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>።"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"ወደ <xliff:g id="CONTACT">%1$s</xliff:g> የሚሄድ መልዕክት፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>።"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"ያልተሳካ መልዕክት ከ<xliff:g id="SENDER">%1$s</xliff:g>፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>። <xliff:g id="GROUPINFO">%4$s</xliff:g>።"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"መልዕክት ከ<xliff:g id="SENDER">%1$s</xliff:g>፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>። <xliff:g id="GROUPINFO">%4$s</xliff:g>።"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"ወደ <xliff:g id="GROUP">%1$s</xliff:g> የሚሄድ ያልተላከ መልዕክት፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>።"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"መልዕክት ወደ <xliff:g id="GROUP">%1$s</xliff:g> በመላክ ላይ፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>።"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"ያልተሳካ ወደ <xliff:g id="GROUP">%1$s</xliff:g> የሚሄድ መልዕክት፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>።"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"ወደ <xliff:g id="GROUP">%1$s</xliff:g> የሚሄድ መልዕክት፦ <xliff:g id="MESSAGE">%2$s</xliff:g>። ሰዓት፦ <xliff:g id="TIME">%3$s</xliff:g>።"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"ያልተሳካ መልዕክት። ዳግም ለመሞከር ይንኩ።"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"ከ<xliff:g id="PARTICIPANTS">%s</xliff:g> ጋር ውይይት"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"ርዕሰ ጉዳይ ሰርዝ"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"ቪዲዮ ቅረጽ"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"የቆመ ምስል አንሳ"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"ፎቶ አንሳ"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"ቪዲዮ መቅረጽ ጀምር"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"ወደ የሙሉ ማያ ገጽ ካሜራ ቀይር"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"በፊት እና ኋላ ካሜራ መካከል ቀያይር"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"መቅረጽ አቁም እና ቪዲዮ አያይዝ"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"ቪዲዮ መቅዳትን አቁም"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"ፎቶዎችን በመልዕክት መላክ"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> ፎቶዎች ወደ የ«<xliff:g id="ALBUMNAME_3">%s</xliff:g>» አልበም ተቀምጠዋል</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ፎቶዎች ወደ የ«<xliff:g id="ALBUMNAME_3">%s</xliff:g>» አልበም ተቀምጠዋል</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> ቪዲዮዎች ወደ የ«<xliff:g id="ALBUMNAME_3">%s</xliff:g>» አልበም ተቀምጠዋል</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ቪዲዮዎች ወደ የ«<xliff:g id="ALBUMNAME_3">%s</xliff:g>» አልበም ተቀምጠዋል</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> ዓባሪዎች ወደ «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» አልበም ተቀምጠዋል</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ዓባሪዎች ወደ «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» አልበም ተቀምጠዋል</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> ዓባሪዎች ወደ «ውርዶች» ተቀምጠዋል</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ዓባሪዎች ወደ «ውርዶች» ተቀምጠዋል</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> ዓባሪዎች ተቀምጠዋል</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ዓባሪዎች ተቀምጠዋል</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> ዓባሪዎችን ማስቀመጥ አልተቻለም</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ዓባሪዎችን ማስቀመጥ አልተቻለም</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"የኤምኤምኤስ ዓባሪ ተቀምጧል"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"ቅንብሮች"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"በማህደር ተቀምጧል"</string>
-    <string name="action_close" msgid="1840519376200478419">"ዝጋ"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"ኤምኤምኤስ"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"የላቀ"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"አርም"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"ማሳወቂያዎች"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ድምፅ"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"ፀጥታ"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"ንዘር"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"ታግዷል"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"የኤስኤምኤስ መላክ ሪፖርቶች"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"ለሚልኩት እያንዳንዱ ኤስኤምኤስ የመላኪያ ሪፖርት ጠይቅ"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"በራስ- ሰርስረህ አውጣ"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"የኤምኤምኤስ መልዕክቶችን በራስ-ሰር ሰርስረህ አውጣ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"በእንቅስቃሴ ላይ በራስ-ሰር ሰርስረህ አውጣ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"የስልክ አገልግሎት ሰጪ በሚቀየርበት ጊዜ ኤምኤምኤስን በራስ-ሰር ሰርስረህ አውጣ"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"የቡድን መልዕክት መላላኪያ"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"ብዙ ተቀባዮች ሲኖሩ አንዲት መልዕክት ለመላክ ኤምኤምኤስ ይጠቀሙ"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"ነባሪ የኤስኤምኤስ መተግበሪያ"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"ነባሪ የኤስኤምኤስ መተግበሪያ"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"ስልክ ቁጥርዎ"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"የማይታወቅ"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"የወጪ መልዕክት ድምጾች"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"ኤስኤምኤስ አራግፍ"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"የመጡ የኤስኤምኤስ ጥሬ ውሂብ ወደ ውጫዊ የማከማቻ ፋይል ላይ አራግፍ"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"ኤምኤምኤስ አራግፍ"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"የመጡ የኤምኤምኤስ ጥሬ ውሂብ ወደ ውጫዊ የማከማቻ ፋይል ላይ አራግፍ"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"ገመድ አልባ ማንቂያዎች"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"የመልዕክት አማራጮች"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"ጽሁፍ ገልብጥ"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"ዝርዝሮችን ይመልከቱ"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"ሰርዝ"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"ያስተላልፉ"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"የመልዕክት ዝርዝሮች"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"ዓይነት፦ "</string>
-    <string name="text_message" msgid="7415419755252205721">"የፅሁፍ መልዕክት"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"ማህደረ ብዙ መረጃመልዕክት"</string>
-    <string name="from_label" msgid="1947831848146564875">"ከ፦ "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"ለ፦ "</string>
-    <string name="sent_label" msgid="5186286057597137301">"የተላከው፦ "</string>
-    <string name="received_label" msgid="4442494712757995203">"የደረሰው፦ "</string>
-    <string name="subject_label" msgid="1887378451808609152">"ርዕሰ ጉዳይ፦ "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"መጠን፦ "</string>
-    <string name="priority_label" msgid="5029073794896222902">"ቅድሚያ የሚሰጠው፦ "</string>
-    <string name="sim_label" msgid="2706003016582772108">"ሲም፦ "</string>
-    <string name="priority_high" msgid="728836357310908368">"ከፍተኛ"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"መደበኛ"</string>
-    <string name="priority_low" msgid="7398724779026801851">"ዝቅ ያለ"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"ሲም <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"የተደበቀ የላኪ አድራሻ"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"አባሪዎችን በመጫን ላይ እያለ መልዕክት መላክ አይችልም።"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"ዓባሪን መጫን አልተቻለም። እንደገና ይሞክሩ።"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"አውታረ መረቡ ዝግጁ አይደለም። እንደገና ይሞክሩ።"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"ጽሑፍ ሰርዝ"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"ጽሑፍ እና ቁጥሮችን በማስገባት መካከል ይቀያይሩ"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"ተጨማሪ ተሳታፊዎችን ያክሉ"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"ተሳታፊዎችን ያረጋግጡ"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"አዲስ ውይይት ጀምር"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"ይህን ንጥል ምረጥ"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"ቪዲዮ አጫውት"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"ሰዎች እና አማራጮች"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"አርም"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"ሰዎች እና አማራጮች"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"አጠቃላይ"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"በዚህ ውይይት ውስጥ ያሉ ሰዎች"</string>
-    <string name="action_call" msgid="6596167921517350362">"ደውል"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"መልዕክት ላክ"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"መልዕክት ይላኩ&lt;br/&gt;&lt;small&gt;from <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">ፎቶዎችን ይላኩ</item>
-      <item quantity="other">ፎቶዎችን ይላኩ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">ኦዲዮዎች ይላኩ</item>
-      <item quantity="other">ኦዲዮዎች ይላኩ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">ቪዲዮዎችን ይላኩ</item>
-      <item quantity="other">ቪዲዮዎችን ይላኩ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">የእውቂያ ካርዶችን ይላኩ</item>
-      <item quantity="other">የእውቂያ ካርዶችን ይላኩ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">ዓባሪዎችን ይላኩ</item>
-      <item quantity="other">ዓባሪዎችን ይላኩ</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ዓባሪዎችን ለመላክ የተዘጋጁ ዓባሪዎች</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ዓባሪዎችን ለመላክ የተዘጋጁ ዓባሪዎች</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"ግብረመልስ ላክ"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"በGoogle Play መደብር ውስጥ ይመልከቱ"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"የስሪት መረጃ"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"ስሪት %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"የክፍት ምንጭ ፍቃዶች"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"ማሳወቂያዎች"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"የዓባሪ ገደብ ተደርሷል"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"ዓባሪን መጫን አልተሳካም።"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"ወደ እውቂያ ይታከል?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"እውቅያ ያክሉ"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"ርዕሰ ጉዳይ"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"ርዕሰ ጉዳይ፦ "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"የእውቂያ ካርድ በመጫን ላይ"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"የእውቂያ ካርድን መጫን አልተቻለም"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"የእውቂያ ካርድ ይመልከቱ"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> እውቂያዎች</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> እውቂያዎች</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"የአውቂያ ካርዶች"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"የልደት ቀን"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"ማስታወሻዎች"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"መልዕክት አስተላልፍ"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"ምላሽ ስጥ"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"ኤስኤምኤስ ተሰናክሏል"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"ለመላክ፣ የአላላክን እንደ ነባሪ የኤስኤምኤስ መተግበሪያ ያዘጋጁት"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"አላላክን እንደ ነባሪ የኤስኤምኤስ መተግበሪያ ያዘጋጁት"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"ለውጥ"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"መልዕክቶችን ለመቀበል የአላላክን እንደ ነባሪ የኤስኤምኤስ መተግበሪያ አድርገው ያዘጋጁት"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"ኤስ ኤም ኤስ መልዕክቶችን ለመላክ ምንም ተመራጭ ሲም አልተመረጠም"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"ይህ መተግበሪያ በመሣሪያው ባለቤት አይፈቀድም።"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"እሺ"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"በአንድ ውይይት ውስጥ በጣም ብዙ ተሳታፊዎች"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">ልክ ያልሆኑ እውቂያዎች</item>
-      <item quantity="other">ልክ ያልሆኑ እውቂያዎች</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"የካሜራ ምስልን መጫን አልተቻለም"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"እርስዎ፦ "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>፦ "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"ረቂቅ"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"አንዴ አዲስ ውይይት ከጀመሩ በኋላ እዚህ ተዘርዝሮ ያዩታል"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"በቤተመዛግብት እንዲቀመጡ የተደረጉ ውይይቶች እዚህ ላይ ብቅ ያላሉ"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"ውይይቶች በመስቀል ላይ..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"ስዕል"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"የተሰሚ ቅንጥብ"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"ቪዲዮ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"የእውቂያ ካርድ"</string>
-    <string name="mms_text" msgid="1528791558806015806">"ኤምኤምኤስ"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"ቀልብስ"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"እንደገና ይሞክሩ"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"አዲስ መልዕክት ለመጀመር የእውቂያ ስም ወይም ስልክ ቁጥር ያስገቡ"</string>
-    <string name="action_block" msgid="9032076625645190136">"አግድ"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g>ን አግድ"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"የ<xliff:g id="DESTINATION">%s</xliff:g> እገዳን አንሳ"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> ይታገድ?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"ከዚህ ቁጥር መልዕክቶችን መቀበልዎን ይቀጥላሉ ነገርግን ከእንግዲህ እንዲያውቁት አይደረጉም። ይህ ውይይት በቤተመዛግብት ይቀመጣል።"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"የታገዱ እውቂያዎች"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"እገዳ አንሳ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"የታገዱ እውቂያዎች"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"ከሰነዶች ቤተመዛግብት ምስል ይምረጡ"</string>
-    <string name="sending_message" msgid="6363584950085384929">"መልዕክት በመላክ ላይ"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"መልዕክት ተልኳል"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"የተንቀሳቃሽ ስልክ ውሂብ ጠፍቷል። ቅንብሮችዎን ያረጋግጡ።"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"በአይሮፕላን ሁኔታ ላይ እያለ መልዕክቶችን መላክ አይቻልም"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"መልዕክቱ ሊላክ አልቻለም"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"መልዕክት ወርዷል"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"የተንቀሳቃሽ ስልክ ውሂብ ጠፍቷል። ቅንብሮችዎን ያረጋግጡ።"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"መልዕክቶችን በአውሮፕላን ሁነታ ላይ ማውረድ አይቻልም"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"መልዕክት ሊወርድ አልቻለም"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"ዜሮ"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"አንድ"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"ሁለት"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"ሶስት"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"አራት"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"አምስት"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ስድስት"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"ሰባት"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"ስምንት"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"ዘጠኝ"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"መልዕክት በ<xliff:g id="CARRIERNAME">%1$s</xliff:g> መላክ አልተቻለም፣ ስህተት <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"መልዕክት ባልታወቀ አገልግሎት አቅራቢ መላክ አልተቻለም፣ ስህተት <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"የተላለፈ፦ <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"መልዕክት አልተላከም፦ አገልግሎቱ በአውታረ መረብ ላይ አልገበረም።"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"መልዕክት አልተላከም፦ ልክ ያልሆነ የመድረሻ አድራሻ"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"መልዕክት አልተላከም፦ ልክ ያልሆነ መልዕክት"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"መልዕክት አልተላከም፦ የማይደገፍ ይዘት"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"መልዕክት አልተላከም፦ የማይደገፍ መልዕክት"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"መልዕክት አልተላከም፦ በጣም ትልቅ ነው"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"አዲስ መልዕክት"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"ይመልከቱ"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"ምስል"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"አግባብ የሆነውን መተግበሪያ ማግኘት አልተቻለም"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"ተቀባይ አስወግድ"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"አዲስ መልዕክት"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"ተወው"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"የመድረሻ ነጥብ ያርትዑ"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"አልተዘጋጀም"</string>
-    <string name="apn_name" msgid="1572691851070894985">"ስም"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"ኤ.ፒ.ኤን."</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"የMMS እጅ አዙር"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"የMMS ወደብ"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"የኤ.ፒ.ኤን አይነት"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"ኤ.ፒ.ኤን. ሰርዝ"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"አዲስ ኤ.ፒ.ኤን."</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"አስቀምጥ"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"ጣለው"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"የስም መስክ ባዶ ሊሆን አይችልም"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"ኤ.ፒ.ኤን. ባዶ መሆን አይችልም።"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"የMCC መስክ 3 አሀዝ መሆን አለበት።"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"የMNC መስክ 2 ወይም 3 አሀዝ መሆን አለበት።"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"ነባሪ የኤ.ፒ.ኤን. ቅንብሮችን እነበረበት መመለስ።"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"ወደ ነባሪ ዳግም አስጀምር"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"የዳግም አስጀምር ነባሪ ኤ.ፒ.ኤን. ቅንብሮች ተጠናቀዋል።"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"ርዕስ አልባ"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"የመዳረሻ ነጥብ ስም"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"ኤ.ፒ.ኤኖች."</string>
-    <string name="menu_new" msgid="8286285392706532511">"አዲስ ኤ.ፒ.ኤን."</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"የመዳረሻ  ነጥብ ስም ቅንብሮች ለዚህ ተጠቃሚ አይገኙም"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"ወደ የቅንጥብ ሰሌዳ ይቀዳ?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"ቅዳ"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"ለ<xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"አጠቃላይ"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"የላቀ"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"አጠቃላይ ቅንብሮች"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"የላቁ ቅንብሮች"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"የ«<xliff:g id="SIM_NAME">%s</xliff:g>» ሲም"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"የነጠላ ኤስኤምኤስ መልዕክቶችን ለሁሉም ተቀባዮች ይላኩ። እርስዎ ብቻ ነዎት ማንኛቸውም ምላሾችን የሚቀበሉት"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"አንዲት ኤምኤምኤስ ለሁሉም ተቀባዮች ይላኩ"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"ያልታወቀ ቁጥር"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"አዲስ መልዕክት"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"አዲስ መልዕክት"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"ሲም መራጭ"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> ተመርጧል፣ የሲም መራጭ"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"ርዕሰ ጉዳይ ያርትዑ"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"ሲም ይምረጡ ወይም ርዕሰ ጉዳይን ያርትዑ"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ተሰሚን ለመቅረጽ ይንኩና ይያዙ"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"አዲስ ውይይት ጀምር"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"አላላክ"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"የአላላክ ዝርዝር"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"አላላክ"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"አዲስ መልዕክት"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"የውይይት ዝርዝር"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"ውይይቶችን በመጫን ላይ"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"መልዕክቶች በመስቀል ላይ"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"ተጨማሪ ውይይቶችን ይመልከቱ"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"ተጨማሪ መልዕክቶችን አሳይ"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"ውይይት ተሰርዟል"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"ውይይት ተሰርዟል። የተለየ የአላላክ ውይይት ለማሳየት ይንኩ"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"ታግዷል"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"አልታገደም"</string>
-    <string name="db_full" msgid="8459265782521418031">"የማከማቻ ቦታ ዝቅተኛ ነው። አንዳንድ ውሂብ ሊጠፋ ይችላል።"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"ዓባሪዎችን ይምረጡ"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"ምርጫ አረጋግጥ"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ተመርጠዋል"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"እባክዎ አንድ ወይም ተጨማሪ ዓባሪዎችን ያስወግዱና እንደገና ይሞክሩ።"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"መልዕክትዎን ለመላክ መሞከር ይችላሉ፣ ነገር ግን አንድ ወይም ተጨማሪ ዓባሪዎችን እስኪያስወግዱ ድረስ ላይደርስ ይችላል።"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"በአንድ መልዕክት አንድ ቪዲዮ ብቻ ለመላክ ይችላሉ። እባክዎ ተጨማሪ ቪዲዮዎችን ያስወግዱ እና እንደገና ይሞክሩ።"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"አላላክ አባሪን መጫን አልቻለም።"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"ለማንኛውም ላክ"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"ውይይት መጀመር አልተቻለም"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> ተመርጧል"</string>
-</resources>
diff --git a/res/values-ar/arrays.xml b/res/values-ar/arrays.xml
deleted file mode 100644
index 0cf1702..0000000
--- a/res/values-ar/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"بدون موضوع"</item>
-    <item msgid="272485471009191934">"بدون موضوع"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"نعم"</item>
-    <item msgid="6049132459802288033">"لا"</item>
-    <item msgid="3084376867445867895">"موافق"</item>
-    <item msgid="3155097332660174689">"هاها"</item>
-    <item msgid="2611328818571146775">"شكرًا"</item>
-    <item msgid="4881335087096496747">"أوافق"</item>
-    <item msgid="2422296858597420738">"لطيف"</item>
-    <item msgid="4805581752819452687">"في الطريق"</item>
-    <item msgid="4746700499431366214">"حسنًا، سأتناول ذلك لاحقًا"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
deleted file mode 100644
index 1a0f4b9..0000000
--- a/res/values-ar/strings.xml
+++ /dev/null
@@ -1,623 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"المراسلة"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"المراسلة"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"تحديد محادثة"</string>
-    <string name="action_settings" msgid="1329008122345201684">"الإعدادات"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"إرسال رسالة"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"إضافة مرفق"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"مساعدة"</string>
-    <string name="welcome" msgid="2857560951820802321">"مرحبًا"</string>
-    <string name="skip" msgid="7238879696319945853">"تخطٍ"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"‏التالي &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"التالي"</string>
-    <string name="exit" msgid="1905187380359981199">"خروج"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"‏الإعدادات &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"الإعدادات"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"‏يحتاج تطبيق المراسلة إلى إذن للوصول إلى الرسائل القصيرة SMS والهاتف وجهات الاتصال."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"‏يمكنك تغيير الأذونات من خلال الإعدادات &gt; التطبيقات &gt; المراسلة &gt; الأذونات."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"يمكنك تغيير الأذونات من خلال الانتقال إلى الإعدادات، التطبيقات، المراسلة، الأذونات."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"من يتم الاتصال بهم بشكل متكرر"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"كل جهات الاتصال"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"إرسال إلى <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"التقاط الصور أو الفيديو"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"اختيار صور من هذا الجهاز"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"تسجيل الصوت"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"اختيار صورة"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"تم تحديد الوسائط."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"تم إلغاء تحديد الوسائط."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"تم تحديد <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"صورة <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"صورة"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"تسجيل الصوت"</string>
-    <string name="action_share" msgid="2143483844803153871">"المشاركة"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"للتو"</string>
-    <string name="posted_now" msgid="867560789350406701">"الآن"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="zero"><xliff:g id="COUNT_1">%d</xliff:g> دقيقة</item>
-      <item quantity="two">دقيقتان (<xliff:g id="COUNT_1">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> دقائق</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> دقيقة</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> من الدقائق</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> دقيقة</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="zero"><xliff:g id="COUNT_1">%d</xliff:g> ساعة</item>
-      <item quantity="two">ساعتان (<xliff:g id="COUNT_1">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> ساعات</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> ساعة</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> من الساعات</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ساعة</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="zero"><xliff:g id="COUNT_1">%d</xliff:g> يوم</item>
-      <item quantity="two">يومان (<xliff:g id="COUNT_1">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> أيام</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> يومًا</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> من الأيام</item>
-      <item quantity="one">يوم واحد (<xliff:g id="COUNT_0">%d</xliff:g>)</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> أسبوع</item>
-      <item quantity="two">أسبوعان (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> أسابيع</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> أسبوعًا</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> من الأسابيع</item>
-      <item quantity="one">أسبوع</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> شهر</item>
-      <item quantity="two">شهران (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> أشهر</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> شهرًا</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> من الأشهر</item>
-      <item quantity="one">شهر</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> عام</item>
-      <item quantity="two">عامان (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> أعوام</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> عامًا</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> من الأعوام</item>
-      <item quantity="one">عام</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"رسالة من الفئة 0"</string>
-    <string name="save" msgid="5081141452059463572">"حفظ"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"مساحة الجهاز منخفضة. سيحذف تطبيق المراسلة الرسائل القديمة تلقائيًا لتحرير مساحة."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"مساحة التخزين منخفضة"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"ربما لا يرسل تطبيق المراسلة رسائل أو يتلقاها ما لم تتوفر المزيد من المساحة على جهازك."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"‏سعة تخزين الرسائل القصيرة SMS منخفضة. ربما تحتاج إلى حذف بعض الرسائل."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"تأكيد رقم الهاتف"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"ستضمن هذه الخطوة - التي يتم تنفيذها مرة واحدة فقط - تسليم تطبيق المراسلة لرسائلك الجماعية بشكل صحيح."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"رقم الهاتف"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"حذف جميع الرسائل التي تتضمن وسائط"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"حذف الرسائل الأقدم من <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"حذف الرسائل الأقدم من <xliff:g id="DURATION">%s</xliff:g> تلقائيًا"</string>
-    <string name="ignore" msgid="7063392681130898793">"تجاهل"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"هل تريد حذف كل الرسائل التي تتضمن ملفات وسائط؟"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"هل تريد حذف الرسائل الأقدم من <xliff:g id="DURATION">%s</xliff:g>؟"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"هل تريد حذف الرسائل الأقدم من <xliff:g id="DURATION">%s</xliff:g> وتشغيل الحذف التلقائي؟"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"قال <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"أنت قلت"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"رسالة من <xliff:g id="SENDER">%s</xliff:g>:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"لقد أرسلت رسالة"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"جارٍ الإرسال..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"لم يتم إرسال الرسالة. المس لإعادة المحاولة."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"لم يتم إرسال الرسالة. جارٍ إعادة المحاولة…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"إعادة إرسال أو حذف"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"الرجاء إجراء مكالمة صوتية لخدمات الطوارئ. يتعذر توصيل رسالتك النصية في الوقت الحالي."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"أخفق الإرسال"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"هناك رسالة وسائط متعددة جديدة للتنزيل"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"رسالة وسائط متعددة جديدة"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"تعذر التنزيل"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"المس لإعادة المحاولة"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"المس للتنزيل"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"تنزيل أو حذف"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"جارٍ التنزيل…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"انتهت صلاحية الرسالة أو ليست متاحة"</string>
-    <string name="mms_info" msgid="3402311750134118165">"الحجم: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>، تاريخ انتهاء الصلاحية: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"يتعذر الإرسال. المستلم غير صالح."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"لم يتم تنشيط الخدمة على الشبكة"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"تعذر الإرسال بسبب حدوث مشكلة في الشبكة"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"انتهت صلاحية الرسالة أو ليست متاحة"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(بلا موضوع)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"مرسل غير معروف"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"تم التسليم"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"تعذر تنزيل الرسالة <xliff:g id="SUBJECT">%1$s</xliff:g> من <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"تعذر إتمام تشغيل قاعدة البيانات نظرًا لانخفاض الذاكرة"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"لم يتم إرسال الرسالة"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"لم يتم إرسال بعض الرسائل في تطبيق المراسلة"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="zero"><xliff:g id="MESSAGES_1">%d</xliff:g> من الرسائل في <xliff:g id="CONVERSATIONS">%d</xliff:g> محادثة</item>
-      <item quantity="two"><xliff:g id="MESSAGES_1">%d</xliff:g> من الرسائل في محادثتين (<xliff:g id="CONVERSATIONS">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> من الرسائل في <xliff:g id="CONVERSATIONS">%d</xliff:g> محادثات</item>
-      <item quantity="many"><xliff:g id="MESSAGES_1">%d</xliff:g> من الرسائل في <xliff:g id="CONVERSATIONS">%d</xliff:g> محادثة</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> من الرسائل في <xliff:g id="CONVERSATIONS">%d</xliff:g> من المحادثات</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> من الرسائل في محادثة واحدة</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"لم يتم تنزيل الرسالة"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"لم يتم تنزيل بعض الرسائل في تطبيق المراسلة"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="zero"><xliff:g id="MESSAGES_1">%d</xliff:g> من الرسائل في <xliff:g id="CONVERSATIONS">%d</xliff:g> محادثة</item>
-      <item quantity="two"><xliff:g id="MESSAGES_1">%d</xliff:g> من الرسائل في محادثتين (<xliff:g id="CONVERSATIONS">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> من الرسائل في <xliff:g id="CONVERSATIONS">%d</xliff:g> محادثات</item>
-      <item quantity="many"><xliff:g id="MESSAGES_1">%d</xliff:g> من الرسائل في <xliff:g id="CONVERSATIONS">%d</xliff:g> محادثة</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> من الرسائل في <xliff:g id="CONVERSATIONS">%d</xliff:g> من المحادثات</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> من الرسائل في محادثة واحدة</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"لم يتم إرسال رسالة إلى <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"الرجاء إجراء مكالمة صوتية لخدمات الطوارئ. يتعذر إرسال رسالتك النصية إلى <xliff:g id="NUMBER">%1$s</xliff:g> في الوقت الحالي."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="zero">ليست هناك أية رسالة جديدة (<xliff:g id="MESSAGES">%d</xliff:g>)</item>
-      <item quantity="two">رسالتان (<xliff:g id="MESSAGES">%d</xliff:g>) جديدتان</item>
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> رسائل جديدة</item>
-      <item quantity="many"><xliff:g id="MESSAGES">%d</xliff:g> رسالة جديدة</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> من الرسائل الجديدة</item>
-      <item quantity="one">رسالة جديدة</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"بدء"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"لا تتوفر كاميرا"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"لا تتوفر كاميرا"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"ميزة التقاط الفيديو غير متاحة"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"يتعذر حفظ ملف الوسائط"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"لا يمكن التقاط الصورة"</string>
-    <string name="back" msgid="1477626055115561645">"رجوع"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"المؤرشفة"</string>
-    <string name="action_delete" msgid="4076795795307486019">"حذف"</string>
-    <string name="action_archive" msgid="5437034800324083170">"أرشيف"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"إزالة من الأرشيف"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"إيقاف الإشعارات"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"تشغيل الإشعارات"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"إضافة جهة اتصال"</string>
-    <string name="action_download" msgid="7786338136368564146">"تنزيل"</string>
-    <string name="action_send" msgid="377635240181672039">"إرسال"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"حذف"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"هل تريد حذف هذه الرسالة؟"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"لا يمكن التراجع عن هذا الإجراء."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"حذف"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="zero">ليست هناك محادثات.</item>
-      <item quantity="two">هل تريد حذف هاتين المحادثتين؟</item>
-      <item quantity="few">هل تريد حذف هذه المحادثات؟</item>
-      <item quantity="many">هل تريد حذف هذه المحادثات؟</item>
-      <item quantity="other">هل تريد حذف هذه المحادثات؟</item>
-      <item quantity="one">هل تريد حذف هذه الدردشة؟</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"حذف"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"إلغاء"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"إلى"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"تحديد صور متعددة"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"تأكيد الاختيار"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"يتعذر تسجيل الصوت. أعد المحاولة."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"يتعذر تشغيل الصوت. أعد المحاولة."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"تعذر حفظ الصوت. أعد المحاولة."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"اللمس مع الاستمرار"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">"، "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"الصورة"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"مقطع صوتي"</string>
-    <string name="notification_video" msgid="4331423498662606204">"الفيديو"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"بطاقة جهة الاتصال"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"تنزيل"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"‏الرد عبر رسالة قصيرة SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"الرد عبر رسالة وسائط متعددة"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"الرد"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="zero">ليس هناك أي مشارك (<xliff:g id="COUNT_1">%d</xliff:g>)</item>
-      <item quantity="two">مشاركان (<xliff:g id="COUNT_1">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> مشاركين</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> مشاركًا</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> من المشاركين</item>
-      <item quantity="one">مشارك واحد (<xliff:g id="COUNT_0">%d</xliff:g>)</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"أنا"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"تم حظر جهة الاتصال وأرشفتها"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"تم إلغاء حظر جهة الاتصال وإلغاء أرشفتها"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"تم وضع <xliff:g id="COUNT">%d</xliff:g> في الأرشيف"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"تمت إزالة <xliff:g id="COUNT">%d</xliff:g> من الأرشيف"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"تم تعطيل الإشعارات"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"تم تشغيل الإشعارات"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"اكتمل الإعداد. المس \"إرسال\" مرة أخرى."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"‏تم تعيين تطبيق المراسلة كتطبيق الرسائل القصيرة SMS الافتراضي بنجاح."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="zero">ليست هناك مرفقات</item>
-      <item quantity="two">تجاهل المرفقين</item>
-      <item quantity="few">تجاهل المرفقات</item>
-      <item quantity="many">تجاهل المرفقات</item>
-      <item quantity="other">تجاهل المرفقات</item>
-      <item quantity="one">تجاهل المرفق</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"مرفق صوتي"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"تشغيل المرفق الصوتي"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"إيقاف مؤقت"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"رسالة من <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"رسالة تعذر إرسالها من <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"رسالة من <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"رسالة لم يتم إرسالها إلى <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"جارٍ إرسال رسالة إلى <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"رسالة تعذر إرسالها إلى <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"رسالة إلى <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"رسالة تعذر إرسالها من <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"رسالة من <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"رسالة لم يتم إرسالها إلى <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"جارٍ إرسال رسالة إلى <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"رسالة تعذر إرسالها إلى <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"رسالة إلى <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. الوقت: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"رسالة تعذر إرسالها. المس لإعادة المحاولة."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"محادثة مع <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"حذف الموضوع"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"التقاط فيديو"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"التقاط صورة ثابتة"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"التقاط صورة"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"بدء تسجيل الفيديو"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"التبديل إلى الكاميرا بملء الشاشة"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"التبديل بين الكاميرا الأمامية والخلفية"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"وقف التسجيل وإرفاق مقطع الفيديو"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"إيقاف تسجيل الفيديو"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"صور المراسلة"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="zero">لم يتم حفظ أية صورة (<xliff:g id="QUANTITY_2">%d</xliff:g>) في الألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="two">تم حفظ صورتين (<xliff:g id="QUANTITY_2">%d</xliff:g>) في الألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few">تم حفظ <xliff:g id="QUANTITY_2">%d</xliff:g> صور في الألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many">تم حفظ <xliff:g id="QUANTITY_2">%d</xliff:g> صورة في الألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other">تم حفظ <xliff:g id="QUANTITY_2">%d</xliff:g> من الصور في الألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">تم حفظ صورة واحدة (<xliff:g id="QUANTITY_0">%d</xliff:g>) في الألبوم \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="zero">لم يتم حفظ أي مقطع فيديو (<xliff:g id="QUANTITY_2">%d</xliff:g>) في الألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="two">تم حفظ مقطعي فيديو (<xliff:g id="QUANTITY_2">%d</xliff:g>) في الألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few">تم حفظ <xliff:g id="QUANTITY_2">%d</xliff:g> مقاطع فيديو في الألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many">تم حفظ <xliff:g id="QUANTITY_2">%d</xliff:g> مقطع فيديو في الألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other">تم حفظ <xliff:g id="QUANTITY_2">%d</xliff:g> من مقاطع الفيديو في الألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">تم حفظ مقطع فيديو واحد (<xliff:g id="QUANTITY_0">%d</xliff:g>) في الألبوم \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="zero">لم يتم حفظ أي مرفق (<xliff:g id="QUANTITY_2">%d</xliff:g>) في ألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="two">تم حفظ مرفقين (<xliff:g id="QUANTITY_2">%d</xliff:g>) في ألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few">تم حفظ <xliff:g id="QUANTITY_2">%d</xliff:g> مرفقات في ألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many">تم حفظ <xliff:g id="QUANTITY_2">%d</xliff:g> مرفقًا في ألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other">تم حفظ <xliff:g id="QUANTITY_2">%d</xliff:g> من المرفقات في ألبوم \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">تم حفظ مرفق <xliff:g id="QUANTITY_0">%d</xliff:g> في ألبوم \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="zero">لم يتم حفظ أي مرفق (<xliff:g id="QUANTITY_1">%d</xliff:g>) في \"التنزيلات\"</item>
-      <item quantity="two">تم حفظ مرفقين (<xliff:g id="QUANTITY_1">%d</xliff:g>) في \"التنزيلات\"</item>
-      <item quantity="few">تم حفظ <xliff:g id="QUANTITY_1">%d</xliff:g> مرفقات في \"التنزيلات\"</item>
-      <item quantity="many">تم حفظ <xliff:g id="QUANTITY_1">%d</xliff:g> مرفقًا في \"التنزيلات\"</item>
-      <item quantity="other">تم حفظ <xliff:g id="QUANTITY_1">%d</xliff:g> من المرفقات في \"التنزيلات\"</item>
-      <item quantity="one">تم حفظ مرفق واحد (<xliff:g id="QUANTITY_0">%d</xliff:g>) في \"التنزيلات\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="zero">لم يتم حفظ أية مرفقات (<xliff:g id="QUANTITY_1">%d</xliff:g>)</item>
-      <item quantity="two">تم حفظ مرفقين (<xliff:g id="QUANTITY_1">%d</xliff:g>)</item>
-      <item quantity="few">تم حفظ <xliff:g id="QUANTITY_1">%d</xliff:g> مرفقات</item>
-      <item quantity="many">تم حفظ <xliff:g id="QUANTITY_1">%d</xliff:g> مرفقًا</item>
-      <item quantity="other">تم حفظ <xliff:g id="QUANTITY_1">%d</xliff:g> من المرفقات</item>
-      <item quantity="one">تم حفظ مرفق واحد <xliff:g id="QUANTITY_0">%d</xliff:g></item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="zero">لم يتعذر حفظ أية مرفقات (<xliff:g id="QUANTITY_1">%d</xliff:g>)</item>
-      <item quantity="two">تعذر حفظ مرفقين (<xliff:g id="QUANTITY_1">%d</xliff:g>)</item>
-      <item quantity="few">تعذر حفظ <xliff:g id="QUANTITY_1">%d</xliff:g> مرفقات</item>
-      <item quantity="many">تعذر حفظ <xliff:g id="QUANTITY_1">%d</xliff:g> مرفقًا</item>
-      <item quantity="other">تعذر حفظ <xliff:g id="QUANTITY_1">%d</xliff:g> من المرفقات</item>
-      <item quantity="one">تعذر حفظ مرفق واحد (<xliff:g id="QUANTITY_0">%d</xliff:g>)</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"تم حفظ مرفق رسالة الوسائط المتعددة"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"الإعدادات"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"المؤرشفة"</string>
-    <string name="action_close" msgid="1840519376200478419">"إغلاق"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"رسالة وسائط متعددة"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"إعدادات متقدمة"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"تصحيح الأخطاء"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"الإشعارات"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"الصوت"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"صامت"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"اهتزاز"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"محظور"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"‏تقارير تسليم الرسائل القصيرة SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"‏طلب تقرير تسليم لكل رسالة قصيرة SMS ترسلها"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"استرداد تلقائي"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"استرداد رسائل الوسائط المتعددة تلقائيًا"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"استرداد تلقائي للتجوال"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"استرداد رسائل الوسائط المتعددة عند التجوال تلقائيًا"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"المراسلة الجماعية"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"يمكنك استخدام رسائل الوسائط المتعددة لإرسال رسالة واحدة عندما يكون هناك عدة مستلمين"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"‏تطبيق الرسائل القصيرة SMS الافتراضي"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"‏تطبيق الرسائل القصيرة SMS الافتراضي"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"رقم هاتفك"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"غير معروف"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"أصوات الرسائل الصادرة"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"‏تفريغ الرسائل القصيرة SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"‏تفريغ البيانات الأولية للرسائل القصيرة SMS في ملف تخزين خارجي"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"تفريغ رسائل الوسائط المتعددة"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"تفريغ البيانات الأولية لرسائل الوسائط المتعددة في ملف تخزين خارجي"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"تنبيهات لاسلكية"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"خيارات الرسالة"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"نسخ النص"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"عرض التفاصيل"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"حذف"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"إعادة توجيه"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"تفاصيل الرسالة"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"النوع: "</string>
-    <string name="text_message" msgid="7415419755252205721">"رسالة نصية"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"رسالة وسائط متعددة"</string>
-    <string name="from_label" msgid="1947831848146564875">"من: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"إلى: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"تاريخ الإرسال: "</string>
-    <string name="received_label" msgid="4442494712757995203">"تاريخ التلقي: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"الموضوع: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"الحجم: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"الأولوية: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"عالية"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"عادية"</string>
-    <string name="priority_low" msgid="7398724779026801851">"منخفضة"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"عنوان المرسل المخفي"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"يتعذر إرسال رسالة أثناء تحميل المرفقات."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"يتعذر تحميل المرفق. أعد المحاولة."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"الشبكة ليست جاهزة بعد. يمكنك إعادة المحاولة."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"حذف النص"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"التبديل بين إدخال النص والأرقام"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"إضافة مزيد من المشاركين"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"تأكيد المشاركين"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"بدء محادثة جديدة"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"تحديد هذا العنصر"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"تشغيل الفيديو"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"الأشخاص والخيارات"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"تصحيح الأخطاء"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"الأشخاص والخيارات"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"عام"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"الأشخاص في هذه المحادثة"</string>
-    <string name="action_call" msgid="6596167921517350362">"إجراء مكالمة"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"إرسال رسالة"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"‏إرسال رسالة&lt;br/&gt;&lt;small&gt;من <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="zero">ليست هناك صور لإرسالها</item>
-      <item quantity="two">إرسال الصورتين</item>
-      <item quantity="few">إرسال الصور</item>
-      <item quantity="many">إرسال الصور</item>
-      <item quantity="other">إرسال الصور</item>
-      <item quantity="one">إرسال الصورة</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="zero">ليست هناك ملفات صوت لإرسالها</item>
-      <item quantity="two">إرسال ملفيّ الصوت</item>
-      <item quantity="few">إرسال ملفات الصوت</item>
-      <item quantity="many">إرسال ملفات الصوت</item>
-      <item quantity="other">إرسال ملفات الصوت</item>
-      <item quantity="one">إرسال ملف الصوت</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="zero">ليست هناك ملفات فيديو لإرسالها</item>
-      <item quantity="two">إرسال ملفي الفيديو</item>
-      <item quantity="few">إرسال ملفات الفيديو</item>
-      <item quantity="many">إرسال ملفات الفيديو</item>
-      <item quantity="other">إرسال ملفات الفيديو</item>
-      <item quantity="one">إرسال ملف الفيديو</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="zero">ليست هناك بطاقات جهة اتصال لإرسالها</item>
-      <item quantity="two">إرسال بطاقتي جهة الاتصال</item>
-      <item quantity="few">إرسال بطاقات جهة الاتصال</item>
-      <item quantity="many">إرسال بطاقات جهة الاتصال</item>
-      <item quantity="other">إرسال بطاقات جهة الاتصال</item>
-      <item quantity="one">إرسال بطاقة جهة الاتصال</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="zero">ليست هناك مرفقات لإرسالها</item>
-      <item quantity="two">إرسال المرفقين</item>
-      <item quantity="few">إرسال المرفقات</item>
-      <item quantity="many">إرسال المرفقات</item>
-      <item quantity="other">إرسال المرفقات</item>
-      <item quantity="one">إرسال المرفق</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="zero">لم يتم تحديد أي مرفقات</item>
-      <item quantity="two">مرفقان (<xliff:g id="ATTACHMENT_COUNT">%d</xliff:g>) جاهزان للإرسال</item>
-      <item quantity="few"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> مرفقات جاهزة للإرسال</item>
-      <item quantity="many"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> مرفقًا جاهزًا للإرسال</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> من المرفقات الجاهزة للإرسال</item>
-      <item quantity="one">مرفق واحد جاهز للإرسال</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"إرسال تعليقات"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"‏عرض في متجر Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"معلومات الإصدار"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"‏الإصدار %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"تراخيص برامج مفتوحة مصدر"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"الإشعارات"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"تم بلوغ حد المرفقات"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"أخفق تحميل المرفق."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"إضافة إلى جهات الاتصال؟"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"إضافة جهة اتصال"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"الموضوع"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"الموضوع: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"جارٍ تحميل بطاقة جهة الاتصال"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"تعذر تحميل بطاقة جهة الاتصال"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"عرض بطاقة جهة الاتصال"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="zero">ليست هناك أية جهة اتصال (<xliff:g id="COUNT_1">%d</xliff:g>)</item>
-      <item quantity="two">جهتا اتصال (<xliff:g id="COUNT_1">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> جهات اتصال</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> جهة اتصال</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> من جهات الاتصال</item>
-      <item quantity="one">جهة اتصال واحدة (<xliff:g id="COUNT_0">%d</xliff:g>)</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"بطاقات جهات الاتصال"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"تاريخ الميلاد"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"ملاحظات"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"إعادة توجيه الرسالة"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"رد"</string>
-    <string name="plus_one" msgid="9010288417554932581">"1+"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"‏تم تعطيل الرسائل القصيرة SMS"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"‏للإرسال، عيّن تطبيق المراسلة كتطبيق الرسائل القصيرة SMS الافتراضي"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"‏يجب تعيين تطبيق المراسلة كتطبيق الرسائل القصيرة SMS الافتراضي"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"تغيير"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"‏لاستلام رسائل، عيّن تطبيق المراسلة كتطبيق الرسائل القصيرة SMS الافتراضي"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"‏لم يتم تحديد شريحة SIM المفضلة لإرسال رسائل قصيرة SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"لم يتم السماح لهذا التطبيق بواسطة مالك الجهاز."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"موافق"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"هناك عدد كبير جدًا من المشاركين في محادثة"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="zero">ليست هناك جهات اتصال غير صالحة</item>
-      <item quantity="two">جهتا اتصال غير صالحتين</item>
-      <item quantity="few">جهات اتصال غير صالحة</item>
-      <item quantity="many">جهات اتصال غير صالحة</item>
-      <item quantity="other">جهات اتصال غير صالحة</item>
-      <item quantity="one">جهة اتصال غير صالحة</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"يتعذر تحميل صورة الكاميرا"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"أنت: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"مسودة"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"بعد بدء دردشة جديدة، ستظهر مدرجة هنا"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"الإشعارات المؤرشفة تظهر هنا"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"جارٍ تحميل المحادثات..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"صورة"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"مقطع صوتي"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"فيديو"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"بطاقة جهة الاتصال"</string>
-    <string name="mms_text" msgid="1528791558806015806">"رسالة وسائط متعددة"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"تراجع"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"إعادة المحاولة"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"أدخل اسم جهة اتصال أو رقم هاتف لبدء رسالة جديدة"</string>
-    <string name="action_block" msgid="9032076625645190136">"حظر"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"حظر <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"إلغاء حظر <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"هل تريد حظر <xliff:g id="DESTINATION">%s</xliff:g>؟"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"ستستمر في استلام الرسائل من هذا الرقم ولكن لن يتم إرسال إشعارات إليك مرة أخرى. ستتم أرشفة هذه المحادثة."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"جهات الاتصال المحظورة"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"إلغاء الحظر"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"جهات الاتصال المحظورة"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"اختيار صورة من مكتبة المستندات"</string>
-    <string name="sending_message" msgid="6363584950085384929">"جارٍ إرسال الرسالة"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"تم إرسال الرسالة"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"تم إيقاف اتصال بيانات الجوّال. تحقق من إعداداتك."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"يتعذر إرسال رسائل في وضع الطائرة"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"تعذر إرسال الرسالة"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"تم تنزيل الرسالة"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"تم إيقاف اتصال بيانات الجوّال. تحقق من إعداداتك."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"يتعذر تنزيل الرسائل في وضع الطائرة"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"تعذر تنزيل الرسالة"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"صفر"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"واحد"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"اثنان"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"ثلاثة"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"أربعة"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"خمسة"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ستة"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"سبعة"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"ثمانية"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"تسعة"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"يتعذر إرسال الرسالة مع <xliff:g id="CARRIERNAME">%1$s</xliff:g>، الخطأ <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"يتعذر إرسال الرسالة مع مشغِّل شبكة جوّال غير معروف، الخطأ <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"إعادة التوجيه: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"لم يتم إرسال الرسالة: لم يتم تنشيط الخدمة على الشبكة"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"لم يتم إرسال الرسالة: عنوان الوجهة غير صالح"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"لم يتم إرسال الرسالة: رسالة غير صالحة"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"لم يتم إرسال الرسالة: محتوى غير متوافق"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"لم يتم إرسال الرسالة: رسالة غير متوافقة"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"لم يتم إرسال الرسالة: الحجم كبير جدًا"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"رسالة جديدة"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"عرض"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"صورة"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"تعذر العثور على تطبيق مناسب"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"إزالة المستلم"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"رسالة جديدة"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"إلغاء"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"تعديل نقطة الدخول"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"لم يتم التعيين"</string>
-    <string name="apn_name" msgid="1572691851070894985">"الاسم"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"الخادم الوكيل لرسائل الوسائط المتعددة"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"منفذ رسائل الوسائط المتعددة"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"‏نوع APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"‏حذف APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"‏APN جديد"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"حفظ"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"تجاهل"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"لا يمكن أن يكون حقل الاسم فارغًا."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"‏لا يمكن أن يكون APN فارغًا."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"‏يجب أن يكون حقل MCC من ثلاثة أرقام."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"‏يجب أن يتكون حقل MNC من رقمين أو ثلاثة أرقام."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"‏جارٍ استعادة إعدادات APN الافتراضية."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"إعادة تعيين إلى الإعداد الافتراضي"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"‏اكتملت إعادة تعيين إعدادات APN الافتراضية."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"بلا عنوان"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"أسماء نقاط الدخول"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"‏أسماء نقاط الدخول (APN)"</string>
-    <string name="menu_new" msgid="8286285392706532511">"‏APN جديد"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"إعدادات اسم نقطة الدخول ليست متوفرة لهذا المستخدم"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"هل تريد النسخ في الحافظة؟"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"نسخ"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"إلى <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"عام"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"إعدادات متقدمة"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"الإعدادات العامة"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"إعدادات متقدمة"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"‏شريحة SIM من \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"إرسال رسالة قصيرة واحدة إلى جميع المستلمين. ولن تصل الردود إلا إليك"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"إرسال رسالة وسائط متعددة إلى جميع المستلمين"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"رقم غير معروف"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"رسالة جديدة"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"رسالة جديدة."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"‏محدد SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"‏تم اختيار <xliff:g id="SIM_0">%1$s</xliff:g>، أداة اختيار شريحة SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"تعديل الموضوع"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"‏تحديد SIM أو تعديل الموضوع"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"المس مع الاستمرار لتسجيل الصوت"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"بدء محادثة جديدة"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"المراسلة"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"قائمة المراسلة"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"المراسلة"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"رسالة جديدة"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"قائمة المحادثات"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"جارٍ تحميل المحادثات."</string>
-    <string name="loading_messages" msgid="3894765818932489665">"جارٍ تحميل الرسائل"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"عرض المزيد من المحادثات"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"عرض المزيد من الرسائل"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"تم حذف المحادثة"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"تم حذف المحادثة. المس لعرض محادثة مختلفة في تطبيق المراسلة"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"تم الحظر"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"تم إلغاء الحظر"</string>
-    <string name="db_full" msgid="8459265782521418031">"مساحة التخزين منخفضة. ربما يتم فقد بعض البيانات."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"تحديد المرفقات"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"تأكيد التحديد"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"تم تحديد <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"يُرجى إزالة مرفق أو أكثر وإعادة المحاولة."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"يمكنك محاولة إرسال الرسالة، ولكن ربما لا يتم تسليمها ما لم تتم إزالة مرفق أو أكثر من هذه الرسالة."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"لا يمكنك إرسال أكثر من مقطع فيديو واحد لكل رسالة. يُرجى إزالة مقاطع الفيديو الإضافية وإعادة المحاولة."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"أخفق تطبيق المراسلة في تحميل المرفق."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"إرسال على أية حال"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"لا يمكن بدء المحادثة"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"تم اختيار <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-az/arrays.xml b/res/values-az/arrays.xml
deleted file mode 100644
index f4b43e4..0000000
--- a/res/values-az/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"mövzu yoxdur"</item>
-    <item msgid="272485471009191934">"mövzusuz"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Hə"</item>
-    <item msgid="6049132459802288033">"Yox"</item>
-    <item msgid="3084376867445867895">"Ok"</item>
-    <item msgid="3155097332660174689">"Heh"</item>
-    <item msgid="2611328818571146775">"Çox sağ olun"</item>
-    <item msgid="4881335087096496747">"Razıyam"</item>
-    <item msgid="2422296858597420738">"Nizza"</item>
-    <item msgid="4805581752819452687">"Yolumda"</item>
-    <item msgid="4746700499431366214">"Ok, Sizinlə sonra əlaqə saxlayacam"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
deleted file mode 100644
index 56b4274..0000000
--- a/res/values-az/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Mesajlaşma"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Mesajlaşma"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Söhbəti seç"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Ayarlar"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Mesaj göndər"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Qoşma əlavə edin"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Yardım"</string>
-    <string name="welcome" msgid="2857560951820802321">"Xoş gəlmisiniz"</string>
-    <string name="skip" msgid="7238879696319945853">"Ötürün"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Sonrakı &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Növbəti"</string>
-    <string name="exit" msgid="1905187380359981199">"Çıxış"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"&amp;gt ayarlar;"</string>
-    <string name="settings" msgid="1045695083932447399">"Ayarlar"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Mesajlaşma SMS, Telefon və Kontaktlara icazə istəyir."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"İcazələri Ayarlar &gt; Tətbiqlər &gt; Mesajlaşma &gt; İcazələr bölməsindən dəyişə bilərsiniz."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"İcazələri Ayarlar, Tətbiqlər, Mesajlaşma, İcazələr bölməsindən dəyişə bilərsiniz."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Tez-tez olanlar"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Bütün kontaktlar"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> ünvanına göndərin"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Şəkilləri və ya videonu çəkin"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Bu cihazdan şəkillər seçin"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Səs yazın"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Foto seçin"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Media seçildi."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Media seçilmədi."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> seçilib"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"təsvir <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"təsvir"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Səs yazın"</string>
-    <string name="action_share" msgid="2143483844803153871">"Paylaş"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"İndicə"</string>
-    <string name="posted_now" msgid="867560789350406701">"İndi"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dəq</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> dəq</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> saat</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> saat</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> gün</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> gün</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> həftə</item>
-      <item quantity="one">bir həftə</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ay</item>
-      <item quantity="one">bir ay</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> il</item>
-      <item quantity="one">bir il</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Klass 0 mesaj"</string>
-    <string name="save" msgid="5081141452059463572">"Yadda saxlayın"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Cihazda boş yer azdır. Yer boşaltmaq üçün Mesajlaşma köhnə mesajları avtomatik siləcək."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Yaddaş ehtiyatı qurtarır"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Mesajlaşma cihazınızda kifayət qədər yaddaş olmayana kimi mesaj göndərə və qəbul etməyə bilər."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS yaddaşı azdır. Mesajları silmə ehtiyacı hiss edə bilərsiniz."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Telefon nömrənizi təsdiq edin"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Bu bir addımlı mərhələ Mesajlaşmanın qrup mesajlarınızı düzgün şəkildə çatdıracağını təmin edəcək."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefon nömrəsi"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Media ilə olan bütün mesajları silin"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> müddətindən əvvəl köhnə mesajları silin"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> müddətindən köhnə mesajlar avtomatik silinsin"</string>
-    <string name="ignore" msgid="7063392681130898793">"İqnor edin"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Bütün mesajlar media ilə birlikdə silinsin?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> müddətindən köhnə mesajlar silinsin?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> müddətindən köhnə mesajlar avtomatik silinsin və avtomatik silinmə aktiv olsun?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> bildirib"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Bildirdiniz"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> tərəfindən mesaj:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Mesajı göndərdiniz"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Göndərilir..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Göndərilmədi. Yenidən cəhd etmək üçün toxunun."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Göndərilmədi. Yenidən cəhd edilir..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Resend or delete"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Lütfən, təcili yardım xidmətlərinə səsli zəng edin. Mətn mesajınız bu vaxt çatdırıla bilməz."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Alınmadı"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Yükləmək üçün yeni MMS mesajı"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Yeni MMS mesajı"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Yüklənmədi"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Yenidən cəhd etmək üçün toxun"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Yükləmək üçün toxun"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Yüklə və ya sil"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Yüklənir..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Mesajın vaxtı bitib və ya mövcud deyil"</string>
-    <string name="mms_info" msgid="3402311750134118165">"size: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, expiration: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Göndərə bilmir. Alıcı etibarsızdır."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Xidmət şəbəkədə aktiv deyil"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Şəbəkə probleminə görə göndərmək olmadı"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Mesajın vaxtı keçib və ya əlçatmazdır"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Mövzusuz)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Naməlum göndərən"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Çatdırılıb"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="SUBJECT">%1$s</xliff:g> mesajı <xliff:g id="FROM">%2$s</xliff:g> bölməsindən endirilə bilmir."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Az yaddaş ilə əlaqədar olaraq verilənlər bazası əməliyyatı tamamlana bilmədi"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Mesaj göndərilmədi"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Bəzi mesajlar Mesajlaşmada göndərilməyib"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> söhbətdə <xliff:g id="MESSAGES_1">%d</xliff:g> mesaj</item>
-      <item quantity="one">bir söhbətdə <xliff:g id="MESSAGES_0">%d</xliff:g> mesaj</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Mesaj endirilmədi"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Bəzi mesajlar Mesajlaşmada endirilməyib"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> söhbətdə <xliff:g id="MESSAGES_1">%d</xliff:g> mesaj</item>
-      <item quantity="one">bir söhbətdə <xliff:g id="MESSAGES_0">%d</xliff:g> mesaj</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> nömrəsinə mesaj göndərilmədi"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Lütfən, təcili yardım xidmətlərinə səsli zəng edin. Mətn mesajınız <xliff:g id="NUMBER">%1$s</xliff:g> nömrəsinə bu vaxt çatdırıla bilməz."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> yeni mesaj</item>
-      <item quantity="one">Yeni mesaj</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Başla"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera əlçatmazdır"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera əlçatmazdır"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Video çəkiliş əlçatmazdır"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Medianı yadda saxlamaq olmur"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Şəkil çəkmək mümkün deyil"</string>
-    <string name="back" msgid="1477626055115561645">"Geri"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arxivləşmiş"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Sil"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arxiv"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Arxivdən çıxarın"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Bildirişləri deaktiv edin"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Bildirişləri aktivləşdirin"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Kontakt əlavə edin"</string>
-    <string name="action_download" msgid="7786338136368564146">"Endirin"</string>
-    <string name="action_send" msgid="377635240181672039">"Göndər"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Sil"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Bu mesaj silinsin?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Bu əməliyyat geri qaytarıla bilməz."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Sil"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Bu söhbətlər silinsin?</item>
-      <item quantity="one">Bu söhbət silinsin?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Sil"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Ləğv et"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Kimə"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Çox şəkil seçin"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Seçimi təsdiq edin"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Audionu qeydə almaq olmur. Yenidən cəhd edin."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Audionu oxutmaq olmur. Yenidən cəhd edin."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Audionu saxlamaq olmadı. Yenidən cəhd edin."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Toxunun və saxlayın"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Şəkil"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audio klip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Videolar"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kontakt kartı"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Endirin"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS ilə cavab verin"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS vasitəsilə cavab verin"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Cavabla"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> iştirakçı</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> iştirakçı</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Mən"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakt bloklandı və arxivləndi"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontakt blokdan və arxivdən çıxarıldı"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> arxivlənib"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> arxivdən çıxarıldı"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Bildirişlər deaktiv edildi"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Bildirişlər aktiv edildi"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Hamısı hazırdır. Göndərmək üçün toxunun."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Mesajlaşma uğurla defolt SMS tətbiqi seçildi."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Qoşmaları ləğv edin</item>
-      <item quantity="one">Qoşmanı ləğv edin</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Audio qoşma"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Audio qoşmanı ifa et"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pauza"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> adlı göndərəndən mesaj: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> adlı göndərənin mesajı getmədi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> adlı göndərən tərəfindən mesaj: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> adlı əlaqəyə göndərilməmiş mesaj: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> adlı əlaqəyə mesaj göndərilir: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> adlı əlaqəyə mesaj göndərilmədi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> adlı əlaqəyə mesaj: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> adlı göndərənin mesajı getmədi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> adlı göndərən tərəfindən mesaj: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> istifadəçisinə göndərilməmiş mesaj: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> istifadəçisinə mesaj göndərilir: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> istifadəçisinə mesaj göndərilmədi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> istifadəçisinə mesaj: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaxt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Mesaj göndərilmədi. Təkrar cəhd etmək üçün toxunun."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> ilə söhbət"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Mövzunu silin"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Video çəkin"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Durğun şəkli çəkin"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Şəkil çəkin"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Video çəkilişə başlayın"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Tam ekranlı kameraya keçin"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Ön və arxa kameralar arasında seçim edin"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Çəkilişi dayandırın və videonu qoşun"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Video qeydi dayandırın"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Foto mesajlaşma"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> foto \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" albomunda yadda saxlanıldı</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> foto \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" albomunda yadda saxlanıldı</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> video \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" albomunda yadda saxlanıldı</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" albomunda yadda saxlanıldı</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> qoşma \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" albomunda yadda saxlanıldı</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> qoşma \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" albomunda yadda saxlanıldı</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> qoşma \"Endirilənlər\" qovluğunda yadda saxlanıldı</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> qoşma \"Endirilənlər\" qovluğunda yadda saxlanıldı</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> qoşma yadda saxlanıldı</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> qoşma yadda saxlanıldı</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> qoşma yadda saxlanıla bilmədi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> qoşma yadda saxlanıla bilmədi</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS qoşması yadda saxlandı"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Ayarlar"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arxivləşmiş"</string>
-    <string name="action_close" msgid="1840519376200478419">"Bağla"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Qabaqcıl"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Sazlama"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Bildirişlər"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Səs"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Səssiz"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Titrət"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloklanmış"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS çatdırma xətaları"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Hər göndərdiyiniz SMS üçün çatdırılma raportu tələb edin"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Avtomatik əldə edin"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS mesajları avtomatik əldə edin"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Rouminq zamanı avtomatik əldə edin"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Rominq zamanı MMS-i avtomatim bərpa edin"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Qrup mesajlaşması"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Bir neçə alıcının olduğu halda bir mesaj göndərmək üçün MMS istifadə edin"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Defolt SMS proqramı"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Defolt SMS proqramı"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Telefon nömrəniz"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Naməlum"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Gedən mesaj səsləri"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Damp SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Damp xarici saxlanma faylına emal edilməmiş SMS datası qəbul etdi"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Damp MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Damp xarici saxlanma faylına emal edilməmiş MMS datası qəbul etdi"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Simsiz siqnallar"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Mesaj seçimləri"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Mətni kopyalayın"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Detallara baxın"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Sil"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Yönləndir"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Mesaj detalları"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Növ: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Mətn mesajı"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimedia mesajı"</string>
-    <string name="from_label" msgid="1947831848146564875">"Kimdən: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Kimə: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Göndərilən: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Qəbul edilən: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Mövzu: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Ölçü: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioritet: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Yüksək"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Aşağı"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Gizli göndərici ünvanı"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Qoşmalar yüklənən zaman mesaj göndərmək olmur."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Qoşma yüklənə bilmir. Yenidən cəhd edin."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Şəbəkə hazır deyil. Yenidən cəhd edin."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Mətni silin"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Mətn və nömrə daxiletməsi arasında seçim edin"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"İştirakçı əlavə edin"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"İştirakçıları təsdiq edin"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Yeni söhbətə başlayın"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Bu elementi seçin"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Videonu oxut"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Adamlar və seçimlər"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Sazlama"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Adamlar və seçimlər"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Ümumi"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Bu söhbətdəki adamlar"</string>
-    <string name="action_call" msgid="6596167921517350362">"Zəng edin"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Mesaj göndərin"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Mesaj göndərin&lt;br/&gt;&lt;kiçik&gt;buradan: <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/kiçik&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Fotolar göndərin</item>
-      <item quantity="one">Foto göndərin</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Audioları göndərin</item>
-      <item quantity="one">Audio göndərin</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Videoları göndərin</item>
-      <item quantity="one">Video göndərin</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Kontakt kartlarını göndərin</item>
-      <item quantity="one">Kontakt kartını göndərin</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Qoşmaları göndərin</item>
-      <item quantity="one">Qoşma göndərin</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> qoşma göndərilmə üçün hazırdır</item>
-      <item quantity="one">1 qoşma göndərilmə üçün hazırdır</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Geri əlaqə göndərin"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Store\'də bax"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Versiya haqqında"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versiya %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Açıq mənbə lisenziyaları"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Bildirişlər"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Qoşma limitini keçdi"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Qoşmanı yükləyə bilmədi."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Kontaktlara əlavə edilsin?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Kontakt əlavə edin"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Mövzu"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Mövzu: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Kontakt kartı yüklənir"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kontakt kartını yükləmək alınmadı"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Kontakt kartına baxın"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakt</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontakt kartları"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Doğum günü"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Qeydlər"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Mesajı yönləndirin"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Cavablayın"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS deaktivdir"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Göndərmək üçün Mesajlaşmanı defolt SMS tətbiqi kimi ayarlayın"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Mesajlaşmanı defolt SMS tətbiqi kimi ayarlayın"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Dəyişin"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Mesaj qəbul etmək üçün Mesajlaşmanı defolt SMS tətbiqi kimi ayarlayın"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS göndərmək üçün tərcih olunan SIM seçilməyib"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Bu tətbiqə cihaz sahibi tərəfindən icazə verilmir."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Ok"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Söhbətdə həddən çox iştirakçı var"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Yanlış kontakt</item>
-      <item quantity="one">Yanlış kontakt</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Kamera şəklini yükləmək olmur"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Siz: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Qaralama"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Söhbətə başlayan kimi onu burada siyahılanmış görəcəksiniz"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Arxivlənmiş söhbətlər burada görünür"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Söhbətlər yüklənir…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Şəkil"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audio klip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Əlaqə kartı"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Geri"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Yenidən cəhd edin"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Yeni mesaja başlamaq üçün kontakt adını və ya telefon nömrəsini daxil edin"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blok edin"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> bloklayın"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> blokdan çıxarın"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> bloklansın?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Bu nömrədən mesaj almağa davam edəcəksiniz, lakin mesajın gəlməsinə dair bildiriş olmayacaq. Söhbət arxivlənəcək."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Bloklanmış kontaktlar"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"BLOKDAN ÇIXARIN"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Bloklanmış kontaktlar"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Sənəd kitabxanasından şəkil seçin"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Mesaj göndərilir"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Mesaj göndərildi"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobil data deaktivdir. Ayarları yoxlayın."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Təyyarə rejimində mesaj göndərmək olmur"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Mesaj göndərilə bilmədi"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Mesaj yükləndi"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobil data deaktivdir. Ayarları yoxlayın."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Təyyarrə rejimində mesajları endirə bilməz"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Mesaj endirilə bilmədi"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Sıfır"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Bir"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"İki"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Üç"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Dörd"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Beş"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Altı"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Yeddi"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Səkkiz"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Doqquz"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Mesajı <xliff:g id="CARRIERNAME">%1$s</xliff:g> ilə göndərmək olmur, xəta <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Mesajı naməlum operator ilə göndərmək olmur, xəta <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Yön: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Mesaj göndərilmədi. Xidmət şəbəkədə aktivləşdirilməyib."</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Mesaj göndərilmədi: Etibarsız təyinat ünvanı"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Mesaj göndərilmədi: etibarsız mesaj"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Mesaj göndərilmədi: dəstəklənməyən məzmun"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Mesaj göndərilmədi: dəstəklənməyən mesaj"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Mesaj göndərilmədi: çox böyükdür"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Yeni mesaj"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Göstər"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Təsvir"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Uyğun tətbiqi tapmaq olmadı"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Qəbuledicini silin"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Yeni mesaj"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Ləğv et"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Edit access point"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Ayarlanmayıb"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Ad"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS proksi"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS por"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN növü"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN silin"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Yeni APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Yadda saxlayın"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"İmtina edin"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Ad sahəsi boş ola bilməz."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN boş ola bilməz."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC sahəsində 3 rəqəm olmalıdır."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC sahəsi 2 və ya 3 rəqəm olmalıdır."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Defolt APN ayarları bərpa olunur."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Sıfırlayın"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Varsayılan APN ayarlarının sıfırlanması tamamlandı."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Başlıqsız"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Çatma Nöqtəsi Adları"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Yeni APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Giriş Nöqtəsi Ad Ayarları bu istifadəçi üçün əlçatmazdır"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Panoya kopyalansın?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopyalayın"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"Buraya: <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Ümumi"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Qabaqcıl"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Ümumi ayarlar"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Qabaqcıl ayarlar"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Bütün alıcılara fərdi SMS göndər. Hər hansı bir cavabı özünüz olacaq"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Bütün alıcılara bir MMS göndər"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Naməlum nömrə"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Yeni mesaj"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Yeni mesaj."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM seçicisi"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> seçildi, SIM seçicisi"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Mövzunu dəyiş"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SİM seçin və ya mövzu redaktə edin"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Səs yazmaq üçün basın və saxlayın"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Yeni söhbətə başla"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Mesajlaşma"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Mesajlaşma Siyahısı"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Mesajlaşma"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Yeni mesaj"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Söhbət siyahısı"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Söhbətlər yüklənir"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Mesajlar yüklənir"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Daha çox söhbət görüntülə"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Daha çox mesaja bax"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Söhbət silinib"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Söhbət silindi. Başqa Mesajlaşma söhbəti göstərmək üçün toxunun"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloklanıb"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Blokdan çıxarılıb"</string>
-    <string name="db_full" msgid="8459265782521418031">"Yaddaş yeri azdır. Bəzi məlumatlar itə bilər."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Qoşmaları seçin"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Seçimi təsdiq edin"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> seçilib"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Lütfən, bir və ya daha çox qoşmanı silin və yenidən cəhd edin."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Mesajınızı göndərməyə cəhd edə bilərsiniz, lakin bir və ya daha çox qoşmanı silmədiyiniz halda, mesaj çatmaya bilər."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Hər mesaja yalnız bir video yükləyə bilərsiniz. Əlavə videoları silin və yenidən cəhd edin."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Mesajlaşma qoşmanı yükləyə bilmədi."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"İstənilən halda göndərin"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Söhbətə başlamaq olmadı"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> seçilmiş"</string>
-</resources>
diff --git a/res/values-bg/arrays.xml b/res/values-bg/arrays.xml
deleted file mode 100644
index ac036c4..0000000
--- a/res/values-bg/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"без тема"</item>
-    <item msgid="272485471009191934">"няма тема"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Да"</item>
-    <item msgid="6049132459802288033">"Не"</item>
-    <item msgid="3084376867445867895">"ОK"</item>
-    <item msgid="3155097332660174689">"Ха-ха"</item>
-    <item msgid="2611328818571146775">"Благодаря"</item>
-    <item msgid="4881335087096496747">"Приемам"</item>
-    <item msgid="2422296858597420738">"Чудесно"</item>
-    <item msgid="4805581752819452687">"Идвам"</item>
-    <item msgid="4746700499431366214">"OK, ще се свържа с теб по-късно"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
deleted file mode 100644
index c1b8401..0000000
--- a/res/values-bg/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Съобщения"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Съобщения"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Избиране на разговор"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Настройки"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Изпращане на съобщение"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Добавяне на прикачен файл"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Помощ"</string>
-    <string name="welcome" msgid="2857560951820802321">"Добре дошли"</string>
-    <string name="skip" msgid="7238879696319945853">"Пропускане"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Напред &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Напред"</string>
-    <string name="exit" msgid="1905187380359981199">"Изход"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Настройки &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Настройки"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Приложението Съобщения се нуждае от разрешение за SMS, телефон и контакти."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Можете да промените разрешенията от „Настройки“ &gt; „Приложения“ &gt; „Съобщения“ &gt; „Разрешения“."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Можете да промените разрешенията от „Настройки“, „Приложения“, „Съобщения“, „Разрешения“."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Често търсени"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Всички контакти"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Изпращане до <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Правете снимки или видеоклипове"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Избиране на изображения от това устройство"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Запишете звук"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Избиране на снимка"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Мултимедийният файл е избран."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Изборът на мултимедиен файл е премахнат."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Избрахте <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"изображение от <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"изображение"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Запис на звук"</string>
-    <string name="action_share" msgid="2143483844803153871">"Споделяне"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Току-що"</string>
-    <string name="posted_now" msgid="867560789350406701">"Сега"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> мин</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> мин</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> часа</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> час</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> дни</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ден</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> седмици</item>
-      <item quantity="one">една седмица</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> месеца</item>
-      <item quantity="one">един месец</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> години</item>
-      <item quantity="one">една година</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Съобщения от клас 0"</string>
-    <string name="save" msgid="5081141452059463572">"Запазване"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Мястото на устройството не е достатъчно. Приложението Съобщения автоматично ще изтрие по-старите кореспонденции, за да освободи място."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Мястото в хранилището е на изчерпване"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Възможно е Съобщения да не изпраща, нито да получава съобщения, докато на устройството не се освободи повече място."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Мястото в хранилището за SMS намалява. Може да се наложи да изтриете съобщения."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Потвърждаване на телефонния ви номер"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Тази еднократна стъпка ще гарантира, че Съобщения ще доставя правилно груповите ви съобщения."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Телефонен номер"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Изтриване на всички съобщения с мултимедия"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Изтриване на съобщенията, по-стари от <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Автоматично изтриване на съобщенията, по-стари от <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Пренебрегване"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Да се изтрият ли всички съобщения с медийни файлове?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Да се изтрият ли съобщенията, по-стари от <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Да се изтрият ли съобщенията, по-стари от <xliff:g id="DURATION">%s</xliff:g>, и да се включи ли функцията за автоматично изтриване?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> каза"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Казахте"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Съобщение от <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Изпратихте съобщение"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Изпраща се…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Не е изпратено. Докоснете за нов опит."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Не е изпратено. Извършва се нов опит…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Повторно изпращане или изтриване"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Моля, осъществете гласово обаждане до спешните служби. Понастоящем текстовото ви съобщение не можа да бъде доставено."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Не бе успешно"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Ново MMS съобщение за изтегляне"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Ново MMS съобщение"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Не можа да се изтегли"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Докоснете за нов опит"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Докоснете за изтегляне"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Изтегляне или изтриване"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Изтегля се…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Съобщението е с изтекла валидност или не е налице"</string>
-    <string name="mms_info" msgid="3402311750134118165">"размер: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, валидност: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Не може да се изпрати. Получателят не е валиден."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Услугата не е активирана за мрежата"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Не можа да се изпрати поради проблем с мрежата"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Съобщението е с изтекла валидност или не е налице"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Без тема)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Неизвестен подател"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Доставено"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Съобщението „<xliff:g id="SUBJECT">%1$s</xliff:g>“ от <xliff:g id="FROM">%2$s</xliff:g> не можа да се изтегли."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Операцията в базата от данни не можа да завърши поради недостиг на памет"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Съобщението не е изпратено"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Някои съобщения в приложението Съобщения не са изпратени"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> съобщения в <xliff:g id="CONVERSATIONS">%d</xliff:g> разговора</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> съобщения в един разговор</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Съобщението не е изтеглено"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Някои съобщения в приложението Съобщения не са изтеглени"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> съобщения в <xliff:g id="CONVERSATIONS">%d</xliff:g> разговора</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> съобщения в един разговор</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Съобщението до <xliff:g id="NUMBER">%1$s</xliff:g> не е изпратено"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Моля, осъществете гласово обаждане до спешните служби. Понастоящем текстовото ви съобщение до <xliff:g id="NUMBER">%1$s</xliff:g> не можа да бъде доставено."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> нови съобщения</item>
-      <item quantity="one">Ново съобщение</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Стартиране"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Няма достъп до камерата"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Няма достъп до камерата"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Функцията за заснемане на видео не е налице"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Медийният файл не може да се запази"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Не може да се направи снимка"</string>
-    <string name="back" msgid="1477626055115561645">"Назад"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Архивирани"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Изтриване"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Архивиране"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Деархивиране"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Изключване на известията"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Включване на известията"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Добавяне на контакт"</string>
-    <string name="action_download" msgid="7786338136368564146">"Изтегляне"</string>
-    <string name="action_send" msgid="377635240181672039">"Изпращане"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Изтриване"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Да се изтрие ли това съобщение?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Това действие не може да се отмени."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Изтриване"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Да се изтрият ли тези разговори?</item>
-      <item quantity="one">Да се изтрие ли този разговор?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Изтриване"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Отказ"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"До"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Избиране на няколко изображения"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Потвърждаване на избора"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+ <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Аудиото не може да се запише. Опитайте отново."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Аудиото не може да се възпроизведе. Опитайте отново."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Аудиото не можа да се запази. Опитайте отново."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Докоснете и задръжте"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  ,"</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  :"</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Снимка"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Аудиоклип"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Видеоклип"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Визитна картичка"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Изтегляне"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Отговор чрез SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Отговор чрез MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Отговор"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> участници</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> участник</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Аз"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Контактът е блокиран и архивиран"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Контактът е отблокиран и деархивиран"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Архивирахте <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Деархивирахте <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Известията са изключени"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Известията са включени"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Готово. Докоснете „Изпращане“ отново."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Успешно зададохте Съобщения като стандартно приложение за SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Отхвърляне на прикачените файлове</item>
-      <item quantity="one">Отхвърляне на прикачения файл</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Прикачен аудиофайл"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Пускане на прикачения аудиофайл"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Пауза"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Съобщение от <xliff:g id="SENDER">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Неуспешно съобщение от <xliff:g id="SENDER">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Съобщение от <xliff:g id="SENDER">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Неизпратено съобщение до <xliff:g id="CONTACT">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Изпраща се съобщение до <xliff:g id="CONTACT">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Неуспешно съобщение до <xliff:g id="CONTACT">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Съобщение до <xliff:g id="CONTACT">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Неуспешно съобщение от <xliff:g id="SENDER">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Съобщение от <xliff:g id="SENDER">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Неизпратено съобщение до <xliff:g id="GROUP">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Изпраща се съобщение до <xliff:g id="GROUP">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Неуспешно съобщение до <xliff:g id="GROUP">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Съобщение до <xliff:g id="GROUP">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Неуспешно съобщение. Докоснете, за да опитате отново."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Разговор с/ъс <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Изтриване на темата"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Заснемане на видеоклип"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Заснемане на кадър"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Правене на снимка"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Стартиране на записване на видеоклип"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Превключване към камера на цял екран"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Превключване между предната и задната камера"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Спиране на записването и прикачване на видеоклипа"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Спиране на видеозаписа"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Снимки в Съобщения"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> снимки са запазени в албума „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> снимка е запазена в албума „<xliff:g id="ALBUMNAME_1">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> видеоклипа са запазени в албума „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> видеоклип е запазен в албума „<xliff:g id="ALBUMNAME_1">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> прикачени файла са запазени в албума „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> прикачен файл е запазен в албума „<xliff:g id="ALBUMNAME_1">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> прикачени файла са запазени в „Изтегляния“</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> прикачен файл е запазен в „Изтегляния“</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> прикачени файла са запазени</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> прикачен файл е запазен</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> прикачени файла не можаха да бъдат запазени</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> прикачен файл не можа да се запази</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Запазен прикачен файл от MMS"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Настройки"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Архивирани"</string>
-    <string name="action_close" msgid="1840519376200478419">"Затваряне"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Разширени"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Отстраняване на грешки"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Известия"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Звук"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Тих режим"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Вибриране"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Блокирано"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Отчети за получаване на SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Заявяване на отчет за доставка за всеки изпратен от вас SMS"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Автоматично извличане"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Автоматично извличане на мултимедийните съобщения (MMS)"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Автоматично извличане при роуминг"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Автоматично извличане на MMS при роуминг"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Групови съобщения"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Използвайте MMS, за да изпратите едно съобщение, когато има няколко получатели"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Стандартно приложение за SMS"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Стандартно приложение за SMS"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Вашият телефонен номер"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Няма информация"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Звуци за изходящи съобщения"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Разтоварване на SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Разтоварване на необработените данни от получените SMS съобщения във файл във външното хранилище"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Разтоварване на MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Разтоварване на необработените данни от получените MMS съобщения във файл във външното хранилище"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Безжични сигнали"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Опции на съобщението"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Копиране на текста"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Преглед на подробностите"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Изтриване"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Напред"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Подробности за съобщението"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Тип: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Текстово съобщение"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Мултимедийно съобщение"</string>
-    <string name="from_label" msgid="1947831848146564875">"От: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"До: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Изпратено: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Получено: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Тема: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Размер: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Приоритет: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Висок"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Нормален"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Нисък"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Скрит адрес на изпращача"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Съобщението не може да се изпрати, докато прикачените файлове се зареждат."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Прикаченият файл не може да се зареди. Опитайте отново."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Мрежата не е готова. Опитайте отново."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Изтриване на текста"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Превключване между букви и цифри"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Добавяне на още участници"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Потвърждаване на участниците"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Начало на нова кореспонденция"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Избиране на този елемент"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Пускане на видеоклипа"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Хора и опции"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Отстраняване на грешки"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Хора и опции"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Общи настройки"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Хора в този разговор"</string>
-    <string name="action_call" msgid="6596167921517350362">"Обаждане по телефона"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Изпращане на съобщение"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Изпращане на съобщение&lt;br/&gt;&lt;small&gt;от <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Изпращане на снимките</item>
-      <item quantity="one">Изпращане на снимката</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Изпращане на аудиозаписите</item>
-      <item quantity="one">Изпращане на аудиозаписа</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Изпращане на видеоклиповете</item>
-      <item quantity="one">Изпращане на видеоклипа</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Изпращане на визитните картички</item>
-      <item quantity="one">Изпращане на визитната картичка</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Изпращане на прикачените файлове</item>
-      <item quantity="one">Изпращане на прикачения файл</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> прикачени файла са готови за изпращане</item>
-      <item quantity="one">Един прикачен файл е готов за изпращане</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Изпращане на отзиви"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Преглед в Google Play Магазин"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Информация за версията"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Версия %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Лицензи за отворен код"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Известия"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Ограничението за прикачени файлове е достигнато"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Зареждането на прикачения файл не бе успешно."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Да се добави ли към контактите?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Добавяне на контакт"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Тема"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Тема: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"„<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g>“ – „<xliff:g id="MESSAGETEXT">%2$s</xliff:g>“"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Визитната картичка се зарежда"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Визитната картичка не можа да се зареди"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Преглед на визитната картичка"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> контакт</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Визитни картички"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Рожден ден"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Бележки"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Препращане на съобщението"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Отговор"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS съобщенията са деактивирани"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"За да изпращате съобщения, задайте Съобщения като стандартно приложение за SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Задайте Съобщения като стандартно приложение за SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Промяна"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"За да получавате съобщения, задайте Съобщения като стандартно приложение за SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Няма избрана предпочитана SIM карта за изпращане на SMS съобщения"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Това приложение не е разрешено от собственика на устройството."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ОK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Твърде много участници в разговора"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Контактите са невалидни</item>
-      <item quantity="one">Контактът е невалиден</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Изображението от камерата не можа да се зареди"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Вие: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Чернова"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Когато започнете нов разговор, ще го видите посочен тук"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Тук се показват архивираните кореспонденции"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Кореспонденциите се зареждат…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Снимка"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Аудиоклип"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Видеоклип"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Визитна картичка"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Отмяна"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Повторен опит"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Въведете име на контакт или телефонен номер, за да започнете ново съобщение"</string>
-    <string name="action_block" msgid="9032076625645190136">"Блокиране"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Блокиране на <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Отблокиране на <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Да се блокира ли <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Ще продължите да получавате съобщения от този номер, но вече няма да бъдете известявани. Кореспонденцията ще се архивира."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Блокирани контакти"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ОТБЛОКИРАНЕ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Блокирани контакти"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Избиране на изображение от библиотеката с документи"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Съобщението се изпраща"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Съобщението е изпратено"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Мобилните данни са изключени. Проверете настройките си."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Не можете да изпращате съобщения в самолетен режим"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Съобщението не можа да се изпрати"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Съобщението е изтеглено"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Мобилните данни са изключени. Проверете настройките си."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Съобщенията не могат да се изтеглят в самолетен режим"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Съобщението не можа да бъде изтеглено"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"нула"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"едно"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"две"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"три"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"четири"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"пет"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"шест"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"седем"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"осем"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"девет"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Съобщението не може да се изпрати с/ъс <xliff:g id="CARRIERNAME">%1$s</xliff:g> – грешка <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Съобщението не може да се изпрати с неизвестен оператор – грешка <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Препр.: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Съобщението не е изпратено: Услугата не е активирана за мрежата"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Съобщението не е изпратено: невалиден целеви адрес"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Съобщението не е изпратено: невалидно съобщение"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Съобщението не е изпратено: неподдържано съдържание"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Съобщението не е изпратено: неподдържано съобщение"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Съобщението не е изпратено: твърде голямо"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Ново съобщение"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Преглед"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Изображение"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Не можа да бъде намерено подходящо приложение"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Премахване на получателя"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Ново съобщение"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Отказ"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Редактиране на точката за достъп"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Не е зададено"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Име"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"Име на точката за достъп (APN)"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS прокси сървър"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS порт"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"Mобилен код на държава"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"Код на мобилна мрежа (MNC)"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Тип на името на точката за достъп (APN)"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Изтриване на името на точката за достъп (APN)"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Ново име на точката за достъп (APN)"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Запазване"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Отхвърляне"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Полето за име трябва да се попълни."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Името на точката за достъп (APN) трябва да се попълни."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Полето за мобилен код на държавата трябва да е 3 цифри."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Полето за код на мобилна мрежа (MNC) трябва да е с 2 или 3 цифри."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Стандартните настройки за името на точката за достъп (APN) се възстановяват."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Възстановяване на стандартните"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Възстановяването на стандартните настройки за името на точката за достъп (APN) завърши."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Без име"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Имена на точката за достъп"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Имена на точката за достъп (APN)"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Ново име на точката за достъп (APN)"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Настройките за име на точката за достъп не са налице за този потребител"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Да се копира ли в буферната памет?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Копиране"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"до „<xliff:g id="SIM_NAME">%s</xliff:g>“"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Общи настройки"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Разширени настройки"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Общи настройки"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Разширени настройки"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM карта „<xliff:g id="SIM_NAME">%s</xliff:g>“"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Изпращане на отделни SMS съобщения до всички участници. Само вие ще получавате отговорите"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Изпращане на един MMS до всички участници"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Неизвестен номер"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Ново съобщение"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Ново съобщение."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Инструмент за избор на SIM карта"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Избрахте „<xliff:g id="SIM_0">%1$s</xliff:g>“ – инструмент за избиране на SIM карти"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Редактиране на темата"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Избиране на SIM карта или редактиране на темата"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Докоснете и задръжте, за да запишете аудио"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Начало на нова кореспонденция"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Съобщения"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Списък със съобщения"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Съобщения"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Ново съобщение"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Списък с кореспонденции"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Кореспонденциите се зареждат"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Съобщенията се зареждат"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Преглед на още кореспонденции"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Преглед на още съобщения"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Кореспонденцията бе изтрита"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Разговорът е изтрит. Докоснете за показване на друг от Съобщения"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Блокирано"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Отблокирано"</string>
-    <string name="db_full" msgid="8459265782521418031">"Мястото в хранилището е малко. Може да изгубите някои данни."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Избиране на прикачени файлове"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Потвърждаване на избора"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Избрахте <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Моля, премахнете един или повече прикачени файлове и опитайте отново."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Можете да опитате да изпратите съобщението си, но е възможно то да не бъде доставено, ако не премахнете един или повече прикачени файлове."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Можете да изпращате само по един видеоклип с всяко съобщение. Моля, премахнете допълнителните клипове и опитайте отново."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Зареждането на прикачения файл от Съобщения не бе успешно."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Изпращане въпреки това"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Разговорът не можа да започне"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Избрахте <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-bn/arrays.xml b/res/values-bn/arrays.xml
deleted file mode 100644
index bdf164c..0000000
--- a/res/values-bn/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"কোনো বিষয় নেই"</item>
-    <item msgid="272485471009191934">"বিষয়হীন"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"হ্যাঁ"</item>
-    <item msgid="6049132459802288033">"না"</item>
-    <item msgid="3084376867445867895">"ঠিক আছে"</item>
-    <item msgid="3155097332660174689">"হিহি"</item>
-    <item msgid="2611328818571146775">"ধন্যবাদ"</item>
-    <item msgid="4881335087096496747">"আমি রাজি"</item>
-    <item msgid="2422296858597420738">"সুন্দর"</item>
-    <item msgid="4805581752819452687">"রাস্তায় আছি"</item>
-    <item msgid="4746700499431366214">"ঠিক আছে, পরে আপনার সঙ্গে এই নিয়ে কথা বলছি"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
deleted file mode 100644
index 96af70b..0000000
--- a/res/values-bn/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"বার্তাপ্রেরণ"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"বার্তাপ্রেরণ"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"কথোপকথন নির্বাচন করুন"</string>
-    <string name="action_settings" msgid="1329008122345201684">"সেটিংস"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"বার্তা পাঠান"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"একটি সংযুক্তি যোগ করুন"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"সহায়তা"</string>
-    <string name="welcome" msgid="2857560951820802321">"স্বাগতম"</string>
-    <string name="skip" msgid="7238879696319945853">"এড়িয়ে যান"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"পরবর্তী &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"পরবর্তী"</string>
-    <string name="exit" msgid="1905187380359981199">"প্রস্থান করুন"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"সেটিংস &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"সেটিংস"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"SMS, ফোন এবং পরিচিতিগুলিতে বার্তাপ্রেরণ -এর অনুমতির প্রয়োজন।"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"আপনি সেটিংস &gt; অ্যাপ্লিকেশানগুলি &gt; বার্তাপ্রেরণ &gt; অনুমতিগুলি এ অনুমতিগুলি পরিবর্তন করতে পারেন৷"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"আপনি সেটিংস, অ্যাপ্লিকেশানগুলি, বার্তাপ্রেরণ, অনুমতিগুলি এ অনুমতিগুলি পরিবর্তন করতে পারেন৷"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"প্রায়শই ব্যবহৃত"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"সকল পরিচিতি"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> এ পাঠান"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"ছবি বা ভিডিও ক্যাপচার করুন"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"এই ডিভাইস থেকে চিত্র নির্বাচন করুন"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"অডিও রেকর্ড করুন"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ফটো চয়ন করুন"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"মিডিয়া নির্বাচিত হয়েছে।"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"মিডিয়া নির্বাচিত হয় নি।"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g>টি নির্বাচন করা হয়েছে"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"চিত্র <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"চিত্র"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"অডিও রেকর্ড করুন"</string>
-    <string name="action_share" msgid="2143483844803153871">"ভাগ করুন"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"এইমাত্র"</string>
-    <string name="posted_now" msgid="867560789350406701">"এখনই"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> মিনিট</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> মিনিট</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ঘণ্টা</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ঘণ্টা</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> দিন</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> দিন</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> সপ্তাহ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> সপ্তাহ</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> মাস</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> মাস</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> বছর</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> বছর</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"ক্লাস ০ বার্তা"</string>
-    <string name="save" msgid="5081141452059463572">"সংরক্ষণ করুন"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"ডিভাইসে কম জায়গা আছে। বার্তাপ্রেরণ জায়গা খালি করতে স্বয়ংক্রিয়ভাবে পুরানো পাঠ্য বার্তাগুলি মুছে ফেলবে।"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"সঞ্চয়স্থান পূর্ণ হতে চলেছে"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"আপনার ফোনে অরো বেশি সঞ্চয়স্থান উপলব্ধ না থাকলে, বার্তাপ্রেরণ বার্তাগুলি পাঠাতে বা গ্রহণ করতে নাও পারে৷"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS সংগ্রহস্থল বেশি নেই৷ আপনাকে বার্তা মুছতে হতে পারে৷"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"আপনার ফোন নম্বর নিশ্চিত করুন"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"এই এককালীন ধাপটি নিশ্চিত করে যে বার্তাপ্রেরণ গোষ্ঠী বার্তাগুলিকে সঠিকভাবে বিতরণ করবে৷"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ফোন নম্বর"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"মিডিয়ার সাথে সমস্ত বার্তা মুছুন"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> এর থেকে পুরানো বার্তাগুলি মুছুন"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g>-এর থেকে পুরানো বার্তা স্বংয়ক্রিয়ভাবে মুছুন"</string>
-    <string name="ignore" msgid="7063392681130898793">"উপেক্ষা করুন"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"মিডিয়ার সমন্বিত সমস্ত বার্তা মুছুন"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g>-এর থেকে পুরানো বার্তাগুলি মুছবেন?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g>-এর থেকে পুরানো বার্তা মুছে দিন এবং স্বয়ংক্রিয়ভাবে মোছা চালু করবেন?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> বলেছেন"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"আপনি বলেছেন"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> এর থেকে বার্তা"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"আপনি একটি বার্তা পাঠিয়েছেন"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"পাঠানো হচ্ছে..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"পাঠানো হয়নি। আবার চেষ্টা করতে স্পর্শ করুন।"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"পাঠানো হয়নি। আবার চেষ্টা হচ্ছে…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"আবার পাঠান অথবা মুছে ফেলুন"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"অনুগ্রহ করে জরুরি পরিষেবাগুলিতে একটি ভয়েস কল করুন৷ আপনার পাঠ্য বার্তাগুলিকে এই মূহুর্তে বিতরণ করা যাবে না৷"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"ব্যর্থ হয়েছে"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"ডাউনলোড করার জন্য নতুন MMS বার্তা"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"নতুন MMS বার্তা"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ডাউনলোড করা যায়নি"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"আবার চেষ্টা করতে স্পর্শ করুন"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ডাউনলোড করার জন্য স্পর্শ করুন"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ডাউনলোড করুন অথবা মুছুন"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"ডাউনলোড হচ্ছে..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"বার্তার মেয়াদ শেষ হয়ে গেছে বা অনুপলব্ধ"</string>
-    <string name="mms_info" msgid="3402311750134118165">"আকার: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, মেয়াদ শেষ: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"পাঠানো যাবে না। প্রাপক বৈধ নয়।"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"নেটওয়ার্কে পরিষেবা সক্রিয় নেই"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"নেটওয়ার্ক সমস্যার কারণে পাঠানো যায়নি"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"বার্তার মেয়াদ শেষ হয়ে গেছে বা অনুপলব্ধ"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(কোনো বিষয় নেই)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"অজ্ঞাত প্রেরক"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"পৌঁছে দেওয়া হয়েছে"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> থেকে <xliff:g id="SUBJECT">%1$s</xliff:g> বার্তা ডাউনলোড করা যায়নি।"</string>
-    <string name="low_memory" msgid="5300743415198486619">"কম মেমরি থাকার কারণে ডেটাবেস ক্রিয়াকলাপ সম্পন্ন করা যায়নি"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"বার্তা পাঠানো হয়নি"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"বার্তাপ্রেরণ এ কিছু বার্তা পাঠানো হয়নি"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="CONVERSATIONS">%d</xliff:g>টি কথোপকথনে <xliff:g id="MESSAGES_1">%d</xliff:g>টি বার্তা রয়েছে</item>
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g>টি কথোপকথনে <xliff:g id="MESSAGES_1">%d</xliff:g>টি বার্তা রয়েছে</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"বার্তা ডাউনলোড করা যাবে না"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"বার্তাপ্রেরণ এ কিছু বার্তা ডাউনলোড করা যায়নি"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="CONVERSATIONS">%d</xliff:g>টি কথোপকথনে <xliff:g id="MESSAGES_1">%d</xliff:g>টি বার্তা রয়েছে</item>
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g>টি কথোপকথনে <xliff:g id="MESSAGES_1">%d</xliff:g>টি বার্তা রয়েছে</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> এ বার্তা পাঠানো হয়নি"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"অনুগ্রহ করে জরুরি পরিষেবাগুলিতে একটি ভয়েস কল করুন৷ <xliff:g id="NUMBER">%1$s</xliff:g> এ পাঠানো আপনার পাঠ্য বার্তাগুলিকে এই মূহুর্তে বিতরণ করা যাবে না৷"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g>টি নতুন বার্তা</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g>টি নতুন বার্তা</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"আরম্ভ"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"ক্যামেরা উপলব্ধ নয়"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"ক্যামেরা উপলব্ধ নয়"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"ভিডিও ক্যাপচার উপলব্ধ নয়"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"মিডিয়া সংরক্ষণ করা যাবে না"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"ছবি তুলতে পারবেন না"</string>
-    <string name="back" msgid="1477626055115561645">"ফিরুন"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"সংরক্ষণাগারভুক্ত"</string>
-    <string name="action_delete" msgid="4076795795307486019">"মুছুন"</string>
-    <string name="action_archive" msgid="5437034800324083170">"সংরক্ষণ করুন"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"সংরক্ষণাগারমুক্ত করুন"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"বিজ্ঞপ্তিগুলি বন্ধ করুন"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"বিজ্ঞপ্তি চালু করুন"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"পরিচিতি যোগ করুন"</string>
-    <string name="action_download" msgid="7786338136368564146">"ডাউনলোড করুন"</string>
-    <string name="action_send" msgid="377635240181672039">"পাঠান"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"মুছুন"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"এই বার্তাটি মুছবেন?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"এই কাজটিকে পূর্বাবস্থায় ফেরানো যাবে না৷"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"মুছুন"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">এই কথোপকথনগুলি মুছবেন?</item>
-      <item quantity="other">এই কথোপকথনগুলি মুছবেন?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"মুছুন"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"বাতিল করুন"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"প্রাপক"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"একাধিক চিত্র নির্বাচন করুন"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"নির্বাচন নিশ্চিত করুন"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>টি"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"অডিও রেকর্ড করা যাবে না। আবার চেষ্টা করুন।"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"অডিও প্লে করা যাবে না। আবার চেষ্টা করুন।"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"অডিও সংরক্ষণ করা যায়নি। আবার চেষ্টা করুন"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"স্পর্শ করুন এবং ধরে রাখুন"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"ছবি"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"অডিও ক্লিপ"</string>
-    <string name="notification_video" msgid="4331423498662606204">"ভিডিও"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"পরিচিতি কার্ড"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ডাউনলোড"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS এর মাধ্যমে উত্তর দিন"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS এর মাধ্যমে উত্তর দিন"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"উত্তর দিন"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> জন অংশগ্রহণকারী</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> জন অংশগ্রহণকারী</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"আমি"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"পরিচিতি অবরুদ্ধ ও সংরক্ষণাগারভুক্ত হয়েছে"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"পরিচিতি অবরোধ মুক্ত এবং সংরক্ষণাগারমুক্ত করা হয়েছে"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> টি সংরক্ষণাগারভুক্ত হয়েছে"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> সংরক্ষণাগারমুক্ত হয়েছে"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"বিজ্ঞপ্তিগুলি বন্ধ করা হয়েছে"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"বিজ্ঞপ্তিগুলি চালু করা হয়েছে"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"সবকিছু সেট। আবার পাঠাতে স্পর্শ করুন।"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"ডিফল্ট SMS অ্যাপ্লিকেশান হিসাবে বার্তাপ্রেরণ সফলভাবে সেট করা হয়েছে৷"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">সংযুক্তিগুলি বাতিল করুন</item>
-      <item quantity="other">সংযুক্তিগুলি বাতিল করুন</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"অডিও সংযুক্তি"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"অডিও সংযুক্তি চালান"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"বিরাম দিন"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> এর পাঠানো বার্তা: <xliff:g id="MESSAGE">%2$s</xliff:g>৷"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g>:-র <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা পাঠাতে ব্যর্থ হয়েছে। সময়: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g>: এর থেকে <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা। সময়: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g>: -কে <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা পাঠানো যায় নি। সময়: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g>: -কে <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা পাঠাচ্ছে। সময়: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g>: -কে <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা পাঠাতে ব্যর্থ হয়েছে। সময়: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g>: -কে <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা পাঠান। সময়: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা পাঠাতে ব্যর্থ হয়েছেন। সময়: <xliff:g id="TIME">%3$s</xliff:g>। <xliff:g id="GROUPINFO">%4$s</xliff:g>।"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g>: এর থেকে <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা। সময়: <xliff:g id="TIME">%3$s</xliff:g>। <xliff:g id="GROUPINFO">%4$s</xliff:g>।"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g>: -কে <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা পাঠানো যায় নি। সময়: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g>:-এ <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা পাঠানো হচ্ছে। সময়: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g>: -এ <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা পাঠাতে ব্যর্থ হয়েছে। সময়: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g>: -এ <xliff:g id="MESSAGE">%2$s</xliff:g> বার্তা পাঠান। সময়: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"বার্তা পাঠাতে ব্যর্থ হয়েছে। পুনরায় চেষ্টা করতে স্পর্শ করুন।"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> এর সাথে কথোপকথন"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"বিষয় মুছুন"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"ভিডিও ক্যাপচার করুন"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"একটি স্থির চিত্র ক্যাপচার করুন"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"ছবি তুলুন"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"ভিডিও রেকর্ডিং শুরু করুন"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"সম্পূর্ণ স্ক্রীন ক্যামেরাতে স্যুইচ করুন"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"সামনে ও পিছনে ক্যামেরার মধ্যে স্যুইচ করুন"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"রেকর্ডিং করা বন্ধ করুন এবং ভিডিও সংযুক্ত করুন"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"ভিডিও রেকর্ডিং বন্ধ করুন"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"বার্তাপ্রেরণ ফটোগুলি"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g>টি ফটো \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" অ্যালবামে সংরক্ষিত হয়েছে</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g>টি ফটো \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" অ্যালবামে সংরক্ষিত হয়েছে</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g>টি ভিডিও \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" অ্যালবামে সংরক্ষিত হয়েছে</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g>টি ভিডিও \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" অ্যালবামে সংরক্ষিত হয়েছে</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g>টি সংযুক্তি \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" অ্যালবামে সংরক্ষিত হয়েছে</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g>টি সংযুক্তি \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" অ্যালবামে সংরক্ষিত হয়েছে</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g>টি সংযুক্তি \"ডাউনলোডগুলি\" এ সংরক্ষিত হয়েছে</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g>টি সংযুক্তি \"ডাউনলোডগুলি\" এ সংরক্ষিত হয়েছে</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g>টি সংযুক্তি সংরক্ষণ করা হয়েছে</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g>টি সংযুক্তি সংরক্ষণ করা হয়েছে</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g>টি সংযুক্তি সংরক্ষণ করা যায়নি</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g>টি সংযুক্তি সংরক্ষণ করা যায়নি</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS সংযুক্তি সংরক্ষণ করা হয়েছে"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"সেটিংস"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"সংরক্ষণাগারভুক্ত"</string>
-    <string name="action_close" msgid="1840519376200478419">"বন্ধ করুন"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"উন্নত"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"ডিবাগ"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"বিজ্ঞপ্তিগুলি"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"আওয়াজ"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"নীরব"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"কম্পন"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"অবরুদ্ধ"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS বিতরণের প্রতিবেদনগুলি"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"আপনি যে SMS পাঠাবেন তার প্রতিটির জন্য পৌঁছে দেওয়ার প্রতিবেদনের অনুরোধ করুন"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"স্বতঃ-উদ্ধার"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"স্বয়ংক্রিয়ভাবে MMS বার্তাগুলি পুনরুদ্ধার করুন"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"রোমিং থাকাকালীন স্বতঃ-উদ্ধার"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"রোমিং-এ থাকার সময় স্বয়ংক্রিয়ভাবে MMS পুনরুদ্ধার করুন"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"গোষ্ঠীর মধ্যে বার্তাপ্রেরণ"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"যখন একাধিক প্রাপক রয়েছে তখন একটি বার্তা পাঠাতে MMS ব্যবহার করুন"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"ডিফল্ট SMS অ্যাপ্লিকেশান"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"ডিফল্ট SMS অ্যাপ্লিকেশান"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"আপনার ফোন নম্বর"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"অজানা"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"আউটগোয়িং বার্তার শব্দগুলি"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"ডাম্প SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"পাওয়া SMS এর অপীষ্কার ডেটাকে বহিরাগত সংগ্রহস্থলে জমা করুন"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"ডাম্প MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"গৃহিত MMS এর কাঁচা ডেটাকে বহিরাগত সংগ্রহস্থলে জমা করুন"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"বেতার সতর্কতাগুলি"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"বার্তা বিকল্পগুলি"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"পাঠ্য অনুলিপি করুন"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"বিশদ বিবরণ দেখুন"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"মুছুন"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"ফরওয়ার্ড করুন"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"বার্তার বিশদ বিবরণ"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"প্রকার: "</string>
-    <string name="text_message" msgid="7415419755252205721">"পাঠ্য বার্তা"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"মাল্টিমিডিয়া বার্তা"</string>
-    <string name="from_label" msgid="1947831848146564875">"প্রেরক: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"প্রাপক: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"পাঠানো হয়েছে: "</string>
-    <string name="received_label" msgid="4442494712757995203">"গ্রহণ করা হয়েছে: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"বিষয়: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"মাপ: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"অগ্রাধিকার: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"উচ্চ"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"স্বাভাবিক"</string>
-    <string name="priority_low" msgid="7398724779026801851">"নিম্ন"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"লুকানো প্রেরক ঠিকানা"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"সংযুক্তি লোড করার সময় বার্তা পাঠানো যাচ্ছে না।"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"সংযুক্তি লোড করা যাবে না। আবার চেষ্টা করুন।"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"নেটওয়ার্ক প্রস্তুত নয়৷ আবার চেষ্টা করুন৷"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"পাঠ্য মুছে দিন"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"পাঠ্য এবং সংখ্যা লেখার মধ্যে স্যুইচ করুন"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"আরো অংশগ্রহণকারী যোগ করুন"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"অংশগ্রহণকারীদের নিশ্চিত করুন"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"নতুন কথোপকথন শুরু করুন"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"এই আইটেমটি নির্বাচন করুন"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"ভিডিও দেখুন"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"ব্যক্তি ও বিকল্পগুলি"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"ডিবাগ"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"ব্যক্তি ও বিকল্পগুলি"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"সাধারণ"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"এই কথোপকথনে থাকা ব্যক্তিগণ"</string>
-    <string name="action_call" msgid="6596167921517350362">"একটি কল করুন"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"বার্তা পাঠান"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt; থেকে &lt;br/&gt;&lt;small&gt;from বার্তা পাঠান"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">ফটোগুলি পাঠান</item>
-      <item quantity="other">ফটোগুলি পাঠান</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">অডিওগুলি পাঠান</item>
-      <item quantity="other">অডিওগুলি পাঠান</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">ভিডিওগুলি পাঠান</item>
-      <item quantity="other">ভিডিওগুলি পাঠান</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">পরিচিতি কার্ডগুলি পাঠান</item>
-      <item quantity="other">পরিচিতি কার্ডগুলি পাঠান</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">সংযুক্তিগুলি পাঠান</item>
-      <item quantity="other">সংযুক্তিগুলি পাঠান</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one">পাঠানোর জন্য <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g>টি সংযুক্তি প্রস্তুত</item>
-      <item quantity="other">পাঠানোর জন্য <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g>টি সংযুক্তি প্রস্তুত</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"প্রতিক্রিয়া পাঠান"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play স্টোরে দেখুন"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"সংস্করণ তথ্য"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"সংস্করণ %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"মুক্ত উৎস লাইসেন্সগুলি"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"বিজ্ঞপ্তিগুলি"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"সংযুক্তির সীমা অতিক্রান্ত হয়েছে"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"সংযুক্তি লোড করতে ব্যর্থ হয়েছে।"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"পরিচিতিতে জুড়ুন"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"পরিচিতি জুড়ুন"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"বিষয়"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"বিষয়: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"পরিচিতি কার্ড লোড হচ্ছে"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"পরিচিতি কার্ড লোড করা যায়নি"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"পরিচিতি কার্ড দেখুন"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g>টি পরিচিতি</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>টি পরিচিতি</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"যোগাযোগ কার্ড"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"জন্মদিন"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"টীকাগুলি"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"বার্তা ফরোয়ার্ড করুন"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"উত্তর"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+১"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS অক্ষম করা হয়েছে"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"পাঠাতে, ডিফল্ট SMS অ্যাপ্লিকেশান হিসাবে বার্তাপ্রেরণ সেট করুন"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"ডিফল্ট SMS অ্যাপ্লিকেশান হিসাবে বার্তাপ্রেরণ সেট করুন"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"পরিবর্তন"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"বার্তাগুলি গ্রহণ করতে, আপনার ডিফল্ট SMS অ্যাপ্লিকেশান হিসাবে বার্তাপ্রেরণ সেট করুন"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS বার্তাগুলি পাঠানোর জন্য কোন পছন্দের SIM নির্বাচিত নেই৷"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"এই অ্যাপ্লিকেশানটি ডিভাইস মালিক দ্বারা অনুমোদিত নয়।"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ঠিক আছে"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"একটি কথোপকথনে খুব বেশি সংখ্যার অংশগ্রহণকারী"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">অবৈধ পরিচিতিগুলি</item>
-      <item quantity="other">অবৈধ পরিচিতিগুলি</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"ক্যামেরা চিত্র লোড করা যায়নি"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"আপনি: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"খসড়া"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"আপনি নতুন কোনো কথোপকথন শুরু করলে, সেটিকে এই তালিকায় দেখতে পাবেন"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"সংরক্ষিত করা কথোপকথন এখানে প্রদর্শিত হয়"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"কথোপকথনগুলি লোড হচ্ছে…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"ছবি"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"অডিও ক্লিপ"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"ভিডিও"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"পরিচিতি কার্ড"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"পূর্বাবস্থায় ফিরুন"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"পুনরায় চেষ্টা করুন"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"একটি নতুন বার্তা পাঠাতে একটি পরিচিতি নাম অথবা ফোন নম্বর লিখুন"</string>
-    <string name="action_block" msgid="9032076625645190136">"অবরুদ্ধ করুন"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g>-কে অবরুদ্ধ করুন"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g>-কে অবরোধ মুক্ত করুন"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g>-কে অবরুদ্ধ করবেন?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"আপনি এই নম্বর থেকে অবিরত বার্তা গ্রহণ করতে করবেন কিন্তু আপনাকে আর সূচিত করা হবে না। এই কথোপকথন সংরক্ষণ করা হবে।"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"অবরুদ্ধ পরিচিতিগুলি"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"অবরোধ মুক্ত করুন"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"অবরুদ্ধ পরিচিতিগুলি"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"দস্তাবেজ লাইব্রেরি থেকে চিত্র নির্বাচন করুন"</string>
-    <string name="sending_message" msgid="6363584950085384929">"বার্তা পাঠানো হচ্ছে"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"বার্তা পাঠানো হয়েছে"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"সেলুলার ডেটা বন্ধ আছে। আপনার সেটিংস চেক করুন।"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"বিমান মোডে বার্তা পাঠানো যাবে না"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"এই বার্তাটি পাঠানো যায়নি"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"বার্তা ডাউনলোড করা হয়েছে"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"সেলুলার ডেটা বন্ধ আছে। আপনার সেটিংস চেক করুন।"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"বিমান মোডে বার্তাগুলি ডাউনলোড করা যাবে না"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"বার্তা ডাউনলোড করা যায়নি"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"শূন্য"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"এক"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"দুই"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"তিন"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"চার"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"পাঁচ"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ছয়"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"সাত"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"আট"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"নয়"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> এর মাধ্যমে বার্তা পাঠানো যাবে না, ত্র্রুটি <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"অজানা পরিষেবা প্রদানকারীর মাধ্যমে বার্তা পাঠানো যাবে না, ত্রুটি <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"ফরওয়ার্ড: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"বার্তা পাঠানো হয়নি: নেটওয়ার্কে পরিষেবা সক্রিয় নেই"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"বার্তা পাঠানো যায়নি: অবৈধ গন্তব্য ঠিকানা"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"বার্তা পাঠানো যায়নি: অবৈধ বার্তা"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"বার্তা পাঠানো যায়নি: অসমর্থিত বিষয়বস্তু"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"বার্তা পাঠানো যায়নি: অসমর্থিত বার্তা"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"বার্তা পাঠানো হয়নি: খুব বড়"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"নতুন বার্তা"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"দেখুন"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"চিত্র"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"কোনো উপযুক্ত অ্যাপ্লিকেশান পাওয়া যায়নি"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"প্রাপককে সরান"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"নতুন বার্তা"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"বাতিল করুন"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"অ্যাক্সেস পয়েন্ট সম্পাদনা করুন"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"সেট করা নেই"</string>
-    <string name="apn_name" msgid="1572691851070894985">"নাম"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS প্রক্সি"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS পোর্ট"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN প্রকার"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN মুছে দিন"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"নতুন APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"সংরক্ষণ করুন"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"খারিজ করুন"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"নামের ক্ষেত্রটি খালি থাকতে পারে না।"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN খালি থাকতে পারে না।"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC ক্ষেত্রটিকে ৩ ডিজিটের হতে হবে।"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC ক্ষেত্রটিকে ২ অথবা ৩ ডিজিটের হতে হবে।"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"ডিফল্ট APN সেটিংস পুনরুদ্ধার করা হচ্ছে।"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"পুনরায় ডিফল্ট হিসাবে সেট করুন"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"ডিফল্ট APN সেটিংস পুনরায় সেট করা সম্পন্ন হয়েছে।"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"শীর্ষকহীন"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"অ্যাক্সেস পয়েন্টের নামগুলি"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNগুলি"</string>
-    <string name="menu_new" msgid="8286285392706532511">"নতুন APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"এই ব্যবহারকারীর জন্য অ্যাক্সেস পয়েন্ট নাম সেটিংস উপলব্ধ নয়"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"ক্লিপবোর্ডে অনুলিপি করবেন?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"অনুলিপি করুন"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> এ"</string>
-    <string name="general_settings" msgid="5409336577057897710">"সাধারণ"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"আরো বিকল্প"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"সাধারণ সেটিংস"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"উন্নত সেটিংস"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"সকল প্রাপকের কাছে আলাদা আলাদা করে SMS পাঠান৷ শুধুমাত্র আপনিই উত্তরগুলি পাবেন"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"সকল প্রাপকের কাছে একটি নির্দিষ্ট MMS পাঠান"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"অজানা নম্বর"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"নতুন বার্তা"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"নতুন বার্তা৷"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM নির্বাচক"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> নির্বাচিত, SIM নির্বাচক"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"বিষয় সম্পাদনা করুন"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM নির্বাচন করুন বা বিষয় সম্পাদনা করুন"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"অডিও রেকর্ড করতে স্পর্শ করুন এবং ধরে রাখুন"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"নতুন কথোপকথন শুরু করুন"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"বার্তাপ্রেরণ"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"বার্তাপ্রেরণ তালিকা"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"বার্তাপ্রেরণ"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"নতুন বার্তা"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"কথোপকথনের তালিকা"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"কথোপকথনগুলি লোড হচ্ছে"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"বার্তাগুলি লোড করা হচ্ছে"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"আরো কথোপকথন দেখুন"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"আরো বার্তা দেখুন"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"কথোপকথন মুছে দেওয়া হয়েছে"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"কথোপকথন মুছে ফেলা হয়েছে৷ একটি ভিন্ন বার্তাপ্রেরণ কথোপকথন দেখানোর জন্য স্পর্শ করুন"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"অবরুদ্ধ"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"অবরোধ মুক্ত করা হয়েছে"</string>
-    <string name="db_full" msgid="8459265782521418031">"সঞ্চয়স্থান কম রয়েছে৷ কিছু ডেটা হারিয়ে যেতে পারে৷"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"সংযুক্তিগুলি নির্বাচন করুন"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"নির্বাচন নিশ্চিত করুন"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g>টি নির্বাচন করা হয়েছে"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"একটি অথবা আরও বেশি সংযুক্তি সরিয়ে আবার চেষ্টা করুন।"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"আপনি আপনার বার্তা পাঠানোর চেষ্টা করতে পারেন, কিন্তু আপনি এক বা একাধিক সংযুক্তি অপসারণ না করা পর্যন্ত তা বিতরণ নাও করা হতে পারে।"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"আপনি বার্তা প্রতি শুধুমাত্র একটি ভিডিও পাঠাতে পারেন৷ অতিরিক্ত ভিডিওগুলি সরিয়ে দিয়ে আবার চেষ্টা করুন৷"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"বার্তাপ্রেরণ সংযুক্তি লোড করতে ব্যর্থ হয়েছে৷"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"তবুও পাঠান"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"কথোপকথন শুরু করা যায়নি"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> নির্বাচিত হয়েছে"</string>
-</resources>
diff --git a/res/values-ca/arrays.xml b/res/values-ca/arrays.xml
deleted file mode 100644
index 69ce724..0000000
--- a/res/values-ca/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"sense assumpte"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Sí"</item>
-    <item msgid="6049132459802288033">"No"</item>
-    <item msgid="3084376867445867895">"D\'acord"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Gràcies"</item>
-    <item msgid="4881335087096496747">"Accepto"</item>
-    <item msgid="2422296858597420738">"Molt bé"</item>
-    <item msgid="4805581752819452687">"Ja vinc."</item>
-    <item msgid="4746700499431366214">"D\'acord. Et diré alguna cosa més tard."</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
deleted file mode 100644
index 9f09908..0000000
--- a/res/values-ca/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Missatges"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Missatges"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Selecció de la conversa"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Configuració"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Envia el missatge"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Afegeix un fitxer adjunt"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Ajuda"</string>
-    <string name="welcome" msgid="2857560951820802321">"Et donem la benvinguda"</string>
-    <string name="skip" msgid="7238879696319945853">"Omet"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Següent &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Següent"</string>
-    <string name="exit" msgid="1905187380359981199">"Surt"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Configuració &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Configuració"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Missatges necessita permís per accedir als SMS, al telèfon i als contactes."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Pots canviar els permisos a Configuració &gt; Aplicacions &gt; Missatges &gt; Permisos."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Pots canviar els permisos a Configuració, Aplicacions, Missatges, Permisos."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Freqüents"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Tots els contactes"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Envia al <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Captura fotos o vídeos"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Tria imatges d\'aquest dispositiu."</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Enregistra l\'àudio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Triar una foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"S\'ha seleccionat el fitxer multimèdia."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"No hi ha cap fitxer multimèdia seleccionat."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Seleccionats: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"imatge: <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"imatge"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Enregistra l\'àudio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Comparteix"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Ara mateix"</string>
-    <string name="posted_now" msgid="867560789350406701">"Ara"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> hores</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hora</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dies</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> dia</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> setmanes</item>
-      <item quantity="one">una setmana</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mesos</item>
-      <item quantity="one">un mes</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> anys</item>
-      <item quantity="one">un any</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Missatge de classe 0"</string>
-    <string name="save" msgid="5081141452059463572">"Desa"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Queda poc espai al dispositiu. Per alliberar-ne, Missatgeria suprimirà automàticament els missatges antics."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"L\'espai d\'emmagatzematge s\'està esgotant"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Pot ser que Missatges no enviï ni rebi missatges fins que no tinguis més espai disponible al dispositiu."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Poc emmagatzematge per a SMS. És possible que et calgui suprimir missatges."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirma el teu número de telèfon"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Aquest pas únic garanteix que els missatges de grup s\'enviïn correctament amb Missatges."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Número de telèfon"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Suprimeix tots els missatges amb fitxers multimèdia"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Suprimeix els missatges de més de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Suprimeix automàticament els missatges de més de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignora"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Confirmes que vols suprimir tots els missatges amb fitxers multimèdia?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Confirmes que vols suprimir els missatges de més de <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Confirmes que vols suprimir els missatges de més de <xliff:g id="DURATION">%s</xliff:g> i activar la funció per suprimir-los automàticament?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> ha dit:"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Has dit:"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Missatge de: <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Has enviat un missatge."</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"S\'està enviant…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"No s\'ha enviat. Toca per tornar-ho a provar."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"No s\'ha enviat. S\'està tornant a provar…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Reenvia o suprimeix"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Truca als serveis d\'emergència. En aquest moment, el missatge de text no s\'ha pogut enviar."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"S\'ha produït un error."</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Missatge MMS nou per baixar"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Missatge MMS nou"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"No s\'ha pogut baixar."</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Toca per tornar-ho a provar"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Toca per baixar"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Baixa o suprimeix"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"S\'està baixant..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"El missatge ha caducat o no està disponible."</string>
-    <string name="mms_info" msgid="3402311750134118165">"mida: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, caducitat: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"No es pot enviar. El destinatari no és vàlid."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"El servei no està activat a la xarxa."</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"No s\'ha pogut enviar a causa d\'un problema de xarxa."</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"El missatge ha caducat o no està disponible."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Sense assumpte)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Emissor desconegut"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Entregat"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"No s\'ha pogut baixar el missatge <xliff:g id="SUBJECT">%1$s</xliff:g> de <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"No s\'ha pogut completar l\'operació de la base de dades perquè hi ha poca memòria."</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"No s\'ha enviat el missatge."</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Alguns missatges no s\'han enviat a Missatges"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> missatges en <xliff:g id="CONVERSATIONS">%d</xliff:g> converses</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> missatges en una conversa</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"No s\'ha baixat el missatge"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Alguns missatges a Missatges no s\'han baixat"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> missatges en <xliff:g id="CONVERSATIONS">%d</xliff:g> converses</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> missatges en una conversa</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"No s\'ha enviat el missatge al <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Truca als serveis d\'emergència. En aquest moment, el missatge de text al <xliff:g id="NUMBER">%1$s</xliff:g> no s\'ha pogut enviar."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> missatges nous</item>
-      <item quantity="one">Missatge nou</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Inicia"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"La càmera no està disponible."</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"La càmera no està disponible."</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"La captura de vídeo no està disponible."</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"No es pot desar el fitxer multimèdia."</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"No es pot fer una foto."</string>
-    <string name="back" msgid="1477626055115561645">"Enrere"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arxivades"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Suprimeix"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arxiu"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Treu de l\'arxiu"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Desactiva les notificacions"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Activa les notificacions"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Afegeix un contacte"</string>
-    <string name="action_download" msgid="7786338136368564146">"Baixa"</string>
-    <string name="action_send" msgid="377635240181672039">"Envia"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Suprimeix"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Vols suprimir aquest missatge?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Aquesta acció no es pot desfer."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Suprimeix"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Vols suprimir aquestes converses?</item>
-      <item quantity="one">Vols suprimir aquesta conversa?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Suprimeix"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Cancel·la"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Per a"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Selecciona diverses imatges"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirma la selecció"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"No es pot enregistrar l\'àudio. Torna-ho a provar."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"No es pot reproduir l\'àudio. Torna-ho a provar."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"No s\'ha pogut desar l\'àudio. Torna-ho a provar."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Toca i mantén premut"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Imatge"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Clip d\'àudio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Vídeo"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Targeta de contacte"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Baixa"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Respon amb un SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Respon amb un MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Respon"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participants</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> participant</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Jo"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contactes bloquejats i arxivats"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contacte desbloquejat i no arxivat"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Arxivades: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"No arxivades: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notificacions desactivades"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notificacions activades"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Ja està tot llest. Torna a tocar Envia."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Missatges s\'ha definit correctament com a aplicació predeterminada de SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Descarta els fitxers adjunts</item>
-      <item quantity="one">Descarta el fitxer adjunt</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Àudio adjunt"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Reprodueix l\'àudio adjunt"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Atura"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Missatge de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Missatge no enviat de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Missatge de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Missatge no enviat a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"S\'està enviant un missatge a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Missatge no enviat a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Missatge a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Missatge no enviat de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Missatge de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Missatge no enviat a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"S\'està enviant un missatge a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Missatge no enviat a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Missatge a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Hi ha hagut un problema amb aquest missatge. Toca per tornar-ho a provar."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversa amb <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Suprimeix l\'assumpte"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Captura un vídeo"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Captura una imatge fixa"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Fes una foto"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Comença a enregistrar vídeo"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Canvia a la càmera de pantalla completa"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Canvia entre la càmera frontal i la posterior"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Deixa d\'enregistrar i adjunta un vídeo"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Atura l\'enregistrament de vídeo"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotos de missatges"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other">S\'han desat <xliff:g id="QUANTITY_2">%d</xliff:g> fotos a l\'àlbum <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one">S\'ha desat <xliff:g id="QUANTITY_0">%d</xliff:g> foto a l\'àlbum <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other">S\'han desat <xliff:g id="QUANTITY_2">%d</xliff:g> vídeos a l\'àlbum <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one">S\'ha desat <xliff:g id="QUANTITY_0">%d</xliff:g> vídeo a l\'àlbum <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other">S\'han desat <xliff:g id="QUANTITY_2">%d</xliff:g> fitxers adjunts a l\'àlbum <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one">S\'ha desat <xliff:g id="QUANTITY_0">%d</xliff:g> fitxer adjunt a l\'àlbum <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other">S\'han desat <xliff:g id="QUANTITY_1">%d</xliff:g> fitxers adjunts a Baixades</item>
-      <item quantity="one">S\'ha desat <xliff:g id="QUANTITY_0">%d</xliff:g> fitxer adjunt a Baixades</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">S\'han desat <xliff:g id="QUANTITY_1">%d</xliff:g> fitxers adjunts</item>
-      <item quantity="one">S\'ha desat <xliff:g id="QUANTITY_0">%d</xliff:g> fitxer adjunt</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">No s\'han pogut desar <xliff:g id="QUANTITY_1">%d</xliff:g> fitxers adjunts</item>
-      <item quantity="one">No s\'ha pogut desar <xliff:g id="QUANTITY_0">%d</xliff:g> fitxer adjunt</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"S\'ha desat el fitxer adjunt MMS."</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Configuració"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arxivades"</string>
-    <string name="action_close" msgid="1840519376200478419">"Tanca"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avançada"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Depuració"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notificacions"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"So"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silenci"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibració"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"S\'ha bloquejat"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Informes d\'entrega de SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Sol·licita un informe d\'entrega per a cada SMS enviat"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Recuperació automàtica"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Recupera MMS automàticament"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Recupera aut. els MMS en itinerància"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Recupera MMS automàticament en itinerància"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Missatge de grup"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Utilitza MMS per enviar un únic missatge a diversos destinataris"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Aplicació de SMS predeterminada"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Aplicació de SMS predeterminada"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Número de telèfon"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Desconegut"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Sons per a missatges de sortida"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Envia el contingut dels SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Envia les dades sense processar dels SMS rebuts al fitxer d\'emmagatzematge extern."</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Envia el contingut dels MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Buida les dades sense processar dels MMS rebuts en un fitxer d’emmagatzematge extern"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Alertes sense fil"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opcions del missatge"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copia el text"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Mostra els detalls"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Suprimeix"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Reenvia"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Detalls del missatge"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tipus: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Missatge de text"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Missatge multimèdia"</string>
-    <string name="from_label" msgid="1947831848146564875">"De: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Per a: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Enviat: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Rebut: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Assumpte: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Mida: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioritat: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Alta"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Baixa"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Amaga l\'adreça del remitent"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"No es pot enviar el missatge durant la càrrega dels fitxers adjunts."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"No s\'ha pogut carregar el fitxer adjunt. Torna-ho a provar."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"La xarxa no està a punt. Torna-ho a provar."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Suprimeix el text"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Alterna entre escriure lletres i números"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Afegeix més participants"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirma els participants"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Inicia una conversa nova"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Selecciona aquest element."</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Reprodueix el vídeo."</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Persones i opcions"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Depura"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Persones i opcions"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"General"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Persones en aquesta conversa"</string>
-    <string name="action_call" msgid="6596167921517350362">"Fes una trucada"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Envia el missatge"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Envia un missatge&lt;br/&gt;&lt;small&gt;des de <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;."</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Envia les fotos</item>
-      <item quantity="one">Envia la foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Envia els àudios</item>
-      <item quantity="one">Envia l\'àudio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Envia els vídeos</item>
-      <item quantity="one">Envia el vídeo</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Envia les targetes de contacte</item>
-      <item quantity="one">Envia la targeta de contacte</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Envia els fitxers adjunts</item>
-      <item quantity="one">Envia el fitxer adjunt</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other">Ja es poden enviar <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> fitxers adjunts</item>
-      <item quantity="one">Ja es pot enviar un fitxer adjunt</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Envia suggeriments"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Mostra a Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informació de la versió"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versió %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Llicències de codi obert"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notificacions"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"S\'ha assolit el límit de fitxers adjunts"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"No s\'ha pogut carregar el fitxer adjunt."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Vols afegir-lo als contactes?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Afegeix el contacte"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Assumpte"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Assumpte: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"S\'està carregant la targeta de contacte"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"No s\'ha pogut carregar la targeta de contacte"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Mostra la targeta de contactes"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactes</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacte</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Targetes de contacte"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Natalici"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notes"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Reenvia el missatge"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Respon"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS desactivats"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Per enviar missatges, defineix Missatges com a aplicació predeterminada de SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Defineix Missatges com a aplicació predeterminada de SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Canvia"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Per rebre missatges, defineix Missatges com a aplicació predeterminada de SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"No s\'ha seleccionat cap SIM preferida per enviar missatges SMS."</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"El propietari del dispositiu no admet l\'aplicació."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"D\'acord"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Hi ha massa participants a la conversa."</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Els contactes no són vàlids</item>
-      <item quantity="one">El contacte no és vàlid</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"No s\'ha pogut carregar la imatge de la càmera."</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Tu: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Esborrany"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Quan comencis una conversa nova, es mostrarà aquí."</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Les converses arxivades es mostren aquí."</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"S\'estan carregant les converses..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Imatge"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Clip d\'àudio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Vídeo"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Targeta de contacte"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Desfés"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Torna-ho a provar"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Introdueix el nom d\'un contacte o el número de telèfon per escriure un missatge nou."</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloqueja"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloqueja <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Desbloqueja <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Vols bloquejar <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Continuaràs rebent missatges d\'aquest número, però no se t\'enviarà cap notificació. Aquesta conversa s\'arxivarà."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Contactes bloquejats"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DESBLOQUEJA"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Contactes bloquejats"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Tria una imatge de la biblioteca de documents."</string>
-    <string name="sending_message" msgid="6363584950085384929">"S\'està enviant el missatge"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Missatge enviat"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Les dades del telèfon estan desactivades. Comprova\'n la configuració."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"No es poden enviar missatges amb el mode d\'avió activat."</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"No s\'ha pogut enviar el missatge"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Missatge baixat"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Les dades del telèfon estan desactivades. Comprova\'n la configuració."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"No es poden baixar missatges en mode d\'avió"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"El missatge no s\'ha pogut baixar"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Un"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dos"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tres"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Quatre"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Cinc"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Sis"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Set"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Vuit"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nou"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"No es pot enviar el missatge amb <xliff:g id="CARRIERNAME">%1$s</xliff:g>, error <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"No es pot enviar el missatge amb un operador de telefonia mòbil desconegut, error <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Rv: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"No s\'ha enviat el missatge; el servei no s\'ha activat a la xarxa."</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Missatge no enviat: adreça de destinació no vàlida"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Missatge no enviat: missatge no vàlid"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Missatge no enviat: contingut no admès"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Missatge no enviat: missatge no admès"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"El missatge no s\'ha enviat: és massa gran"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Missatge nou"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Mostra"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Imatge"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"No s\'ha pogut trobar una aplicació adequada."</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Suprimeix el destinatari."</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Missatge nou"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Cancel·la"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Edita el punt d\'accés"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"No definit"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nom"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Servidor intermediari MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Port per a MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Tipus d\'APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Suprimeix l\'APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN nou"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Desa"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Descarta"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"El camp Nom no pot quedar buit."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"L\'APN no pot quedar buit."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"El camp MCC ha de tenir 3 dígits."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"El camp MNC ha de tenir 2 o 3 dígits."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"S\'està restaurant la configuració predeterminada d\'APN."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Restableix al valor predeterminat"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"S\'ha restablert la configuració predeterminada d\'APN."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Sense títol"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Noms de punt d\'accés"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN nou"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"La configuració del nom del punt d\'accés no està disponible per a aquest usuari."</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Ho vols copiar al porta-retalls?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copia"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"per a <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"General"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avançada"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Configuració general"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Configuració avançada"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Envia missatges SMS individuals a tots els destinataris. Només tu rebràs les respostes."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Envia un MMS individual a tots els destinataris"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Número desconegut"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Missatge nou"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Missatge nou"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Selector de SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> seleccionada, selector de SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Edita l\'assumpte"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Selecciona la SIM o edita l\'assumpte"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Mantén premut per enregistrar àudio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Inicia una conversa nova"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Missatges"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Llista de missatges"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Missatges"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Missatge nou"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Llista de converses"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"S\'estan carregant les converses"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"S\'estan carregant els missatges"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Mostra més converses"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Mostra més missatges"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"S\'ha suprimit la conversa."</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"S\'ha suprimit la conversa. Toca per mostrar una altra conversa de Missatges"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloquejat"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Desbloquejat"</string>
-    <string name="db_full" msgid="8459265782521418031">"Hi ha poc espai d\'emmagatzematge. És possible que es perdin algunes dades."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Selecciona els fitxers adjunts"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirma la selecció"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Seleccionats: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Suprimeix un o més fitxers adjunts i torna-ho a provar."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Pots provar d\'enviar el missatge, però és possible que no s\'enviï si no suprimeixes un o més fitxers adjunts."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Només pots enviar un vídeo per missatge. Suprimeix els vídeos addicionals i torna-ho a provar."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Missatges no ha pogut carregar el fitxer adjunt."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Envia igualment"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"No s\'ha pogut iniciar la conversa"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> seleccionada"</string>
-</resources>
diff --git a/res/values-cs/arrays.xml b/res/values-cs/arrays.xml
deleted file mode 100644
index 95c2775..0000000
--- a/res/values-cs/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"bez předmětu"</item>
-    <item msgid="272485471009191934">"bezpředmětu"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ano"</item>
-    <item msgid="6049132459802288033">"Ne"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Cha cha"</item>
-    <item msgid="2611328818571146775">"Díky"</item>
-    <item msgid="4881335087096496747">"Souhlasím"</item>
-    <item msgid="2422296858597420738">"Hezké"</item>
-    <item msgid="4805581752819452687">"Jsem na cestě."</item>
-    <item msgid="4746700499431366214">"OK, ozvu se později."</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
deleted file mode 100644
index 7e58112..0000000
--- a/res/values-cs/strings.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"SMS a MMS"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"SMS a MMS"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Vybrat konverzaci"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Nastavení"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Odeslat zprávu"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Přidat přílohu"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Nápověda"</string>
-    <string name="welcome" msgid="2857560951820802321">"Vítejte"</string>
-    <string name="skip" msgid="7238879696319945853">"Přeskočit"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Další &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Další"</string>
-    <string name="exit" msgid="1905187380359981199">"Ukončit"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Nastavení &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Nastavení"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Aplikace SMS a MMS vyžaduje oprávnění k přístupu k SMS, telefonu a kontaktům."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Oprávnění můžete změnit v Nastavení &gt; Aplikace &gt; SMS a MMS &gt; Oprávnění."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Oprávnění můžete změnit v Nastavení, Aplikace, SMS a MMS, Oprávnění."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Časté kontakty"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Všechny kontakty"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Odeslat na číslo <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Pořídit fotky nebo video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Vyberte obrázky z tohoto zařízení."</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Nahrát zvuk"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Vybrat fotku"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Médium je vybráno."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Výběr média je zrušen."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Vybráno: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"obrázek <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"obrázek"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Nahrávání zvuku"</string>
-    <string name="action_share" msgid="2143483844803153871">"Sdílet"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Právě teď"</string>
-    <string name="posted_now" msgid="867560789350406701">"Teď"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> hodiny</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> hodiny</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> hodin</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hodina</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> dny</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> dne</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dnů</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> den</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> týdny</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> týdne</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> týdnů</item>
-      <item quantity="one">jeden týden</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> měsíce</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> měsíce</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> měsíců</item>
-      <item quantity="one">jeden měsíc</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> roky</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> roku</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> let</item>
-      <item quantity="one">jeden rok</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Zpráva třídy 0"</string>
-    <string name="save" msgid="5081141452059463572">"Uložit"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"V zařízení dochází místo. Aplikace SMS a MMS automaticky smaže starší zprávy, aby uvolnila místo."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"V úložišti je málo místa"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Aplikace SMS a MMS nebude moci posílat ani přijímat zprávy, dokud v zařízení nebude k dispozici více místa."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Dochází volné místo na zprávy SMS. Možná bude potřeba nějaké zprávy vymazat."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Ověřit telefonní číslo"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Tento jednorázový krok zajistí, že aplikace SMS a MMS správně doručí vaše skupinové zprávy."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefonní číslo"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Smazat všechny zprávy s médii"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Smazat zprávy starší než <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Automaticky smazat zprávy starší než <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorovat"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Vymazat všechny zprávy s médii?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Smazat zprávy starší než <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Chcete smazat zprávy starší než <xliff:g id="DURATION">%s</xliff:g> a zapnout automatické mazání?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> říká"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Řekli jste"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Zpráva od uživatele <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Odeslali jste zprávu"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Odesílání…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Zpráva nebyla odeslána. Klepnutím to zkusíte znovu."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Zpráva nebyla odeslána. Probíhá další pokus…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Znovu odeslat nebo smazat"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Uskutečněte prosím hlasové volání nouzových služeb. Vaši textovou zprávu v současné době nebylo možné doručit."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Nezdařilo se"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nová zpráva MMS ke stažení"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nová zpráva MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Stažení se nezdařilo."</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Klepnutím to zkusíte znovu"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Stáhněte klepnutím."</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Stáhnout nebo smazat"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Stahování…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Platnost zprávy vypršela nebo zpráva není k dispozici."</string>
-    <string name="mms_info" msgid="3402311750134118165">"velikost: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, vypršení platnosti: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Zprávu nelze odeslat. Příjemce není platný."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Služba není v síti aktivována."</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Zprávu se nepodařilo odeslat z důvodu chyby v síti."</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Platnost zprávy vypršela nebo zpráva není k dispozici."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Bez předmětu)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Neznámý odesílatel"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Doručeno"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Stažení zprávy <xliff:g id="SUBJECT">%1$s</xliff:g> od odesílatele <xliff:g id="FROM">%2$s</xliff:g> se nezdařilo."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Databázovou operaci se nepodařilo dokončit z důvodu nedostatku paměti."</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Zprávu se nepodařilo odeslat."</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Několik zpráv v aplikaci SMS a MMS nebylo odesláno."</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="few">Počet zpráv ve <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzacích: <xliff:g id="MESSAGES_1">%d</xliff:g></item>
-      <item quantity="many">Počet zpráv v <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzace: <xliff:g id="MESSAGES_1">%d</xliff:g></item>
-      <item quantity="other">Počet zpráv v <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzacích: <xliff:g id="MESSAGES_1">%d</xliff:g></item>
-      <item quantity="one">Počet zpráv v jedné konverzaci: <xliff:g id="MESSAGES_0">%d</xliff:g></item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Zprávu se nepodařilo stáhnout"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Několik zpráv se do aplikace SMS a MMS nepodařilo stáhnout."</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="few">Počet zpráv ve <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzacích: <xliff:g id="MESSAGES_1">%d</xliff:g></item>
-      <item quantity="many">Počet zpráv v <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzace: <xliff:g id="MESSAGES_1">%d</xliff:g></item>
-      <item quantity="other">Počet zpráv v <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzacích: <xliff:g id="MESSAGES_1">%d</xliff:g></item>
-      <item quantity="one">Počet zpráv v jedné konverzaci: <xliff:g id="MESSAGES_0">%d</xliff:g></item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Zpráva na číslo <xliff:g id="NUMBER">%1$s</xliff:g> nebyla odeslána."</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Uskutečněte prosím hlasové volání nouzových služeb. Vaši textovou zprávu na číslo <xliff:g id="NUMBER">%1$s</xliff:g> v současné době nebylo možné doručit."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> nové zprávy</item>
-      <item quantity="many"><xliff:g id="MESSAGES">%d</xliff:g> nové zprávy</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nových zpráv</item>
-      <item quantity="one">Nová zpráva</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Spustit"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Fotoaparát není k dispozici"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Fotoaparát není k dispozici."</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Záznam videa není k dispozici."</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Média nelze uložit."</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Nelze pořídit fotku"</string>
-    <string name="back" msgid="1477626055115561645">"Zpět"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archivováno"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Smazat"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archivovat"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Vyjmout z archivu"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Vypnout oznámení"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Zapnout oznámení"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Přidat kontakt"</string>
-    <string name="action_download" msgid="7786338136368564146">"Stáhnout"</string>
-    <string name="action_send" msgid="377635240181672039">"Odeslat"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Smazat"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Smazat tuto zprávu?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Tuto akci nelze vrátit zpět."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Smazat"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="few">Smazat tyto konverzace?</item>
-      <item quantity="many">Smazat tyto konverzace?</item>
-      <item quantity="other">Smazat tyto konverzace?</item>
-      <item quantity="one">Smazat tuto konverzaci?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Smazat"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Zrušit"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Komu"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Vybrat několik obrázků"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Potvrďte výběr"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Zvuk nelze zaznamenat. Zkuste to znovu."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Zvuk nelze přehrát. Zkuste to znovu."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Zvuk nelze uložit. Zkuste to znovu."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Dotyk s podržením"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Fotografie"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Zvukový klip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Karta kontaktu"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Stáhnout"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Odpovědět – SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Odpovědět v MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Odpovědět"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> účastníci</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> účastníka</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> účastníků</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> účastník</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Já"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakt byl zablokován a archivován."</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontakt byl odblokován a jeho archivace byla zrušena"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Archivováno: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Vyjmuto z archivu: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Oznámení jsou vypnuta"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Oznámení jsou zapnuta"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Vše je připraveno. Znovu klepněte na Odeslat."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Aplikace SMS a MMS byla úspěšně nastavena jako výchozí aplikace pro SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="few">Zahodit přílohy</item>
-      <item quantity="many">Zahodit přílohy</item>
-      <item quantity="other">Zahodit přílohy</item>
-      <item quantity="one">Zahodit přílohu</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Zvuková příloha"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Přehrát zvukovou přílohu"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pozastavit"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Zpráva od uživatele <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Neúspěšná zpráva od uživatele <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Zpráva od uživatele <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Neodeslaná zpráva pro uživatele <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Odesílání zprávy uživateli <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Neúspěšná zpráva pro uživatele <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Zpráva pro uživatele <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Neúspěšná zpráva od uživatele <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Zpráva od uživatele <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Neodeslaná zpráva pro uživatele <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Odesílání zprávy uživateli <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Neúspěšná zpráva pro uživatele <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Zpráva pro uživatele <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Neúspěšná zpráva. Klepnutím pokus opakujte."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Konverzace s uživateli <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Smazat předmět"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Natočit video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Pořídit statický snímek"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Vyfotit"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Začít natáčet video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Přepnout na fotoaparát na celou obrazovku"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Přepnout mezi předním a zadním fotoaparátem"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Zastavit nahrávání a připojit video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Zastavit záznam videa"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotky z aplikace SMS a MMS"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> fotky byly uloženy do alba <xliff:g id="ALBUMNAME_3">%s</xliff:g>.</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> fotky bylo uloženo do alba <xliff:g id="ALBUMNAME_3">%s</xliff:g>.</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotek bylo uloženo do alba <xliff:g id="ALBUMNAME_3">%s</xliff:g>.</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> fotka byla uložena do alba <xliff:g id="ALBUMNAME_1">%s</xliff:g>.</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> videa byla uložena do alba <xliff:g id="ALBUMNAME_3">%s</xliff:g>.</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> videa bylo uloženo do alba <xliff:g id="ALBUMNAME_3">%s</xliff:g>.</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videí bylo uloženo do alba <xliff:g id="ALBUMNAME_3">%s</xliff:g>.</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video bylo uloženo do alba <xliff:g id="ALBUMNAME_1">%s</xliff:g>.</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> přílohy byly uloženy do alba <xliff:g id="ALBUMNAME_3">%s</xliff:g>.</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> přílohy bylo uloženo do alba <xliff:g id="ALBUMNAME_3">%s</xliff:g>.</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> příloh bylo uloženo do alba <xliff:g id="ALBUMNAME_3">%s</xliff:g>.</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> příloha byla uložena do alba <xliff:g id="ALBUMNAME_1">%s</xliff:g>.</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> přílohy byly uloženy do složky stažených položek.</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> přílohy bylo uloženo do složky stažených položek.</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> příloh bylo uloženo do složky stažených položek.</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> příloha byla uložena do složky stažených položek.</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="few">Uloženy <xliff:g id="QUANTITY_1">%d</xliff:g> přílohy</item>
-      <item quantity="many">Uloženo <xliff:g id="QUANTITY_1">%d</xliff:g> přílohy</item>
-      <item quantity="other">Uloženo <xliff:g id="QUANTITY_1">%d</xliff:g> příloh</item>
-      <item quantity="one">Uložena <xliff:g id="QUANTITY_0">%d</xliff:g> příloha</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> přílohy se nepodařilo uložit</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> přílohy se nepodařilo uložit</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> příloh se nepodařilo uložit</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> přílohu se nepodařilo uložit</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Příloha MMS byla uložena"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Nastavení"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archivováno"</string>
-    <string name="action_close" msgid="1840519376200478419">"Zavřít"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Rozšířená nastavení"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Ladit"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Oznámení"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Zvuk"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Tichý režim"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrace"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Zablokováno"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Zprávy o doručení SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"U každé odeslané SMS požadovat potvrzení o doručení"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automatické načítání"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Automaticky načítat zprávy MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Autom. načítání při roamingu"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Při roamingu automaticky načítat zprávy MMS"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Skupinové zprávy"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Použít MMS k odeslání jedné zprávy, pokud má několik příjemců"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Výchozí aplikace SMS"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Výchozí aplikace SMS"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Vaše telefonní číslo"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Neznámé"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Zvuky odchozích zpráv"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Vypsání zpráv SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Vypsat nezpracovaná data přijatých zpráv SMS do souboru externího úložiště"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Vypsání zpráv MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Vypsat nezpracovaná data přijatých zpráv MMS do souboru externího úložiště"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Bezdrátová upozornění"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Možnosti zprávy"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopírovat text"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Zobrazit podrobnosti"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Smazat"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Přeposlat"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Podrobnosti zprávy"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Typ: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Textová zpráva"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimediální zpráva"</string>
-    <string name="from_label" msgid="1947831848146564875">"Od: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Komu: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Odesláno: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Přijato: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Předmět: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Velikost: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priorita: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM karta: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Vysoká"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normální"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Nízká"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM karta <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Skrytá adresa odesílatele"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Při načítání příloh nelze odeslat zprávu."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Přílohu nelze načíst. Zkuste to znovu."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Síť není připravena. Zkuste to znovu."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Smazat text"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Přepnutí mezi zadáváním textu a čísel"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Přidat další účastníky"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Potvrdit účastníky"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Zahájit novou konverzaci"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Vybrat tuto položku"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Přehrát video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Lidé a možnosti"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Ladit"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Lidé a možnosti"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Obecné"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Lidé v této konverzaci"</string>
-    <string name="action_call" msgid="6596167921517350362">"Uskutečnit hovor"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Poslat zprávu"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Odeslat zprávu&lt;br/&gt;&lt;small&gt;ze SIM karty <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="few">Odeslat fotky</item>
-      <item quantity="many">Odeslat fotky</item>
-      <item quantity="other">Odeslat fotky</item>
-      <item quantity="one">Odeslat fotku</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="few">Odeslat zvukové nahrávky</item>
-      <item quantity="many">Odeslat zvukové nahrávky</item>
-      <item quantity="other">Odeslat zvukové nahrávky</item>
-      <item quantity="one">Odeslat zvukovou nahrávku</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="few">Odeslat videa</item>
-      <item quantity="many">Odeslat videa</item>
-      <item quantity="other">Odeslat videa</item>
-      <item quantity="one">Odeslat video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="few">Odeslat vizitky</item>
-      <item quantity="many">Odeslat vizitky</item>
-      <item quantity="other">Odeslat vizitky</item>
-      <item quantity="one">Odeslat vizitku</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="few">Odeslat přílohy</item>
-      <item quantity="many">Odeslat přílohy</item>
-      <item quantity="other">Odeslat přílohy</item>
-      <item quantity="one">Odeslat přílohu</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="few"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> přílohy jsou připraveny k odeslání</item>
-      <item quantity="many"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> přílohy je připraveno k odeslání</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> příloh je připraveno k odeslání</item>
-      <item quantity="one">Jedna příloha je připravena k odeslání</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Odeslat zpětnou vazbu"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Zobrazit v Obchodě Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informace o verzi"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Verze %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licence open source"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Oznámení"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Byl dosažen maximální počet příloh"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Načtení přílohy se nezdařilo."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Přidat do kontaktů?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Přidat kontakt"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Předmět"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Předmět: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Načítání kontaktní karty"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kartu kontaktu nelze načíst."</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Zobrazit kontaktní kartu"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakty</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> kontaktu</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktů</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Karty kontaktů"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Narozeniny"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Poznámky"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Přeposlat zprávu"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Odpovědět"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Zprávy SMS jsou zakázány"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Chcete-li odeslat zprávu, nastavte aplikaci SMS a MMS jako výchozí aplikaci pro SMS."</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Nastavte aplikaci SMS a MMS jako výchozí aplikaci pro SMS."</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Změnit"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Chcete-li dostávat zprávy, nastavte aplikaci SMS a MMS jako výchozí aplikaci pro SMS."</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Není vybrána preferovaná SIM karta pro odesílání zpráv SMS."</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Tuto aplikaci vlastník zařízení nepovolil."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Konverzace obsahuje příliš mnoho účastníků"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="few">Neplatné kontakty</item>
-      <item quantity="many">Neplatné kontakty</item>
-      <item quantity="other">Neplatné kontakty</item>
-      <item quantity="one">Neplatný kontakt</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Obraz z fotoaparátu nelze načíst."</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Vy: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Koncept"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Zde budou uvedeny nové konverzace"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Zde se zobrazují archivované konverzace."</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Načítání konverzací…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Fotografie"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Zvukový klip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Karta kontaktu"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Vrátit zpět"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Opakovat"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Chcete-li začít psát novou zprávu, zadejte jméno kontaktu nebo telefonní číslo."</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokovat"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blokovat <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Odblokovat kontakt <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Blokovat <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Zprávy z tohoto čísla budete i nadále dostávat, ale nebude se pro ně již zobrazovat oznámení. Tato konverzace bude archivována."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blokované kontakty"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ODBLOKOVAT"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blokované kontakty"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Vyberte obrázek z knihovny dokumentů."</string>
-    <string name="sending_message" msgid="6363584950085384929">"Odesílání zprávy"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Zpráva byla odeslána"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobilní datové přenosy jsou vypnuty. Zkontrolujte svá nastavení."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"V režimu Letadlo zprávy nelze odeslat."</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Zprávu nelze odeslat"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Zpráva byla stažena"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobilní datové přenosy jsou vypnuty. Zkontrolujte svá nastavení."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"V režimu Letadlo zprávy nelze stahovat"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Zprávu nelze stáhnout"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nula"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Jedna"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dvě"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tři"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Čtyři"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Pět"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Šest"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sedm"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Osm"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Devět"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Zprávu prostřednictvím operátora <xliff:g id="CARRIERNAME">%1$s</xliff:g> nelze odeslat. Chyba <xliff:g id="ERRORCODE">%2$d</xliff:g>."</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Zprávu prostřednictvím neznámého operátora nelze odeslat. Chyba <xliff:g id="ERRORCODE">%1$d</xliff:g>."</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Zpráva nebyla odeslána: služba není v síti aktivována"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Zpráva nebyla odeslána: neplatná cílová adresa"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Zpráva nebyla odeslána: neplatná zpráva"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Zpráva nebyla odeslána: nepodporovaný obsah"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Zpráva nebyla odeslána: nepodporovaná zpráva"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Zpráva nebyla odeslána, protože je příliš velká"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nová zpráva"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Zobrazit"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Obrázek"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Vhodná aplikace nebyla nalezena."</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Odebrat příjemce"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nová zpráva"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Zrušit"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Upravit přístupový bod"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nenastaveno"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Název"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"Název přístupového bodu (APN)"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy server pro MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Port pro MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Typ APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Smazat APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nový název přístupového bodu (APN)"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Uložit"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Zahodit"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Pole Název nesmí být prázdné."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Název přístupového bodu (APN) nesmí být prázdný."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Pole MCC musí obsahovat alespoň 3 číslice."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Pole MNC musí obsahovat 2 nebo 3 číslice."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Obnovování výchozích nastavení (APN)"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Obnovit výchozí"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Obnovení výchozích nastavení APN bylo dokončeno."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Bez názvu"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Názvy přístupových bodů"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Názvy přístupových bodů (APN)"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nový název přístupového bodu (APN)"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Nastavení názvu přístupového budu pro tohoto uživatele není dostupné."</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Kopírovat do schránky?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopírovat"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"na SIM kartu <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Obecné"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Rozšířená nastavení"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Obecná nastavení"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Rozšířená nastavení"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM karta <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Odesílat všem příjemcům jednotlivé zprávy SMS. Odpovědi dostanete pouze vy."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Odeslat všem příjemcům jednu zprávu MMS"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Neznámé číslo"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nová zpráva"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nová zpráva"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Výběr SIM karty"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Výběr SIM karty (vybrána SIM karta <xliff:g id="SIM_0">%1$s</xliff:g>)"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Upravit předmět"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Vybrat SIM kartu nebo upravit předmět"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Zvuk zaznamenáte klepnutím a podržením"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Zahájit novou konverzaci"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"SMS a MMS"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Seznam SMS a MMS"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"SMS a MMS"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nová zpráva"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Seznam konverzací"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Načítání konverzací"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Načítání zpráv"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Zobrazit další konverzace"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Zobrazit další zprávy"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Konverzace byla smazána"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Konverzace byla smazána. Klepnutím zobrazíte jinou konverzaci v aplikaci SMS a MMS."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Zablokováno"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Odblokováno"</string>
-    <string name="db_full" msgid="8459265782521418031">"V úložišti je málo místa. Některá data mohou být ztracena."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Vybrat přílohy"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Potvrďte výběr"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Vybráno: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Odstraňte prosím alespoň jednu přílohu a zkuste to znovu."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Zprávu můžete zkusit odeslat, avšak může se stát, že nebude doručena, dokud neodstraníte alespoň jednu přílohu."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Ve zprávě lze odeslat pouze jedno video. Odstraňte ostatní videa a zkuste to znovu."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Načtení přílohy v aplikaci SMS a MMS se nezdařilo."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Přesto odeslat"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Konverzaci nelze zahájit"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Vybráno: <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-da/arrays.xml b/res/values-da/arrays.xml
deleted file mode 100644
index d40336a..0000000
--- a/res/values-da/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"intet emne"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ja"</item>
-    <item msgid="6049132459802288033">"Nej"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Haha"</item>
-    <item msgid="2611328818571146775">"Tak"</item>
-    <item msgid="4881335087096496747">"Jeg er enig"</item>
-    <item msgid="2422296858597420738">"Sådan!"</item>
-    <item msgid="4805581752819452687">"Er på vej"</item>
-    <item msgid="4746700499431366214">"Jeg vender tilbage til dig lidt senere"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
deleted file mode 100644
index 6d441da..0000000
--- a/res/values-da/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Beskeder"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Beskeder"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Vælg en samtale"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Indstillinger"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Send besked"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Tilføj en vedhæftet fil"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Hjælp"</string>
-    <string name="welcome" msgid="2857560951820802321">"Velkommen"</string>
-    <string name="skip" msgid="7238879696319945853">"Spring over"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Næste &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Næste"</string>
-    <string name="exit" msgid="1905187380359981199">"Afslut"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Indstillinger &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Indstillinger"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Beskeder skal have tilladelse for at kunne anvende Sms, Telefon og Kontaktpersoner."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Du kan ændre tilladelser i Indstillinger &gt; Apps &gt; Beskeder &gt; Tilladelser."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Du kan ændre tilladelser under Indstillinger, Apps, Beskeder, Tilladelser."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Mest brugte"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Alle kontaktpersoner"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Send til <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Optag billeder eller video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Vælg billeder fra denne enhed"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Optag lyd"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Vælg billede"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Medierne er valgt."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Medierne er fravalgt."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Der er valgt <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"billede <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"billede"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Optag lyd"</string>
-    <string name="action_share" msgid="2143483844803153871">"Del"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Lige nu"</string>
-    <string name="posted_now" msgid="867560789350406701">"Nu"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> min.</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min.</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> timer</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> timer</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> dage</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dage</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> uger</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> uger</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> måneder</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> måneder</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> år</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> år</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Klasse 0-besked"</string>
-    <string name="save" msgid="5081141452059463572">"Gem"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Enheden er ved at løbe tør for plads. Ældre beskeder bliver automatisk slettet for at frigøre plads."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Der er snart ikke mere lagerplads"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Beskeder sender eller modtager muligvis ikke beskeder, før der er mere ledig plads på din enhed."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Begrænset lagerplads til sms. Det kan være nødvendigt at slette beskeder."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Bekræft dit telefonnummer"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Dette engangstrin sikrer, at Beskeder leverer dine gruppebeskeder på korrekt vis."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefonnummer"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Slet alle beskeder med medier"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Slet beskeder, der er mere end <xliff:g id="DURATION">%s</xliff:g> gamle"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Slet automatisk beskeder, der er mere end <xliff:g id="DURATION">%s</xliff:g> gamle"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorer"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Slet alle beskeder, der indeholder medier?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Vil du slette beskeder, der er mere end <xliff:g id="DURATION">%s</xliff:g> gamle?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Vil du slette beskeder, der er ældre end <xliff:g id="DURATION">%s</xliff:g>, og aktiverr automatisk sletning?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> sagde"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Du sagde"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Besked fra <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Du sendte en besked"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Sender…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Ikke sendt. Tryk for at prøve igen."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Ikke sendt. Prøver igen…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Send igen eller slet"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Ring op til alarmcentralen. Din sms-besked kan ikke leveres på nuværende tidspunkt."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Mislykkedes"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Ny MMS-besked til download"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Ny MMS-besked"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Download mislykkedes"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Tryk for at prøve igen"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Tryk for at downloade"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Download eller slet"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Downloader…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Beskeden er udløbet eller ikke tilgængelig"</string>
-    <string name="mms_info" msgid="3402311750134118165">"størrelse: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, udløb: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Beskeden kan ikke sendes. Ugyldig modtager."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Tjenesten er ikke aktiveret på netværket"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Et netværksproblem er skyld i, at afsendelsen mislykkedes"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Beskeden er udløbet eller ikke tilgængelig"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Intet emne)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Ukendt afsender"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Leveret"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Beskeden <xliff:g id="SUBJECT">%1$s</xliff:g> blev ikke downloadet fra <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Databasehandlingen blev ikke udført, fordi hukommelsen er for lille"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Beskeden blev ikke sendt"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Nogle beskeder blev ikke sendt i Beskeder"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> beskeder i <xliff:g id="CONVERSATIONS">%d</xliff:g> samtaler</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> beskeder i <xliff:g id="CONVERSATIONS">%d</xliff:g> samtaler</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Beskeden blev ikke downloadet"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Nogle beskeder blev ikke downloadet i Beskeder"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> beskeder i <xliff:g id="CONVERSATIONS">%d</xliff:g> samtaler</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> beskeder i <xliff:g id="CONVERSATIONS">%d</xliff:g> samtaler</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Beskeden til <xliff:g id="NUMBER">%1$s</xliff:g> blev ikke sendt"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Ring op til alarmcentralen. Din sms-besked til <xliff:g id="NUMBER">%1$s</xliff:g> kan ikke leveres på nuværende tidspunkt."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> nye beskeder</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nye beskeder</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Start"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kameraet er ikke tilgængeligt"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kameraet er ikke tilgængeligt"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Videooptagelse er ikke tilgængelig"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Medie kan ikke gemmes"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Der kan ikke tages billeder"</string>
-    <string name="back" msgid="1477626055115561645">"Tilbage"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arkiveret"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Slet"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arkivér"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Fjern fra arkiv"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Deaktiver underretninger"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Aktivér underretninger"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Tilføj kontaktperson"</string>
-    <string name="action_download" msgid="7786338136368564146">"Download"</string>
-    <string name="action_send" msgid="377635240181672039">"Send"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Slet"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Vil du slette denne besked?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Denne handling kan ikke fortrydes."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Slet"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Vil du slette disse samtaler?</item>
-      <item quantity="other">Vil du slette disse samtaler?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Slet"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Annuller"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Til"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Vælg flere billeder"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Bekræft valg"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+ <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Der kan ikke optages lyd. Prøv igen."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Lyden kan ikke afspilles. Prøv igen."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Lyden kunne ikke gemmes. Prøv igen."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Tryk og hold nede"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Billede"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Lydklip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Visitkort"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Download"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Svar via sms"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Svar via mms"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Besvar"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> deltagere</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> deltagere</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Mig"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakten er blokeret og arkiveret"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontaktpersonen er ikke længere blokeret og er fjernet fra arkivet"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> blev arkiveret"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> er blevet fjernet fra arkivet."</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Underretninger er slået fra"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Underretninger er slået til"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Alt er klart. Tryk på Send igen."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Beskeder blev angivet som standardappen til sms-beskeder."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Kassér vedhæftede filer</item>
-      <item quantity="other">Kassér vedhæftede filer</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Vedhæftet lydfil"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Afspil vedhæftet lydfil"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Sæt på pause"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Besked fra <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Mislykket besked fra <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Besked fra <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Ikke-afsendt besked til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Sender besked til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Mislykket besked til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Besked til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Mislykket besked fra <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Besked fra <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Ikke-afsendt besked til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Sender besked til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Mislykket besked til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Besked til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Mislykket besked. Tryk for at prøve igen."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Samtale med <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Slet emne"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Optag video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Tag et stillbillede"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Tag et billede"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Start videooptagelse"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Skift til kamera i fuld skærm"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Skift mellem front- og bagudvendt kamera"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Stop optagelsen, og vedhæft video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Stands optagelse af video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Billeder i Beskeder"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> billeder blev gemt i albummet \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> billeder blev gemt i albummet \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> videoer blev gemt i albummet \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videoer blev gemt i albummet \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> vedhæftede filer blev gemt i albummet \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> vedhæftede filer blev gemt i albummet \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> vedhæftede filer blev gemt under \"Downloads\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> vedhæftede filer blev gemt under \"Downloads\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> vedhæftede filer blev gemt</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> vedhæftede filer blev gemt</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> vedhæftede filer kunne ikke gemmes</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> vedhæftede filer kunne ikke gemmes</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Den vedhæftede MMS blev gemt"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Indstillinger"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arkiveret"</string>
-    <string name="action_close" msgid="1840519376200478419">"Luk"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"Mms"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avanceret"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Fejlretning"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Underretninger"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Lyd"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Lydløs"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrer"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blokeret"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS-leveringsrapporter"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Anmod om leveringsrapporter for alle de sms-beskeder, du sender"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automatisk hentning"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Hent automatisk mms-beskeder"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Automatisk hentning under roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Hent automatisk mms under roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Gruppebeskeder"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Brug mms til at sende en enkelt besked, når der er flere modtagere"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Standardapp til sms-beskeder"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Standardapp til sms-beskeder"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Dit telefonnummer"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Ukendt"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Lyde for udgående besked"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Gem sms"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Gem rådata fra modtagne sms-beskeder i en fil på et eksternt lager"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Gem mms"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Gem rådata fra modtagne mms-beskeder i en fil på et eksternt lager"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Trådløse alarmer"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Indstillinger for beskeder"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopiér tekst"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Se info"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Slet"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Videresend"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Beskedinfo"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Type: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Sms"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mms"</string>
-    <string name="from_label" msgid="1947831848146564875">"Fra: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Til: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Sendt: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Modtaget: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Emne: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Størrelse: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioritet: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM-kort: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Høj"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Lav"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM-kort <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Skjult afsenderadresse"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Beskeden kan ikke sendes, mens der indlæses vedhæftede filer."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Den vedhæftede fil kunne ikke indlæses. Prøv igen."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Netværket er ikke klar. Prøv igen."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Slet tekst"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Skift mellem indtastning af tekst og tal"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Tilføj flere deltagere"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Bekræft deltagere"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Start en ny samtale"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Vælg dette element"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Afspil video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Personer og valgmuligheder"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Fejlretning"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Personer og valgmuligheder"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Generelt"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Personer i denne samtale"</string>
-    <string name="action_call" msgid="6596167921517350362">"Foretag et opkald"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Send besked"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Send besked&lt;br/&gt;&lt;small&gt;fra <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Send billeder</item>
-      <item quantity="other">Send billeder</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Send lydoptagelser</item>
-      <item quantity="other">Send lydoptagelser</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Send videoer</item>
-      <item quantity="other">Send videoer</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Send visitkort</item>
-      <item quantity="other">Send visitkort</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Send vedhæftede filer</item>
-      <item quantity="other">Send vedhæftede filer</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> vedhæftede filer er klar til at blive sendt</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> vedhæftede filer er klar til at blive sendt</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Send feedback"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Se i Google Play Butik"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Oplysninger om versionen"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Version %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Open source-licenser"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Underretninger"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Grænsen for vedhæftede filer er nået"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Den vedhæftede fil kunne ikke indlæses."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Vil du føje dette nummer til Kontaktpersoner?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Tilføj kontakt"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Emne"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Emne: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Kontaktkortet indlæses"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kontaktkortet kunne ikke indlæses"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Se visitkortet"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersoner</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersoner</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontaktkort"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Fødselsdag"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Noter"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Videresend besked"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Svar"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Sms er slået fra"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Angiv Beskeder som standardappen til sms-beskeder for at sende beskeder"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Angiv Beskeder som standardappen til sms-beskeder"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Skift"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Angiv Beskeder som standardappen til sms-beskeder for at modtage beskeder"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Der er ikke valgt et foretrukket simkort til afsendelse af sms-beskeder"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Denne app er ikke tilladt af enhedens ejer."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Der er for mange deltagere i en samtale"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Ugyldige kontaktpersoner</item>
-      <item quantity="other">Ugyldige kontaktpersoner</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Kamerabilledet kunne ikke indlæses"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Dig: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Kladde"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Når du starter en ny samtale, vises den her"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Arkiverede samtaler vises her"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Indlæser samtaler ..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Billede"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Lydklip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Visitkort"</string>
-    <string name="mms_text" msgid="1528791558806015806">"Mms"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Fortryd"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Prøv igen"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Indtast navnet på en kontaktperson eller et telefonnummer for at starte på en ny besked"</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloker"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloker <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Ophæv blokering af <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Vil du blokere <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Du vil fortsat modtage beskeder fra dette nummer, men du bliver ikke længere underrettet. Denne samtale arkiveres."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blokerede kontakter"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"OPHÆV BLOKERING"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blokerede kontakter"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Vælg billede fra dokumentbiblioteket"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Sender besked"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Beskeden er sendt"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobildata er slået fra. Kontrollér dine indstillinger."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Der kan ikke sendes beskeder i flytilstand"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Beskeden blev ikke sendt"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Beskeden blev downloadet"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobildata er slået fra. Kontrollér dine indstillinger."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Beskeder kan ikke downloades i flytilstand"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Beskeden kunne ikke downloades"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nul"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Et"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"To"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tre"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Fire"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Fem"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Seks"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Syv"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Otte"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Ni"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Der kan ikke sendes en besked med <xliff:g id="CARRIERNAME">%1$s</xliff:g>, fejl <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Der kan ikke sendes en besked med ukendt mobilselskab, fejl <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Vs: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Beskeden blev ikke sendt: Tjenesten er ikke aktiveret på netværket"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Beskeden blev ikke sendt: Destinationsadressen er ugyldig"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Beskeden blev ikke sendt: Beskeden er ugyldig"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Beskeden blev ikke sendt: Indholdet understøttes ikke"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Beskeden blev ikke sendt: Beskeden understøttes ikke"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Beskeden blev ikke sendt, da den er for stor"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Ny besked"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Vis"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Billede"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Vi kunne ikke finde en passende applikation"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Fjern modtager"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Ny besked"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Annuller"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Rediger adgangspunkt"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Ikke angivet"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Navn"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"Adgangspunkt"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS-proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS-port"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Adgangspunktstype"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Slet adgangspunkt"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nyt adgangspunkt"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Gem"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Kassér"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Feltet Navn skal udfyldes."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Du skal angive et adgangspunkt."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Feltet MCC skal indeholde tre cifre."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Feltet MNC skal indeholde to eller tre cifre."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Gendanner standardindstillingerne for adgangspunktet."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Nulstil til standard"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Standardindstillingerne for adgangspunktet er nulstillet."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Ikke-navngivet"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Adgangspunkter"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Adgangspunkter"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nyt adgangspunkt"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Indstillingerne for adgangspunkt (APN) er ikke tilgængelige for denne bruger"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Vil du kopiere til udklipsholder?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopiér"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"til <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Generelt"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avanceret"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Generelle indstillinger"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Avancerede indstillinger"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"Indstillinger for SIM-kortet \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Send individuelle sms-beskeder til alle modtagere. Der kan kun sendes svar til dig"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Send en enkelt mms-besked til alle modtagere"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Ukendt nummer"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Ny besked"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Ny besked."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM-vælger"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> er valgt. SIM-vælger"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Rediger emne"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Vælg SIM-kort, eller rediger emne"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Tryk og hold nede for at optage lyd"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Start en ny samtale"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Beskeder"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Liste i Beskeder"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Beskeder"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Ny besked"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Samtaleliste"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Indlæser samtaler"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Indlæser beskeder"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Se flere samtaler"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Se flere beskeder"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Samtalen er slettet"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Samtalen blev slettet. Tryk for at se en anden samtale i Beskeder."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blokeret"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Blokering fjernet"</string>
-    <string name="db_full" msgid="8459265782521418031">"Der er for lidt lagerplads. Nogle data gemmes muligvis ikke."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Vælg vedhæftede filer"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Bekræft valg"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Der er valgt <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Fjern en eller flere vedhæftede filer, og prøv igen."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Du kan prøve at sende din besked, men den leveres muligvis ikke, medmindre du fjerner en eller flere vedhæftede filer."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Du kan kun sende én video pr besked. Fjern flere videoer, og prøv igen."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Beskeder kunne ikke indlæse den vedhæftede fil."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Send alligevel"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Samtalen kunne ikke startes"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> er valgt"</string>
-</resources>
diff --git a/res/values-de/arrays.xml b/res/values-de/arrays.xml
deleted file mode 100644
index c3e971f..0000000
--- a/res/values-de/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"kein Betreff"</item>
-    <item msgid="272485471009191934">"Kein Betreff"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ja"</item>
-    <item msgid="6049132459802288033">"Nein"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Vielen Dank!"</item>
-    <item msgid="4881335087096496747">"Ich stimme zu."</item>
-    <item msgid="2422296858597420738">"Wunderbar"</item>
-    <item msgid="4805581752819452687">"Bin auf dem Weg."</item>
-    <item msgid="4746700499431366214">"OK, ich melde mich später."</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
deleted file mode 100644
index 4537b8b..0000000
--- a/res/values-de/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"SMS/MMS"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"SMS/MMS"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Konversation auswählen"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Einstellungen"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Nachricht senden"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Anhang hinzufügen"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Hilfe"</string>
-    <string name="welcome" msgid="2857560951820802321">"Willkommen"</string>
-    <string name="skip" msgid="7238879696319945853">"Überspringen"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Weiter &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Weiter"</string>
-    <string name="exit" msgid="1905187380359981199">"Beenden"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Einstellungen &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Einstellungen"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Die SMS/MMS App benötigt Berechtigungen für SMS, Telefon und Kontakte."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Sie können die Berechtigungen unter \"Einstellungen\" &gt; \"Apps\" &gt; \"SMS/MMS\" &gt; \"Berechtigungen\" ändern."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Sie können die Berechtigungen unter \"Einstellungen\" &gt; \"Apps\" &gt; \"SMS/MMS\" &gt; \"Berechtigungen\" ändern."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Häufig genutzte Kontakte"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Alle Kontakte"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"An <xliff:g id="DESTINATION">%s</xliff:g> senden"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Bilder oder Videos aufnehmen"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Bilder von diesem Gerät auswählen"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Audio aufzeichnen"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Foto auswählen"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Die Medien sind ausgewählt."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Die Auswahl der Medien ist aufgehoben."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> ausgewählt"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"Bild: <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"Bild"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Audio aufzeichnen"</string>
-    <string name="action_share" msgid="2143483844803153871">"Teilen"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Gerade eben"</string>
-    <string name="posted_now" msgid="867560789350406701">"Jetzt"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> Stunden</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> Stunde</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> Tage</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> Tag</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Wochen</item>
-      <item quantity="one">eine Woche</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Monate</item>
-      <item quantity="one">ein Monat</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Jahre</item>
-      <item quantity="one">ein Jahr</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Nachricht Klasse 0"</string>
-    <string name="save" msgid="5081141452059463572">"Speichern"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Das Gerät verfügt über wenig Speicherplatz. Die SMS/MMS App löscht ältere Nachrichten automatisch, um Speicherplatz freizugeben."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Der Speicherplatz wird knapp"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Die SMS/MMS App versendet oder empfängt möglicherweise keine Nachrichten, bis mehr Speicherplatz auf Ihrem Gerät zur Verfügung steht."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Geringer SMS-Speicherplatz. Sie müssen eventuell Nachrichten löschen."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Telefonnummer bestätigen"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Mit dieser einmaligen Eingabe stellen Sie sicher, dass die SMS/MMS App Ihre Gruppennachrichten korrekt sendet."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefonnummer"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Alle Nachrichten mit Medien löschen"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Nachrichten löschen, die älter als <xliff:g id="DURATION">%s</xliff:g> sind"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Nachrichten, die älter als <xliff:g id="DURATION">%s</xliff:g> sind, automatisch löschen"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorieren"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Alle Nachrichten mit Medien löschen?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Nachrichten löschen, die älter als <xliff:g id="DURATION">%s</xliff:g> sind?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Nachrichten löschen, die älter als <xliff:g id="DURATION">%s</xliff:g> sind, und automatisches Löschen aktivieren?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> hat Folgendes gesagt:"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Sie haben Folgendes gesagt:"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Nachricht von <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Sie haben eine Nachricht gesendet."</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Nachricht wird gesendet…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Nachricht wurde nicht gesendet. Zum erneuten Senden tippen."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Nachricht wurde nicht gesendet. Neuer Versuch…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Erneut senden oder löschen"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Bitte kontaktieren Sie die Notfalldienste per Sprachanruf. Ihre SMS konnte dieses Mal nicht zugestellt werden."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Fehler"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Neue MMS zum Herunterladen"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Neue MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Fehler beim Download"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Für neuen Versuch hier tippen"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Zum Herunterladen tippen"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Herunterladen oder löschen"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Nachricht wird heruntergeladen…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Nachricht abgelaufen oder nicht verfügbar"</string>
-    <string name="mms_info" msgid="3402311750134118165">"Größe: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, läuft ab: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Nachricht kann nicht gesendet werden. Der Empfänger ist ungültig."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Dienst im Netzwerk nicht aktiviert"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Nachricht kann aufgrund eines Netzwerkproblems nicht gesendet werden."</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Nachricht abgelaufen oder nicht verfügbar"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Kein Betreff)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Unbekannter Absender"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Zugestellt"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Nachricht \"<xliff:g id="SUBJECT">%1$s</xliff:g>\" von <xliff:g id="FROM">%2$s</xliff:g> konnte nicht heruntergeladen werden."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Datenbankoperation konnte aufgrund unzureichenden Speichers nicht abgeschlossen werden."</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Nachricht wurde nicht gesendet."</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Einige Nachrichten in der SMS/MMS App wurden nicht gesendet."</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> Nachrichten in <xliff:g id="CONVERSATIONS">%d</xliff:g> Unterhaltungen</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> Nachricht in einer Unterhaltung</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Nachricht nicht heruntergeladen"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Einige Nachrichten in der SMS/MMS App wurden nicht heruntergeladen."</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> Nachrichten in <xliff:g id="CONVERSATIONS">%d</xliff:g> Unterhaltungen</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> Nachricht in einer Unterhaltung</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"SMS an <xliff:g id="NUMBER">%1$s</xliff:g> nicht gesendet"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Bitte kontaktieren Sie die Notfalldienste per Sprachanruf. Ihre SMS an <xliff:g id="NUMBER">%1$s</xliff:g> konnte dieses Mal nicht zugestellt werden."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> neue Nachrichten</item>
-      <item quantity="one">Neue Nachricht</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Starten"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera nicht verfügbar"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera nicht verfügbar"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Videoaufnahme nicht verfügbar"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Medien können nicht gespeichert werden."</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Keine Bildaufnahme möglich"</string>
-    <string name="back" msgid="1477626055115561645">"Zurück"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archiviert"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Löschen"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archivieren"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Aus Archiv entfernen"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Benachrichtigungen deaktivieren"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Benachrichtigungen aktivieren"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Kontakt hinzufügen"</string>
-    <string name="action_download" msgid="7786338136368564146">"Herunterladen"</string>
-    <string name="action_send" msgid="377635240181672039">"Senden"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Löschen"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Diese Nachricht löschen?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Diese Aktion kann nicht rückgängig gemacht werden."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Löschen"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Diese Unterhaltungen löschen?</item>
-      <item quantity="one">Diese Unterhaltung löschen?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Löschen"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Abbrechen"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"An"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Mehrere Bilder auswählen"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Auswahl bestätigen"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Die Audioaufzeichnung ist nicht möglich. Bitte versuchen Sie es erneut."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Die Audiowiedergabe ist nicht möglich. Bitte versuchen Sie es erneut."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Die Audionachricht konnte nicht gespeichert werden. Bitte versuchen Sie es erneut."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Berühren und halten"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Bild"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audioclip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kontaktkarte"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Herunterladen"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Per SMS antworten"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Antwort per MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Antworten"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> Teilnehmer</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> Teilnehmer</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ich"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakt blockiert und archiviert"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Blockierung des Kontakts aufgehoben &amp; Kontakt aus dem Archiv entfernt"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> archiviert"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> aus dem Archiv entfernt"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Benachrichtigungen deaktiviert"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Benachrichtigungen aktiviert"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Bereit. Zum erneuten Senden tippen."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Die SMS/MMS App wurde als Standard-SMS-App festgelegt."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Anhänge verwerfen</item>
-      <item quantity="one">Anhang verwerfen</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Audioanhang"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Audioanhang wiedergeben"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pausieren"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Nachricht von <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Fehler bei Nachricht von <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Nachricht von <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Nicht gesendete Nachricht an <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Nachricht wird gesendet an <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Fehler bei Nachricht an <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Nachricht an <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Fehler bei Nachricht von <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Nachricht von <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Nicht gesendete Nachricht an <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Nachricht wird gesendet an <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Fehler bei Nachricht an <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Nachricht an <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Uhrzeit: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Fehler bei Nachricht. Zum Wiederholen tippen."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Unterhaltung mit <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Betreff löschen"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Video aufnehmen"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Standbild aufnehmen"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Bild aufnehmen"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Videoaufnahme starten"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Zur Vollbildkamera wechseln"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Zwischen Kamera auf Vorder- und Rückseite wechseln"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Aufnahme beenden und Video anhängen"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Videoaufzeichnung stoppen"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotos in der SMS/MMS App"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> Fotos im Album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" gespeichert</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> Foto im Album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" gespeichert</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> Videos im Album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" gespeichert</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> Video im Album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" gespeichert</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> Anhänge im Album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" gespeichert</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> Anhang im Album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" gespeichert</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> Anhänge in \"Downloads\" gespeichert</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> Anhang in \"Downloads\" gespeichert</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> Anhänge wurden gespeichert.</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> Anhang wurde gespeichert.</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> Anhänge konnten nicht gespeichert werden.</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> Anhang konnte nicht gespeichert werden.</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS-Anhang gespeichert"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Einstellungen"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archiviert"</string>
-    <string name="action_close" msgid="1840519376200478419">"Schließen"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Erweitert"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Fehlersuche"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Benachrichtigungen"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Ton"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Lautlos"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrieren"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blockiert"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS-Zustellberichte"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Zustellbestätigung für jede gesendete SMS anfordern"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automatisch abrufen"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS-Nachrichten automatisch abrufen"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Automatischer Roaming-Abruf"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"MMS beim Roaming automatisch abrufen"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"SMS/MMS an Gruppe senden"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Verwenden Sie MMS, um eine einzelne Nachricht an mehrere Empfänger zu versenden."</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Standard-SMS-App"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Standard-SMS-App"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Meine Telefonnummer"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Unbekannt"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Töne für ausgehende Nachrichten"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS sichern"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Erhaltene SMS-Rohdaten in externer Speicherdatei sichern"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS sichern"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Erhaltene MMS-Rohdaten in externer Speicherdatei sichern"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Cell Broadcast-Warnungen"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Nachrichtenoptionen"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Text kopieren"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Details ansehen"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Löschen"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Weiterleiten"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Nachrichtendetails"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Typ: "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"MMS"</string>
-    <string name="from_label" msgid="1947831848146564875">"Von: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"An: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Gesendet: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Empfangen: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Betreff: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Größe: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priorität: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Hoch"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Niedrig"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Ausgeblendete Senderadresse"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Die Nachricht kann nicht gesendet werden, weil die Anhänge noch nicht geladen wurden."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Anhang kann nicht geladen werden. Bitte versuchen Sie es erneut."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Netzwerk ist nicht bereit. Bitte versuchen Sie es erneut."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Text löschen"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Zwischen Text- und Zifferneingabe wechseln"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Weitere Teilnehmer hinzufügen"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Teilnehmer bestätigen"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Neue Unterhaltung starten"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Dieses Element auswählen"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Video abspielen"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Personen &amp; Optionen"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Debuggen"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Personen &amp; Optionen"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Allgemein"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Personen in dieser Konversation"</string>
-    <string name="action_call" msgid="6596167921517350362">"Anrufen"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Nachricht senden"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Nachricht senden&lt;br/&gt;&lt;small&gt;von <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Fotos senden</item>
-      <item quantity="one">Foto senden</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Audioaufzeichnungen senden</item>
-      <item quantity="one">Audioaufzeichnung senden</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Videos senden</item>
-      <item quantity="one">Video senden</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Kontaktkarten senden</item>
-      <item quantity="one">Kontaktkarte senden</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Anhänge senden</item>
-      <item quantity="one">Anhang senden</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> Anhänge zum Senden bereit</item>
-      <item quantity="one">Ein Anhang zum Senden bereit</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Feedback geben"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Im Google Play Store ansehen"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Versionsinformationen"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Version: %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Open-Source-Lizenzen"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Benachrichtigungen"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Anhanglimit erreicht"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Anhang konnte nicht geladen werden"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Zu Kontakten hinzufügen?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Kontakt hinzufügen"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Betreff"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Betreff: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Kontaktkarte wird geladen."</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kontaktkarte kann nicht geladen werden."</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Kontaktkarte ansehen"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> Kontakte</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> Kontakt</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontaktkarten"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Geburtstag"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notizen"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Nachricht weiterleiten"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Antworten"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS deaktiviert"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Um Nachrichten zu senden, legen Sie die SMS/MMS App als Standard-SMS-App fest."</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Legen Sie die SMS/MMS App als Standard-SMS-App fest."</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Ändern"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Um Nachrichten zu erhalten, legen Sie die SMS/MMS App als Standard-SMS-App fest."</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Keine bevorzugte SIM für das Senden von SMS ausgewählt"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Diese App wird vom Geräteeigentümer nicht zugelassen."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Zu viele Teilnehmer in der Unterhaltung"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Ungültige Kontakte</item>
-      <item quantity="one">Ungültiger Kontakt</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Kamerabild kann nicht geladen werden."</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Sie: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Entwurf"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Wenn Sie eine neue Unterhaltung beginnen, wird diese hier angezeigt"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Archivierte Unterhaltungen erscheinen hier."</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Unterhaltungen werden geladen…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Bild"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audioclip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kontaktkarte"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Rückgängig"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Erneut versuchen"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Geben Sie einen Kontaktnamen oder eine Telefonnummer ein, um eine neue Nachricht zu beginnen."</string>
-    <string name="action_block" msgid="9032076625645190136">"Blockieren"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> blockieren"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Blockierung aufheben für <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> blockieren?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Sie erhalten weiterhin Nachrichten von dieser Nummer, werden jedoch nicht mehr benachrichtigt. Diese Unterhaltung wird archiviert."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blockierte Kontakte"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"Blockierung aufheben"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blockierte Kontakte"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Bild aus der Dokumentenbibliothek auswählen"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Nachricht wird gesendet"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Nachricht gesendet"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobilfunkdaten sind deaktiviert. Bitte überprüfen Sie Ihre Einstellungen."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Im Flugmodus können keine Nachrichten gesendet werden."</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Die Nachricht konnte nicht gesendet werden."</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Nachricht heruntergeladen"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobilfunkdaten sind deaktiviert. Bitte überprüfen Sie Ihre Einstellungen."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Im Flugmodus können keine Nachrichten heruntergeladen werden."</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Die Nachricht konnte nicht heruntergeladen werden."</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Null"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Eins"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Zwei"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Drei"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Vier"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Fünf"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Sechs"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sieben"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Acht"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Neun"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Nachricht kann nicht mit <xliff:g id="CARRIERNAME">%1$s</xliff:g> gesendet werden. Fehler <xliff:g id="ERRORCODE">%2$d</xliff:g>."</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Nachricht kann nicht mit einem unbekannten Mobilfunkanbieter gesendet werden. Fehler <xliff:g id="ERRORCODE">%1$d</xliff:g>."</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Nachricht wurde nicht gesendet: Der Dienst ist im Netzwerk nicht aktiviert."</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Nachricht nicht gesendet: ungültige Zieladresse"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Nachricht nicht gesendet: ungültige Nachricht"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Nachricht nicht gesendet: nicht unterstützter Inhalt"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Nachricht nicht gesendet: nicht unterstützte Nachricht"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Nachricht nicht gesendet: zu groß"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Neue Nachricht"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Ansehen"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Bild"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Keine geeignete App gefunden"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Empfänger entfernen"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Neue Nachricht"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Abbrechen"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Zugangspunkt bearbeiten"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nicht definiert"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Name"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS-Proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS-Port"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN-Typ"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN löschen"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Neuer APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Speichern"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Verwerfen"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Das Namensfeld darf nicht leer sein."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN darf nicht leer sein."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Das MCC-Feld muss 3 Zeichen enthalten."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Das MNC-Feld muss 2 oder 3 Zeichen enthalten."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Standard-APN-Einstellungen werden wiederhergestellt"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Auf Standard zurücksetzen"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Zurücksetzen auf Standard-APN-Einstellungen abgeschlossen"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Unbenannt"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Zugriffspunktnamen"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Neuer APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Die Einstellungen für den Zugangspunkt sind für diesen Nutzer nicht verfügbar."</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"In Zwischenablage kopieren?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopieren"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"an <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Allgemein"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Erweitert"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Allgemeine Einstellungen"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Erweiterte Einstellungen"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Einzelne SMS-Nachrichten an alle Empfänger senden. Die Antworten erhalten nur Sie."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Einzelne MMS an alle Empfänger senden"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Unbekannte Nummer"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Neue Nachricht"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Neue Nachricht"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM-Auswahl"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> ausgewählt, SIM-Auswahl"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Betreff bearbeiten"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM auswählen oder Betreff bearbeiten"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Für Audioaufnahme berühren und halten"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Neue Unterhaltung starten"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"SMS/MMS"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Liste der Unterhaltungen"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Nachricht"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Neue Nachricht"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Konversationsliste"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Unterhaltungen werden geladen"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Nachrichten werden geladen"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Weitere Unterhaltungen anzeigen"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Weitere Nachrichten ansehen"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Konversation gelöscht"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Unterhaltung gelöscht. Tippen Sie hier, um eine andere Unterhaltung zu sehen."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blockiert"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Blockierung aufgehoben"</string>
-    <string name="db_full" msgid="8459265782521418031">"Wenig freier Speicherplatz. Einige Daten gehen möglicherweise verloren."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Anhänge auswählen"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Auswahl bestätigen"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ausgewählt"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Bitte entfernen Sie mindestens einen Anhang und versuchen Sie es erneut."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Sie können versuchen, die Nachricht zu senden, sie wird jedoch möglicherweise nicht zugestellt, wenn Sie nicht mindestens einen Anhang entfernen."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Pro Nachricht kann nur ein Video gesendet werden. Bitte entfernen Sie überzählige Videos und versuchen Sie es erneut."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Die SMS/MMS App konnte den Anhang nicht laden."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Trotzdem senden"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Die Unterhaltung konnte nicht gestartet werden."</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> ausgewählt"</string>
-</resources>
diff --git a/res/values-el/arrays.xml b/res/values-el/arrays.xml
deleted file mode 100644
index 280d8e9..0000000
--- a/res/values-el/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"χωρίς θέμα"</item>
-    <item msgid="272485471009191934">"χωρίς θέμα"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ναι"</item>
-    <item msgid="6049132459802288033">"Όχι"</item>
-    <item msgid="3084376867445867895">"ΟΚ"</item>
-    <item msgid="3155097332660174689">"Χαχα"</item>
-    <item msgid="2611328818571146775">"Σας ευχαριστούμε"</item>
-    <item msgid="4881335087096496747">"Συμφωνώ"</item>
-    <item msgid="2422296858597420738">"Ωραία"</item>
-    <item msgid="4805581752819452687">"Έρχομαι"</item>
-    <item msgid="4746700499431366214">"Εντάξει, θα επικοινωνήσω μαζί σου αργότερα"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
deleted file mode 100644
index d74a84b..0000000
--- a/res/values-el/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Ανταλλαγή μηνυμάτων"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Ανταλλαγή μηνυμάτων"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Επιλογή συνομιλίας"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Ρυθμίσεις"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Αποστολή μηνύματος"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Προσθήκη συνημμένου αρχείου"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Βοήθεια"</string>
-    <string name="welcome" msgid="2857560951820802321">"Καλώς ήρθατε"</string>
-    <string name="skip" msgid="7238879696319945853">"Παράλειψη"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Επόμενο &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Επόμενο"</string>
-    <string name="exit" msgid="1905187380359981199">"Έξοδος"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Ρυθμίσεις &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Ρυθμίσεις"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Η Ανταλλαγή μηνυμάτων χρειάζεται άδεια για SMS, Τηλέφωνο και Επαφές."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Μπορείτε να αλλάξετε τα δικαιώματα στις Ρυθμίσεις &gt; Εφαρμογές &gt; Ανταλλαγή μηνυμάτων &gt; Δικαιώματα."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Μπορείτε να αλλάξετε τα δικαιώματα στις Ρυθμίσεις, Εφαρμογές, Μηνύματα, Δικαιώματα."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Συχνή επικοινωνία"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Όλες οι επαφές"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Αποστολή σε <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Λήψη εικόνων ή βίντεο"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Επιλέξτε εικόνες από αυτήν τη συσκευή"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Ηχογράφηση"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Επιλογή φωτογραφίας"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Το μέσο είναι επιλεγμένο."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Το μέσο δεν είναι επιλεγμένο."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> επιλεγμένα"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"εικόνα <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"εικόνα"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Ηχογράφηση"</string>
-    <string name="action_share" msgid="2143483844803153871">"Κοινή χρήση"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Μόλις τώρα"</string>
-    <string name="posted_now" msgid="867560789350406701">"Τώρα"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> λεπτά</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> λεπτό</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ώρες</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ώρα</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ημέρες</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ημέρα</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> εβδομάδες</item>
-      <item quantity="one">μία εβδομάδα</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> μήνες</item>
-      <item quantity="one">ένας μήνας</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> έτη</item>
-      <item quantity="one">ένα έτος</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Μήνυμα κλάσης 0"</string>
-    <string name="save" msgid="5081141452059463572">"Αποθήκευση"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Ο αποθηκευτικός χώρος της συσκευής είναι περιορισμένος. Η Ανταλλαγή μηνυμάτων θα διαγράψει αυτόματα τα παλαιότερα μηνύματα για να απελευθερώσει χώρο."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Ο χώρος αποθήκευσης εξαντλείται"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Η Ανταλλαγή μηνυμάτων μπορεί να μην κάνει αποστολή ή λήψη μηνυμάτων μέχρι να ελευθερώσετε περισσότερο χώρο στη συσκευή σας."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Περιορισμένος αποθηκευτικός χώρος SMS. Μπορεί να χρειαστεί να διαγράψετε μηνύματα."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Επιβεβαιώστε τον αριθμό τηλεφώνου σας"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Αυτό το μοναδικό βήμα θα εξασφαλίσει ότι η Ανταλλαγή μηνυμάτων θα παραδώσει σωστά τα ομαδικά μηνύματά σας."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Αριθμός τηλεφώνου"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Διαγραφή όλων των μηνυμάτων με πολυμέσα"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Διαγραφή μηνυμάτων πριν από τις <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Αυτόματη διαγραφή των μηνυμάτων πριν από <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Παράβλεψη"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Να γίνει διαγραφή όλων των μηνυμάτων που περιέχουν πολυμέσα;"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Να γίνει διαγραφή των μηνυμάτων πριν από τις <xliff:g id="DURATION">%s</xliff:g>;"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Να γίνει αυτόματη διαγραφή των μηνυμάτων πριν από <xliff:g id="DURATION">%s</xliff:g> και ενεργοποίηση της αυτόματης διαγραφής;"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"Ο χρήστης <xliff:g id="SENDER">%s</xliff:g> είπε"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Είπατε"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Μήνυμα από το χρήστη <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Στείλατε ένα μήνυμα"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Αποστολή…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Δεν εστάλη. Αγγίξτε για να δοκιμάσετε ξανά."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Δεν εστάλη. Επανάληψη…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Εκ νέου αποστολή ή διαγραφή"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Κάντε μια φωνητική κλήση στις υπηρεσίες έκτακτης ανάγκης. Δεν ήταν δυνατή η παράδοση του μηνύματος κειμένου σας αυτήν τη φορά."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Αποτυχία"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Νέο μήνυμα MMS για λήψη"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Νέο μήνυμα MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Δεν ήταν δυνατή η λήψη"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Αγγίξτε για να δοκιμάσετε ξανά"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Αγγίξτε για λήψη"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Λήψη ή διαγραφή"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Λήψη…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Το μήνυμα έληξε ή δεν είναι διαθέσιμο"</string>
-    <string name="mms_info" msgid="3402311750134118165">"μέγεθος: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, λήξη: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Δεν είναι δυνατή η αποστολή. Ο παραλήπτης δεν είναι έγκυρος."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Η υπηρεσία δεν έχει ενεργοποιηθεί στο δίκτυο"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Δεν ήταν δυνατή η αποστολή λόγω προβλήματος στο δίκτυο"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Το μήνυμα έληξε ή δεν είναι διαθέσιμο."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Χωρίς θέμα)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Άγνωστος αποστολέας"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Παραδόθηκε"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Δεν ήταν δυνατή η λήψη του μηνύματος <xliff:g id="SUBJECT">%1$s</xliff:g> από <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Δεν ήταν δυνατή η ολοκλήρωση της λειτουργίας της βάσης δεδομένων λόγω ανεπαρκούς μνήμης"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Το μήνυμα δεν εστάλη"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Ορισμένα μηνύματα δεν εστάλησαν στην Ανταλλαγή μηνυμάτων"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> μηνύματα σε <xliff:g id="CONVERSATIONS">%d</xliff:g> συνομιλίες</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> μηνύματα σε μία συνομιλία</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Δεν έγινε λήψη του μηνύματος"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Δεν έγινε λήψη ορισμένων μηνυμάτων στην Ανταλλαγή μηνυμάτων"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> μηνύματα σε <xliff:g id="CONVERSATIONS">%d</xliff:g> συνομιλίες</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> μηνύματα σε μία συνομιλία</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Το μήνυμα στον αριθμό <xliff:g id="NUMBER">%1$s</xliff:g> δεν εστάλη"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Κάντε μια φωνητική κλήση στις υπηρεσίες έκτακτης ανάγκης. Δεν ήταν δυνατή η παράδοση του μηνύματος κειμένου σας στον αριθμό <xliff:g id="NUMBER">%1$s</xliff:g> αυτήν τη φορά."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> νέα μηνύματα</item>
-      <item quantity="one">Νέο μήνυμα</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Έναρξη"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Η φωτογραφική μηχανή δεν είναι διαθέσιμη"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Η φωτογραφική μηχανή δεν είναι διαθέσιμη"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Η εγγραφή βίντεο δεν είναι διαθέσιμη"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Δεν είναι δυνατή η αποθήκευση πολυμέσων"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Δεν είναι δυνατή η λήψη φωτογραφίας"</string>
-    <string name="back" msgid="1477626055115561645">"Πίσω"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Αρχειοθετημένο"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Διαγραφή"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Αρχειοθέτηση"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Κατάργηση αρχειοθέτησης"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Απενεργοποίηση ειδοποιήσεων"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Ενεργοποίηση ειδοποιήσεων"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Προσθήκη επαφής"</string>
-    <string name="action_download" msgid="7786338136368564146">"Λήψη"</string>
-    <string name="action_send" msgid="377635240181672039">"Αποστολή"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Διαγραφή"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Να διαγραφεί αυτό το μήνυμα;"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Δεν είναι δυνατή η αναίρεση αυτής της ενέργειας."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Διαγραφή"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Διαγραφή αυτών των συνομιλιών;</item>
-      <item quantity="one">Διαγραφή αυτής της συνομιλίας;</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Διαγραφή"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Ακύρωση"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Προς"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Επιλογή πολλαπλών εικόνων"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Επιβεβαίωση επιλογής"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Δεν είναι δυνατή η αποθήκευση ήχου. Δοκιμάστε ξανά."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Δεν είναι δυνατή η αναπαραγωγή ήχου. Δοκιμάστε ξανά."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Δεν ήταν δυνατή η αποθήκευση ήχου. Δοκιμάστε ξανά."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Άγγιγμα &amp; κράτημα"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Εικόνα"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Κλιπ ήχου"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Βίντεο"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Κάρτα επικοινωνίας"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Λήψη"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Απάντηση μέσω SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Απάντηση μέσω MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Απάντηση"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> συμμετέχοντες</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> συμμετέχων</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Εγώ"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Η επαφή αποκλείστηκε και αρχειοθετήθηκε"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Έγινε κατάργηση αποκλεισμού και αρχειοθέτησης της επαφής"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Έχουν αρχειοθετηθεί <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> αφαιρέθηκαν από το αρχείο"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Οι ειδοποιήσεις απενεργοποιήθηκαν"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Οι ειδοποιήσεις ενεργοποιήθηκαν"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Έχουν ρυθμιστεί όλα. Αγγίξτε ξανά την επιλογή \"Αποστολή\"."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Η Ανταλλαγή μηνυμάτων ορίστηκε επιτυχώς ως η προεπιλεγμένη εφαρμογή SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Απόρριψη συνημμένων</item>
-      <item quantity="one">Απόρριψη συνημμένου</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Συνημμένο ήχου"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Αναπαραγωγή συνημμένου ήχου"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Παύση"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Μήνυμα από <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Αποτυχία μηνύματος από <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Μήνυμα από <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Μη απεσταλμένο μήνυμα προς <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Αποστολή μηνύματος προς <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Αποτυχία μηνύματος προς <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Μήνυμα προς <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Αποτυχία μηνύματος από <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Μήνυμα από <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Μη απεσταλμένο μήνυμα προς <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Αποστολή μηνύματος σε <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Αποτυχία μηνύματος προς <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Μήνυμα προς <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ώρα: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Αποτυχία μηνύματος. Αγγίξτε για επανάληψη."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Συνομιλία με <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Διαγραφή θέματος"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Λήψη βίντεο"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Τραβήξτε μια στατική εικόνα"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Τραβήξτε μια φωτογραφία"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Έναρξη εγγραφής βίντεο"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Εναλλαγή σε κάμερα πλήρους οθόνης"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Εναλλαγή μεταξύ μπροστινής και της πίσω φωτογραφικής μηχανής"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Διακοπή εγγραφής και επισύναψη βίντεο"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Διακοπή εγγραφής βίντεο"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Φωτογραφίες Ανταλλαγής μηνυμάτων"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> φωτογραφίες αποθηκεύτηκαν στο λεύκωμα \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> φωτογραφία αποθηκεύτηκε στο λεύκωμα \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> βίντεο αποθηκεύτηκαν στο λεύκωμα \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> βίντεο αποθηκεύτηκε στο λεύκωμα \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> συνημμένα αποθηκεύτηκαν στο λεύκωμα \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> συνημμένο αποθηκεύτηκε στο λεύκωμα \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> συνημμένα αποθηκεύτηκαν στις \"Λήψεις\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> συνημμένο αποθηκεύτηκε στις \"Λήψεις\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">Αποθηκεύτηκε <xliff:g id="QUANTITY_1">%d</xliff:g> συνημμένων αρχείων</item>
-      <item quantity="one">Αποθηκεύτηκε <xliff:g id="QUANTITY_0">%d</xliff:g> συνημμένο αρχείο</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Δεν ήταν δυνατή η αποθήκευση <xliff:g id="QUANTITY_1">%d</xliff:g> συνημμένων αρχείων</item>
-      <item quantity="one">Δεν ήταν δυνατή η αποθήκευση <xliff:g id="QUANTITY_0">%d</xliff:g> συνημμένου αρχείου</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Αποθηκευμένο συνημμένο MMS"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Ρυθμίσεις"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Αρχειοθετημένο"</string>
-    <string name="action_close" msgid="1840519376200478419">"Κλείσιμο"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Σύνθετες ρυθμίσεις"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Εντοπισμός σφαλμάτων"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Ειδοποιήσεις"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Ήχος"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Σίγαση"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Δόνηση"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Αποκλεισμένο"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Αναφορές παράδοσης SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Αίτηση αναφοράς παράδοσης για κάθε SMS που στέλνετε"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Αυτόματη ανάκτηση"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Αυτόματη ανάκτηση μηνυμάτων MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Αυ/τη ανάκτηση περιαγ."</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Αυτόματη ανάκτηση MMS κατά την περιαγωγή"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Ομαδική ανταλλαγή μηνυμάτων"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Χρησιμοποιήστε το MMS για να στείλετε ένα μήνυμα σε πολλούς παραλήπτες"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Προεπιλεγμένη εφαρμογή SMS"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Προεπιλεγμένη εφαρμογή SMS"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Ο αριθμός τηλεφώνου σας"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Άγνωστo"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Ήχοε εξερχόμενου μηνύματος"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Απόρριψη SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Απόρριψη μη επεξεργασμένων δεδομένων ληφθέντων SMS σε αρχείο εξωτερικού αποθηκευτικού χώρου"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Απόρριψη MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Απόρριψη μη επεξεργασμένων δεδομένων ληφθέντων MMS σε αρχείο εξωτερικού αποθηκευτικού χώρου"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Ασύρματες ειδοποιήσεις"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Επιλογές μηνύματος"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Αντιγραφή κειμένου"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Προβολή λεπτομερειών"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Διαγραφή"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Προώθηση"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Λεπτομέρειες μηνύματος"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Τύπος: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Μήνυμα κειμένου"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Μήνυμα πολυμέσων"</string>
-    <string name="from_label" msgid="1947831848146564875">"Από: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Προς: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Εστάλη: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Ελήφθη: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Θέμα: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Μέγεθος: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Προτεραιότητα: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Υψηλή"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Κανονική"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Χαμηλή"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Διεύθυνση κρυφού αποστολέα"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Δεν είναι δυνατή η αποστολή του μηνύματος ενώ φορτώνουν τα συνημμένα."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Δεν είναι δυνατή η φόρτωση της επισύναψης. Δοκιμάστε ξανά."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Το δίκτυο δεν είναι έτοιμο. Δοκιμάστε ξανά."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Διαγραφή κειμένου"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Εναλλαγή μεταξύ εισαγωγής κειμένου και αριθμών"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Προσθήκη περισσότερων συμμετεχόντων"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Επιβεβαίωση συμμετεχόντων"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Έναρξη νέας συνομιλίας"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Επιλέξτε αυτό το στοιχείο"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Αναπαραγωγή βίντεο"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Άτομα και επιλογές"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Εντοπισμός σφαλμάτων"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Άτομα και επιλογές"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Γενικά"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Άτομα σε αυτήν τη συνομιλία"</string>
-    <string name="action_call" msgid="6596167921517350362">"Πραγματοποίηση κλήσης"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Αποστολή μηνύματος"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Αποστολή μηνύματος&lt;br/&gt;&lt;small&gt;από <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Αποστολή φωτογραφιών</item>
-      <item quantity="one">Αποστολή φωτογραφίας</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Αποστολή αρχείων ήχου</item>
-      <item quantity="one">Αποστολή αρχείου ήχου</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Αποστολή αρχείων βίντεο</item>
-      <item quantity="one">Αποστολή αρχείου βίντεο</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Αποστολή καρτών επαφών</item>
-      <item quantity="one">Αποστολή κάρτας επαφής</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Αποστολή συνημμένων</item>
-      <item quantity="one">Αποστολή συνημμένου</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> συνημμένα έτοιμα για αποστολή</item>
-      <item quantity="one">Ένα συνημμένο έτοιμο για αποστολή</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Αποστολή σχολίων"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Προβολή στο Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Πληροφορίες έκδοσης"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Έκδοση %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Άδειες λογισμικού ανοικτού κώδικα"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Ειδοποιήσεις"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Συμπλήρωση ορίου συνημμένων"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Αποτυχία φόρτωσης συνημμένου."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Προσθήκη στις επαφές;"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Προσθήκη επαφής"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Θέμα"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Θέμα: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Φόρτωση κάρτας επαφής"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Δεν ήταν δυνατή η φόρτωση της κάρτας επαφής"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Προβολή κάρτας επαφής"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> επαφές</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> επαφή</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Κάρτες επαφών"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Γενέθλια"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Σημειώσεις"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Προώθηση μηνύματος"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Απάντηση"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Τα SMS απενεργοποιήθηκαν"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Για αποστολή, ορίστε την Ανταλλαγή μηνυμάτων ως προεπιλεγμένη εφαρμογή SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Ορισμός Ανταλλαγής μηνυμάτων ως προεπιλεγμένης εφαρμογής SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Αλλαγή"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Για να λαμβάνετε μηνύματα, ορίστε την Ανταλλαγή μηνυμάτων ως προεπιλεγμένη εφαρμογή SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Δεν έχει επιλεγεί προτιμώμενη SIM για την αποστολή μηνυμάτων SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Αυτή η εφαρμογή δεν επιτρέπεται από τον κάτοχο της συσκευής."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ΟΚ"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Πάρα πολλοί συμμετέχοντες σε μια συνομιλία"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Μη έγκυρες επαφές</item>
-      <item quantity="one">Μη έγκυρη επαφή</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Δεν ήταν δυνατή η φόρτωση της εικόνας φωτογραφικής μηχανής"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Εσείς: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Πρόχειρο"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Αφού ξεκινήσετε μια νέα συνομιλία, θα εμφανίζεται εδώ"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Οι αρχειοθετημένες συνομιλίες εμφανίζονται εδώ"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Φόρτωση συνομιλιών…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Εικόνα"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Κλιπ ήχου"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Βίντεο"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Κάρτα επαφής"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Αναίρεση"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Επανάληψη"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Εισαγάγετε ένα όνομα επαφής ή έναν αριθμό τηλεφώνου για να ξεκινήσετε ένα νέο μήνυμα"</string>
-    <string name="action_block" msgid="9032076625645190136">"Αποκλεισμός"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Αποκλεισμός επαφής <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Κατάργηση αποκλεισμού της επαφής <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Αποκλεισμός <xliff:g id="DESTINATION">%s</xliff:g>;"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Θα εξακολουθήσετε να λαμβάνετε μηνύματα από αυτόν τον αριθμό, αλλά δεν θα ειδοποιείστε πια. Αυτή η συνομιλία θα αρχειοθετηθεί."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Αποκλεισμένες επαφές"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ΚΑΤΑΡΓΗΣΗ ΑΠΟΚΛΕΙΣΜΟΥ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Αποκλεισμένες επαφές"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Επιλέξτε μια εικόνα από τη βιβλιοθήκη εγγράφων"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Αποστολή μηνύματος"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Το μήνυμα εστάλη"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Τα δεδομένα κινητής τηλεφωνίας έχουν απενεργοποιηθεί. Ελέγξτε τις ρυθμίσεις σας."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Δεν είναι δυνατή η αποστολή μηνυμάτων σε Λειτουργία πτήσης"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Αδυναμία αποστολής μηνύματος"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Έγινε λήψη του μηνύματος"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Τα δεδομένα κινητής τηλεφωνίας απενεργοποιήθηκαν. Ελέγξτε τις ρυθμίσεις σας."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Δεν είναι δυνατή η λήψη μηνυμάτων σε λειτουργία πτήσης"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Δεν ήταν δυνατή η λήψη του μηνύματος"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Μηδέν"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Ένα"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Δύο"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Τρία"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Τέσσερα"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Πέντε"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Έξι"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Επτά"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Οκτώ"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Εννέα"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Δεν είναι δυνατή η αποστολή του μηνύματος με <xliff:g id="CARRIERNAME">%1$s</xliff:g>, σφάλμα <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Δεν είναι δυνατή η αποστολή του μηνύματος με άγνωστη εταιρεία κινητής τηλεφωνίας, σφάλμα <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Προώθ.: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Το μήνυμα δεν εστάλη: Η υπηρεσία δεν ενεργοποιήθηκε στο δίκτυο"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Το μήνυμα δεν εστάλη: μη έγκυρη διεύθυνση προορισμού"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Το μήνυμα δεν εστάλη: μη έγκυρο μήνυμα"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Το μήνυμα δεν εστάλη: μη υποστηριζόμενο περιεχόμενο"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Το μήνυμα δεν εστάλη: μη υποστηριζόμενο μήνυμα"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Το μήνυμα δεν εστάλη: πάρα πολύ μεγάλο"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Νέο μήνυμα"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Προβολή"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Εικόνα"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Δεν ήταν δυνατή η εύρεση της κατάλληλης εφαρμογής"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Κατάργηση παραλήπτη"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Νέο μήνυμα"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Ακύρωση"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Επεξ/σία σημ. πρόσβ."</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Δεν έχει ρυθμιστεί"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Όνομα"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Διακομιστής μεσολάβησης MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Θύρα MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Τύπος APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Διαγραφή APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Νέο APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Αποθήκευση"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Απόρριψη"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Το πεδίο Όνομα δεν μπορεί να είναι κενό."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Το APN δεν μπορεί να είναι κενό."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Το πεδίο MCC πρέπει να αποτελείται από 3 ψηφία."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Το πεδίο MNC πρέπει να αποτελείται από 2 ή 3 ψηφία."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Επαναφορά προεπιλεγμένων ρυθμίσεων APN."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Επαναφορά προεπιλογών"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Η επαναφορά των εργοστασιακών ρυθμίσεων APN ολοκληρώθηκε."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Χωρίς τίτλο"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Ονόματα σημείου πρόσβασης"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Νέο APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Οι ρυθμίσεις ονόματος σημείου πρόσβασης δεν είναι διαθέσιμες γι\' αυτόν το χρήστη"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Αντιγραφή στο πρόχειρο;"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Αντιγραφή"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"σε <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Γενικά"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Σύνθετες ρυθμίσεις"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Γενικές ρυθμίσεις"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Σύνθετες ρυθμίσεις"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Αποστολή μεμονωμένων μηνυμάτων SMS σε όλους τους παραλήπτες. Μόνο εσείς θα λαμβάνετε τις απαντήσεις"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Αποστολή μεμονωμένου MMS σε όλους τους παραλήπτες"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Άγνωστος αριθμός"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Νέο μήνυμα"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Νέο μήνυμα."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Επιλογέας SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Επιλέχτηκε <xliff:g id="SIM_0">%1$s</xliff:g>, επιλογέας SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Επεξεργασία θέματος"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Επιλέξτε SIM ή επεξεργαστείτε το θέμα"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Πατήστε παρατεταμένα για εγγραφή ήχου"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Έναρξη νέας συνομιλίας"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Ανταλλαγή μηνυμάτων"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Λίστα Ανταλλαγής μηνυμάτων"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Ανταλλαγή μηνυμάτων"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Νέο μήνυμα"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Λίστα συνομιλιών"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Φόρτωση συνομιλιών"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Φόρτωση μηνυμάτων"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Προβολή περισσότερων συνομιλιών"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Εμφάνιση περισσότερων μηνυμάτων"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Η συνομιλία διαγράφηκε"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Διαγραφή συνομιλίας. Αγγίξτε για να εμφανίσετε μια διαφορετική συνομιλία στην Ανταλλαγή μηνυμάτων"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Αποκλείστηκε"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Ο αποκλεισμός καταργήθηκε"</string>
-    <string name="db_full" msgid="8459265782521418031">"Ο αποθηκευτικός χώρος είναι περιορισμένος. Ορισμένα στοιχεία ενδέχεται να χαθούν."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Επιλέξτε συνημμένα"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Επιβεβαίωση επιλογής"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> επιλ/μένα"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Καταργήστε ένα ή περισσότερα συνημμένα και δοκιμάστε ξανά."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Μπορείτε να δοκιμάσετε να στείλετε το μήνυμά σας, αλλά ενδέχεται να μην παραδοθεί αν δεν καταργήσετε ένα ή περισσότερα συνημμένα."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Μπορείτε να στείλετε μόνο ένα βίντεο ανά μήνυμα. Καταργήστε τα επιπλέον βίντεο και δοκιμάστε ξανά."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Αποτυχία φόρτωσης συνημμένου από την Ανταλλαγή μηνυμάτων."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Αποστολή ούτως ή άλλως"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Δεν ήταν δυνατή η έναρξη της συνομιλίας"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Επιλέχτηκε <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-en-rAU/arrays.xml b/res/values-en-rAU/arrays.xml
deleted file mode 100644
index 94d5aff..0000000
--- a/res/values-en-rAU/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"no subject"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Yes"</item>
-    <item msgid="6049132459802288033">"No"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Thanks"</item>
-    <item msgid="4881335087096496747">"I agree"</item>
-    <item msgid="2422296858597420738">"Nice"</item>
-    <item msgid="4805581752819452687">"On my way"</item>
-    <item msgid="4746700499431366214">"OK, let me get back to you later"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
deleted file mode 100644
index 3a642fb..0000000
--- a/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Messaging"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Messaging"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Select conversation"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Settings"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Send Message"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Add an attachment"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Help"</string>
-    <string name="welcome" msgid="2857560951820802321">"Welcome"</string>
-    <string name="skip" msgid="7238879696319945853">"Skip"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Next &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Next"</string>
-    <string name="exit" msgid="1905187380359981199">"Exit"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Settings &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Settings"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Messaging needs permission to SMS, Phone and Contacts."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"You can change permissions in Settings &gt; Apps &gt; Messaging &gt; Permissions."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"You can change permissions in Settings, Apps, Messaging, Permissions."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Frequents"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"All contacts"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Send to <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Capture pictures or video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Choose images from this device"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Record audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Choose photo"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"The media is selected."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"The media is unselected."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> selected"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"image <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"image"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Record audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Share"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Just now"</string>
-    <string name="posted_now" msgid="867560789350406701">"Now"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> mins</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> hours</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hour</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> days</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> day</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> weeks</item>
-      <item quantity="one">a week</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> months</item>
-      <item quantity="one">a month</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> years</item>
-      <item quantity="one">a year</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Class 0 message"</string>
-    <string name="save" msgid="5081141452059463572">"Save"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Device is low on space. Messaging will automatically delete older messages to free up space."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Storage space running out"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Messaging might not send or receive messages until more space is available on your device."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Low SMS storage. You may need to delete messages."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirm your phone number"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"This one-off step will ensure Messaging will deliver your group messages properly."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Phone number"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Delete all messages with media"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Delete messages older than <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Auto-delete messages older than <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignore"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Delete all messages with media?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Delete messages older than <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Delete messages older than <xliff:g id="DURATION">%s</xliff:g> and turn on auto-delete?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> said"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"You said"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Message from <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"You sent a message"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Sending…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Not sent. Touch to try again."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Not sent. Trying again…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Resend or delete"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Please make a voice call to emergency services. Your text message could not be delivered at this time."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Failed"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"New MMS message to download"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"New MMS message"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Couldn\'t download"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Touch to try again"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Touch to download"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Download or delete"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Downloading…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Message expired or not available"</string>
-    <string name="mms_info" msgid="3402311750134118165">"size: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, expiration: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Can\'t send. Recipient not valid."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Service not activated on network"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Couldn\'t send due to network problem"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Message expired or not available"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(No subject)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Unknown sender"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Delivered"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Couldn\'t download message <xliff:g id="SUBJECT">%1$s</xliff:g> from <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Couldn\'t complete database operation due to low memory"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Message not sent"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Some messages not sent in Messaging"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messages in <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> messages in one conversation</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Message not downloaded"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Some messages not downloaded in Messaging"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messages in <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> messages in one conversation</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Message to <xliff:g id="NUMBER">%1$s</xliff:g> not sent"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Please make a voice call to emergency services. Your text message to <xliff:g id="NUMBER">%1$s</xliff:g> could not be delivered at this time."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> new messages</item>
-      <item quantity="one">New message</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Start"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Camera not available"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Camera not available"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Video capture not available"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Can\'t save media"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Can\'t take picture"</string>
-    <string name="back" msgid="1477626055115561645">"Back"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archived"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Delete"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archive"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Unarchive"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Turn off notifications"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Turn on notifications"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Add contact"</string>
-    <string name="action_download" msgid="7786338136368564146">"Download"</string>
-    <string name="action_send" msgid="377635240181672039">"Send"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Delete"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Delete this message"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"This action cannot be undone."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Delete"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Delete these conversations?</item>
-      <item quantity="one">Delete this conversation?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Delete"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Cancel"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"To"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Select multiple images"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirm selection"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Can\'t record audio. Try again."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Can\'t play audio. Try again."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Couldn\'t save audio. Try again."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Touch &amp; hold"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Picture"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audio clip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Contact card"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Download"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Reply via SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Reply via MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Reply"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participants</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> participant</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Me"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contact blocked &amp; archived"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contact unblocked &amp; unarchived"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> archived"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> unarchived"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notifications turned off"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notifications turned on"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"All set. Touch Send again."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Messaging successfully set as the default SMS app."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Discard attachments</item>
-      <item quantity="one">Discard attachment</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Audio attachment"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Play audio attachment"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pause"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Failed message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Unsent message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Sending message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Failed message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Failed message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Unsent message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Sending message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Failed message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Failed message. Touch to retry."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversation with <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Delete subject"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Capture video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Capture a still image"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Take picture"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Start recording video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Switch to full screen camera"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Switch between front and back camera"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Stop recording and attach video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Stop recording video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Messaging photos"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> photos saved to \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" album</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> photo saved to \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videos saved to \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" album</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video saved to \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> attachments saved to \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" album</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> attachment saved to \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> attachments saved to \"Downloads\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> attachment saved to \"Downloads\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> attachments saved</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> attachment saved</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Couldn\'t save <xliff:g id="QUANTITY_1">%d</xliff:g> attachments</item>
-      <item quantity="one">Couldn\'t save <xliff:g id="QUANTITY_0">%d</xliff:g> attachment</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Saved MMS attachment"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Settings"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archived"</string>
-    <string name="action_close" msgid="1840519376200478419">"Close"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Advanced"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Debug"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notifications"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Sound"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silent"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrate"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blocked"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS delivery reports"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Request a delivery report for each SMS that you send"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Auto-retrieve"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Automatically retrieve MMS messages"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Roaming auto-retrieve"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Automatically retrieve MMS when roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Group messaging"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Use MMS to send a single message when there are multiple recipients"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Default SMS app"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Default SMS app"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Your phone number"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Unknown"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Outgoing message sounds"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Dump SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Dump received SMS raw data into external storage file"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Dump MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Dump received MMS raw data into external storage file"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Wireless alerts"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Message options"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copy text"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"View details"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Delete"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Forward"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Message details"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Type: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Text message"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimedia message"</string>
-    <string name="from_label" msgid="1947831848146564875">"From: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"To: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Sent: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Received: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Subject: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Size: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priority: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"High"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Low"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Hidden sender address"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Can\'t send message while loading attachments."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Can\'t load attachment. Try again."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Network is not ready. Try again."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Delete text"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Switch between entering text and numbers"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Add more participants"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirm participants"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Start new conversation"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Select this item"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Play video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"People &amp; Options"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Debug"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"People &amp; Options"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"General"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"People in this conversation"</string>
-    <string name="action_call" msgid="6596167921517350362">"Make a call"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Send message"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Send message&lt;br/&gt;&lt;small&gt;from <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Send photos</item>
-      <item quantity="one">Send photo</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Send audios</item>
-      <item quantity="one">Send audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Send videos</item>
-      <item quantity="one">Send video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Send contact cards</item>
-      <item quantity="one">Send contact card</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Send attachments</item>
-      <item quantity="one">Send attachment</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> attachments ready to send</item>
-      <item quantity="one">One attachment ready to send</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Send feedback"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"View in Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Version info"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Version %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Open-source licences"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notifications"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Attachment limit reached"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Failed to load attachment."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Add to Contacts?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Add Contact"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Subject"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Subject: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Loading contact card"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Couldn\'t load contact card"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"View contact card"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Contact cards"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Birthday"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notes"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Forward message"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Reply"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS disabled"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"To send, set Messaging as the default SMS app"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Set Messaging as the default SMS app"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Change"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"To receive messages, set Messaging as the default SMS app"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"No preferred SIM selected for sending SMS messages"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"This app isn\'t allowed by the device owner."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Too many participants in a conversation"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Invalid contacts</item>
-      <item quantity="one">Invalid contact</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Couldn\'t load camera image"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"You: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Draft"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Once you start a new conversation, you’ll see it listed here"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Archived conversations appear here"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Loading conversations…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Picture"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audio clip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"In-stream video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Contact card"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Undo"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Retry"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Enter a contact name or phone number to start a new message"</string>
-    <string name="action_block" msgid="9032076625645190136">"Block"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Block <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Unblock <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Block <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"You\'ll continue to receive messages from this number but won\'t be notified anymore. This conversation will be archived."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blocked contacts"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"UNBLOCK"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blocked contacts"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Choose image from document library"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Sending message"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Message sent"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobile data is turned off. Check your settings."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Can\'t send messages in Aeroplane mode"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Message could not be sent"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Message downloaded"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobile data is turned off. Check your settings."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Can\'t download messages in Aeroplane mode"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Message could not be downloaded"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"One"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Two"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Three"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Four"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Five"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Six"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Seven"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Eight"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nine"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Can\'t send message with <xliff:g id="CARRIERNAME">%1$s</xliff:g>, error <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Can\'t send message with unknown operator, error <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Message not sent: service not activated on network"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Message not sent: invalid destination address"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Message not sent: invalid message"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Message not sent: unsupported content"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Message not sent: unsupported message"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Message not sent: too large"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"New message"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"View"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Image"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Could not find an appropriate application"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Remove recipient"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"New message"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Cancel"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Edit access point"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Not set"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Named"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS port"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN type"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Delete APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"New APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Save"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Discard"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"The Name field can\'t be empty."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"The APN cannot be empty."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC field must be 3 digits."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC field must be 2 or 3 digits."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Restoring default APN settings."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Reset to default"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Reset default APN settings completed"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Untitled"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Access point names"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"New APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Access Point Name settings are not available for this user"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Copy to clipboard?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copy"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"to <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"General"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Advanced"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"General settings"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Advanced settings"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Send individual SMS messages to all recipients. Only you will get any replies"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Send a single MMS to all recipients"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Unknown number"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"New message"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"New message"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM selector"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> selected, SIM selector"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Edit subject"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Select SIM or edit subject"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Touch and hold to record audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Start new conversation"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Messaging"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Messaging List"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Messaging"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"New message"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Conversation list"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Loading conversations"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Loading messages"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"View more conversations"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"View more messages"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversation deleted"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Conversation deleted. Touch to show a different Messaging conversation"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blocked"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Unblocked"</string>
-    <string name="db_full" msgid="8459265782521418031">"Storage space is low. Some data may be lost."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Select attachments"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirm selection"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> selected"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Please remove one or more attachments and try again."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"You can try sending your message, but it might not be delivered unless you remove one or more attachments."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"You can only send one video per message. Please remove additional videos and try again."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Messaging failed to load attachment."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Send anyway"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Could not start conversation"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> selected"</string>
-</resources>
diff --git a/res/values-en-rGB/arrays.xml b/res/values-en-rGB/arrays.xml
deleted file mode 100644
index 94d5aff..0000000
--- a/res/values-en-rGB/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"no subject"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Yes"</item>
-    <item msgid="6049132459802288033">"No"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Thanks"</item>
-    <item msgid="4881335087096496747">"I agree"</item>
-    <item msgid="2422296858597420738">"Nice"</item>
-    <item msgid="4805581752819452687">"On my way"</item>
-    <item msgid="4746700499431366214">"OK, let me get back to you later"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
deleted file mode 100644
index 3a642fb..0000000
--- a/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Messaging"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Messaging"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Select conversation"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Settings"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Send Message"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Add an attachment"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Help"</string>
-    <string name="welcome" msgid="2857560951820802321">"Welcome"</string>
-    <string name="skip" msgid="7238879696319945853">"Skip"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Next &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Next"</string>
-    <string name="exit" msgid="1905187380359981199">"Exit"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Settings &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Settings"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Messaging needs permission to SMS, Phone and Contacts."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"You can change permissions in Settings &gt; Apps &gt; Messaging &gt; Permissions."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"You can change permissions in Settings, Apps, Messaging, Permissions."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Frequents"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"All contacts"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Send to <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Capture pictures or video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Choose images from this device"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Record audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Choose photo"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"The media is selected."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"The media is unselected."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> selected"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"image <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"image"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Record audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Share"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Just now"</string>
-    <string name="posted_now" msgid="867560789350406701">"Now"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> mins</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> hours</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hour</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> days</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> day</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> weeks</item>
-      <item quantity="one">a week</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> months</item>
-      <item quantity="one">a month</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> years</item>
-      <item quantity="one">a year</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Class 0 message"</string>
-    <string name="save" msgid="5081141452059463572">"Save"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Device is low on space. Messaging will automatically delete older messages to free up space."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Storage space running out"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Messaging might not send or receive messages until more space is available on your device."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Low SMS storage. You may need to delete messages."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirm your phone number"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"This one-off step will ensure Messaging will deliver your group messages properly."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Phone number"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Delete all messages with media"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Delete messages older than <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Auto-delete messages older than <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignore"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Delete all messages with media?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Delete messages older than <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Delete messages older than <xliff:g id="DURATION">%s</xliff:g> and turn on auto-delete?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> said"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"You said"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Message from <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"You sent a message"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Sending…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Not sent. Touch to try again."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Not sent. Trying again…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Resend or delete"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Please make a voice call to emergency services. Your text message could not be delivered at this time."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Failed"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"New MMS message to download"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"New MMS message"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Couldn\'t download"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Touch to try again"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Touch to download"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Download or delete"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Downloading…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Message expired or not available"</string>
-    <string name="mms_info" msgid="3402311750134118165">"size: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, expiration: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Can\'t send. Recipient not valid."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Service not activated on network"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Couldn\'t send due to network problem"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Message expired or not available"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(No subject)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Unknown sender"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Delivered"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Couldn\'t download message <xliff:g id="SUBJECT">%1$s</xliff:g> from <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Couldn\'t complete database operation due to low memory"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Message not sent"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Some messages not sent in Messaging"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messages in <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> messages in one conversation</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Message not downloaded"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Some messages not downloaded in Messaging"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messages in <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> messages in one conversation</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Message to <xliff:g id="NUMBER">%1$s</xliff:g> not sent"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Please make a voice call to emergency services. Your text message to <xliff:g id="NUMBER">%1$s</xliff:g> could not be delivered at this time."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> new messages</item>
-      <item quantity="one">New message</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Start"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Camera not available"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Camera not available"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Video capture not available"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Can\'t save media"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Can\'t take picture"</string>
-    <string name="back" msgid="1477626055115561645">"Back"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archived"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Delete"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archive"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Unarchive"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Turn off notifications"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Turn on notifications"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Add contact"</string>
-    <string name="action_download" msgid="7786338136368564146">"Download"</string>
-    <string name="action_send" msgid="377635240181672039">"Send"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Delete"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Delete this message"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"This action cannot be undone."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Delete"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Delete these conversations?</item>
-      <item quantity="one">Delete this conversation?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Delete"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Cancel"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"To"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Select multiple images"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirm selection"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Can\'t record audio. Try again."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Can\'t play audio. Try again."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Couldn\'t save audio. Try again."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Touch &amp; hold"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Picture"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audio clip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Contact card"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Download"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Reply via SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Reply via MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Reply"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participants</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> participant</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Me"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contact blocked &amp; archived"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contact unblocked &amp; unarchived"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> archived"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> unarchived"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notifications turned off"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notifications turned on"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"All set. Touch Send again."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Messaging successfully set as the default SMS app."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Discard attachments</item>
-      <item quantity="one">Discard attachment</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Audio attachment"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Play audio attachment"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pause"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Failed message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Unsent message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Sending message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Failed message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Failed message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Unsent message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Sending message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Failed message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Failed message. Touch to retry."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversation with <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Delete subject"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Capture video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Capture a still image"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Take picture"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Start recording video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Switch to full screen camera"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Switch between front and back camera"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Stop recording and attach video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Stop recording video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Messaging photos"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> photos saved to \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" album</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> photo saved to \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videos saved to \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" album</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video saved to \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> attachments saved to \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" album</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> attachment saved to \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> attachments saved to \"Downloads\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> attachment saved to \"Downloads\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> attachments saved</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> attachment saved</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Couldn\'t save <xliff:g id="QUANTITY_1">%d</xliff:g> attachments</item>
-      <item quantity="one">Couldn\'t save <xliff:g id="QUANTITY_0">%d</xliff:g> attachment</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Saved MMS attachment"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Settings"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archived"</string>
-    <string name="action_close" msgid="1840519376200478419">"Close"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Advanced"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Debug"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notifications"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Sound"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silent"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrate"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blocked"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS delivery reports"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Request a delivery report for each SMS that you send"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Auto-retrieve"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Automatically retrieve MMS messages"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Roaming auto-retrieve"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Automatically retrieve MMS when roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Group messaging"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Use MMS to send a single message when there are multiple recipients"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Default SMS app"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Default SMS app"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Your phone number"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Unknown"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Outgoing message sounds"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Dump SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Dump received SMS raw data into external storage file"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Dump MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Dump received MMS raw data into external storage file"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Wireless alerts"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Message options"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copy text"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"View details"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Delete"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Forward"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Message details"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Type: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Text message"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimedia message"</string>
-    <string name="from_label" msgid="1947831848146564875">"From: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"To: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Sent: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Received: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Subject: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Size: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priority: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"High"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Low"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Hidden sender address"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Can\'t send message while loading attachments."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Can\'t load attachment. Try again."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Network is not ready. Try again."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Delete text"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Switch between entering text and numbers"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Add more participants"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirm participants"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Start new conversation"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Select this item"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Play video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"People &amp; Options"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Debug"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"People &amp; Options"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"General"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"People in this conversation"</string>
-    <string name="action_call" msgid="6596167921517350362">"Make a call"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Send message"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Send message&lt;br/&gt;&lt;small&gt;from <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Send photos</item>
-      <item quantity="one">Send photo</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Send audios</item>
-      <item quantity="one">Send audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Send videos</item>
-      <item quantity="one">Send video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Send contact cards</item>
-      <item quantity="one">Send contact card</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Send attachments</item>
-      <item quantity="one">Send attachment</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> attachments ready to send</item>
-      <item quantity="one">One attachment ready to send</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Send feedback"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"View in Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Version info"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Version %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Open-source licences"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notifications"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Attachment limit reached"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Failed to load attachment."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Add to Contacts?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Add Contact"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Subject"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Subject: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Loading contact card"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Couldn\'t load contact card"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"View contact card"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Contact cards"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Birthday"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notes"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Forward message"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Reply"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS disabled"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"To send, set Messaging as the default SMS app"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Set Messaging as the default SMS app"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Change"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"To receive messages, set Messaging as the default SMS app"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"No preferred SIM selected for sending SMS messages"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"This app isn\'t allowed by the device owner."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Too many participants in a conversation"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Invalid contacts</item>
-      <item quantity="one">Invalid contact</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Couldn\'t load camera image"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"You: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Draft"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Once you start a new conversation, you’ll see it listed here"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Archived conversations appear here"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Loading conversations…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Picture"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audio clip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"In-stream video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Contact card"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Undo"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Retry"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Enter a contact name or phone number to start a new message"</string>
-    <string name="action_block" msgid="9032076625645190136">"Block"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Block <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Unblock <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Block <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"You\'ll continue to receive messages from this number but won\'t be notified anymore. This conversation will be archived."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blocked contacts"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"UNBLOCK"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blocked contacts"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Choose image from document library"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Sending message"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Message sent"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobile data is turned off. Check your settings."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Can\'t send messages in Aeroplane mode"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Message could not be sent"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Message downloaded"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobile data is turned off. Check your settings."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Can\'t download messages in Aeroplane mode"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Message could not be downloaded"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"One"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Two"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Three"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Four"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Five"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Six"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Seven"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Eight"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nine"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Can\'t send message with <xliff:g id="CARRIERNAME">%1$s</xliff:g>, error <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Can\'t send message with unknown operator, error <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Message not sent: service not activated on network"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Message not sent: invalid destination address"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Message not sent: invalid message"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Message not sent: unsupported content"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Message not sent: unsupported message"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Message not sent: too large"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"New message"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"View"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Image"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Could not find an appropriate application"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Remove recipient"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"New message"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Cancel"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Edit access point"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Not set"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Named"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS port"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN type"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Delete APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"New APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Save"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Discard"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"The Name field can\'t be empty."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"The APN cannot be empty."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC field must be 3 digits."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC field must be 2 or 3 digits."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Restoring default APN settings."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Reset to default"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Reset default APN settings completed"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Untitled"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Access point names"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"New APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Access Point Name settings are not available for this user"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Copy to clipboard?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copy"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"to <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"General"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Advanced"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"General settings"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Advanced settings"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Send individual SMS messages to all recipients. Only you will get any replies"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Send a single MMS to all recipients"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Unknown number"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"New message"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"New message"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM selector"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> selected, SIM selector"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Edit subject"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Select SIM or edit subject"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Touch and hold to record audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Start new conversation"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Messaging"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Messaging List"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Messaging"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"New message"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Conversation list"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Loading conversations"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Loading messages"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"View more conversations"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"View more messages"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversation deleted"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Conversation deleted. Touch to show a different Messaging conversation"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blocked"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Unblocked"</string>
-    <string name="db_full" msgid="8459265782521418031">"Storage space is low. Some data may be lost."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Select attachments"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirm selection"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> selected"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Please remove one or more attachments and try again."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"You can try sending your message, but it might not be delivered unless you remove one or more attachments."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"You can only send one video per message. Please remove additional videos and try again."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Messaging failed to load attachment."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Send anyway"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Could not start conversation"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> selected"</string>
-</resources>
diff --git a/res/values-en-rIN/arrays.xml b/res/values-en-rIN/arrays.xml
deleted file mode 100644
index 94d5aff..0000000
--- a/res/values-en-rIN/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"no subject"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Yes"</item>
-    <item msgid="6049132459802288033">"No"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Thanks"</item>
-    <item msgid="4881335087096496747">"I agree"</item>
-    <item msgid="2422296858597420738">"Nice"</item>
-    <item msgid="4805581752819452687">"On my way"</item>
-    <item msgid="4746700499431366214">"OK, let me get back to you later"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
deleted file mode 100644
index 3a642fb..0000000
--- a/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Messaging"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Messaging"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Select conversation"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Settings"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Send Message"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Add an attachment"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Help"</string>
-    <string name="welcome" msgid="2857560951820802321">"Welcome"</string>
-    <string name="skip" msgid="7238879696319945853">"Skip"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Next &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Next"</string>
-    <string name="exit" msgid="1905187380359981199">"Exit"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Settings &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Settings"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Messaging needs permission to SMS, Phone and Contacts."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"You can change permissions in Settings &gt; Apps &gt; Messaging &gt; Permissions."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"You can change permissions in Settings, Apps, Messaging, Permissions."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Frequents"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"All contacts"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Send to <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Capture pictures or video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Choose images from this device"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Record audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Choose photo"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"The media is selected."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"The media is unselected."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> selected"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"image <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"image"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Record audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Share"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Just now"</string>
-    <string name="posted_now" msgid="867560789350406701">"Now"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> mins</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> hours</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hour</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> days</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> day</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> weeks</item>
-      <item quantity="one">a week</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> months</item>
-      <item quantity="one">a month</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> years</item>
-      <item quantity="one">a year</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Class 0 message"</string>
-    <string name="save" msgid="5081141452059463572">"Save"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Device is low on space. Messaging will automatically delete older messages to free up space."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Storage space running out"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Messaging might not send or receive messages until more space is available on your device."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Low SMS storage. You may need to delete messages."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirm your phone number"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"This one-off step will ensure Messaging will deliver your group messages properly."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Phone number"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Delete all messages with media"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Delete messages older than <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Auto-delete messages older than <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignore"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Delete all messages with media?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Delete messages older than <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Delete messages older than <xliff:g id="DURATION">%s</xliff:g> and turn on auto-delete?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> said"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"You said"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Message from <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"You sent a message"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Sending…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Not sent. Touch to try again."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Not sent. Trying again…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Resend or delete"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Please make a voice call to emergency services. Your text message could not be delivered at this time."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Failed"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"New MMS message to download"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"New MMS message"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Couldn\'t download"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Touch to try again"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Touch to download"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Download or delete"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Downloading…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Message expired or not available"</string>
-    <string name="mms_info" msgid="3402311750134118165">"size: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, expiration: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Can\'t send. Recipient not valid."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Service not activated on network"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Couldn\'t send due to network problem"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Message expired or not available"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(No subject)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Unknown sender"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Delivered"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Couldn\'t download message <xliff:g id="SUBJECT">%1$s</xliff:g> from <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Couldn\'t complete database operation due to low memory"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Message not sent"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Some messages not sent in Messaging"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messages in <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> messages in one conversation</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Message not downloaded"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Some messages not downloaded in Messaging"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messages in <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> messages in one conversation</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Message to <xliff:g id="NUMBER">%1$s</xliff:g> not sent"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Please make a voice call to emergency services. Your text message to <xliff:g id="NUMBER">%1$s</xliff:g> could not be delivered at this time."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> new messages</item>
-      <item quantity="one">New message</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Start"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Camera not available"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Camera not available"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Video capture not available"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Can\'t save media"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Can\'t take picture"</string>
-    <string name="back" msgid="1477626055115561645">"Back"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archived"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Delete"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archive"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Unarchive"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Turn off notifications"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Turn on notifications"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Add contact"</string>
-    <string name="action_download" msgid="7786338136368564146">"Download"</string>
-    <string name="action_send" msgid="377635240181672039">"Send"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Delete"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Delete this message"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"This action cannot be undone."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Delete"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Delete these conversations?</item>
-      <item quantity="one">Delete this conversation?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Delete"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Cancel"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"To"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Select multiple images"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirm selection"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Can\'t record audio. Try again."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Can\'t play audio. Try again."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Couldn\'t save audio. Try again."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Touch &amp; hold"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Picture"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audio clip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Contact card"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Download"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Reply via SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Reply via MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Reply"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participants</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> participant</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Me"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contact blocked &amp; archived"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contact unblocked &amp; unarchived"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> archived"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> unarchived"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notifications turned off"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notifications turned on"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"All set. Touch Send again."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Messaging successfully set as the default SMS app."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Discard attachments</item>
-      <item quantity="one">Discard attachment</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Audio attachment"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Play audio attachment"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pause"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Failed message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Unsent message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Sending message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Failed message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Message to <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Failed message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Message from <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Unsent message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Sending message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Failed message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Message to <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Failed message. Touch to retry."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversation with <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Delete subject"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Capture video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Capture a still image"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Take picture"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Start recording video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Switch to full screen camera"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Switch between front and back camera"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Stop recording and attach video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Stop recording video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Messaging photos"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> photos saved to \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" album</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> photo saved to \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videos saved to \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" album</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video saved to \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> attachments saved to \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" album</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> attachment saved to \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> attachments saved to \"Downloads\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> attachment saved to \"Downloads\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> attachments saved</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> attachment saved</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Couldn\'t save <xliff:g id="QUANTITY_1">%d</xliff:g> attachments</item>
-      <item quantity="one">Couldn\'t save <xliff:g id="QUANTITY_0">%d</xliff:g> attachment</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Saved MMS attachment"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Settings"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archived"</string>
-    <string name="action_close" msgid="1840519376200478419">"Close"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Advanced"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Debug"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notifications"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Sound"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silent"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrate"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blocked"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS delivery reports"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Request a delivery report for each SMS that you send"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Auto-retrieve"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Automatically retrieve MMS messages"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Roaming auto-retrieve"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Automatically retrieve MMS when roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Group messaging"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Use MMS to send a single message when there are multiple recipients"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Default SMS app"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Default SMS app"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Your phone number"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Unknown"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Outgoing message sounds"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Dump SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Dump received SMS raw data into external storage file"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Dump MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Dump received MMS raw data into external storage file"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Wireless alerts"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Message options"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copy text"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"View details"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Delete"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Forward"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Message details"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Type: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Text message"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimedia message"</string>
-    <string name="from_label" msgid="1947831848146564875">"From: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"To: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Sent: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Received: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Subject: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Size: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priority: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"High"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Low"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Hidden sender address"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Can\'t send message while loading attachments."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Can\'t load attachment. Try again."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Network is not ready. Try again."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Delete text"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Switch between entering text and numbers"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Add more participants"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirm participants"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Start new conversation"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Select this item"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Play video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"People &amp; Options"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Debug"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"People &amp; Options"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"General"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"People in this conversation"</string>
-    <string name="action_call" msgid="6596167921517350362">"Make a call"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Send message"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Send message&lt;br/&gt;&lt;small&gt;from <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Send photos</item>
-      <item quantity="one">Send photo</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Send audios</item>
-      <item quantity="one">Send audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Send videos</item>
-      <item quantity="one">Send video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Send contact cards</item>
-      <item quantity="one">Send contact card</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Send attachments</item>
-      <item quantity="one">Send attachment</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> attachments ready to send</item>
-      <item quantity="one">One attachment ready to send</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Send feedback"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"View in Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Version info"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Version %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Open-source licences"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notifications"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Attachment limit reached"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Failed to load attachment."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Add to Contacts?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Add Contact"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Subject"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Subject: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Loading contact card"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Couldn\'t load contact card"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"View contact card"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Contact cards"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Birthday"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notes"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Forward message"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Reply"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS disabled"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"To send, set Messaging as the default SMS app"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Set Messaging as the default SMS app"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Change"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"To receive messages, set Messaging as the default SMS app"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"No preferred SIM selected for sending SMS messages"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"This app isn\'t allowed by the device owner."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Too many participants in a conversation"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Invalid contacts</item>
-      <item quantity="one">Invalid contact</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Couldn\'t load camera image"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"You: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Draft"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Once you start a new conversation, you’ll see it listed here"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Archived conversations appear here"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Loading conversations…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Picture"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audio clip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"In-stream video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Contact card"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Undo"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Retry"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Enter a contact name or phone number to start a new message"</string>
-    <string name="action_block" msgid="9032076625645190136">"Block"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Block <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Unblock <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Block <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"You\'ll continue to receive messages from this number but won\'t be notified anymore. This conversation will be archived."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blocked contacts"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"UNBLOCK"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blocked contacts"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Choose image from document library"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Sending message"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Message sent"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobile data is turned off. Check your settings."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Can\'t send messages in Aeroplane mode"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Message could not be sent"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Message downloaded"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobile data is turned off. Check your settings."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Can\'t download messages in Aeroplane mode"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Message could not be downloaded"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"One"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Two"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Three"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Four"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Five"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Six"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Seven"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Eight"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nine"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Can\'t send message with <xliff:g id="CARRIERNAME">%1$s</xliff:g>, error <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Can\'t send message with unknown operator, error <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Message not sent: service not activated on network"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Message not sent: invalid destination address"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Message not sent: invalid message"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Message not sent: unsupported content"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Message not sent: unsupported message"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Message not sent: too large"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"New message"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"View"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Image"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Could not find an appropriate application"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Remove recipient"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"New message"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Cancel"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Edit access point"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Not set"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Named"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS port"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN type"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Delete APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"New APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Save"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Discard"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"The Name field can\'t be empty."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"The APN cannot be empty."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC field must be 3 digits."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC field must be 2 or 3 digits."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Restoring default APN settings."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Reset to default"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Reset default APN settings completed"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Untitled"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Access point names"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"New APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Access Point Name settings are not available for this user"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Copy to clipboard?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copy"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"to <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"General"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Advanced"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"General settings"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Advanced settings"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Send individual SMS messages to all recipients. Only you will get any replies"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Send a single MMS to all recipients"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Unknown number"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"New message"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"New message"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM selector"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> selected, SIM selector"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Edit subject"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Select SIM or edit subject"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Touch and hold to record audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Start new conversation"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Messaging"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Messaging List"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Messaging"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"New message"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Conversation list"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Loading conversations"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Loading messages"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"View more conversations"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"View more messages"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversation deleted"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Conversation deleted. Touch to show a different Messaging conversation"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blocked"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Unblocked"</string>
-    <string name="db_full" msgid="8459265782521418031">"Storage space is low. Some data may be lost."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Select attachments"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirm selection"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> selected"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Please remove one or more attachments and try again."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"You can try sending your message, but it might not be delivered unless you remove one or more attachments."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"You can only send one video per message. Please remove additional videos and try again."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Messaging failed to load attachment."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Send anyway"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Could not start conversation"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> selected"</string>
-</resources>
diff --git a/res/values-es-rUS/arrays.xml b/res/values-es-rUS/arrays.xml
deleted file mode 100644
index 4a3fbb7..0000000
--- a/res/values-es-rUS/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"sin asunto"</item>
-    <item msgid="272485471009191934">"sinasunto"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Sí"</item>
-    <item msgid="6049132459802288033">"No"</item>
-    <item msgid="3084376867445867895">"Aceptar"</item>
-    <item msgid="3155097332660174689">"Je, je"</item>
-    <item msgid="2611328818571146775">"Gracias"</item>
-    <item msgid="4881335087096496747">"Acepto"</item>
-    <item msgid="2422296858597420738">"Genial"</item>
-    <item msgid="4805581752819452687">"Estoy en camino."</item>
-    <item msgid="4746700499431366214">"De acuerdo, te llamo más tarde."</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
deleted file mode 100644
index f474514..0000000
--- a/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Centro de mensajes"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Centro de mensajes"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Seleccionar conversación"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Configuración"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Enviar mensaje"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Agregar un archivo adjunto"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Ayuda"</string>
-    <string name="welcome" msgid="2857560951820802321">"Te damos la bienvenida"</string>
-    <string name="skip" msgid="7238879696319945853">"Omitir"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Siguiente &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Siguiente"</string>
-    <string name="exit" msgid="1905187380359981199">"Salir"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Configuración &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Configuración"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Centro de Mensajes necesita permiso para acceder a SMS, Teléfono y Contactos."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Puedes cambiar los permisos en Configuración &gt; Aplicaciones &gt; Centro de Mensajes &gt; Permisos."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Puedes cambiar los permisos en Configuración, Aplicaciones, Centro de Mensajes, Permisos."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Frecuentes"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Todos los contactos"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Enviar a <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Capturar imágenes o video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Seleccionar imágenes de este dispositivo"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Grabar audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Elegir foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"El medio está seleccionado."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Los medios no están seleccionados."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Seleccionado: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"imagen <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"imagen"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Grabar audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Compartir"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Recién"</string>
-    <string name="posted_now" msgid="867560789350406701">"Recién"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> minutos</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> minuto</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> horas</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hora</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> días</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> día</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> semanas</item>
-      <item quantity="one">una semana</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> meses</item>
-      <item quantity="one">un mes</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> años</item>
-      <item quantity="one">un año</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Mensaje clase 0"</string>
-    <string name="save" msgid="5081141452059463572">"Guardar"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"El dispositivo tiene poco espacio de almacenamiento. El Centro de Mensajes borrará automáticamente los mensajes antiguos para liberar espacio."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Queda poco espacio de almacenamiento"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Es posible que Centro de Mensajes no envíe ni reciba mensajes hasta que se libere más espacio en el dispositivo."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Como queda poco espacio para SMS, tal vez debas eliminar mensajes."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirmar tu número de teléfono"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Este paso, que se realiza por única vez, asegurará que Centro de Mensajes envíe los mensajes grupales de forma correcta."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Número de teléfono"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Eliminar todos los mensajes con contenido multimedia"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Eliminar mensajes de más de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Eliminar automáticamente mensajes de más de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorar"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"¿Eliminar todos los mensajes con contenido multimedia?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"¿Eliminar mensajes de más de <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"¿Eliminar mensajes de más de <xliff:g id="DURATION">%s</xliff:g> y activar la eliminación automática?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> dijo"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Tú dijiste"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Mensaje de <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Enviaste un mensaje"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Enviando…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"El mensaje no se envió. Toca para volver a intentarlo."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"El mensaje no se envió. Reintentando…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Volver a enviar o eliminar"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Realiza una llamada de voz a los servicios de emergencia. No se pudo enviar el mensaje de texto esta vez."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Error"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nuevo mensaje MMS para descargar"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nuevo mensaje MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"El mensaje no se pudo descargar."</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Toca para volver a intentarlo."</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Toca para descargar."</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Descargar o eliminar"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Descargando…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"El mensaje venció o no está disponible."</string>
-    <string name="mms_info" msgid="3402311750134118165">"tamaño: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>; vencimiento: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"No se puede enviar porque el destinatario no es válido."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"No se activó el servicio en la red."</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"No se pudo enviar debido a un problema de la red."</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"El mensaje venció o no está disponible."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Sin asunto)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Remitente desconocido"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Entregado"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"No se pudo descargar el mensaje <xliff:g id="SUBJECT">%1$s</xliff:g> de <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"No se pudo completar la operación de la base de datos por falta de memoria."</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Mensaje no enviado"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"No se pudieron enviar algunos mensajes en Centro de Mensajes"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mensajes en <xliff:g id="CONVERSATIONS">%d</xliff:g> conversaciones</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mensajes en una conversación</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Mensaje no descargado"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"No se pudieron descargar algunos mensajes en Centro de Mensajes"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mensajes en <xliff:g id="CONVERSATIONS">%d</xliff:g> conversaciones</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mensaje en una conversación</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Mensaje al <xliff:g id="NUMBER">%1$s</xliff:g> no enviado"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Realiza una llamada de voz a los servicios de emergencia. No se pudo enviar el mensaje de texto a <xliff:g id="NUMBER">%1$s</xliff:g> esta vez."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> mensajes nuevos</item>
-      <item quantity="one">Un mensaje nuevo</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Iniciar"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Cámara no disponible"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Cámara no disponible"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Captura de video no disponible"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"No se puede guardar el contenido multimedia."</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"No se puede tomar la foto."</string>
-    <string name="back" msgid="1477626055115561645">"Atrás"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archivadas"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Eliminar"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archivo"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Eliminar del archivo"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Desactivar notificaciones"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Activar notificaciones"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Agregar contacto"</string>
-    <string name="action_download" msgid="7786338136368564146">"Descargar"</string>
-    <string name="action_send" msgid="377635240181672039">"Enviar"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Eliminar"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"¿Deseas eliminar este mensaje?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Esta acción no se puede deshacer."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Eliminar"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">¿Deseas borrar estas conversaciones?</item>
-      <item quantity="one">¿Deseas borrar esta conversación?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Eliminar"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Cancelar"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Para"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Seleccionar varias imágenes"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirmar selección"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"<xliff:g id="COUNT">%d</xliff:g> más"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"No se puede grabar el audio. Vuelve a intentarlo."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"No se puede reproducir el audio. Vuelve a intentarlo."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"No se pudo guardar el audio. Vuelve a intentarlo."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Mantener presionado"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Imagen"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Clip de audio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Tarjeta de contacto"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Descargar"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Responder con SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Responder (MMS)"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Responder"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participantes</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> participante</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Yo"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contacto bloqueado y archivado"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contacto desbloqueado y sin archivar"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> archivada(s)"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> no archivada(s)"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notificaciones desactivadas"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notificaciones activadas"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Todo listo. Vuelve a tocar Enviar."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Se estableció de forma correcta Centro de Mensajes como tu aplicación de SMS predeterminada."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Descartar archivos adjuntos</item>
-      <item quantity="one">Descartar archivo adjunto</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Archivo adjunto de audio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Reproducir archivo adjunto de audio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pausa"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Mensaje de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Error del mensaje de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Mensaje de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Mensaje no enviado a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Enviando mensaje a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Error de mensaje a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Mensaje a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Error del mensaje de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g> <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Mensaje de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g> <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Mensaje no enviado a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Enviando mensaje a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Error del mensaje a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Mensaje a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Se produjo un error en el mensaje. Toca para volver a intentarlo."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversación con <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Eliminar asunto"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Capturar video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Capturar una imagen fija"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Tomar fotografía"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Iniciar grabación de video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Cambiar a cámara en pantalla completa"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Alternar entre cámara frontal y trasera"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Detener la grabación y adjuntar video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Detener la grabación de video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotos de Centro de Mensajes"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other">Se guardaron <xliff:g id="QUANTITY_2">%d</xliff:g> fotos en el álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">Se guardó <xliff:g id="QUANTITY_0">%d</xliff:g> foto en el álbum \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other">Se guardaron <xliff:g id="QUANTITY_2">%d</xliff:g> videos en el álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">Se guardó <xliff:g id="QUANTITY_0">%d</xliff:g> video en el álbum \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other">Se guardaron <xliff:g id="QUANTITY_2">%d</xliff:g> archivos adjuntos en el álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">Se guardó <xliff:g id="QUANTITY_0">%d</xliff:g> archivo adjunto en el álbum \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other">Se guardaron <xliff:g id="QUANTITY_1">%d</xliff:g> archivos adjuntos en \"Descargas\"</item>
-      <item quantity="one">Se guardó <xliff:g id="QUANTITY_0">%d</xliff:g> archivo adjunto en \"Descargas\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">Se guardaron <xliff:g id="QUANTITY_1">%d</xliff:g> archivos adjuntos</item>
-      <item quantity="one">Se guardó <xliff:g id="QUANTITY_0">%d</xliff:g> archivo adjunto</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">No se pudieron guardar <xliff:g id="QUANTITY_1">%d</xliff:g> archivos adjuntos</item>
-      <item quantity="one">No se pudo guardar <xliff:g id="QUANTITY_0">%d</xliff:g> archivo adjunto</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Archivo adjunto de MMS guardado"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Configuración"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archivadas"</string>
-    <string name="action_close" msgid="1840519376200478419">"Cerrar"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avanzada"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Depurar"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notificaciones"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Sonido"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silencio"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrar"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloqueado"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Informes de entrega de SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Solicitar un informe de entrega al enviar un SMS"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Recuperación automática"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Recuperar mensajes MMS automáticamente"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Recuperación automática en roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Recuperar MMS automáticamente en roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Mensajes grupales"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Utiliza MMS para enviar un mismo mensaje a varios destinatarios."</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Aplicación de SMS predeterminada"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Aplicación de SMS predeterminada"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Tu número de teléfono"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Desconocido"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Sonidos de mensaje saliente"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Volcar SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Volcar datos sin procesar de SMS en el archivo de almacenamiento externo"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Volcar MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Volcar datos sin procesar de MMS recibidos en un archivo de almacenamiento externo"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Alertas inalámbricas"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opciones de mensaje"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copiar el texto"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Ver detalles"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Eliminar"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Reenviar"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Detalles del mensaje"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tipo: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Mensaje de texto"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mensaje multimedia"</string>
-    <string name="from_label" msgid="1947831848146564875">"De: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Para: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Enviado: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Fecha de recepción: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Asunto: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Tamaño: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioridad: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Alta"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Baja"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Dirección de remitente oculta"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"No se pueden enviar mensajes mientras se cargan adjuntos."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"No se puede cargar el archivo adjunto. Vuelve a intentarlo."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"La red no está lista. Vuelve a intentarlo."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Suprimir texto"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Cambiar entre ingresar texto y números"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Agregar más participantes"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirmar participantes"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Comenzar una nueva conversación"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Seleccionar este elemento"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Reproducir video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Contactos y opciones"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Depurar"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Contactos y opciones"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"General"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Contactos en esta conversación"</string>
-    <string name="action_call" msgid="6596167921517350362">"Hacer una llamada"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Enviar mensaje"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Enviar mensaje&lt;br/&gt;&lt;small&gt;de <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Enviar fotos</item>
-      <item quantity="one">Enviar foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Enviar audios</item>
-      <item quantity="one">Enviar audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Enviar videos</item>
-      <item quantity="one">Enviar video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Enviar tarjetas de contacto</item>
-      <item quantity="one">Enviar tarjeta de contacto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Enviar archivos adjuntos</item>
-      <item quantity="one">Enviar archivo adjunto</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> archivos adjuntos listos para enviar</item>
-      <item quantity="one">Un archivo adjunto listo para enviar</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Enviar comentarios"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Ver en Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Información de la versión"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versión %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licencias de código abierto"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notificaciones"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Se alcanzó el límite de archivos adjuntos."</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Se produjo un error al cargar el archivo adjunto."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"¿Agregar a contactos?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Agregar contacto"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Asunto"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Asunto: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Cargando tarjeta de contacto"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"No se pudo cargar la tarjeta de contacto."</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Ver tarjeta de contacto"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactos</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Tarjetas de contactos"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Fecha de nacimiento"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notas"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Reenviar mensaje"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Responder"</string>
-    <string name="plus_one" msgid="9010288417554932581">"Hacer +1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS inhabilitados"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Establecer Centro de mensajes como la aplicación de SMS predeterminada para enviar mensajes"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Establecer Centro de Mensajes como la aplicación de SMS predeterminada"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Cambiar"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Establecer Centro de mensajes como la aplicación de SMS predeterminada para recibir mensajes"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"No se seleccionó ninguna SIM preferida para el envío de mensajes SMS."</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"El propietario del dispositivo no permite esta aplicación."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Aceptar"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Demasiados participantes en una conversación"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Contactos no válidos</item>
-      <item quantity="one">Contacto no válido</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"No se pudo cargar la imagen de la cámara."</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Tú: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Borrador"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Cuando inicies una conversación nueva, aparecerá aquí."</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Las conversaciones archivadas aparecen aquí."</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Cargando conversaciones…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Imagen"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Clip de audio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Tarjeta de contacto"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Deshacer"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Volver a intentar"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Ingresa un nombre de contacto o número de teléfono para crear un nuevo mensaje."</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloquear"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloquear a <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Desbloquear a <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"¿Bloquear a <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Seguirás recibiendo mensajes de este número, pero no verás notificaciones. Esta conversación se archivará."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Contactos bloqueados"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DESBLOQUEAR"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Contactos bloqueados"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Seleccionar imagen de la galería de documentos"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Enviando el mensaje"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Se envió el mensaje."</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Los datos móviles están desactivados. Comprueba la configuración."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"No se pueden enviar mensajes en modo de avión."</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"No se pudo enviar el mensaje."</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Se descargó el mensaje."</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Los datos móviles están desactivados. Comprueba la configuración."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"No se pueden descargar mensajes en modo de avión."</string>
-    <string name="download_message_failure" msgid="635370887537738004">"No se pudo descargar el mensaje."</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Cero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Uno"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dos"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tres"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Cuatro"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Cinco"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Seis"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Siete"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Ocho"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nueve"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Error <xliff:g id="ERRORCODE">%2$d</xliff:g>. No se puede enviar el mensaje con <xliff:g id="CARRIERNAME">%1$s</xliff:g>."</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Error <xliff:g id="ERRORCODE">%1$d</xliff:g>. No se puede enviar el mensaje con un proveedor desconocido."</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Rv: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"No se envió el mensaje porque el servicio no está activado en la red."</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Mensaje no enviado: dirección de destino no válida"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Mensaje no enviado: mensaje no válido"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Mensaje no enviado: contenido no admitido"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Mensaje no enviado: mensaje no admitido"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Mensaje no enviado: demasiado largo"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Mensaje nuevo"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Ver"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Imagen"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"No se pudo encontrar una aplicación adecuada."</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Eliminar destinatario"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Mensaje nuevo"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Cancelar"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Editar el punto de acceso"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Sin establecer"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nombre"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy de MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Puerto MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Tipo de APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Eliminar APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN nuevo"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Guardar"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Descartar"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"El campo Nombre no puede estar vacío."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"El APN no puede estar vacío."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"El campo de MCC debe contener tres dígitos."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"El campo MNC debe contener dos o tres dígitos."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Restaurando la configuración APN predeterminada"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Restablecer parámetros predeterminados"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Se restableció la configuración predeterminada de APN."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Sin título"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Nombres de puntos de acceso"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN nuevo"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"La configuración del nombre de punto de acceso no está disponible para este usuario."</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"¿Copiar en el portapapeles?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copiar"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"a <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"General"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avanzada"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Configuración general"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Configuración avanzada"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Enviar mensajes de SMS individuales a todos los destinatarios (solo tú recibirás las respuestas)."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Enviar un único MMS a todos los destinatarios"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Número desconocido"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Mensaje nuevo"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Mensaje nuevo"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Selector de SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Se seleccionó <xliff:g id="SIM_0">%1$s</xliff:g>, selector de SIM."</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Editar asunto"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Seleccionar SIM o editar asunto"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Mantén presionado para grabar audio."</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Comenzar una nueva conversación"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Centro de mensajes"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Lista de Centro de Mensajes"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Centro de mensajes"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Mensaje nuevo"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Lista de conversaciones"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Cargando conversaciones"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Cargando mensajes…"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Ver más conversaciones"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Ver más mensajes"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Se eliminó la conversación."</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Se borró la conversación. Toca para mostrar otra conversación de Centro de Mensajes"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloqueado"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Desbloqueado"</string>
-    <string name="db_full" msgid="8459265782521418031">"Hay poco espacio de almacenamiento. Podrían perderse algunos datos."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Seleccionar archivos adjuntos"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirmar selección"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Seleccionado: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Elimina uno o más archivos adjuntos y vuelve a intentarlo."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Puedes intentar enviar el mensaje, pero podría no enviarse a menos que elimines uno más archivos adjuntos."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Solo puedes enviar un video por mensaje. Quita los videos adicionales y vuelve a intentarlo."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Centro de Mensajes no pudo cargar el archivo adjunto."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Enviar de todas formas"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"No se pudo iniciar la conversación."</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Se seleccionó <xliff:g id="SELECTED_SIM">%s</xliff:g>."</string>
-</resources>
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
deleted file mode 100644
index ca8e06b..0000000
--- a/res/values-es/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"sin asunto"</item>
-    <item msgid="272485471009191934">"sinasunto"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Sí"</item>
-    <item msgid="6049132459802288033">"No"</item>
-    <item msgid="3084376867445867895">"Ok"</item>
-    <item msgid="3155097332660174689">"Je, je"</item>
-    <item msgid="2611328818571146775">"Gracias"</item>
-    <item msgid="4881335087096496747">"Acepto"</item>
-    <item msgid="2422296858597420738">"Genial"</item>
-    <item msgid="4805581752819452687">"Voy de camino"</item>
-    <item msgid="4746700499431366214">"Vale, te llamo más tarde"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
deleted file mode 100644
index 98e0a1d..0000000
--- a/res/values-es/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Mensajes"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Mensajes"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Seleccionar conversación"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Ajustes"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Enviar mensaje"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Adjuntar un archivo"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Ayuda"</string>
-    <string name="welcome" msgid="2857560951820802321">"Te damos la bienvenida"</string>
-    <string name="skip" msgid="7238879696319945853">"Saltar"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Siguiente &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Siguiente"</string>
-    <string name="exit" msgid="1905187380359981199">"Salir"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Ajustes &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Ajustes"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Mensajes necesita permiso para acceder a los SMS, al teléfono y a los contactos."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Puedes cambiar los permisos en Ajustes &gt; Aplicaciones &gt; Mensajes &gt; Permisos."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Puedes cambiar los permisos en Ajustes, Aplicaciones, Mensajes, Permisos."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Frecuentes"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Todos los contactos"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Enviar a <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Capturar imágenes o vídeo"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Seleccionar imágenes de este dispositivo"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Grabar audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Elegir foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Contenido multimedia seleccionado."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Contenido multimedia no seleccionado."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Seleccionado: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"imagen del <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"imagen"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Grabar audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Compartir"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Ahora mismo"</string>
-    <string name="posted_now" msgid="867560789350406701">"Ahora"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> horas</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hora</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> días</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> día</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> semanas</item>
-      <item quantity="one">una semana</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> meses</item>
-      <item quantity="one">un mes</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> años</item>
-      <item quantity="one">un año</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Mensaje de clase 0"</string>
-    <string name="save" msgid="5081141452059463572">"Guardar"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Casi no queda espacio en el dispositivo. La aplicación Mensajes eliminará automáticamente los mensajes más antiguos para liberar espacio."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Queda poco espacio"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Es posible que Mensajes no envíe ni reciba mensajes hasta que haya más espacio disponible en el dispositivo."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Queda poco espacio para recibir SMS. Es posible que tengas que eliminar mensajes."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirma tu número de teléfono"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Este paso único garantiza que Mensajes enviará tus mensajes de grupo correctamente."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Número de teléfono"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Eliminar todos los mensajes con archivos multimedia"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Eliminar mensajes anteriores a <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Eliminar automáticamente mensajes anteriores a <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorar"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"¿Eliminar todos los mensajes con archivos multimedia?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"¿Eliminar mensajes anteriores a <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"¿Eliminar mensajes anteriores a <xliff:g id="DURATION">%s</xliff:g> y activar eliminación automática?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> ha dicho"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Has dicho"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Mensaje de <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Has enviado un mensaje"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Enviando..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"No enviado. Toca para volver a intentarlo."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"No enviado. Volviendo a intentar…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Volver a enviar o eliminar"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Llama a los servicios de emergencias. Tu mensaje de texto no se puede entregar en estos momentos."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Error"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nuevo mensaje MMS que descargar"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nuevo mensaje MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Error al descargar"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Toca para volver a intentarlo"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Toca para descargar"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Descargar o eliminar"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Descargando..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"El mensaje ha caducado o no está disponible"</string>
-    <string name="mms_info" msgid="3402311750134118165">"tamaño: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, vencimiento: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"No se puede enviar porque el destinatario no es válido."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"No se ha activado el servicio en la red"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"No se ha podido enviar por un problema de red"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"El mensaje ha caducado o no está disponible"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Sin asunto)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Destinatario desconocido"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Entregado"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"No se ha podido descargar el mensaje <xliff:g id="SUBJECT">%1$s</xliff:g> de <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"No se ha podido completar la operación de la base de datos por falta de memoria"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Mensaje no enviado"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Hay algunos mensajes no enviados en Mensajes"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mensajes en <xliff:g id="CONVERSATIONS">%d</xliff:g> conversaciones</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mensajes en una conversación</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Mensaje no descargado"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Algunos mensajes no se han descargado en Mensajes"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mensajes en <xliff:g id="CONVERSATIONS">%d</xliff:g> conversaciones</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mensajes en una conversación</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Mensaje para <xliff:g id="NUMBER">%1$s</xliff:g> no enviado"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Llama a los servicios de emergencias. Tu mensaje de texto enviado al número <xliff:g id="NUMBER">%1$s</xliff:g> no se puede entregar en estos momentos."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> mensajes nuevos</item>
-      <item quantity="one">Mensaje nuevo</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Iniciar"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Cámara no disponible"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Cámara no disponible"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Captura de vídeo no disponible"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"No se puede guardar el archivo multimedia"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"No se pueden hacer fotos"</string>
-    <string name="back" msgid="1477626055115561645">"Atrás"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archivado"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Eliminar"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archivar"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"No archivar"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Desactivar notificaciones"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Activar notificaciones"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Añadir contacto"</string>
-    <string name="action_download" msgid="7786338136368564146">"Descargar"</string>
-    <string name="action_send" msgid="377635240181672039">"Enviar"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Eliminar"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"¿Eliminar este mensaje?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Esta acción no se puede deshacer."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Eliminar"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">¿Eliminar estas conversaciones?</item>
-      <item quantity="one">¿Eliminar esta conversación?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Eliminar"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Cancelar"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Para"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Seleccionar varias imágenes"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirmar selección"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"No se puede grabar el audio. Vuelve a intentarlo."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"No se puede reproducir el audio. Vuelve a intentarlo."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"No se ha podido guardar el audio. Vuelve a intentarlo."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Mantener pulsado"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Imagen"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Fragmento de audio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Vídeo"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Tarjeta de contacto"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Descargar"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Responder con SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Responder por MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Responder"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participantes</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> participante</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Yo"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contacto bloqueado y archivado"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contacto desbloqueado y no archivado"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> archivadas"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> no archivadas"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notificaciones desactivadas"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notificaciones activadas"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Listo. Toca Enviar de nuevo."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Mensajes establecida como aplicación de SMS predeterminada."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Descartar archivos adjuntos</item>
-      <item quantity="one">Descartar archivo adjunto</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Archivo de audio adjunto"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Reproducir archivo de audio adjunto"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pausar"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Mensaje de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Error del mensaje de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Mensaje de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Mensaje no enviado a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Enviando mensaje a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Error del mensaje para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Mensaje para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Error del mensaje de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Mensaje de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Mensaje no enviado a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Enviando mensaje a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Error del mensaje para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Mensaje para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Error del mensaje. Toca para volver a intentarlo."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversación con <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Eliminar asunto"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Capturar vídeo"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Capturar una imagen fija"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Hacer foto"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Iniciar grabación de vídeo"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Cambiar a cámara en pantalla completa"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Cambiar de la cámara frontal a la trasera"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Dejar de grabar y adjuntar vídeo"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Detener grabación de vídeo"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotos de Mensajes"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotos guardadas en el álbum <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> foto guardada en el álbum <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> vídeos guardados en el álbum <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> vídeo guardado en el álbum <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> archivos adjuntos guardados en el álbum <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> archivo adjunto guardado en el álbum <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> archivos adjuntos guardados en Descargas</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> archivo adjunto guardado en Descargas</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> archivos adjuntos guardados</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> archivo adjunto guardado</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">No se han podido guardar <xliff:g id="QUANTITY_1">%d</xliff:g> archivos adjuntos</item>
-      <item quantity="one">No se ha podido guardar <xliff:g id="QUANTITY_0">%d</xliff:g> archivo adjunto</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Adjunto de MMS guardado"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Ajustes"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archivado"</string>
-    <string name="action_close" msgid="1840519376200478419">"Cerrar"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Opciones avanzadas"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Depurar"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notificaciones"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Sonido"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silencio"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrar"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloqueado"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Informes de entrega de SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Solicitar un informe de entrega al enviar un SMS"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Recuperar automáticamente"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Recuperar automáticamente mensajes MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Autorrecuperar en itinerancia"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Recuperar MMS automáticamente en itinerancia"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Mensaje de grupo"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Usar MMS para enviar un único mensaje a varios destinatarios"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Aplicación de SMS predeterminada"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Aplicación de SMS predeterminada"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Tu número de teléfono"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Desconocido"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Sonidos de mensajes enviados"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Volcar SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Volcar datos sin procesar de SMS recibidos en un archivo del almacenamiento externo"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Volcar MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Volcar datos sin procesar de MMS recibidos en un archivo del almacenamiento externo"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Alertas inalámbricas"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opciones de mensaje"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copiar texto"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Ver detalles"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Eliminar"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Reenviar"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Detalles de mensaje"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tipo: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Mensaje de texto"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mensaje multimedia"</string>
-    <string name="from_label" msgid="1947831848146564875">"De: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"A: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Enviado: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Recibido: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Asunto: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Tamaño: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioridad: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Alta"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Baja"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Dirección de remitente oculta"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"No se pueden enviar mensajes mientras se cargan adjuntos."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"No se ha podido cargar el archivo adjunto. Vuelve a intentarlo."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"La red no está lista. Inténtalo de nuevo."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Eliminar texto"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Alternar entre introducir texto y números"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Añadir más participantes"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirmar participantes"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Iniciar nueva conversación"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Seleccionar este elemento"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Reproducir vídeo"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Contactos y opciones"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Depurar"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Contactos y opciones"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Generales"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Contactos en esta conversación"</string>
-    <string name="action_call" msgid="6596167921517350362">"Hacer una llamada"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Enviar mensaje"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Enviar mensaje&lt;br/&gt;&lt;small&gt;de <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Enviar fotos</item>
-      <item quantity="one">Enviar foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Enviar archivos de audio</item>
-      <item quantity="one">Enviar archivo de audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Enviar vídeos</item>
-      <item quantity="one">Enviar vídeo</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Enviar tarjetas de contacto</item>
-      <item quantity="one">Enviar tarjeta de contacto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Enviar archivos adjuntos</item>
-      <item quantity="one">Enviar archivo adjunto</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> archivos adjuntos listos para enviar</item>
-      <item quantity="one">Un archivo adjunto listo para enviar</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Danos tu opinión"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Ver en Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Información de la versión"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versión %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licencias código abierto"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notificaciones"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Límite de archivos adjuntos alcanzado"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Error al cargar archivo adjunto."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"¿Añadir a contactos?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Añadir contacto"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Asunto"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Asunto: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Cargando tarjeta de contacto"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"No se ha podido cargar la tarjeta de contacto"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Ver tarjeta de contacto"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactos</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Tarjetas de contacto"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Cumpleaños"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notas"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Reenviar mensaje"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Responder"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS inhabilitados"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Para enviar mensajes, establece Mensajes como aplicación de SMS predeterminada"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Establecer Mensajes como aplicación de SMS predeterminada"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Cambiar"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Para recibir mensajes, establece Mensajes como aplicación de SMS predeterminada"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"No se ha seleccionado la SIM preferida para enviar mensajes SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"El propietario del dispositivo no permite esta aplicación."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Aceptar"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Demasiados participantes en una conversación"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Contactos no válidos</item>
-      <item quantity="one">Contacto no válido</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"No se ha podido cargar la imagen de la cámara"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Tú: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Borrador"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Cuando inicies una conversación nueva, aparecerá aquí"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Aquí aparecen las conversaciones archivadas"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Cargando conversaciones..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Imagen"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Fragmento de audio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Vídeo"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Tarjeta de contacto"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Deshacer"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Volver a intentar"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Escribe el nombre de un contacto o un número de teléfono para iniciar un mensaje nuevo"</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloquear"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloquear a <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Desbloquear a <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"¿Bloquear a <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Seguirás recibiendo mensajes de este número pero no volverás a recibir notificaciones. Esta conversación se archivará."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Contactos bloqueados"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DESBLOQUEAR"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Contactos bloqueados"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Selecciona imagen de la biblioteca de documentos"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Enviando mensaje"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Mensaje enviado"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Los datos móviles están desactivados. Comprueba los ajustes."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"No se puede enviar mensajes en modo avión"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Error al enviar mensaje"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Mensaje descargado"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Los datos móviles están desactivados. Comprueba los ajustes."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"No se pueden descargar mensajes en modo avión"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"No se ha podido descargar el mensaje"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Cero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Uno"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dos"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tres"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Cuatro"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Cinco"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Seis"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Siete"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Ocho"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nueve"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"No se puede enviar el mensaje con <xliff:g id="CARRIERNAME">%1$s</xliff:g> (error <xliff:g id="ERRORCODE">%2$d</xliff:g>)"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"No se puede enviar el mensaje con un operador desconocido (error <xliff:g id="ERRORCODE">%1$d</xliff:g>)"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Rv: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Mensaje no enviado porque el servicio no se ha activado en la red"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Mensaje no enviado: dirección de destino no válida"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Mensaje no enviado: mensaje no válido"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Mensaje no enviado: contenido no admitido"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Mensaje no enviado: mensaje no admitido"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Mensaje no enviado: demasiado largo"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Mensaje nuevo"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Ver"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Imagen"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"No se ha podido encontrar una aplicación adecuada"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Eliminar destinatario"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Mensaje nuevo"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Cancelar"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Editar punto de acceso"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"No definida"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nombre"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy para MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Puerto para MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Tipo de APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Eliminar APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nuevo APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Guardar"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Descartar"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"El campo Nombre no puede estar vacío."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"El campo APN no puede estar vacío."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"El campo MCC debe contener 3 dígitos."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"El campo MNC debe contener 2 o 3 dígitos."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Restaurando la configuración de APN predeterminada"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Restablecer ajustes"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Se ha restablecido la configuración de APN predeterminada."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Sin título"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Nombre de puntos de acceso"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nuevo APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Los ajustes del nombre de punto de acceso no están disponibles para este usuario"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"¿Copiar al portapapeles?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copiar"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"para <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"General"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Opciones avanzadas"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Ajustes generales"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Ajustes avanzados"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Enviar mensajes SMS individuales. Solo tú recibirás las respuestas"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Enviar un único MMS a todos los destinatarios"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Número desconocido"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Mensaje nuevo"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Mensaje nuevo."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Selector de SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> seleccionada, selector de SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Editar asunto"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Seleccionar SIM o editar asunto"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Mantener pulsado para grabar audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Iniciar nueva conversación"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Mensajes"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Lista de mensajes"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Mensajes"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Mensaje nuevo"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Lista de conversaciones"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Cargando conversaciones"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Cargando mensajes"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Ver más conversaciones"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Ver más mensajes"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversación eliminada"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Conversación eliminada. Toca para ver otra conversación de Mensajes"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloqueado"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Desbloqueado"</string>
-    <string name="db_full" msgid="8459265782521418031">"Queda poco espacio de almacenamiento. Es posible que se pierdan algunos datos."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Seleccionar adjuntos"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirmar selección"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Seleccionado: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Elimina uno o varios archivos adjuntos y vuelve a intentarlo."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Puedes probar a enviar el mensaje, pero quizás no se envíe hasta que elimines uno o varios archivos adjuntos."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Solo puedes enviar un vídeo por mensaje. Elimina más vídeos y vuelve a intentarlo."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"El mensaje no ha podido cargar el archivo adjunto."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Enviar de todos modos"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"No se ha podido iniciar la conversación"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> seleccionada"</string>
-</resources>
diff --git a/res/values-et/arrays.xml b/res/values-et/arrays.xml
deleted file mode 100644
index 16e1744..0000000
--- a/res/values-et/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"teema puudub"</item>
-    <item msgid="272485471009191934">"teema puudub"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Jah"</item>
-    <item msgid="6049132459802288033">"Ei"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Aitäh"</item>
-    <item msgid="4881335087096496747">"Nõustun"</item>
-    <item msgid="2422296858597420738">"Tore"</item>
-    <item msgid="4805581752819452687">"Olen teel"</item>
-    <item msgid="4746700499431366214">"OK, vastan sulle hiljem"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
deleted file mode 100644
index e222a3e..0000000
--- a/res/values-et/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Sõnumside"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Sõnumside"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Vestluse valimine"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Seaded"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Saada sõnum"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Manuse lisamine"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Abi"</string>
-    <string name="welcome" msgid="2857560951820802321">"Tere tulemast"</string>
-    <string name="skip" msgid="7238879696319945853">"Vahelejätmine"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Järgmine &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Järgmine"</string>
-    <string name="exit" msgid="1905187380359981199">"Väljumine"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Seaded &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Seaded"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Sõnumside vajab luba SMS-idele, telefonile ja kontaktidele juurdepääsemiseks."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Saate muuta lube jaotises Seaded &gt; Rakendused &gt; Sõnumside &gt; Load."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Lubade muutmiseks tehke valikud Seaded, Rakendused, Sõnumside, Load."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Sagedased"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Kõik kontaktid"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Saada numbrile <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Jäädvustage pilte või videoid"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Kujutiste valimine sellest seadmest"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Heli salvestamine"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Foto valimine"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Meedia on valitud."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Meediat pole valitud."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> on valitud"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"pilt kuupäevaga <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"pilt"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Heli salvestamine"</string>
-    <string name="action_share" msgid="2143483844803153871">"Jagamine"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Hetk tagasi"</string>
-    <string name="posted_now" msgid="867560789350406701">"Praegu"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> tundi</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> tund</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> päeva</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> päev</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> nädalat</item>
-      <item quantity="one">nädal</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kuud</item>
-      <item quantity="one">kuu</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aastat</item>
-      <item quantity="one">aasta</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"0-klassi sõnum"</string>
-    <string name="save" msgid="5081141452059463572">"Salvesta"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Seadmes on vähe ruumi. Sõnumside kustutab ruumi vabastamiseks automaatselt vanemad sõnumid."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Talletusruum hakkab täis saama"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Sõnumside ei pruugi sõnumeid saata ega vastu võtta seni, kuni seadmes on rohkem vaba ruumi."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS-ide jaoks on vähe salvestusruumi. Peate võib-olla mõned sõnumid kustutama."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Kinnitage oma telefoninumber"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"See ühekordne toiming tagab, et rakendus Sõnumside edastab teie grupisõnumid õigesti."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefoninumber"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Kustuta kõik meediumifaile sisaldavad sõnumid"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Kustuta sõnumid, mis on vanemad kui <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Kustuta automaatselt sõnumid, mis on vanemad kui <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Eira"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Kas kustutada kõik meediaga sõnumid?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Kas kustutada sõnumid, mis on vanemad kui <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Kas kustutada automaatselt sõnumid, mis on vanemad kui <xliff:g id="DURATION">%s</xliff:g>, ja lülitada sisse automaatne kustutamine?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> ütles:"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Ütlesite:"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Sõnum saatjalt <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Saatsite sõnumi"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Saatmine ..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Ei saadetud. Puudutage uuesti proovimiseks."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Ei saadetud. Proovitakse uuesti ..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Saada uuesti või kustuta"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Helistage hädaabiteenusele. Teie tekstsõnumit ei õnnestunud praegu edastada."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Ebaõnnestus"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Uus MMS-sõnum allalaadimiseks"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Uus MMS-sõnum"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Ei saanud alla laadida"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Puudutage uuesti proovimiseks"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Puudutage allalaadimiseks"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Laadi alla või kustuta"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Allalaadimine ..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Sõnum on aegunud või pole saadaval"</string>
-    <string name="mms_info" msgid="3402311750134118165">"suurus: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, aegumine: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Ei õnnestu saata. Saaja ei ole õige."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Teenus pole võrgus aktiveeritud"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Võrguprobleemi tõttu ei õnnestunud saata"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Sõnum on aegunud või pole saadaval"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Teema puudub.)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Tundmatu saatja"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Kohale toimetatud"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Ei saa laadida alla sõnumit <xliff:g id="SUBJECT">%1$s</xliff:g>, mille saatis <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Vähese mälu tõttu ei õnnestunud andmebaasi toimingut lõpule viia"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Sõnumit ei saadetud"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Mõnda sõnumit ei saadetud rakenduses Sõnumside"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> sõnumit <xliff:g id="CONVERSATIONS">%d</xliff:g> vestluses</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> sõnumit ühes vestluses</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Sõnumit ei laaditud alla"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Mõnda sõnumit ei laaditud alla rakenduses Sõnumside"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> sõnumit <xliff:g id="CONVERSATIONS">%d</xliff:g> vestluses</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> sõnumit ühes vestluses</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Sõnumit numbrile <xliff:g id="NUMBER">%1$s</xliff:g> ei saadetud"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Helistage hädaabiteenusele. Teie tekstsõnumit numbrile <xliff:g id="NUMBER">%1$s</xliff:g> ei õnnestunud praegu edastada."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> uut sõnumit</item>
-      <item quantity="one">Uus sõnum</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Käivita"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kaamera pole saadaval"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kaamera pole saadaval"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Video jäädvustamine pole saadaval"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Meediat ei saa salvestada"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Pilti ei saa jäädvustada"</string>
-    <string name="back" msgid="1477626055115561645">"Tagasi"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arhiivitud"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Kustutamine"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arhiivimine"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Arhiivimise tühistamine"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Märguannete väljalülitamine"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Märguannete sisselülitamine"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Kontakti lisamine"</string>
-    <string name="action_download" msgid="7786338136368564146">"Laadi alla"</string>
-    <string name="action_send" msgid="377635240181672039">"Saada"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Kustuta"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Kas kustutada see sõnum?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Seda toimingut ei saa tagasi võtta."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Kustuta"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Kas kustutada need vestlused?</item>
-      <item quantity="one">Kas kustutada see vestlus?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Kustuta"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Tühista"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Sihtkohta"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Mitme kujutise valimine"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Valiku kinnitamine"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"ja veel <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Heli ei õnnestu salvestada. Proovige uuesti."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Heli ei saa esitada. Proovige uuesti."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Heli ei õnnestunud salvestada. Proovige uuesti."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Puudutage pikalt"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Pilt"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Heliklipp"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kontaktikaart"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Allalaadimine"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Vasta SMS-iga"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Vastam. MMS-iga"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Vasta"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> osalejat</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> osaleja</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Mina"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakt on blokeeritud ja arhiivitud"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontakt deblokeeriti ja eemaldati arhiivist"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> on arhiivitud"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> üksuse arhiivimine on tühistatud"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Märguanded on välja lülitatud"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Märguanded on sisse lülitatud"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Kõik on valmis. Puudutage uuesti käsku Saada."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Sõnumside määramine SMS-i vaikerakenduseks õnnestus."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Manustest loobumine</item>
-      <item quantity="one">Manusest loobumine</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Helimanus"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Helimanuste esitamine"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Peata"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Sõnum saatjalt <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Sõnumi saamine kontaktilt <xliff:g id="SENDER">%1$s</xliff:g> ebaõnnestus: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Sõnum kontaktilt <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Saatmata sõnum kontaktile <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Sõnumi saatmine kontaktile <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Sõnumi saatmine kontaktile <xliff:g id="CONTACT">%1$s</xliff:g> ebaõnnestus: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Sõnum kontaktile <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Sõnumi saamine kontaktilt <xliff:g id="SENDER">%1$s</xliff:g> ebaõnnestus: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Sõnum kontaktilt <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Saatmata sõnum kontaktile <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Sõnumi saatmine kontaktile <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Sõnumi saatmine kontaktile <xliff:g id="GROUP">%1$s</xliff:g> ebaõnnestus: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Sõnum kontaktile <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aeg: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Sõnumi saatmine ebaõnnestus. Puudutage uuesti proovimiseks."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Vestlus osalejatega <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Teema kustutamine"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Video jäädvustamine"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Foto jäädvustamine"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Pildistamine"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Video salvestamise alustamine"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Lülitamine täisekraaniga kaamerale"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Esi- ja tagakaamera vahetamine"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Salvestamise peatamine ja video lisamine"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Lõpeta video salvestamine"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Sõnumside fotod"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotot salvestati albumisse „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> foto salvestati albumisse „<xliff:g id="ALBUMNAME_1">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videot salvestati albumisse „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video salvestati albumisse „<xliff:g id="ALBUMNAME_1">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> manust salvestati albumisse „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> manus salvestati albumisse „<xliff:g id="ALBUMNAME_1">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> manust salvestati kausta „Allalaadimised”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> manus salvestati kausta „Allalaadimised”</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> manust salvestati</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> manus salvestati</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> manust ei saanud salvestada</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> manust ei saanud salvestada</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Salvestati MMS-manus"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Seaded"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arhiivitud"</string>
-    <string name="action_close" msgid="1840519376200478419">"Sule"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Täpsem"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Silumine"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Märguanded"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Heli"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Hääletu"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibratsioon"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blokeeritud"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS-i edastamisaruanded"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Edastamisaruande taotlus iga saadetud SMS-i kohta"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automaatne toomine"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS-sõnumite automaatne vastuvõtmine"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Automaatne vastuvõtmine rändlusel"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"MMS-ide automaatne toomine rändluse ajal"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Rühma sõnumside"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"MMS-i kasutamine, kui mitmele kontaktile tuleb saata üks sõnum"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"SMS-i vaikerakendus"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"SMS-i vaikerakendus"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Teie telefoninumber"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Teadmata"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Väljuva sõnumi helid"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS-i tõmmistamine"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Saadud SMS-ide lähteandmete tõmmistamine välisesse talletusfaili"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS-i tõmmistamine"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Saadud MMS-ide lähteandmete tõmmistamine välisesse talletusfaili"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Raadiosidehoiatused"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Sõnumi valikud"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopeeri tekst"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Kuva üksikasjad"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Kustuta"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Edastamine"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Sõnumi üksikasjad"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tüüp: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Tekstisõnum"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimeediumsõnum"</string>
-    <string name="from_label" msgid="1947831848146564875">"Saatja: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Saaja: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Saadetud: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Vastu võetud: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Teema: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Suurus: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioriteet: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Suur"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Tavaline"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Madal"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Varjatud saatja aadress"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Sõnumit ei saa manuste laadimise ajal saata."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Manust ei õnnestu laadida. Proovige uuesti."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Võrk pole valmis. Proovige uuesti."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Kustuta tekst"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Teksti ja numbrite vaheldumisi sisestamine"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Lisa rohkem osalejaid"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Osalejate kinnitamine"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Uue vestluse alustamine"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Selle üksuse valimine"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Video esitamine"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Inimesed ja valikud"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Silu"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Inimesed ja valikud"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Üldine"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Selles vestluses osalevad inimesed"</string>
-    <string name="action_call" msgid="6596167921517350362">"Helista"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Saatke sõnum"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Sõnumi saatmine&lt;br/&gt;&lt;small&gt;SIM-kaardilt <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Saada fotod</item>
-      <item quantity="one">Saada foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Saada helifailid</item>
-      <item quantity="one">Saada helifail</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Saada videod</item>
-      <item quantity="one">Saada video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Saada kontaktikaardid</item>
-      <item quantity="one">Saada kontaktikaart</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Saada manused</item>
-      <item quantity="one">Saada manus</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> manust on saatmiseks valmis</item>
-      <item quantity="one">Üks manus on saatmiseks valmis</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Tagasiside saatmine"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Kuvamine Google Play poes"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Versiooni teave"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versioon %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Avatud lähtekoodi litsentsid"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Märguanded"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Manuselimiit on täis"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Manuse laadimine ebaõnnestus."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Kas lisada kontaktidesse?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Kontaktisiku lisamine"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Teema"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Teema: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Kontakti kaardi laadimine"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kontaktkaarti ei õnnestunud laadida"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Kontakti kaardi kuvamine"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakti</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontaktkaardid"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Sünnipäev"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Märkmed"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Sõnumi edastamine"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Vastamine"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS on keelatud"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Saatmiseks määrake rakendus Sõnumside SMS-i vaikerakenduseks"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Määrake rakendus Sõnumside SMS-i vaikerakenduseks"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Muuda"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Sõnumite vastuvõtmiseks määrake rakendus Sõnumside SMS-i vaikerakenduseks"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS-sõnumite saatmiseks pole eelistatud SIM-kaarti valitud"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Seadme omanik pole seda rakendust lubanud."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Vestluses on liiga palju osalejaid"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Sobimatud kontaktid</item>
-      <item quantity="one">Sobimatu kontakt</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Kaamera kujutist ei õnnestunud laadida"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Teie: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Mustand"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Kui alustate uut vestlust, loetletakse see siin"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Arhiivitud vestlused kuvatakse siin"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Vestluste laadimine …"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Pilt"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Heliklipp"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kontaktikaart"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Tagasivõtmine"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Proovi uuesti"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Uue sõnumi alustamiseks sisestage kontakti nimi või telefoninumber"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokeerimine"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blokeeri <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Deblokeeri <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Kas blokeerida <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Saate sellelt numbrilt ikka sõnumeid, kuid te ei saa enam märguandeid. Vestlus arhiivitakse."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blokeeritud kontaktid"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DEBLOKEERIMINE"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blokeeritud kontaktid"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Dokumendikogust kujutise valimine"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Sõnumi saatmine"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Sõnum on saadetud"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobiilne andmeside on välja lülitatud. Kontrollige seadeid."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Lennukirežiimis ei saa sõnumeid saata"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Sõnumit ei saanud saata"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Sõnum on alla laaditud"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobiilne andmeside on välja lülitatud. Kontrollige seadeid."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Lennukireżiimis ei saa sõnumeid alla laadida"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Sõnumit ei saanud alla laadida"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Null"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Üks"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Kaks"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Kolm"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Neli"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Viis"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Kuus"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Seitse"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Kaheksa"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Üheksa"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Operaatori <xliff:g id="CARRIERNAME">%1$s</xliff:g> kaudu ei õnnestu sõnumit saata, viga <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Tundmatu operaatori kaudu ei õnnestu sõnumit saata, viga <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Edastamine: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Sõnumit ei saadetud: teenus pole võrgus aktiveeritud"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Sõnumit ei saadetud: kehtetu sihtaadress"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Sõnumit ei saadetud: vigane sõnum"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Sõnumit ei saadetud: toetuseta sisu"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Sõnumit ei saadetud: toetuseta sõnum"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Sõnumit ei saadetud: liiga suur"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Uus sõnum"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Kuvamine"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Kujutis"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Sobivat rakendust ei õnnestunud leida"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Saaja eemaldamine"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Uus sõnum"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Tühista"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Pääsupunkti muutmine"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Määramata"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nimi"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS-i puhverserver"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS-i port"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN-i tüüp"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Kustuta APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Uus APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Salvesta"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Tühista"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Nimeväli ei saa olla tühi."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN ei saa olla tühi."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC-väli peab olema kolme numbriga."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC-väli peab olema kahe või kolme numbriga."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"APN-i vaikeseadete taastamine."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Lähtesta vaikeseadetele"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"APN-i vaikeseadete lähtestamine on lõpule viidud."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Pealkirjata"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Pääsupunktide nimed"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-id"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Uus APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Pääsupunkti nime seaded pole selle kasutaja jaoks saadaval"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Kas kopeerida lõikelauale?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopeeri"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"SIM-kaardile <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Üldised"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Täpsemad"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Üldseaded"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Täpsemad seaded"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM-kaart „<xliff:g id="SIM_NAME">%s</xliff:g>”"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Individuaalsed SMS-id saadetakse kõikidele adressaatidele. Ainult teie saate vastuseid"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Üks MMS saadetakse kõikidele adressaatidele"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Tundmatu number"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Uus sõnum"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Uus sõnum."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM-kaardi valija"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> on valitud, SIM-kaardi valija"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Teema muutmine"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM-kaardi valimine või objekti valimine"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Puudutage pikalt heli salvestamiseks"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Uue vestluse alustamine"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Sõnumside"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Sõnumside loend"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Sõnumside"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Uus sõnum"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Vestlusloend"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Vestluste laadimine …"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Sõnumite laadimine ..."</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Kuva rohkem vestlusi"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Kuva rohkem sõnumeid"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Vestlus on kustutatud"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Vestlus kustutati. Rakenduse Sõnumside eri vestluste kuvamiseks puudutage"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blokeeritud"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Deblokeeritud"</string>
-    <string name="db_full" msgid="8459265782521418031">"Talletusruumi on vähe. Osa andmetest võib kaduma minna."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Manuste valimine"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Valiku kinnitamine"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> on valitud"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Eemaldage üks või mitu manust ja proovige uuesti."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Võite proovida sõnumit saata, aga selle edastamine võib ebaõnnestuda, kui te ei eemalda üht või mitut manust."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Saate sõnumis saata vaid ühe video. Eemaldage täiendavad videod ja proovige uuesti."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Rakendusel Sõnumside ei õnnestunud manust laadida."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Saada ikkagi"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Vestlust ei õnnestunud alustada"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> on valitud"</string>
-</resources>
diff --git a/res/values-eu/arrays.xml b/res/values-eu/arrays.xml
deleted file mode 100644
index 5ea97f0..0000000
--- a/res/values-eu/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"gairik ez"</item>
-    <item msgid="272485471009191934">"gairik ez"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Bai"</item>
-    <item msgid="6049132459802288033">"Ez"</item>
-    <item msgid="3084376867445867895">"Ados"</item>
-    <item msgid="3155097332660174689">"Kar-kar"</item>
-    <item msgid="2611328818571146775">"Eskerrik asko"</item>
-    <item msgid="4881335087096496747">"Ados"</item>
-    <item msgid="2422296858597420738">"Ederki"</item>
-    <item msgid="4805581752819452687">"Banoa"</item>
-    <item msgid="4746700499431366214">"Ados, geroago erantzungo dizut"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
deleted file mode 100644
index 1703681..0000000
--- a/res/values-eu/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Mezuak"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Mezuak"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Hautatu elkarrizketa"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Ezarpenak"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Bidali mezua"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Gehitu eranskina"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Laguntza"</string>
-    <string name="welcome" msgid="2857560951820802321">"Ongi etorri"</string>
-    <string name="skip" msgid="7238879696319945853">"Saltatu"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Hurrengoa &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Hurrengoa"</string>
-    <string name="exit" msgid="1905187380359981199">"Irten"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Ezarpenak &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Ezarpenak"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Mezuak aplikazioak baimena behar du SMS mezuak bidaltzeko eta jasotzeko, deiak egiteko eta kontaktuak atzitzeko."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Baimenak aldatzeko, zoaz Ezarpenak &gt; Aplikazioak &gt; Mezuak &gt; Baimenak atalera."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Baimenak aldatzeko, zoaz Ezarpenak, Aplikazioak, Mezuak, Baimenak atalera."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Maiz erabilitakoak"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Kontaktu guztiak"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Bidali hona: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Atera irudiak edo grabatu bideoa"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Aukeratu gailu honetako irudiak"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Grabatu audioa"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Aukeratu argazkia"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Euskarria hautatu da."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Euskarria desautatu da."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> hautatuta"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"Irudiaren data: <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"irudia"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Grabatu audioa"</string>
-    <string name="action_share" msgid="2143483844803153871">"Partekatu"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Oraintxe"</string>
-    <string name="posted_now" msgid="867560789350406701">"Orain"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ordu</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ordu</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> egun</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> egun</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aste</item>
-      <item quantity="one">Astebete</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> hilabete</item>
-      <item quantity="one">Hilabete</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> urte</item>
-      <item quantity="one">Urtebete</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"0 klaseko mezua"</string>
-    <string name="save" msgid="5081141452059463572">"Gorde"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Toki gutxi dago gailuan. Tokia egiteko, Mezuak aplikazioak automatikoki ezabatuko ditu mezu zaharragoak."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Memoria betetzen ari da"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Gailuan toki gehiago izan arte, baliteke Mezuak aplikazioak mezurik ez bidaltzea edo jasotzea."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS mezuetarako memoria gutxi dago. Baliteke mezuak ezabatu behar izatea."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Berretsi telefono-zenbakia"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Behin bakarrik egin beharreko urrats honi esker, Mezuak aplikazioak taldeko mezuak behar bezala bidaliko dituela ziurtatuko duzu."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefono-zenbakia"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Ezabatu multimedia-elementuak dituzten mezu guztiak"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Ezabatu <xliff:g id="DURATION">%s</xliff:g> baino zaharragoak diren mezuak"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Ezabatu automatikoki <xliff:g id="DURATION">%s</xliff:g> baino zaharragoak diren mezuak"</string>
-    <string name="ignore" msgid="7063392681130898793">"Egin ez ikusi"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Multimedia-elementuak dauzkaten mezu guztiak ezabatu nahi dituzu?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> baino zaharragoak diren mezuak ezabatu nahi dituzu?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> baino zaharragoak diren mezuak ezabatu eta ezabaketa automatikoa aktibatu nahi duzu?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> erabiltzaileak esan du"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Zuk esan duzu"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> erabiltzailearen mezua:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Mezu bat bidali duzu"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Bidaltzen…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Ez da bidali. Berriro saiatzeko, ukitu hau."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Ez da bidali. Berriro saiatzen…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Birbidali edo ezabatu"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Deitu larrialdi-zerbitzuetara. Ezin izan dugu entregatu testu-mezua."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Huts egin du"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"MMS mezu berria deskargatzeko prest"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"MMS mezu berria"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Ezin izan da deskargatu"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Berriro saiatzeko, ukitu hau"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Deskargatzeko, ukitu hau"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Deskargatu edo ezabatu"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Deskargatzen…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Mezua iraungi da edo ez dago erabilgarri"</string>
-    <string name="mms_info" msgid="3402311750134118165">"Tamaina: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>. Iraungitze-data: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>."</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Ezin da bidali. Hartzaileak ez du balio."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Zerbitzua ez dago sare honetan aktibatuta"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Ezin izan da bidali sareko arazo baten ondorioz"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Mezua iraungi da edo ez dago erabilgarri"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Gairik ez)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Igorle ezezaguna"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Bidalita"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Ezin izan da <xliff:g id="FROM">%2$s</xliff:g> erabiltzailearen <xliff:g id="SUBJECT">%1$s</xliff:g> mezua deskargatu."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Ezin izan da datu-basearen eragiketa osatu memoria gutxi dagoelako"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Ez da bidali mezua"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Ez dira bidali Mezuak aplikazioko mezu batzuk"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mezu daude <xliff:g id="CONVERSATIONS">%d</xliff:g> elkarrizketatan</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mezu daude elkarrizketa batean</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Ez da deskargatu mezua"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Ez dira deskargatu Mezuak aplikazioko mezu batzuk"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mezu daude <xliff:g id="CONVERSATIONS">%d</xliff:g> elkarrizketatan</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mezu daude elkarrizketa batean</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Mezua ez da bidali <xliff:g id="NUMBER">%1$s</xliff:g> zenbakira"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Deitu larrialdi-zerbitzuetara. Ezin izan dugu entregatu <xliff:g id="NUMBER">%1$s</xliff:g> zenbakira bidalitako testu-mezua."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> mezu berri</item>
-      <item quantity="one">Mezu berria</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Hasi"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera ez dago erabilgarri"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera ez dago erabilgarri"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Bideo-grabaketa ez dago erabilgarri"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Ezin da gorde multimedia-elementua"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Ezin da atera argazkia"</string>
-    <string name="back" msgid="1477626055115561645">"Atzera"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Artxibatutakoak"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Ezabatu"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Artxibatu"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Kendu artxibotik"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Desaktibatu jakinarazpenak"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Aktibatu jakinarazpenak"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Gehitu kontaktua"</string>
-    <string name="action_download" msgid="7786338136368564146">"Deskargatu"</string>
-    <string name="action_send" msgid="377635240181672039">"Bidali"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Ezabatu"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Mezua ezabatu nahi duzu?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Ezin da ekintza hori desegin."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Ezabatu"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Elkarrizketa hauek ezabatu nahi dituzu?</item>
-      <item quantity="one">Elkarrizketa ezabatu nahi duzu?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Ezabatu"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Utzi"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Hartzailea"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Hautatu hainbat irudi"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Berretsi hautapena"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Ezin da grabatu audioa. Saiatu berriro."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Ezin da erreproduzitu audioa. Saiatu berriro."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Ezin izan da gorde audioa. Saiatu berriro."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Eduki ukituta"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Argazkia"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audio-klipa"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Bideoa"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kontaktu-txartela"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Deskargatu"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Erantzun SMS bidez"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Erantzun MMS bidez"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Erantzun"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> parte-hartzaile</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> parte-hartzaile</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ni"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontaktua blokeatu eta artxibatu egin da"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontaktua desblokeatu da eta artxibotik kendu da"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> artxibatuta"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> artxibotik kenduta"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Jakinarazpenak desaktibatuta daude"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Jakinarazpenak aktibatuta daude"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Dena ezarri da. Ukitu berriro Bidali."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Mezuak aplikazioa behar bezala ezarri da SMS mezuetarako aplikazio lehenetsi gisa."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Baztertu eranskinak</item>
-      <item quantity="one">Baztertu eranskina</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Audio-eranskina"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Erreproduzitu audio-eranskina"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pausatu"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> erabiltzailearen mezua: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> igorlearen mezuak huts egin du: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> igorlearen mezua: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Ez zaio bidali mezua <xliff:g id="CONTACT">%1$s</xliff:g> erabiltzaileari: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> erabiltzaileari mezua bidaltzen: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Ezin izan zaio bidali mezua <xliff:g id="CONTACT">%1$s</xliff:g> erabiltzaileari: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> erabiltzailearentzako mezua: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> igorlearen mezuak huts egin du: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> igorlearen mezua: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Ez da bidali mezua <xliff:g id="GROUP">%1$s</xliff:g> taldera: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> taldera mezua bidaltzen: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Ezin izan da bidali mezua <xliff:g id="GROUP">%1$s</xliff:g> taldera: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> taldearentzako mezua: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ordua: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Mezuak huts egin du. Ukitu berriro saiatzeko."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Elkarrizketa erabiltzaile hauekin (<xliff:g id="PARTICIPANTS">%s</xliff:g>)"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Ezabatu gaia"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Grabatu bideoa"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Atera irudi finkoa"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Atera argazkia"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Hasi bideoa grabatzen"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Aldatu pantaila osoko kamerara"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Aldatu aurreko eta atzeko kameren artean"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Utzi grabatzeari eta erantsi bideoa"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Utzi bideoa grabatzeari"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Mezuak aplikazioko argazkiak"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> argazki gorde dira \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" albumean</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> argazki gorde da \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" albumean</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> bideo gorde dira \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" albumean</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bideo gorde da \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" albumean</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> eranskin gorde dira \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" albumean</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> eranskin gorde da \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" albumean</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> eranskin gorde dira \"Deskargak\" atalean</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> eranskin gorde da \"Deskargak\" atalean</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">Gorde dira <xliff:g id="QUANTITY_1">%d</xliff:g> eranskin</item>
-      <item quantity="one">Gorde da <xliff:g id="QUANTITY_0">%d</xliff:g> eranskin</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Ezin izan dira gorde <xliff:g id="QUANTITY_1">%d</xliff:g> eranskin</item>
-      <item quantity="one">Ezin izan da gorde <xliff:g id="QUANTITY_0">%d</xliff:g> eranskin</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMSko eranskina gordeta dago"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Ezarpenak"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Artxibatuta"</string>
-    <string name="action_close" msgid="1840519376200478419">"Itxi"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Ezarpen aurreratuak"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Araztu"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Jakinarazpenak"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Soinua"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Isilik"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Egin dar-dar"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blokeatuta"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMSak entregatzearen txostenak"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Eskatu bidaltzen duzun SMS bakoitzaren entrega-txostena"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Eskuratu automatikoki"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Eskuratu MMS mezuak automatikoki"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Eskuratu automatikoki ibiltaritzan"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Eskuratu MMS mezuak automatikoki ibiltaritzan"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Talde-mezularitza"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Erabili MMSak mezu bakarra bidaltzeko hartzaile ugari daudenean"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"SMS mezuetarako aplikazio lehenetsia"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"SMS mezuetarako aplikazio lehenetsia"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Zure telefono-zenbakia"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Ezezaguna"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Irteerako mezuen soinuak"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Irauli SMSak"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Irauli jasotako SMS mezuen prozesatu gabeko datuak kanpoko memoriako fitxategira"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Irauli MMSak"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Irauli jasotako MMS mezuen prozesatu gabeko datuak kanpoko memoriako fitxategira"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Hari gabeko alertak"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Mezuaren aukerak"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopiatu testua"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Ikusi xehetasunak"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Ezabatu"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Birbidali"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Mezuaren xehetasunak"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Mota: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Testu-mezua"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimedia-mezua"</string>
-    <string name="from_label" msgid="1947831848146564875">"Igorlea: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Hartzailea: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Bidaltze-data: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Jasotze-data: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Gaia: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Tamaina: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Lehentasuna: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM txartela: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Handia"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normala"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Txikia"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"<xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>. SIM txartela"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Igorlearen helbidea ezkutatuta badago"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Ezin da mezua bidali eranskinak kargatzen ari diren bitartean."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Ezin da kargatu eranskina. Saiatu berriro."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Sarea ez dago prest. Saiatu berriro."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Ezabatu testua"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Aldatu testu eta zenbaki moduen artean"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Gehitu parte-hartzaile gehiago"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Berretsi parte-hartzaileak"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Hasi elkarrizketa bat"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Hautatu elementu hau"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Erreproduzitu bideoa"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Jendea eta aukerak"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Araztu"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Jendea eta aukerak"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Orokorra"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Elkarrizketa honetako jendea"</string>
-    <string name="action_call" msgid="6596167921517350362">"Deitu"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Bidali mezua"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Bidali mezua &lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g> txarteletik&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Bidali argazkiak</item>
-      <item quantity="one">Bidali argazkia</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Bidali audioak</item>
-      <item quantity="one">Bidali audioa</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Bidali bideoak</item>
-      <item quantity="one">Bidali bideoa</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Bidali kontaktu-txartelak</item>
-      <item quantity="one">Bidali kontaktu-txartela</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Bidali eranskinak</item>
-      <item quantity="one">Bidali eranskina</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> eranskin bidaltzeko prest daude</item>
-      <item quantity="one">Eranskin bat bidaltzeko prest dago</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Bidali iritzia"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Ikusi Google Play Store dendan"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Bertsioari buruzko informazioa"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"%1$s bertsioa"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Kode irekiko lizentziak"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Jakinarazpenak"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Eranskinen mugara iritsi zara"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Ezin izan da kargatu eranskina."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Kontaktuetan gehitu nahi duzu?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Gehitu kontaktua"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Gaia"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Gaia: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Kontaktu-txartela kargatzen"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Ezin izan da kargatu kontaktu-txartela"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Ikusi kontaktu-txartela"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktu</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontaktu</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontaktu-txartelak"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Urtebetetzea"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Oharrak"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Birbidali mezua"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Erantzun"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMSak desgaituta"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Mezuak bidaltzeko, ezarri Mezuak aplikazioa SMS mezuetarako aplikazio lehenetsi gisa"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Ezarri Mezuak aplikazioa SMS mezuetarako aplikazio lehenetsi gisa"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Aldatu"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Mezuak jasotzeko, ezarri Mezuak aplikazioa SMS mezuetarako aplikazio lehenetsi gisa"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Ez da hautatu SIM txartel hobetsirik SMS mezuak bidaltzeko"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Gailuaren jabeak ez du aplikazio hau erabiltzea baimendu."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Ados"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Parte-hartzaile gehiegi daude elkarrizketan"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Kontaktuek ez dute balio</item>
-      <item quantity="one">Kontaktuak ez du balio</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Ezin izan da kargatu kamerako irudia"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Zu: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Zirriborroa"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Elkarrizketak hasten dituzunean, hemen agertuko dira"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Artxibatutako elkarrizketak hemen ageri dira"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Elkarrizketak kargatzen…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Argazkia"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audio-klipa"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Bideoa"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kontaktu-txartela"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Desegin"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Saiatu berriro"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Mezu berria hasteko, idatzi kontaktu baten izena edo telefono-zenbakia."</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokeatu"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blokeatu <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Desblokeatu <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> blokeatu nahi duzu?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Zenbaki horren mezuak jasotzen jarraituko duzu, baina ez duzu horren jakinarazpenik jasoko aurrerantzean. Elkarrizketa artxibatu egingo da."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blokeatutako kontaktuak"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DESBLOKEATU"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blokeatutako kontaktuak"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Aukeratu irudia dokumentuen liburutegitik"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Mezua bidaltzen"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Mezua bidali da"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mugikorreko datuak desaktibatuta daude. Egiaztatu ezarpenak."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Ezin dira bidali mezuak hegaldi moduan"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Ezin izan da bidali mezua"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Mezua deskargatu da"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mugikorreko datuak desaktibatuta daude. Egiaztatu ezarpenak."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Ezin da deskargatu mezua hegaldi moduan"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Ezin izan da deskargatu mezua"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Bat"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Bi"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Hiru"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Lau"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Bost"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Sei"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Zazpi"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Zortzi"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Bederatzi"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Ezin da bidali mezua <xliff:g id="CARRIERNAME">%1$s</xliff:g> operadorearekin. Errorea: <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Ezin da bidali mezua operadore ezezagunarekin. Errorea: <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Ez da bidali mezua: zerbitzua ez dago aktibatuta sarean"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Mezua ez da bidali. Helmugaren helbideak ez du balio."</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Mezua ez da bidali. Ez du balio."</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Mezua ez da bidali. Edukia ez da onartzen."</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Mezua ez da bidali. Ez da onartzen."</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Ez da bidali mezua: handiegia da"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Mezu berria"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Ikusi"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Irudia"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Ezin izan da aurkitu aplikazio egokia"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Kendu hartzailea"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Mezu berria"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Utzi"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Editatu sarbide-puntua"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Ezarri gabe"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Izena"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS proxya"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS ataka"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN mota"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Ezabatu APNa"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN berria"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Gorde"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Baztertu"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"\"Izena\" eremua ezin da hutsik utzi."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"\"APN\" eremua ezin da hutsik utzi."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"\"MCC\" eremuak 3 digitu izan behar ditu."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"\"MNC\" eremuak 2 edo 3 digitu izan behar ditu."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"APN ezarpen lehenetsiak leheneratzen."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Berrezarri ezarpen lehenetsiak"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"APN ezarpen lehenetsiak berrezarri dira."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Izengabea"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Sarbide-puntuen izenak"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNak"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN berria"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Erabiltzaile honek ezin ditu APN ezarpenak atzitu"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Arbelean kopiatu nahi duzu?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopiatu"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> txartelean"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Orokorra"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Ezarpen aurreratuak"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Ezarpen orokorrak"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Ezarpen aurreratuak"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM txartela"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Bidali SMS mezu bana hartzaile guztiei. Zuk bakarrik jasoko dituzu erantzunak"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Bidali MMS mezu bakarra hartzaile guztiei"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Zenbaki ezezaguna"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Mezu berria"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Mezu berria."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM hautatzailea"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> hautatuta, SIM hautatzailea"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Editatu gaia"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Hautatu SIM txartela edo editatu gaia"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Eduki sakatuta audioa grabatzeko"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Hasi elkarrizketa bat"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Mezuak"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Mezuak aplikazioko zerrenda"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Mezuak"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Mezu berria"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Elkarrizketa-zerrenda"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Elkarrizketak kargatzen"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Mezuak kargatzen"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Ikusi elkarrizketa gehiago"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Ikusi mezu gehiago"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Elkarrizketa ezabatu egin da"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Ezabatu egin da elkarrizketa. Ukitu hau Mezuak aplikazioko beste elkarrizketa bat erakusteko."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blokeatu da"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Desblokeatu da"</string>
-    <string name="db_full" msgid="8459265782521418031">"Toki gutxi geratzen da. Agian ez dira gordeko datu batzuk."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Hautatu eranskinak"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Berretsi hautapena"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> hautatuta"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Kendu eranskin bat edo gehiago, eta saiatu berriro."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Hala eta guztiz ere, mezua bidaltzen saia zaitezke, baina agian ez da entregatuko, eranskinetako batzuk kendu ezean."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Bideo bakarra bidal dezakezu mezu bakoitzeko. Kendu gainerako bideoak eta saiatu berriro."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Mezuak aplikazioak ezin izan du eranskina kargatu."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Bidali halere"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Ezin izan da hasi elkarrizketa"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> hautatu da"</string>
-</resources>
diff --git a/res/values-fa/arrays.xml b/res/values-fa/arrays.xml
deleted file mode 100644
index 01b6f3e..0000000
--- a/res/values-fa/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"بدون موضوع"</item>
-    <item msgid="272485471009191934">"بدون موضوع"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"بله"</item>
-    <item msgid="6049132459802288033">"خیر"</item>
-    <item msgid="3084376867445867895">"تأیید"</item>
-    <item msgid="3155097332660174689">"هه‌هه"</item>
-    <item msgid="2611328818571146775">"سپاسگزارم"</item>
-    <item msgid="4881335087096496747">"موافقم"</item>
-    <item msgid="2422296858597420738">"خوب"</item>
-    <item msgid="4805581752819452687">"در راهم"</item>
-    <item msgid="4746700499431366214">"بسیار خوب، بگذارید بعداً با شما تماس بگیرم"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
deleted file mode 100644
index a1bf9d8..0000000
--- a/res/values-fa/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"پیام‌رسانی"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"پیام‌رسانی"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"انتخاب مکالمه"</string>
-    <string name="action_settings" msgid="1329008122345201684">"تنظیمات"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"ارسال پیام"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"افزودن پیوست"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"راهنما"</string>
-    <string name="welcome" msgid="2857560951820802321">"خوش آمدید"</string>
-    <string name="skip" msgid="7238879696319945853">"رد شدن"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"‏بعدی &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"بعدی"</string>
-    <string name="exit" msgid="1905187380359981199">"خروج"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"‏تنظیمات &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"تنظیمات"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"«پیام‌رسانی» به مجوز دسترسی به پیامک، تلفن و مخاطبین نیاز دارد."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"‏می‌توانید مجوزها را در تنظیمات &gt; برنامه‌ها &gt; پیام‌رسانی &gt; مجوزها تغییر دهید."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"می‌توانید مجوزها را در تنظیمات، برنامه‌ها، پیام‌رسانی، مجوزها تغییر دهید."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"مکرر"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"همه مخاطبین"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"ارسال به <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"گرفتن عکس یا ویدیو"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"انتخاب تصاویر از این دستگاه"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ضبط صدا"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"انتخاب عکس"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"رسانه انتخاب شده است."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"رسانه انتخاب نشده است."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> مورد انتخاب شد"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"تاریخ تصویر <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"تصویر"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ضبط صدا"</string>
-    <string name="action_share" msgid="2143483844803153871">"اشتراک‌گذاری"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"هم‌اکنون"</string>
-    <string name="posted_now" msgid="867560789350406701">"اکنون"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one">‏<xliff:g id="COUNT_1">%d</xliff:g> دقیقه</item>
-      <item quantity="other">‏<xliff:g id="COUNT_1">%d</xliff:g> دقیقه</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one">‏<xliff:g id="COUNT_1">%d</xliff:g> ساعت</item>
-      <item quantity="other">‏<xliff:g id="COUNT_1">%d</xliff:g> ساعت</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one">‏<xliff:g id="COUNT_1">%d</xliff:g> روز</item>
-      <item quantity="other">‏<xliff:g id="COUNT_1">%d</xliff:g> روز</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one">‏<xliff:g id="COUNT">%d</xliff:g> هفته</item>
-      <item quantity="other">‏<xliff:g id="COUNT">%d</xliff:g> هفته</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one">‏<xliff:g id="COUNT">%d</xliff:g> ماه</item>
-      <item quantity="other">‏<xliff:g id="COUNT">%d</xliff:g> ماه</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one">‏<xliff:g id="COUNT">%d</xliff:g> سال</item>
-      <item quantity="other">‏<xliff:g id="COUNT">%d</xliff:g> سال</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"پیام رده ۰"</string>
-    <string name="save" msgid="5081141452059463572">"ذخیره‌"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"فضای ذخیره‌سازی دستگاه کم است. «پیام‌رسانی» برای آزاد کردن فضا، پیام‌های قدیمی‌تر را به‌طور خودکار پاک می‌کند."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"فضای ذخیره‌سازی رو به پایان است"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"شاید تا وقتی فضای بیشتری در دستگاهتان در دسترس نباشد، «پیام‌رسانی» پیام ارسال یا دریافت نکند."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"فضای ذخیره‌سازی پیامک کم است. ممکن است لازم باشد پیام‌ها را حذف کنید."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"شماره تلفنتان را تأیید کنید"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"با انجام این مرحله یک‌باره مطمئن می‌شوید «پیام‌رسانی» پیام‌های گروهی شما را به‌درستی تحویل می‌دهد."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"شماره تلفن"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"حذف همه پیام‌های دارای رسانه"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"حذف پیام‌های قدیمی‌تر از <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"حذف خودکار پیام‌های قدیمی‌تر از <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"نادیده گرفتن"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"همه پیام‌های دارای رسانه حذف شوند؟"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"پیام‌های قدیمی‌تر از <xliff:g id="DURATION">%s</xliff:g> حذف شوند؟"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"پیام‌های قدیمی‌تر از <xliff:g id="DURATION">%s</xliff:g> حذف شود و حذف خودکار روشن شود؟"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> گفت"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"گفتید"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"پیام از <xliff:g id="SENDER">%s</xliff:g>:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"پیامی ارسال کردید"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"در حال ارسال…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"ارسال نشد. برای امتحان مجدد لمس کنید."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"ارسال نشد. در حال امتحان مجدد…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"ارسال مجدد یا حذف"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"لطفاً یک تماس صوتی با خدمات اضطراری برقرار کنید. در حال حاضر تحویل پیامک شما ممکن نیست."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"انجام نشد"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"‏پیام MMS جدید برای دانلود"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"‏پیام MMS جدید"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"دانلود نشد"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"برای امتحان مجدد لمس کنید"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"برای دانلود لمس کنید"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"دانلود یا حذف"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"در حال دانلود…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"پیام منقضی شده است یا در دسترس نیست"</string>
-    <string name="mms_info" msgid="3402311750134118165">"اندازه: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>، تاریخ انقضا: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"ارسال نمی‌شود. گیرنده معتبر نیست."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"سرویس در شبکه فعال نشده است"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"به علت مشکل شبکه ارسال نشد"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"پیام منقضی شده است یا در دسترس نیست"</string>
-    <string name="no_subject" msgid="5587715902648568767">"‫(بدون موضوع)‏"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"فرستنده ناشناس"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"تحویل داده شد"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"‫پیام <xliff:g id="SUBJECT">%1$s</xliff:g> از <xliff:g id="FROM">%2$s</xliff:g> دانلود نشد.‏"</string>
-    <string name="low_memory" msgid="5300743415198486619">"به دلیل حافظه کم، عملیات پایگاه داده انجام نشد"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"پیام ارسال نشد"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"بعضی از پیام‌ها در «پیام‌رسانی» ارسال نشدند"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one">‏<xliff:g id="MESSAGES_1">%d</xliff:g> پیام در <xliff:g id="CONVERSATIONS">%d</xliff:g> مکالمه</item>
-      <item quantity="other">‏<xliff:g id="MESSAGES_1">%d</xliff:g> پیام در <xliff:g id="CONVERSATIONS">%d</xliff:g> مکالمه</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"پیام دانلود نشد"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"بعضی از پیام‌ها در «پیام‌رسانی» دانلود نشدند"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one">‏<xliff:g id="MESSAGES_1">%d</xliff:g> پیام در <xliff:g id="CONVERSATIONS">%d</xliff:g> مکالمه</item>
-      <item quantity="other">‏<xliff:g id="MESSAGES_1">%d</xliff:g> پیام در <xliff:g id="CONVERSATIONS">%d</xliff:g> مکالمه</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"پیام به <xliff:g id="NUMBER">%1$s</xliff:g> ارسال نشد"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"لطفاً یک تماس صوتی با خدمات اضطراری برقرار کنید. در حال حاضر تحویل پیامک شما به <xliff:g id="NUMBER">%1$s</xliff:g> ممکن نیست."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> پیام جدید</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> پیام جدید</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"شروع"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"دوربین در دسترس نیست"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"دوربین در دسترس نیست"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"ضبط ویدیو در دسترس نیست"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"رسانه ذخیره نمی‌شود"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"عکس نمی‌گیرد"</string>
-    <string name="back" msgid="1477626055115561645">"برگشت"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"بایگانی شده"</string>
-    <string name="action_delete" msgid="4076795795307486019">"حذف"</string>
-    <string name="action_archive" msgid="5437034800324083170">"بایگانی"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"لغو بایگانی"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"خاموش کردن اعلان‌ها"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"روشن کردن اعلان‌ها"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"افزودن مخاطب"</string>
-    <string name="action_download" msgid="7786338136368564146">"دانلود"</string>
-    <string name="action_send" msgid="377635240181672039">"ارسال"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"حذف"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"این پیام حذف شود؟"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"این عملکرد قابل واگرد نیست."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"حذف"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">این مکالمه حذف شود؟</item>
-      <item quantity="other">این مکالمه‌ها حذف شود؟</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"حذف"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"لغو"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"به"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"انتخاب چند تصویر"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"تأیید انتخاب"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"صدا ضبط نمی‌شود. دوباره امتحان کنید."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"صدا پخش نمی‌شود. دوباره امتحان کنید."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"صدا ذخیره نشد. دوباره امتحان کنید."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"لمس کنید و نگه‌دارید"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">"، "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"تصویر"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"کلیپ صوتی"</string>
-    <string name="notification_video" msgid="4331423498662606204">"ویدیو"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"کارت ویزیت"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"دانلود"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"پاسخ از طریق پیامک"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"‏پاسخ از طریق MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"پاسخ"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one">‏<xliff:g id="COUNT_1">%d</xliff:g> شرکت‌کننده</item>
-      <item quantity="other">‏<xliff:g id="COUNT_1">%d</xliff:g> شرکت‌کننده</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"من"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"مخاطب مسدود و بایگانی شد"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"انسداد مخاطب برطرف شد و از بایگانی خارج شد"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> بایگانی شد"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> از بایگانی خارج شد"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"اعلان‌ها خاموش شد"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"اعلان‌ها روشن شد"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"همه چیز تنظیم شد. ارسال را دوباره لمس کنید."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"«پیام‌رسانی» با موفقیت به‌عنوان برنامه پیش‌فرض پیامک تنظیم شد."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">صرف‌‌نظر از پیوست</item>
-      <item quantity="other">صرف‌‌نظر از پیوست‌ها</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"پیوست صوتی"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"پخش پیوست صوتی"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"توقف موقت"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"پیام از <xliff:g id="SENDER">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"پیام ناموفق از <xliff:g id="SENDER">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"پیام از <xliff:g id="SENDER">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"پیام ارسال نشده به <xliff:g id="CONTACT">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"ارسال پیام به <xliff:g id="CONTACT">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"پیام ناموفق به <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"پیام به <xliff:g id="CONTACT">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"پیام ناموفق از <xliff:g id="SENDER">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>. ‏<xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"پیام از <xliff:g id="SENDER">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>. ‏<xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"پیام ارسال نشده به <xliff:g id="GROUP">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"ارسال پیام به <xliff:g id="GROUP">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"پیام ناموفق به <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"پیام به <xliff:g id="GROUP">%1$s</xliff:g>: ‏<xliff:g id="MESSAGE">%2$s</xliff:g>. زمان: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"پیام ناموفق. برای امتحان مجدد، لمس کنید."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"مکالمه با <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"حذف موضوع"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"فیلم‌برداری"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"ضبط تصویر ثابت"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"عکس گرفتن"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"شروع فیلم‌برداری"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"تغییر به دوربین تمام صفحه"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"جابه‌جایی بین دوربین جلو و عقب"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"توقف ضبط و پیوست ویدیو"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"توقف ضبط ویدیو"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"عکس‌های «پیام‌رسانی»"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> عکس در آلبوم «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ذخیره شد</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> عکس در آلبوم «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ذخیره شد</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> ویدیو در آلبوم «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ذخیره شد</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ویدیو در آلبوم «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ذخیره شد</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> پیوست در آلبوم «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ذخیره شد</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> پیوست در آلبوم «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ذخیره شد</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> پیوست در «دانلودها» ذخیره شد</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> پیوست در «دانلودها» ذخیره شد</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one">‏<xliff:g id="QUANTITY_1">%d</xliff:g> پیوست ذخیره شد</item>
-      <item quantity="other">‏<xliff:g id="QUANTITY_1">%d</xliff:g> پیوست ذخیره شد</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">‏<xliff:g id="QUANTITY_1">%d</xliff:g> پیوست ذخیره نشد</item>
-      <item quantity="other">‏<xliff:g id="QUANTITY_1">%d</xliff:g> پیوست ذخیره نشد</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"‏پیوست MMS ذخیره شد"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"تنظیمات"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"بایگانی شد"</string>
-    <string name="action_close" msgid="1840519376200478419">"بستن"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"پیشرفته"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"اشکال‌زدایی"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"اعلان‌ها"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"صدا"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"بی‌صدا"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"لرزش"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"مسدود شده"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"گزارش‌های تحویل پیامک"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"درخواست گزارش تحویل برای هر پیامکی که ارسال می‌کنید"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"بازیابی خودکار"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"‏بازیابی خودکار پیام‌های MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"بازیابی خودکار در طول رومینگ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"‏بازیابی خودکار MMS هنگام رومینگ"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"پیام‌رسانی گروهی"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"‏در صورت وجود چند گیرنده، برای ارسال یک پیام از MMS استفاده شود"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"برنامه پیامک پیش‌فرض"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"برنامه پیامک پیش‌فرض"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"شماره تلفن شما"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"نامشخص"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"صداهای پیام خروجی"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"نسخه‌برداری پیامک"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"نسخه‌برداری اطلاعات خام پیامک دریافتی در فایل فضای ذخیره‌سازی خارجی"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"‏نسخه‌برداری MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"‏نسخه‌برداری از اطلاعات خام MMS دریافتی در فایل فضای ذخیره‌سازی خارجی"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"هشدارهای بی‌سیم"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"گزینه‌های پیام"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"کپی کردن نوشتار"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"مشاهده جزئیات"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"حذف"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"بازارسال"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"جزئیات پیام"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"نوع: "</string>
-    <string name="text_message" msgid="7415419755252205721">"پیامک"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"پیام چندرسانه‌ای"</string>
-    <string name="from_label" msgid="1947831848146564875">"از: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"به: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"ارسال شده: "</string>
-    <string name="received_label" msgid="4442494712757995203">"دریافت شده: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"موضوع: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"اندازه: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"اولویت: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"سیم‌کارت: "</string>
-    <string name="priority_high" msgid="728836357310908368">"زیاد"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"عادی"</string>
-    <string name="priority_low" msgid="7398724779026801851">"کم"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"سیم‌کارت <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"مخفی کردن آدرس فرستنده"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"نمی‌توانید در حال بارگیری پیوست‌ها، پیام ارسال کنید."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"پیوست بارگیری نمی‌شود. دوباره امتحان کنید."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"شبکه آماده نیست. دوباره امتحان کنید."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"حذف نوشتار"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"جابه‌جایی بین وارد کردن نوشتار و عدد"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"افزودن شرکت‌کننده‌های بیشتر"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"تأیید شرکت‌کنندگان"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"شروع مکالمه جدید"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"انتخاب این مورد"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"پخش ویدیو"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"افراد و گزینه‌ها"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"اشکال‌زدایی"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"افراد و گزینه‌ها"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"کلی"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"افراد در این مکالمه"</string>
-    <string name="action_call" msgid="6596167921517350362">"برقراری تماس تلفنی"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"ارسال پیام"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"‏ارسال پیام&lt;br/&gt;&lt;small&gt;از <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">ارسال عکس</item>
-      <item quantity="other">ارسال عکس‌ها</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">ارسال فایل صوتی</item>
-      <item quantity="other">ارسال فایل‌های صوتی</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">ارسال ویدیو</item>
-      <item quantity="other">ارسال ویدیوها</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">ارسال کارت تماس</item>
-      <item quantity="other">ارسال کارت‌های تماس</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">ارسال پیوست</item>
-      <item quantity="other">ارسال پیوست‌ها</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one">‏<xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> پیوست آماده ارسال است</item>
-      <item quantity="other">‏<xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> پیوست آماده ارسال است</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"ارسال بازخورد"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"‏نمایش در فروشگاه Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"اطلاعات نسخه"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"‏نسخه %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"مجوزهای منبع باز"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"اعلان‌ها"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"به حد مجاز پیوست رسیدید"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"پیوست بارگیری نشد."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"به مخاطبین افزوده شود؟"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"افزودن مخاطب"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"موضوع"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"موضوع: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"در حال بارگیری کارت مخاطب"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"کارت مخاطب بارگیری نشد"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"مشاهده کارت مخاطب"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> مخاطب</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> مخاطب</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"کارت‌های مخاطب"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"تاریخ تولد"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"یادداشت‌ها"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"بازارسال پیام"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"پاسخ"</string>
-    <string name="plus_one" msgid="9010288417554932581">"1+"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"پیامک غیرفعال شد"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"برای ارسال، «پیام‌رسانی» را به‌عنوان برنامه پیش‌فرض پیامک تنظیم کنید"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"«پیام‌رسانی» را به‌عنوان برنامه پیش‌فرض پیامک تنظیم کنید"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"تغییر"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"برای دریافت پیام، «پیام‌رسانی» را به‌عنوان برنامه پیش‌فرض پیامک تنظیم کنید"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"هیچ سیم‌کارت برگزیده‌ای برای ارسال پیامک‌ها انتخاب نشده است"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"مالک دستگاه این برنامه را مجاز نکرده است."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"تأیید"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"شرکت‌کننده‌های خیلی زیادی در مکالمه وجود دارد"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">مخاطب نامعتبر</item>
-      <item quantity="other">مخاطبین نامعتبر</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"تصویر دوربین بارگیری نشد"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"شما: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"پيش‌نويس"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"وقتی مکالمه جدیدی را شروع کنید، آن را در این لیست مشاهده می‌کنید"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"مکالمات بایگانی‌شده در اینجا نشان داده می‌شود"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"در حال بارگیری مکالمات…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"تصویر"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"کلیپ صوتی"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"ویدیو"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"کارت ویزیت"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"واگرد"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"امتحان مجدد"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"نام یا شماره تلفن مخاطب را برای شروع یک پیام جدید وارد کنید"</string>
-    <string name="action_block" msgid="9032076625645190136">"مسدود کردن"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"مسدود کردن <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"رفع انسداد <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> مسدود شود؟"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"همچنان از این شماره پیام‌ها را دریافت می‌کنید، اما دیگر به شما اطلاع داده نمی‌شود. این مکالمه بایگانی می‌شود."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"مخاطبین مسدود شده"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"رفع انسداد"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"مخاطبین مسدود شده"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"انتخاب تصویر از کتابخانه سند"</string>
-    <string name="sending_message" msgid="6363584950085384929">"در حال ارسال پیام"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"پیام ارسال شد"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"داده شبکه تلفن همراه خاموش است. تنظیماتتان را بررسی کنید."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"در حالت هواپیما پیام‌ها ارسال نمی‌شوند"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"پیام ارسال نشد"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"پیام دانلود شد"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"داده سلولی خاموش است. تنظیماتتان را بررسی کنید."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"پیام‌ در حالت هواپیما دانلود نمی‌شود"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"پیام دانلود نشد"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"صفر"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"یک"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"دو"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"سه"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"چهار"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"پنج"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"شش"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"هفت"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"هشت"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"نه"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"ارسال پیام با <xliff:g id="CARRIERNAME">%1$s</xliff:g> امکان‌پذیر نیست، خطای <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"ارسال پیام با شرکت مخابراتی ناشناس امکان‌پذیر نیست، خطای <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"بازارسال: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"پیام ارسال نشد: سرویس در شبکه فعال نیست"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"پیام ارسال نشد: آدرس مقصد نامعتبر است"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"پیام ارسال نشد: پیام نامعتبر است"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"پیام ارسال نشد: محتوا پشتیبانی نمی‌شود"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"پیام ارسال نشد: پیام پشتیبانی نمی‌شود"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"پیام ارسال نشد: بیش از حد بزرگ است"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"پیام جدید"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"مشاهده"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"تصویر"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"برنامه مناسبی یافت نشد"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"حذف گیرنده"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"پیام جدید"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"لغو"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"ویرایش نقطه دستیابی"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"تنظیم نشده"</string>
-    <string name="apn_name" msgid="1572691851070894985">"نام"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"نام نقطه دستیابی"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"پروکسی فراپیام"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"درگاه فراپیام"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"نوع نام نقطه دستیابی"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"حذف نام نقطه دستیابی"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"نام نقطه دستیابی جدید"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"ذخیره‌"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"صرف‌نظر کردن"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"فیلد نام نباید خالی باشد."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"نام نقطه دستیابی نباید خالی باشد."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"‏فیلد MCC باید ۳ رقمی باشد."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"‏فیلد MNC باید ۲ یا ۳ رقمی باشد."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"درحال بازیابی تنظیمات پیش‌فرض نام نقطه دستیابی."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"بازنشانی به پیش‌فرض"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"تنظیمات پیش‌فرض نام نقطه دستیابی بازنشانی شد."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"بدون عنوان"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"نام‌های نقطه دسترسی"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"نام‌های نقاط دستیابی"</string>
-    <string name="menu_new" msgid="8286285392706532511">"نام نقطه دستیابی جدید"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"تنظیمات نام تقطه دسترسی برای این کاربر در دسترس نیست"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"کپی در بریده‌دان؟"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"کپی"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"به <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"کلی"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"پیشرفته"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"تنظیمات کلی"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"تنظیمات پیشرفته"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"سیم کارت «<xliff:g id="SIM_NAME">%s</xliff:g>»"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"ارسال پیامک‌های جداگانه به همه گیرندگان. فقط شما جواب‌ها را دریافت می‌کنید"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"‏ارسال یک MMS تکی به همه گیرندگان"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"شماره ناشناس"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"پیام جدید"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"پیام جدید."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"انتخاب سیم"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> انتخاب شد، انتخاب‌گر سیم‌کارت"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"ویرایش موضوع"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"انتخاب سیم کارت یا ویرایش موضوع"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"برای ضبط کردن صدا، لمس کنید و نگه‌دارید"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"شروع مکالمه جدید"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"پیام‌رسانی"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"فهرست «پیام‌رسانی»"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"پیام‌رسانی"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"پیام جدید"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"فهرست مکالمات"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"در حال بارگیری مکالمات"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"در حال بارگیری پیام‌ها"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"مشاهده مکالمات بیشتر"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"مشاهده پیام‌های دیگر"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"مکالمه حذف شد"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"مکالمه حذف شد. لمس کنید تا مکالمه «پیام‌رسانی» دیگری نشان داده شود."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"مسدود شد"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"گشوده شد"</string>
-    <string name="db_full" msgid="8459265782521418031">"فضای ذخیره‌سازی کم است. ممکن است برخی از اطلاعات از دست بروند."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"انتخاب پیوست‌ها"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"تأیید انتخاب"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> مورد انتخاب شد"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"لطفاً یک یا چند پیوست را بردارید و دوباره امتحان کنید."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"می‌توانید سعی کنید پیامتان را ارسال کنید اما شاید تا وقتی که یک یا چند پیوست را برندارید، تحویل داده نشود."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"فقط می‌توانید یک ویدیو در هر پیام ارسال کنید. لطفاً ویدیوهای اضافی را حذف کنید و دوباره امتحان نمایید."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"«پیام‌رسانی» پیوست را بارگیری نکرد."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"در هر حال فرستاده شود"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"مکالمه را نمی‌توان شروع کرد"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g>‏ (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> انتخاب شد"</string>
-</resources>
diff --git a/res/values-fi/arrays.xml b/res/values-fi/arrays.xml
deleted file mode 100644
index 95d4f23..0000000
--- a/res/values-fi/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"ei aihetta"</item>
-    <item msgid="272485471009191934">"ei aihetta"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Kyllä"</item>
-    <item msgid="6049132459802288033">"Ei"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Kiitos"</item>
-    <item msgid="4881335087096496747">"Olen samaa mieltä"</item>
-    <item msgid="2422296858597420738">"Kiva"</item>
-    <item msgid="4805581752819452687">"Matkalla"</item>
-    <item msgid="4746700499431366214">"OK, palaan asiaan"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
deleted file mode 100644
index a07825b..0000000
--- a/res/values-fi/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Viestit"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Viestit"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Valitse keskustelu"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Asetukset"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Lähetä viesti"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Lisää liite"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Ohje"</string>
-    <string name="welcome" msgid="2857560951820802321">"Tervetuloa"</string>
-    <string name="skip" msgid="7238879696319945853">"Ohita"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Seuraava &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Seuraava"</string>
-    <string name="exit" msgid="1905187380359981199">"Sulje"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Asetukset &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Asetukset"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Viestit tarvitsee käyttöoikeuden tekstiviesteihin, puhelimeen ja yhteystietoihin."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Voit muuttaa käyttöoikeuksia kohdassa Asetukset &gt; Sovellukset &gt; Viestit &gt; Käyttöoikeudet."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Voit muuttaa käyttöoikeuksia kohdassa Asetukset, Sovellukset, Viestit, Käyttöoikeudet."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Usein käytetyt"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Yhteystiedot"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Lähetä numeroon <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Tallenna kuva tai video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Valitse kuvia tästä laitteesta"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Tallenna ääntä"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Valitse valokuva"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Media on valittu."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Median valinta on poistettu."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> valittu"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"kuva <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"kuva"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Tallenna ääntä"</string>
-    <string name="action_share" msgid="2143483844803153871">"Jaa"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Juuri nyt"</string>
-    <string name="posted_now" msgid="867560789350406701">"Nyt"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> minuutti</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> tuntia</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> tunti</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> päivää</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> päivä</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> viikkoa</item>
-      <item quantity="one">viikko</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kuukautta</item>
-      <item quantity="one">kuukausi</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> vuotta</item>
-      <item quantity="one">vuosi</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Luokan 0 viesti"</string>
-    <string name="save" msgid="5081141452059463572">"Tallenna"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Laitteen tila on vähissä. Viestit poistaa automaattisesti vanhempia viestejä vapauttaakseen tilaa."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Tallennustila vähissä"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Viestit ei ehkä lähetä tai vastaanota viestejä ennen kuin laitteessa on enemmän vapaata tilaa."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Tekstiviestien tallennustila on vähissä. Harkitse viestien poistamista."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Vahvista puhelinnumerosi"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Tekemällä tämän kertaluontoisen vaiheen varmistat, että Viestit toimittaa ryhmäviestisi oikein."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Puhelinnumero"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Poista kaikki mediaa sisältävät viestit"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Poista viestit, joiden ikä on yli <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Poista automaattisesti viestit, jotka ovat vanhempia kuin <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ohita"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Poistetaanko kaikki mediaa sisältävät viestit?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Poistetaanko viestit, jotka ovat vanhempia kuin <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Poistetaanko viestit, jotka ovat vanhempia kuin <xliff:g id="DURATION">%s</xliff:g>, ja otetaanko automaattinen poisto käyttöön?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> sanoi"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Sinä sanoit"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Viesti käyttäjältä <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Lähetit viestin"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Lähetetään…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Ei lähetetty. Yritä uudelleen koskettamalla."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Ei lähetetty. Yritetään uudelleen…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Lähetä uudelleen tai poista"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Ota yhteyttä hätäpalveluihin soittamalla äänipuhelu. Tekstiviestiäsi ei voida toimittaa tällä hetkellä."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Epäonnistui"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Uusi multimediaviesti ladattavissa"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Uusi multimediaviesti"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Lataus epäonnistui"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Yritä uudelleen koskettamalla"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Lataa koskettamalla"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Lataa tai poista"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Ladataan…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Viesti on vanhentunut tai ei ole käytettävissä"</string>
-    <string name="mms_info" msgid="3402311750134118165">"koko: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, vanhenee: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Ei voi lähettää. Vastaanottaja ei kelpaa."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Palvelua ei ole aktivoitu verkossa"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Ei voitu lähettää verkkovian takia"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Viesti on vanhentunut tai ei ole käytettävissä"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Ei aihetta)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Tuntematon lähettäjä"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Toimitettu"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Lähettäjän <xliff:g id="FROM">%2$s</xliff:g> viestin <xliff:g id="SUBJECT">%1$s</xliff:g> lataaminen epäonnistui."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Tietokantatoimintoa ei voi suorittaa: muisti on vähissä"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Viestiä ei lähetetty"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Joitakin viestejä ei lähetetty Viesteissä."</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> viestiä <xliff:g id="CONVERSATIONS">%d</xliff:g> keskustelussa</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> viesti yhdessä keskustelussa</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Viestiä ei ladattu."</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Joitakin viestejä ei ladattu Viesteissä."</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> viestiä <xliff:g id="CONVERSATIONS">%d</xliff:g> keskustelussa</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> viesti yhdessä keskustelussa</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Viestiä numeroon <xliff:g id="NUMBER">%1$s</xliff:g> ei lähetetty."</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Ota yhteyttä hätäpalveluihin soittamalla äänipuhelu. Tekstiviestiäsi numeroon <xliff:g id="NUMBER">%1$s</xliff:g> ei voida toimittaa tällä hetkellä."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> uutta viestiä</item>
-      <item quantity="one">Uusi viesti</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Käynnistä"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera ei käytettävissä"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera ei käytettävissä"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Videon kaappaus ei käytettävissä"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Mediaa ei voi tallentaa"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Kuvan ottaminen ei onnistu."</string>
-    <string name="back" msgid="1477626055115561645">"Edellinen"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arkistoitu"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Poista"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arkistoi"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Poista arkistosta"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Poista ilmoitukset käytöstä"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Ota ilmoitukset käyttöön"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Lisää kontakti"</string>
-    <string name="action_download" msgid="7786338136368564146">"Lataa"</string>
-    <string name="action_send" msgid="377635240181672039">"Lähetä"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Poista"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Poistetaanko tämä viesti?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Tätä toimintoa ei voi kumota."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Poista"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Poistetaanko nämä keskustelut?</item>
-      <item quantity="one">Poistetaanko tämä keskustelu?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Poista"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Peruuta"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Vastaanottaja"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Valitse useita kuvia"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Vahvista valinta"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+ <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Ääntä ei voi tallentaa. Yritä uudelleen."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Ääntä ei voi toistaa. Yritä uudelleen."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Ääntä ei voitu tallentaa. Yritä uudelleen."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Kosketa pitkään"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Kuva"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Äänileike"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Yhteystietokortti"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Lataa"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Vastaa tekstiviestitse"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Vastaa MMS-viestillä"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Vastaa"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> osallistujaa</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> osallistuja</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Minä"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Yhteystieto estetty ja arkistoitu"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Yhteystiedon esto on poistettu, ja se on poistettu arkistosta."</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> arkistoitua"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> poistettiin arkistosta"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Ilmoitukset on poistettu käytöstä."</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Ilmoitukset on otettu käyttöön."</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Kaikki valmiina. Kosketa Lähetä uudelleen."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Viestit asetettiin oletustekstiviestisovellukseksi."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Hylkää liitteet</item>
-      <item quantity="one">Hylkää liite</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Ääniliite"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Toista ääniliite"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Tauko"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Viesti lähettäjältä <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Epäonnistunut viesti lähettäjältä <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Viesti lähettäjältä <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Lähettämätön viesti vastaanottajalle <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Lähetetään viestiä vastaanottajalle <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Epäonnistunut viesti vastaanottajalle <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Viesti vastaanottajalle <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Epäonnistunut viesti lähettäjältä <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Viesti lähettäjältä <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Lähettämätön viesti vastaanottajalle <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Lähetetään viestiä vastaanottajalle <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Epäonnistunut viesti vastaanottajalle <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Viesti vastaanottajalle <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Aika: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Viesti epäonnistui. Yritä uudelleen koskettamalla."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Keskustelu henkilöiden <xliff:g id="PARTICIPANTS">%s</xliff:g> kanssa"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Poista aihe"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Tallenna video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Ota kuva"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Ota kuva"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Aloita videon tallentaminen"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Siirry koko näytön kameraan"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Vaihda etu- ja takakameran välillä"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Lopeta tallennus ja liitä video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Lopeta videon tallentaminen"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Viestien valokuvat"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> valokuvaa tallennettu albumiin <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> valokuva tallennettu albumiin <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videota tallennettu albumiin <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video tallennettu albumiin <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> liitettä tallennettu albumiin <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> liite tallennettu albumiin <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> liitettä tallennettu Lataukset-kansioon</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> liite tallennettu Lataukset-kansioon</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> liitettä tallennettiin</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> liite tallennettiin.</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> liitteen tallentaminen epäonnistui.</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> liitteen tallentaminen epäonnistui.</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Multimedialiite tallennettiin"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Asetukset"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arkistoitu"</string>
-    <string name="action_close" msgid="1840519376200478419">"Sulje"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"Multimediaviesti"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Lisäasetukset"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Vianetsintä"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Ilmoitukset"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Ääni"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Äänetön"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Värinä"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Estetty"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Tekstiviestin lähetystiedot"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Pyydä lähetystiedot kaikista lähettämistäsi tekstiviesteistä"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automaattilataus"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Lataa MMS-viestit automaattisesti"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Automaattilataus roaming-tilassa"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Hae MMS-viestit automaattisesti roaming-tilassa."</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Ryhmäviestit"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Jaa yksi multimediaviesti useille vastaanottajille"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Oletusarvoinen tekstiviestisovellus"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Oletusarvoinen tekstiviestisovellus"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Puhelinnumerosi"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Tuntematon"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Lähtevien viestien äänet"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Tekstiviestivedos"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Vedosta vastaanotetut tekstiviestien raakatiedot ulkoiseen tallennustiedostoon"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS-vedos"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Vedosta vastaanotetut MMS-raakatiedot ulkoiseen tallennustiedostoon"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Langattoman verkon ilmoitukset"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Viestiasetukset"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopioi teksti"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Näytä tiedot"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Poista"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Lähetä edelleen"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Viestin tiedot"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tyyppi: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Tekstiviesti"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimediaviesti"</string>
-    <string name="from_label" msgid="1947831848146564875">"Lähettäjä: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Vastaanottaja: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Lähetetty: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Vastaanotettu: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Aihe: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Koko: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Tärkeys: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM-kortti: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Korkea"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normaali"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Matala"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM-kortti <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Piilotettu lähettäjän osoite"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Viestiä ei voi lähettää liitetiedostojen latauksen aikana."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Liitettä ei voi ladata. Yritä uudelleen."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Verkko ei ole valmis. Yritä uudelleen."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Poista teksti"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Vaihda tekstin ja numeroiden syötön välillä"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Lisää osallistujia"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Vahvista osallistujat"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Aloita uusi keskustelu"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Valitse tämä"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Katso video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Henkilöt ja asetukset"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Vianetsintä"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Henkilöt ja asetukset"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Yleiset"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Keskustelun osallistujat"</string>
-    <string name="action_call" msgid="6596167921517350362">"Soita puhelu"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Lähetä viesti"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Lähetä viesti&lt;br/&gt;&lt;small&gt;kortilta <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Lähetä kuvia</item>
-      <item quantity="one">Lähetä kuva</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Lähetä äänitiedostoja</item>
-      <item quantity="one">Lähetä äänitiedosto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Lähetä videoita</item>
-      <item quantity="one">Lähetä video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Lähetä yhteystietokortteja</item>
-      <item quantity="one">Lähetä yhteystietokortti</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Lähetä liitteitä</item>
-      <item quantity="one">Lähetä liite</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> liitettä valmiina lähetettäväksi</item>
-      <item quantity="one">Yksi liite valmiina lähetettäväksi</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Lähetä palautetta"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Näytä Google Play Kaupassa"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Versiotiedot"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versio %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Avoimen lähdekoodin käyttöluvat"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Ilmoitukset"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Liitetiedostojen enimmäisraja on saavutettu."</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Liitetiedoston lataaminen epäonnistui."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Lisätäänkö yhteystietoihin?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Lisää yhteystieto"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Aihe"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Aihe: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Ladataan yhteystietokorttia"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Yhteystietokorttia ei voitu ladata:"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Näytä yhteystietokortti"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> yhteystietoa</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> yhteystieto</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Yhteystietokortit"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Syntymäpäivä"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Muistiinpanot"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Lähetä viesti edelleen"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Vastaa"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Tekstiviestit on poistettu käytöstä"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Voit lähettää valittuasi Viestit oletustekstiviestisovellukseksi."</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Aseta Viestit oletustekstiviestisovellukseksi."</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Vaihda"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Voit vastaanottaa viestejä valittuasi Viestit oletustekstiviestisovellukseksi."</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Ensisijaista SIM-korttia ei ole valittu tekstiviestien lähettämiselle"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Laitteen omistaja ei ole myöntänyt lupaa tälle sovellukselle."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Keskustelussa on liian monta osallistujaa"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Virheelliset yhteystiedot</item>
-      <item quantity="one">Virheellinen yhteystieto</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Kamerakuvaa ei voitu ladata"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Sinä: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Luonnos"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Uudet keskustelut on lueteltu tässä"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Arkistoidut keskustelut näkyvät tässä"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Ladataan keskusteluja…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Kuva"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Äänileike"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Yhteystietokortti"</string>
-    <string name="mms_text" msgid="1528791558806015806">"Multimediaviesti"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Kumoa"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Yritä uudelleen"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Aloita uusi viesti antamalla yhteystiedon nimi tai puhelinnumero"</string>
-    <string name="action_block" msgid="9032076625645190136">"Estä"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Estä <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Kumoa esto: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Estetäänkö <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Saat edelleen viestejä tästä numerosta, mutta et enää ilmoituksia. Tämä keskustelu arkistoidaan."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Estetyt yhteystiedot"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"KUMOA ESTO"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Estetyt yhteystiedot"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Valitse kuva dokumenttikirjastosta"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Lähetetään viestiä"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Viesti lähetetty"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Matkapuhelindata on kytketty pois. Tarkista asetukset."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Viestejä ei voi lähettää lentokonetilassa"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Viestiä ei voitu lähettää"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Viesti ladattu"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Matkapuhelindata on kytketty pois. Tarkista asetukset."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Viestejä ei voi ladata lentokonetilassa."</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Viestin lataaminen epäonnistui."</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nolla"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Yksi"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Kaksi"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Kolme"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Neljä"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Viisi"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Kuusi"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Seitsemän"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Kahdeksan"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Yhdeksän"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Viestin lähettäminen operaattorin <xliff:g id="CARRIERNAME">%1$s</xliff:g> kautta ei onnistunut. Virhe <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Viestin lähettäminen tuntemattoman operaattorin kautta ei onnistunut. Virhe <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Vl: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Viestiä ei lähetetty: palvelu ei ole käytössä verkossa"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Viestiä ei lähetetty: virheellinen kohdeosoite"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Viestiä ei lähetetty: virheellinen viesti"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Viestiä ei lähetetty: sisältöä ei tueta"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Viestiä ei lähetetty: viestiä ei tueta"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Viestiä ei lähetetty: liian suuri"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Uusi viesti"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Näytä"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Kuva"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Sopivaa sovellusta ei löytynyt"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Poista vastaanottaja"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Uusi viesti"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Peruuta"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Muokkaa tukiasemaa"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Ei asetettu"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nimi"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Multimediaviestien välityspalvelin"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Multimediaviestien portti"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN-tyyppi"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Poista APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Uusi APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Tallenna"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Hylkää"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Nimi-kenttä ei voi olla tyhjä."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN ei voi olla tyhjä."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC-kentän arvon oltava kolminumeroinen."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC-kentän arvon on oltava kaksi- tai kolminumeroinen."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Palautetaan APN-oletusasetuksia"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Palauta oletukseksi"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"APN-oletusasetukset on palautettu."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Nimetön"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Tukiasemien nimet"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN:t"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Uusi APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Tämä käyttäjä ei voi käyttää APN-asetuksia"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Kopioidaanko leikepöydälle?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopioi"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"vastaanottaja: <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Yleiset"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Lisäasetukset"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Yleiset asetukset"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Lisäasetukset"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"<xliff:g id="SIM_NAME">%s</xliff:g> SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Lähetä oma tekstiviesti kullekin vastaanottajalle. Vain sinä saat vastaukset."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Lähetä yksi MMS-viesti kaikille vastaanottajille"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Tuntematon numero"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Uusi viesti"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Uusi viesti."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM-valitsin"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> valittu, SIM-valitsin"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Muokkaa aihetta"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Valitse SIM tai muokkaa aihetta"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Nauhoita ääntä koskettamalla pitkään"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Aloita uusi keskustelu."</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Viestit"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Viestit-luettelo"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Viestit"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Uusi viesti"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Keskusteluluettelo"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Ladataan keskusteluja."</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Ladataan viestejä."</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Näytä lisää keskusteluita."</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Näytä lisää viestejä."</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Keskustelu on poistettu."</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Keskustelu poistettu. Näytä toinen Viestit-keskustelu."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Estetty"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Esto kumottu"</string>
-    <string name="db_full" msgid="8459265782521418031">"Tallennustila on vähissä. Tietoja voi kadota."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Valitse liitteet"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Vahvista valinta"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> valittu"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Poista yksi tai useampi liitetiedosto ja yritä uudelleen."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Voit yrittää lähettää viestin, mutta sitä ei ehkä toimiteta ennen kuin olet poistanut yhden tai useamman liitetiedoston."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Voit lähettää vain yhden videon viestiä kohden. Poista ylimääräiset videot ja yritä uudelleen."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Viestit ei pystynyt lataamaan liitetiedostoa."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Lähetä silti"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Keskustelun aloittaminen epäonnistui"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> valittu"</string>
-</resources>
diff --git a/res/values-fr-rCA/arrays.xml b/res/values-fr-rCA/arrays.xml
deleted file mode 100644
index 05d76fb..0000000
--- a/res/values-fr-rCA/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"sans objet"</item>
-    <item msgid="272485471009191934">"aucun objet"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Oui"</item>
-    <item msgid="6049132459802288033">"Non"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hé hé"</item>
-    <item msgid="2611328818571146775">"Merci"</item>
-    <item msgid="4881335087096496747">"J\'accepte"</item>
-    <item msgid="2422296858597420738">"Bien"</item>
-    <item msgid="4805581752819452687">"En chemin"</item>
-    <item msgid="4746700499431366214">"OK, je te réponds plus tard"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
deleted file mode 100644
index a626832..0000000
--- a/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Messagerie"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Messagerie"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Sélectionner la conversation"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Paramètres"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Envoyer un message"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Ajouter une pièce jointe"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Aide"</string>
-    <string name="welcome" msgid="2857560951820802321">"Bienvenue"</string>
-    <string name="skip" msgid="7238879696319945853">"Ignorer"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Suivant &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Suivant"</string>
-    <string name="exit" msgid="1905187380359981199">"Quitter"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Paramètres &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Paramètres"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Vous devez accorder à l\'application Messagerie des autorisations d\'accès aux messages, au téléphone et aux contacts."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Vous pouvez modifier les autorisations dans Paramètres &gt; Applications &gt; Messagerie &gt; Autorisations."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Vous pouvez modifier les autorisations dans Paramètres &gt; Applications &gt; Messagerie &gt; Autorisations."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Fréquents"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Tous les contacts"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Envoyer à <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Prendre des photos ou filmer une vidéo"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Choisir des images de cet appareil"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Enregistrer des fichiers audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Choisir une photo"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Support sélectionné."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Support désélectionné."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> sélectionné(s)"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"Image : <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"image"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Enregistrer des fichiers audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Partager"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"À l\'instant"</string>
-    <string name="posted_now" msgid="867560789350406701">"Maintenant"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> heure</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> heures</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> jour</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> jours</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> semaine</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> semaines</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mois</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mois</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> an</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ans</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Message de catégorie 0"</string>
-    <string name="save" msgid="5081141452059463572">"Enregistrer"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"L\'appareil manque d\'espace. Pour en libérer, les messages de l\'application Messagerie les plus anciens seront automatiquement supprimés."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"L\'espace de stockage est presque plein"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Il est possible que vous ne puissiez pas envoyer ni recevoir de messages dans l\'application Messagerie jusqu\'à ce que votre appareil ait plus d\'espace libre."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Stockage limité pour les textos. Vous devrez peut-être supprimer des messages."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirmez votre numéro de téléphone"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Cette étape unique permet de garantir que vos messages de groupe sont correctement envoyés dans Messagerie."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Numéro de téléphone"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Supprimer tous les messages avec du contenu multimédia"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Supprimer les messages datant de plus de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Suppression automatique des messages de plus de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorer"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Supprimer tous les messages avec contenu multimédia?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Supprimer les messages datant de plus de <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Supprimer les messages de plus de <xliff:g id="DURATION">%s</xliff:g> et activer la suppression automatique?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> a dit"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Vous avez dit"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Message de <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Vous avez envoyé un message"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Envoi en cours..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Message non envoyé. Touchez ici pour réessayer."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Message non envoyé. Nouvelle tentative en cours..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Renvoyer ou supprimer"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Veuillez appeler les services d\'urgence. Impossible d\'envoyer votre texto pour l\'instant."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Échec"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nouveau message multimédia à télécharger"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nouveau message multimédia"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Échec du téléchargement"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Touchez ici pour réessayer"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Touchez ici pour lancer le téléchargement."</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Télécharger ou supprimer"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Téléchargement en cours..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Le message a expiré ou n\'est plus disponible."</string>
-    <string name="mms_info" msgid="3402311750134118165">"taille : <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, date d\'expiration : <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Impossible d\'envoyer le message. Destinataire non valide."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Ce service n\'est pas activé sur le réseau"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Impossible d\'envoyer le message en raison d\'un problème de réseau"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Le message est expiration ou n\'est plus disponible."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Aucun objet)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Expéditeur inconnu"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Distribué"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Impossible de télécharger le message « <xliff:g id="SUBJECT">%1$s</xliff:g> » de l\'utilisateur suivant : <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Impossible d\'effectuer cette opération dans la base de données. Mémoire insuffisante."</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Le message n\'a pas été envoyé"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Certains messages n\'ont pas été envoyés dans Messagerie"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> message dans <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messages dans <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Message non téléchargé"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Certains messages n\'ont pas été téléchargés dans Messagerie"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> message dans <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messages dans <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Échec de l\'envoi du message à <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Veuillez appeler les services d\'urgence. Impossible d\'envoyer votre texto au numéro <xliff:g id="NUMBER">%1$s</xliff:g> pour l\'instant."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> nouveau message</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nouveaux messages</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Démarrer"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"L\'appareil photo n\'est pas disponible"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"L\'appareil photo n\'est pas disponible"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"L\'enregistrement vidéo n\'est pas disponible"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Impossible d\'enregistrer le média"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Impossible de prendre la photo."</string>
-    <string name="back" msgid="1477626055115561645">"Précédent"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archivée"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Supprimer"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archiver"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Annuler l\'archivage"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Désactiver les notifications"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Activer les notifications"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Ajouter un contact"</string>
-    <string name="action_download" msgid="7786338136368564146">"Télécharger"</string>
-    <string name="action_send" msgid="377635240181672039">"Envoyer"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Supprimer"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Supprimer ce message?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Cette action ne peut être annulée."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Supprimer"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Supprimer cette conversation?</item>
-      <item quantity="other">Supprimer ces conversations?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Supprimer"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Annuler"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"À"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Sélectionner plusieurs images"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirmer la sélection"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Impossible d\'enregistrer l\'audio. Veuillez réessayer."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Impossible de lire l\'audio. Veuillez réessayer."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Impossible d\'enregistrer l\'audio. Veuillez réessayer."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Maintenez le doigt ici"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Image"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Extrait audio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Vidéo"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Fiche de contact"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Télécharger"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Répondre par texto"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Rép. m. multim."</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Répondre"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> participant</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participants</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Moi"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contact bloqué et archivé"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contact débloqué et archivage annulé"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> archivée(s)"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Archivage annulé de <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Les notifications sont désactivées"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Les notifications sont activées"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Tout est prêt. Touchez « Envoyer » de nouveau."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"L\'application Messagerie a été définie comme application de messagerie par défaut."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Supprimer la pièce jointe</item>
-      <item quantity="other">Supprimer les pièces jointes</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Contenu audio joint"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Jouer le contenu audio joint"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pause"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Message de <xliff:g id="SENDER">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Échec de la réception du message de <xliff:g id="SENDER">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Message de <xliff:g id="SENDER">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Message non envoyé à <xliff:g id="CONTACT">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Envoi du message à <xliff:g id="CONTACT">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Échec de l\'envoi du message à <xliff:g id="CONTACT">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Message à <xliff:g id="CONTACT">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Échec de la réception du message de <xliff:g id="SENDER">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Message de <xliff:g id="SENDER">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Message non envoyé à : <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Envoi du message à <xliff:g id="GROUP">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Échec de l\'envoi du message à <xliff:g id="GROUP">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Message à <xliff:g id="GROUP">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Échec du message. Touchez pour réessayer."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversation avec <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Supprimer l\'objet"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Filmer une vidéo"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Capturer une image fixe"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Prendre une photo"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Lancer l\'enregistrement vidéo"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Activer le mode plein écran de l\'appareil photo"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Basculer entre l\'appareil photo avant et arrière"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Arrêter l\'enregistrement et joindre la vidéo"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Arrêter l\'enregistrement vidéo"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Photos de Messagerie"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> photo enregistrée dans l\'album « <xliff:g id="ALBUMNAME_3">%s</xliff:g> »</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> photos enregistrées dans l\'album « <xliff:g id="ALBUMNAME_3">%s</xliff:g> »</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> vidéo enregistrée dans l\'album « <xliff:g id="ALBUMNAME_3">%s</xliff:g> »</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> vidéos enregistrées dans l\'album « <xliff:g id="ALBUMNAME_3">%s</xliff:g> »</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> pièce jointe enregistrée dans l\'album « <xliff:g id="ALBUMNAME_3">%s</xliff:g> »</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> pièces jointes enregistrées dans l\'album « <xliff:g id="ALBUMNAME_3">%s</xliff:g> »</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> pièce jointe enregistrée dans le dossier « Téléchargements »</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> pièces jointes enregistrées dans le dossier « Téléchargements »</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> pièce jointe enregistrée</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> pièces jointes enregistrées</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Impossible d\'enregistrer <xliff:g id="QUANTITY_1">%d</xliff:g> pièce jointe</item>
-      <item quantity="other">Impossible d\'enregistrer <xliff:g id="QUANTITY_1">%d</xliff:g> pièces jointes</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"La pièce jointe du message multimédia a été enregistrée"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Paramètres"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archivée"</string>
-    <string name="action_close" msgid="1840519376200478419">"Fermer"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"Message multimédia"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avancés"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Déboguer"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notifications"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Son"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Mode silencieux"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibreur"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloqué"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Accusés de réception des messages texte"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Demander un accusé de réception pour chaque texto envoyé"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Récupération automatique"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Récupérer automatiquement les messages multimédias"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Récupération auto. en itinérance"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Récupérer automatiquement les messages multimédias en itinérance"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Messagerie de groupe"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Utiliser la messagerie multimédia pour envoyer un message unique à plusieurs destinataires"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Application de messagerie texte par défaut"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Application de messagerie texte par défaut"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Votre numéro de téléphone"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Inconnu"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Sons pour les messages sortants"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Capturer les messages texte"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Capturer les données brutes reçues des messages multimédias dans un fichier de stockage externe"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Capturer les messages multimédias"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Capturer les données brutes reçues des messages multimédias dans un fichier de stockage externe"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Alertes par réseau sans fil"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Options relatives aux messages"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copier le texte"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Afficher les détails"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Supprimer"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Transférer"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Détails du message"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Type : "</string>
-    <string name="text_message" msgid="7415419755252205721">"Message texte"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Message multimédia"</string>
-    <string name="from_label" msgid="1947831848146564875">"De : "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"À : "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Envoyé : "</string>
-    <string name="received_label" msgid="4442494712757995203">"Reçu : "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Objet : "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Taille : "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priorité : "</string>
-    <string name="sim_label" msgid="2706003016582772108">"Carte SIM : "</string>
-    <string name="priority_high" msgid="728836357310908368">"Élevée"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normale"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Faible"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"Fente SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Adresse d\'expéditeur masquée"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Impossible d\'envoyer le message pendant le chargement des pièces jointes."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Impossible de charger la pièce jointe. Veuillez réessayer."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Le réseau n\'est pas prêt. Réssayez."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Supprimer le texte"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Alterner entre l\'entrée de texte et de chiffres"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Ajouter des participants"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirmer les participants"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Commencer une nouvelle discussion"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Sélectionner cet article"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Lire la vidéo"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Participants et options"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Déboguer"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Participants et options"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Général"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Participants à cette conversation"</string>
-    <string name="action_call" msgid="6596167921517350362">"Faire un appel"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Envoyer un message"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Envoyer un message&lt;br/&gt;&lt;small&gt;à partir de <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Envoyer la photo</item>
-      <item quantity="other">Envoyer les photos</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Envoyer le fichier audio</item>
-      <item quantity="other">Envoyer les fichiers audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Envoyer la vidéo</item>
-      <item quantity="other">Envoyer les vidéos</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Envoyer la fiche de contact</item>
-      <item quantity="other">Envoyer les fiches de contact</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Envoyer la pièce jointe</item>
-      <item quantity="other">Envoyer les pièces jointes</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> pièce jointe est prête à être envoyée</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> pièces jointes sont prêtes à être envoyées</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Envoyer des commentaires"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Afficher dans la boutique Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Détails de la version"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Version %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licences de logiciels libres"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notifications"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Taille maximale des pièces jointes atteinte"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Échec du chargement de la pièce jointe."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Ajouter aux contacts?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Ajouter un contact"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Objet"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Objet : "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g> <xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Chargement de la fiche de contact"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Impossible de charger la fiche de contact"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Afficher la fiche de contact"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contact</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Fiches de contact"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Anniversaire"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Remarques"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Transférer le message"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Répondre"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Messagerie texte désactivée"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Pour envoyer des messages, définissez Messagerie comme application de messagerie par défaut"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Définissez Messagerie comme application de messagerie par défaut"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Modifier"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Pour recevoir des messages, vous devez définir l\'application Messagerie comme application de messagerie par défaut."</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Aucune carte SIM préférée n\'a été sélectionnée pour l\'envoi des messages texte"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Cette application n\'est pas autorisée par le propriétaire de l\'appareil."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Trop de participants dans une conversation"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Contact non valide</item>
-      <item quantity="other">Contacts non valides</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Impossible de charger l\'image de l\'appareil photo"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Vous : "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g> : "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Brouillon"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Lorsque vous commencez une conversation, elle s\'affiche ici"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Les conversations archivées s\'affichent ici"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Chargement des conversations en cours..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Image"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Extrait audio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Vidéo"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Fiche de contact"</string>
-    <string name="mms_text" msgid="1528791558806015806">"Message multimédia"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Annuler"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Réessayer"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Entrez le nom d\'un contact ou un numéro de téléphone pour commencer un nouveau message"</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloquer"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloquer <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Débloquer <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Bloquer <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Vous continuerez à recevoir les messages envoyés par ce numéro, mais vous ne recevrez plus de notifications. Cette conversation sera archivée."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Contacts bloqués"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DÉBLOQUER"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Contacts bloqués"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Choisissez une image dans la bibliothèque de documents"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Envoi du message en cours..."</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Message envoyé"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Les données cellulaires sont désactivées. Vérifiez vos paramètres."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Impossible d\'envoyer des messages en mode Avion"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Le message n\'a pas pu être envoyé"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Message téléchargé"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Les données cellulaires sont désactivées. Vérifiez vos paramètres."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Impossible de télécharger des messages en mode Avion"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Le message n\'a pas pu être téléchargé"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zéro"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Un"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Deux"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Trois"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Quatre"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Cinq"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Six"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sept"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Huit"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Neuf"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Impossible d\'envoyer le message par l\'intermédiaire de <xliff:g id="CARRIERNAME">%1$s</xliff:g>. Erreur  : <xliff:g id="ERRORCODE">%2$d</xliff:g>."</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Impossible d\'envoyer le message par l\'intermédiaire d\'un fournisseur de services inconnu. Erreur : <xliff:g id="ERRORCODE">%1$d</xliff:g>."</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Tr : <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Le message n\'a pas été envoyé, car le service n\'est pas activé sur le réseau"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Le message n\'a pas été envoyé, car l\'adresse de destination est incorrecte"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Le message n\'a pas été envoyé, car il n\'est pas valide"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Le message n\'a pas été envoyé, car le contenu est incompatible"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Le message n\'a pas été envoyé, car il n\'est pas pris en charge"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Le message n\'a pas été envoyé, car il est trop gros"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nouveau message"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Afficher"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Image"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Impossible de trouver une application appropriée."</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Supprimer le destinataire"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nouveau message"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Annuler"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Modifier le point d\'accès"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Non défini"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nom"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"Nom du point d\'accès"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Serveur mandataire pour la messagerie multimédia"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Port pour la messagerie multimédia"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Type de point d\'accès"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Supprimer le point d\'accès"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nouveau point d\'accès"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Enregistrer"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Supprimer"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Le champ « Nom » est obligatoire."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Le champ « Point d\'accès » est obligatoire."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Le champ MCC doit contenir 3 chiffres."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Le champ MNC doit contenir 2 ou 3 chiffres."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Restauration des paramètres de points d\'accès par défaut en cours..."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Rétablir les valeurs par défaut"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"La réinitialisation des paramètres de points d\'accès par défaut est terminée."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Sans titre"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Noms des points d\'accès"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Noms des points d\'accès"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nouveau point d\'accès"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Les paramètres de point d\'accès ne sont pas disponibles pour cet utilisateur"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Copier dans le presse-papiers?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copier"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"à <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Général"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avancés"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Paramètres généraux"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Paramètres avancés"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"Carte SIM « <xliff:g id="SIM_NAME">%s</xliff:g> »"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Envoyer des textos individuels à tous les destinataires. Vous seul recevrez les réponses."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Envoyer des messages multimédias individuels à tous les destinataires."</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Numéro inconnu"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nouveau message"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nouveau message."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Sélecteur de carte SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> sélectionnée, sélecteur de carte SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Modifier l\'objet"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Sélectionner une carte SIM ou modifier l\'objet"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Maintenez le doigt sur le bouton pour enregistrer des contenus audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Commencer une nouvelle discussion"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Messagerie"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Liste des conversations"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Messagerie"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nouveau message"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Liste des conversations"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Chargement des conversations en cours..."</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Messages en cours de chargement…"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Afficher plus de conversations"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Voir plus de messages"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversation supprimée"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"La conversation a été supprimée. Touchez pour afficher une autre conversation dans Messagerie."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloqué"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Débloqué"</string>
-    <string name="db_full" msgid="8459265782521418031">"L\'espace de stockage est faible. Vous risquez de perdre certaines données."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Sélectionner les pièces jointes"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirmer la sélection"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> sélectionné(s)"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Veuillez supprimer une ou plusieurs pièces jointes, puis réessayer."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Vous pouvez essayer d\'envoyer votre message, mais il risque de ne pas être remis sauf si vous supprimez une ou plusieurs pièces jointes."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Vous ne pouvez envoyer qu\'une vidéo par message. Veuillez supprimer les vidéos supplémentaires, puis réessayer."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Échec du chargement de la pièce jointe."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Envoyer quand même"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Impossible de démarrer la conversation"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> sélectionnée"</string>
-</resources>
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
deleted file mode 100644
index 6bd25ad..0000000
--- a/res/values-fr/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"aucun objet"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Oui"</item>
-    <item msgid="6049132459802288033">"Non"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Haha"</item>
-    <item msgid="2611328818571146775">"Merci"</item>
-    <item msgid="4881335087096496747">"J\'accepte."</item>
-    <item msgid="2422296858597420738">"Bien"</item>
-    <item msgid="4805581752819452687">"J\'arrive."</item>
-    <item msgid="4746700499431366214">"OK, je te réponds plus tard."</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
deleted file mode 100644
index b9f22af..0000000
--- a/res/values-fr/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"SMS/MMS"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"SMS/MMS"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Sélectionner la conversation"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Paramètres"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Envoyer le message"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Ajouter une pièce jointe"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Aide"</string>
-    <string name="welcome" msgid="2857560951820802321">"Bienvenue"</string>
-    <string name="skip" msgid="7238879696319945853">"Ignorer"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Suivant &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Suivant"</string>
-    <string name="exit" msgid="1905187380359981199">"Quitter"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Paramètres &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Paramètres"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Vous devez accorder à l\'application de SMS/MMS des autorisations d\'accès aux SMS, au téléphone et aux contacts."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Vous pouvez modifier les autorisations dans Paramètres &gt; Applications &gt; SMS/MMS &gt; Autorisations."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Vous pouvez modifier les autorisations dans Paramètres &gt; Applications &gt; SMS/MMS &gt; Autorisations."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Fréquents"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Tous les contacts"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Envoyer au <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Prendre des photos ou filmer une vidéo"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Sélectionner des images sur cet appareil"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Enregistrer un fichier audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Sélectionner une photo"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Le support est sélectionné."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Le support est désélectionné."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> élément(s) sélectionné(s)"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"image <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"image"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Enregistrer un fichier audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Partager"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"À l\'instant"</string>
-    <string name="posted_now" msgid="867560789350406701">"À l\'instant"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> heure</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> heures</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> jour</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> jours</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> semaine</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> semaines</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mois</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mois</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> an</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ans</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Message de catégorie 0"</string>
-    <string name="save" msgid="5081141452059463572">"Enregistrer"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"L\'appareil manque d\'espace. Pour en libérer, les messages de l\'application SMS/MMS les plus anciens seront supprimés automatiquement."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Espace de stockage bientôt saturé"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Il est possible que vous ne puissiez pas envoyer ni recevoir de messages via l\'application de SMS/MMS jusqu\'à ce que votre appareil dispose de plus d\'espace."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Espace de stockage limité. Il est possible que vous deviez supprimer des SMS."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirmez votre numéro de téléphone"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Cette étape unique permet de garantir que vos messages de groupe sont correctement envoyés via les SMS/MMS."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Numéro de téléphone"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Supprimer tous les messages comportant du contenu multimédia"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Supprimer les messages datant de plus de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Supprimer automatiquement les messages datant de plus de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorer"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Supprimer tous les messages comportant du contenu multimédia ?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Supprimer les messages datant de plus de <xliff:g id="DURATION">%s</xliff:g> ?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Supprimer les messages datant de plus de <xliff:g id="DURATION">%s</xliff:g> et activer la suppression automatique ?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> a dit"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Vous avez dit"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Expéditeur du message : <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Vous avez envoyé un message."</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Envoi en cours…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Message non envoyé. Veuillez appuyer ici pour réessayer."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Message non envoyé. Nouvelle tentative en cours…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Renvoyer ou supprimer"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Veuillez appeler les services d\'urgence. Impossible d\'envoyer votre SMS pour l\'instant."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Échec."</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nouveau MMS à télécharger"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nouveau message MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Téléchargement impossible."</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Appuyer ici pour réessayer"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Appuyer ici pour lancer le téléchargement"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Télécharger ou supprimer"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Téléchargement en cours…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Le message est arrivé à expiration ou n\'est plus disponible."</string>
-    <string name="mms_info" msgid="3402311750134118165">"taille : <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, expiration : <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Impossible d\'envoyer le message. Destinataire non valide."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Service non activé sur le réseau."</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Impossible d\'envoyer le message en raison de problèmes sur le réseau."</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Le message est arrivé à expiration ou n\'est plus disponible."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Aucun objet)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Expéditeur inconnu"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Distribué"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Impossible de télécharger le message \"<xliff:g id="SUBJECT">%1$s</xliff:g>\" de l\'utilisateur suivant : <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Impossible d\'effectuer cette opération dans la base de données. Mémoire insuffisante."</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Le message n\'a pas été envoyé."</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Certains messages n\'ont pas été envoyés via les SMS/MMS."</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> messages dans <xliff:g id="CONVERSATIONS">%d</xliff:g> conversation</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messages dans <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Message non téléchargé."</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Certains messages n\'ont pas été téléchargés via les SMS/MMS."</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> messages dans <xliff:g id="CONVERSATIONS">%d</xliff:g> conversation</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messages dans <xliff:g id="CONVERSATIONS">%d</xliff:g> conversations</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Échec de l\'envoi du message à <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Veuillez appeler les services d\'urgence. Impossible d\'envoyer votre SMS au numéro <xliff:g id="NUMBER">%1$s</xliff:g> pour l\'instant."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> nouveau message</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nouveaux messages</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Démarrer"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Caméra indisponible."</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Caméra indisponible."</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Enregistrement vidéo indisponible."</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Impossible d\'enregistrer le fichier multimédia."</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Impossible de prendre la photo."</string>
-    <string name="back" msgid="1477626055115561645">"Retour"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archivées"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Supprimer"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archiver"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Annuler l\'archivage"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Désactiver les notifications"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Activer les notifications"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Ajouter un contact"</string>
-    <string name="action_download" msgid="7786338136368564146">"Télécharger"</string>
-    <string name="action_send" msgid="377635240181672039">"Envoyer"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Supprimer"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Supprimer ce message ?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Cette action est irréversible."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Supprimer"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Supprimer cette conversation ?</item>
-      <item quantity="other">Supprimer ces conversations ?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Supprimer"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Annuler"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"À"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Sélectionner plusieurs images"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirmer la sélection"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+ <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Impossible d\'enregistrer l\'audio. Veuillez réessayer."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Impossible de lire l\'audio. Veuillez réessayer."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Impossible d\'enregistrer l\'audio. Veuillez réessayer."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Appuyez ici de manière prolongée"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">" : "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Image"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Extrait audio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Vidéo"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Fiche de contact"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Télécharger"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Répondre par SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Répondre par MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Répondre"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> participant</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participants</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Moi"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contact bloqué et archivé"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contact débloqué et archivage annulé."</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> archivée(s)"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Archivage annulé de <xliff:g id="COUNT">%d</xliff:g> conversation(s)."</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notifications désactivées."</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notifications activées."</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Configuration réussie. Appuyez de nouveau sur \"Envoyer\"."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"L\'application de SMS/MMS a bien été définie comme application de SMS par défaut."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Supprimer la pièce jointe</item>
-      <item quantity="other">Supprimer les pièces jointes</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Pièce jointe audio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Jouer le contenu audio joint"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pause"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Message de <xliff:g id="SENDER">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Échec de la réception du message envoyé par <xliff:g id="SENDER">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Message envoyé par <xliff:g id="SENDER">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Message non envoyé à <xliff:g id="CONTACT">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Envoi du message à <xliff:g id="CONTACT">%1$s</xliff:g> en cours : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Échec de l\'envoi du message à <xliff:g id="CONTACT">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Message à <xliff:g id="CONTACT">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Échec de la réception du message envoyé par <xliff:g id="SENDER">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Message envoyé par <xliff:g id="SENDER">%1$s</xliff:g> : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Message non envoyé au groupe \"<xliff:g id="GROUP">%1$s</xliff:g>\" : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Envoi du message au groupe \"<xliff:g id="GROUP">%1$s</xliff:g>\" en cours : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Échec de l\'envoi du message au groupe \"<xliff:g id="GROUP">%1$s</xliff:g>\" : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Message au groupe \"<xliff:g id="GROUP">%1$s</xliff:g>\" : <xliff:g id="MESSAGE">%2$s</xliff:g>. Heure : <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Échec du message. Appuyez pour réessayer."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversation avec <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Supprimer l\'objet"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Enregistrer une vidéo"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Capturer une image fixe"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Prendre une photo"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Lancer l\'enregistrement vidéo"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Passer en caméra plein écran"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Passer de la caméra frontale à la caméra arrière, et inversement"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Arrêter l\'enregistrement et joindre la vidéo"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Arrêter l\'enregistrement vidéo"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Photos envoyées ou reçues par SMS/MMS"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> photo a été enregistrée dans l\'album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> photos ont été enregistrées dans l\'album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\".</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> vidéo a été enregistrée dans l\'album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\".</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> vidéos ont été enregistrées dans l\'album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\".</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> pièce jointe a été enregistrée dans l\'album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\".</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> pièces jointes ont été enregistrées dans l\'album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\".</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> pièce jointe a été enregistrée dans le dossier \"Téléchargements\".</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> pièces jointes ont été enregistrées dans le dossier \"Téléchargements\".</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> pièce jointe a été enregistrée.</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> pièces jointes ont été enregistrées.</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Impossible d\'enregistrer <xliff:g id="QUANTITY_1">%d</xliff:g> pièce jointe.</item>
-      <item quantity="other">Impossible d\'enregistrer <xliff:g id="QUANTITY_1">%d</xliff:g> pièces jointes.</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Pièce jointe du MMS enregistrée"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Paramètres"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archivées"</string>
-    <string name="action_close" msgid="1840519376200478419">"Fermer"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Paramètres avancés"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Déboguer"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notifications"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Son"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Mode silencieux"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibreur"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloqué"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Accusés de réception de SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Demander un accusé de réception pour chaque SMS envoyé"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Récupération automatique"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Récupérer automatiquement les MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Récupération auto. en itinérance"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Récupérer automatiquement les MMS en itinérance"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Messagerie de groupe"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Utiliser un MMS pour envoyer un message unique à plusieurs destinataires"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Application SMS par défaut"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Application SMS par défaut"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Votre numéro de téléphone"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Inconnu"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Sons pour les messages sortants"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Créer une copie des SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Créer une copie des données SMS brutes reçues dans un fichier de stockage externe"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Créer une copie des MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Créer une copie des données MMS brutes reçues dans un fichier de stockage externe"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Alertes via le réseau sans fil"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Options relatives au message"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copier le texte"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Afficher les détails"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Supprimer"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Transférer"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Détails du message"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Type : "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"MMS"</string>
-    <string name="from_label" msgid="1947831848146564875">"Expéditeur : "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Destinataire : "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Envoyé le : "</string>
-    <string name="received_label" msgid="4442494712757995203">"Reçu le : "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Objet : "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Taille : "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priorité : "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM : "</string>
-    <string name="priority_high" msgid="728836357310908368">"Élevée"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normale"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Basse"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Adresse de l\'expéditeur masquée"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Impossible d\'envoyer le message pendant le chargement des pièces jointes."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Impossible de charger la pièce jointe. Veuillez réessayer."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Le réseau n\'est pas prêt. Veuillez réessayer."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Supprimer le texte"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Alterner entre la saisie de texte et de chiffres"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Ajouter d\'autres participants"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirmer les participants"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Démarrer une nouvelle conversation"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Sélectionner cet article"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Lire la vidéo"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Participants et options"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Déboguer"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Participants et options"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Général"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Participants à cette conversation"</string>
-    <string name="action_call" msgid="6596167921517350362">"Passer un appel"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Envoyer un message"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Envoyer un message&lt;br/&gt;&lt;small&gt;avec la carte SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\"&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Envoyer la photo</item>
-      <item quantity="other">Envoyer les photos</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Envoyer le fichier audio</item>
-      <item quantity="other">Envoyer les fichiers audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Envoyer la vidéo</item>
-      <item quantity="other">Envoyer les vidéos</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Envoyer la carte de visite</item>
-      <item quantity="other">Envoyer les cartes de visite</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Envoyer la pièce jointe</item>
-      <item quantity="other">Envoyer les pièces jointes</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> pièce jointe est prête à être envoyée.</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> pièces jointes sont prêtes à être envoyées.</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Envoyer des commentaires"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Afficher sur le Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informations sur la version"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Version %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licences Open Source"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notifications"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Taille maximale des pièces jointes atteinte"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Échec du chargement de la pièce jointe."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Ajouter aux contacts ?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Ajouter un contact"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Objet"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Objet : "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Chargement de la fiche de contact en cours…"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Impossible de charger la fiche de contact."</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Afficher la fiche de contact"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contact</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Fiches de contacts"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Anniversaire"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Remarques"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Transférer le message"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Répondre"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+ 1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS désactivés"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Pour envoyer des messages, vous devez définir l\'application de SMS/MMS comme application de SMS par défaut."</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Définissez l\'application de SMS/MMS comme application de SMS par défaut."</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Modifier"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Pour recevoir des messages, vous devez définir l\'application de SMS/MMS comme application de SMS par défaut."</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Aucune carte SIM préférée sélectionnée pour l\'envoi de SMS."</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Cette application n\'est pas autorisée par le propriétaire de l\'appareil."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Trop de participants dans une conversation."</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Contact non valide.</item>
-      <item quantity="other">Contacts non valides.</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Impossible de charger l\'image de la caméra."</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Vous : "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g> : "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Brouillon"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Lorsque vous commencez une conversation, elle s\'affiche ici."</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Les conversations archivées s\'affichent ici."</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Chargement des conversations en cours…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Image"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Extrait audio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Vidéo"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Fiche de contact"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Annuler"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Réessayer"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Saisissez le nom d\'un contact ou un numéro de téléphone pour commencer un nouveau message"</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloquer"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloquer \"<xliff:g id="DESTINATION">%s</xliff:g>\""</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Débloquer \"<xliff:g id="DESTINATION">%s</xliff:g>\""</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Bloquer <xliff:g id="DESTINATION">%s</xliff:g> ?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Vous continuerez à recevoir les messages envoyés par ce numéro, mais vous ne recevrez plus de notifications. Cette conversation sera archivée."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Contacts bloqués"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DÉBLOQUER"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Contacts bloqués"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Sélectionner une image dans la bibliothèque de documents"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Envoi du message en cours..."</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Message envoyé."</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Les données cellulaires sont désactivées. Veuillez vérifier vos paramètres."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Impossible d\'envoyer des messages en mode Avion."</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Envoi du SMS impossible."</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Message téléchargé."</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Les données cellulaires sont désactivées. Veuillez vérifier vos paramètres."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Impossible de télécharger les messages en mode Avion."</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Impossible de télécharger le message."</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zéro"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Un"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Deux"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Trois"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Quatre"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Cinq"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Six"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sept"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Huit"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Neuf"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Impossible d\'envoyer le message via <xliff:g id="CARRIERNAME">%1$s</xliff:g>. Erreur : <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Impossible d\'envoyer le message via un opérateur inconnu. Erreur : <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"TR : <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Le message n\'a pas été envoyé, car le service n\'est pas activé sur le réseau."</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Le message n\'a pas été envoyé, car l\'adresse de destination est incorrecte."</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Le message n\'a pas été envoyé, car il n\'est pas valide."</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Le message n\'a pas été envoyé, car le contenu est incompatible."</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Le message n\'a pas été envoyé, car il est incompatible."</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Le message n\'a pas été envoyé, car il est trop volumineux."</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nouveau message"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Afficher"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Image"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Impossible de trouver une application appropriée."</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Supprimer le destinataire"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nouveau message"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Annuler"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Modifier le point d\'accès"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Non défini"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nom"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy pour les MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Port pour les MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Type d\'APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Supprimer l\'APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nouvel APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Enregistrer"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Supprimer"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Champ \"Nom\" obligatoire."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN obligatoire."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Le champ \"MCC\" doit contenir trois chiffres."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Le champ \"MNC\" doit contenir deux ou trois chiffres."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Restauration des paramètres APN par défaut en cours…"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Rétablir les paramètres par défaut"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Les paramètres APN par défaut ont bien été réinitialisés."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Sans titre"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Points d\'accès"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nouvel APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Les paramètres de point d\'accès ne sont pas disponibles pour cet utilisateur."</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Copier dans le Presse-papiers ?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copier"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"destinataire : \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="general_settings" msgid="5409336577057897710">"Général"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Paramètres avancés"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Paramètres généraux"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Paramètres avancés"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"Carte SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Envoyer des SMS individuels à tous les destinataires. Vous seul recevrez les réponses."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Envoyer un MMS unique à tous les destinataires"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Depuis un numéro inconnu"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nouveau message"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nouveau message."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Sélecteur de carte SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"\"<xliff:g id="SIM_0">%1$s</xliff:g>\" sélectionnée – Sélecteur de carte SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Modifier l\'objet"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Sélectionner une carte SIM ou modifier l\'objet"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Appuyer de manière prolongée pour enregistrer des contenus audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Lancer une conversation"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"SMS/MMS"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Liste des SMS/MMS"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"SMS/MMS"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nouveau message"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Liste des conversations"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Chargement des conversations en cours…"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Chargement des messages en cours…"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Afficher plus de conversations"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Afficher d\'autres messages"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversation supprimée."</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"La conversation a bien été supprimée. Appuyez pour afficher une autre conversation de SMS/MMS."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloqué"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Débloqué"</string>
-    <string name="db_full" msgid="8459265782521418031">"L\'espace de stockage est faible. Vous risquez de perdre certaines données."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Sélectionner les pièces jointes"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirmer la sélection"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> élément(s) sélectionné(s)"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Veuillez supprimer une ou plusieurs pièces jointes, puis réessayer."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Vous pouvez essayer d\'envoyer votre message, mais il risque de ne pas être remis sauf si vous supprimez une ou plusieurs pièces jointes."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Vous ne pouvez envoyer qu\'une vidéo par message. Veuillez supprimer les vidéos supplémentaires, puis réessayer."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Échec du chargement de la pièce jointe via les SMS/MMS."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Envoyer quand même"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Impossible de lancer la conversation."</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> sélectionnée"</string>
-</resources>
diff --git a/res/values-gl/arrays.xml b/res/values-gl/arrays.xml
deleted file mode 100644
index 1e43974..0000000
--- a/res/values-gl/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"sen asunto"</item>
-    <item msgid="272485471009191934">"senasunto"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Si"</item>
-    <item msgid="6049132459802288033">"Non"</item>
-    <item msgid="3084376867445867895">"Aceptar"</item>
-    <item msgid="3155097332660174689">"He he"</item>
-    <item msgid="2611328818571146775">"Grazas"</item>
-    <item msgid="4881335087096496747">"Acepto"</item>
-    <item msgid="2422296858597420738">"Excelente"</item>
-    <item msgid="4805581752819452687">"Á miña maneira"</item>
-    <item msgid="4746700499431366214">"De acordo, póñome en contacto contigo máis tarde"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
deleted file mode 100644
index 8a626c2..0000000
--- a/res/values-gl/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Mensaxería"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Mensaxería"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Seleccionar conversa"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Configuración"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Enviar mensaxe"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Engadir un anexo"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Axuda"</string>
-    <string name="welcome" msgid="2857560951820802321">"Dámosche a benvida"</string>
-    <string name="skip" msgid="7238879696319945853">"Omitir"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Seguinte &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Seguinte"</string>
-    <string name="exit" msgid="1905187380359981199">"Saír"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Configuración &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Configuración"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Mensaxería necesita permiso para acceder ás SMS, ao teléfono e aos contactos."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Podes cambiar os permisos en Configuración &gt; Aplicacións &gt; Mensaxería &gt; Permisos."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Podes cambiar os permisos en Configuración, Aplicacións, Mensaxería, Permisos."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Frecuentes"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Todos os contactos"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Enviar ao <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Capturar fotos ou vídeo"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Escoller imaxes deste dispositivo"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Gravar audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Escoller foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"O ficheiro multimedia está seleccionado."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"O ficheiro multimedia non está seleccionado."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> seleccionado"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"imaxe do <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"imaxe"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Gravar audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Compartir"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Agora mesmo"</string>
-    <string name="posted_now" msgid="867560789350406701">"Agora"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> minutos</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> minuto</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> horas</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hora</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> días</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> día</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> semanas</item>
-      <item quantity="one">unha semana</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> meses</item>
-      <item quantity="one">un mes</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> anos</item>
-      <item quantity="one">un ano</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Mensaxe de clase 0"</string>
-    <string name="save" msgid="5081141452059463572">"Gardar"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Este dispositivo ten pouco espazo. Mensaxería eliminará automaticamente as mensaxes antigas para liberar espazo."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Estase esgotando o espazo de almacenamento"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"É posible que Mensaxería non envíe nin reciba mensaxes ata que haxa máis espazo dispoñible no teu dispositivo."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Queda pouco almacenamento de SMS restante. É posible que precises eliminar mensaxes."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirma o teu número de teléfono"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Este paso único garantirá que Mensaxería entregue as túas mensaxes de grupo de forma adecuada."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Número de teléfono"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Eliminar todas as mensaxes con ficheiros multimedia"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Eliminar mensaxes anteriores a <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Eliminar automaticamente mensaxes anteriores a <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorar"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Queres eliminar todas as mensaxes con ficheiros multimedia?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Queres eliminar as mensaxes anteriores a <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Queres eliminar mensaxes anteriores a <xliff:g id="DURATION">%s</xliff:g> e activar a eliminación automática?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> dixo"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Dixeches"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Mensaxe de <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Enviaches unha mensaxe"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Enviando…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Non se enviou. Toca para tentalo de novo."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Non se enviou. Tentando de novo…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Reenviar ou eliminar"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Realiza unha chamada de voz aos servizos de emerxencia. Non se puido entregar a túa mensaxe de texto neste momento."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Erro"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nova mensaxe MMS para descargar"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nova mensaxe MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Non se puido descargar"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Tocar para tentalo de novo"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Tocar para descargar"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Descargar ou eliminar"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Descargando..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"A mensaxe caducou ou non está dispoñible"</string>
-    <string name="mms_info" msgid="3402311750134118165">"tamaño: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, caducidade: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Non se pode enviar. O destinatario non é válido."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Servizo non activado na rede"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Non se puido enviar debido a un problema de rede"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"A mensaxe caducou ou non está dispoñible"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Sen asunto)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Remitente descoñecido"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Entregado"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Non se puido descargar a mensaxe <xliff:g id="SUBJECT">%1$s</xliff:g> de <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Non se puido completar a operación da base de datos debido a que queda pouca memoria"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Mensaxe non enviada"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Hai mensaxes non enviadas en Mensaxería"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mensaxes en <xliff:g id="CONVERSATIONS">%d</xliff:g> conversas</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mensaxes nunha conversa</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Non se descargou a mensaxe"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Algunhas mensaxes non se descargaron en Mensaxería"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mensaxes en <xliff:g id="CONVERSATIONS">%d</xliff:g> conversas</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mensaxes nunha conversa</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Non se enviou a mensaxe ao <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Realiza unha chamada de voz aos servizos de emerxencia. Non se puido entregar a túa mensaxe de texto ao <xliff:g id="NUMBER">%1$s</xliff:g> neste momento."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> mensaxes novas</item>
-      <item quantity="one">Mensaxe nova</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Iniciar"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"A cámara non está dispoñible"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"A cámara non está dispoñible"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"A captura de vídeo non está dispoñible"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Non se pode gardar o ficheiro multimedia"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Non se pode sacar a foto"</string>
-    <string name="back" msgid="1477626055115561645">"Atrás"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arquivadas"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Eliminar"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arquivar"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Cancelar o arquivado"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Desactivar notificacións"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Activar notificacións"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Engadir contacto"</string>
-    <string name="action_download" msgid="7786338136368564146">"Descargar"</string>
-    <string name="action_send" msgid="377635240181672039">"Enviar"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Eliminar"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Queres eliminar esta mensaxe?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Esta acción non se pode desfacer."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Eliminar"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Queres eliminar estas conversas?</item>
-      <item quantity="one">Queres eliminar esta conversa?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Eliminar"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Cancelar"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Para"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Seleccionar varias imaxes"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirmar selección"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Non se pode gravar o audio. Téntao de novo."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Non se pode reproducir o audio. Téntao de novo."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Non se puido gardar o audio. Téntao de novo."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Mantén premido"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Imaxe"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Clip de audio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Vídeo"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Tarxeta de contacto"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Descargar"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Responder mediante SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Resposta MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Responde"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participantes</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> participante</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Eu"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contacto bloqueado e arquivado"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contacto desbloqueado e sen arquivar"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> arquivada/s"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> non arquivada/s"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notificacións desactivadas"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notificacións activadas"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Todo listo. Toca Enviar de novo."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Mensaxería estableceuse correctamente como a aplicación de SMS predeterminada."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Descartar anexos</item>
-      <item quantity="one">Descartar anexo</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Anexo de audio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Reproducir anexo de audio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pausa"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Mensaxe de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Erro ao recibir a mensaxe de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Mensaxe de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Non se enviou a mensaxe a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Enviando mensaxe a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>E. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Erro ao enviar a mensaxe a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Mensaxe para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Erro ao recibir a mensaxe de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Mensaxe de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Non se enviou a mensaxe a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Enviando mensaxe a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>E. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Erro ao enviar a mensaxe a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Mensaxe para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Erro na mensaxe. Toca para tentalo de novo."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversa con <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Borrar asunto"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Capturar vídeo"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Capturar unha imaxe estática"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Sacar foto"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Comezar a gravar vídeo"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Cambiar á cámara de pantalla completa"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Cambiar entre a cámara dianteira e traseira"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Deter a gravación e anexar vídeo"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Deter a gravación de vídeo"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotos de Mensaxería"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other">Gardáronse <xliff:g id="QUANTITY_2">%d</xliff:g> fotos no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">Gardouse <xliff:g id="QUANTITY_0">%d</xliff:g> foto no álbum \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other">Gardáronse <xliff:g id="QUANTITY_2">%d</xliff:g> vídeos no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">Gardouse <xliff:g id="QUANTITY_0">%d</xliff:g> vídeo no álbum \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other">Gardáronse <xliff:g id="QUANTITY_2">%d</xliff:g> anexos no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">Gardouse <xliff:g id="QUANTITY_0">%d</xliff:g> anexo no álbum \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other">Gardáronse <xliff:g id="QUANTITY_1">%d</xliff:g> anexos en \"Descargas\"</item>
-      <item quantity="one">Gardouse <xliff:g id="QUANTITY_0">%d</xliff:g> anexo en \"Descargas\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">Gardáronse <xliff:g id="QUANTITY_1">%d</xliff:g> anexos</item>
-      <item quantity="one">Gardouse <xliff:g id="QUANTITY_0">%d</xliff:g> anexo</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Non se puideron gardar <xliff:g id="QUANTITY_1">%d</xliff:g> anexos</item>
-      <item quantity="one">Non se puido gardar <xliff:g id="QUANTITY_0">%d</xliff:g> anexo</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Anexo de MMS gardado"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Configuración"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arquivadas"</string>
-    <string name="action_close" msgid="1840519376200478419">"Pechar"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avanzado"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Depuración"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notificacións"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Son"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silencio"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrar"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloqueado"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Informes de entrega de SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Solicita un informe de entrega cando envías un SMS"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Recuperación automática"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Recupera mensaxes MMS automaticamente"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Recuperación automática en itinerancia"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Recuperación automática de MMS en itinerancia"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Mensaxería en grupo"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Utiliza MMS para enviar unha soa mensaxe cando hai varios destinatarios"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Aplicación de SMS predeterminada"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Aplicación de SMS predeterminada"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"O teu número de teléfono"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Descoñecido"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Sons de mensaxes saíntes"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Pasar SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Pasa os datos recibidos de SMS sen procesar a un ficheiro de almacenamento externo"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Pasar MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Pasa os datos recibidos de MMS sen procesar a un ficheiro de almacenamento externo"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Alertas sen fíos"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opcións de mensaxes"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copiar texto"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Ver detalles"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Eliminar"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Reenviar"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Detalles da mensaxe"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tipo: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Mensaxe de texto"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mensaxe multimedia"</string>
-    <string name="from_label" msgid="1947831848146564875">"De: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Para: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Enviada: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Recibida: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Asunto: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Tamaño: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioridade: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Alta"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Baixa"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Enderezo do remitente oculto"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Non é posible enviar a mensaxe ao cargar anexos."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Non se pode cargar o anexo. Téntao de novo."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"A rede non está lista. Téntao de novo."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Eliminar texto"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Cambiar entre introducir texto e números"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Engadir máis participantes"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirmar participantes"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Iniciar nova conversa"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Selecciona este elemento"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Reproducir vídeo"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Persoas e opcións"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Depurar"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Persoas e opcións"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Xeral"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Persoas que participan nesta conversa"</string>
-    <string name="action_call" msgid="6596167921517350362">"Facer unha chamada"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Enviar mensaxe"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Envía a mensaxe&lt;br/&gt;&lt;small&gt;desde <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Enviar fotos</item>
-      <item quantity="one">Enviar foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Enviar gravacións de audio</item>
-      <item quantity="one">Enviar gravación de audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Enviar vídeos</item>
-      <item quantity="one">Enviar vídeo</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Enviar tarxetas de contacto</item>
-      <item quantity="one">Enviar tarxeta de contacto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Enviar anexos</item>
-      <item quantity="one">Enviar anexo</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> anexos listos para enviar</item>
-      <item quantity="one">Un anexo listo para enviar</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Dános a túa opinión"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Ver en Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Información da versión"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versión %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licenzas de código aberto"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notificacións"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Acadouse o límite para anexos"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Non se puido cargar o anexo."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Queres engadir este número aos teus contactos?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Engadir contacto"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Asunto"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Asunto: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Cargando tarxeta de contacto"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Non se puido cargar a tarxeta de contacto"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Ver tarxeta de contacto"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactos</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Tarxetas de contacto"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Aniversario"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notas"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Reenviar mensaxe"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Responder"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS desactivadas"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Establece Mensaxería como a aplicación de SMS predeterminada para enviar mensaxes"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Establece Mensaxería como a aplicación de SMS predeterminada"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Cambiar"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Establece Mensaxería como a aplicación de SMS predeterminada para recibir mensaxes"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Non se seleccionou unha SIM preferida para o envío de mensaxes SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"O propietario do dispositivo non permite esta aplicación."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Aceptar"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Hai demasiados participantes nunha conversa"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Contactos non válidos</item>
-      <item quantity="one">Contacto non válido</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Non se puido cargar a imaxe da cámara"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Ti: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Borrador"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Cando inicies unha nova conversa, aparecerá aquí"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"As conversas arquivadas aparecen aquí"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Cargando conversas..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Imaxe"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Clip de audio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Vídeo"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Tarxeta de contacto"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Desfacer"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Tentar de novo"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Introduce o nome dun contacto ou o número de teléfono para iniciar unha mensaxe nova"</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloquear"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloquear <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Desbloquear <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Queres bloquear <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Seguirás recibindo mensaxes deste número, pero xa non se notificarán. Arquivarase esta conversa."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Contactos bloqueados"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DESBLOQUEAR"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Contactos bloqueados"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Escolle unha imaxe da biblioteca de documentos"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Enviando a mensaxe"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Mensaxe enviada"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Os datos móbiles están desactivados. Comproba a túa configuración."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Non se poden enviar mensaxes en modo avión"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Erro ao enviar a mensaxe"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Mensaxe descargada"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Os datos móbiles están desactivados. Comproba a túa configuración."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Non se poden descargar mensaxes no modo avión"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Non se puido descargar a mensaxe"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Cero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Un"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dous"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tres"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Catro"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Cinco"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Seis"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sete"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Oito"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nove"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Non se pode enviar a mensaxe con <xliff:g id="CARRIERNAME">%1$s</xliff:g>. Erro: <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Non se pode enviar a mensaxe cun operador descoñecido. Erro: <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Rv: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Mensaxe non enviada: servizo non activado na rede"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Mensaxe non enviada: enderezo de destino non válido"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Mensaxe non enviada: mensaxe non válida"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Mensaxe non enviada: contido non compatible"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Mensaxe non enviada: mensaxe non compatible"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Mensaxe non enviada: demasiado longa"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Mensaxe nova"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Ver"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Imaxe"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Non se puido encontrar unha aplicación adecuada"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Elimina o destinatario"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Mensaxe nova"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Cancelar"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Editar punto de acceso"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Sen configurar"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nome"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Porto de MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Tipo de APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Eliminar APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Novo APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Gardar"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Descartar"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"O nome do campo non pode estar baleiro."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"O APN non pode estar baleiro."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"O campo MCC debe conter 3 díxitos."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"O campo MNC debe conter 2 ou 3 díxitos."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Restaurando a configuración de APN predeterminada."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Restablecer aos valores predeterminados"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Completouse o restablecemento da configuración de APN predeterminada."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Sen título"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Nomes do punto de acceso"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Novo APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"A configuración do nome do punto de acceso non está dispoñible para este usuario"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Copiar no portapapeis?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copiar"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"en <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Xeral"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avanzada"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Configuración xeral"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Configuración avanzada"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Enviar mensaxes SMS individuais a todos os destinatarios. Só ti recibirás as respostas"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Enviar unha mensaxe MMS simple a todos os destinatarios"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Número descoñecido"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Mensaxe nova"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Mensaxe nova."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Selector de SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Seleccionouse <xliff:g id="SIM_0">%1$s</xliff:g>, selector da SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Editar asunto"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Seleccionar a SIM ou editar o asunto"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Tocar e manter premido para gravar audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Iniciar nova conversa"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Mensaxería"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Lista de Mensaxería"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Mensaxería"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Mensaxe nova"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Lista de conversas"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Cargando conversas"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Cargando mensaxes"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Ver máis conversas"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Ver máis mensaxes"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversa eliminada"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Eliminouse a conversa. Toca para mostrar unha conversa de Mensaxería diferente"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloqueado"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Desbloqueado"</string>
-    <string name="db_full" msgid="8459265782521418031">"Queda pouco espazo de almacenamento. É posible que se perdan algúns datos."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Seleccionar anexos"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirmar selección"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> seleccionado/s"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Elimina un ou varios anexos e téntao de novo."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Podes probar a enviar a túa mensaxe, pero é posible que non se entregue a menos que elimines un ou varios anexos."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Só podes enviar un vídeo por mensaxe. Elimina os vídeos adicionais e téntao de novo."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Mensaxería non puido cargar o anexo."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Enviar igualmente"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Non se puido iniciar a conversa"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Seleccionouse <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-gu/arrays.xml b/res/values-gu/arrays.xml
deleted file mode 100644
index 89975e0..0000000
--- a/res/values-gu/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"કોઇ વિષય નહીં"</item>
-    <item msgid="272485471009191934">"વિષય નથી"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"હા"</item>
-    <item msgid="6049132459802288033">"નહીં"</item>
-    <item msgid="3084376867445867895">"ઑકે"</item>
-    <item msgid="3155097332660174689">"હીહી"</item>
-    <item msgid="2611328818571146775">"આભાર"</item>
-    <item msgid="4881335087096496747">"હું સહમત છું"</item>
-    <item msgid="2422296858597420738">"સરસ"</item>
-    <item msgid="4805581752819452687">"મારી અનુકૂળતાએ"</item>
-    <item msgid="4746700499431366214">"ઑકે, હું તમને પછી મળું છું"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
deleted file mode 100644
index 8d2adaf..0000000
--- a/res/values-gu/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"મેસેજિંગ"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"મેસેજિંગ"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"વાર્તાલાપ પસંદ કરો"</string>
-    <string name="action_settings" msgid="1329008122345201684">"સેટિંગ્સ"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"સંદેશ મોકલો"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"એક જોડાણ ઉમેરો"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"સહાય"</string>
-    <string name="welcome" msgid="2857560951820802321">"સ્વાગત છે"</string>
-    <string name="skip" msgid="7238879696319945853">"છોડી દો"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"આગલું &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"આગલું"</string>
-    <string name="exit" msgid="1905187380359981199">"બહાર નીકળો"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"સેટિંગ્સ &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"સેટિંગ્સ"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"મેસેજિંગને SMS, ફોન અને સંપર્કોની પરવાનગીની જરૂર છે."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"તમે સેટિંગ્સ &gt; એપ્લિકેશન્સ &gt; મેસેજિંગ &gt; પરવાનગીઓમાં પરવાનગીઓ બદલી શકો છો."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"તમે સેટિંગ્સ, એપ્લિકેશન્સ, મેસેજિંગ, પરવાનગીઓમાં પરવાનગીઓ બદલી શકો છો."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"વારંવાર"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"તમામ સંપર્કો"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> પર મોકલો"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"ચિત્રો અથવા વિડિઓ કેપ્ચર કરો"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"આ ઉપકરણથી છબીઓ પસંદ કરો"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ઑડિઓ રેકોર્ડ કરો"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ફોટો પસંદ કરો"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"મીડિયા પસંદ થયેલ છે."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"મીડિયા પસંદ કરેલ નથી."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> પસંદ કર્યાં"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"છબી <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"છબી"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ઑડિઓ રેકોર્ડ કરો"</string>
-    <string name="action_share" msgid="2143483844803153871">"શેર કરો"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"હમણાં જ"</string>
-    <string name="posted_now" msgid="867560789350406701">"હમણાં"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> મિનિટ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> મિનિટ</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> કલાક</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> કલાક</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> દિવસ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> દિવસ</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> અઠવાડિયા</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> અઠવાડિયા</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> મહિના</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> મહિના</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> વર્ષ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> વર્ષ</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"વર્ગ 0 સંદેશ"</string>
-    <string name="save" msgid="5081141452059463572">"સાચવો"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"ઉપકરણ પર જગ્યા ઓછી છે. મેસેજિંગ જગ્યા ખાલી કરવા માટે જૂના સંદેશા આપમેળે કાઢી નાખશે."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"સ્ટોરેજ સ્થાન સમાપ્ત થયું"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"તમારા ઉપકરણ પર વધુ સ્થાન ઉપલબ્ધ ન થાય ત્યાં સુધી મેસેજિંગ સંદેશા મોકલી અથવા પ્રાપ્ત કરી શકશે નહીં."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"ઓછો SMS સંગ્રહ. તમારે કેટલાક સંદેશા કાઢી નાખવાની જરૂર હોઈ શકે છે."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"તમારા ફોન નંબરની પુષ્ટિ કરો"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"મેસેજિંગ તમારા જૂથ સંદેશાનું યોગ્ય રીતે વિતરણ કરે તે બાબતની આ એક-વારનું પગલું ખાતરી કરશે."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ફોન નંબર"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"મીડિયા સાથેના તમામ સંદેશા કાઢી નાખો"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> કરતાં જૂનાં સંદેશા કાઢી નાખો"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> કરતા જૂના સંદેશા આપમેળે કાઢી નાખો"</string>
-    <string name="ignore" msgid="7063392681130898793">"અવગણો"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"મીડિયા સાથેના તમામ સંદેશા કાઢી નાખીએ?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> કરતા જૂના સંદેશા કાઢી નાખીએ?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> કરતા જૂનાં સંદેશા કાઢી નાખીએ અને આપમેળે કાઢી નાખવું ચાલુ કરીએ?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> એ કહ્યું"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"તમે કહ્યું"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> તરફથી સંદેશ"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"તમે એક સંદેશ મોકલ્યો"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"મોકલી રહ્યાં છે…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"મોકલાયો નથી. ફરીથી પ્રયાસ કરવા માટે ટચ કરો."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"મોકલાયું નથી. ફરીથી પ્રયાસ કરી રહ્યું છે…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"ફરીથી મોકલો અથવા કાઢી નાખો"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"કૃપા કરીને કટોકટીની સેવાઓ માટે એક વૉઇસ કૉલ કરો. તમારો ટેક્સ્ટ સંદેશ આ સમયે વિતરિત કરી શકાયો નથી."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"નિષ્ફળ થયું"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"ડાઉનલોડ કરવા માટેનો નવો MMS સંદેશ"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"નવો MMS સંદેશ"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ડાઉનલોડ કરી શક્યાં નથી"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"ફરીથી પ્રયત્ન કરવા ટચ કરો"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ડાઉનલોડ કરવા ટચ કરો"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ડાઉનલોડ કરો અથવા કાઢી નાખો"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"ડાઉનલોડ કરી રહ્યાં છે..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"સંદેશની સમયસીમા સમાપ્ત થઈ અથવા ઉપલબ્ધ નથી"</string>
-    <string name="mms_info" msgid="3402311750134118165">"કદ: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, સમય સમાપ્તિ: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"મોકલી શકતા નથી. પ્રાપ્તકર્તા માન્ય નથી."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"નેટવર્ક પર સેવા સક્રિય કરી નથી"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"નેટવર્ક સમસ્યાને કારણે મોકલી શકાયો નથી"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"સંદેશની સમયસીમા સમાપ્ત થઈ અથવા ઉપલબ્ધ નથી"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(કોઇ વિષય નથી)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"અજાણ્યો પ્રેષક"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"વિતરિત"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> તરફનાં <xliff:g id="SUBJECT">%1$s</xliff:g> સંદેશા ડાઉનલોડ કરી શકાયા નથી."</string>
-    <string name="low_memory" msgid="5300743415198486619">"ઓછી મેમરીને કારણે ડેટાબેસ ક્રિયા પૂર્ણ કરી શકાઈ નથી"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"સંદેશ મોકલ્યો નથી"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"મેસેજિંગમાં કેટલાક સંદેશા મોકલ્યાં નથી"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="CONVERSATIONS">%d</xliff:g> વાર્તાલાપમાં <xliff:g id="MESSAGES_1">%d</xliff:g> સંદેશા</item>
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> વાર્તાલાપમાં <xliff:g id="MESSAGES_1">%d</xliff:g> સંદેશા</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"સંદેશ ડાઉનલોડ થયેલ નથી"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"મેસેજિંગમાં કેટલાક સંદેશા ડાઉનલોડ થયાં નથી"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="CONVERSATIONS">%d</xliff:g> વાર્તાલાપમાં <xliff:g id="MESSAGES_1">%d</xliff:g> સંદેશા</item>
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> વાર્તાલાપમાં <xliff:g id="MESSAGES_1">%d</xliff:g> સંદેશા</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> ને સંદેશ મોકલાયો નથી"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"કટોકટી સેવાઓને કૃપા કરીને એક વૉઇસ કૉલ કરો. <xliff:g id="NUMBER">%1$s</xliff:g> ને તમારો ટેક્સ્ટ સંદેશ આ સમયે વિતરિત કરી શકાયો નથી."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> નવા સંદેશા</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> નવા સંદેશા</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"પ્રારંભ કરો"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"કૅમેરો ઉપલબ્ધ નથી"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"કૅમેરો ઉપલબ્ધ નથી"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"વિડિઓ કેપ્ચર ઉપલબ્ધ નથી"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"મીડિયા સાચવી શકતા નથી"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"ચિત્ર લઈ શકતા નથી"</string>
-    <string name="back" msgid="1477626055115561645">"પાછળ"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"આર્કાઇવ કરેલા"</string>
-    <string name="action_delete" msgid="4076795795307486019">"કાઢી નાખો"</string>
-    <string name="action_archive" msgid="5437034800324083170">"આર્કાઇવ"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"આર્કાઇવ.કરેલ નથી"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"સૂચનાઓ બંધ કરો"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"સૂચનાઓ ચાલુ કરો"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"સંપર્ક ઉમેરો"</string>
-    <string name="action_download" msgid="7786338136368564146">"ડાઉનલોડ કરો"</string>
-    <string name="action_send" msgid="377635240181672039">"મોકલો"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"કાઢી નાખો"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"આ સંદેશ કાઢી નાખીએ?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"આ ક્રિયા પૂર્વવત્ કરી શકાતી નથી."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"કાઢી નાખો"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">આ વાર્તાલાપ કાઢી નાખીએ?</item>
-      <item quantity="other">આ વાર્તાલાપ કાઢી નાખીએ?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"કાઢી નાખો"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"રદ કરો"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"પ્રતિ"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"બહુવિધ છબીઓ પસંદ કરો"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"પસંદગીની પુષ્ટિ કરો"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ઑડિઓ રેકોર્ડ કરી શકાતો નથી. ફરીથી પ્રયાસ કરો."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ઑડિઓ ચલાવી શકાતો નથી. ફરીથી પ્રયાસ કરો."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ઑડિઓ સાચવી શકાયો નથી. ફરીથી પ્રયાસ કરો."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"ટચ કરો અને પકડો"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"ચિત્ર"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ઑડિઓ ક્લિપ"</string>
-    <string name="notification_video" msgid="4331423498662606204">"વિડિઓ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"સંપર્ક કાર્ડ"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ડાઉનલોડ કરો"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS દ્વારા જવાબ આપો"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS દ્વારા જવાબ આપો"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"જવાબ આપો"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> સહભાગીઓ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> સહભાગીઓ</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"મારા"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"સંપર્ક અવરોધિત કર્યો અને આર્કાઇવ કર્યો"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"સંપર્ક અનાવરોધિત અને અનઆર્કાઇવ કર્યો"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> આર્કાઇવ કર્યાં"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> અનઆર્કાઇવ કર્યા"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"સૂચનાઓ બંધ કરી"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"સૂચનાઓ ચાલુ કરી"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"બધું સેટ થયું. મોકલો ને ફરીથી ટચ કરો."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"ડિફોલ્ટ SMS એપ્લિકેશન તરીકે મેસેજિંગ સફળતાપૂર્વક સેટ થયું."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">જોડાણો નિકાળો</item>
-      <item quantity="other">જોડાણો નિકાળો</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ઑડિઓ જોડાણ"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ઑડિઓ જોડાણ ચલાવો"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"થોભો"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> તરફથી સંદેશ: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> તરફથી સંદેશ નિષ્ફળ: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> તરફથી સંદેશ: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> ને વણમોકલાયેલ સંદેશ: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> ને સંદેશ મોકલી રહ્યું છે: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> ને સંદેશ મોકલવું નિષ્ફળ: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> ને સંદેશ: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> તરફથી સંદેશ નિષ્ફળ: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> તરફથી સંદેશ: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> ને વણમોકલાયેલ સંદેશ: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> ને સંદેશ મોકલી રહ્યું છે: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> ને સંદેશ મોકલવું નિષ્ફળ: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> ને સંદેશ: <xliff:g id="MESSAGE">%2$s</xliff:g>. સમય: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"નિષ્ફળ સંદેશ. ફરી પ્રયાસ કરવા ટચ કરો."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> સાથે વાર્તાલાપ"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"વિષય કાઢી નાખો"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"વિડિઓ કેપ્ચર કરો"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"એક સ્થિર છબી કેપ્ચર કરો"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"ફોટો લો"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"વિડિઓ રેકોર્ડિંગ પ્રારંભ કરો"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"પૂર્ણ સ્ક્રીન કૅમેરા પર સ્વિચ કરો"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"આગળનાં અને પાછળનાં કૅમેરા વચ્ચે સ્વિચ કરો"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"રેકોર્ડિંગ બંધ કરો અને વિડિઓ જોડો"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"વિડિઓ રેકોર્ડિંગ બંધ કરો"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"મેસેજિંગ ફોટા"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" આલ્બમમાં <xliff:g id="QUANTITY_2">%d</xliff:g> ફોટા સાચવ્યાં</item>
-      <item quantity="other">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" આલ્બમમાં <xliff:g id="QUANTITY_2">%d</xliff:g> ફોટા સાચવ્યાં</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" આલ્બમમાં <xliff:g id="QUANTITY_2">%d</xliff:g> વિડિઓઝ સાચવી</item>
-      <item quantity="other">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" આલ્બમમાં <xliff:g id="QUANTITY_2">%d</xliff:g> વિડિઓઝ સાચવી</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" આલ્બમમાં <xliff:g id="QUANTITY_2">%d</xliff:g> જોડાણો સાચવ્યાં</item>
-      <item quantity="other">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" આલ્બમમાં <xliff:g id="QUANTITY_2">%d</xliff:g> જોડાણો સાચવ્યાં</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one">\"ડાઉનલોડ્સ\"માં <xliff:g id="QUANTITY_1">%d</xliff:g> જોડાણો સાચવ્યાં</item>
-      <item quantity="other">\"ડાઉનલોડ્સ\"માં <xliff:g id="QUANTITY_1">%d</xliff:g> જોડાણો સાચવ્યાં</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> જોડાણ સાચવ્યાં</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> જોડાણ સાચવ્યાં</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> જોડાણ સાચવી શક્યાં નથી</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> જોડાણ સાચવી શક્યાં નથી</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"સાચવેલ MMS જોડાણ"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"સેટિંગ્સ"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"આર્કાઇવ કરેલા"</string>
-    <string name="action_close" msgid="1840519376200478419">"બંધ કરો"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"વિગતવાર"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"ડીબગ"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"સૂચનાઓ"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ધ્વનિ"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"શાંત"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"વાઇબ્રેટ"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"અવરોધિત"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS વિતરણ રિપોર્ટ્સ"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"તમે મોકલેલા દરેક SMS માટે વિતરણ રિપોર્ટની વિનંતી કરો"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"સ્વતઃ-પુનર્પ્રાપ્ત કરો"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS સંદેશા સ્વતઃ-પુનર્પ્રાપ્ત કરો"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"રોમિંગ સ્વતઃ-પુનર્પ્રાપ્ત કરો"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"રોમિંગ પર હોય ત્યારે MMS આપમેળે પુનર્પ્રાપ્ત કરો"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"જૂથ મેસેજિંગ"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"બહુવિધ પ્રાપ્તકર્તાઓ હોય ત્યારે એક જ સંદેશ મોકલવા માટે MMS નો ઉપયોગ કરો"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"ડિફોલ્ટ SMS એપ્લિકેશન"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"ડિફોલ્ટ SMS એપ્લિકેશન"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"તમારો ફોન નંબર"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"અજાણ્યો"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"આઉટગોઇંગ સંદેશ ધ્વનિઓ"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS ડમ્પ કરો"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"પ્રાપ્ત થયેલ SMS અપૂર્ણ ડેટાને બાહ્ય સંગ્રહ ફાઇલમાં ડમ્પ કરો"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS ડમ્પ કરો"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"પ્રાપ્ત થયેલ MMS અપૂર્ણ ડેટાને બાહ્ય સંગ્રહ ફાઇલમાં ડમ્પ કરો"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"વાયરલેસ ચેતવણીઓ"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"સંદેશ વિકલ્પો"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"ટેક્સ્ટ કૉપિ કરો"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"વિગતો જુઓ"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"કાઢી નાખો"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"ફોરવર્ડ કરો"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"સંદેશ વિગતો"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"પ્રકાર: "</string>
-    <string name="text_message" msgid="7415419755252205721">"ટેક્સ્ટ સંદેશ"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"મલ્ટિમીડિયા સંદેશ"</string>
-    <string name="from_label" msgid="1947831848146564875">"અહીંથી: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"પ્રતિ: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"મોકલ્યું: "</string>
-    <string name="received_label" msgid="4442494712757995203">"પ્રાપ્ત કર્યુ: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"વિષય: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"કદ: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"પ્રાધાન્યતા: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"ઉચ્ચ"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"સામાન્ય"</string>
-    <string name="priority_low" msgid="7398724779026801851">"નિમ્ન"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"પ્રેષક સરનામું છુપાયેલ છે"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"જોડાણો લોડ કરતી વખતે સંદેશ મોકલી શકાતો નથી."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"જોડાણ લોડ કરી શકાતું નથી. ફરીથી પ્રયાસ કરો."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"નેટવર્ક તૈયાર નથી. ફરીથી પ્રયાસ કરો."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"ટેક્સ્ટ કાઢી નાખો"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"ટેક્સ્ટ અને સંખ્યાઓ દાખલ કરવા વચ્ચે સ્વિચ કરો"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"વધુ સહભાગીઓ ઉમેરો"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"સહભાગીઓની પુષ્ટિ કરો"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"નવો વાર્તાલાપ પ્રારંભ કરો"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"આ આઇટમ પસંદ કરો"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"વિડિઓ ચલાવો"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"લોકો અને વિકલ્પો"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"ડીબગ"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"લોકો અને વિકલ્પો"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"સામાન્ય"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"આ વાર્તાલાપમાંના લોકો"</string>
-    <string name="action_call" msgid="6596167921517350362">"એક કૉલ કરો"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"સંદેશ મોકલો"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt; દ્વારા &lt;br/&gt;&lt;small&gt;સંદેશ મોકલો"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">ફોટા મોકલો</item>
-      <item quantity="other">ફોટા મોકલો</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">ઑડિઓ મોકલો</item>
-      <item quantity="other">ઑડિઓ મોકલો</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">વિડિઓઝ મોકલો</item>
-      <item quantity="other">વિડિઓઝ મોકલો</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">સંપર્ક કાર્ડ્સ મોકલો</item>
-      <item quantity="other">સંપર્ક કાર્ડ્સ મોકલો</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">જોડાણ મોકલો</item>
-      <item quantity="other">જોડાણ મોકલો</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one">મોકલવા માટે <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> જોડાણ તૈયાર છે</item>
-      <item quantity="other">મોકલવા માટે <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> જોડાણ તૈયાર છે</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"પ્રતિસાદ મોકલો"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Store માં જુઓ"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"સંસ્કરણ માહિતી"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"સંસ્કરણ %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"ઓપન સોર્સ લાઇસેંસેસ"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"સૂચનાઓ"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"જોડાણની મર્યાદા સુધી પહોંચ્યાં"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"જોડાણ લોડ કરવામાં નિષ્ફળ."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"સંપર્કોમાં ઉમેરીએ?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"સંપર્ક ઉમેરો"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"વિષય"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"વિષય: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"સંપર્ક કાર્ડ લોડ કરી રહ્યું છે"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"સંપર્ક કાર્ડ લોડ કરી શકાયું નથી"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"સંપર્ક કાર્ડ જુઓ"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> સંપર્કો</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> સંપર્કો</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"સંપર્ક કાર્ડ્સ"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"જન્મદિવસ"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"નોંધો"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"સંદેશ ફોરવર્ડ કરો"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"જવાબ આપો"</string>
-    <string name="plus_one" msgid="9010288417554932581">"પસંદ"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS અક્ષમ કરેલ છે"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"મોકલવા માટે, મેસેજિંગને ડિફોલ્ટ SMS એપ્લિકેશન તરીકે સેટ કરો"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"મેસેજિંગને ડિફોલ્ટ SMS એપ્લિકેશન તરીકે સેટ કરો"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"બદલો"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"સંદેશા પ્રાપ્ત કરવા માટે, મેસેજિંગને ડિફોલ્ટ SMS એપ્લિકેશન તરીકે સેટ કરો"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS સંદેશા મોકલવા માટે પસંદીદા SIM પસંદ કરેલ નથી"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"આ એપ્લિકેશનને ઉપકરણ માલિક દ્વારા મંજૂરી નથી."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ઑકે"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"વાર્તાલાપમાં ઘણાં બધા સહભાગીઓ છે"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">અમાન્ય સંપર્કો</item>
-      <item quantity="other">અમાન્ય સંપર્કો</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"કૅમેરા છબી લોડ કરી શકાઈ નથી"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"તમે: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"ડ્રાફ્ટ"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"એકવાર તમે એક નવો વાર્તાલાપ પ્રારંભ કરી લો તે પછી, તમે તેને અહીં સૂચિબદ્ધ જોશો"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"આર્કાઇવ કરેલ વાર્તાલાપ અહીં દેખાશે"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"વાર્તાલાપ લોડ કરી રહ્યાં છે…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"ચિત્ર"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ઑડિઓ ક્લિપ"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"વિડિઓ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"સંપર્ક કાર્ડ"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"પૂર્વવત્ કરો"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"ફરી પ્રયાસ કરો"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"એક નવો સંદેશ પ્રારંભ કરવા માટે સંપર્ક નામ અથવા ફોન નંબર દાખલ કરો"</string>
-    <string name="action_block" msgid="9032076625645190136">"અવરોધિત કરો"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> ને અવરોધિત કરો"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> ને અનાવરોધિત કરો"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> ને અવરોધિત કરીએ?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"તમે આ નંબરથી સંદેશા પ્રાપ્ત કરવાનું ચાલુ રાખશો પરંતુ હવેથી સૂચિત કરવામાં આવશે નહીં. આ વાર્તાલાપ આર્કાઇવ કરવામાં આવશે."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"અવરોધિત કરેલા સંપર્કો"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"અનાવરોધિત કરો"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"અવરોધિત કરેલા સંપર્કો"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"દસ્તાવેજ લાઇબ્રેરીમાંથી છબી પસંદ કરો"</string>
-    <string name="sending_message" msgid="6363584950085384929">"સંદેશ મોકલી રહ્યાં છીએ"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"સંદેશ મોકલ્યો"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"સેલ્યુલર ડેટા બંધ છે. તમારી સેટિંગ્સ તપાસો."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"એરપ્લેન મોડમાં સંદેશા મોકલી શકાતા નથી"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"સંદેશ મોકલી શકાયો નથી"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"સંદેશ ડાઉનલોડ થયો"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"સેલ્યુલર ડેટા બંધ છે. તમારી સેટિંગ્સ તપાસો."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"એરપ્લેન મોડમાં સંદેશા ડાઉનલોડ કરી શકાતા નથી"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"સંદેશ ડાઉનલોડ કરી શકાયો નથી"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"શૂન્ય"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"એક"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"બે"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"ત્રણ"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"ચાર"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"પાંચ"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"છ"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"સાત"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"આઠ"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"નવ"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> સાથે સંદેશ મોકલી શકાતો નથી, ભૂલ <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"અજાણ્યાં કેરીઅર સાથે સંદેશ મોકલી શકાતો નથી, ભૂલ <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"ફોરવર્ડ: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"સંદેશ મોકલાયો નથી: નેટવર્ક પર સેવા સક્રિય કરેલ નથી"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"સંદેશ મોકલાયો નથી: અમાન્ય લક્ષ્યસ્થાન સરનામું"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"સંદેશ મોકલાયો નથી: અમાન્ય સંદેશ"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"સંદેશ મોકલાયો નથી: અસમર્થિત સામગ્રી"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"સંદેશ મોકલાયો નથી: અસમર્થિત સંદેશ"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"સંદેશ મોકલ્યો નથી: ખૂબ મોટો"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"નવો સંદેશ"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"જુઓ"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"છબી"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"કોઈ યોગ્ય એપ્લિકેશન મળી શકી નથી"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"પ્રાપ્તકર્તા દૂર કરો"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"નવો સંદેશ"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"રદ કરો"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"અ‍ૅક્સેસ પોઇન્ટ સંપાદિત કરો"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"સેટ નથી"</string>
-    <string name="apn_name" msgid="1572691851070894985">"નામ"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS પ્રોક્સી"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS પોર્ટ"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN પ્રકાર"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN કાઢી નાખો"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"નવું APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"સાચવો"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"છોડી દો"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"નામ ફીલ્ડ ખાલી હોઈ શકતી નથી."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN ખાલી હોઈ શકતું નથી."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC ફીલ્ડ 3 અંકોની હોવી આવશ્યક છે."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC ફીલ્ડ 2 અથવા 3 અંકોની હોવી આવશ્યક છે."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"ડિફોલ્ટ APN સેટિંગ્સ પુનર્સ્થાપિત કરવી."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"ડિફોલ્ટ પર ફરીથી સેટ કરો"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"ડિફોલ્ટ APN સેટિંગ્સ ફરીથી સેટ કરો પૂર્ણ થયું."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"મથાળા વગર"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ઍક્સેસ પોઇન્ટનું નામ"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"નવું APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"અ‍ૅક્સેસ પોઇન્ટનું નામ સેટિંગ્સ આ વપરાશકર્તા માટે ઉપલબ્ધ નથી"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"ક્લિપબોર્ડ પર કૉપિ કરીએ?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"કૉપિ કરો"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> પર"</string>
-    <string name="general_settings" msgid="5409336577057897710">"સામાન્ય"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"વિગતવાર"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"સામાન્ય સેટિંગ્સ"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"વિગતવાર સેટિંગ્સ"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"તમામ પ્રાપ્તકર્તાઓને વ્યક્તિગત SMS સંદેશાઓ મોકલો. ફક્ત તમને જ કોઇ જવાબો મળશે"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"તમામ પ્રાપ્તકર્તાઓને એક જ MMS મોકલો"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"અજાણ્યો નંબર"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"નવો સંદેશ"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"નવો સંદેશ."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM પસંદગીકર્તા"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> પસંદ કર્યા, SIM પસંદગીકર્તા"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"વિષય સંપાદિત કરો"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM પસંદ કરો અથવા વિષય સંપાદિત કરો"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ઑડિઓ રેકોર્ડ કરવા માટે ટચ કરો અને પકડો"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"નવો વાર્તાલાપ પ્રારંભ કરો"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"મેસેજિંગ"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"મેસેજિંગ સૂચિ"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"મેસેજિંગ"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"નવો સંદેશ"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"વાર્તાલાપની સૂચિ"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"વાર્તાલાપ લોડ કરી રહ્યાં છે"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"સંદેશા લોડ કરી રહ્યું છે"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"વધુ વાર્તાલાપ જુઓ"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"વધુ સંદેશા જુઓ"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"વાર્તાલાપ કાઢી નખાયો"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"વાર્તાલાપ કાઢી નાખ્યો. એક ભિન્ન મેસેજિંગ વાર્તાલાપ દર્શાવવા માટે ટચ કરો"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"અવરોધિત"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"અનાવરોધિત"</string>
-    <string name="db_full" msgid="8459265782521418031">"સંગ્રહ સ્થાન ઓછું છે. કેટલોક ડેટા ખોવાઈ શકે છે."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"જોડાણો પસંદ કરો"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"પસંદગીની પુષ્ટિ કરો"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> પસંદ કર્યાં"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"કૃપા કરીને એક અથવા વધુ જોડાણો દૂર કરો અને ફરીથી પ્રયાસ કરો."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"તમે તમારો સંદેશ મોકલવાનો પ્રયાસ કરી શકો છો, પરંતુ તમે એક અથવા વધુ જોડાણો દૂર નહીં કરો ત્યાં સુધી તે વિતરિત કરવામાં આવી શકશે નહીં."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"તમે પ્રતિ સંદેશ ફક્ત એક વિડિઓ મોકલી શકો છો. કૃપા કરીને અતિરિક્ત વિડિઓઝ દૂર કરો અને ફરી પ્રયાસ કરો."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"જોડાણ લોડ કરવામાં મેસેજિંગ નિષ્ફળ."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"કોઈપણ રીતે મોકલો"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"વાર્તાલાપ પ્રારંભ કરી શકાયો નથી"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> પસંદ કરી"</string>
-</resources>
diff --git a/res/values-hi/arrays.xml b/res/values-hi/arrays.xml
deleted file mode 100644
index abdcedf..0000000
--- a/res/values-hi/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"कोई विषय नहीं"</item>
-    <item msgid="272485471009191934">"कोई विषय नहीं"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"हां"</item>
-    <item msgid="6049132459802288033">"नहीं"</item>
-    <item msgid="3084376867445867895">"ठीक"</item>
-    <item msgid="3155097332660174689">"हेहे"</item>
-    <item msgid="2611328818571146775">"धन्यवाद"</item>
-    <item msgid="4881335087096496747">"मैं सहमत हूं"</item>
-    <item msgid="2422296858597420738">"बढ़िया"</item>
-    <item msgid="4805581752819452687">"मेरे रास्ते में रहने के दौरान"</item>
-    <item msgid="4746700499431366214">"ठीक है, मैं आपसे बाद में संपर्क करूंगा/करूंगी"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
deleted file mode 100644
index 7e7a780..0000000
--- a/res/values-hi/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"संदेश सेवा"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"संदेश सेवा"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"वार्तालाप चुनें"</string>
-    <string name="action_settings" msgid="1329008122345201684">"सेटिंग"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"संदेश भेजें"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"कोई अटैचमेंट जोड़ें"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"सहायता"</string>
-    <string name="welcome" msgid="2857560951820802321">"स्वागत है"</string>
-    <string name="skip" msgid="7238879696319945853">"अभी नहीं"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"अगला &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"अगला"</string>
-    <string name="exit" msgid="1905187380359981199">"बाहर निकलें"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"सेटिंग &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"सेटिंग"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"संदेश सेवा को SMS, फ़ोन और संपर्कों के लिए अनुमति की आवश्यकता होती है."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"आप अनुमतियों को सेटिंग &gt; ऐप्स &gt; संदेश सेवा &gt; अनुमतियां में बदल सकते हैं."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"आप अनुमतियों को सेटिंग, ऐप्‍स, संदेश सेवा, अनुमतियां में बदल सकते हैं."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"अक्सर"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"सभी संपर्क"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> पर भेजें"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"चित्र या वीडियो कैप्चर करें"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"इस डिवाइस के चित्र चुनें"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ऑडियो रिकॉर्ड करें"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"फ़ोटो चुनें"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"मीडिया को चुना है."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"मीडिया को नहीं चुना है."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> चुने गए"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"चित्र <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"चित्र"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ऑडियो रिकॉर्ड करें"</string>
-    <string name="action_share" msgid="2143483844803153871">"साझा करें"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"अभी-अभी"</string>
-    <string name="posted_now" msgid="867560789350406701">"अभी"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> मिनट</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> मिनट</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> घंटे</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> घंटे</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> दिन</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> दिन</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> सप्‍ताह</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> सप्‍ताह</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> महीने</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> महीने</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> वर्ष</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> वर्ष</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"वर्ग 0 संदेश"</string>
-    <string name="save" msgid="5081141452059463572">"जोड़ें"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"डिवाइस में स्थान कम है. स्थान खाली करने के लिए संदेश सेवा पुराने संदेशों को अपने आप हटा देगी."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"मेमोरी स्‍थान समाप्‍त हो रहा है"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"हो सकता है कि आपके डिवाइस पर अधिक स्‍थान उपलब्‍ध होने तक संदेश सेवा संदेशों को ना भेजे या प्राप्‍त ना करे."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"कम SMS मेमोरी. आपको संदेशों को हटाने की आवश्‍यकता हो सकती है."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"अपने फ़ोन नंबर की पुष्टि करें"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"यह एक-बार का चरण यह सुनिश्चित करेगा कि संदेश सेवा आपके समूह संदेशों को ठीक से वितरित करेगी."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"फ़ोन नंबर"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"मीडिया वाले सभी संदेशों को हटाएं"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> से पुराने संदेशों को हटाएं"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> से पुराने संदेशों को स्‍वत: हटाएं"</string>
-    <string name="ignore" msgid="7063392681130898793">"अनदेखा करें"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"मीडिया वाले सभी संदेशों को हटाएं?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> से पुराने संदेशों को हटाएं?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> से पुराने संदेश हटाएं और स्‍वत: हटाना चालू करें?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"प्रेषक: <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"आपने कहा"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> की ओर से संदेश"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"आपने एक संदेश भेजा"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"भेजा जा रहा है..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"नहीं भेजा गया. पुन: प्रयास करने के लिए स्‍पर्श करें."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"नहीं भेजा गया. पुन: प्रयास किया जा रहा है…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"फिर से भेजें या हटाएं"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"कृपया आपातकालीन सेवाओं को वॉइस कॉल करें. आपका लेख संदेश इस समय वितरित नहीं किया जा सकता."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"विफल रहा"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"डाउनलोड करने के लिए नया MMS संदेश"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"नया MMS संदेश"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"डाउनलोड नहीं किया जा सका"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"पुन: प्रयास करने के लिए स्पर्श करें"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"डाउनलोड करने के लिए स्‍पर्श करें"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"डाउनलोड करें या हटाएं"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"डाउनलोड किया जा रहा है..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"संदेश की समय सीमा समाप्त हो गई या वह उपलब्ध नहीं है"</string>
-    <string name="mms_info" msgid="3402311750134118165">"आकार: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, समाप्‍ति: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"भेजा नहीं जा सकता. प्राप्‍तकर्ता मान्‍य नहीं है."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"नेटवर्क पर सेवा सक्रिय नहीं है"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"नेटवर्क समस्‍या के कारण भेजा नहीं जा सका"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"संदेश की समय सीमा समाप्त हो गई या वह उपलब्ध नहीं है"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(कोई विषय नहीं)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"अज्ञात प्रेषक"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"डिलीवर कर दिया गया"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> से <xliff:g id="SUBJECT">%1$s</xliff:g> संदेश डाउनलोड नहीं किया जा सका."</string>
-    <string name="low_memory" msgid="5300743415198486619">"कम मेमोरी के कारण डेटाबेस कार्रवाई पूर्ण नहीं किया जा सका"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"संदेश नहीं भेजा गया"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"कुछ संदेशों को संदेश सेवा में नहीं भेजा गया है"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="CONVERSATIONS">%d</xliff:g> वार्तालापों में <xliff:g id="MESSAGES_1">%d</xliff:g> संदेश</item>
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> वार्तालापों में <xliff:g id="MESSAGES_1">%d</xliff:g> संदेश</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"संदेश डाउनलोड नहीं किया गया"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"कुछ संदेशों को संदेश सेवा में डाउनलोड नहीं किया गया है"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="CONVERSATIONS">%d</xliff:g> वार्तालापों में <xliff:g id="MESSAGES_1">%d</xliff:g> संदेश</item>
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> वार्तालापों में <xliff:g id="MESSAGES_1">%d</xliff:g> संदेश</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> को संदेश नहीं भेजा गया"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"कृपया आपातकालीन सेवाओं को वॉइस कॉल करें. <xliff:g id="NUMBER">%1$s</xliff:g> को भेजा गया आपका लेख संदेश इस समय वितरित नहीं किया जा सकता."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> नए संदेश</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> नए संदेश</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"प्रारंभ करें"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"कैमरा उपलब्ध नहीं है"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"कैमरा उपलब्ध नहीं है"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"वीडियो कैप्‍चर उपलब्‍ध नहीं है"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"मीडिया सहेजा नहीं जा सकता"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"चित्र नहीं लिया जा सकता"</string>
-    <string name="back" msgid="1477626055115561645">"पीछे"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"संग्रहीत"</string>
-    <string name="action_delete" msgid="4076795795307486019">"हटाएं"</string>
-    <string name="action_archive" msgid="5437034800324083170">"संग्रहीत करें"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"संग्रह से निकालें"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"नोटिफिकेशन बंद करें"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"नोटिफिकेशन चालू करें"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"संपर्क जोड़ें"</string>
-    <string name="action_download" msgid="7786338136368564146">"डाउनलोड करें"</string>
-    <string name="action_send" msgid="377635240181672039">"भेजें"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"हटाएं"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"इस संदेश को हटाएं?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"इस क्रिया को पूर्ववत नहीं किया जा सकता."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"हटाएं"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">इन वार्तालापों को हटाएं?</item>
-      <item quantity="other">इन वार्तालापों को हटाएं?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"हटाएं"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"अभी नहीं"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"प्रति"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"एकाधिक चित्र चुनें"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"चयन की दुबारा पूछें"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ऑडियो रिकॉर्ड नहीं किया जा सकता. पुनः प्रयास करें."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ऑडियो नहीं चलाया जा सकता. पुन: प्रयास करें."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ऑडियो सहेजा नहीं जा सका. पुनः प्रयास करें."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"स्पर्श करके रखें"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"चित्र"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ऑडियो क्लिप"</string>
-    <string name="notification_video" msgid="4331423498662606204">"वीडियो"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"संपर्क कार्ड"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"डाउनलोड करें"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS के द्वारा उत्तर दें"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS से उत्तर दें"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"उत्तर दें"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> प्रतिभागी</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> प्रतिभागी</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"मुझे"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"संपर्क अवरोधित तथा संग्रहीत किया गया"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"संपर्क को अनवरोधित किया गया और संग्रह से निकाला गया"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> को संग्रहीत किया गया"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> को संग्रह से निकाला गया"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"नोटिफ़िकेशन बंद हैं"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"नोटिफ़िकेशन चालू हैं"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"बिल्‍कुल तैयार. भेजें को पुन: स्‍पर्श करें."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"संदेश सेवा को डिफ़ॉल्ट SMS ऐप के रूप में सफलतापूर्वक सेट कर दिया गया है."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">अटैचमेंट छोड़ें</item>
-      <item quantity="other">अटैचमेंट छोड़ें</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ऑडियो अटैचमेंट"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ऑडियो अटैचमेंट चलाएं"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"रोकें"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> की ओर से संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> का भेजने में विफल रहा संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> का संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> को नहीं भेजा गया संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> को संदेश भेजा जा रहा है: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> को भेजने में विफल रहा संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> के लिए संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> का विफल रहा संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> का संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> को नहीं भेजा गया संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> को संदेश भेजा जा रहा है: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> को भेजने में विफल रहा संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> के लिए संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"विफल रहा संदेश. पुन: प्रयास करने के लिए स्पर्श करें."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> के साथ बातचीत"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"विषय हटाएं"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"वीडियो कैप्चर करें"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"स्थिर चित्र कैप्चर करें"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"चित्र लें"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"वीडियो रिकॉर्ड करना प्रारंभ करें"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"पूर्ण स्क्रीन कैमरा पर स्विच करें"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"सामने और पीछे वाले कैमरे के बीच स्‍विच करें"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"रिकॉर्डिंग रोकें और वीडियो अटैच करें"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"वीडियो रिकॉर्ड करना बंद करें"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"संदेश सेवा फ़ोटो"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> फ़ोटो \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" एल्बम में सहेजी गईं</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> फ़ोटो \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" एल्बम में सहेजी गईं</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> वीडियो \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" एल्बम में सहेजे गए</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> वीडियो \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" एल्बम में सहेजे गए</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> अटैचमेंट \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" एल्बम में सहेजे गए</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> अटैचमेंट \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" एल्बम में सहेजे गए</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> अटैचमेंट \"डाउनलोड\" में सहेजे गए</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> अटैचमेंट \"डाउनलोड\" में सहेजे गए</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> अटैचमेंट सहेजे गए</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> अटैचमेंट सहेजे गए</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> अटैचमेंट सहेजे नहीं जा सके</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> अटैचमेंट सहेजे नहीं जा सके</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS अटैचमेंट सहेजा गया"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"सेटिंग"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"संग्रहीत"</string>
-    <string name="action_close" msgid="1840519376200478419">"बंद करें"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"अतिरिक्त सेटिंग"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"डीबग"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"नोटिफिकेशन"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ध्वनि"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"मौन"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"वाइब्रेट"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"अवरोधित"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS वितरण रिपोर्ट"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"आपके द्वारा भेजे गए प्रत्येक SMS की वितरण रिपोर्ट का अनुरोध करें"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"स्वतः पुनर्प्राप्ति"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS संदेशों को अपने आप प्राप्त करें"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"रोमिंग स्वतः पुनर्प्राप्ति"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"रोमिंग के दौरान MMS अपने आप प्राप्त करें"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"समूह संदेश सेवा"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"एक से अधिक प्राप्तकर्ता होने पर एक ही संदेश भेजने के लिए MMS का उपयोग करें"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"डिफ़ॉल्ट SMS ऐप"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"डिफ़ॉल्ट SMS ऐप"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"आपका फ़ोन नंबर"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"अज्ञात"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"आउटगोइंग संदेश ध्वनि"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS डंप करें"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"बाहरी मेमोरी फ़ाइल में प्राप्त किया गया SMS अपरिष्कृत डेटा डंप करें"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS डंप करें"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"बाहरी मेमोरी फ़ाइल में प्राप्त किया गया MMS अपरिष्कृत डेटा डंप करें"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"वायरलेस अलर्ट"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"संदेश के विकल्प"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"लेख की प्रतिलिपि बनाएं"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"विवरण देखें"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"हटाएं"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"अग्रेषित करें"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"संदेश के विवरण"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"प्रकार: "</string>
-    <string name="text_message" msgid="7415419755252205721">"लेख संदेश"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"मल्टीमीडिया संदेश"</string>
-    <string name="from_label" msgid="1947831848146564875">"प्रेषक: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"प्रति: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"भेजा गया: "</string>
-    <string name="received_label" msgid="4442494712757995203">"प्राप्त हुआ: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"विषय: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"आकार: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"प्राथमिकता: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"सिम: "</string>
-    <string name="priority_high" msgid="728836357310908368">"उच्च"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"सामान्य"</string>
-    <string name="priority_low" msgid="7398724779026801851">"निम्न"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"सिम <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"प्रेषक का पता छिपाएं"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"अटैचमेंट लोड करते समय संदेश नहीं भेजा जा सकता."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"अटैचमेंट लोड नहीं किया जा सकता. पुन: प्रयास करें."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"नेटवर्क तैयार नहीं है. पुनः प्रयास करें."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"लेख हटाएं"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"लेख और संख्याएं डालने के बीच स्विच करें"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"और अधिक प्रतिभागी जोड़ें"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"प्रतिभागियों की पुष्‍टि करें"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"नई बातचीत प्रारंभ करें"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"यह आइटम चुनें"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"वीडियो चलाएं"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"लोग और विकल्प"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"डीबग"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"लोग और विकल्प"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"सामान्य"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"इस वार्तालाप में लोग"</string>
-    <string name="action_call" msgid="6596167921517350362">"कॉल करें"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"संदेश भेजें"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;br/&gt;&lt;small&gt;from <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt; से संदेश भेजें"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">फ़ोटो भेजें</item>
-      <item quantity="other">फ़ोटो भेजें</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">ऑडियो भेजें</item>
-      <item quantity="other">ऑडियो भेजें</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">वीडियो भेजें</item>
-      <item quantity="other">वीडियो भेजें</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">संपर्क कार्ड भेजें</item>
-      <item quantity="other">संपर्क कार्ड भेजें</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">अटैचमेंट भेजें</item>
-      <item quantity="other">अटैचमेंट भेजें</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> अटैचमेंट भेजे जाने के लिए तैयार हैं</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> अटैचमेंट भेजे जाने के लिए तैयार हैं</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"फ़ीडबैक भेजें"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play स्टोर में देखें"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"वर्शन जानकारी"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"वर्शन %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"ओपन सोर्स लाइसेंस"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"नोटिफिकेशन"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"अटैचमेंट सीमा पर पहुंच गए"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"अटैचमेंट लोड करने में विफल रहा."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"संपर्कों में जोड़ें?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"संपर्क जोड़ें"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"विषय"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"विषय: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"संपर्क कार्ड लोड हो रहा है"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"संपर्क कार्ड लोड नहीं किया जा सका"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"संपर्क कार्ड देखें"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> संपर्क</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> संपर्क</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"संपर्क कार्ड"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"जन्मदिन"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"नोट"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"संदेश अग्रेषित करें"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"जवाब दें"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS अक्षम है"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"भेजने के लिए, संदेश सेवा को डिफ़ॉल्ट SMS ऐप के रूप में सेट करें"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"संदेश सेवा को डिफ़ॉल्ट SMS ऐप के रूप में सेट करें"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"बदलें"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"संदेश प्राप्‍त करने के लिए, संदेश सेवा को डिफ़ॉल्‍ट SMS ऐप के रूप में सेट करें"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS संदेश भेजने के लिए कोई भी पसंदीदा सिम नहीं चुनी गई है"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"डिवाइस स्‍वामी द्वारा इस ऐप्स की अनुमति नहीं दी गई है."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ठीक"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"बातचीत में बहुत अधिक प्रतिभागी हैं"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">अमान्‍य संपर्क</item>
-      <item quantity="other">अमान्‍य संपर्क</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"कैमरे का चित्र लोड नहीं किया जा सका"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"आप: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"ड्राफ़्ट"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"आपके द्वारा नया वार्तालाप प्रारंभ करने के बाद, वह आपको यहां सूचीबद्ध दिखाई देगा"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"संग्रहीत वार्तालाप यहां दिखाई देते हैं"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"वार्तालाप लोड हो रहे हैं…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"चित्र"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ऑडियो क्लिप"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"वीडियो"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"संपर्क कार्ड"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"वापस लाएं"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"पुन: प्रयास करें"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"नया संदेश प्रारंभ करने के लिए कोई संपर्क नाम या फ़ोन नंबर डालें"</string>
-    <string name="action_block" msgid="9032076625645190136">"अवरुद्ध करें"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> को अवरुद्ध करें"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> को अनवरोधित करें"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> को अवरोधित करें?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"आपको इस संदेश से नंबर प्राप्‍त होते रहेंगे लेकिन अब उनकी सूचना नहीं दी जाएगी. इस वार्तालाप को संग्रहीत किया जाएगा."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"अवरोधित संपर्क"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"अनवरोधित करें"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"अवरोधित संपर्क"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"दस्‍तावेज़ लाइब्रेरी से चित्र चुनें"</string>
-    <string name="sending_message" msgid="6363584950085384929">"संदेश भेजा जा रहा है"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"संदेश भेजा गया"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"सेलुलर डेटा बंद हो गया है. अपनी सेटिंग जांचें."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"हवाई जहाज़ मोड में संदेश नहीं भेजे जा सकते"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"संदेश भेजा नहीं जा सका"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"संदेश डाउनलोड किया गया"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"सेल्‍युलर डेटा बंद हो गया है. अपनी सेटिंग जांचें."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"संदेश को हवाई जहाज़ मोड में डाउनलोड नहीं किया जा सकता"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"संदेश डाउनलोड नहीं किया जा सका"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"शून्य"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"एक"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"दो"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"तीन"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"चार"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"पांच"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"छह"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"सात"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"आठ"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"नौ"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> के साथ संदेश नहीं भेजा जा सकता, त्रुटि <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"अज्ञात वाहक के साथ संदेश नहीं भेजा जा सकता, त्रुटि <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"अग्रेषित: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"संदेश नहीं भेजा गया: नेटवर्क पर सेवा सक्रिय नहीं है"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"संदेश नहीं भेजा गया: अमान्य गंतव्य पता"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"संदेश नहीं भेजा गया: अमान्य संदेश"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"संदेश नहीं भेजा गया: असमर्थित सामग्री"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"संदेश नहीं भेजा गया: असमर्थित संदेश"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"संदेश नहीं भेजा गया: बहुत बड़ा है"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"नया संदेश"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"देखें"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"चित्र"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"उपयुक्त ऐप्लिकेशन नहीं मिला"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"प्राप्तकर्ता को निकालें"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"नया संदेश"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"अभी नहीं"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"पहुंच बिंदु संपादित करें"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"सेट नहीं है"</string>
-    <string name="apn_name" msgid="1572691851070894985">"नाम"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS प्रॉक्‍सी"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS पोर्ट"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN प्रकार"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN हटाएं"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"नया APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"सहेजें"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"छोड़ें"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"नाम फ़ील्‍ड खाली नहीं हो सकता."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN खाली नहीं हो सकता."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC फ़ील्‍ड में 3 अंक होने चाहिए."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MCC फ़ील्‍ड में 2 या 3 अंक होने चाहिए."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"डिफ़ॉल्‍ट APN सेटिंग पुनर्स्थापित हो रही हैं."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"डिफ़ॉल्ट पर रीसेट करें"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"डिफ़ॉल्‍ट APN सेटिंग रीसेट करना पूर्ण हुआ."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"शीर्षक रहित"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"पहुंच बिंदु के नाम"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"नया APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"एैक्सेस बिंदु नाम सेटिंग इस उपयोगकर्ता के लिए उपलब्ध नहीं हैं"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"क्लिपबोर्ड पर कॉपी बनाएं?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"कॉपी बनाएं"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> पर"</string>
-    <string name="general_settings" msgid="5409336577057897710">"सामान्य"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"अतिरिक्त सेटिंस"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"सामान्य सेटिंग"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"अतिरिक्त सेटिंग"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" सिम"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"सभी प्राप्‍तकर्ताओं को व्‍यक्‍तिगत SMS संदेश भेजें. कोई भी जवाब केवल आपको प्राप्‍त होंगे"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"सभी प्राप्‍तकर्ताआें को एकल MMS भेजें"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"अज्ञात नंबर"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"नया संदेश"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"नया संदेश."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"सिम चयनकर्ता"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> चयनित, SIM चयनकर्ता"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"विषय संपादित करें"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"सिम चुनें या विषय संपादित करें"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ऑडियो रिकॉर्ड करने के लिए स्‍पर्श करके रखें"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"नई बातचीत प्रारंभ करें"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"संदेश सेवा"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"संदेश सेवा सूची"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"संदेश सेवा"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"नया संदेश"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"वार्तालाप सूची"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"बातचीत लोड हो रही हैं…"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"संदेश लोड हो रहे हैं"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"और बातचीत देखें"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"अधिक संदेश देखें"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"वार्तालाप हटा दिया गया है"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"वार्तालाप हटा दिया गया. कोई भिन्न संदेश सेवा वार्तालाप दिखाने के लिए स्पर्श करें"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"अवरोधित"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"अनवरोधित"</string>
-    <string name="db_full" msgid="8459265782521418031">"मेमोरी स्‍थान कम है. कुछ डेटा खो सकता है."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"अटैचमेंट चुनें"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"चयन की पुष्टि करें"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> चुने गए"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"कृपया एक या अधिक अटैचमेंट निकालें और पुन: प्रयास करें."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"आप अपना संदेश भेजकर देख सकते हैं, लेकिन यह तब तक वितरित नहीं होगा जब तक कि आप एक या कुछ और अटैचमेंट निकाल नहीं देते."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"आप प्रति संदेश केवल एक वीडियो भेज सकते हैं. कृपया अतिरिक्‍त वीडियो निकालें और पुन: प्रयास करें."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"संदेश सेवा अटैचमेंट लोड करने में विफल रही."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"फिर भी भेजें"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"बातचीत प्रारंभ नहीं की जा सकी"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> चुनी गई"</string>
-</resources>
diff --git a/res/values-hr/arrays.xml b/res/values-hr/arrays.xml
deleted file mode 100644
index 5ebf706..0000000
--- a/res/values-hr/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"nema predmeta"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Da"</item>
-    <item msgid="6049132459802288033">"Ne"</item>
-    <item msgid="3084376867445867895">"U redu"</item>
-    <item msgid="3155097332660174689">"He-he"</item>
-    <item msgid="2611328818571146775">"Hvala"</item>
-    <item msgid="4881335087096496747">"Slažem se"</item>
-    <item msgid="2422296858597420738">"Lijepo"</item>
-    <item msgid="4805581752819452687">"Krećem"</item>
-    <item msgid="4746700499431366214">"U redu, javit ću se kasnije"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
deleted file mode 100644
index b8bb490..0000000
--- a/res/values-hr/strings.xml
+++ /dev/null
@@ -1,545 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Slanje poruka"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Slanje poruka"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Odabir razgovora"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Postavke"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Pošalji poruku"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Dodajte privitak"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Pomoć"</string>
-    <string name="welcome" msgid="2857560951820802321">"Dobro došli"</string>
-    <string name="skip" msgid="7238879696319945853">"Preskoči"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Dalje &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Dalje"</string>
-    <string name="exit" msgid="1905187380359981199">"Izlaz"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Postavke &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Postavke"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Slanje poruka treba dopuštenje za SMS, Telefon i Kontakte."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Dopuštenja možete promijeniti u Postavkama &gt; Aplikacije &gt; Slanje poruka &gt; Dopuštenja."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Dopuštenja možete promijeniti tako da u Postavkama otvorite Aplikacije, Slanje poruka, Dopuštenja."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Često kontaktirani"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Svi kontakti"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Pošalji na <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Snimite fotografije ili videozapis"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Odaberite slike s ovog uređaja"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Snimanje zvuka"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Odaberite fotografiju"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Medij je odabran."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Odabir medija poništen je."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Odabrano: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"slika <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"slika"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Snimanje zvuka"</string>
-    <string name="action_share" msgid="2143483844803153871">"Dijeljenje"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Upravo sada"</string>
-    <string name="posted_now" msgid="867560789350406701">"Sad"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> sat</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> sata</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> sati</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> dan</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> dana</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dana</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> tjedan</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> tjedna</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tjedana</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mjesec</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> mjeseca</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mjeseci</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> godina</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> godine</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> godina</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Poruka klase 0"</string>
-    <string name="save" msgid="5081141452059463572">"Spremi"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Na uređaju ponestaje prostora. Slanje poruka automatski će izbrisati starije poruke da bi se oslobodio prostor."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Ponestaje prostora za pohranu"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Slanje poruka možda neće slati ili primati poruke dok se na uređaju ne oslobodi više prostora."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Nema dovoljno prostora za pohranu SMS-a. Možda ćete morati izbrisati poruke."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Potvrđivanje telefonskog broja"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Taj jednokratni korak omogućit će Slanju poruka pravilnu isporuku vaših grupnih poruka."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefonski broj"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Izbriši sve poruke s medijskim sadržajima"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Izbriši poruke starije od <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Automatski izbriši poruke starije od <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Zanemari"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Izbrisati sve poruke s medijskim sadržajima?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Izbrisati poruke starije od <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Izbrisati poruke starije od <xliff:g id="DURATION">%s</xliff:g> i uključiti automatsko brisanje?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> kaže"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Rekli ste"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Poruka pošiljatelja <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Poslali ste poruku"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Slanje…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Nije poslano. Dodirnite za ponovni pokušaj."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Nije poslano. Pokušavamo ponovo…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Ponovno slanje ili brisanje"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Nazovite hitnu službu. Vaša tekstna poruka nije isporučena."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Nije poslano"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nova MMS poruka za preuzimanje"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nova MMS poruka"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Preuzimanje nije moguće"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Dodirnite za ponovni pokušaj"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Dodirnite za preuzimanje"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Preuzimanje ili brisanje"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Preuzimanje..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Poruka je istekla ili nije dostupna"</string>
-    <string name="mms_info" msgid="3402311750134118165">"veličina: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, istek: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Nije poslano. Primatelj nije važeći."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Usluga nije aktivirana na mreži"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Slanje nije uspjelo zbog problema s mrežom"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Poruka je istekla ili nije dostupna"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Bez predmeta)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Nepoznati pošiljatelj"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Isporučeno"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Preuzimanje poruke <xliff:g id="SUBJECT">%1$s</xliff:g> od pošiljatelja <xliff:g id="FROM">%2$s</xliff:g> nije uspjelo."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Radnja baze podataka nije dovršena zbog nedostatka memorije"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Poruka nije poslana"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Neke poruke nisu poslane u Slanju poruka"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> poruka u <xliff:g id="CONVERSATIONS">%d</xliff:g> razgovoru</item>
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> poruke u <xliff:g id="CONVERSATIONS">%d</xliff:g> razgovora</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> poruka u <xliff:g id="CONVERSATIONS">%d</xliff:g> razgovora</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Poruka nije preuzeta"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Neke poruke nisu preuzete u Slanje poruka"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> poruka u <xliff:g id="CONVERSATIONS">%d</xliff:g> razgovoru</item>
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> poruke u <xliff:g id="CONVERSATIONS">%d</xliff:g> razgovora</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> poruka u <xliff:g id="CONVERSATIONS">%d</xliff:g> razgovora</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Poruka na broj <xliff:g id="NUMBER">%1$s</xliff:g> nije poslana"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Nazovite hitnu službu. Vaša tekstna poruka na broj <xliff:g id="NUMBER">%1$s</xliff:g> nije isporučena."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> nova poruka</item>
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> nove poruke</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> novih poruka</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Započni"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Fotoaparat nije dostupan"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Fotoaparat nije dostupan"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Snimanje videozapisa nije dostupno"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Medij nije spremljen"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Nije moguće snimiti sliku"</string>
-    <string name="back" msgid="1477626055115561645">"Natrag"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arhivirano"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Izbriši"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arhiviraj"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Poništi arhiviranje"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Isključi obavijesti"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Uključi obavijesti"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Dodaj kontakt"</string>
-    <string name="action_download" msgid="7786338136368564146">"Preuzmi"</string>
-    <string name="action_send" msgid="377635240181672039">"Pošalji"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Izbriši"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Želite li izbrisati tu poruku?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Tu radnju nije moguće poništiti."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Izbriši"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Izbrisati razgovore?</item>
-      <item quantity="few">Izbrisati razgovore?</item>
-      <item quantity="other">Izbrisati razgovore?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Izbriši"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Odustani"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Odredište"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Odaberi više slika"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Potvrdite odabir"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Audioporuka nije snimljena. Pokušajte ponovo."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Audioporuku nije moguće reproducirati. Pokušajte ponovo."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Audioporuka nije spremljena. Pokušajte ponovo."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Dodirnite i zadržite"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Slika"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audioisječak"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Videozapis"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kartica kontakta"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Preuzmi"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Odgovorite putem SMS-a"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Odgovor MMS-om"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Odgovorite"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> sudionik</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> sudionika</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> sudionika</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ja"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakt je blokiran i arhiviran"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontakt deblokiran i dearhiviran"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Arhivirano: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Poništena arhiviranja: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Obavijesti isključene"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Obavijesti uključene"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Sve je postavljeno. Ponovo dodirnite Pošalji."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Slanje poruka uspješno je postavljeno kao zadana aplikacija za SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Odbacivanje privitaka</item>
-      <item quantity="few">Odbacivanje privitaka</item>
-      <item quantity="other">Odbacivanje privitaka</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Audioprivitak"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Reproduciraj audioprivitak"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pauziraj"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Poruka pošiljatelja <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Poruka pošiljatelja <xliff:g id="SENDER">%1$s</xliff:g> nije uspjela: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Poruka pošiljatelja <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Poruka za kontakt <xliff:g id="CONTACT">%1$s</xliff:g> nije poslana: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Slanje poruke kontaktu <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Poruka za kontakt <xliff:g id="CONTACT">%1$s</xliff:g> nije uspjela: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Poruka kontaktu <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Neuspjela poruka pošiljatelja <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Poruka pošiljatelja <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Poruka za grupu <xliff:g id="GROUP">%1$s</xliff:g> nije poslana: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Slanje poruke grupi <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Poruka za grupu <xliff:g id="GROUP">%1$s</xliff:g> nije uspjela: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Poruka grupi <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vrijeme: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Poruka nije uspjela. Dodirnite za ponovni pokušaj."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Razgovor sa sljedećima: <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Brisanje predmeta"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Snimi videozapis"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Snimi fotografiju"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Snimi sliku"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Početak snimanja videozapisa"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Prebacivanje na fotoaparat na punom zaslonu"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Prebacivanje između prednjeg i stražnjeg fotoaparata"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Zaustavi snimanje i priloži videozapis"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Zaustavi snimanje videozapisa"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotografije Slanja poruka"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> fotografija spremljena je u album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> fotografije spremljene su u album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotografija spremljeno je u album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> videozapis spremljen je u album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> videozapisa spremljena su u album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videozapisa spremljeno je u album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> privitak spremljen je u album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> privitka spremljena su u album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> privitaka spremljeno je u album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> privitak spremljen je u \"Preuzimanja\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> privitka spremljena su u \"Preuzimanja\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> privitaka spremljeno je u \"Preuzimanja\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> privitak spremljen</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> privitka spremljena</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> privitaka spremljeno</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Spremanje <xliff:g id="QUANTITY_1">%d</xliff:g> privitka nije uspjelo</item>
-      <item quantity="few">Spremanje <xliff:g id="QUANTITY_1">%d</xliff:g> privitaka nije uspjelo</item>
-      <item quantity="other">Spremanje <xliff:g id="QUANTITY_1">%d</xliff:g> privitaka nije uspjelo</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS privitak spremljen"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Postavke"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arhivirano"</string>
-    <string name="action_close" msgid="1840519376200478419">"Zatvori"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Napredno"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Otklanjanje pogrešaka"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Obavijesti"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Zvuk"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Bešumno"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibriranje"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blokirano"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Izvješća o isporuci SMS-a"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Zahtijevanje izvješća o isporuci za svaki poslani SMS"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automatski dohvat"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Automatsko dohvaćanje MMS-ova"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Automatski dohvati u roamingu"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Automatsko dohvaćanje MMS-ova u roamingu"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Grupne poruke"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Slanje jedne poruke za više primatelja pomoću MMS-a"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Zadana aplikacija za SMS"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Zadana aplikacija za SMS"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Vaš telefonski broj"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Nepoznato"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Zvukovi odlazne poruke"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Sigurnosno kopiraj SMS-ove"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Sigurnosno kopiranje neobrađenih podataka primljenih SMS-ova u datoteku vanjske pohrane"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Sigurnosno kopiraj MMS-ove"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Sigurnosno kopiranje neobrađenih podataka primljenih MMS-ova u datoteku vanjske pohrane"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Upozorenja putem mobilne mreže"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opcije poruka"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopiraj tekst"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Prikaz pojedinosti"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Izbriši"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Proslijedi"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Pojedinosti poruke"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Vrsta: "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS poruka"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimedijska poruka"</string>
-    <string name="from_label" msgid="1947831848146564875">"Šalje: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Prima: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Poslano: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Primljeno: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Predmet: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Veličina: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioritet: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Visok"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Uobičajeni"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Niski"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Skrivena adresa pošiljatelja"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Slanje poruke nije moguće tijekom učitavanja privitaka."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Privitak nije učitan. Pokušajte ponovo."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Mreža nije spremna. Pokušajte ponovo."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Brisanje teksta"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Prebacivanje između unosa teksta i brojeva"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Dodaj još sudionika"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Potvrdi sudionike"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Započnite novi razgovor"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Odaberite ovu stavku"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Reproduciraj videozapis"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Osobe i opcije"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Otkloni pogreške"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Osobe i opcije"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Općenito"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Osobe u ovom razgovoru"</string>
-    <string name="action_call" msgid="6596167921517350362">"Uputite poziv"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Pošaljite poruku"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Pošalji poruku&lt;br/&gt;&lt;small&gt;sa SIM kartice <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Pošaljite fotografije</item>
-      <item quantity="few">Pošaljite fotografije</item>
-      <item quantity="other">Pošaljite fotografije</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Pošaljite audiozapise</item>
-      <item quantity="few">Pošaljite audiozapise</item>
-      <item quantity="other">Pošaljite audiozapise</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Pošaljite videozapise</item>
-      <item quantity="few">Pošaljite videozapise</item>
-      <item quantity="other">Pošaljite videozapise</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Pošaljite kartice kontakata</item>
-      <item quantity="few">Pošaljite kartice kontakata</item>
-      <item quantity="other">Pošaljite kartice kontakata</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Pošaljite privitke</item>
-      <item quantity="few">Pošaljite privitke</item>
-      <item quantity="other">Pošaljite privitke</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> privitak spreman je za slanje</item>
-      <item quantity="few"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> privitka spremna su za slanje</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> privitaka spremno je za slanje</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Slanje povratnih informacija"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Prikaži u Trgovini Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informacije o verziji"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Verzija %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licence otvorenog koda"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Obavijesti"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Dosegnuto je ograničenje za privitke"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Učitavanje privitka nije uspjelo."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Želite li dodati u Kontakte?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Dodavanje kontakta"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Predmet"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Predmet: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Učitavanje kartice kontakta"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kartica kontakta nije učitana"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Prikaz kartice kontakta"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontakt</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakta</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakata</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kartice kontakata"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Rođendan"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Bilješke"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Proslijedi poruku"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Odgovori"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS je onemogućen"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Postavite Slanje poruka kao zadanu aplikaciju za SMS da biste slali poruke"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Postavite Slanje poruka kao zadanu aplikaciju za SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Promijeni"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Postavite Slanje poruka kao zadanu aplikaciju za SMS da biste primali poruke"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Nije odabran preferirani SIM za slanje SMS poruka"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Vlasnik uređaja nije odobrio upotrebu te aplikacije."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"U redu"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Previše sudionika u razgovoru"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Nevažeći kontakti</item>
-      <item quantity="few">Nevažeći kontakti</item>
-      <item quantity="other">Nevažeći kontakti</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Slika nije učitana"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Vi: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Skica"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Ovdje će biti naveden novi razgovor kada ga pokrenete"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Arhivirani razgovori prikazuju se ovdje"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Učitavanje razgovora..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Slika"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audioisječak"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Videozapis"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kartica kontakta"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Poništi"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Pokušaj ponovo"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Unesite ime kontakta ili telefonski broj da biste započeli novu poruku"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokiraj"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blokiranje <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Deblokiraj <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Blokirati <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"I dalje ćete primati poruke s tog broja, ali više nećete primati obavijesti o tome. Razgovor će se arhivirati."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blokirani kontakti"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DEBLOKIRAJ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blokirani kontakti"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Odaberite sliku iz knjižnice dokumenata"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Slanje poruke"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Poruka je poslana"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobilni su podaci isključeni. Provjerite postavke."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Ne možete slati poruke u načinu rada u zrakoplovu"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Slanje poruke nije uspjelo"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Poruka preuzeta"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobilni su podaci isključeni. Provjerite postavke."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Nije moguće preuzimanje poruka u načinu  rada u zrakoplovu"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Preuzimanje poruke nije uspjelo"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nula"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Jedan"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dva"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tri"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Četiri"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Pet"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Šest"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sedam"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Osam"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Devet"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Poruka nije poslana putem operatera <xliff:g id="CARRIERNAME">%1$s</xliff:g>, pogreška <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Poruka nije poslana putem nepoznatog mobilnog operatera, pogreška <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Poruka nije poslana jer usluga nije aktivirana na mreži"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Poruka nije poslana jer odredišna adresa nije važeća"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Poruka nije poslana jer nije važeća"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Poruka nije poslana jer sadržaj nije podržan"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Poruka nije poslana jer nije podržana"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Poruka nije poslana jer je prevelika"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nova poruka"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Prikaz"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Slika"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Nije pronađena odgovarajuća aplikacija"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Uklanjanje primatelja"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nova poruka"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Odustani"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Uređivanje pristupne točke"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nije postavljeno"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Naziv"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS priključak"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Vrsta APN-a"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Izbriši APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Novi APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Spremi"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Odbaci"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Polje naziva ne može biti prazno."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN ne može biti prazan."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC polje mora imati 3 znamenke."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Polje MNC mora imati 2 ili 3 znamenke."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Vraćaju se zadane postavke APN-a."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Vrati na zadano"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Dovršeno je vraćanje zadanih postavki APN-a."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Bez naziva"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Nazivi pristupnih točaka"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-ovi"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Novi APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Postavke naziva pristupne točke nisu dostupne ovom korisniku"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Kopirati u međuspremnik?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopiraj"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"na <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Općenito"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Napredno"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Opće postavke"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Napredne postavke"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Slanje pojedinačnih SMS poruka svim primateljima. Eventualne odgovore dobit ćete samo vi"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Slanje pojedinačnog MMS-a svim primateljima"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Nepoznati broj"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nova poruka"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nova poruka."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Gumb za odabir SIM-a"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> odabran, gumb za odabir SIM-a"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Uredi predmet"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Odabir SIM-a ili uređivanje predmeta"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Dodirnite i zadržite da biste snimili zvuk"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Započnite novi razgovor"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Slanje poruka"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Popis Slanja poruka"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Slanje poruka"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nova poruka"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Popis razgovora"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Učitavanje razgovora"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Učitavanje poruka"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Prikaži više razgovora"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Prikaži više poruka"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Razgovor je izbrisan"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Razgovor izbrisan. Dodirnite za prikaz drugog razgovora iz Slanja poruka"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blokirano"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Deblokirano"</string>
-    <string name="db_full" msgid="8459265782521418031">"Nedostaje prostora za pohranu. Neki se podaci mogu izgubiti."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Odaberite privitke"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Potvrdite odabir"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Odabrano: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Uklonite jedan ili više privitaka i pokušajte ponovo."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Možete pokušati poslati poruku, ali možda neće biti dostavljena ako ne uklonite jedan ili više privitaka."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Možete poslati samo jedan videozapis u poruci. Uklonite dodatne videozapise i pokušajte ponovo."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Slanje poruka nije uspjelo učitati privitak."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Svejedno pošalji"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Pokretanje razgovora nije uspjelo"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Odabrani SIM: <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-hu/arrays.xml b/res/values-hu/arrays.xml
deleted file mode 100644
index 36c0cd0..0000000
--- a/res/values-hu/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"nincs tárgy"</item>
-    <item msgid="272485471009191934">"nincs tárgy"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Igen"</item>
-    <item msgid="6049132459802288033">"Nem"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Haha!"</item>
-    <item msgid="2611328818571146775">"Köszönöm!"</item>
-    <item msgid="4881335087096496747">"Egyetértek"</item>
-    <item msgid="2422296858597420738">"Ügyes"</item>
-    <item msgid="4805581752819452687">"Úton vagyok"</item>
-    <item msgid="4746700499431366214">"Rendben, később jelentkezem"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
deleted file mode 100644
index 9203514..0000000
--- a/res/values-hu/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Üzenetváltás"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Üzenetváltás"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Beszélgetés kijelölése"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Beállítások"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Üzenet küldése"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Melléklet hozzáadása"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Súgó"</string>
-    <string name="welcome" msgid="2857560951820802321">"Üdvözöljük!"</string>
-    <string name="skip" msgid="7238879696319945853">"Kihagyás"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Következő &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Tovább"</string>
-    <string name="exit" msgid="1905187380359981199">"Kilépés"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Beállítások &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Beállítások"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"A Messaging engedélyt kér a következőkhöz: SMS, telefon és névjegyek."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Az engedélyeket a Beállítások &gt; Alkalmazások &gt; Messaging &gt; Engedélyek lehetőségnél módosíthatja."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Az engedélyeket a Beállítások, Alkalmazások, Messaging, Engedélyek lehetőségnél módosíthatja."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Gyakran használt névjegyek"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Az összes névjegy"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Küldés: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Kép vagy videó rögzítése"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Képek kiválasztása erről az eszközről"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Hanganyag rögzítése"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Fotó kiválasztása"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Kijelölte a médiaelemet."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Visszavonta a médiaelem kijelölését."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> kiválasztva"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"kép <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"kép"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Hanganyag rögzítése"</string>
-    <string name="action_share" msgid="2143483844803153871">"Megosztás"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Éppen most"</string>
-    <string name="posted_now" msgid="867560789350406701">"Most"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> perce</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> perce</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> órája</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> órája</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> napja</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> napja</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> hét</item>
-      <item quantity="one">egy hét</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> hónap</item>
-      <item quantity="one">egy hónap</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> év</item>
-      <item quantity="one">egy év</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"0. osztályú üzenet"</string>
-    <string name="save" msgid="5081141452059463572">"Mentés"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Az eszközön kevés a tárhely. A Messaging automatikusan törli a régebbi üzeneteket tárhely felszabadítása érdekében."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Kevés a szabad terület"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"A Messaging nem küldhet vagy fogadhat üzenetet, amíg nem áll rendelkezésre több hely az eszközön."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Kevés a tárhely az SMS-eknek. Lehet, hogy üzeneteket kell törölnie."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Telefonszám megerősítése"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Ez az egyszeri lépés biztosítja, hogy a Messaging megfelelően továbbítsa a csoportos üzeneteket."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefonszám"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Az összes médiatartalommal bíró üzenet törlése"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"A(z) <xliff:g id="DURATION">%s</xliff:g> időtartamnál régebbi üzenetek törlése"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"A(z) <xliff:g id="DURATION">%s</xliff:g> időtartamnál régebbi üzenetek automatikus törlése"</string>
-    <string name="ignore" msgid="7063392681130898793">"Mellőzés"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Törli az összes, médiát tartalmazó üzenetet?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Törli a(z) <xliff:g id="DURATION">%s</xliff:g> időtartamnál régebbi üzeneteket?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Törli a(z) <xliff:g id="DURATION">%s</xliff:g> időtartamnál régebbi üzeneteket, és bekapcsolja az automatikus törlést?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> a következőt mondta:"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Ön a következőt mondta"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> üzenete:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Ön elküldött egy üzenetet"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Küldés…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Nem lehetett elküldeni. Érintse meg az újbóli próbálkozáshoz."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Nem lehetett elküldeni. Újabb próbálkozás…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Újraküldés vagy törlés"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Kérjük, tárcsázza a segélyhívót. A szöveges üzenetet jelenleg nem tudjuk elküldeni."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Sikertelen"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Új letölthető MMS üzenet"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Új MMS üzenet"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Nem sikerült letölteni"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Érintse meg az újabb próbálkozáshoz"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Érintse meg a letöltéshez"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Letöltés vagy törlés"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Letöltés…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Az üzenet vagy lejárt, vagy nem érhető el."</string>
-    <string name="mms_info" msgid="3402311750134118165">"méret: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, lejárat: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Nem lehetett elküldeni. A címzett érvénytelen."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"A szolgáltatás nincs aktiválva a hálózaton"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Hálózati probléma miatt nem lehetett elküldeni"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Az üzenet vagy lejárt, vagy nem érhető el."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Nincs tárgy)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Ismeretlen feladó"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Kézbesítve"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Nem sikerült letölteni <xliff:g id="FROM">%2$s</xliff:g> „<xliff:g id="SUBJECT">%1$s</xliff:g>” tárgyú levelét."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Kevés a memória, ezért nem sikerült végrehajtani a műveletet az adatbázison"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"A rendszer nem küldte el az üzenetet"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"A Messaging egyes üzeneteit nem lehetett elküldeni"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> üzenet <xliff:g id="CONVERSATIONS">%d</xliff:g> beszélgetésben</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> üzenet egy beszélgetésben</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Az üzenet nincs letöltve"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"A Messaging egyes üzeneteit nem lehetett letölteni"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> üzenet <xliff:g id="CONVERSATIONS">%d</xliff:g> beszélgetésben</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> üzenet egy beszélgetésben</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Nem sikerült elküldeni az üzenetet a(z) <xliff:g id="NUMBER">%1$s</xliff:g> számra"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Kérjük, tárcsázza a segélyhívót. A szöveges üzenetet jelenleg nem tudjuk elküldeni erre a számra: <xliff:g id="NUMBER">%1$s</xliff:g>."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> új üzenet</item>
-      <item quantity="one">Új üzenet</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Indítás"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"A kamera nem érhető el"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"A kamera nem érhető el"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"A videorögzítés nem érhető el"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Nem lehetett menteni a médiát"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Nem lehet képet készíteni"</string>
-    <string name="back" msgid="1477626055115561645">"Vissza"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archiválva"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Törlés"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archiválás"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Archiválás visszavonása"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Értesítések kikapcsolása"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Értesítések bekapcsolása"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Névjegy hozzáadása"</string>
-    <string name="action_download" msgid="7786338136368564146">"Letöltés"</string>
-    <string name="action_send" msgid="377635240181672039">"Küldés"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Törlés"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Törli ezt az üzenetet?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Ez a művelet nem vonható vissza."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Törlés"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Törli ezeket a beszélgetéseket?</item>
-      <item quantity="one">Törli ezt a beszélgetést?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Törlés"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Mégse"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Címzett"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Több kép kiválasztása"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Kiválasztás megerősítése"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Nem sikerült rögzíteni a hangot. Próbálja újra."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"A hanganyag nem játszható le. Próbálja újra."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Nem sikerült elmenteni a hangot. Próbálja újra."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Érintés és tartás"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Kép"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Hangfelvétel"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Videó"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Névjegykártya"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Letöltés"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Válasz SMS-ben"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Válasz MMS-ben"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Válasz"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> résztvevő</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> résztvevő</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Én"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Ismerős letiltva és archiválva"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Névjegy tiltása és archiválása visszavonva"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> archiválva"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> archiválása megszüntetve"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Értesítések kikapcsolva"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Értesítések bekapcsolva"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Minden készen áll. Érintse meg újra a Küldés lehetőséget."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"A Messaging sikeresen beállítva alapértelmezett SMS-alkalmazásként."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Mellékletek elvetése</item>
-      <item quantity="one">Melléklet elvetése</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Hangmelléklet"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Hangmelléklet lejátszása"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Szünet"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> üzenete: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Sikertelen üzenet <xliff:g id="SENDER">%1$s</xliff:g> feladótól: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Üzenet <xliff:g id="SENDER">%1$s</xliff:g> feladótól: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Elküldetlen üzenet a(z) <xliff:g id="CONTACT">%1$s</xliff:g> csoportnak: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Üzenet küldése a(z) <xliff:g id="CONTACT">%1$s</xliff:g> csoportnak: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Sikertelen üzenet a(z) <xliff:g id="CONTACT">%1$s</xliff:g> csoportnak: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Üzenet a(z) <xliff:g id="CONTACT">%1$s</xliff:g> csoportnak: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Sikertelen üzenet <xliff:g id="SENDER">%1$s</xliff:g> feladótól: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Üzenet <xliff:g id="SENDER">%1$s</xliff:g> feladótól: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Elküldetlen üzenet a(z) <xliff:g id="GROUP">%1$s</xliff:g> csoportnak: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Üzenet küldése a(z) <xliff:g id="GROUP">%1$s</xliff:g> csoportnak: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Sikertelen üzenet a(z) <xliff:g id="GROUP">%1$s</xliff:g> csoportnak: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Üzenet a(z) <xliff:g id="GROUP">%1$s</xliff:g> csoportnak: <xliff:g id="MESSAGE">%2$s</xliff:g>. Idő: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Sikertelen üzenet. Érintse meg az újrapróbáláshoz."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Beszélgetés a következőkkel: <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Tárgy törlése"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Videó rögzítése"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Állókép rögzítése"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Kép készítése"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Videofelvétel megkezdése"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Váltás teljes képernyős kameranézetre"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Váltás az elülső és a hátulsó kamera között"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Rögzítés leállítása és a videó csatolása"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Videofelvétel leállítása"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Messaging-fotók"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotó mentve a következő albumba: <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> fotó mentve a következő albumba: <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videó mentve a következő albumba: <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> videó mentve a következő albumba: <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> melléklet mentve a következő albumba: <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> melléklet mentve a következő albumba: <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> melléklet mentve a „Letöltések” közé</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> melléklet mentve a „Letöltések” közé</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> melléklet sikeresen mentve</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> melléklet sikeresen mentve</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> melléklet mentése nem sikerült</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> melléklet mentése nem sikerült</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Mentett MMS-melléklet"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Beállítások"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archiválva"</string>
-    <string name="action_close" msgid="1840519376200478419">"Bezárás"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Speciális"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Hibakeresés"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Értesítések"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Hang"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Néma"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Rezgés"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Letiltva"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS-kézbesítési jelentések"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Kézbesítési jelentés kérése minden elküldött SMS-ről"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automatikus letöltés"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS-üzenetek automatikus letöltése"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Auto. letöltés barangoláskor"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"MMS-ek automatikus lekérése adatbarangoláskor"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Csoportos üzenetküldés"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Küldjön MMS-t, amikor több címzettnek szeretne üzenetet küldeni."</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Alapértelmezett SMS-alkalmazás"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Alapértelmezett SMS-alkalmazás"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Az Ön telefonszáma"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Ismeretlen"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Kimenő üzenetek hangja"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS kiírása"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Beérkező nyers SMS-adatok kiírása külső tárolófájlba"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS kiírása"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Beérkező nyers MMS-adatok kiírása külső tárolófájlba"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Vezeték nélküli értesítések"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Üzenetbeállítások"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Szöveg másolása"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Részletek megjelenítése"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Törlés"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Továbbítás"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Üzenet részletei"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Típus: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Szöveges üzenet"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimédiás üzenet"</string>
-    <string name="from_label" msgid="1947831848146564875">"Küldő: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Címzett: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Elküldve: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Érkezett: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Tárgy: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Méret: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioritás: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Magas"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normál"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Alacsony"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"<xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>. SIM"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"A küldő címe elrejtve"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"A mellékletek betöltése közben nem lehet elküldeni az üzenetet."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Nem lehetett betölteni a mellékletet. Próbálja újra."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"A hálózat nem áll készen. Próbálja újra."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Szöveg törlése"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Váltás szöveg és számok bevitele között"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"További résztvevők hozzáadása"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Résztvevők megerősítése"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Új beszélgetés indítása"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Elem kiválasztása"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Videó lejátszása"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Személyek és beállítások"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Hibakeresés"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Személyek és beállítások"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Általános"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"A jelen beszélgetésben részt vevő személyek"</string>
-    <string name="action_call" msgid="6596167921517350362">"Hívásindítás"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Üzenet küldése"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Üzenet küldése&lt;br/&gt;&lt;small&gt;a következő SIM kártyáról: <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Fotók küldése</item>
-      <item quantity="one">Fotó küldése</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Hangok küldése</item>
-      <item quantity="one">Hang küldése</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Videók küldése</item>
-      <item quantity="one">Videó küldése</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Névjegykártyák küldése</item>
-      <item quantity="one">Névjegykártya küldése</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Mellékletek küldése</item>
-      <item quantity="one">Melléklet küldése</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> melléklet készen áll a küldésre</item>
-      <item quantity="one">Egy melléklet készen áll a küldésre</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Visszajelzés küldése"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Megtekintés a Google Play Áruházban"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Verzióadatok"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Verzió: %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Nyílt forráskódú licencek"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Értesítések"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Elérte a mellékletekre vonatkozó korlátot"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Nem sikerült betölteni a mellékletet."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Hozzáadja a Névjegyekhez?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Névjegy hozzáadása"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Tárgy"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Tárgy: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Névjegykártya betöltése"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Nem lehetett betölteni a névjegykártyát"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Névjegykártya megtekintése"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> névjegy</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> névjegy</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Névjegykártyák"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Születésnap"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Jegyzetek"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Üzenet továbbítása"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Válasz"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS-ek letiltva"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"A küldéshez állítsa be, hogy a Messaging legyen az alapértelmezett SMS-alkalmazás"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"A Messaging beállítása alapértelmezett SMS-alkalmazásként"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Módosítás"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Üzenetek fogadásához állítsa be, hogy a Messaging legyen az alapértelmezett SMS-alkalmazás"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Nincs SIM kiválasztva az SMS-küldéshez"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Az eszköz tulajdonosa nem engedélyezi ezt az alkalmazást."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Túl sok a résztvevő a beszélgetésben"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Érvénytelen névjegy</item>
-      <item quantity="one">Érvénytelen névjegy</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Nem lehetett betölteni a kamera képét"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Ön: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Piszkozat"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Amikor új beszélgetésbe kezd, az itt jelenik meg"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Itt jelennek meg az archivált beszélgetések"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Beszélgetések betöltése…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Kép"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Hangfelvétel"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Videó"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Névjegykártya"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Visszavonás"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Újra"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Új üzenet létrehozásához adjon meg egy névjegyet vagy telefonszámot"</string>
-    <string name="action_block" msgid="9032076625645190136">"Tiltás"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> letiltása"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> feloldása"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Letiltja ezt: <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Továbbra is kap üzeneteket erről a számról, ám a rendszer nem küld róluk értesítést. A beszélgetést a rendszer archiválja."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Letiltott ismerősök"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"FELOLD"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Letiltott ismerősök"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Kép választása a dokumentumtárból"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Üzenet küldése"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Üzenet elküldve"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"A mobiladat-kapcsolat ki van kapcsolva. Ellenőrizze beállításait."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Repülős módban nem lehet üzeneteket küldeni"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Az üzenetet nem sikerült elküldeni"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Üzenet letöltve"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"A mobiladat-kapcsolat ki van kapcsolva. Ellenőrizze beállításait."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Repülős üzemmódban nem lehet üzenetet letölteni"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Az üzenetet nem sikerült letölteni"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nulla"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Egy"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Kettő"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Három"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Négy"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Öt"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Hat"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Hét"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Nyolc"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Kilenc"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Nem lehet elküldeni az üzenetet a következő szolgáltatónál: <xliff:g id="CARRIERNAME">%1$s</xliff:g> (hibakód: <xliff:g id="ERRORCODE">%2$d</xliff:g>)"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Nem lehet elküldeni az üzenetet egy ismeretlen szolgáltatónál (hibakód: <xliff:g id="ERRORCODE">%1$d</xliff:g>)"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Továbbítás: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Az üzenet nincs elküldve: a szolgáltatás nincs aktiválva a hálózaton"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Az üzenet küldése sikertelen: a címzett címe érvénytelen"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Az üzenet küldése sikertelen: érvénytelen üzenet"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Az üzenet küldése sikertelen: nem támogatott tartalom"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Az üzenet küldése sikertelen: nem támogatott üzenet"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Az üzenet nincs elküldve: túl nagy"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Új üzenet"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Megtekintés"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Kép"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Nem található megfelelő alkalmazás"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Címzett eltávolítása"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Új üzenet"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Mégse"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Hozzáférési pont szerkesztése"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nincs megadva"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Név"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS-proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS-port"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN típusa"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN törlése"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Új APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Mentés"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Elvetés"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"A Név mező nem lehet üres."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Az APN nem lehet üres."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Az MCC mezőnek három számjegyet kell tartalmaznia."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Az MNC mezőbe 2 vagy 3 számjegyet kell írni."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Alapértelmezett APN-beállítások visszaállítása."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Visszaállítás alaphelyzetbe"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Az alapértelmezett APN-beállítások visszaállítása befejeződött."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Névtelen"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Hozzáférési pontok nevei"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-ek"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Új APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"A hozzáférési pont nevének beállításai nem érhetők el ennél a felhasználónál"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Átmásolja a vágólapra?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Másolás"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"fogadás a következőn: <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Általános"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Speciális"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Általános beállítások"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Speciális beállítások"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"„<xliff:g id="SIM_NAME">%s</xliff:g>” SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Külön SMS küldése valamennyi címzettnek. Csak Ön kap választ"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Egyetlen MMS küldése valamennyi címzettnek"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Ismeretlen szám"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Új üzenet"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Új üzenet"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM kártya kiválasztása"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"A(z) <xliff:g id="SIM_0">%1$s</xliff:g> SIM kártya kiválasztva (SIM-választó)"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Tárgy szerkesztése"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM kártya kiválasztása vagy a tárgy szerkesztése"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Hangfelvétel készítéséhez tartsa nyomva"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Új beszélgetés indítása"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Messaging"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Messaging-lista"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Messaging"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Új üzenet"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Beszélgetéslista"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Beszélgetések betöltése"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Üzenetek betöltése"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"További beszélgetések megtekintése"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"További üzenetek megtekintése"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Beszélgetés törölve"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Beszélgetés törölve. Másik Messaging-beszélgetés megjelenítéséhez érintse meg."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Letiltva"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Letiltás visszavonva"</string>
-    <string name="db_full" msgid="8459265782521418031">"Kevés a tárhely. Lehet, hogy bizonyos adatok elvesztek."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Mellékletek kiválasztása"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Kiválasztás megerősítése"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> kiválasztva"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Távolítson el legalább egy mellékletet, majd próbálja újra."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Megpróbálhatja elküldeni az üzenetet, de előfordulhat, hogy az csak akkor lesz kézbesíthető, ha legalább egy mellékletet eltávolít."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Üzenetenként csak egy videót lehet küldeni. Távolítsa el a többi videót, és próbálja újra."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"A Messaging nem tudta betölteni a mellékletet."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Küldés mindenképpen"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Nem sikerült elindítani a beszélgetést"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> kiválasztva"</string>
-</resources>
diff --git a/res/values-hy/arrays.xml b/res/values-hy/arrays.xml
deleted file mode 100644
index d520d07..0000000
--- a/res/values-hy/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"անվերնագիր"</item>
-    <item msgid="272485471009191934">"անվերնագիր"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Այո"</item>
-    <item msgid="6049132459802288033">"Ոչ"</item>
-    <item msgid="3084376867445867895">"Լավ"</item>
-    <item msgid="3155097332660174689">"Հե-հե"</item>
-    <item msgid="2611328818571146775">"Շնորհակալություն"</item>
-    <item msgid="4881335087096496747">"Համաձայն եմ"</item>
-    <item msgid="2422296858597420738">"Գերազանց է"</item>
-    <item msgid="4805581752819452687">"Ճանապարհին եմ"</item>
-    <item msgid="4746700499431366214">"Լավ, կմիանամ ձեզ ավելի ուշ"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
deleted file mode 100644
index 4dd99b0..0000000
--- a/res/values-hy/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Հաղորդակցում"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Հաղորդակցում"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Ընտրեք խոսակցությունը"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Կարգավորումներ"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Ուղարկել հաղորդագրություն"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Ավելացնել կցորդ"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Օգնություն"</string>
-    <string name="welcome" msgid="2857560951820802321">"Բարի գալուստ"</string>
-    <string name="skip" msgid="7238879696319945853">"Բաց թողնել"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Հաջորդը &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Հաջորդը"</string>
-    <string name="exit" msgid="1905187380359981199">"Ելք"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Կարգավորումներ &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Կարգավորումներ"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Հաղորդակցում հավելվածին հարկավոր է թույլտվություն SMS-ներին, հեռախոսին ու կոնտակտներին:"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Կարող եք փոխել թույլտվությունները՝ անցնելով Կարգավորումներ &gt; Հավելվածներ &gt; Հաղորդակցում &gt; Թույլտվություններ:"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Կարող եք փոխել թույլտվությունները՝ անցնելով Կարգավորումներ, Հավելվածներ, Հաղորդակցում, Թույլտվություններ:"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Հաճախակի օգտագործվող կոնտակտներ"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Բոլոր կոնտակտները"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Ուղարկել <xliff:g id="DESTINATION">%s</xliff:g> համարին"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Լուսանկարել կամ տեսագրել"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Ընտրեք պատկերներ այս սարքից"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Ձայնագրել ձայնանյութ"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Ընտրել լուսանկար"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Մեդիա ֆայլն ընտրված է:"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Մեդիա ֆայլն ապընտրված է:"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> ընտրված"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"պատկեր <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"պատկեր"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Ձայնագրել ձայնանյութ"</string>
-    <string name="action_share" msgid="2143483844803153871">"Տարածել"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Հենց հիմա"</string>
-    <string name="posted_now" msgid="867560789350406701">"Այժմ"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> րոպե</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> րոպե</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ժամ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ժամ</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> օր</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> օր</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> շաբաթ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> շաբաթ</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ամիս</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ամիս</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> տարի</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> տարի</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Class 0 հաղորդագրություն"</string>
-    <string name="save" msgid="5081141452059463572">"Պահել"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Սարքի վրա բավարար ազատ տարածք չկա: Հաղորդակցում հավելվածը ինքնաշխատորեն կջնջի հին հաղորդագրությունները, որպեսզի տեղ ազատի:"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Պահոցային տարածքը սպառվում է"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Հաղորդակցումը չի կարող ուղարկել կամ ստանալ հաղորդագրություններ, քանի դեռ սարքում բավարար տարածք չկա:"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS պահոցի ծավալը փոքր է: Հնարավոր է՝ հաղորդագրություններ ջնջելու կարիք լինի:"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Հաստատեք ձեր հեռախոսահամարը"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Սա մեկանգամյա քայլ է, որի շնորհիվ Հաղորդակցումը անսխալ կուղարկի ձեր խմբային հաղորդագրությունները:"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Հեռախոսահամար"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Ջնջել մեդիաֆայլեր պարունակող բոլոր հաղորդագրությունները"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Ջնջել <xliff:g id="DURATION">%s</xliff:g>-ից հին հաղորդագրությունները"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Ավտոմատ ջնջել <xliff:g id="DURATION">%s</xliff:g>-ից հին հաղորդագրությունները"</string>
-    <string name="ignore" msgid="7063392681130898793">"Անտեսել"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Ջնջե՞լ մեդիա պարունակող բոլոր հաղորդագրությունները:"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Ջնջե՞լ <xliff:g id="DURATION">%s</xliff:g>-ից հին հաղորդագրությունները:"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Ջնջե՞լ <xliff:g id="DURATION">%s</xliff:g>-ից հին հաղորդագրությունները և միացնել ավտոմատ հեռացումը:"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g>-ը ասել է"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Դուք ասել եք"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Հաղորդագրություն <xliff:g id="SENDER">%s</xliff:g>-ից"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Դուք հաղորդագրություն եք ուղարկել"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Ուղարկվում է…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Չի ուղարկվել: Հպեք՝ կրկին փորձելու համար:"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Չի ուղարկվել: Փորձում է կրկին…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Կրկին ուղարկել թե ջնջել"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Խնդրում ենք հեռախոսազանգ կատարել արտակարգ իրավիճակների ծառայություններին: Ձեր տեքստային հաղորդագրությունն այս պահին չի կարող առաքվել:"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Ձախողվեց"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Նոր MMS հաղորդագրություն՝ ներբեռնելու հաար"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Նոր MMS հաղորդագրություն"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Չհաջողվեց ներբեռնել"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Հպեք՝ նորից փորձելու համար"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Հպեք՝ ներբեռնելու համար"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Ներբեռնել թե ջնջել"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Ներբեռնում…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Հաղորդագրության ժամկետը սպառվել է կամ հասանելի չէ"</string>
-    <string name="mms_info" msgid="3402311750134118165">"չափը՝ <xliff:g id="MESSAGESIZE">%1$s</xliff:g> , պիտանիությունը՝ <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Հնարավոր չէ ուղարկել: Ստացողը վավեր չէ:"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Ծառայությունն ակտիվացված չէ ցանցում"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Հնարավոր չէ ուղարկել ցանցային խնդրի պատճառով"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Հաղորդագրության ժամկետը սպառվել է կամ հասանելի չէ"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Անվերնագիր)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Անհայտ ուղարկող"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Առաքված է"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Հնարավոր չէ ներբեռնել <xliff:g id="SUBJECT">%1$s</xliff:g> հաղորդագրությունը <xliff:g id="FROM">%2$s</xliff:g>-ից:"</string>
-    <string name="low_memory" msgid="5300743415198486619">"Չստացվեց ավարտել տվյալների շտեմարանի աշխատանքը՝ փոքր հիշողության պատճառով"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Հաղորդագրությունը չի ուղարկվել"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Հաղորդակցման որոշ հաղորդագրություններ չեն ուղարկվել"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> հաղորդագրություն <xliff:g id="CONVERSATIONS">%d</xliff:g> խոսակցությունում</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> հաղորդագրություն <xliff:g id="CONVERSATIONS">%d</xliff:g> խոսակցությունում</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Հաղորդագրությունը չի ներբեռնվել"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Որոշ հաղորդագրություններ չեն ներբեռնվել Հաղորդակցման մեջ"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> հաղորդագրություն <xliff:g id="CONVERSATIONS">%d</xliff:g> խոսակցությունում</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> հաղորդագրություն <xliff:g id="CONVERSATIONS">%d</xliff:g> խոսակցությունում</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Հաղորդագրությունը <xliff:g id="NUMBER">%1$s</xliff:g> համարին չի ուղարկվել"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Խնդրում ենք հեռախոսազանգ կատարել արտակարգ իրավիճակների ծառայություններին: Ձեր տեքստային հաղորդագրությունն այս պահին չի կարող առաքվել <xliff:g id="NUMBER">%1$s</xliff:g> համարին:"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> նոր հաղորդագրություն</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> նոր հաղորդագրություն</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Սկսել"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Խցիկն անհասանելի է"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Խցիկն անհասանելի է"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Տեսանյութը հասանելի չէ"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Հնարավոր չէ պահել մեդիա ֆայլը"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Չհաջողվեց լուսանկարել"</string>
-    <string name="back" msgid="1477626055115561645">"Հետ"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Արխիվացված"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Ջնջել"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Արխիվ"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Ապարխիվացնել"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Անջատել ծանուցումները"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Միացնել ծանուցումները"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Ավելացնել կոնտակտ"</string>
-    <string name="action_download" msgid="7786338136368564146">"Ներբեռնել"</string>
-    <string name="action_send" msgid="377635240181672039">"Ուղարկել"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Ջնջել"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Ջնջե՞լ այս հաղորդագրությունը"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Այս գործողությունը չի կարող հետարկվել:"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Ջնջել"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Ջնջե՞լ այս խոսակցությունները:</item>
-      <item quantity="other">Ջնջե՞լ այս խոսակցությունները:</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Ջնջել"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Չեղարկել"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Ստացող`"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Ընտրել մի քանի պատկեր"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Հաստատել ընտրությունը"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Հնարավոր չէ ձայնագրել: Կրկին փորձեք:"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Հնարավոր չէ նվագարկել աուդիո ֆայլը: Կրկին փորձեք:"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Հնարավոր չէր պահել աուդիո ֆայլը: Կրկին փորձեք:"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Հպել և պահել"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Նկար"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Ձայնահոլովակ"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Տեսանյութ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Կոնտակտային քարտ"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Ներբեռնել"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Պատասխանել SMS-ով"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Պատասխանել MMS-ով"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Պատասխանել"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> մասնակից</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> մասնակից</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ես"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Կոնտակտն արգելափակված և արխիվացված է"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Կոնտակտն արգելաբացվեց և ապաարխիվացվեց"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Արխիվացվեց <xliff:g id="COUNT">%d</xliff:g> խոսակցություն"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Ապաարխիվացվեց <xliff:g id="COUNT">%d</xliff:g> խոսակցություն"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Ծանուցումներն անջատվեցին"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Ծանուցումները միացվեցին"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Սահմանված է: Հպեք Ուղարկել կրկին:"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Հաղորդակցումը դարձավ SMS-ների կանխադրված հավելված:"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Հեռացնել կցորդները</item>
-      <item quantity="other">Հեռացնել կցորդները</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Կցված ձայնային ֆայլ"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Նվագարկել աուդիո կցորդը"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Դադարեցնել"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Հաղորդագրություն <xliff:g id="SENDER">%1$s</xliff:g>-ից՝ <xliff:g id="MESSAGE">%2$s</xliff:g>:"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Չառաքված հաղորդագրություն <xliff:g id="SENDER">%1$s</xliff:g>-ից՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>:"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Հաղորդագրություն <xliff:g id="SENDER">%1$s</xliff:g>-ից՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>:"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> կոնտակտին չուղարկված հաղորդագրություն՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>:"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Հաղորդագրության ուղարկում <xliff:g id="CONTACT">%1$s</xliff:g> կոնտակտին՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>:"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> կոնտակտին չառաքված հաղորդագրություն՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>:"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> կոնտակտին հասցեագրված հաղորդագրություն՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>:"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Չառաքված հաղորդագրություն <xliff:g id="SENDER">%1$s</xliff:g>-ից՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>: <xliff:g id="GROUPINFO">%4$s</xliff:g>:"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Հաղորդագրություն <xliff:g id="SENDER">%1$s</xliff:g>-ից՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>: <xliff:g id="GROUPINFO">%4$s</xliff:g>:"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> խմբին չուղարկված հաղորդագրություն՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>:"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Հաղորդագրության ուղարկում <xliff:g id="GROUP">%1$s</xliff:g> խմբին՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>:"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> խմբին չառաքված հաղորդագրություն՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>:"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> խմբին հասցեագրված հաղորդագրություն՝ <xliff:g id="MESSAGE">%2$s</xliff:g>: Ժամանակ՝ <xliff:g id="TIME">%3$s</xliff:g>:"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Հաղորդագրությունը չի առաքվել: Հպեք՝ նորից փորձելու համար:"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Զրույց <xliff:g id="PARTICIPANTS">%s</xliff:g>-ի հետ"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Ջնջել վերնագիրը"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Տեսագրել"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Նկարահանել ստատիկ պատկեր"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Լուսանկարել"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Սկսել տեսաձայնագրումը"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Անցնել լիաէկրան ֆոտոխցիկի"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Փոխարկել դիմացի և հետևի տեսախցիկները"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Կանգնեցնել ձայնագրումը և կցել տեսանյութը"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Դադարեցնել տեսանկարահանումը"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Հաղորդակցման լուսանկարներ"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one">«<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ալբոմում պահվել է <xliff:g id="QUANTITY_2">%d</xliff:g> լուսանկար</item>
-      <item quantity="other">«<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ալբոմում պահվել է <xliff:g id="QUANTITY_2">%d</xliff:g> լուսանկար</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one">«<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ալբոմում պահվել է <xliff:g id="QUANTITY_2">%d</xliff:g> տեսանյութ</item>
-      <item quantity="other">«<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ալբոմում պահվել է <xliff:g id="QUANTITY_2">%d</xliff:g> տեսանյութ</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one">«<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ալբոմում պահվել է <xliff:g id="QUANTITY_2">%d</xliff:g> կցորդ</item>
-      <item quantity="other">«<xliff:g id="ALBUMNAME_3">%s</xliff:g>» ալբոմում պահվել է <xliff:g id="QUANTITY_2">%d</xliff:g> կցորդ</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one">«Ներբեռնումներ» պանակում պահվել է <xliff:g id="QUANTITY_1">%d</xliff:g> կցորդ</item>
-      <item quantity="other">«Ներբեռնումներ» պանակում պահվել է <xliff:g id="QUANTITY_1">%d</xliff:g> կցորդ</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> կցորդ պահվեց</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> կցորդ պահվեց</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Չհաջողվեց պահել <xliff:g id="QUANTITY_1">%d</xliff:g> կցորդ</item>
-      <item quantity="other">Չհաջողվեց պահել <xliff:g id="QUANTITY_1">%d</xliff:g> կցորդ</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS կցորդը պահվեց"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Կարգավորումներ"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Արխիվացված"</string>
-    <string name="action_close" msgid="1840519376200478419">"Փակել"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Հավելյալ"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Կարգաբերում"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Ծանուցումներ"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Ձայն"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Լուռ"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Թրթռոց"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Արգելափակված է"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS-ի առաքման հաշվետվություններ"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Առաքման ծանուցում հայցել յուրաքանչյուր ուղարկվող հաղորդագրության համար"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Ինքնաառբերում"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Ավտոմատ առբերել MMS հաղորդագրությունները"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Ավտոմատ առբերում ռոումինգում"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Ինքնաշխատորեն առբերել MMS-ը ռոումինգում"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Խմբային հաղորդագրություններ"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Օգտագործել MMS՝ մեկ հաղորդագրությունը մի քանի ստացողների ուղարկելու համար"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"SMS-ների կանխադրված հավելված"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"SMS-ների կանխադրված հավելված"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Ձեր հեռախոսահամարը"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Անհայտ է"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Ելից հաղորդագրությունների ձայներ"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Տեղափոխել SMS հաղորդագրությունները"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Տեղափոխել ստացված SMS հաղորդագրությունների չմշակված տվյալները արտաքին հիշողության մեջ"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Տեղափոխել MMS հաղորդագրությունները"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Տեղափոխել ստացված MMS հաղորդագրությունների չմշակված տվյալները արտաքին հիշողության մեջ"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Ծանուցումներ անլար կապի միջոցով"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Հաղորդագրության ընտրանքներ"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Պատճենել տեքստը"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Տեսնել մանրամասները"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Ջնջել"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Առաջ"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Հաղորդագրության մանրամասները"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Տեսակ՝ "</string>
-    <string name="text_message" msgid="7415419755252205721">"Տեքստային հաղորդագրություն"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Մուլտիմեդիա հաղորդագրություն"</string>
-    <string name="from_label" msgid="1947831848146564875">"Ումից` "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Ում` "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Ուղարկվել է՝ "</string>
-    <string name="received_label" msgid="4442494712757995203">"Ստացվել է՝ "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Վերնագիր՝ "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Չափ՝ "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Առաջնահերթություն՝ "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM՝ "</string>
-    <string name="priority_high" msgid="728836357310908368">"Բարձր"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Սովորական"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Ցածր"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Թաքնված ուղարկողի հասցեն"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Կցորդները բեռնելիս հնարավոր չէ ուղարկել հաղորդագրությունը:"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Հնարավոր չէ բեռնել կցորդը: Փորձեք կրկին:"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Ցանցը պատրաստ չէ: Նորից փորձեք:"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Ջնջել տեքստը"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Փոխարկել թվեր և տեքստ մուտքագրելու ռեժիմների միջև"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Ավելացնել այլ մասնակիցների"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Հաստատեք մասնակիցներին"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Սկսել նոր խոսակցություն"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Ընտրել այս նյութը"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Նվագարկել տեսանյութը"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Մարդիկ և ընտրանքներ"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Կարգաբերել"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Մարդիկ և ընտրանքներ"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Ընդհանուր"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Այս խոսակցության մասնակիցները"</string>
-    <string name="action_call" msgid="6596167921517350362">"Զանգահարել"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Ուղարկել հաղորդագրություն"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Ուղարկել հաղորդագրություն&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g>-ից&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Ուղարկել լուսանկարները</item>
-      <item quantity="other">Ուղարկել լուսանկարները</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Ուղարկել ձայնագրությունները</item>
-      <item quantity="other">Ուղարկել ձայնագրությունները</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Ուղարկել տեսանյութերը</item>
-      <item quantity="other">Ուղարկել տեսանյութերը</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Ուղարկել կոնտակտի քարտերը</item>
-      <item quantity="other">Ուղարկել կոնտակտի քարտերը</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Ուղարկել կցորդները</item>
-      <item quantity="other">Ուղարկել կցորդները</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> կցորդ պատրաստ է ուղարկելու համար</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> կցորդ պատրաստ է ուղարկելու համար</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Ուղարկել կարծիք"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Դիտել Google Play Store-ում"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Տեղեկություններ տարբերակի մասին"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Տարբերակ %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Բաց աղբյուրով ծրագրերի լիցենզիաներ"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Ծանուցումներ"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Կցորդի սահմանաչափը լրացել է"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Չհաջողվեց բեռնել կցորդը:"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Ավելացնե՞լ կոնտակտներում"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Ավելացնել կոնտակտ"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Թեմա"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Թեմա՝ "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Կոնտակտի քարտը բեռնվում է"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Հնարավոր չէ բեռնել կոնտակտի քարտը"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Դիտել կոնտակտի քարտը"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> կոնտակտ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> կոնտակտ</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Կոնտակտների քարտեր"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Ծննդյան օր"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Գրառումներ"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Փոխանցել հաղորդագրությունը"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Պատասխանել"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS-ն անջատված է"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Հաղորդագրություններ ուղարկելու համար դարձրեք Հաղորդակցումը SMS-ների կանխադրված հավելված"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Դարձրեք Հաղորդակցումը SMS-ների կանխադրված հավելված"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Փոխել"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Հաղորդագրություններ ստանալու համար դարձրեք Հաղորդակցումը SMS-ների կանխադրված հավելված"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Դուք չեք նշել նախընտրելի SIM քարտը՝ SMS հաղորդագրություններն ուղարկելու համար"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Այս հավելվածը սարքի սեփականատիրոջ կողմից թույլատրված չէ:"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Լավ"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Չափից շատ մասնակիցներ կան զրույցին"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Անվավեր կոնտակտներ</item>
-      <item quantity="other">Անվավեր կոնտակտներ</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Չհաջողվեց բեռնել տեսախցիկի պատկերը"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Դուք՝ "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>՝ "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Սևագիր"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Հենց նոր զրույց սկսեք, այն կտեսնեք այս ցուցակում"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Արխիվացված խոսակցությունները հայտնվում են այստեղ"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Խոսակցությունները բեռնվում են…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Նկար"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Ձայնահոլովակ"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Տեսանյութ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Կոնտակտային քարտ"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Հետարկել"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Կրկնել"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Մուտքագրեք կոնտակտի անունը կամ հեռախոսահամարը՝ նոր հաղորդագրություն սկսելու համար"</string>
-    <string name="action_block" msgid="9032076625645190136">"Արգելափակել"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Արգելափակել <xliff:g id="DESTINATION">%s</xliff:g>-ին"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Արգելաբացել <xliff:g id="DESTINATION">%s</xliff:g>-ին"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Արգելափակե՞լ <xliff:g id="DESTINATION">%s</xliff:g>-ը:"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Դուք կշարունակեք ստանալ հաղորդագրություններ այս հեռախոսահամարից, բայց չեք ծանուցվի դրանց մասին: Այս խոսակցությունը կարխիվացվի:"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Արգելափակված կոնտակտներ"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ԱՐԳԵԼԱԲԱՑԵԼ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Արգելափակված կոնտակտներ"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Ընտրեք պատկեր՝ փաստաթղթերի գրադարանից"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Հաղորդագրությունն ուղարկվում է"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Հաղորդագրությունն ուղարկվել է"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Բջջային տվյալների կապն անջատված է: Ստուգեք ձեր կարգավորումները:"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Հնարավոր չէ ուղարկել հաղորդագրություններ Թռիչքի ռեժիմում"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Հաղորդագրությունը չհաջողվեց ուղարկել"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Հաղորդագրությունը բեռնվել է"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Բջջային տվյալների կապն անջատված է: Ստուգեք ձեր կարգավորումները:"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Հնարավոր չէ ներբեռնել հաղորդագրությունները Ինքնաթիռի ռեժիմում"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Հաղորդագրությունը չներբեռնվեց"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Զրո"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Մեկ"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Երկու"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Երեք"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Չորս"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Հինգ"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Վեց"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Յոթ"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Ութ"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Ինը"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Հնարավոր չէ ուղարկել հաղորդագրությունը <xliff:g id="CARRIERNAME">%1$s</xliff:g>-ի միջոցով: Սխալի կոդ՝ <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Հնարավոր չէ ուղարկել հաղորդագրությունը անհայտ օպերատորի միջոցով: Սխալի կոդ՝ <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Փխնց՝ <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Հաղորդագրությունը չի ուղարկվել. Ծառայությունն ակտիվացված չէ ցանցում"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Հաղորդագրությունը չի ուղարկվել. ստացողի հասցեն սխալ է"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Հաղորդագրությունը չի ուղարկվել. անվավեր հաղորդագրություն"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Հաղորդագրությունը չի ուղարկվել. չաջակցվող բովանդակություն"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Հաղորդագրությունը չի ուղարկվել. չաջակցվող հաղորդագրություն"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Հաղորդագրությունը չուղարկվեց: Այն չափազանց մեծ է"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Նոր հաղորդագրություն"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Դիտել"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Պատկեր"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Հնարավոր չէր գտնել համապատասխան հավելված"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Հեռացնել ստացողին"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Նոր հաղորդագրություն"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Չեղարկել"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Խմբագրել մուտքի կետը"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Կարգավորված չէ"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Անուն"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS պրոքսի"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS միացք"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN-ի տեսակը"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Ջնջել APN-ը"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Նոր APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Պահել"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Հրաժարվել"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Անվանման դաշտը պետք է լրացված լինի:"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN-ը չի կարող դատարկ լինել:"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC դաշտը պետք է 3 նիշ ունենա:"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC դաշտը պետք է լինի առնվազն 2 կամ 3 թվանշան:"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Լռելյայն APN կարգավորումների վերականգնում:"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Վերականգնել կանխադրվածը"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Սկզբնական APN կարգավորումների վերակարգավորումն ավարտված է:"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Անվերնագիր"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Մատչման կետերի անունները"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-ներ"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Նոր APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Մատչման կետի անվան կարգավորումները հասանելի չեն այս օգտվողին"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Պատճենել սեղմատախտակին"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Պատճենել"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g>-ին"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Ընդհանուր"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Հավելյալ"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Ընդհանուր կարգավորումներ"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Ընդլայնված կարգավորումներ"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"«<xliff:g id="SIM_NAME">%s</xliff:g>» SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Ուղարկել անհատական ​​SMS հաղորդագրություններ բոլոր ստացողներին: Միայն դուք կստանաք պատասխաններ"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Բոլոր ստացողներին ուղարկել առանձին MMS"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Անհայտ համար"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Նոր հաղորդագրություն"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Նոր հաղորդագրություն:"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM քարտի ընտրում"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Ընտրված է <xliff:g id="SIM_0">%1$s</xliff:g>-ը, SIM քարտի ընտրում"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Խմբագրել վերնագիրը"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Ընտրել SIM քարտ կամ խմբագրել վերնագիրը"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Հպեք և պահեք՝ ձայնագրելու համար"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Սկսել նոր խոսակցություն"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Հաղորդակցում"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Հաղորդակցման ցանկ"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Հաղորդակցում"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Նոր հաղորդագրություն"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Խոսակցությունների ցանկ"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Խոսակցությունները բեռնվում են"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Հաղորդագրությունների բեռնում"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Տեսնել այլ զրույցներ"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Դիտել ավելի շատ հաղորդագրություններ"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Զրույցը ջնջված է"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Խոսակցությունը ջնջվել է: Հպեք՝ Հաղորդակցման մեջ այլ խոսակցություն դիտելու համար"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Արգելափակված է"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Ապաարգելափակված է"</string>
-    <string name="db_full" msgid="8459265782521418031">"Ազատ տարածքը բավարար չէ: Որոշ տվյալներ չեն պահվի:"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Ընտրել կցորդներ"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Հաստատել ընտրությունը"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ընտրված"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Հեռացրեք մեկ կամ ավելի կցորդ, ապա նորից փորձեք:"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Կարող եք փորձել ուղարկել հաղորդագրությունը, սակայն այն չի կարող առաքվել, եթե չհեռացնեք մեկ կամ ավելի կցորդ:"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Ամեն մի հաղորդագրության համար կարող եք միայն մեկ տեսանյութ ուղարկել: Հեռացրեք ավելորդ տեսանյութերը և նորից փորձեք:"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Կցորդը չբեռնվեց:"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Ուղարկել ամեն դեպքում"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Չհաջողվեց սկսել խոսակցությունը"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Ընտրված է <xliff:g id="SELECTED_SIM">%s</xliff:g> քարտը"</string>
-</resources>
diff --git a/res/values-in/arrays.xml b/res/values-in/arrays.xml
deleted file mode 100644
index ce2892e..0000000
--- a/res/values-in/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"tanpa subjek"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ya"</item>
-    <item msgid="6049132459802288033">"Tidak"</item>
-    <item msgid="3084376867445867895">"Oke"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Terima kasih"</item>
-    <item msgid="4881335087096496747">"Saya setuju"</item>
-    <item msgid="2422296858597420738">"Bagus"</item>
-    <item msgid="4805581752819452687">"Dalam perjalanan"</item>
-    <item msgid="4746700499431366214">"Oke, saya akan menghubungi Anda nanti"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
deleted file mode 100644
index 3b65bb2..0000000
--- a/res/values-in/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Perpesanan"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Perpesanan"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Pilih percakapan"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Setelan"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Kirim Pesan"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Tambahkan lampiran"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Bantuan"</string>
-    <string name="welcome" msgid="2857560951820802321">"Selamat Datang"</string>
-    <string name="skip" msgid="7238879696319945853">"Lewati"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Berikutnya &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Berikutnya"</string>
-    <string name="exit" msgid="1905187380359981199">"Keluar"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Setelan &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Setelan"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Perpesanan perlu izin ke SMS, Telepon, dan Kontak"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Anda dapat mengubah izin di Setelan &gt; Aplikasi &gt; Perpesanan &gt; Izin."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Anda dapat mengubah izin di Setelan, Aplikasi, Messaging, Permissions."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Sering"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Semua kontak"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Kirim ke <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Jepret gambar atau rekam video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Pilih gambar dari perangkat ini"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Rekam audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Pilih foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Media ini dipilih."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Media ini batal dipilih."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> dipilih"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"gambar <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"gambar"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Rekam audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Bagikan"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Baru saja"</string>
-    <string name="posted_now" msgid="867560789350406701">"Sekarang"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> mnt</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> mnt</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> jam</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> jam</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> hari</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hari</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> minggu</item>
-      <item quantity="one">seminggu</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> bulan</item>
-      <item quantity="one">sebulan</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tahun</item>
-      <item quantity="one">setahun</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Pesan kelas 0"</string>
-    <string name="save" msgid="5081141452059463572">"Simpan"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Perangkat hampir kehabisan ruang. Perpesanan akan secara otomatis menghapus pesan lama untuk mengosongkan ruang."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Ruang penyimpanan hampir habis"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Perpesanan tidak dapat mengirim atau menerima pesan hingga lebih banyak ruang tersedia di perangkat Anda."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Penyimpanan SMS tinggal sedikit. Anda perlu menghapus pesan."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Konfirmasi nomor telepon Anda"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Langkah satu kali ini akan memastikan bahwa Perpesanan mengirim pesan grup dengan tepat."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Nomor telepon"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Hapus semua pesan dengan media"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Hapus pesan yang sudah lebih dari <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Hapus otomatis pesan yang sudah lebih dari <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Abaikan"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Hapus semua pesan dengan media?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Hapus pesan yang sudah lebih dari <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Hapus pesan yang sudah lebih dari <xliff:g id="DURATION">%s</xliff:g> dan aktifkan fitur hapus otomatis?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> mengatakan"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Anda mengatakan"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Pesan dari <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Anda telah mengirim pesan"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Mengirim…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Tidak dikirim. Sentuh untuk mencoba lagi."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Tidak dikirim. Mencoba lagi..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Kirim ulang atau hapus"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Lakukan panggilan suara ke layanan darurat. SMS Anda tidak dapat dikirim saat ini."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Gagal"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Pesan MMS baru untuk diunduh"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Pesan MMS baru"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Tidak dapat mengunduh"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Sentuh untuk mencoba lagi"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Sentuh untuk mengunduh"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Unduh atau hapus"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Mengunduh..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Pesan sudah tidak berlaku atau tidak tersedia"</string>
-    <string name="mms_info" msgid="3402311750134118165">"ukuran: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, waktu berakhir: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Tidak dapat mengirim. Penerima tidak valid."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Layanan tidak diaktifkan pada jaringan"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Tidak dapat mengirim karena masalah jaringan"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Pesan sudah tidak berlaku atau tidak tersedia"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Tanpa subjek)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Pengirim tidak diketahui"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Telah Diantar"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Tidak dapat mengunduh pesan <xliff:g id="SUBJECT">%1$s</xliff:g> dari <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Tidak dapat menyelesaikan operasi basis data karena memori terlalu kecil"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Pesan tidak dikirim"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Beberapa pesan tidak terkirim di Perpesanan"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> pesan dalam <xliff:g id="CONVERSATIONS">%d</xliff:g> percakapan</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> pesan dalam satu percakapan</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Pesan tidak diunduh"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Beberapa pesan tidak diunduh di Perpesanan"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> pesan dalam <xliff:g id="CONVERSATIONS">%d</xliff:g> percakapan</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> pesan dalam satu percakapan</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Pesan ke <xliff:g id="NUMBER">%1$s</xliff:g> tidak terkirim"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Lakukan panggilan suara ke layanan darurat. SMS Anda ke <xliff:g id="NUMBER">%1$s</xliff:g> tidak dapat dikirim saat ini."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> pesan baru</item>
-      <item quantity="one">Pesan baru</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Mulai"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Tidak ada kamera"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Tidak ada kamera"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Tidak ada rekaman video"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Tidak dapat menyimpan media"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Tidak dapat memfoto"</string>
-    <string name="back" msgid="1477626055115561645">"Kembali"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Diarsipkan"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Hapus"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arsipkan"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Batalkan pengarsipan"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Nonaktifkan pemberitahuan"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Aktifkan pemberitahuan"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Tambahkan kontak"</string>
-    <string name="action_download" msgid="7786338136368564146">"Unduh"</string>
-    <string name="action_send" msgid="377635240181672039">"Kirim"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Hapus"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Hapus pesan ini?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Tindakan ini tidak dapat diurungkan."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Hapus"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Hapus percakapan ini?</item>
-      <item quantity="one">Hapus percakapan ini?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Hapus"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Batal"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Kepada"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Pilih beberapa gambar"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Konfirmasi pilihan"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Tidak dapat merekam audio. Coba lagi."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Tidak dapat memutar audio. Coba lagi."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Tidak dapat menyimpan audio. Coba lagi."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Sentuh &amp; tahan"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Gambar"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Klip audio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kartu kontak"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Unduh"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Balas via SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Balas via MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Balas"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> peserta</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> peserta</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Saya"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontak diblokir &amp; diarsipkan"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontak tidak diblokir lagi &amp; batal diarsipkan"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> diarsipkan"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> batal diarsipkan"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notifikasi dinonaktifkan"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notifikasi diaktifkan"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Semua siap. Sentuh Kirim lagi."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Perpesanan berhasil disetel sebagai aplikasi SMS default."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Buang lampiran</item>
-      <item quantity="one">Buang lampiran</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Lampiran audio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Putar lampiran audio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Jeda"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Pesan dari <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Pesan gagal dari <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Pesan dari <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Pesan yang tidak terkirim ke <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Mengirim pesan ke <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Pesan gagal ke <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Pesan ke <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Pesan gagal dari <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Pesan dari <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Pesan yang tidak terkirim ke <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Mengirim pesan ke <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Pesan gagal ke <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Pesan ke <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Waktu: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Pesan gagal. Sentuh untuk mencoba lagi."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Percakapan dengan <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Hapus subjek"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Ambil video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Ambil gambar diam"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Ambil gambar"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Mulai merekam video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Beralih ke kamera layar penuh"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Beralih antara kamera depan dan belakang"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Hentikan perekaman dan lampirkan video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Berhenti merekam video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Foto Perpesanan"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> foto disimpan ke album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> foto disimpan ke album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> video disimpan ke album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video disimpan ke album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> lampiran disimpan ke album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> lampiran disimpan ke album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> lampiran disimpan ke \"Unduhan\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> lampiran disimpan ke \"Unduhan\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> lampiran disimpan</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> lampiran disimpan</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Tidak dapat menyimpan <xliff:g id="QUANTITY_1">%d</xliff:g> lampiran</item>
-      <item quantity="one">Tidak dapat menyimpan <xliff:g id="QUANTITY_0">%d</xliff:g> lampiran</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Lampiran MMS yang disimpan"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Setelan"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Diarsipkan"</string>
-    <string name="action_close" msgid="1840519376200478419">"Tutup"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Lanjutan"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Debug"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notifikasi"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Suara"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Senyap"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Getar"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Diblokir"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Laporan pengiriman SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Minta laporan pengiriman dari setiap SMS yang Anda kirimkan"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Ambil otomatis"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Otomatis ambil pesan MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Ambil otomatis saat roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Otomatis ambil MMS saat roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Perpesanan grup"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Gunakan MMS untuk mengirimkan pesan tunggal saat ada beberapa penerima"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Aplikasi SMS default"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Aplikasi SMS default"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Nomor telepon Anda"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Tidak dikenal"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Pesan suara keluar"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Buang SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Buang data mentah SMS yang diterima ke dalam file penyimpanan eksternal"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Buang MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Buang data mentah MMS yang diterima ke file penyimpanan eksternal"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Lansiran nirkabel"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opsi pesan"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Salin teks"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Lihat detail"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Hapus"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Teruskan"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Detail pesan"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Jenis: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Pesan teks"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Pesan multimedia"</string>
-    <string name="from_label" msgid="1947831848146564875">"Dari: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Kepada: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Dikirim: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Diterima: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Subjek: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Ukuran: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioritas: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Tinggi"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Rendah"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Alamat pengirim tersembunyi"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Tidak dapat mengirim pesan saat memuat lampiran."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Tidak dapat memuat lampiran. Coba lagi."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Jaringan tidak siap. Coba lagi."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Hapus teks"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Beralih antara memasukkan teks dan angka"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Tambahkan peserta lainnya"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Konfirmasi peserta"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Mulai percakapan baru"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Pilih item ini"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Putar video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Orang &amp; opsi"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Debug"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Orang &amp; opsi"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Umum"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Orang dalam percakapan ini"</string>
-    <string name="action_call" msgid="6596167921517350362">"Lakukan panggilan telepon"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Kirim pesan"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Kirim pesan&lt;br/&gt;&lt;small&gt;dari <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Kirim foto</item>
-      <item quantity="one">Kirim foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Kirim audio</item>
-      <item quantity="one">Kirim audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Kirim video</item>
-      <item quantity="one">Kirim video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Kirim kartu kontak</item>
-      <item quantity="one">Kirim kartu kontak</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Kirim lampiran</item>
-      <item quantity="one">Kirim lampiran</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> lampiran siap dikirim</item>
-      <item quantity="one">Satu lampiran siap dikirim</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Kirim masukan"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Lihat di Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Info versi"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versi %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Lisensi sumber terbuka"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notifikasi"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Batas lampiran tercapai"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Gagal memuat lampiran."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Tambahkan ke Kontak?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Tambahkan Kontak"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Subjek"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Subjek: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Memuat kartu kontak"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Tidak dapat memuat kartu kontak"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Lihat kartu kontak"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontak</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontak</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kartu kontak"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Ulang Tahun"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Catatan"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Teruskan pesan"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Balas"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS dinonaktifkan"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Untuk mengirim, setel Perpesanan sebagai aplikasi SMS default"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Setel Perpesanan sebagai aplikasi SMS default"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Ganti"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Untuk menerima pesan, setel Perpesanan sebagai aplikasi SMS default."</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Tidak ada SIM yang dipilih untuk mengirim pesan SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Aplikasi ini tidak diizinkan oleh pemilik perangkat."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Oke"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Terlalu banyak peserta dalam percakapan"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Kontak tidak valid</item>
-      <item quantity="one">Kontak tidak valid</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Tidak dapat memuat gambar kamera"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Anda: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Draf"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Setelah memulai percakapan baru, Anda akan melihatnya tercantum di sini"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Arsip percakapan muncul di sini"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Memuat percakapan..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Gambar"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Klip audio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kartu kontak"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Urungkan"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Coba lagi"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Masukkan nama atau nomor telepon yang dapat dihubungi untuk memulai pesan baru"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokir"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blokir <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Bebaskan <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Blokir <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Anda akan terus menerima pesan dari nomor ini, tetapi tidak akan diberi tahu lagi. Percakapan ini akan diarsipkan."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Kontak yang diblokir"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"BEBASKAN"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Kontak yang diblokir"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Pilih gambar dari perpustakaan dokumen"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Mengirim pesan"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Pesan terkirim"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Data seluler dinonaktifkan. Periksa setelan."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Tidak dapat mengirim pesan dalam mode Pesawat"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Pesan tidak dapat dikirim"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Pesan diunduh"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Data seluler dinonaktifkan. Periksa setelan."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Tidak dapat mengunduh pesan dalam mode Pesawat"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Pesan tidak dapat diunduh"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nol"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Satu"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dua"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tiga"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Empat"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Lima"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Enam"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Tujuh"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Delapan"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Sembilan"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Tidak dapat mengirim pesan dengan <xliff:g id="CARRIERNAME">%1$s</xliff:g>, kesalahan <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Tidak dapat mengirim pesan dengan operator tak dikenal, kesalahan <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Trs: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Pesan tidak terkirim: layanan tidak diaktifkan di jaringan"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Pesan tidak terkirim: alamat tujuan tidak valid"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Pesan tidak terkirim: pesan tidak valid"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Pesan tidak terkirim: konten tidak didukung"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Pesan tidak terkirim: pesan tidak didukung"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Pesan tidak terkirim: terlalu besar"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Pesan baru"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Lihat"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Gambar"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Aplikasi yang sesuai tidak dapat ditemukan"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Hapus penerima"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Pesan baru"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Batal"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Edit titik akses"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Belum disetel"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nama"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Port MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Jenis APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Hapus APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN baru"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Simpan"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Buang"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Bidang Nama wajib diisi."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN wajib diisi."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Bidang MCC harus terdiri dari 3 digit."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Bidang MNC harus 2 atau 3 digit."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Memulihkan setelan APN default."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Setel ulang ke default"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Penyetelan ulang setelan APN default selesai."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Tanpa judul"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Nama Titik Akses"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN baru"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Setelan Nama Titik Akses tidak tersedia untuk pengguna ini"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Salin ke papan klip?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Salin"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"kepada <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Umum"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Lanjutan"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Setelan umum"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Setelan lanjutan"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Kirimkan pesan SMS individual ke semua penerima. Hanya Anda yang akan mendapatkan balasan"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Kirimkan satu MMS ke semua penerima"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Nomor tidak dikenal"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Pesan baru"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Pesan baru."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Pemilih SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> dipilih, pemilih SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Edit subjek"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Pilih SIM atau edit subjek"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Sentuh dan tahan untuk merekam audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Mulai percakapan baru"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Perpesanan"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Daftar Perpesanan"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Perpesanan"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Pesan baru"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Daftar percakapan"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Memuat percakapan"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Memuat pesan"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Lihat percakapan lain"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Lihat pesan lainnya"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Percakapan telah dihapus"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Percakapan dihapus. Sentuh untuk menampilkan percakapan Perpesanan yang berbeda"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Diblokir"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Dibebaskan"</string>
-    <string name="db_full" msgid="8459265782521418031">"Sedikit ruang penyimpanan. Beberapa data mungkin hilang."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Pilih lampiran"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Konfirmasi pilihan"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> dipilih"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Hapus satu atau beberapa lampiran dan coba lagi."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Anda dapat mencoba mengirim pesan, tetapi pesan tersebut mungkin tidak terkirim, kecuali Anda menghapus satu atau beberapa lampiran."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Anda hanya dapat mengirim satu video per pesan. Hapus video tambahan dan coba lagi."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Perpesanan gagal memuat lampiran."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Tetap kirim"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Tidak dapat memulai percakapan"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> dipilih"</string>
-</resources>
diff --git a/res/values-is/arrays.xml b/res/values-is/arrays.xml
deleted file mode 100644
index f8d4803..0000000
--- a/res/values-is/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"ekkert efni"</item>
-    <item msgid="272485471009191934">"ekkertefni"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Já"</item>
-    <item msgid="6049132459802288033">"Nei"</item>
-    <item msgid="3084376867445867895">"Í lagi"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Takk"</item>
-    <item msgid="4881335087096496747">"Ég er sammála"</item>
-    <item msgid="2422296858597420738">"Flott"</item>
-    <item msgid="4805581752819452687">"Er á leiðinni"</item>
-    <item msgid="4746700499431366214">"Ókei, ég fæ að hafa samband síðar"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
deleted file mode 100644
index f02a11c..0000000
--- a/res/values-is/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Skilaboð"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Skilaboð"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Veldu samtal"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Stillingar"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Senda skilaboð"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Bæta viðhengi við"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Hjálp"</string>
-    <string name="welcome" msgid="2857560951820802321">"Komdu fagnandi"</string>
-    <string name="skip" msgid="7238879696319945853">"Sleppa"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Áfram &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Áfram"</string>
-    <string name="exit" msgid="1905187380359981199">"Hætta"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Stillingar &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Stillingar"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Skilaboð þurfa heimild til að fá aðgang að SMS-skilaboðum, síma og tengiliðum."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Þú getur breytt heimildum undir Stillingar &gt; Forrit &gt; Skilaboð &gt; Heimildir."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Þú getur breytt heimildum undir Stillingar, Forrit, Skilaboð, Heimildir."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Algengir"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Allir tengiliðir"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Senda í <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Taka myndir eða myndskeið"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Velja myndir úr þessu tæki"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Taka upp hljóð"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Velja mynd"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Efnið er valið."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Efnið er ekki valið."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> valin"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"mynd <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"mynd"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Taka upp hljóð"</string>
-    <string name="action_share" msgid="2143483844803153871">"Deila"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Rétt í þessu"</string>
-    <string name="posted_now" msgid="867560789350406701">"Núna"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> mín.</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> mín.</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> klukkustund</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> klukkustundir</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> dagur</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dagar</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> vika</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> vikur</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mánuður</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mánuðir</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ár</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ár</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Einnota skilaboð"</string>
-    <string name="save" msgid="5081141452059463572">"Vista"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Lítið pláss er í tækinu. Skilaboðaforritið mun sjálfkrafa eyða gömlum skilaboðum til að losa um pláss."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Geymslurýmið er senn á þrotum"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Ekki er víst að Skilaboð geti sent eða tekið á móti skilaboðum fyrr en meira pláss er til staðar í tækinu."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS-geymsla að fyllast. Þú gætir þurft að eyða skilaboðum."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Staðfestu símanúmerið þitt"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Þetta þarf að gera í eitt skipti til að tryggja að Skilaboð komi hópskilaboðunum þínum til skila á réttan hátt."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Símanúmer"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Eyða öllum skilaboðum með margmiðlunarefni"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Eyða skilaboðum sem eru eldri en <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Eyða sjálfkrafa skilaboðum sem eru eldri en <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Hunsa"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Eyða öllum skilaboðum með margmiðlunarefni?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Eyða skilaboðum sem eru eldri en <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Eyða skilaboðum sem eru eldri en <xliff:g id="DURATION">%s</xliff:g> og kveikja á sjálfvirkri eyðingu?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> sagði"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Þú sagðir"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Skilaboð sem <xliff:g id="SENDER">%1$s</xliff:g> sendi"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Þú sendir skilaboð"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Sendir…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Ekki sent. Snertu til að reyna aftur."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Ekki sent. Reynir aftur…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Endursenda eða eyða"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Hringdu í neyðarþjónustuna. Ekki tókst að senda textaskilaboðin þín á þessari stundu."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Mistókst"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Ný MMS-skilaboð til að sækja"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Ný MMS-skilaboð"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Ekki hægt að sækja"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Snertu til að reyna aftur"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Snertu til að sækja"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Sækja eða eyða"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Sækir…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Skilaboð útrunnin eða ekki aðgengileg"</string>
-    <string name="mms_info" msgid="3402311750134118165">"stærð: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, útrunnið: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Ekki er hægt að senda. Viðtakandinn er ekki gildur."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Símkerfið hefur ekki gert þjónustuna virka"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Sending mistókst vegna símkerfisvandamáls"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Skilaboð útrunnin eða ekki aðgengileg"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Ekkert efni)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Óþekktur sendandi"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Sent"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Ekki var hægt að sækja skilaboðin <xliff:g id="SUBJECT">%1$s</xliff:g> sem <xliff:g id="FROM">%2$s</xliff:g> sendi."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Lítið minni varð til þess að ekki var hægt að ljúka gagnagrunnsaðgerðinni"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Skilaboð ekki send"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Einhver skilaboð voru ekki send í Skilaboðum"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> skilaboð í <xliff:g id="CONVERSATIONS">%d</xliff:g> samtali</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> skilaboð í <xliff:g id="CONVERSATIONS">%d</xliff:g> samtölum</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Skilaboð ekki sótt"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Einhver skilaboð voru ekki sótt í Skilaboð"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> skilaboð í <xliff:g id="CONVERSATIONS">%d</xliff:g> samtali</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> skilaboð í <xliff:g id="CONVERSATIONS">%d</xliff:g> samtölum</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Skilaboð til <xliff:g id="NUMBER">%1$s</xliff:g> voru ekki send"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Hringdu í neyðarþjónustuna. Ekki tókst að senda textaskilaboðin þín í númerið <xliff:g id="NUMBER">%1$s</xliff:g> á þessari stundu."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> ný skilaboð</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> ný skilaboð</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Byrja"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Myndavélin er ekki tiltæk"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Myndavélin er ekki tiltæk"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Upptaka myndskeiða er ekki tiltæk"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Ekki er hægt að vista efni"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Ekki er hægt að taka mynd"</string>
-    <string name="back" msgid="1477626055115561645">"Til baka"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Geymsla"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Eyða"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Setja í geymslu"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Taka úr geymslu"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Slökkva á tilkynningum"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Kveikja á tilkynningum"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Bæta tengilið við"</string>
-    <string name="action_download" msgid="7786338136368564146">"Sækja"</string>
-    <string name="action_send" msgid="377635240181672039">"Senda"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Eyða"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Eyða þessum skilaboðum?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Ekki er hægt að afturkalla þessa aðgerð."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Eyða"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Eyða þessum samtölum?</item>
-      <item quantity="other">Eyða þessum samtölum?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Eyða"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Hætta við"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Til"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Velja margar myndir"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Staðfesta val"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Ekki er hægt að taka upp hljóð. Reyndu aftur."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Ekki er hægt að spila hljóð. Reyndu aftur."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Ekki var hægt að vista hljóð. Reyndu aftur."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Haltu inni"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Mynd"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Hljóðbútur"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Myndskeið"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Tengiliðaspjald"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Sækja"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Svara með SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Svara með MMS-skilaboðum"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Svara"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> þátttakandi</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> þátttakendur</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ég"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Tengiliður settur á bannlista og í geymslu"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Tengiliður tekinn af bannlista og úr geymslu"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> sett í geymslu"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> tekin úr geymslu"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Slökkt á tilkynningum"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Kveikt á tilkynningum"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Allt til reiðu. Snertu Senda aftur."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Skilaboð voru valin sem sjálfgefið SMS-forrit."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Fleygja viðhengjum</item>
-      <item quantity="other">Fleygja viðhengjum</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Hljóðviðhengi"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Spila hljóðviðhengi"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Hlé"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Skilaboð sem <xliff:g id="SENDER">%1$s</xliff:g> sendi: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Misheppnuð skilaboð sem <xliff:g id="SENDER">%1$s</xliff:g> sendi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Skilaboð sem <xliff:g id="SENDER">%1$s</xliff:g> sendi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Ósend skilaboð til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Sendir skilaboð til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Misheppnuð skilaboð til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Skilaboð til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Misheppnuð skilaboð sem <xliff:g id="SENDER">%1$s</xliff:g> sendi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Skilaboð sem <xliff:g id="SENDER">%1$s</xliff:g> sendi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Ósend skilaboð til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Sendir skilaboð til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Misheppnuð skilaboð til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Skilaboð til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tími: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Misheppnuð skilaboð. Snertu til að reyna aftur."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Samtal við <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Eyða efni"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Taka upp myndskeið"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Taka kyrrmynd"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Taka mynd"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Byrja að taka upp myndskeið"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Skipta yfir í myndavél á öllum skjánum"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Skipt á milli fremri og aftari myndavélar"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Stöðva upptöku og hengja myndskeið við"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Stöðva upptöku myndskeiðs"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Skilaboðamyndir"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> mynd vistuð í „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“ möppu</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> myndir vistaðar í „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“ möppu</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> myndskeið vistað í „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“ möppu</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> myndskeið vistuð í „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“ möppu</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> viðhengi vistað í „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“ möppu</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> viðhengi vistuð í „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“ möppu</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> viðhengi vistað í „Niðurhal“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> viðhengi vistuð í „Niðurhal“</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> viðhengi vistað</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> viðhengi vistuð</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Ekki tókst að vista <xliff:g id="QUANTITY_1">%d</xliff:g> viðhengi</item>
-      <item quantity="other">Ekki tókst að vista <xliff:g id="QUANTITY_1">%d</xliff:g> viðhengi</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS-viðhengi vistað"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Stillingar"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Geymsla"</string>
-    <string name="action_close" msgid="1840519376200478419">"Loka"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Ítarlegt"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Villuleita"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Tilkynningar"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Hljóð"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Hljóðlaust"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Titringur"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Á bannlista"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS-skilatilkynningar"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Óska eftir skilatilkynningu fyrir hver send SMS-skilaboð"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Sækja sjálfkrafa"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Sækja MMS-skilaboð sjálfkrafa"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Sækja sjálfkrafa í reiki"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Sækja MMS sjálfkrafa í reiki"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Hópskilaboð"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Nota MMS til að senda ein skilaboð þegar viðtakendur eru margir"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Sjálfgefið SMS-forrit"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Sjálfgefið SMS-forrit"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Símanúmerið þitt"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Óþekkt"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Hljóð fyrir send skilaboð"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Vista SMS-gögn"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Vista ósniðin SMS-gögn í ytri geymsluskrá"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Vista MMS-gögn"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Vista ósniðin MMS-gögn í ytri geymsluskrá"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Þráðlausar viðvaranir"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Skilaboðavalkostir"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Afrita texta"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Skoða upplýsingar"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Eyða"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Áframsenda"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Skilaboðaupplýsingar"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Gerð: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Textaskilaboð"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Margmiðlunarskilaboð"</string>
-    <string name="from_label" msgid="1947831848146564875">"Frá: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Til: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Sent: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Móttekið: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Efni: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Stærð: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Forgangur: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM-kort: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Hár"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Venjulegur"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Lágur"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM-kort <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Falið netfang sendanda"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Ekki er hægt að senda skilaboð á meðan verið er að hlaða viðhengi."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Ekki er hægt að hlaða viðhengi. Reyndu aftur."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Netið er ekki tilbúið. Reyndu aftur."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Eyða texta"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Skipta á milli innsláttar texta og talna"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Bæta við fleiri þátttakendum"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Staðfesta þátttakendur"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Byrja nýtt samtal"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Velja þetta atriði"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Spila myndskeið"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Fólk og valkostir"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Villuleita"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Fólk og valkostir"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Almennt"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Fólk í þessu samtali"</string>
-    <string name="action_call" msgid="6596167921517350362">"Hringja símtal"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Senda skilaboð"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Senda skilaboð&lt;br/&gt;&lt;small&gt;úr <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Senda myndir</item>
-      <item quantity="other">Senda myndir</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Senda hljóð</item>
-      <item quantity="other">Senda hljóð</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Senda myndskeið</item>
-      <item quantity="other">Senda myndskeið</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Senda tengiliðaspjöld</item>
-      <item quantity="other">Senda tengiliðaspjöld</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Senda viðhengi</item>
-      <item quantity="other">Senda viðhengi</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> viðhengi tilbúið til sendingar</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> viðhengi tilbúin til sendingar</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Senda ábendingu"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Skoða í Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Útgáfuupplýsingar"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Útgáfa %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Leyfi opins kóða"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Tilkynningar"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Hámarki viðhengja náð"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Mistókst að hlaða viðhengið."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Bæta við tengiliði?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Bæta tengilið við"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Efni"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Efni: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Hleður tengiliðaspjald"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Ekki var hægt að hlaða tengiliðaspjald"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Skoða tengiliðaspjald"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> tengiliður</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> tengiliðir</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Tengiliðaspjöld"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Fæðingardagur"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Athugasemdir"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Áframsenda skilaboð"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Svara"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Slökkt á SMS"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Til að senda skaltu velja Skilaboð sem sjálfgefið SMS-forrit"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Veldu Skilaboð sem sjálfgefið SMS-forrit"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Breyta"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Til að fá skilaboð skaltu velja Skilaboð sem sjálfgefið SMS-forrit"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Ekkert SIM-kort valið fyrir sendingu SMS-skilaboða"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Eigandi tækisins leyfir ekki þetta forrit."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Í lagi"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Of margir þátttakendur í samtali"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Ógildir tengiliðir</item>
-      <item quantity="other">Ógildir tengiliðir</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Ekki var hægt að hlaða mynd frá myndavél"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Þú: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Drög"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Þegar þú hefur nýtt samtal birtist það hér"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Samtöl í geymslu birtast hér"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Hleður samtöl…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Mynd"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Hljóðbútur"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Myndskeið"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Tengiliðaspjald"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Afturkalla"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Reyna aftur"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Sláðu inn nafn eða símanúmer tengiliðar til að búa til ný skilaboð"</string>
-    <string name="action_block" msgid="9032076625645190136">"Setja á bannlista"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Útiloka <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Taka <xliff:g id="DESTINATION">%s</xliff:g> af bannlista"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Loka á <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Þú heldur áfram að fá skilaboð úr þessu númeri en færð ekki lengur tilkynningar. Þetta samtal verður sett í geymslu."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Útilokaðir tengiliðir"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"TAKA AF BANNLISTA"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Útilokaðir tengiliðir"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Velja mynd úr skjalasafni"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Sendir skilaboð"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Skilaboð send"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Slökkt er á farsímagögnum. Athugaðu stillingarnar."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Ekki er hægt að senda skilaboð þegar flugstilling er virk"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Ekki var hægt að senda skilaboðin"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Skilaboð sótt"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Slökkt er á farsímagögnum. Athugaðu stillingarnar."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Ekki er hægt að sækja skilaboð þegar flugstilling er virk"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Ekki var hægt að sækja skilaboðin"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Núll"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Einn"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Tveir"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Þrír"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Fjórir"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Fimm"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Sex"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sjö"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Átta"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Níu"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Ekki er hægt að senda skilaboð í gegnum <xliff:g id="CARRIERNAME">%1$s</xliff:g>, villa <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Ekki er hægt að senda skilaboð í gegnum óþekkt símafyrirtæki, villa <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Áfrs.: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Skilaboðin voru ekki send. Símkerfið hefur ekki gert þjónustuna virka"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Skilaboðin voru ekki send: Ógildur áfangastaður"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Skilaboðin voru ekki send: Ógild skilaboð"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Skilaboðin voru ekki send: Óstutt innihald"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Skilaboðin voru ekki send: Óstudd skilaboð"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Skilaboðin voru ekki send: Of stór"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Ný skilaboð"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Skoða"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Mynd"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Viðeigandi forrit fannst ekki"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Fjarlægja viðtakanda"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Ný skilaboð"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Hætta við"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Breyta aðgangsstað"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Ekki stillt"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Heiti"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"Aðgangsstaður"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy-þjónn fyrir MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS-gátt"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Tegund aðgangsstaðar"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Eyða aðgangsstað"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nýr aðgangsstaður"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Vista"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Fleygja"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Reiturinn fyrir heiti má ekki vera auður."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Heiti aðgangsstaðar má ekki vera autt."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC-reitur verður að innihalda 3 tölustafi."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC-reitur verður að innihalda 2 eða 3 tölustafi."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Endurheimtir sjálfgefnar stillingar aðgangsstaðar."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Núllstilla"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Sjálfgefnar stillingar aðgangsstaðar endurheimtar."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Ónefnt"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Heiti aðgangsstaða"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Aðgangsstaðir"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nýr aðgangsstaður"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Stillingar fyrir heiti aðgangsstaðar eru ekki í boði fyrir þennan notanda"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Afrita á klippiborð?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Afrita"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"á <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Almennt"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Ítarlegt"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Almennar stillingar"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Ítarlegar stillingar"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM-kortið „<xliff:g id="SIM_NAME">%s</xliff:g>“"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Senda sérstök SMS-skilaboð til hvers viðtakanda fyrir sig. Svör verða aðeins send til þín"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Senda ein MMS-skilaboð til allra viðtakenda"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Óþekkt númer"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Ný skilaboð"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Ný skilaboð."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Val á SIM-korti"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> valið, val á SIM-korti"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Breyta efni"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Velja SIM-kort eða breyta efni"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Haltu inni til að taka upp hljóð"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Hefja nýtt samtal"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Skilaboð"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Skilaboðalisti"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Skilaboð"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Ný skilaboð"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Samtalalisti"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Hleður samtöl"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Hleður skilaboð"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Skoða fleiri samtöl"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Skoða fleiri skilaboð"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Samtali eytt"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Samtali eytt. Snertu til að sýna annað samtal í Skilaboðum"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Á bannlista"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Tekin(n) af bannlista"</string>
-    <string name="db_full" msgid="8459265782521418031">"Geymslupláss er á þrotum. Einhver gögn kunna að glatast."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Veldu viðhengi"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Staðfesta val"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> valin"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Fjarlægðu eitt eða fleiri viðhengi og reyndu aftur."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Þú getur prófað að senda skilaboðin en þau komast ef til vill ekki til skila nema þú fjarlægir eitt eða fleiri viðhengi."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Þú getur aðeins sent eitt myndskeið með hverjum skilaboðum. Fjarlægðu myndskeiðin sem eru umfram og reyndu aftur."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Skilaboð gátu ekki hlaðið viðhengið."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Senda samt"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Ekki tókst að hefja samtal"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> valið"</string>
-</resources>
diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml
deleted file mode 100644
index 16f7792..0000000
--- a/res/values-it/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"nessun oggetto"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Sì"</item>
-    <item msgid="6049132459802288033">"No"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"He he"</item>
-    <item msgid="2611328818571146775">"Grazie"</item>
-    <item msgid="4881335087096496747">"Accetto"</item>
-    <item msgid="2422296858597420738">"Bene"</item>
-    <item msgid="4805581752819452687">"Sto arrivando"</item>
-    <item msgid="4746700499431366214">"OK, ti ricontatto più tardi"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
deleted file mode 100644
index f041793..0000000
--- a/res/values-it/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Messaggi"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Messaggi"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Seleziona conversazione"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Impostazioni"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Invia messaggio"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Aggiungi un allegato"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Guida"</string>
-    <string name="welcome" msgid="2857560951820802321">"Benvenuto"</string>
-    <string name="skip" msgid="7238879696319945853">"Ignora"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Avanti &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Avanti"</string>
-    <string name="exit" msgid="1905187380359981199">"Esci"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Impostazioni &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Impostazioni"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Messaggi richiede l\'autorizzazione per SMS, Telefono e Contatti."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Puoi modificare le autorizzazioni in Impostazioni &gt; Applicazioni &gt; Messaggi &gt; Autorizzazioni."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Puoi modificare le autorizzazioni in Impostazioni &gt; Applicazioni &gt; Messaggi &gt; Autorizzazioni."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Frequenti"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Tutti i contatti"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Invia a <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Scatta foto o registra video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Scegli immagini su questo dispositivo"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Registra audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Scegli foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Il contenuto multimediale è selezionato."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Il contenuto multimediale è deselezionato."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> selezionati"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"immagine: <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"immagine"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Registrazione audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Condividi"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Adesso"</string>
-    <string name="posted_now" msgid="867560789350406701">"Ora"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ore</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ora</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> giorni</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> giorno</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> settimane</item>
-      <item quantity="one">una settimana</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mesi</item>
-      <item quantity="one">un mese</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> anni</item>
-      <item quantity="one">un anno</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Messaggio classe 0"</string>
-    <string name="save" msgid="5081141452059463572">"Salva"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Spazio insufficiente sul dispositivo. Messaggi eliminerà automaticamente i messaggi meno recenti per liberare spazio."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Spazio di archiviazione in esaurimento"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Messaggi potrebbe non inviare o ricevere messaggi finché non si libererà spazio sul dispositivo."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Memoria per gli SMS scarsa. Potresti dover eliminare alcuni messaggi."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Conferma il tuo numero di telefono"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Con questo passaggio da eseguire una sola volta, puoi assicurarti che Messaggi invii correttamente i messaggi di gruppo."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Numero di telefono"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Elimina tutti i messaggi con contenuti multimediali"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Elimina messaggi più vecchi di <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Elimina automaticamente messaggi più vecchi di <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignora"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Eliminare tutti i messaggi con contenuti multimediali?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Eliminare i messaggi più vecchi di <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Eliminare i messaggi più vecchi di <xliff:g id="DURATION">%s</xliff:g> e attivare l\'eliminazione automatica?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"Messaggio di <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Il tuo messaggio"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Messaggio di <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Hai inviato un messaggio"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Invio…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Non inviato. Tocca per riprovare."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Non inviato. Nuovo tentativo…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Invia di nuovo o elimina"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Effettua una chiamata vocale al numero di emergenza. Al momento non è possibile recapitare l\'SMS."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Operazione non riuscita"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nuovo messaggio MMS da scaricare"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nuovo messaggio MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Download non riuscito"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Tocca per riprovare"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Tocca per scaricare"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Scarica o elimina"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Download..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Messaggio scaduto o non disponibile"</string>
-    <string name="mms_info" msgid="3402311750134118165">"dimensioni: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, scadenza: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Impossibile inviare. Destinatario non valido."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Servizio non attivato sulla rete"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Invio non riuscito a causa di problemi di rete"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Messaggio scaduto o non disponibile"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Nessun oggetto)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Mittente sconosciuto"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Recapitato"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Download del messaggio <xliff:g id="SUBJECT">%1$s</xliff:g> inviato da <xliff:g id="FROM">%2$s</xliff:g> non riuscito."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Completamento dell\'operazione nel database non riuscito a causa di memoria insufficiente"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Messaggio non inviato"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Alcuni messaggi non inviati in Messaggi"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messaggi in <xliff:g id="CONVERSATIONS">%d</xliff:g> conversazioni</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> messaggi in una conversazione</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Messaggio non scaricato"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Alcuni messaggi non scaricati in Messaggi"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> messaggi in <xliff:g id="CONVERSATIONS">%d</xliff:g> conversazioni</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> messaggi in una conversazione</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Messaggio al numero <xliff:g id="NUMBER">%1$s</xliff:g> non inviato"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Effettua una chiamata vocale al numero di emergenza. Al momento non è possibile recapitare l\'SMS al numero <xliff:g id="NUMBER">%1$s</xliff:g>."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nuovi messaggi</item>
-      <item quantity="one">Nuovo messaggio</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Avvia"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Fotocamera non disponibile"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Fotocamera non disponibile"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Acquisizione video non disponibile"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Impossibile salvare i contenuti multimediali"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Impossibile scattare una foto"</string>
-    <string name="back" msgid="1477626055115561645">"Indietro"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archiviate"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Elimina"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archivio"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Annulla archiviazione"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Disattiva notifiche"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Attiva notifiche"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Aggiungi contatto"</string>
-    <string name="action_download" msgid="7786338136368564146">"Scarica"</string>
-    <string name="action_send" msgid="377635240181672039">"Invia"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Elimina"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Eliminare questo messaggio?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"L\'operazione non può essere annullata."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Elimina"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Eliminare queste conversazioni?</item>
-      <item quantity="one">Eliminare questa conversazione?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Elimina"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Annulla"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"A"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Seleziona diverse immagini"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Conferma selezione"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"e altri <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Impossibile registrare l\'audio. Riprova."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Impossibile riprodurre l\'audio. Riprova."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Impossibile salvare l\'audio. Riprova."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Tocca e tieni premuto"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Immagine"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Clip audio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Scheda contatto"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Scarica"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Rispondi tramite SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Rispondi con MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Rispondi"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> partecipanti</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> participante</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Io"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contatto bloccato e archiviato"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contatto sbloccato e non archiviato"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> archiviate"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> rimosse dall\'archivio"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notifiche disattivate"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notifiche attivate"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Fatto. Tocca di nuovo Invia."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Messaggi impostato correttamente come app predefinita per gli SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Elimina allegati</item>
-      <item quantity="one">Elimina allegato</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Allegato audio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Riproduci allegato audio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Metti in pausa"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Messaggio da <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Messaggio di <xliff:g id="SENDER">%1$s</xliff:g> non recapitato: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Messaggio di <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Messaggio per <xliff:g id="CONTACT">%1$s</xliff:g> non inviato: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Invio del messaggio a <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Messaggio per <xliff:g id="CONTACT">%1$s</xliff:g> non recapitato: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Messaggio per <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Messaggio di <xliff:g id="SENDER">%1$s</xliff:g> non recapitato: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Messaggio di <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Messaggio per <xliff:g id="GROUP">%1$s</xliff:g> non inviato: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Invio del messaggio a <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Messaggio per <xliff:g id="GROUP">%1$s</xliff:g> non recapitato: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Messaggio per <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Data/ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Messaggio non recapitato. Tocca per riprovare."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversazione con <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Elimina oggetto"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Registra video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Scatta una foto in posa"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Scatta una foto"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Inizia a registrare il video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Passa alla fotocamera a schermo intero"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Passa dalla fotocamera frontale a quella posteriore e viceversa"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Interrompi registrazione e aggiungi video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Interrompi registrazione video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Foto in Messaggi"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> foto salvate nell\'album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> foto salvata nell\'album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> video salvati nell\'album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video salvato nell\'album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> allegati salvati nell\'album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> allegato salvato nell\'album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> allegati salvati in \"Download\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> allegato salvato in \"Download\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> allegati salvati</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> allegato salvato</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Impossibile salvare <xliff:g id="QUANTITY_1">%d</xliff:g> allegati</item>
-      <item quantity="one">Impossibile salvare <xliff:g id="QUANTITY_0">%d</xliff:g> allegato</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Allegato MMS salvato"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Impostazioni"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archiviate"</string>
-    <string name="action_close" msgid="1840519376200478419">"Chiudi"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avanzate"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Debug"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notifiche"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Suono"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silenzioso"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrazione"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloccato"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Rapporti di consegna SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Richiedi conferma di recapito per ogni SMS inviato"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Recupero automatico"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Recupera messaggi MMS automaticamente"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Recupero automatico in roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Recupero automatico di MMS in roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Messaggi di gruppo"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Utilizza gli MMS per inviare un unico messaggio a più destinatari"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"App SMS predefinita"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"App SMS predefinita"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Il tuo numero di telefono"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Sconosciuto"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Riproduzione audio per messaggi in uscita"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Scarica SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Scarica dati non elaborati SMS ricevuti in file di archiviazione esterna"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Scarica MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Scarica dati non elaborati MMS ricevuti in file di archiviazione esterna"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Avvisi wireless"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opzioni messaggio"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copia testo"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Visualizza dettagli"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Elimina"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Inoltra"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Dettagli messaggio"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tipo: "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Messaggio multimediale"</string>
-    <string name="from_label" msgid="1947831848146564875">"Da: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"A: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Inviato: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Ricevuto in data: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Oggetto: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Dimensioni: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priorità: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Alta"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normale"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Bassa"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Indirizzo mittente nascosto"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Impossibile inviare il messaggio durante il caricamento degli allegati."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Impossibile caricare l\'allegato. Riprova."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"La rete non è pronta. Riprova."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Elimina testo"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Passa tra immissione testo e numeri"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Aggiungi altri partecipanti"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Conferma partecipanti"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Inizia nuova conversazione"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Seleziona questo elemento"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Riproduci video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Persone e opzioni"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Debug"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Persone e opzioni"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Generali"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Persone presenti nella conversazione"</string>
-    <string name="action_call" msgid="6596167921517350362">"Fai una chiamata"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Invia messaggio"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Invia messaggio&lt;br/&gt;&lt;small&gt;da <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Invia foto</item>
-      <item quantity="one">Invia foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Invia audio</item>
-      <item quantity="one">Invia audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Invia video</item>
-      <item quantity="one">Invia video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Invia schede contatti</item>
-      <item quantity="one">Invia scheda contatto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Invia allegati</item>
-      <item quantity="one">Invia allegato</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> allegati pronti da inviare</item>
-      <item quantity="one">Un allegato pronto da inviare</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Invia feedback"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Visualizza nel Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Info versione"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versione %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licenze open source"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notifiche"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Limite di allegati raggiunto"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Impossibile caricare l\'allegato."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Aggiungere a Contatti?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Aggiungi contatto"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Oggetto"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Oggetto: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Caricamento scheda contatto in corso"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Impossibile caricare la scheda del contatto"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Visualizza scheda contatto"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contatti</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contatto</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Schede contatti"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Compleanno"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Note"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Inoltra messaggio"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Rispondi"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS disattivati"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Per inviare messaggi, imposta Messaggi come app predefinita per gli SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Imposta Messaggi come app predefinita per gli SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Modifica"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Per ricevere messaggi, imposta Messaggi come app predefinita per gli SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Nessuna SIM preferita selezionata per l\'invio di messaggi SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Questa app non è consentita dal proprietario del dispositivo."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Troppi partecipanti alla conversazione"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Contatti non validi</item>
-      <item quantity="one">Contatto non valido</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Impossibile caricare l\'immagine della fotocamera"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Tu: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Bozza"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Le nuove conversazioni che inizi verranno elencate qui"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Le conversazioni archiviate vengono visualizzate qui"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Caricamento conversazioni in corso..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Immagine"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Clip audio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Scheda contatto"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Annulla"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Riprova"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Inserisci il nome o il numero di telefono di un contatto per iniziare un nuovo messaggio"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blocca"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blocca <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Sblocca <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Bloccare <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Continuerai a ricevere messaggi da questo numero ma non riceverai più notifiche. Questa conversazione verrà archiviata."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Contatti bloccati"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"SBLOCCA"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Contatti bloccati"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Scegli immagine da raccolta documenti"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Invio messaggio"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Messaggio inviato"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Dati mobili non attivi. Controlla le impostazioni."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Impossibile inviare messaggi in modalità Aereo"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Messaggio non inviato"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Messaggio scaricato"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Dati mobili non attivi. Controlla le impostazioni."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Impossibile scaricare messaggi in modalità aereo"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Impossibile scaricare il messaggio"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Uno"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Due"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tre"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Quattro"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Cinque"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Sei"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sette"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Otto"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nove"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Impossibile inviare il messaggio tramite <xliff:g id="CARRIERNAME">%1$s</xliff:g>. Errore <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Impossibile inviare il messaggio tramite un operatore sconosciuto. Errore <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Messaggio non inviato: servizio non attivato nella rete"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Messaggio non inviato: indirizzo di destinazione non valido"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Messaggio non inviato: messaggio non valido"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Messaggio non inviato: contenuti non supportati"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Messaggio non inviato: messaggio non supportato"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Messaggio non inviato: troppo grande"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nuovo messaggio"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Visualizza"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Immagine"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Impossibile trovare un\'applicazione adeguata"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Rimuovi destinatario"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nuovo messaggio"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Annulla"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Modifica punto di accesso"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Non impostato"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nome"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Porta MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Tipo APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Elimina APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nuovo APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Salva"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Elimina"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Il campo Nome non può essere vuoto."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Il campo APN non può essere vuoto."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Il campo MCC deve contenere 3 cifre."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Il campo MNC deve contenere 2 o 3 cifre."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Ripristino delle impostazioni APN predefinite."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Ripristina impostazioni predefinite"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Ripristino delle impostazioni APN predefinite completato."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Senza titolo"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Nomi punti di accesso"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nuovo APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Le impostazioni del nome punto di accesso non sono disponibili per questo utente"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Copiare negli appunti?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copia"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"a <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Generali"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avanzate"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Impostazioni generali"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Impostazioni avanzate"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Invia SMS singoli a tutti i destinatari. Soltanto tu riceverai le risposte"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Invia un singolo MMS a tutti i destinatari"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Numero sconosciuto"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nuovo messaggio"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nuovo messaggio."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Selettore SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Scheda <xliff:g id="SIM_0">%1$s</xliff:g> selezionata, selettore SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Modifica oggetto"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Seleziona la SIM o modifica l\'oggetto"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Tocca e tieni premuto per registrare l\'audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Inizia nuova conversazione"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Messaggi"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Elenco messaggi"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Messaggi"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nuovo messaggio"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Elenco conversazioni"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Caricamento conversazioni..."</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Caricamento dei messaggi in corso"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Visualizza altre conversazioni"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Mostra altri messaggi"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversazione eliminata"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Conversazione eliminata. Tocca per vedere un\'altra conversazione di Messaggi"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloccato"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Sbloccato"</string>
-    <string name="db_full" msgid="8459265782521418031">"Lo spazio di archiviazione è quasi esaurito. Alcuni dati potrebbero andare perduti."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Seleziona allegati"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Conferma selezione"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> selezionati"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Rimuovi uno o più allegati e riprova."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Puoi provare a inviare il messaggio, che però potrebbe non essere recapitato se non rimuovi uno o più allegati."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Puoi inviare un solo video per messaggio. Rimuovi i video aggiuntivi e riprova."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Messaggi non ha potuto caricare l\'allegato."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Invia comunque"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Impossibile avviare la conversazione"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"SIM selezionata: <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-iw/arrays.xml b/res/values-iw/arrays.xml
deleted file mode 100644
index 91bd7db..0000000
--- a/res/values-iw/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"ללא נושא"</item>
-    <item msgid="272485471009191934">"ללא נושא"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"כן"</item>
-    <item msgid="6049132459802288033">"לא"</item>
-    <item msgid="3084376867445867895">"אישור"</item>
-    <item msgid="3155097332660174689">"חחח"</item>
-    <item msgid="2611328818571146775">"תודה"</item>
-    <item msgid="4881335087096496747">"אני מסכים"</item>
-    <item msgid="2422296858597420738">"נחמד"</item>
-    <item msgid="4805581752819452687">"אני בדרך"</item>
-    <item msgid="4746700499431366214">"אוקיי, נדבר מאוחר יותר"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
deleted file mode 100644
index 3f80e3c..0000000
--- a/res/values-iw/strings.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"העברת הודעות"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"העברת הודעות"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"בחר שיחה"</string>
-    <string name="action_settings" msgid="1329008122345201684">"הגדרות"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"שלח הודעה"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"הוסף קובץ מצורף"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"עזרה"</string>
-    <string name="welcome" msgid="2857560951820802321">"ברוכים הבאים!"</string>
-    <string name="skip" msgid="7238879696319945853">"דלג"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"‏הבא &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"הבא"</string>
-    <string name="exit" msgid="1905187380359981199">"צא"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"‏הגדרות &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"הגדרות"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"‏\'העברת הודעות\' זקוק להרשאות SMS, טלפון ואנשי קשר."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"‏תוכל לשנות את ההרשאות ב\'הגדרות\' &gt; \'אפליקציות\' &gt;‏ \'העברת הודעות\' ‏&gt; \'הרשאות\'."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"תוכל לשנות את ההרשאות ב\'הגדרות\', \'אפליקציות\', \'העברת הודעות\', \'הרשאות\'."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"בתדירות גבוהה"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"כל אנשי הקשר"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"שלח אל <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"צלם תמונות או סרטון"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"בחר תמונות ממכשיר זה"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"הקלט אודיו"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"בחר תמונה"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"בחרת במדיה."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"ביטלת את הבחירה במדיה."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> נבחרו"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"תמונה <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"תמונה"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"הקלט אודיו"</string>
-    <string name="action_share" msgid="2143483844803153871">"שיתוף"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ממש עכשיו"</string>
-    <string name="posted_now" msgid="867560789350406701">"עכשיו"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> דקות</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> דקות</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> דקות</item>
-      <item quantity="one">דקה <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> שעות</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> שעות</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> שעות</item>
-      <item quantity="one">שעה <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> ימים</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> ימים</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ימים</item>
-      <item quantity="one">יום <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="two"> שבועות</item>
-      <item quantity="many"> שבועות<xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="other"> שבועות</item>
-      <item quantity="one">שבוע</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> חודשים</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> חודשים</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> חודשים</item>
-      <item quantity="one">חודש</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="two"> שנים</item>
-      <item quantity="many"> שנים<xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="other"> שנים</item>
-      <item quantity="one">שנה</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"הודעה ברמה 0"</string>
-    <string name="save" msgid="5081141452059463572">"שמור"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"נותר מעט שטח פנוי במכשיר. \'העברת הודעות\' ימחק הודעות ישנות באופן אוטומטי כדי לפנות שטח."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"שטח האחסון אוזל"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"לא תוכל לשלוח או לקבל הודעות ב\'העברת הודעות\' עד שתפנה שטח במכשיר."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"‏אין מספיק שטח אחסון להודעות SMS. ייתכן שתצטרך למחוק הודעות."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"אשר את מספר הטלפון שלך"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"שלב חד-פעמי זה יבטיח שהאפליקציה \'העברת הודעות\' תעביר כראוי את ההודעות הקבוצתיות שלך."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"מספר טלפון"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"מחק את כל ההודעות עם מדיה"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"מחק הודעות בנות יותר מ-<xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"מחק אוטומטית הודעות שגילן עולה על <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"התעלם"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"למחוק את כל ההודעות עם המדיה?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"למחוק הודעות שגילן עולה על <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"למחוק הודעות שגילן עולה על <xliff:g id="DURATION">%s</xliff:g> ולהפעיל מחיקה אוטומטית?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> אמר"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"אמרת"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"הודעה מאת <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"שלחת הודעה"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"שולח..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"ההודעה לא נשלחה. גע כדי לנסות שוב."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"ההודעה לא נשלחה. מנסה שוב…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"שלח שוב או מחק"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"בצע שיחה קולית לשירותי חירום. לא ניתן היה לשלוח את הודעת הטקסט."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"נכשל"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"‏הודעת MMS חדשה להורדה"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"‏הודעת MMS חדשה"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"לא ניתן לבצע את ההורדה"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"גע כדי לנסות שוב"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"גע כדי להוריד"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"הורד או מחק"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"מוריד…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"תוקף ההודעה פג או שהיא לא זמינה"</string>
-    <string name="mms_info" msgid="3402311750134118165">"גודל: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, תפוגה: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"לא ניתן לשלוח. הנמען אינו חוקי."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"השירות לא הופעל ברשת"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"לא ניתן לשלוח בגלל בעיה ברשת"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"התוקף של ההודעה פג או שהיא לא זמינה"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(ללא נושא)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"שולח לא ידוע"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"נמסר"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"לא ניתן היה להוריד את ההודעה <xliff:g id="SUBJECT">%1$s</xliff:g> מ-<xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"לא ניתן היה להשלים את הפעולה של מסד הנתונים עקב זיכרון לא מספיק"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"ההודעה לא נשלחה"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"\'העברת הודעות\' לא שלח חלק מההודעות"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="two"><xliff:g id="MESSAGES_1">%d</xliff:g> הודעות ב-<xliff:g id="CONVERSATIONS">%d</xliff:g> שיחות</item>
-      <item quantity="many"><xliff:g id="MESSAGES_1">%d</xliff:g> הודעות ב-<xliff:g id="CONVERSATIONS">%d</xliff:g> שיחות</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> הודעות ב-<xliff:g id="CONVERSATIONS">%d</xliff:g> שיחות</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> הודעות בשיחה אחת</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"ההודעה לא הורדה"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"\'העברת הודעות\' לא הוריד חלק מההודעות"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="two"><xliff:g id="MESSAGES_1">%d</xliff:g> הודעות ב-<xliff:g id="CONVERSATIONS">%d</xliff:g> שיחות</item>
-      <item quantity="many"><xliff:g id="MESSAGES_1">%d</xliff:g> הודעות ב-<xliff:g id="CONVERSATIONS">%d</xliff:g> שיחות</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> הודעות ב-<xliff:g id="CONVERSATIONS">%d</xliff:g> שיחות</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> הודעות בשיחה אחת</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"ההודעה אל <xliff:g id="NUMBER">%1$s</xliff:g> לא נשלחה"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"התקשר לשירותי חירום. לא ניתן היה לשלוח את הודעת הטקסט אל <xliff:g id="NUMBER">%1$s</xliff:g>."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="two"><xliff:g id="MESSAGES">%d</xliff:g> הודעות חדשות</item>
-      <item quantity="many"><xliff:g id="MESSAGES">%d</xliff:g> הודעות חדשות</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> הודעות חדשות</item>
-      <item quantity="one">הודעה חדשה</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"התחל"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"המצלמה לא זמינה"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"המצלמה לא זמינה"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"לכידת וידאו אינה זמינה"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"לא ניתן לשמור מדיה"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"לא ניתן לצלם את התמונה"</string>
-    <string name="back" msgid="1477626055115561645">"הקודם"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"הועברו לארכיון"</string>
-    <string name="action_delete" msgid="4076795795307486019">"מחק"</string>
-    <string name="action_archive" msgid="5437034800324083170">"העבר לארכיון"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"הוצאה מארכיון"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"כבה התראות"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"הפעל התראות"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"הוסף איש קשר"</string>
-    <string name="action_download" msgid="7786338136368564146">"הורד"</string>
-    <string name="action_send" msgid="377635240181672039">"שלח"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"מחק"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"למחוק הודעה זו?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"פעולה זו אינה הפיכה."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"מחק"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="two">האם למחוק את השיחות האלו?</item>
-      <item quantity="many">האם למחוק את השיחות האלו?</item>
-      <item quantity="other">האם למחוק את השיחות האלו?</item>
-      <item quantity="one">האם למחוק את השיחה הזו?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"מחק"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"בטל"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"אל"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"בחר תמונות מרובות"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"אשר את הבחירה"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"לא ניתן להקליט אודיו. נסה שוב."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"לא ניתן להפעיל אודיו. נסה שוב."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"לא ניתן לשמור אודיו. נסה שוב."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"גע והחזק"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"תמונה"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"קטע אודיו"</string>
-    <string name="notification_video" msgid="4331423498662606204">"סרטון"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"כרטיס איש קשר"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"הורד"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"‏השב באמצעות SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"‏השב באמצעות MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"השב"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> משתתפים</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> משתתפים</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> משתתפים</item>
-      <item quantity="one">משתתף <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"אני"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"איש הקשר נחסם והועבר לארכיון"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"חסימת איש הקשר בוטלה והוא הוצא מהארכיון"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> הועברו לארכיון"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> הוצאו מהארכיון"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"ההודעות כבויות"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"ההודעות פועלות"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"הכל מוכן. גע באפשרות \'שלח שוב\'."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"‏האפליקציה \'העברת הודעות\' הוגדרה בהצלחה כאפליקציית ברירת המחדל ל-SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="two">מחק את הקבצים המצורפים</item>
-      <item quantity="many">מחק את הקבצים המצורפים</item>
-      <item quantity="other">מחק את הקבצים המצורפים</item>
-      <item quantity="one">מחק את הקובץ המצורף</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"קובץ אודיו מצורף"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"הפעל את קובץ האודיו המצורף"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"השהה"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"הודעה מאת <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"הודעה מאת <xliff:g id="SENDER">%1$s</xliff:g> שנכשלה: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"הודעה מאת <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"הודעה אל <xliff:g id="CONTACT">%1$s</xliff:g> שלא נשלחה: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"שולח הודעה אל <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"הודעה אל <xliff:g id="CONTACT">%1$s</xliff:g> שנכשלה: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"הודעה אל <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"הודעה שנכשלה מאת <xliff:g id="SENDER">%1$s</xliff:g>‏: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"הודעה מאת <xliff:g id="SENDER">%1$s</xliff:g>‏: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"הודעה אל <xliff:g id="GROUP">%1$s</xliff:g> שלא נשלחה: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"שולח הודעה אל <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"הודעה אל <xliff:g id="GROUP">%1$s</xliff:g> שנכשלה: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"הודעה אל <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. שעה: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"ההודעה נכשלה. גע כדי לנסות שוב."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"שיחה עם <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"מחק נושא"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"צלם סרטון"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"צלם תמונת סטילס"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"צלם תמונה"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"התחל הקלטת סרטון"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"עבור למצלמה במסך מלא"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"החלף בין המצלמה הקדמית לאחורית"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"הפסק להקליט וצרף סרטון"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"עצור הקלטת וידאו"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"תמונות ב\'העברת הודעות\'"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="two"><xliff:g id="QUANTITY_2">%d</xliff:g> תמונות נשמרו באלבום \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> תמונות נשמרו באלבום \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> תמונות נשמרו באלבום \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">תמונה <xliff:g id="QUANTITY_0">%d</xliff:g> נשמרה באלבום \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="two"><xliff:g id="QUANTITY_2">%d</xliff:g> סרטונים נשמרו באלבום \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> סרטונים נשמרו באלבום \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> סרטונים נשמרו באלבום \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">סרטון <xliff:g id="QUANTITY_0">%d</xliff:g> נשמר באלבום \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="two"><xliff:g id="QUANTITY_2">%d</xliff:g> קבצים מצורפים נשמרו באלבום \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> קבצים מצורפים נשמרו באלבום \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> קבצים מצורפים נשמרו באלבום \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">קובץ מצורף <xliff:g id="QUANTITY_0">%d</xliff:g> נשמר באלבום \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="two"><xliff:g id="QUANTITY_1">%d</xliff:g> קבצים מצורפים נשמרו ב\"הורדות\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> קבצים מצורפים נשמרו ב\"הורדות\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> קבצים מצורפים נשמרו ב\"הורדות\"</item>
-      <item quantity="one">קובץ מצורף <xliff:g id="QUANTITY_0">%d</xliff:g> נשמר ב\"הורדות\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="two"><xliff:g id="QUANTITY_1">%d</xliff:g> קבצים מצורפים נשמרו</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> קבצים מצורפים נשמרו</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> קבצים מצורפים נשמרו</item>
-      <item quantity="one">קובץ מצורף <xliff:g id="QUANTITY_0">%d</xliff:g> נשמר</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="two">לא ניתן היה לשמור <xliff:g id="QUANTITY_1">%d</xliff:g> קבצים מצורפים</item>
-      <item quantity="many">לא ניתן היה לשמור <xliff:g id="QUANTITY_1">%d</xliff:g> קבצים מצורפים</item>
-      <item quantity="other">לא ניתן היה לשמור <xliff:g id="QUANTITY_1">%d</xliff:g> קבצים מצורפים</item>
-      <item quantity="one">לא ניתן היה לשמור קובץ מצורף <xliff:g id="QUANTITY_0">%d</xliff:g></item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"‏קובץ ה-MMS המצורף נשמר"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"הגדרות"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"הועברו לארכיון"</string>
-    <string name="action_close" msgid="1840519376200478419">"סגור"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"מתקדם"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"ניפוי באגים"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"הודעות"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"צליל"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"מצב שקט"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"רטט"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"חסום"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"‏דוחות מסירת SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"‏בקש דוח מסירה לכל SMS שאתה שולח"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"אחזור אוטומטי"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"‏אחזור אוטומטי של הודעות MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"אחזור אוטומטי בנדידה"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"‏אחזר הודעות MMS באופן אוטומטי בזמן נדידה"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"העברת הודעות לקבוצה"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"‏השתמש ב-MMS לשליחת הודעה אחת לנמענים מרובים"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"‏אפליקציית SMS המוגדרת כברירת מחדל"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"‏אפליקציית SMS המוגדרת כברירת מחדל"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"מספר הטלפון שלך"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"לא ידוע"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"צלילים של הודעות יוצאות"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"‏צור Dump של SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"‏צור Dump בקובץ אחסון חיצוני עבור נתוני SMS גולמיים שהתקבלו"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"‏צור Dump של MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"‏צור Dump בקובץ אחסון חיצוני עבור נתוני MMS גולמיים שהתקבלו"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"התראות אלחוטיות"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"אפשרויות הודעה"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"העתק טקסט"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"הצגת פרטים"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"מחיקה"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"העבר"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"פרטי הודעה"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"סוג: "</string>
-    <string name="text_message" msgid="7415419755252205721">"הודעת טקסט"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"הודעת מולטימדיה"</string>
-    <string name="from_label" msgid="1947831848146564875">"מאת: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"אל: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"נשלחה ב: "</string>
-    <string name="received_label" msgid="4442494712757995203">"התקבלה ב: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"נושא: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"גודל: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"עדיפות: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"גבוהה"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"רגילה"</string>
-    <string name="priority_low" msgid="7398724779026801851">"נמוכה"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"‏SIM‏ <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"כתובת שולח מוסתרת"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"לא ניתן לשלוח הודעה בעת טעינת קבצים מצורפים."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"לא ניתן לטעון קובץ מצורף. נסה שוב."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"הרשת לא מוכנה. נסה שוב."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"מחק טקסט"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"עבור בין הזנה של אותיות וספרות"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"הוסף עוד משתמשים"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"אשר משתתפים"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"התחל שיחה חדשה"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"בחר בפריט הזה"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"הפעל סרטון"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"אנשים ואפשרויות"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"ניפוי באגים"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"אנשים ואפשרויות"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"כללי"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"אנשים בשיחה הזו"</string>
-    <string name="action_call" msgid="6596167921517350362">"התקשר"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"שלח הודעה"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"‏שלח הודעה&lt;br/&gt;&lt;small&gt;מ-<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="two">שלח את התמונות</item>
-      <item quantity="many">שלח את התמונות</item>
-      <item quantity="other">שלח את התמונות</item>
-      <item quantity="one">שלח את התמונה</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="two">שלח את הקלטות האודיו</item>
-      <item quantity="many">שלח את הקלטות האודיו</item>
-      <item quantity="other">שלח את הקלטות האודיו</item>
-      <item quantity="one">שלח את הקלטת האודיו</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="two">שלח את הסרטונים</item>
-      <item quantity="many">שלח את הסרטונים</item>
-      <item quantity="other">שלח את הסרטונים</item>
-      <item quantity="one">שלח את הסרטון</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="two">שלח את כרטיסי אנשי הקשר</item>
-      <item quantity="many">שלח את כרטיסי אנשי הקשר</item>
-      <item quantity="other">שלח את כרטיסי אנשי הקשר</item>
-      <item quantity="one">שלח את כרטיס איש הקשר</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="two">שלח את הקבצים המצורפים</item>
-      <item quantity="many">שלח את הקבצים המצורפים</item>
-      <item quantity="other">שלח את הקבצים המצורפים</item>
-      <item quantity="one">שלח את הקובץ המצורף</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="two">יש <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> קבצים מצורפים המוכנים לשליחה</item>
-      <item quantity="many">יש <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> קבצים מצורפים המוכנים לשליחה</item>
-      <item quantity="other">יש <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> קבצים מצורפים המוכנים לשליחה</item>
-      <item quantity="one">יש קובץ מצורף אחד המוכן לשליחה</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"שלח משוב"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"‏הצג בחנות Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"פרטי גרסה"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"‏גרסה %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"רישיונות קוד פתוח"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"הודעות"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"צירפת את מספר הקבצים המקסימלי"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"טעינת הקובץ המצורף נכשלה."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"האם להוסיף לאנשי הקשר?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"הוסף איש קשר"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"נושא"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"נושא: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"טוען את כרטיס איש הקשר"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"לא ניתן לטעון כרטיס איש קשר"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"הצג את כרטיס איש הקשר"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> אנשי קשר</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> אנשי קשר</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> אנשי קשר</item>
-      <item quantity="one">איש קשר <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"כרטיסי אנשי קשר"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"יום הולדת"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"הערות"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"העבר הודעה"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"השב"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"‏SMS מושבת"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"‏כדי לשלוח, הגדר את האפליקציה \'העברת הודעות\' כאפליקציית ברירת המחדל ל-SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"‏הגדר את האפליקציה \'העברת הודעות\' כאפליקציית ברירת המחדל ל-SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"שנה"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"‏כדי לקבל הודעות, הגדר את \'העברת הודעות\' כאפליקציית ברירת המחדל ל-SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"‏לא נבחר SIM מועדף עבור שליחה של הודעות SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"אפליקציה זו אינה מורשית על ידי בעל המכשיר."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"אישור"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"משתתפים רבים מדי בשיחה"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="two">אנשי קשר לא חוקיים</item>
-      <item quantity="many">אנשי קשר לא חוקיים</item>
-      <item quantity="other">אנשי קשר לא חוקיים</item>
-      <item quantity="one">איש קשר לא חוקי</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"לא ניתן לטעון תמונת מצלמה"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"אתה: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"טיוטה"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"כשתתחיל שיחה חדשה, תראה אותה ברשימה כאן"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"שיחות שהועברו לארכיון מופיעות כאן"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"טוען שיחות..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"תמונה"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"קטע אודיו"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"סרטון"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"כרטיס איש קשר"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"בטל"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"נסה שוב"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"הזן שם איש קשר או מספר טלפון כדי להתחיל הודעה חדשה"</string>
-    <string name="action_block" msgid="9032076625645190136">"חסום"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"חסום את <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"בטל חסימה של <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"לחסום את <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"תמשיך לקבל הודעות ממספר זה אך לא יוצגו לך עוד דיווחים. שיחה זו תועבר לארכיון."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"אנשי קשר חסומים"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"אפשר"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"אנשי קשר חסומים"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"בחר תמונה מספריית המסמכים"</string>
-    <string name="sending_message" msgid="6363584950085384929">"שולח את ההודעה"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"ההודעה נשלחה"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"נתונים סלולריים כבויים. בדוק את ההגדרות."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"לא ניתן לשלוח הודעות במצב טיסה"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"לא ניתן היה לשלוח את ההודעה"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"הורדת ההודעה בוצעה"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"נתונים סלולריים כבויים. בדוק את ההגדרות."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"לא ניתן להוריד הודעות במצב טיסה"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"לא ניתן היה להוריד את ההודעה"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"אפס"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"אחת"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"שתיים"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"שלוש"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"ארבע"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"חמש"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"שש"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"שבע"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"שמונה"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"תשע"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"לא ניתן לשלוח הודעה דרך <xliff:g id="CARRIERNAME">%1$s</xliff:g>, שגיאה <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"לא ניתן לשלוח הודעה דרך ספק לא ידוע, שגיאה <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"העבר: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"ההודעה לא נשלחה: השירות לא הופעל ברשת."</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"ההודעה לא נשלחה: כתובת היעד לא חוקית"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"ההודעה לא נשלחה: הודעה לא חוקית"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"ההודעה לא נשלחה: תוכן לא נתמך"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"ההודעה לא נשלחה: הודעה לא נתמכת"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"ההודעה לא נשלחה מפני שהיא גדולה מדי"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"הודעה חדשה"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"הצג"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"תמונה"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"לא נמצא יישום מתאים"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"הסר נמען"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"הודעה חדשה"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"בטל"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"ערוך נקודת גישה"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"לא מוגדרת"</string>
-    <string name="apn_name" msgid="1572691851070894985">"שם"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"‏שרת Proxy של MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"‏יציאת MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"‏סוג APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"‏מחק APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"‏APN חדש"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"שמור"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"מחק"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"השדה \'שם\' לא יכול להיות ריק."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"‏ה-APN לא יכול להיות ריק."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"‏שדה MCC חייב להכיל 3 ספרות."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"‏שדה MNC חייב להכיל 2 או 3 ספרות."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"‏משחזר את הגדרות ברירת המחדל של APN."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"אפס לברירת מחדל"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"‏איפוס ההגדרות עבור ברירת המחדל של APN הושלם."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"ללא שם"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"שמות של נקודות גישה"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"‏APN חדש"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"‏הגדרות עבור שם נקודת גישה (APN) אינן זמינות עבור המשתמש הזה"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"האם להעתיק אל לוח העריכה?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"העתק"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"אל <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"כללי"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"מתקדם"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"הגדרות כלליות"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"הגדרות מתקדמות"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"‏שלח הודעות SMS אישיות לכל הנמענים. רק אתה תקבל תשובות"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"‏שלח הודעת MMS אחת לכל הנמענים"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"מספר לא ידוע"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"הודעה חדשה"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"הודעה חדשה."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"‏בורר כרטיסי SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"‏<xliff:g id="SIM_0">%1$s</xliff:g> נבחר, בוחר כרטיסי SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"ערוך נושא"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"‏בחר כרטיס SIM או ערוך את הנושא"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"גע נגיעה ממושכת כדי להקליט אודיו"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"התחל שיחה חדשה"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"\'העברת הודעות\'"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"רשימת \'העברת הודעות\'"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"\'העברת הודעות\'"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"הודעה חדשה"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"רשימת שיחות"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"טוען שיחות"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"טוען הודעות"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"הצג שיחות נוספות"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"הצג עוד הודעות"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"השיחה נמחקה"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"השיחה נמחקה. גע כדי להציג שיחה אחרת ב\'העברת הודעות\'"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"חסום"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"חסימה בוטלה"</string>
-    <string name="db_full" msgid="8459265782521418031">"אין מספיק שטח אחסון. ייתכן שתאבד חלק מהנתונים."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"בחר קבצים מצורפים"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"אשר את הבחירה"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"בחרת <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"הסר קובץ מצורף אחד או יותר ונסה שוב."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"תוכל לנסות לשלוח את ההודעה, אך ייתכן שהיא לא תימסר אלא אם תסיר קובץ מצורף אחד או יותר."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"ניתן לשלוח רק סרטון אחד בכל הודעה. הסר סרטונים נוספים ונסה שוב."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"טעינת הקובץ המצורף נכשלה ב\'העברת הודעות\'."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"שלח בכל זאת"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"לא ניתן היה להתחיל את השיחה"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> נבחר"</string>
-</resources>
diff --git a/res/values-ja/arrays.xml b/res/values-ja/arrays.xml
deleted file mode 100644
index cf9e1a6..0000000
--- a/res/values-ja/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"件名なし"</item>
-    <item msgid="272485471009191934">"件名なし"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"はい"</item>
-    <item msgid="6049132459802288033">"いいえ"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"笑"</item>
-    <item msgid="2611328818571146775">"ありがとう"</item>
-    <item msgid="4881335087096496747">"賛成"</item>
-    <item msgid="2422296858597420738">"ナイス"</item>
-    <item msgid="4805581752819452687">"すぐに連絡します"</item>
-    <item msgid="4746700499431366214">"後で連絡します"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
deleted file mode 100644
index a3a513e..0000000
--- a/res/values-ja/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"メッセージ"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"メッセージ"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"会話の選択"</string>
-    <string name="action_settings" msgid="1329008122345201684">"設定"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"メッセージを送信"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"添付ファイルを追加"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"ヘルプ"</string>
-    <string name="welcome" msgid="2857560951820802321">"ようこそ"</string>
-    <string name="skip" msgid="7238879696319945853">"スキップ"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"次へ &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"次へ"</string>
-    <string name="exit" msgid="1905187380359981199">"終了"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"設定 &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"設定"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"SMSには、SMS、電話、連絡先に対する許可が必要です。"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"許可の変更は、[設定]&gt;[アプリ]&gt;[SMS]&gt;[許可]で行えます。"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"許可の変更は、[設定]、[アプリ]、[SMS]、[許可]で行えます。"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"よく使う連絡先"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"すべての連絡先"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g>に送信"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"写真や動画を撮影"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"この端末から画像を選択"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"音声の録音"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"写真を選択"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"メディアを選択しました。"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"メディアの選択を解除しました。"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g>件選択済み"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"画像<xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"画像"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"音声の録音"</string>
-    <string name="action_share" msgid="2143483844803153871">"共有"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"たった今"</string>
-    <string name="posted_now" msgid="867560789350406701">"今"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>分</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>分</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>時間</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>時間</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>日</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>日</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>週間</item>
-      <item quantity="one">1週間</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>か月</item>
-      <item quantity="one">1か月</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>年</item>
-      <item quantity="one">1年</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"クラス0メッセージ"</string>
-    <string name="save" msgid="5081141452059463572">"保存"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"端末の空き容量が少なくなっています。SMSでは空き容量を確保するため古いメッセージが自動的に削除されます。"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"空き容量が少なくなっています"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"端末上の空き容量が増えるまで、SMSでメッセージの送受信ができない場合があります。"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMSの空き容量が少なくなっています。メッセージの削除が必要な場合があります。"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"電話番号の確認"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"この1回の手順で、SMSはグループにメッセージを確実に配信します。"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"電話番号"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"メディア付きのメッセージをすべて削除"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g>より前のメッセージを削除"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g>より前のメッセージを自動削除"</string>
-    <string name="ignore" msgid="7063392681130898793">"無視"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"メディア付きのメッセージをすべて削除しますか？"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g>より前のメッセージを削除しますか？"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g>より前のメッセージを削除し、自動削除をONにしますか？"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g>さんからのメッセージ"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"メッセージ内容"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g>さんからのメッセージ"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"メッセージを送信しました"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"送信しています…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"送信されていません。タップしてもう一度お試しください。"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"送信されていません。もう一度送信しています…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"再送信または削除"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"緊急通報には音声通話を使用してください。テキストメッセージを配信できませんでした。"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"失敗しました"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"ダウンロードする新しいMMSメッセージ"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"新しいMMSメッセージ"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ダウンロードできませんでした"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"再試行するにはタップしてください"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ダウンロードするにはタップしてください"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ダウンロードまたは削除"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"ダウンロードしています…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"メッセージが期限切れか参照できなくなっています"</string>
-    <string name="mms_info" msgid="3402311750134118165">"サイズ: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>、期限: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"送信できません。受信者が無効です。"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"サービスがネットワークで有効になっていません"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"ネットワークに問題があるため送信できませんでした"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"メッセージが期限切れか参照できなくなっています"</string>
-    <string name="no_subject" msgid="5587715902648568767">"（無題）"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"送信者不明"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"配信済み"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"件名「<xliff:g id="SUBJECT">%1$s</xliff:g>」、送信者「<xliff:g id="FROM">%2$s</xliff:g>」のメッセージをダウンロードできませんでした。"</string>
-    <string name="low_memory" msgid="5300743415198486619">"メモリ不足のためデータベース操作を完了できませんでした"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"メッセージが送信されていません"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"SMSの一部のメッセージが送信されていません"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g>件のスレッドのメッセージ<xliff:g id="MESSAGES_1">%d</xliff:g>件</item>
-      <item quantity="one">1件のスレッドのメッセージ<xliff:g id="MESSAGES_0">%d</xliff:g>件</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"メッセージがダウンロードされていません"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"SMSの一部のメッセージがダウンロードされていません"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g>件のスレッドのメッセージ<xliff:g id="MESSAGES_1">%d</xliff:g>件</item>
-      <item quantity="one">1件のスレッドのメッセージ<xliff:g id="MESSAGES_0">%d</xliff:g>件</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g>へのメッセージは送信されませんでした"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"緊急通報には音声通話を使用してください。<xliff:g id="NUMBER">%1$s</xliff:g>へのテキストメッセージを配信できませんでした。"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g>件の新しいメッセージ</item>
-      <item quantity="one">新しいメッセージ</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"開始"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"カメラは利用できません"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"カメラは利用できません"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"動画撮影は利用できません"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"メディアを保存できません"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"写真を撮ることはできません"</string>
-    <string name="back" msgid="1477626055115561645">"戻る"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"アーカイブ済み"</string>
-    <string name="action_delete" msgid="4076795795307486019">"削除"</string>
-    <string name="action_archive" msgid="5437034800324083170">"アーカイブ"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"アーカイブ解除"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"通知を無効化"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"通知を有効化"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"連絡先を追加"</string>
-    <string name="action_download" msgid="7786338136368564146">"ダウンロード"</string>
-    <string name="action_send" msgid="377635240181672039">"送信"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"削除"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"このメッセージを削除しますか？"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"この操作は元に戻せません。"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"削除"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">これらのスレッドを削除しますか？</item>
-      <item quantity="one">このスレッドを削除しますか？</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"削除"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"キャンセル"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"宛先"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"複数の画像を選択"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"選択の確認"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"音声を録音できません。もう一度お試しください。"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"音声を再生できません。もう一度お試しください。"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"音声を保存できませんでした。もう一度お試しください。"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"長押し"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">"、 "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"写真"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"音声クリップ"</string>
-    <string name="notification_video" msgid="4331423498662606204">"動画"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"連絡先カード"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ダウンロード"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMSで返信"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMSで返信"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"返信"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other">参加者<xliff:g id="COUNT_1">%d</xliff:g>人</item>
-      <item quantity="one">参加者<xliff:g id="COUNT_0">%d</xliff:g>人</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"自分"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"連絡先がブロックされ、アーカイブされました"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"連絡先をブロック解除し、アーカイブを解除しました"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g>件をアーカイブしました"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g>件のアーカイブを解除しました"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"通知をオフにしました"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"通知をオンにしました"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"すべて設定されました。もう一度[送信]をタップしてください。"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"SMSを既定のSMSアプリとして設定しました。"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">添付ファイルを破棄</item>
-      <item quantity="one">添付ファイルを破棄</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"音声添付ファイル"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"音声添付ファイルの再生"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"一時停止"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g>さんからのメッセージは「<xliff:g id="MESSAGE">%2$s</xliff:g>」です。"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g>からのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」を受信できませんでした（時間: <xliff:g id="TIME">%3$s</xliff:g>）。"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g>からのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」を受信しました（時間: <xliff:g id="TIME">%3$s</xliff:g>）。"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g>へのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」が送信されていません（時間: <xliff:g id="TIME">%3$s</xliff:g>）。"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g>へのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」を送信しています（時間: <xliff:g id="TIME">%3$s</xliff:g>）。"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g>へのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」を送信できませんでした（時間: <xliff:g id="TIME">%3$s</xliff:g>）。"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g>へのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」を送信しました（時間: <xliff:g id="TIME">%3$s</xliff:g>）。"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g>からのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」を受信できませんでした（時間: <xliff:g id="TIME">%3$s</xliff:g>、<xliff:g id="GROUPINFO">%4$s</xliff:g>）。"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g>からのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」を受信しました（時間: <xliff:g id="TIME">%3$s</xliff:g>、<xliff:g id="GROUPINFO">%4$s</xliff:g>）。"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g>へのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」が送信されていません（時間: <xliff:g id="TIME">%3$s</xliff:g>）。"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g>へのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」を送信しています（時間: <xliff:g id="TIME">%3$s</xliff:g>）。"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g>へのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」を送信できませんでした（時間: <xliff:g id="TIME">%3$s</xliff:g>）。"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g>へのメッセージ「<xliff:g id="MESSAGE">%2$s</xliff:g>」を送信しました（時間: <xliff:g id="TIME">%3$s</xliff:g>）。"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"失敗したメッセージ。再試行するにはタップしてください。"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g>とのスレッド"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"件名を削除"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"動画を撮影"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"静止画を撮影"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"画像を撮影"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"動画の録画を開始"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"全画面カメラに切り替える"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"前面カメラと背面カメラを切り替える"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"録画を停止し、動画を添付する"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"動画の録画を停止"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"SMSの写真"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g>枚の写真を「<xliff:g id="ALBUMNAME_3">%s</xliff:g>」アルバムに保存しました</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g>枚の写真を「<xliff:g id="ALBUMNAME_1">%s</xliff:g>」アルバムに保存しました</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g>本の動画を「<xliff:g id="ALBUMNAME_3">%s</xliff:g>」アルバムに保存しました</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g>本の動画を「<xliff:g id="ALBUMNAME_1">%s</xliff:g>」アルバムに保存しました</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g>個の添付ファイルを「<xliff:g id="ALBUMNAME_3">%s</xliff:g>」アルバムに保存しました</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g>個の添付ファイルを「<xliff:g id="ALBUMNAME_1">%s</xliff:g>」アルバムに保存しました</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g>個の添付ファイルを「ダウンロード」に保存しました</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g>個の添付ファイルを「ダウンロード」に保存しました</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g>個の添付ファイルを保存しました</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g>個の添付ファイルを保存しました</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g>個の添付ファイルを保存できませんでした</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g>個の添付ファイルを保存できませんでした</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS添付ファイルを保存しました"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"設定"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"アーカイブ済み"</string>
-    <string name="action_close" msgid="1840519376200478419">"閉じる"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"詳細設定"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"デバッグ"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"通知"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"通知音"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"マナーモード"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"バイブレーション"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"ブロック済み"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS受取確認通知"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"送信するSMSの配信レポートを毎回リクエストする"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"自動取得"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMSメッセージを自動的に取得する"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"ローミング時に自動取得"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"ローミング時にMMSを自動取得"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"グループメッセージング"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"宛先が複数ある場合にMMSを使用して1通のメッセージとして送信する"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"既定のSMSアプリ"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"既定のSMSアプリ"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"電話番号"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"不明"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"メッセージ送信音"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMSのダンプ"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"受信したSMS生データを外部ストレージファイルにダンプする"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMSのダンプ"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"受信したMMS生データを外部ストレージファイルにダンプする"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"無線警報"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"メッセージオプション"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"テキストをコピー"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"詳細を表示"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"削除"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"転送"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"メッセージの詳細"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"形式: "</string>
-    <string name="text_message" msgid="7415419755252205721">"テキストメッセージ"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"マルチメディアメッセージ"</string>
-    <string name="from_label" msgid="1947831848146564875">"From: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"To: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"送信: "</string>
-    <string name="received_label" msgid="4442494712757995203">"受信: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"件名: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"サイズ: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"優先度: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"高"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"標準"</string>
-    <string name="priority_low" msgid="7398724779026801851">"低"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"差出人アドレスは非表示"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"添付ファイルの読み込み中はメッセージを送信できません。"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"添付ファイルを読み込めません。もう一度お試しください。"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"ネットワークの準備ができていません。もう一度お試しください。"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"テキストを削除"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"文字と数字の入力を切り替える"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"参加者を追加"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"参加者を確認"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"新しいスレッドを開始"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"この項目を選択する"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"動画を再生"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"ユーザーとオプション"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"デバッグ"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"ユーザーとオプション"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"全般"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"このスレッドのユーザー"</string>
-    <string name="action_call" msgid="6596167921517350362">"発信"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"メッセージの送信"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g>から&lt;/small&gt;&amp;lt:br/&gt;メッセージを送信"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">写真を送信します</item>
-      <item quantity="one">写真を送信します</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">音声を送信します</item>
-      <item quantity="one">音声を送信します</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">動画を送信します</item>
-      <item quantity="one">動画を送信します</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">連絡先カードを送信します</item>
-      <item quantity="one">連絡先カードを送信します</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">添付ファイルを送信します</item>
-      <item quantity="one">添付ファイルを送信します</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g>個の添付ファイルを送信する準備ができました</item>
-      <item quantity="one">1個の添付ファイルを送信する準備ができました</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"フィードバックを送信"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Playストアで表示"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"バージョン情報"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"バージョン%1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"オープンソースライセンス"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"通知"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"添付ファイルの上限に達しました"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"添付ファイルを読み込めませんでした。"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"連絡先に追加しますか？"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"連絡先を追加"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"件名"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"件名: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"連絡先カードを読み込んでいます"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"連絡先カードを読み込めませんでした"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"連絡先カードを表示"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>件の連絡先</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>件の連絡先</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"連絡先カード"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"誕生日"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"メモ"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"メールを転送"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"返信"</string>
-    <string name="plus_one" msgid="9010288417554932581">"、他1人"</string>
-    <string name="plus_n" msgid="8961547034116059566">"、他%d人"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMSは無効になっています"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"送信するには、SMSを既定のSMSアプリとして設定してください"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"SMSを既定のSMSアプリとして設定してください"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"変更"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"メッセージを受信するには、SMSを既定のSMSアプリとして設定してください"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMSメッセージ送信用の優先SIMが選択されていません"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"このアプリは端末の所有者によって許可されていません。"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"スレッドへの参加者が多すぎます"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">連絡先が無効です</item>
-      <item quantity="one">連絡先が無効です</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"カメラ画像を読み込めませんでした"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"あなた: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"下書き"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"新しいスレッドを開始すると、ここにリストが表示されます"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"アーカイブされたスレットがここに表示されます"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"スレッドを読み込んでいます…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"画像"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"音声クリップ"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"動画"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"連絡先カード"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"元に戻す"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"再試行"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"新しいメッセージを開始するには連絡先の名前か電話番号を入力してください"</string>
-    <string name="action_block" msgid="9032076625645190136">"ブロック"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g>さんをブロック"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g>さんのブロックを解除"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g>をブロックしますか？"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"この番号からのメッセージは引き続き受信しますが、通知は表示されなくなります。このスレッドはアーカイブされます。"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"ブロック中の連絡先"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ブロックを解除"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"ブロック中の連絡先"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"ドキュメントライブラリから画像を選択"</string>
-    <string name="sending_message" msgid="6363584950085384929">"メールを送信しています"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"メッセージを送信しました"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"モバイルデータがOFFになっています。設定を確認してください。"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"機内モードではメッセージを送信できません"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"メッセージを送信できませんでした"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"メッセージをダウンロードしました"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"モバイルデータがOFFになっています。設定を確認してください。"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"機内モードではメッセージをダウンロードできません"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"メッセージをダウンロードできませんでした"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"0"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"1"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"2"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"3"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"4"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"5"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"6"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"7"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"8"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"9"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"メッセージを送信できません（<xliff:g id="CARRIERNAME">%1$s</xliff:g>）、エラー<xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"メッセージを送信できません（不明な携帯通信会社）、エラー<xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"メッセージの送信失敗: サービスがネットワークで有効になっていません"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"メッセージの送信失敗: 無効な宛先アドレスです"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"メッセージの送信失敗: 無効なメッセージです"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"メッセージの送信失敗: サポートされていないコンテンツです"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"メッセージの送信失敗: サポートされていないメッセージです"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"メッセージの送信失敗: 大きすぎます"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"新しいメッセージ"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"表示"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"画像"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"適切なアプリが見つかりませんでした"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"宛先を削除"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"新しいメッセージ"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"キャンセル"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"アクセスポイントの編集"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"未設定"</string>
-    <string name="apn_name" msgid="1572691851070894985">"名前"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMSプロキシ"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMSポート"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APNタイプ"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APNを削除"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"新しいAPN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"保存"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"破棄"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"[名前]欄は必須です。"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APNは必須です。"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC欄は3桁で指定してください。"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC欄は2桁か3桁で指定してください。"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"デフォルトのAPN設定を復元しています。"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"デフォルトにリセット"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"デフォルトのAPN設定にリセットしました。"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"無題"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"アクセスポイント名"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"新しいAPN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"このユーザーはアクセスポイント名設定を利用できません"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"クリップボードにコピーしますか？"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"コピー"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"宛先: <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"全般"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"詳細設定"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"全般設定"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"詳細設定"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"「<xliff:g id="SIM_NAME">%s</xliff:g>」SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"SMSメッセージを全員に個別に送信し、返信があなただけに返されるようにします"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"1つのMMSを全員に送信します"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"不明な番号"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"新しいメッセージ"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"新しいメッセージがあります。"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIMの切り替え"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"SIMの切り替え（<xliff:g id="SIM_0">%1$s</xliff:g>を選択済み）"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"件名を編集"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIMを選択するか件名を編集します"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"録音するには押し続けます"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"新しいスレッドを開始"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"SMS"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"SMSリスト"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"SMS"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"新しいメッセージ"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"スレッドリスト"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"スレッドを読み込んでいます"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"メールを読み込んでいます"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"他のスレッドを見る"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"他のメールを見る"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"スレッドを削除しました"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"スレッドを削除しました。タップしてSMSの別のスレッドを表示します"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"ブロックしました"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"ブロックを解除しました"</string>
-    <string name="db_full" msgid="8459265782521418031">"空き容量が少なくなっています。一部のデータが失われる可能性があります。"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"添付ファイルの選択"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"選択の確認"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g>件選択済み"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"添付ファイルを1つ以上削除してから、もう一度お試しください。"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"メッセージの送信を試すことはできますが、添付ファイルを1つ以上削除しないと配信されない可能性があります。"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"送信できる動画は1件のメッセージにつき1本までです。追加した動画を削除してもう一度お試しください。"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"SMSで添付ファイルを読み込めませんでした。"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"このまま送信"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"スレッドを開始できませんでした"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g>（<xliff:g id="URL">%2$s</xliff:g>）"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g>が選択されています"</string>
-</resources>
diff --git a/res/values-ka/arrays.xml b/res/values-ka/arrays.xml
deleted file mode 100644
index 0f50610..0000000
--- a/res/values-ka/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"უსათაურო"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"კი"</item>
-    <item msgid="6049132459802288033">"არა"</item>
-    <item msgid="3084376867445867895">"კარგი"</item>
-    <item msgid="3155097332660174689">"ჰე-ჰე"</item>
-    <item msgid="2611328818571146775">"დიდი მადლობა"</item>
-    <item msgid="4881335087096496747">"თანახმა ვარ"</item>
-    <item msgid="2422296858597420738">"მშვენიერია"</item>
-    <item msgid="4805581752819452687">"მოვდივარ"</item>
-    <item msgid="4746700499431366214">"კარგი, მოგვიანებით შეგეხმიანები"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
deleted file mode 100644
index 8a2cd5e..0000000
--- a/res/values-ka/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"შეტყობინებები"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"შეტყობინებები"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"მიმოწერის არჩევა"</string>
-    <string name="action_settings" msgid="1329008122345201684">"პარამეტრები"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"წერილის გაგზავნა"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"დანართის დამატება"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"დახმარება"</string>
-    <string name="welcome" msgid="2857560951820802321">"მოგესალმებით"</string>
-    <string name="skip" msgid="7238879696319945853">"გამოტოვება"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"შემდეგი &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"შემდეგი"</string>
-    <string name="exit" msgid="1905187380359981199">"გასვლა"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"პარამეტრები &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"პარამეტრები"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"შეტყობინებები საჭიროებს ნებართვას SMS-ზე, ტელეფონზე და კონტაქტებზე."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"ნებართვების შეცვლა შეგიძლიათ აქ: პარამეტრები &gt; აპები &gt; შეტყობინებები &gt; ნებართვები."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"ნებართვების შეცვლა შეგიძლიათ აქ: პარამეტრები, აპები, შეტყობინებები, ნებართვები."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"ხშირად გამოყენებული კონტაქტები"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"ყველა კონტაქტი"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g>-ზე გაგზავნა"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"სურათების ან ვიდეოს გადაღება"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"ამ მოწყობილობიდან სურათების არჩევა"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"აუდიოს ჩაწერა"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ფოტოს არჩევა"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"მედია შერჩეულია."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"მედია არ არის შერჩეული."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> შერჩეულია"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"სურათის <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"სურათი"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"აუდიოს ჩაწერა"</string>
-    <string name="action_share" msgid="2143483844803153871">"გაზიარება"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ახლახანს"</string>
-    <string name="posted_now" msgid="867560789350406701">"ახლა"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> წთ.</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> წთ.</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> საათის</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> საათის</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> დღის</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> დღის</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> კვირის</item>
-      <item quantity="one">კვირის</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> თვის</item>
-      <item quantity="one">თვის</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> წლის</item>
-      <item quantity="one">წლის</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Class 0 შეტყობინება"</string>
-    <string name="save" msgid="5081141452059463572">"შენახვა"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"მოწყობილობის მეხსიერებაში თავისუფალი სივრცე ცოტაა. შეტყობინებები ავტომატურად წაშლის ძველ შეტყობინებებს მეხსიერების გასათავისუფლებლად."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"თავისუფალი ადგილი იწურება"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"შეტყობინებებმა შესაძლოა ვერ მოახერხოს შეტყობინებების გაგზავნა ან მიღება მანამ, სანამ თქვენს მოწყობილობაზე ხელმისაწვდომი არ გახდება მეტი სივრცე."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS სივრცე იწურება. შესაძლოა, მოგიწიოთ ძველი შეტყობინებების წაშლა"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"დაადასტურეთ თქვენი ტელეფონის ნომერი"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"ეს ერთჯერადი ნაბიჯი უზრუნველყოფს, რომ შეტყობინებებმა სწორად მოგაწოდოთ ჯგუფური შეტყობინებები."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ტელეფონის ნომერი"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"ყველა შეტყობინების წაშლა, რომელსაც მედია აქვს"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g>-ზე ძველი შეტყობინებების წაშლა"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g>-ზე ძველი შეტყობინებების ავტომატური წაშლა"</string>
-    <string name="ignore" msgid="7063392681130898793">"იგნორირება"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"წაიშალოს ყველა შეტყობინება, რომელსაც მედია აქვს?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"წაიშალოს <xliff:g id="DURATION">%s</xliff:g>-ზე ძველი შეტყობინებები?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"გსურთ <xliff:g id="DURATION">%s</xliff:g>-ზე უფრო ძველი შეტყობინებების წაშლა და ავტომატური წაშლის ჩართვა?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> თქვა"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"თქვენ სთქვით,"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"შეტყობინება <xliff:g id="SENDER">%s</xliff:g> -საგან"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"თქვენ გააგზავნეთ შეტყობინება"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"იგზავნება..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"არ გაიგზავნა. შეეხეთ ისევ საცდელად."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"არ გაიგზავნა. მიმდინარეობს ხელახლა ცდა…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"ხელახლა გაგზავნა ან წაშლა"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"გამოიძახეთ საგანგებო სამსახურები ხმოვანი ზარით. ტექსტური შეტყობინების გაგზავნა ამჟამად შეუძლებელია."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"ვერ განხორციელდა"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"ახალი ჩამოსატვირთი MMS შეტყობინება"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"ახალი MMS შეტ"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ჩამოტვირთვა ვერ მოხერხდა"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"ხელახლა საცდელად შეეხეთ"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"შეეხეთ ჩამოსატვირთად"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ჩამოტვირთვა ან წაშლა"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"მიმდინარეობს ჩამოტვირთვა…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"შეტყობინებას ვადა გაუვიდა ან მიუწვდომელია."</string>
-    <string name="mms_info" msgid="3402311750134118165">"ზომა: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, ვადა: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"გაგზავნა ვერ ხერხდება. მიმღები არასწორია."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"სერვისი არ გააქტიურებულა ქსელში"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"ქსელის პრობლემის გამო ვერ გაიგზავნა"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"შეტყობინებას ვადა გაუვიდა ან მიუწვდომელია."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(თემის გარეშე)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"უცნობი გამგზავნი"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"მიწოდებულია"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="SUBJECT">%1$s</xliff:g> შეტყობინების ჩამოტვირთვა ვერ მოხერხდა <xliff:g id="FROM">%2$s</xliff:g>-დან."</string>
-    <string name="low_memory" msgid="5300743415198486619">"მცირე მეხსიერების გამო მონაცემთა ბაზასთან დაკავშირებული ოპერაციის დასრულება ვერ მოხერხდა"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"შეტყობინება ვერ გაიგზავნა"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"შეტყობინებებში ზოგიერთი შეტყობინება ვერ გაიგზავნა"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> შეტყობინება <xliff:g id="CONVERSATIONS">%d</xliff:g> მიმოწერაში</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> შეტყობინება ერთ მიმოწერაში</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"შეტყობინება არ ჩამოტვირთულა"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"შეტყობინებებში ზოგიერთი შეტყობინება ვერ ჩამოიტვირთა"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> შეტყობინება <xliff:g id="CONVERSATIONS">%d</xliff:g> მიმოწერაში</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> შეტყობინება ერთ მიმოწერაში</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"შეტყობინება ნომერზე <xliff:g id="NUMBER">%1$s</xliff:g> ვერ გაიგზავნა"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"გამოიძახეთ საგანგებო სამსახურები ხმოვანი ზარით. ტექსტური შეტყობინების გაგზავნა ნომერზე <xliff:g id="NUMBER">%1$s</xliff:g> ამჟამად შეუძლებელია."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> ახალი შეტყობინება</item>
-      <item quantity="one">ახალი შეტყობინება</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"დაწყება"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"კამერა მიუწვდომელია"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"კამერა მიუწვდომელია"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"ვიდეო ჩაწერა მიუწვდომელია"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"მედიას შენახვა ვერ ვერხდება"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"ვერ ხორციელდება სურათის გადაღება"</string>
-    <string name="back" msgid="1477626055115561645">"უკან"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"დაარქივებული"</string>
-    <string name="action_delete" msgid="4076795795307486019">"წაშლა"</string>
-    <string name="action_archive" msgid="5437034800324083170">"დაარქივება"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"დეარქივაცია"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"შეტყობინებების გამორთვა"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"შეტყობინებების ჩართვა"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"კონტაქტის დამატება"</string>
-    <string name="action_download" msgid="7786338136368564146">"ჩამოტვირთვა"</string>
-    <string name="action_send" msgid="377635240181672039">"გაგზავნა"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"წაშლა"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"წავშალო ეს შეტყობინება?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"ამ ქმედებას ვერ გააუქმებთ."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"წაშლა"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">წაიშალოს ეს მიმოწერები?</item>
-      <item quantity="one">წაიშალოს ეს მიმოწერა?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"წაშლა"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"გაუქმება"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"მიმღები:"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"მრავალი სურათის არჩევა"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"არჩევანის დადასტურება"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ხმის ჩაწერა ვერ ხერხდენა. სცადეთ ისევ."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ხმის დაკვრა ვერ ხერხდება. სცადეთ ისევ."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ხმის ჩაწერა ვერ მოხერხდა. სცადეთ ისევ."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"შეეხეთ &amp; დააყოვნეთ"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"სურათი"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"აუდიო კლიპი"</string>
-    <string name="notification_video" msgid="4331423498662606204">"ვიდეო"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"კონტაქტის ბარათი"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ჩამოტვირთვა"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS-ით პასუხი"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS-ით პასუხი"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"პასუხი"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> მონაწილე</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> მონაწილე</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"მე"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"კონტაქტი დაბლოკილია &amp; დაარქივებულია"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"კონტაქტი განბლოკილია &amp; amp; დაუარქივებელი"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> დაარქივებული"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> დაუარქივებელი"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"შეტყობინებები გამორთულია"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"შეტყობინებები ჩართულია"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"მზად არის. შეეხეთ ხელახლა გაგზავნას."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"შეტყობინებები წარმატებით დაყენებულია ნაგულისხმევ SMS აპად."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">დანართების გაუქმება</item>
-      <item quantity="one">დანართის გაუქმება</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"აუდიო დანართი"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"აუდიო დანართის ჩართვა"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"პაუზა"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"შეტყობინება <xliff:g id="SENDER">%1$s</xliff:g>-საგან: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g>-საგან შეტყობინების შეცდომა: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"შეტყობინება <xliff:g id="SENDER">%1$s</xliff:g>-საგან: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g>-სთვის გაუგზავნელი შეტყობინება: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"იგზავნება შეტყობინება <xliff:g id="CONTACT">%1$s</xliff:g>-სთვის: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g>-სთვის შეტყობინების შეცდომა: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"შეტყობინება <xliff:g id="CONTACT">%1$s</xliff:g>-სთვის: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g>-საგან შეტყობინების შეცდომა: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"შეტყობინება <xliff:g id="SENDER">%1$s</xliff:g>-საგან: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"გაუგზავნელი შეტყობინება <xliff:g id="GROUP">%1$s</xliff:g>-სთვის: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"იგზავნება შეტყობინება <xliff:g id="GROUP">%1$s</xliff:g>-სთვის: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g>-სთვის შეტყობინების შეცდომა: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"შეტყობინება <xliff:g id="GROUP">%1$s</xliff:g>-სთვის: <xliff:g id="MESSAGE">%2$s</xliff:g>. დრო: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"შეტყობინების შეცდომა. შეეხეთ, რათა ხელახლა სცადოთ."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"საუბარი <xliff:g id="PARTICIPANTS">%s</xliff:g> -სთან"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"თემის წაშლა"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"ვიდეოს გადაღება"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"ფოტოსურათის აღბეჭდვა"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"სურათის გადაღება"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"ვიდეოს ჩაწერის დაწყება"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"სრულეკრანიან კამერაზე გადართვა"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"წინა და უკანა კამერებს შორის გადართვა"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"ჩაწერის შეჩერება და ვიდეოს მიბმა"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"ვიდეოს ჩაწერის შეჩერება"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"შეტყობინებების ფოტოები"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ფოტო შენახულია ალბომში „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ფოტო შენახულია ალბომში „<xliff:g id="ALBUMNAME_1">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ვიდეო შენახულია ალბომში „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ვიდეო შენახულია ალბომში „<xliff:g id="ALBUMNAME_1">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> მიმაგრებული ფაილი შენახულია ალბომში „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> მიმაგრებული ფაილი შენახულია ალბომში „<xliff:g id="ALBUMNAME_1">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> მიმაგრებული ფაილი შენახულია „ჩამოტვირთვებში“</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> მიმაგრებული ფაილი შენახულია „ჩამოტვირთვებში“</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">შენახულია <xliff:g id="QUANTITY_1">%d</xliff:g> დანართი</item>
-      <item quantity="one">შენახულია <xliff:g id="QUANTITY_0">%d</xliff:g> დანართი</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> დანართის შენახვა ვერ მოხერხდა</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> დანართის შენახვა ვერ მოხერხდა</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS დანართი შენახულია"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"პარამეტრები"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"დაარქივებული"</string>
-    <string name="action_close" msgid="1840519376200478419">"დახურვა"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"გაფართოებული"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"გამართვა"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"შეტყობინებები"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ხმა"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"დადუმებული"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"ვიბრაცია"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"დაბლოკილი"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS მისვლის შეტყობინებები"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"ყოველ გაგზავნილ SMS-ზე მიწოდების დადასტურების მოთხოვნა"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"ავტო-მოძიება"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS შეტყობინებების ავტომატურად ჩამოტვირთვა"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"ავტო ჩამოტვირთვა როუმინგში"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"როუმინგის დროს MMS-ის ავტომატური ჩამოტვირთვა"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"ჯგუფური შეტყობინება"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"მრავალი მიმღების შემთხვევაში ერთიანი შეტყობინების გასაგზავნად MMS-ის გამოყენება"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"ნაგულისხმევი SMS აპლიკაცია"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"ნაგულისხმევი SMS აპლიკაცია"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"თქვენი ტელეფონის ნომერი"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"უცნობი"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"გამავალი შეტყობინების ჟღერადობები"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS-ის ჩაწერა"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"მიღებული SMS-ის დაუმუშავებელი მონაცემების გარე საცავის ფაილში ჩაწერა"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS-ის ჩაწერა"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"მიღებული MMS-ის დაუმუშავებელი მონაცემების გარე საცავის ფაილში ჩაწერა"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"უსადენო გაფრთხილებები"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"შეტყობინების პარამეტრები"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"ტექსტის კოპირება"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"დეტალების ნახვა"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"წაშლა"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"გადაგზავნა"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"შეტყობინების მონაცემები"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"ტიპი: "</string>
-    <string name="text_message" msgid="7415419755252205721">"ტექსტური შეტყობინება"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"მულტიმედია შეტყობინება"</string>
-    <string name="from_label" msgid="1947831848146564875">"გამგზავნი: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"მიმღები: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"გაიგზავნა: "</string>
-    <string name="received_label" msgid="4442494712757995203">"მიღებულია: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"თემა: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"ზომა: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"პრიორიტეტი: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"მაღალი"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"ჩვეულებრივი"</string>
-    <string name="priority_low" msgid="7398724779026801851">"დაბალი"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"გამგზავნის მისამართი დამალულია"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"დანართების ჩატვირთვისას შეტყობინება ვერ გაიგზავნება."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"დანართი ვერ იტვირთება. სცადეთ ისევ."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"ქსელი მზად არ არის. ისევ სცადეთ."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"შემდეგის წაშლა"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"ტექსტისა და რიცხვების შეყვანას შორის გადართვა"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"მეტი მონაწილის დამატება"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"მონაწილეების დადასტურება"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"ახალი მიმოწერის დაწყება"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"ამ ერთეულის არჩევა"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"ვიდეოს დაკვრა"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"ხალხი &amp; ვარიანტები"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"გამართვა"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"ხალხი &amp; ვარიანტები"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"ზოგადი"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"ამ საუბრის მონაწილეები"</string>
-    <string name="action_call" msgid="6596167921517350362">"დარეკვა"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"შეტყობინების გაგზავნა"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"შეტყობინების გაგზავნა&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g>-დან&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">ფოტოების გაგზავნა</item>
-      <item quantity="one">ფოტოს გაგზავნა</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">აუდიო ჩანაწერების გაგზავნა</item>
-      <item quantity="one">აუდიო ჩანაწერის გაგზავნა</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">ვიდეოების გაგზავნა</item>
-      <item quantity="one">ვიდეოს გაგზავნა</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">კონტაქტის ბარათების გაგზავნა</item>
-      <item quantity="one">კონტაქტის ბარათის გაგზავნა</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">დანართების გაგზავნა</item>
-      <item quantity="one">დანართის გაგზავნა</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> დანართი მზად არის გასაგზავნად</item>
-      <item quantity="one">გასაგზავნად მზად არის ერთი დანართი</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"უკუკავშირის გაგზავნა"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Store-ში ნახვა"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"ვერსიის ინფორმაცია"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"ვერსია %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"ღია კოდის ლიცენზიები"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"შეტყობინებები"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"მიღწეულია დანართების ლიმიტი"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"დანართი ვერ ჩაიტვირთა."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"დაემატოს კონტაქტებში?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"კონტაქტის დამატება"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"თემა"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"თემა: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"იტვირთება კონტაქტის ბარათი"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"საკონტაქტო ბარათი ვერ იტვირთება"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"კონტაქტის ბარათის ნახვა"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> კონტაქტი</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> კონტაქტი</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"კონტაქტის ბარათები"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"დაბადების თარიღი"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"ჩანიშვნები"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"შეტყობინების გადაგზავნა"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"პასუხი"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS გამორთულია"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"გასაგზავნად დააყენეთ შეტყობინებები ნაგულისხმევ SMS აპად"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"დააყენეთ შეტყობინებები ნაგულისხმევ SMS აპად"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"შეცვლა"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"შეტყობინებების მისაღებად დააყენეთ შეტყობინებები ნაგულისხმევ SMS აპად"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"მოკლე ტექსტური შეტყობინებების გაგზავნისათვის, არ არის არჩეული უპირატესი SIM ბარათი"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"ეს აპი მოწყობილობის მფლობელის მიერ ნებადართული არ არის."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"კარგი"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"მიმოწერაში ძალიან ბევრი მონაწილეა"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">კონტაქტები არასწორია</item>
-      <item quantity="one">კონტაქტი არასწორია</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"კამერის სურათი ვერ ჩაიტვირთა"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"თქვენ: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"მონახაზი"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"როდესაც საუბარს წამოიწყებთ, ისინი აქ გამოჩნდება"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"დაარქივებული მიმოწერები აქ გამოჩნდება"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"მიმოწერები იტვირთება…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"სურათი"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"აუდიო კლიპი"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"ვიდეო"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"კონტაქტის ბარათი"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"დაბრუნება"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"ხელახლა ცდა"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"ახალი შეტყობინების დასაწყებად შეიყვანეთ საკონტაქტო სახელი ან ტელეფონის ნომერი"</string>
-    <string name="action_block" msgid="9032076625645190136">"დაბლოკვა"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g>-ის დაბლოკვა"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g>-ის განბლოკვა"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g>-ის დაბლოკვა?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"ამ ნომრიდან შეტყობინებებს კვლავ მიიღებთ, თუმცა შეხსენებები აღარ გამოგეგზავნებათ. ეს მიმოწერა დაარქივდება."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"დაბლოკილი კონტაქტები"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"განბლოკვა"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"დაბლოკილი კონტაქტები"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"აირჩიეთ სურათი დოკუმენტების ბიბლიოთეკიდან"</string>
-    <string name="sending_message" msgid="6363584950085384929">"შეტყობინება იგზავნება"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"შეტყობინება გაიგზავნა"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"მობილური ინტერნეტი გამორთულია. გადაამოწმეთ პარამეტრები."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"თვითმფრინავის რეჟიმში შეტყობინებების გაგზავნა ვერ ხერხდება"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"შეტყობინება ვერ გაიგზავნა"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"შეტყობინება გადმოწერილია"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"მობილური ინტერნეტი გამორთულია. გადაამოწმეთ პარამეტრები."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"თვითმფრინავის რეჟიმში შეტყობინების ჩამოტვირთვა ვერ ხორციელდება"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"შეტყობინების ჩამოტვირთვა ვერ ხორციელდება"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"ნული"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"ერთი"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"ორი"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"სამი"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"ოთხი"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"ხუთი"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ექვსი"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"შვიდი"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"რვა"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"ცხრა"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"შეტყობინება ვერ იგზავნება: <xliff:g id="CARRIERNAME">%1$s</xliff:g>-ის შეცდომა <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"შეტყობინება ვერ იგზავნება უცნობი ოპერატორით, შეცდომა <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"შეტყობინება ვერ გაიგზავნა: სერვისი ქსელში გააქტიურებელი არ არის"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"შეტყობინება ვერ გაიგზავნა: სამიზნე მისამართი არასწორია"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"შეტყობინება ვერ გაიგზავნა: შეტყობინება არასწორია"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"შეტყობინება ვერ გაიგზავნა: კონტენტი მხარდაჭერილი არ არის"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"შეტყობინება ვერ გაიგზავნა: შეტყობინება მხარდაჭერილი არ არის"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"შეტყობინება არ გაიგზავნა: ის ძალიან დიდია"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"ახალი შეტყობინება"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"ნახვა"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"სურათი"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"შესაბამისი აპლიკაცია ვერ მოიძებნა"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"მიმღების ამოღება"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"ახალი შეტყობინება"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"გაუქმება"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"წვდომის წერტილის რედაქტირება"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"არ არის დაყენებული"</string>
-    <string name="apn_name" msgid="1572691851070894985">"სახელი"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS პროქსი-სერვერი"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS პორტი"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN ტიპი"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN-ის წაშლა"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"ახალი APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"შენახვა"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"გაუქმება"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"სახელის ველი არ შეიძლება იყოს ცარიელი."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN არ უნდა იყოს ცარიელი."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC ველი უნდა შეიცავდეს 3 ციფრს."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC ველი უნდა შეიცავდეს ორ ან სამ ციფრს."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"ნაგულისხმევი APN პარამეტრების აღდგენა."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"საწყის პარამეტრებზე ჩამოყრა"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"ნაგულისხმევი APN პარამეტრების  აღდგენა დასრულებულია."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"უსათაურო"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"წვდომის წერტილის სახელები (APNs)"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-ები"</string>
-    <string name="menu_new" msgid="8286285392706532511">"ახალი APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"წვდომის წერტილის (APN) პარამეტრები ამ მომხმარებლისათვის მიუწვდომელია"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"გსურთ ბუფერში კოპირება?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"კოპირება"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g>-ზე"</string>
-    <string name="general_settings" msgid="5409336577057897710">"ზოგადი"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"გაფართოებული"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"ძირითადი პარამეტრები"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"დამატებითი პარამეტრები"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"„<xliff:g id="SIM_NAME">%s</xliff:g>“ SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"ყველა მიმღებთან ინდივიდუალური SMS შეტყობინების გაგზავნა. პასუხებს მხოლოდ თქვენ მიიღებთ"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"ყველა მიმღებთან ერთი MMS-ის გაგზავნა"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"უცნობი ნომერი"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"ახალი შეტყობინება"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"ახალი შეტყობინება."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM სელექტორი"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"არჩეულია <xliff:g id="SIM_0">%1$s</xliff:g>, SIM სელექტორი"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"თემის რედაქტირება"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"აირჩიეთ SIM ან შეცვალეთ სათაური"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"აუდიო ჩაწერისათვის შეეხეთ და დააყოვნეთ"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"ახალი მიმოწერის დაწყება"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"შეტყობინებები"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"შეტყობინებების სია"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"შეტყობინებები"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"ახალი შეტყობინება"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"მიმოწერათა სია"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"მიმოწერები იტვირთება…"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"მიმდინარეობს შეტყობინებების ჩატვირთვა"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"მეტი მიმოწერის ნახვა"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"იხილეთ სხვა შეტყობინებები"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"მიმოწერა წაშლილია"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"მიმოწერა წაშლილია. შეეხეთ შეტყობინებების სხვა მიმოწერის საჩვენებლად"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"დაბლოკილი"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"განბლოკილი"</string>
-    <string name="db_full" msgid="8459265782521418031">"შენახვის სივრცეში შემცირებულია. ზოგიერთი მონაცემი შეიძლება დაიკარგოს."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"დანართის არჩევა"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"არჩევანის დადასტურება"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> შერჩეულია"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"წაშალეთ ერთი ან რამდენიმე დანართი და ხელახლა სცადეთ."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"შეგიძლიათ სცადოთ შეტყობინების გაგზავნა, მაგრამ შეიძლება მისი მიწოდება ვერ მოხერხდეს, თუ არ წაშლით ერთ ან რამდენიმე დანართს."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"შეტყობინებით თქვენ შეგიძლიათ გააგზავნოთ მხოლოდ ერთი ვიდეო. გთხოვთ ამოშალეთ დამატებითი ვიდეოები და სცადეთ კიდევ ერთხელ."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"შეტყობინებებში დანართის ჩატვირთვა ვერ მოხერხდა."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"მაინც გაგზავნა"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"საუბრის დაწყება ვერ მოხერხდა"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"შერჩეულია <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-kk/arrays.xml b/res/values-kk/arrays.xml
deleted file mode 100644
index b49d0cc..0000000
--- a/res/values-kk/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"тақырыпсыз"</item>
-    <item msgid="272485471009191934">"тақырып жоқ"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Иә"</item>
-    <item msgid="6049132459802288033">"Жоқ"</item>
-    <item msgid="3084376867445867895">"Жарайды"</item>
-    <item msgid="3155097332660174689">"Хехе"</item>
-    <item msgid="2611328818571146775">"Рақмет"</item>
-    <item msgid="4881335087096496747">"Келісемін"</item>
-    <item msgid="2422296858597420738">"Жақсы"</item>
-    <item msgid="4805581752819452687">"Жолдамын"</item>
-    <item msgid="4746700499431366214">"Жарайды, кейінірек хабарласамын"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
deleted file mode 100644
index 386e8ef..0000000
--- a/res/values-kk/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Хабар алмасу"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Хабар алмасу"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Сөйлесуді таңдау"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Параметрлер"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Хабар жіберу"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Тіркеме қосу"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Анықтама"</string>
-    <string name="welcome" msgid="2857560951820802321">"Қош келдіңіз"</string>
-    <string name="skip" msgid="7238879696319945853">"Өткізіп жіберу"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Келесі &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Келесі"</string>
-    <string name="exit" msgid="1905187380359981199">"Шығу"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Параметрлер &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Параметрлер"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Messaging қолданбасына SMS, \"Телефон\" және \"Контактілер\" қолданбаларына рұқсат қажет."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Рұқсаттарды \"Параметрлер\" &gt; \"Қолданбалар\" &gt; \"Messaging\" &gt; \"Рұқсаттар\" тармағында өзгертуге болады."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Рұқсаттарды \"Параметрлер\", \"Қолданбалар\", \"Messaging\", \"Рұқсаттар\" тармағында өзгерте аласыз."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Жиі қолданылатын"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Барлық контактілер"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> орнына жіберу"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Суреттер немесе бейне түсіру"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Осы құрылғыдан кескіндерді таңдау"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Аудио жазу"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Фотосуретті таңдау"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Медиа таңдалды."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Медиадан таңдау алынды."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> таңдалды"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"кескін <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"кескін"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Аудио жазу"</string>
-    <string name="action_share" msgid="2143483844803153871">"Бөлісу"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Қазір ғана"</string>
-    <string name="posted_now" msgid="867560789350406701">"Қазір"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> мин.</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> мин.</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> сағат</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> сағат</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> күн</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> күн</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> апта</item>
-      <item quantity="one">апта</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ай</item>
-      <item quantity="one">ай</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> жыл</item>
-      <item quantity="one">жыл</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"0 сыныпты хабар"</string>
-    <string name="save" msgid="5081141452059463572">"Сақтау"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Құрылғыдағы бос орын аз. \"Хабар алмасу\" орын босату үшін ескі хабарларды автоматты түрде жояды."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Жадта бос орын бітуде"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"\"Хабар алмасу\" қолданбасы құрылғыда көбірек бос орын қол жетімді болғанша хабарлар жібере немесе ала алмауы мүмкін."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS жадында орын аз. Хабарларды жою керек болуы мүмкін."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Телефон нөміріңізді растау"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Бұл бір реттік қадам Messaging қолданбасының топтық хабарларды тиісті түрде жеткізуін қамтамасыз етеді."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Телефон нөмірі"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Тасушы арқылы барлық хабарларды жою"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> уақыттан асқан хабарларды жою"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> ескірек хабарларды автоматты түрде жою"</string>
-    <string name="ignore" msgid="7063392681130898793">"Елемеу"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Медиа бар барлық хабарларды жою керек пе?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> ескірек хабарларды жою керек пе?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> ескірек хабарларды жою және автоматты түрде жоюды қосу керек пе?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> айтты"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Сіз айттыңыз"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Хабар, кімнен: <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Сіз хабар жібердіңіз"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Жіберілуде…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Жіберілмеді. Әрекетті қайталау үшін түртіңіз."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Жіберілмеді. Әрекет қайталануда…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Қайта жіберу немесе жою"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Жедел қызметтерге дауыстық қоңырау соғыңыз. Бұл ретте мәтіндік хабарды жеткізу мүмкін болмады."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Сәтсіз аяқталды"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Жүктейтін жаңа MMS хабары бар"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Жаңа MMS хабары"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Жүктеу мүмкін болмады"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Әрекетті қайталау үшін түртіңіз"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Жүктеу үшін түртіңіз"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Жүктеу немесе жою"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Жүктелуде…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Хабар мерзімі бітті немесе ол қол жетімді емес"</string>
-    <string name="mms_info" msgid="3402311750134118165">"өлшемі: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, мерзімі бітетін уақыт: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Жіберу мүмкін емес. Алушы жарамсыз."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Қызмет желіде белсендірілмеген"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Желілік мәселеге байланысты жіберу мүмкін болмады"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Хабар мерзімі бітті немесе ол қол жетімді емес"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Тақырыпсыз)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Белгісіз хабар жіберуші"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Жеткізілді"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="SUBJECT">%1$s</xliff:g> хабарын <xliff:g id="FROM">%2$s</xliff:g> арқылы жүктеу мүмкін болмады."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Жад көлемінің аз болуына байланысты дерекқор әрекетін аяқтау мүмкін болмады"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Хабар жіберілмеді"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Messaging қолданбасында кейбір хабарлар жіберілмеген"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> сөйлесуде <xliff:g id="MESSAGES_1">%d</xliff:g> хабар</item>
-      <item quantity="one">бір сөйлесуде <xliff:g id="MESSAGES_0">%d</xliff:g> хабар</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Хабар жүктелмеген"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Messaging қолданбасында кейбір хабарлар жүктелмеген"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> сөйлесуде <xliff:g id="MESSAGES_1">%d</xliff:g> хабар</item>
-      <item quantity="one">бір сөйлесуде <xliff:g id="MESSAGES_0">%d</xliff:g> хабар</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> нөміріне хабар жіберілмеді"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Жедел қызметтерге дауыстық қоңырау соғыңыз. Бұл ретте <xliff:g id="NUMBER">%1$s</xliff:g> нөміріне мәтіндік хабарды жеткізу мүмкін болмады."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> жаңа хабар</item>
-      <item quantity="one">Жаңа хабар</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Бастау"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Камера қол жетімді емес"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Камера қол жетімді емес"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Бейне түсіру қол жетімді емес"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Медианы сақтау мүмкін емес"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Сурет түсіру мүмкін емес"</string>
-    <string name="back" msgid="1477626055115561645">"Артқа"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Мұрағатталды"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Жою"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Мұрағаттау"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Мұрағаттан шығару"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Хабарландыруларды өшіру"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Хабарландыруларды қосу"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Контакт қосу"</string>
-    <string name="action_download" msgid="7786338136368564146">"Жүктеу"</string>
-    <string name="action_send" msgid="377635240181672039">"Жіберу"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Жою"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Бұл хабарды жою қажет пе?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Бұл әрекетті болдырмау мүмкін емес."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Жою"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Осы сөйлесулерді жою қажет пе?</item>
-      <item quantity="one">Осы сөйлесуді жою қажет пе?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Жою"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Бас тарту"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Кімге"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Бірнеше кескінді таңдау"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Таңдауды растау"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Аудионы жазу мүмкін емес. Әрекетті қайталаңыз."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Аудионы ойнату мүмкін емес. Әрекетті қайталаңыз."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Аудионы сақтау мүмкін болмады. Әрекетті қайталаңыз."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Түрту және ұстап тұру"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Фотосурет"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Аудиоклип"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Бейне"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Контакт карточкасы"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Жүктеу"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS арқылы жауап беру"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS ар. жау. б."</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Жауап беру"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> қатысушы</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> қатысушы</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Мен"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Контакт бөгелді және мұрағатталды"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Контакт құлыптан босатылды және мұрағаттан шығарылды"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> мұрағатталды"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> мұрағаттан шығарылды"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Хабарландырулар өшірілген"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Хабарландырулар қосылған"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Бәрі орнатылды. «Қайта жіберу» пәрменін түртіңіз."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"\"Хабар алмасу\" қолданбасы әдепкі SMS қолданбасы ретінде сәтті орнатылды."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Тіркемелерді алып тастау</item>
-      <item quantity="one">Тіркемені алып тастау</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Аудио тіркеме"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Аудио тіркемені ойнату"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Кідірту"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> хабары: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> сәтсіз хабары: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> хабары: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> тобына жіберілмеген хабар: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> тобына хабар жіберілуде: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> тобына сәтсіз хабар: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> тобына хабар: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> сәтсіз хабары: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> хабары: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> тобына жіберілмеген хабар: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> тобына хабар жіберілуде: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> тобына сәтсіз хабар: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> тобына хабар: <xliff:g id="MESSAGE">%2$s</xliff:g>. Уақыт: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Сәтсіз хабар. Қайталау үшін түртіңіз."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> адаммен сөйлесу"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Тақырыпты жою"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Бейне түсіру"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Фотосурет түсіру"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Сурет түсіру"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Бейне жазуды бастау"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Толық экранды камераға ауысу"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Алдыңғы және артқы камера арасында ауысу"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Жазуды тоқтату және бейне тіркеу"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Бейне жазуды тоқтату"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Messaging фотосуреттері"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> фотосурет «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» альбомына сақталды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> фотосурет «<xliff:g id="ALBUMNAME_1">%s</xliff:g>» альбомына сақталды</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> бейне «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» альбомына сақталды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> бейне «<xliff:g id="ALBUMNAME_1">%s</xliff:g>» альбомына сақталды</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> тіркеме «<xliff:g id="ALBUMNAME_3">%s</xliff:g>» альбомына сақталды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> тіркеме «<xliff:g id="ALBUMNAME_1">%s</xliff:g>» альбомына сақталды</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> тіркеме «Жүктеулер» ішіне сақталды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> тіркеме «Жүктеулер» ішіне сақталды</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> тіркеме сақталды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> тіркеме сақталды</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> тіркемені сақтау мүмкін болмады</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> тіркемені сақтау мүмкін болмады</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS тіркемесі сақталды"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Параметрлер"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Мұрағатталды"</string>
-    <string name="action_close" msgid="1840519376200478419">"Жабу"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Кеңейтілген"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Күйін келтіру"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Хабарландырулар"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Дыбыс"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Үнсіз"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Дірілдеу"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Бөгелген"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS жеткізу туралы есептер"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Әр жіберілген SMS үшін жеткізу туралы есепті сұрау"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Авто шығарып алу"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS хабарларын автоматты түрде шығарып алу"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Роуминг кезінде авто-шығарып алу"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Роумингте MMS автоматты түрде шығарып алу"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Топтық хабар алмасу"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Бірнеше алушыға бір хабар жіберу үшін MMS пайдалану"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Әдепкі SMS қолданбасы"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Әдепкі SMS қолданбасы"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Телефон нөміріңіз"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Белгісіз"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Шығыс хабар дыбыстары"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS дампын сақтау"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Алынған SMS өңделмеген деректерінің дампын сыртқы қойма файлына сақтау"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS дампын сақтау"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Алынған MMS өңделмеген деректерінің дампын сыртқы қойма файлына сақтау"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Сымсыз дабылдар"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Хабар опциялары"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Мәтінді көшіру"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Мәліметтерді көру"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Жою"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Қайта жіберу"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Хабар мәліметтері"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tүрі: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Мәтіндік-хабар"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mультимедиалық хабар"</string>
-    <string name="from_label" msgid="1947831848146564875">"Кімнен: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Кімге: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Жіберілді: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Қабылданды: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Тақырып: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Өлшем: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Басымдық: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Жоғары"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Қалыпты"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Төмен"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Жіберуші мекенжайы жасырын"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Тіркемелерді жүктеу кезінде хабар жіберу мүмкін емес."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Тіркемені жүктеу мүмкін емес. Әрекетті қайталаңыз."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Желі дайын емес. Әрекетті қайталаңыз."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Мәтінді жою"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Мәтінді және сандарды енгізу арасында ауысу"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Қосымша қатысушыларды қосу"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Қатысушыларды растау"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Жаңа сөйлесуді бастау"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Осы элементті таңдау"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Бейнені ойнату"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Адамдар және опциялар"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Күйін келтіру"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Адамдар және опциялар"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Жалпы"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Осы сөйлесудегі адамдар"</string>
-    <string name="action_call" msgid="6596167921517350362">"Қоңырау шалу"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Хабарды жіберу"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt; картасынан хабар жіберу"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Фотосуреттер жіберу</item>
-      <item quantity="one">Фотосурет жіберу</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Аудиолар жіберу</item>
-      <item quantity="one">Аудио жіберу</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Бейнелер жіберу</item>
-      <item quantity="one">Бейне жіберу</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Контакті карточкаларын жіберу</item>
-      <item quantity="one">Контакті карточкасын жіберу</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Тіркемелер жіберу</item>
-      <item quantity="one">Тіркеме жіберу</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> тіркеме жіберуге дайын</item>
-      <item quantity="one">Бір тіркеме жіберуге дайын</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Пікір жіберу"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Store дүкенінде көру"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Нұсқа туралы ақпарат"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Нұсқа: %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Ашық бастапқы код лицензиялары"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Хабарландырулар"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Тіркеме шегіне жеттіңіз"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Тіркемені жүктеу сәтсіз аяқталды."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Контактілерге қосу керек пе?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Контакт қосу"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Тақырып"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Тақырып: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Контакт карточкасы жүктелуде"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Контакт картасын жүктеу мүмкін болмады"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Контакт карточкасын көру"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакт</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> контакт</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Контакт карталары"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Туған күн"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Ескертпелер"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Хабарды қайта жіберу"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Жауап беру"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS өшірілген"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Жіберу үшін \"Хабар алмасу\" қолданбасын әдепкі SMS қолданбасы ретінде орнатыңыз"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"\"Хабар алмасу\" қолданбасын әдепкі SMS қолданбасы ретінде орнату"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Өзгерту"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Хабарлар алу үшін Messaging қолданбасын әдепкі SMS қолданбасы ретінде орнатыңыз"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS хабарларын жіберу үшін таңдаулы SIM таңдалмаған"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Құрылғы иесі бұл қолданбаға рұқсат етпеген."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Жарайды"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Сөйлесуде қатысушылар тым көп"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Жарамсыз контактілер</item>
-      <item quantity="one">Жарамсыз контакті</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Камера кескінін жүктеу мүмкін болмады"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Сіз: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Жоба"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Басталған жаңа сөйлесуді осы жерде тізімнен көресіз"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Мұнда мұрағатталған сөйлесулер көрсетіледі"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Сөйлесулер жүктелуде…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Сурет"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Аудиоклип"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Бейне"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Контакт карточкасы"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Болдырмау"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Қайталау"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Жаңа хабарды бастау үшін контакт атын немесе телефон нөмірін енгізіңіз"</string>
-    <string name="action_block" msgid="9032076625645190136">"Бөгеу"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> бөгеу"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> бөгеуден шығару"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> бөгеу керек пе?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Сіз осы нөмірден хабарлар алуды жалғастырасыз, бірақ енді хабардар етілмейсіз. Бұл сөйлесу мұрағатталады."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Бөгелген контактілер"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"БӨГЕУДЕН ШЫҒАРУ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Бөгелген контактілер"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Құжаттар кітапханасынан кескінді таңдау"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Хабар жіберілуде"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Хабар жіберілді"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Ұялы деректер өшірілген. Параметрлерді тексеріңіз."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Ұшақ режимінде хабарлар жіберу мүмкін емес"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Хабарды жіберу мүмкін болмады"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Хабар жүктелді"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Ұялы деректер өшірілген. Параметрлерді тексеріңіз."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Ұшақ режимінде хабарларды жүктеу мүмкін емес"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Хабарды жүктеу мүмкін болмады"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Нөл"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Бір"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Екі"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Үш"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Төрт"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Бес"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Алты"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Жеті"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Сегіз"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Тоғыз"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> арқылы хабар жіберілмейді, <xliff:g id="ERRORCODE">%2$d</xliff:g> қатесі"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Белгісіз оператормен хабар жіберілмейді, <xliff:g id="ERRORCODE">%1$d</xliff:g> қатесі"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Қайта жіберілген: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Хабар жіберілмеді, желіде қызмет белсендірілмеген"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Хабар жіберілмеді: жарамсыз межелі мекенжай"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Хабар жіберілмеді: жарамсыз хабар"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Хабар жіберілмеді: қолдау көрсетілмейтін мазмұн"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Хабар жіберілмеді: қолдау көрсетілмейтін хабар"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Хабар жіберілмеді: тым үлкен"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Жаңа хабар"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Көру"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Кескін"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Тиісті қолданбаны табу мүмкін болмады"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Алушыны жою"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Жаңа хабар"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Бас тарту"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Кіру нүктесін өңдеу"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Орнатылмаған"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Аты"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS прокси"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS порты"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN түрі"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN жою"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Жаңа APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Сақтау"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Алып тастау"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Атау өрісі бос болмауы тиіс."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN бос болмауы тиіс."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC өрісі 3 цифрдан тұруы тиіс."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC өрісі 2 немесе 3 цифрдан тұруы тиіс."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Әдепкі APN параметрлерін қалпына келтіру."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Әдепкі параметрлерге қалпына келтіру"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Әдепкі APN параметрлерін қалпына келтіру аяқталды."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Атаусыз"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Кіру нүктесі атаулары"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs (Кіру нүктесі атаулары)"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Жаңа APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Кіру нүктесі атауының параметрлері осы пайдаланушы үшін қол жетімді емес"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Аралық сақтағышқа көшіру керек пе?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Көшіру"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> картасына"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Жалпы"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Кеңейтілген"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Жалпы параметрлер"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Қосымша параметрлер"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"«<xliff:g id="SIM_NAME">%s</xliff:g>» SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Барлық алушыларға SMS хабарларын жіберіңіз. Жауаптарды тек сіз аласыз"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Барлық алушыларға бір MMS жіберу"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Белгісіз нөмір"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Жаңа хабар"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Жаңа хабар"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM таңдағыш"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> таңдалды, SIM таңдағыш"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Тақырыпты өңдеу"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM картасын таңдау немесе тақырыпты өңдеу"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Аудио жазу үшін түртіп, ұстап тұрыңыз"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Жаңа сөйлесуді бастау"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Хабар алмасу"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Хабар алмасу тізімі"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Хабар алмасу"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Жаңа хабар"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Сөйлесімдер тізімі"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Сөйлесулер жүктелуде"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Хабарлар жүктелуде"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Көбірек сөйлесулерді көру"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Қосымша хабарларды көру"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Сөйлесу жойылды"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Сөйлесу жойылды. Басқа \"Хабар алмасу\" сөйлесуін көрсету үшін түртіңіз"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Бөгелген"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Бөгеуден шығарылған"</string>
-    <string name="db_full" msgid="8459265782521418031">"Жадтағы бос орын аз. Кейбір деректер жоғалуы мүмкін."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Тіркемелерді таңдау"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Таңдауды растау"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> таңдалды"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Бір немесе бірнеше тіркемені жойып, әрекетті қайталаңыз."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Хабарды жіберіп көре аласыз, бірақ бір немесе бірнеше тіркемені жоймасаңыз, ол жеткізілмеуі мүмкін."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Әр хабарламада бір ғана бейне жіберуге болады. Қосымша бейнелерді жойып, әрекетті қайталаңыз."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Messaging тіркемені жүктей алмады."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Бәрібір жіберу"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Сөйлесуді бастау мүмкін болмады"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> таңдалған"</string>
-</resources>
diff --git a/res/values-km/arrays.xml b/res/values-km/arrays.xml
deleted file mode 100644
index 69f6e0d..0000000
--- a/res/values-km/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"គ្មាន​ប្រធានបទ"</item>
-    <item msgid="272485471009191934">"គ្មាន​ប្រធាន​បទ"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"បាទ/ចាស"</item>
-    <item msgid="6049132459802288033">"ទេ"</item>
-    <item msgid="3084376867445867895">"យល់ព្រម"</item>
-    <item msgid="3155097332660174689">"ហេហេ"</item>
-    <item msgid="2611328818571146775">"អរគុណ"</item>
-    <item msgid="4881335087096496747">"ខ្ញុំ​យល់​ព្រម"</item>
-    <item msgid="2422296858597420738">"ល្អ"</item>
-    <item msgid="4805581752819452687">"នៅ​តាម​ផ្លូវ​"</item>
-    <item msgid="4746700499431366214">"យល់ព្រម ខ្ញុំ​នឹង​ទាក់ទង​អ្នក​ពេល​ក្រោយ"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
deleted file mode 100644
index fba58e2..0000000
--- a/res/values-km/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"​ការ​ផ្ញើ​សារ"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"ការ​​ផ្ញើ​សារ"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"ជ្រើសរើសការសន្ទនា"</string>
-    <string name="action_settings" msgid="1329008122345201684">"ការកំណត់"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"ផ្ញើ​សារ"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"បន្ថែម​ឯកសារ​ភ្ជាប់"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"ជំនួយ"</string>
-    <string name="welcome" msgid="2857560951820802321">"សូមស្វាគមន៍"</string>
-    <string name="skip" msgid="7238879696319945853">"រំលង"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"បន្ទាប់ &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"បន្ទាប់"</string>
-    <string name="exit" msgid="1905187380359981199">"ចេញ"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"ការកំណត់ &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"ការកំណត់"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"ការផ្ញើសារត្រូវការសិទ្ធិអនុញ្ញាតដើម្បីប្រើសារ SMS, ទូរស័ព្ទ និងទំនាក់ទំនង។"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"អ្នកអាចប្តូរសិទ្ធិអនុញ្ញាតនៅក្នុង ការកំណត់ &gt; កម្មវិធី &gt; ការផ្ញើសារ &gt; សិទិ្ធអនុញ្ញាត។"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"អ្នកអាចប្តូរសិទ្ធិអនុញ្ញាតនៅក្នុង ការកំណត់ , កម្មវិធី, ការផ្ញើសារ, សិទ្ធិអនុញ្ញាត។"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"ញឹកញាប់"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"ទំនាក់ទំនងទាំងអស់"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"ផ្ញើ​ទៅ <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"ថត​រូបភាព ឬ​វីដេអូ"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"ជ្រើស​រូបភាព​ពី​ឧបករណ៍​នេះ"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ថត​សំឡេង"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ជ្រើស​រូបថត"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"បានជ្រើសឯកសារកំសាន្ត។"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"បានលុបការជ្រើសឯកសារកំសាន្ត។"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"បាន​ជ្រើស <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"រូបភាព <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"រូបភាព"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ថត​សំឡេង"</string>
-    <string name="action_share" msgid="2143483844803153871">"ចែករំលែក​"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ថ្មីៗ​នេះ"</string>
-    <string name="posted_now" msgid="867560789350406701">"ឥឡូវ"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> នាទី</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> នាទី</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ម៉ោង</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ម៉ោង</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ថ្ងៃ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ថ្ងៃ</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> សប្តាហ៍</item>
-      <item quantity="one">មួយសប្តាហ៍</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ខែ</item>
-      <item quantity="one">មួយខែ</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ឆ្នាំ</item>
-      <item quantity="one">មួយឆ្នាំ</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"សារ​ថ្នាក់ ០"</string>
-    <string name="save" msgid="5081141452059463572">"រក្សាទុក"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"ឧបករណ៍នៅសល់ទំហំផ្ទុកតិច។ ការផ្ញើសារនឹងលុបសារចាស់ៗដើម្បីធ្វើឲ្យមានទំហំផ្ទុកទំនេរ។"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"អស់​ទំហំ​ផ្ទុក"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"ការផ្ញើសារអាចនឹងមិនផ្ញើ ឬទទួលសារទេ រហូតដល់មានទំហំផ្ទុកបន្ថែមទៀតនៅលើឧបករណ៍របស់អ្នក។"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"ជិត​អស់​ទំហំ​ផ្ទុក​សារ SMS ។ អ្នក​អាច​​​លុប​សារ​មួយ​ចំនួន។"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"បញ្ជាក់លេខទូរស័ព្ទរបស់អ្នក"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"ជំហានមួយលើកនេះធានាថាការផ្ញើសារនឹងបញ្ជូនសារក្រុមរបស់អ្នកបានត្រឹមត្រូវ។"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"លេខទូរស័ព្ទ"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"លុប​សារ​​​​ដែល​មាន​មេឌៀ​ទាំងអស់"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"លុប​សារ​ចាស់​ជាង <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"លុប​សារ​ចាស់​ជាង <xliff:g id="DURATION">%s</xliff:g> ដោយ​ស្វ័យ​ប្រវត្តិ"</string>
-    <string name="ignore" msgid="7063392681130898793">"មិន​អើពើ"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"លុប​សារ​ទាំងអស់​មាន​ក្នុង​មេឌៀ?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"លុប​សារ​ចាស់​ជាង <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"លុប​សារ​ចាស់​ជាង <xliff:g id="DURATION">%s</xliff:g> និង​បើក​ការ​លុប​ស្វ័យ​ប្រវត្តិ?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> និយាយថា"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"អ្នកនិយាយថា"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"សារពី <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"អ្នកបានផ្ញើសារមួយ"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"កំពុង​ផ្ញើ..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"មិន​បាន​ផ្ញើ។ ប៉ះ​ដើម្បី​ព្យាយាម​ម្ដងទៀត។"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"មិន​បាន​ផ្ញើ។ កំពុង​ព្យាយាម​ម្ដងទៀត..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"ផ្ញើ​ម្ដង​ទៀត ឬ​លុប"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"សូមធ្វើការហៅជាសម្លេងទៅកាន់សេវាកម្មសង្គ្រោះបន្ទាន់។ សារជាអក្សររបស់អ្នកមិនអាចបញ្ជូនបានទេនៅពេលនេះ។"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"បាន​បរាជ័យ"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"សារ MMS ថ្មី​ត្រូវ​ទាញ​យក"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"សារ MMS ថ្មី"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"មិន​អាច​ទាញ​យក"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"ប៉ះ​ ដើម្បី​ព្យាយាម​ម្តង​ទៀត"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ប៉ះ​ ដើម្បី​ទាញ​យក"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ទាញ​យក ​ឬ​លុប"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"កំពុង​ទាញ​យក..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"សារ​បាន​​ផុត​កំណត់​ ឬ​មិន​អាច​ប្រើ​បាន"</string>
-    <string name="mms_info" msgid="3402311750134118165">"ទំហំ៖ <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, ផុត​កំណត់៖ <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"មិន​អាច​ផ្ញើ។ អ្នក​ទទួល​មិន​ត្រឹមត្រូវ។"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"សេវា​មិន​សកម្ម​នៅ​លើ​បណ្ដាញ"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"មិន​អាច​ផ្ញើ​ដោយសារ​បញ្ហា​បណ្ដាញ"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"សារ​បាន​​ផុត​កំណត់​ ឬ​មិន​អាច​ប្រើ​បាន"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(គ្មាន​ប្រធាន​បទ)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"មិន​ស្គាល់​អ្នក​ផ្ញើ"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"បាន​បញ្ជូន"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"មិន​អាច​ទាញ​យក​សារ <xliff:g id="SUBJECT">%1$s</xliff:g> ពី <xliff:g id="FROM">%2$s</xliff:g> បាន​ទេ។"</string>
-    <string name="low_memory" msgid="5300743415198486619">"មិន​អាច​​បញ្ចប់​ប្រតិបត្តិការ​​មូលដ្ឋាន​ទិន្នន័យ​ដោយសារ​អង្គ​ចងចាំ​មិន​គ្រប់គ្រាន់​​"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"មិន​បាន​ផ្ញើ​សារ"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"សារមួយចំនួនមិនបានផ្ញើនៅក្នុងការផ្ញើសារទេ"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other">សារ <xliff:g id="MESSAGES_1">%d</xliff:g> នៅក្នុងការសន្ទនា <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="one">សារ <xliff:g id="MESSAGES_0">%d</xliff:g> នៅក្នុងការសន្ទនាមួយ</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"មិនបានទាញយកសារ"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"សារមួយចំនួនមិនបានទាញយកនៅក្នុងការផ្ញើសារទេ"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other">សារ <xliff:g id="MESSAGES_1">%d</xliff:g> នៅក្នុងការសន្ទនា <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="one">សារ <xliff:g id="MESSAGES_0">%d</xliff:g> នៅក្នុងការសន្ទនាមួយ</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"សារទៅកាន់ <xliff:g id="NUMBER">%1$s</xliff:g> មិនត្រូវបានផ្ញើទេ"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"សូមធ្វើការហៅជាសម្លេងទៅកាន់សេវាកម្មសង្គ្រោះបន្ទាន់។ សារជាអក្សររបស់អ្នកទៅ <xliff:g id="NUMBER">%1$s</xliff:g> មិនអាចបញ្ជូនបានទេនៅពេលនេះ។"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other">សារថ្មី <xliff:g id="MESSAGES">%d</xliff:g></item>
-      <item quantity="one">សារថ្មី</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"ចាប់ផ្ដើម"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"មិន​អាច​ប្រើ​ម៉ាស៊ីន​ថត​បាន"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"មិន​អាច​ប្រើ​ម៉ាស៊ីន​ថត​បាន"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"មិន​អាច​ថត​វីដេអូ​បាន"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"មិន​អាច​រក្សាទុក​​មេឌៀ"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"មិនអាចថតរូបភាព"</string>
-    <string name="back" msgid="1477626055115561645">"ថយក្រោយ"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"ទុក​ក្នុង​ប័ណ្ណសារ"</string>
-    <string name="action_delete" msgid="4076795795307486019">"លុប"</string>
-    <string name="action_archive" msgid="5437034800324083170">"ប័ណ្ណសារ"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"មិន​ទុក​ក្នុង​ប័ណ្ណសារ"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"បិទ​ការ​ជូនដំណឹង"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"បើក​ការ​ជូនដំណឹង​"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"បន្ថែម​ទំនាក់ទំនង"</string>
-    <string name="action_download" msgid="7786338136368564146">"ទាញ​យក"</string>
-    <string name="action_send" msgid="377635240181672039">"ផ្ញើ"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"លុប"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"លុប​សារ​នេះ?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"សកម្មភាព​នេះ​មិន​អាច​ធ្វើ​វិញ​បាន​ទេ។"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"លុប"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">លុបការសន្ទនាទាំងនេះ?</item>
-      <item quantity="one">លុបការសន្ទនានេះ?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"លុប"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"បោះបង់"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"ជូន​ចំពោះ"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"ជ្រើស​រូបភាព​ច្រើន"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"បញ្ជាក់​​ការ​ជ្រើស"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"មិន​អាច​ថត​សំឡេង។ ព្យាយាម​ម្ដង​ទៀត។"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"មិន​អាច​ចាក់​សំឡេង។ ព្យាយាម​ម្ដងទៀត។"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"មិន​អាច​រក្សាទុក​សំឡេង។ ព្យាយាម​ម្ដងទៀត។"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"ប៉ះ &amp; សង្កត់"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"រូបភាព"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ឈុត​សំឡេង"</string>
-    <string name="notification_video" msgid="4331423498662606204">"វីដេអូ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"កាត​ទំនាក់ទំនង"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ទាញ​យក"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"ឆ្លើយតប​តាម​សារ SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"ឆ្លើយតបតាម MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"ឆ្លើយតប"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other">អ្នកចូលរួម <xliff:g id="COUNT_1">%d</xliff:g> នាក់</item>
-      <item quantity="one">អ្នកចូលរួម <xliff:g id="COUNT_0">%d</xliff:g> នាក់</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"ខ្ញុំ"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"ទំនាក់ទំនង​ត្រូវ​បាន​ទប់ស្កាត់ &amp; ទុក​ក្នុង​ប័ណ្ណសារ"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"បានរារាំង និងបានដកទំនាក់ទំនងចេញពីបណ្ណ័សារ"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"បានទុកក្នុងបណ្ណសារចំនួន<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"មិនបានទុកក្នុងប័ណ្ណសារចំនួន <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"បានបិទការជូនដំណឹង"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"បានបើកការជូនដំណឹង"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"កំណត់​រួចរាល់។ ប៉ះ​ដើម្បី​ផ្ញើ​ម្ដងទៀត។"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"បានកំណត់ការផ្ញើសារជាកម្មវិធីសារ SMS លំនាំដើមដោយជោគជ័យ។"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">បោះបង់ឯកសារភ្ជាប់</item>
-      <item quantity="one">បោះបង់ឯកសារភ្ជាប់</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ឯកសារភ្ជាប់សម្លេង"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ឯកសារភ្ជាប់សម្លេង Play"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"ផ្អាក"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"សារពី <xliff:g id="SENDER">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"សារបរាជ័យពី <xliff:g id="SENDER">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"សារពី <xliff:g id="SENDER">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"សារមិនបានផ្ញើទៅ <xliff:g id="CONTACT">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"កំពុងផ្ញើសារទៅ <xliff:g id="CONTACT">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"សារបរាជ័យទៅ <xliff:g id="CONTACT">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"សារទៅ <xliff:g id="CONTACT">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"សារបរាជ័យពី <xliff:g id="SENDER">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។ <xliff:g id="GROUPINFO">%4$s</xliff:g>។"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"សារពី <xliff:g id="SENDER">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។ <xliff:g id="GROUPINFO">%4$s</xliff:g>។"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"សារមិនបានផ្ញើទៅ <xliff:g id="GROUP">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"កំពុងផ្ញើសារទៅ <xliff:g id="GROUP">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"សារបរាជ័យទៅ <xliff:g id="GROUP">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"សារទៅ <xliff:g id="GROUP">%1$s</xliff:g>៖ <xliff:g id="MESSAGE">%2$s</xliff:g>។ ម៉ោង៖ <xliff:g id="TIME">%3$s</xliff:g>។"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"សារបរាជ័យ។ ប៉ះដើម្បីព្យាយាមម្តងទៀត។"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"ការសន្ទនាជាមួយ <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"លុប​ប្រធានបទ"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"ថត​វីដេអូ"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"ថត​រូបភាព​ថេរ"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"ថតរូប"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"ចាប់ផ្ដើម​ថត​វីដេអូ"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"ប្ដូរ​ទៅ​ម៉ាស៊ីន​ថត​ពេញ​អេក្រង់"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"ប្ដូរ​រវាង​ម៉ាស៊ីន​ថត​មុន និង​ក្រោយ"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"បញ្ឈប់​ការ​ថត និង​ភ្ជាប់​វីដេអូ"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"បញ្ឈប់​ការ​ថត​វីដេអូ"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"រូបភាពសារ"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other">បានរក្សាទុករូបថត <xliff:g id="QUANTITY_2">%d</xliff:g> ទៅក្នុងអាល់ប៊ុម \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">បានរក្សាទុករូបថត <xliff:g id="QUANTITY_0">%d</xliff:g> ទៅក្នុងអាល់ប៊ុម \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other">បានរក្សាទុកវីដេអូ <xliff:g id="QUANTITY_2">%d</xliff:g> ទៅក្នុងអាល់ប៊ុម \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">បានរក្សាទុកវីដេអូ <xliff:g id="QUANTITY_0">%d</xliff:g> ទៅក្នុងអាល់ប៊ុម \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other">បានរក្សាទុកឯកសារភ្ជាប់ <xliff:g id="QUANTITY_2">%d</xliff:g> ទៅក្នុងអាល់ប៊ុម \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">បានរក្សាទុកឯកសារភ្ជាប់ <xliff:g id="QUANTITY_0">%d</xliff:g> ទៅក្នុងអាល់ប៊ុម \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other">បានរក្សាទុកឯកសារភ្ជាប់ <xliff:g id="QUANTITY_1">%d</xliff:g> ទៅក្នុង \"ទាញយក\"</item>
-      <item quantity="one">បានរក្សាទុកឯកសារភ្ជាប់ <xliff:g id="QUANTITY_0">%d</xliff:g> ទៅក្នុង \"ទាញយក\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">បានរក្សាទុកឯកសារភ្ជាប់ <xliff:g id="QUANTITY_1">%d</xliff:g></item>
-      <item quantity="one">បានរក្សាទុកឯកសារភ្ជាប់ <xliff:g id="QUANTITY_0">%d</xliff:g></item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">មិនអាចរក្សាទុកឯកសារភ្ជាប់ <xliff:g id="QUANTITY_1">%d</xliff:g></item>
-      <item quantity="one">មិនអាចរក្សាទុកឯកសារភ្ជាប់ <xliff:g id="QUANTITY_0">%d</xliff:g></item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"បាន​រក្សាទុក​ឯកសារ​ភ្ជាប់​ជា​សារ MMS"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"ការកំណត់"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"ទុក​ក្នុង​ប័ណ្ណសារ"</string>
-    <string name="action_close" msgid="1840519376200478419">"បិទ"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"សារ MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"កម្រិត​ខ្ពស់"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"កែ​កំហុស"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"ការ​ជូនដំណឹង"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"សំឡេង"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"ស្ងាត់"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"ញ័រ"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"បាន​ទប់ស្កាត់"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"របាយការណ៍​បញ្ជូន​សារ SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"ស្នើ​​​របាយ​ការណ៍​​បញ្ជូន​សម្រាប់​សារ SMS ​នីមួយៗ​ដែល​អ្នក​ផ្ញើ"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"​យក​ស្វ័យ​ប្រវត្តិ"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"ទាញ​យក​សារ MMS ដោយ​ស្វ័យ​ប្រវត្តិ​"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"ទាញ​យក​ដោយ​ស្វ័យប្រវត្តិ​ពេល​រ៉ូមីង"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"ទាញសារ MMS ត្រឡប់មកវិញដោយស្វ័យប្រវត្តិនៅពេលរ៉ូមីង"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"ការ​ផ្ញើ​សារ​​ជា​ក្រុម"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"ប្រើ MMS ដើម្បី​ផ្ញើ​សារ នៅ​ពេល​មាន​អ្នក​ទទួល​ច្រើន"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"កម្មវិធី​ផ្ញើ​សារ SMS ​លំនាំ​ដើម"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"កម្មវិធី​ផ្ញើ​សារ SMS ​លំនាំ​ដើម"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"លេខ​ទូរសព្ទ​របស់​អ្នក"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"មិន​ស្គាល់"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"សម្លេងសារផ្ញើចេញ"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"បោះបង់​សារ SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"ដាក់​ទិន្នន័យ​ដើម​នៃ​សារ SMS បាន​ទទួល​ក្នុង​ឯកសារ​ឧបករណ៍​ផ្ទុក​ខាង​ក្រៅ"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"បោះបង់​សារ MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"ដាក់​ទិន្នន័យ​ដើម​នៃ​សារ MMS បាន​ទទួល​ក្នុង​ឯកសារ​ឧបករណ៍​ផ្ទុក​ខាង​ក្រៅ"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"ការ​ជូនដំណឹង​​ឥត​​​ខ្សែ"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"ជម្រើស​សារ"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"ចម្លង​អត្ថបទ"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"មើល​​ព័ត៌មាន​លម្អិត"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"លុប"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"បញ្ជូន​បន្ត"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"ព័ត៌មាន​លម្អិត​សារ"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"ប្រភេទ៖ "</string>
-    <string name="text_message" msgid="7415419755252205721">"សារ​​អត្ថបទ"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"សារ​ពហុ​​មេឌៀ"</string>
-    <string name="from_label" msgid="1947831848146564875">"ពី៖ "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"ជូន​ចំពោះ៖ "</string>
-    <string name="sent_label" msgid="5186286057597137301">"បាន​ផ្ញើ៖ "</string>
-    <string name="received_label" msgid="4442494712757995203">"បាន​ទទួល៖ "</string>
-    <string name="subject_label" msgid="1887378451808609152">"ប្រធានបទ៖ "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"ទំហំ៖ "</string>
-    <string name="priority_label" msgid="5029073794896222902">"អាទិភាព៖ "</string>
-    <string name="sim_label" msgid="2706003016582772108">"ស៊ីម៖ "</string>
-    <string name="priority_high" msgid="728836357310908368">"ខ្ពស់"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"ធម្មតា"</string>
-    <string name="priority_low" msgid="7398724779026801851">"ទាប"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"ស៊ីម <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"​អាសយដ្ឋាន​​អ្នក​ផ្ញើ​ដែល​បាន​លាក់"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"មិន​អាច​ផ្ញើ​សារ​ខណៈ​ពេល​ផ្ទុក​ឯកសារ​ភ្ជាប់។"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"មិន​អាច​ផ្ទុក​ឯកសារ​ភ្ជាប់។ ព្យាយាម​ម្ដង​ទៀត។"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"បណ្តាញមិនទាន់រួចរាល់ទេ។ ព្យាយាមម្តងទៀត។"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"លុប​អត្ថបទ"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"ប្ដូរ​​រវាង​លេខ និង​អត្ថបទ​បញ្ចូល"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"បន្ថែម​អ្នក​ចូលរួម​ច្រើន​ទៀត"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"បញ្ជាក់​អ្នក​ចូលរួម"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"ចាប់ផ្ដើមការសន្ទនាថ្មី"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"ជ្រើស​ធាតុ​នេះ"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"ចាក់​វីដេអូ"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"មនុស្ស &amp; ជម្រើស"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"កែ​កំហុស"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"មនុស្ស &amp; ជម្រើស"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"ទូទៅ"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"មនុស្ស​ក្នុង​ការ​សន្ទនា​នេះ"</string>
-    <string name="action_call" msgid="6596167921517350362">"ហៅ"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"ផ្ញើ​សារ"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"ផ្ញើ​សារ&lt;br/&gt;&lt;small&gt;ពី <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">ផ្ញើរូបថត</item>
-      <item quantity="one">ផ្ញើរូបថត</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">ផ្ញើសំឡេង</item>
-      <item quantity="one">ផ្ញើសំឡេង</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">ផ្ញើវីដេអូ</item>
-      <item quantity="one">ផ្ញើវីដេអូ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">ផ្ញើកាតទំនាក់ទំនង</item>
-      <item quantity="one">ផ្ញើកាតទំនាក់ទំនង</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">ផ្ញើឯកសារភ្ជាប់</item>
-      <item quantity="one">ផ្ញើឯកសារភ្ជាប់</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other">ឯកសារភ្ជាប់ <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ត្រៀមសម្រាប់ផ្ញើ</item>
-      <item quantity="one">ឯកសារភ្ជាប់មួយត្រៀមសម្រាប់ផ្ញើ</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"ផ្ដល់​មតិ​ស្ថាបនា"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"មើល​នៅ​ក្នុង​​ Google ឃ្លាំង​កម្សាន្ត"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"ព័ត៌មាន​កំណែ"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"កំណែ %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"អាជ្ញាប័ណ្ណ​កម្មវិធី​ប្រភព​កូដ​ចំហ"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"ការ​ជូនដំណឹង"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"ឯកសារភ្ជាប់ឈានដល់កំណត់"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"ការផ្ទុកឯកសារភ្ជាប់បានបរាជ័យ។"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"បន្ថែម​ទៅ​ទំនាក់ទំនង​?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"បន្ថែម​ទំនាក់ទំនង"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"ប្រធានបទ"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"ប្រធានបទ៖ "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"ផ្ទុក​កាត​ទំនាក់ទំនង"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"មិន​អាច​ផ្ទុក​កាត​ទំនាក់ទំនង"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"មើល​កាត​ទំនាក់ទំនង"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other">ទំនាក់ទំនង <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="one">ទំនាក់ទំនង <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"កាត​ទំនាក់ទំនង"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"ថ្ងៃ​កំណើត"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"ចំណាំ"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"បញ្ជូន​សារ​បន្ត"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"ឆ្លើយតប"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"បាន​បិទ​សារ SMS"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"សូមកំណត់ការផ្ញើសារជាកម្មវិធីសារ SMS លំនាំដើមដើម្បីផ្ញើ"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"កំណត់ការផ្ញើសារជាកម្មវិធីសារ SMS លំនាំដើម"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"ផ្លាស់ប្ដូរ"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"សូមកំណត់ការផ្ញើសារជាកម្មវិធីសារ SMS លំនាំដើមដើម្បីទទួលសារ"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"គ្មានស៊ីមកាតដែលបានប្រើត្រូវបានជ្រើសរើសឲ្យផ្ញើសារ SMS ទេ"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"កម្មវិធី​នេះ​មិន​បាន​អនុញ្ញាត​ដោយ​ម្ចាស់​ឧបករណ៍។"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"យល់ព្រម"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"មាន​អ្នក​ចូលរួម​ច្រើន​ពេក​ក្នុង​ការ​សន្ទនា"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">ទំនាក់ទំនងមិនត្រឹមត្រូវ</item>
-      <item quantity="one">ទំនាក់ទំនងមិនត្រឹមត្រូវ</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"មិន​អាច​ផ្ទុក​រូបភាព​ម៉ាស៊ីន​ថត"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"អ្នក​៖ "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"សេចក្ដី​ព្រាង"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"នៅ​ពេល​ដែល​អ្នក​ចាប់ផ្ដើម​​ការ​សន្ទនា​ថ្មី ​អ្នក​នឹង​ឃើញ​វា​​​បង្ហាញ​នៅ​ទីនេះ"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"ការ​សន្ទនា​បាន​ទុក​ក្នុង​ប័ណ្ណសារ​បង្ហាញ​នៅ​ទីនេះ"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"កំពុង​ផ្ទុក​ការ​សន្ទនា…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"រូបភាព"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ឃ្លីបសម្លេង"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"វីដេអូ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"កាត​ទំនាក់ទំនង"</string>
-    <string name="mms_text" msgid="1528791558806015806">"សារ MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"មិនធ្វើវិញ"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"ព្យាយាមម្ដងទៀត"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"បញ្ចូល​ឈ្មោះ​ទំនាក់ទំនង​ ឬ​លេខ​ទូរសព្ទ​ដើម្បី​ចាប់ផ្ដើម​សារ​ថ្មី"</string>
-    <string name="action_block" msgid="9032076625645190136">"ទប់ស្កាត់"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"ទប់ស្កាត់ <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"មិន​ទប់ស្កាត់ <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"ទប់ស្កាត់ <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"អ្នក​នឹង​បន្ត​ទទួល​សារ​ពី​លេខ​នេះ ប៉ុន្តែ​នឹង​មិន​ត្រូវ​បាន​ជូន​ដំណឹង​ទៀត​ទេ។ ការ​សន្ទនា​នេះ​នឹង​ត្រូវ​បាន​ទុក​ក្នុង​ប័ណ្ណសារ។"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"បាន​ទប់ស្កាត់​ទំនាក់ទំនង"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"មិន​ទប់ស្កាត់"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"បាន​ទប់ស្កាត់​ទំនាក់ទំនង​"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"ជ្រើស​រូបភាព​ពី​បណ្ណាល័យ​ឯកសារ"</string>
-    <string name="sending_message" msgid="6363584950085384929">"កំពុងផ្ញើសារ"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"បានផ្ញើសារ"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"ទិន្នន័យ​ចល័ត​ត្រូវ​បាន​បិទ។ ពិនិត្យ​ការ​កំណត់​របស់​អ្នក។"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"មិន​អាច​ផ្ញើ​សារ​ក្នុង​របៀប​ពេល​ជិះ​យន្ត​ហោះ"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"មិនអាចផ្ញើសារបានទេ"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"បានទាញយកសារ"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"ទិន្នន័យចល័តត្រូវបានបិទ។ ពិនិត្យការកំណត់របស់អ្នក។"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"មិនអាចទាញយកសារនៅក្នុង របៀបយន្តហោះ ទេ។"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"មិនអាចទាញយកសារបានទេ"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"សូន្យ"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"មួយ"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"ពីរ"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"​បី"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"បួន"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"ប្រាំ"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ប្រាំមួយ"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"ប្រាំពីរ"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"ប្រាំបី"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"ប្រាំបួន"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"មិនអាចផ្ញើសារដោយប្រើ <xliff:g id="CARRIERNAME">%1$s</xliff:g> នេះបានទេ។ កំហុស <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"មិនអាចផ្ញើសារដោយប្រើក្រុមហ៊ុនផ្តល់សេវាដែលមិនស្គាល់បានទេ។ កំហុស <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"បញ្ជូន​បន្ត៖ <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"សារ​មិន​បាន​ផ្ញើ៖ សេវាកម្ម​មិន​សកម្ម​លើ​បណ្ដាញ"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"មិន​បាន​ផ្ញើសារ៖ អាសយដ្ឋាន​គោលដៅ​មិន​ត្រឹមត្រូវ"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"មិន​បាន​ផ្ញើ​សារ៖ សារ​មិន​ត្រឹមត្រូវ"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"មិន​បាន​ផ្ញើ​សារ៖ មិន​គាំទ្រ​មាតិកា"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"មិន​បាន​ផ្ញើសារ៖ មិន​គាំទ្រ​សារ"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"មិនបានផ្ញើសារ៖ ធំពេក"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"សារ​ថ្មី"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"មើល"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"រូបភាព"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"មិន​អាច​រក​ឃើញ​កម្មវិធី​ដែល​សមរម្យ"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"លុប​អ្នក​ទទួល"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"សារ​ថ្មី"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"បោះបង់"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"កែ​ចំណុច​ចូល​ដំណើរការ"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"មិនបាន​កំណត់"</string>
-    <string name="apn_name" msgid="1572691851070894985">"ឈ្មោះ"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"ប្រូកស៊ី MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"ច្រក MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"ប្រភេទ APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"លុប APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN ថ្មី"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"រក្សាទុក"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"បោះបង់"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"វាល​ឈ្មោះ​មិន​អាច​ទទេ។"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN មិន​អាច​ទទេ។"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"វាល MCC ត្រូវ​តែ​មាន​ ៣ តួ។"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"វាល MNC ត្រូវ​តែ​មាន​ពីរ ឬ​បី​តួ។"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"ស្ដារ​ការ​កំណត់ APN លំនាំដើម​ឡើងវិញ។"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"កំណត់​ទៅ​លំនាំដើម​ឡើងវិញ"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"បាន​បញ្ចប់​ការ​កំណត់​នៃ​ការកំណត់​ APN លំនាំដើម។"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"គ្មាន​ចំណង​ជើង"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ឈ្មោះ​ចំណុច​ចូល​ដំណើរការ"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN ថ្មី"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"ការ​កំណត់​ឈ្មោះ​ចូល​ដំណើរការ​មិន​អាច​ប្រើ​បាន​សម្រាប់​អ្នក​ប្រើ​​នេះ"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"ចម្លង​ទៅ​ក្ដារ​តម្បៀត​ខ្ទាស់​?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"ចម្លង"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"ទៅ <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"ទូទៅ"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"កម្រិត​ខ្ពស់"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"ការ​កំណត់​ទូទៅ"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"ការ​កំណត់​កម្រិត​ខ្ពស់"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" ស៊ីម"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"ផ្ញើ​សារ SMS នីមួយៗ​ទៅ​អ្នក​ទទួល​ទាំង​អស់។ មាន​តែ​អ្នក​ប៉ុណ្ណោះ​​ទទួល​បាន​ការ​ឆ្លើយតប"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"ផ្ញើ​សារ MMS មួយ​ទៅ​អ្នក​ទទួល"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"មិន​ស្គាល់​លេខ"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"សារថ្មី"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"សារថ្មី។"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"កម្មវិធីជ្រើសស៊ីម"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"បានជ្រើសរើស <xliff:g id="SIM_0">%1$s</xliff:g> កម្មវិធីជ្រើសស៊ីម"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"កែប្រធានបទ"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"ជ្រើសស៊ីម ឬកែប្រធានបទ"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ប៉ះ និងសង្កត់ដើម្បីថតសម្លេង"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"ចាប់ផ្ដើមការសន្ទនាថ្មី"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"ការផ្ញើសារ"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"បញ្ជីសារ"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"ការផ្ញើសារ"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"សារថ្មី"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"បញ្ជីសន្ទនា"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"កំពុងផ្ទុកការសន្ទនា…"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"សារកំពុងដំណើរការ"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"មើលការសន្ទនាច្រើនទៀត"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"មើលសារច្រើនទៀត"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"បានលុបការសន្ទនា"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"បានលុបការសន្ទនា។ សូមប៉ះដើម្បីបង្ហាញការសន្ទនាផ្សេងទៀតនៅក្នុងការផ្ញើសារ"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"បាន​ទប់ស្កាត់"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"បានឈប់ទប់ស្កាត់"</string>
-    <string name="db_full" msgid="8459265782521418031">"ចន្លោះផ្ទុកមានកម្រិតទាប។ ទិន្នន័យមួយចំនួនអាចបាត់បង់។"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"ជ្រើសឯកសារភ្ជាប់"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"បញ្ជាក់​​ការ​ជ្រើស"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"បានជ្រើស <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"សូមយកឯកសារភ្ជាប់មួយ ឬច្រើនចេញ ហើយព្យាយាមម្តងទៀត។"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"អ្នកអាចព្យាយាមផ្ញើសារបស់អ្នក ប៉ុន្តែវាប្រហែលជាមិនផ្ញើទៅទេ លុះត្រាតែអ្នកយកឯកសារភ្ជាប់មួយ ឬច្រើនចេញ។"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"អ្នកអាចផ្ញើវីដេអូតែមួយប៉ុណ្ណោះនៅក្នុងសារមួយ។ សូមយកវីដេអូដែលលើសពីនេះចេញ ហើយព្យាយាមម្តងទៀត។"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"ការផ្ញើសារបានបរាជ័យក្នុងដំណើរការផ្ទុកឯកសារភ្ជាប់។"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"អញ្ចឹង​ផ្ញើ​​តែម្ដង"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"មិនអាចចាប់ផ្តើមការសន្ទនាទេ"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"បានជ្រើស <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-kn/arrays.xml b/res/values-kn/arrays.xml
deleted file mode 100644
index 932fec1..0000000
--- a/res/values-kn/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"ಯಾವುದೇ ವಿಷಯವಿಲ್ಲ"</item>
-    <item msgid="272485471009191934">"ಯಾವುದೇ ವಿಷಯವಿಲ್ಲ"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"ಹೌದು"</item>
-    <item msgid="6049132459802288033">"ಬೇಡ"</item>
-    <item msgid="3084376867445867895">"ಸರಿ"</item>
-    <item msgid="3155097332660174689">"ಹೆಹೆ"</item>
-    <item msgid="2611328818571146775">"ಧನ್ಯವಾದಗಳು"</item>
-    <item msgid="4881335087096496747">"ಒಪ್ಪುತ್ತೇನೆ"</item>
-    <item msgid="2422296858597420738">"ಉತ್ತಮ"</item>
-    <item msgid="4805581752819452687">"ನನ್ನ ಹಾದಿಯಲ್ಲಿದ್ದೇನೆ"</item>
-    <item msgid="4746700499431366214">"ಸರಿ, ನಾನು ಮತ್ತೆ ನಿಮಗೆ ತಿಳಿಸುತ್ತೇನೆ"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
deleted file mode 100644
index b484009..0000000
--- a/res/values-kn/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"ಸಂಭಾಷಣೆಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="action_settings" msgid="1329008122345201684">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"ಸಂದೇಶ ಕಳುಹಿಸು"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"ಲಗತ್ತನ್ನು ಸೇರಿಸಿ"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"ಸಹಾಯ"</string>
-    <string name="welcome" msgid="2857560951820802321">"ಸುಸ್ವಾಗತ"</string>
-    <string name="skip" msgid="7238879696319945853">"ಸ್ಕಿಪ್‌"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"ಮುಂದೆ &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"ಮುಂದೆ"</string>
-    <string name="exit" msgid="1905187380359981199">"ನಿರ್ಗಮಿಸು"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಗೆ SMS, ಫೋನ್ ಮತ್ತು ಸಂಪರ್ಕಗಳಿಗೆ ಅನುಮತಿ ಹೊಂದಿರುವ ಅಗತ್ಯವಿದೆ."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"ನೀವು ಅನುಮತಿಗಳನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳು &gt; ಅಪ್ಲಿಕೇಶನ್‌ಗಳು &gt; ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ &gt; ಅನುಮತಿಗಳಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"ನೀವು ಅನುಮತಿಗಳನ್ನು ಸೆಟ್ಟಿಂಗ್‌ಗಳು, ಅಪ್ಲಿಕೇಶನ್‌ಗಳು, ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ, ಅನುಮತಿಗಳಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"ಪುನರಾವರ್ತನೆಗಳು"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"ಎಲ್ಲ ಸಂಪರ್ಕಗಳು"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> ಗೆ ಕಳುಹಿಸಿ"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"ಚಿತ್ರಗಳು ಅಥವಾ ವೀಡಿಯೊವನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"ಈ ಸಾಧನದಿಂದ ಚಿತ್ರಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ಆಡಿಯೋ ರೆಕಾರ್ಡ್‌ ಮಾಡಿ"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ಫೋಟೋ ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"ಮಾಧ್ಯಮ ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"ಮಾಧ್ಯಮ ಆಯ್ಕೆ ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"ಚಿತ್ರ <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"ಚಿತ್ರ"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ಆಡಿಯೋ ರೆಕಾರ್ಡ್‌ ಮಾಡಿ"</string>
-    <string name="action_share" msgid="2143483844803153871">"ಹಂಚಿಕೊಳ್ಳಿ"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ಈಗ ತಾನೇ"</string>
-    <string name="posted_now" msgid="867560789350406701">"ಇದೀಗ"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ನಿಮಿಷಗಳು</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ನಿಮಿಷಗಳು</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ಗಂಟೆಗಳು</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ಗಂಟೆಗಳು</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ದಿನಗಳು</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ದಿನಗಳು</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ವಾರಗಳು</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ವಾರಗಳು</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ತಿಂಗಳು</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ತಿಂಗಳು</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ವರ್ಷಗಳು</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ವರ್ಷಗಳು</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"ವರ್ಗ 0 ಸಂದೇಶ"</string>
-    <string name="save" msgid="5081141452059463572">"ಉಳಿಸು"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"ಸಾಧನದಲ್ಲಿ ಸ್ಥಳಾವಕಾಶವು ಕಡಿಮೆ ಇದೆ. ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯು ಸ್ಥಳಾವಕಾಶವನ್ನು ತೆರವುಗೊಳಿಸಲು ಹಳೆಯ ಸಂದೇಶಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅಳಿಸುತ್ತದೆ."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"ಸಂಗ್ರಹಣೆ ಸ್ಥಳವು ತುಂಬಿದೆ"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಹೆಚ್ಚು ಸ್ಥಳಾವಕಾಶ ಲಭ್ಯವಿರುವವರೆಗೆ ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯು ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸದಿರಬಹುದು ಅಥವಾ ಸ್ವೀಕರಿಸದಿರಬಹುದು."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"ಕಡಿಮೆ SMS ಸಂಗ್ರಹಣೆ. ನೀವು ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಬೇಕಾಗಬಹುದು."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"ನಿಮ್ಮ ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಖಚಿತಪಡಿಸಿ"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"ಈ ಒಂದು-ಬಾರಿ ಹಂತವು ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯು ನಿಮ್ಮ ಗುಂಪು ಸಂದೇಶಗಳನ್ನು ಸರಿಯಾಗಿ ಕಳುಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ಫೋನ್ ಸಂಖ್ಯೆ"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"ಮೀಡಿಯಾದ ಎಲ್ಲಾ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಿ"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> ಗಿಂತಲೂ ಹಳೆಯದಾದ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಿ"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> ಗಿಂತಲೂ ಹಳೆಯದಾದ ಸಂದೇಶಗಳನ್ನು ಸ್ವಯಂ-ಅಳಿಸಿ"</string>
-    <string name="ignore" msgid="7063392681130898793">"ನಿರ್ಲಕ್ಷಿಸು"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"ಮಾಧ್ಯಮದ ಎಲ್ಲಾ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸುವುದೇ?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> ಗಿಂತಲೂ ಹಳೆಯದಾದ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸುವುದೇ?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> ಗಿಂತಲೂ ಹಳೆಯದಾದ ಸಂದೇಶಗಳನ್ನು ಅಳಿಸಿ ಹಾಗೂ ಸ್ವಯಂ-ಅಳಿಸು ಆನ್‌ ಮಾಡಿ?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> ಹೇಳಿದ್ದಾರೆ"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"ನೀವು ಹೇಳಿದ್ದೀರಿ"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> ಅವರಿಂದ ಸಂದೇಶ"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"ನೀವು ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಿರುವಿರಿ"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"ಕಳುಹಿಸಲಾಗಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"ಕಳುಹಿಸಲಾಗಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲಾಗುತ್ತಿದೆ…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"ಮರುಕಳುಹಿಸಿ ಅಥವಾ ಅಳಿಸಿ"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"ತುರ್ತು ಸೇವೆಗಳಿಗೆ ದಯವಿಟ್ಟು ಧ್ವನಿ ಕರೆಗಳನ್ನು ಮಾಡಿ. ಈ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ ಪಠ್ಯ ಸಂದೇಶವನ್ನು ತಲುಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"ವಿಫಲವಾಗಿದೆ"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲು ಹೊಸ MMS ಸಂದೇಶ"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"ಹೊಸ MMS ಸಂದೇಶ"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲು ಸ್ಪರ್ಶಿಸಿ"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಿ ಇಲ್ಲವೇ ಅಳಿಸಿ"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"ಸಂದೇಶ ಅವಧಿ ಮೀರಿದೆ ಅಥವಾ ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="mms_info" msgid="3402311750134118165">"ಗಾತ್ರ: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, ಮುಕ್ತಾಯ: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ. ಸ್ವೀಕರಿಸುವವರು ಮಾನ್ಯವಾಗಿಲ್ಲ."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಸೇವೆಯು ಸಕ್ರಿಯಗೊಂಡಿಲ್ಲ"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"ನೆಟ್‌ವರ್ಕ್‌ ಸಮಸ್ಯೆಯಿಂದಾಗಿ  ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"ಸಂದೇಶ ಅವಧಿ ಮೀರಿದೆ ಅಥವಾ ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(ವಿಷಯ ಇಲ್ಲ)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"ಕಳುಹಿಸಿದವರು ತಿಳಿದಿಲ್ಲ"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"ತಲುಪಿಸಲಾಗಿದೆ"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> ರಿಂದ <xliff:g id="SUBJECT">%1$s</xliff:g> ಸಂದೇಶವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
-    <string name="low_memory" msgid="5300743415198486619">"ಕಡಿಮೆ ಮೆಮೊರಿಯ ಕಾರಣ ಡೇಟಾಬೇಸ್ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"ಸಂದೇಶ ಕಳುಹಿಸಲಾಗಿಲ್ಲ"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯಲ್ಲಿ ಕೆಲವು ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲಾಗಿಲ್ಲ"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="CONVERSATIONS">%d</xliff:g> ಸಂವಾದಗಳಲ್ಲಿ <xliff:g id="MESSAGES_1">%d</xliff:g> ಸಂದೇಶಗಳು</item>
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> ಸಂವಾದಗಳಲ್ಲಿ <xliff:g id="MESSAGES_1">%d</xliff:g> ಸಂದೇಶಗಳು</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"ಸಂದೇಶವನ್ನು ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲಾಗಿಲ್ಲ"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯಲ್ಲಿ ಕೆಲವು ಸಂದೇಶಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="CONVERSATIONS">%d</xliff:g> ಸಂವಾದಗಳಲ್ಲಿ <xliff:g id="MESSAGES_1">%d</xliff:g> ಸಂದೇಶಗಳು</item>
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> ಸಂವಾದಗಳಲ್ಲಿ <xliff:g id="MESSAGES_1">%d</xliff:g> ಸಂದೇಶಗಳು</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> ಸಂಖ್ಯೆಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಿಲ್ಲ"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"ತುರ್ತು ಸೇವೆಗಳಿಗೆ ದಯವಿಟ್ಟು ಧ್ವನಿ ಕರೆಗಳನ್ನು ಮಾಡಿ. ಈ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ ಪಠ್ಯ ಸಂದೇಶವನ್ನು <xliff:g id="NUMBER">%1$s</xliff:g>  ಸಂಖ್ಯೆಗೆ ತಲುಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> ಹೊಸ ಸಂದೇಶಗಳು</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> ಹೊಸ ಸಂದೇಶಗಳು</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"ಪ್ರಾರಂಭಿಸು"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"ಕ್ಯಾಮರಾ ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"ಕ್ಯಾಮರಾ ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"ವಿಡಿಯೋ ಸೆರೆಹಿಡಿಯುವಿಕೆ ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"ಮಾಧ್ಯಮ ಉಳಿಸಲಾಗಲಿಲ್ಲ"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"ಫೋಟೋ ತೆಗೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="back" msgid="1477626055115561645">"ಹಿಂದೆ"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"ಆರ್ಕೈವ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="action_delete" msgid="4076795795307486019">"ಅಳಿಸಿ"</string>
-    <string name="action_archive" msgid="5437034800324083170">"ಆರ್ಕೈವ್ ಮಾಡಿ"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"ಅನ್‌ಆರ್ಕೈವ್ ಮಾಡು"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಿ"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಆನ್ ಮಾಡು"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"ಸಂಪರ್ಕ ಸೇರಿಸು"</string>
-    <string name="action_download" msgid="7786338136368564146">"ಡೌನ್‌ಲೋಡ್‌"</string>
-    <string name="action_send" msgid="377635240181672039">"ಕಳುಹಿಸು"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"ಅಳಿಸಿ"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"ಈ ಸಂದೇಶವನ್ನು ಅಳಿಸುವುದೇ?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಪಡಿಸಲಾಗುವುದಿಲ್ಲ"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"ಅಳಿಸಿ"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">ಈ ಸಂವಾದಗಳನ್ನು ಅಳಿಸುವುದೇ?</item>
-      <item quantity="other">ಈ ಸಂವಾದಗಳನ್ನು ಅಳಿಸುವುದೇ?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"ಅಳಿಸಿ"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"ರದ್ದುಮಾಡು"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"ಇವರಿಗೆ"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"ಬಹು ಚಿತ್ರಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"ಆಯ್ಕೆ ಖಚಿತಪಡಿಸಿ"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ಆಡಿಯೋ ರೆಕಾರ್ಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ಆಡಿಯೋವನ್ನು ಪ್ಲೇ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ಆಡಿಯೋವನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"ಸ್ಪರ್ಶಿಸಿ &amp; ಹೋಲ್ಡ್‌ ಮಾಡಿ"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"ಚಿತ್ರ"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ಆಡಿಯೊ ಕ್ಲಿಪ್"</string>
-    <string name="notification_video" msgid="4331423498662606204">"ವೀಡಿಯೊ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"ಸಂಪರ್ಕದ ಕಾರ್ಡ್"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ಡೌನ್‌ಲೋಡ್‌"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS ಮೂಲಕ ಪ್ರತ್ಯುತ್ತರಿಸಿ"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS ಮೂಲಕ ಪ್ರತ್ಯುತ್ತರಿಸಿ"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"ಪ್ರತ್ಯುತ್ತರಿಸು"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ಪಾಲ್ಗೊಳ್ಳುವವರು</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ಪಾಲ್ಗೊಳ್ಳುವವರು</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"ನಾನು"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"ಸಂಪರ್ಕವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ &amp; ಆರ್ಕೈವ್‌ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"ಸಂಪರ್ಕವನ್ನು ಅನಿರ್ಬಂಧಿಸಲಾಗಿದೆ &amp; ಆರ್ಕೈವ್ ರದ್ದುಮಾಡಲಾಗಿದೆ"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> ಆರ್ಕೈವ್‌‌ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> ಅನ್‌ಆರ್ಕೈವ್‌ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"ಎಲ್ಲವನ್ನೂ ಹೊಂದಿಸಲಾಗಿದೆ. ಮತ್ತೆ ಕಳುಹಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್‌ನಂತೆ ಹೊಂದಿಸಲಾಗಿದೆ."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">ಲಗತ್ತುಗಳನ್ನು ತಿರಸ್ಕರಿಸು</item>
-      <item quantity="other">ಲಗತ್ತುಗಳನ್ನು ತಿರಸ್ಕರಿಸು</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ಆಡಿಯೋ ಲಗತ್ತು"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ಆಡಿಯೊ ಲಗತ್ತನ್ನು ಪ್ಲೇ ಮಾಡಿ"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"ವಿರಾಮಗೊಳಿಸು"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> ಅವರಿಂದ ಸಂದೇಶ: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> ಅವರಿಂದ ಸಂದೇಶ ವಿಫಲವಾಗಿದೆ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> ಅವರಿಂದ ಸಂದೇಶ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> ಗೆ ಕಳುಹಿಸದಿರುವ ಸಂದೇಶ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> ಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> ಗೆ ಸಂದೇಶ ವಿಫಲವಾಗಿದೆ : <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> ಗೆ ಸಂದೇಶ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> ಅವರಿಂದ ಸಂದೇಶ ವಿಫಲವಾಗಿದೆ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> ಅವರಿಂದ ಸಂದೇಶ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> ಗೆ ಕಳುಹಿಸದಿರುವ ಸಂದೇಶ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> ಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> ಗೆ ಸಂದೇಶ ವಿಫಲವಾಗಿದೆ : <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> ಗೆ ಸಂದೇಶ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ಸಮಯ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"ಸಂದೇಶ ವಿಫಲವಾಗಿದೆ. ಮರುಪ್ರಯತ್ನಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> ಅವರೊಂದಿಗೆ ಸಂಭಾಷಣೆ"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"ವಿಷಯವನ್ನು ಅಳಿಸಿ"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"ವೀಡಿಯೊ ಸೆರೆಹಿಡಿಯಿರಿ"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"ಸ್ಥಿರ ಚಿತ್ರವನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"ಫೋಟೋ ತೆಗೆಯಿರಿ"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"ವೀಡಿಯೊ ರೆಕಾರ್ಡಿಂಗ್ ಪ್ರಾರಂಭಿಸಿ"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"ಪೂರ್ಣ ಪರದೆ ಕ್ಯಾಮರಾಗೆ ಬದಲಿಸಿ"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"ಮುಂದಿನ ಮತ್ತು ಹಿಂದಿನ ಕ್ಯಾಮರಾ ನಡುವೆ ಬದಲಾಯಿಸಿ"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"ರೆಕಾರ್ಡಿಂಗ್ ನಿಲ್ಲಿಸಿ ಮತ್ತು ವೀಡಿಯೊ ಲಗತ್ತಿಸಿ"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"ವೀಡಿಯೊ ರೆಕಾರ್ಡಿಂಗ್ ನಿಲ್ಲಿಸಿ"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"ಫೋಟೋಗಳ ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ಆಲ್ಬಮ್‌ಗೆ <xliff:g id="QUANTITY_2">%d</xliff:g> ಫೋಟೋಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</item>
-      <item quantity="other">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ಆಲ್ಬಮ್‌ಗೆ <xliff:g id="QUANTITY_2">%d</xliff:g> ಫೋಟೋಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ಆಲ್ಬಮ್‌ಗೆ <xliff:g id="QUANTITY_2">%d</xliff:g> ವೀಡಿಯೊಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</item>
-      <item quantity="other">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ಆಲ್ಬಮ್‌ಗೆ <xliff:g id="QUANTITY_2">%d</xliff:g> ವೀಡಿಯೊಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ಆಲ್ಬಮ್‌ಗೆ <xliff:g id="QUANTITY_2">%d</xliff:g> ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</item>
-      <item quantity="other">\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ಆಲ್ಬಮ್‌ಗೆ <xliff:g id="QUANTITY_2">%d</xliff:g> ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one">\"ಡೌನ್‌ಲೋಡ್‌ಗಳಿಗೆ\" <xliff:g id="QUANTITY_1">%d</xliff:g> ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</item>
-      <item quantity="other">\"ಡೌನ್‌ಲೋಡ್‌ಗಳಿಗೆ\" <xliff:g id="QUANTITY_1">%d</xliff:g> ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ಲಗತ್ತುಗಳನ್ನು ಉಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS ಲಗತ್ತನ್ನು ಉಳಿಸಲಾಗಿದೆ"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"ಆರ್ಕೈವ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="action_close" msgid="1840519376200478419">"ಮುಚ್ಚು"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"ಸುಧಾರಿತ"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"ಡೀಬಗ್ ಮಾಡು"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"ಅಧಿಸೂಚನೆಗಳು"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ಶಬ್ದ"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"ಶಾಂತ"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"ವೈಬ್ರೇಟ್‌‌"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS ವಿತರಣಾ ವರದಿಗಳು"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"ನೀವು ಕಳುಹಿಸುವ ಪ್ರತಿ SMS ಗೂ ವಿತರಣೆ ವರದಿಯನ್ನು ವಿನಂತಿಸಿ"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"ಸ್ವಯಂ-ಹಿಂಪಡೆಯುವಿಕೆ"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS ಸಂದೇಶಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹಿಂಪಡೆದುಕೊಳ್ಳಿ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"ರೋಮಿಂಗ್‌‌ನಲ್ಲಿರುವಾಗ ಸ್ವಯಂ-ಹಿಂಪಡೆಯುವಿಕೆ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"ರೋಮಿಂಗ್‌ನಲ್ಲಿರುವಾಗ ಸ್ವಯಂಚಾಲಿತವಾಗಿ MMS ಹಿಂಪಡೆಯಿರಿ"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"ಗುಂಪು ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"ಅನೇಕ ಸ್ವೀಕೃತದಾರರು ಇರುವಾಗ ಒಂದೇ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು MMS ಬಳಸಿ"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"ನಿಮ್ಮ ಫೋನ್‌ ಸಂಖ್ಯೆ"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"ಅಪರಿಚಿತ"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"ಹೊರಹೋಗುವ ಸಂದೇಶಕ್ಕೆ ಧ್ವನಿಗಳು"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"ಡಂಪ್ SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆ ಫೈಲ್‌ಗೆ SMS ಕಚ್ಛಾ ಡೇಟಾವನ್ನು ಡಂಪ್ ಸ್ವೀಕರಿಸಿದೆ"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"ಡಂಪ್ MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆ ಫೈಲ್‌ಗೆ MMS ಕಚ್ಛಾ ಡೇಟಾವನ್ನು ಡಂಪ್ ಸ್ವೀಕರಿಸಿದೆ"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"ವೈರ್‌ಲೆಸ್ ಎಚ್ಚರಿಕೆಗಳು"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"ಸಂದೇಶ ಆಯ್ಕೆಗಳು"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"ಪಠ್ಯ ನಕಲಿಸು"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"ವಿವರಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"ಅಳಿಸಿ"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"ಫಾರ್ವರ್ಡ್ ಮಾಡು"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"ಸಂದೇಶ ವಿವರಗಳು"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"ಪ್ರಕಾರ: "</string>
-    <string name="text_message" msgid="7415419755252205721">"ಪಠ್ಯ ಸಂದೇಶ"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"ಮಲ್ಟಿಮೀಡಿಯಾ ಸಂದೇಶ"</string>
-    <string name="from_label" msgid="1947831848146564875">"ಇಂದ: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"ಗೆ: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"ಕಳುಹಿಸಿದ್ದು: "</string>
-    <string name="received_label" msgid="4442494712757995203">"ಸ್ವೀಕರಿಸಿದ್ದು: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"ವಿಷಯ: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"ಗಾತ್ರ: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"ಆದ್ಯತೆ: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"ಅಧಿಕ"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"ಸಾಮಾನ್ಯ"</string>
-    <string name="priority_low" msgid="7398724779026801851">"ಕಡಿಮೆ"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"ಮರೆಮಾಡಲಾಗಿರುವ ಕಳುಹಿಸುವವರ ವಿಳಾಸ"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"ಲಗತ್ತುಗಳನ್ನು ಲೋಡ್ ಮಾಡುತ್ತಿರುವಾಗ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"ಲಗತ್ತನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"ನೆಟ್‌ವರ್ಕ್ ಸಿದ್ಧವಾಗಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"ಪಠ್ಯ ಅಳಿಸಿ"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"ಪಠ್ಯ ಮತ್ತು ಸಂಖ್ಯೆಗಳ ನಡುವೆ ನಮೂದಿಸುವುದನ್ನು ಬದಲಾಯಿಸಿ"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"ಇನ್ನಷ್ಟು ಪಾಲ್ಗೊಳ್ಳುವವರನ್ನು ಸೇರಿಸಿ"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"ಭಾಗವಹಿಸುವವರನ್ನು ಖಚಿತಪಡಿಸಿ"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"ಹೊಸ ಸಂವಾದವನ್ನು ಪ್ರಾರಂಭಿಸಿ"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"ಈ ಐಟಂ ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"ವೀಡಿಯೊ ಪ್ಲೇ ಮಾಡಿ"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"ಜನರು &amp; ಆಯ್ಕೆಗಳು"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"ಡೀಬಗ್ ಮಾಡು"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"ಜನರು &amp; ಆಯ್ಕೆಗಳು"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"ಸಾಮಾನ್ಯ"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"ಈ ಸಂವಾದದಲ್ಲಿರುವ ಜನರು"</string>
-    <string name="action_call" msgid="6596167921517350362">"ಕರೆ ಮಾಡಿ"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt; ನಿಂದ ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">ಫೋಟೋಗಳನ್ನು ಕಳುಹಿಸಿ</item>
-      <item quantity="other">ಫೋಟೋಗಳನ್ನು ಕಳುಹಿಸಿ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">ಆಡಿಯೋಗಳನ್ನು ಕಳುಹಿಸಿ</item>
-      <item quantity="other">ಆಡಿಯೋಗಳನ್ನು ಕಳುಹಿಸಿ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">ವೀಡಿಯೊಗಳನ್ನು ಕಳುಹಿಸಿ</item>
-      <item quantity="other">ವೀಡಿಯೊಗಳನ್ನು ಕಳುಹಿಸಿ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">ಸಂಪರ್ಕ ಕಾರ್ಡ್‍ಗಳನ್ನು ಕಳುಹಿಸಿ</item>
-      <item quantity="other">ಸಂಪರ್ಕ ಕಾರ್ಡ್‍ಗಳನ್ನು ಕಳುಹಿಸಿ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">ಲಗತ್ತುಗಳನ್ನು ಕಳುಹಿಸಿ</item>
-      <item quantity="other">ಲಗತ್ತುಗಳನ್ನು ಕಳುಹಿಸಿ</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ಕಳುಹಿಸಲು ಲಗತ್ತುಗಳು ಸಿದ್ಧವಾಗಿವೆ</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ಕಳುಹಿಸಲು ಲಗತ್ತುಗಳು ಸಿದ್ಧವಾಗಿವೆ</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"ಪ್ರತಿಕ್ರಿಯೆ ಕಳುಹಿಸಿ"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Store ನಲ್ಲಿ ವೀಕ್ಷಿಸಿ"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"ಆವೃತ್ತಿ ಮಾಹಿತಿ"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"ಆವೃತ್ತಿ %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"ಮುಕ್ತ ಮೂಲ ಪರವಾನಗಿಗಳು"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"ಅಧಿಸೂಚನೆಗಳು"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"ಲಗತ್ತು ಮಿತಿಯನ್ನು ತಲುಪಿದೆ"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"ಲಗತ್ತನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸುವುದೇ?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"ಸಂಪರ್ಕ ಸೇರಿಸು"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"ವಿಷಯ"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"ವಿಷಯ: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"ಸಂಪರ್ಕ ಕಾರ್ಡ್‌ ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"ಸಂಪರ್ಕ ಕಾರ್ಡ್ ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"ಸಂಪರ್ಕ ಕಾರ್ಡ್ ವೀಕ್ಷಿಸಿ"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ಸಂಪರ್ಕಗಳು</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ಸಂಪರ್ಕಗಳು</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"ಸಂಪರ್ಕ ಕಾರ್ಡ್‌ಗಳು"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"ಜನ್ಮದಿನ"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"ಟಿಪ್ಪಣಿಗಳು"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"ಸಂದೇಶವನ್ನು ಫಾರ್ವರ್ಡ್ ಮಾಡು"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"ಪ್ರತ್ಯುತ್ತರ ನೀಡು"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"ಕಳುಹಿಸಲು, ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್‌ನಂತೆ ಹೊಂದಿಸಿ"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್‌ನಂತೆ ಹೊಂದಿಸಿ"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"ಬದಲಾಯಿಸು"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸಲು, ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಡೀಫಾಲ್ಟ್ SMS ಅಪ್ಲಿಕೇಶನ್‌ನಂತೆ ಹೊಂದಿಸಿ"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ಯಾವುದೇ ಪ್ರಾಶಸ್ತ್ಯದ ಸಿಮ್ ಆಯ್ಕೆಮಾಡಲಾಗಿಲ್ಲ"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"ಸಾಧನದ ಮಾಲೀಕರಿಂದ ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಅನುಮತಿಸಲಾಗಿಲ್ಲ"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ಸರಿ"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"ಸಂವಾದದಲ್ಲಿ ಹಲವಾರು ಸಹಭಾಗಿಗಳಿದ್ದಾರೆ"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">ಅಮಾನ್ಯ ಸಂಪರ್ಕಗಳು</item>
-      <item quantity="other">ಅಮಾನ್ಯ ಸಂಪರ್ಕಗಳು</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"ಕ್ಯಾಮರಾ ಚಿತ್ರವನ್ನು ಲೋಡ್ ಮಾಡಲಾಗಲಿಲ್ಲ"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"ನೀವು: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"ಡ್ರಾಫ್ಟ್‌"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"ನೀವು ಒಮ್ಮೆ ಹೊಸ ಸಂವಾದ ಪ್ರಾರಂಭಿಸಿದರೆ, ಅದು ಇಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಲಾಗಿರುವುದನ್ನು ನೋಡುತ್ತೀರಿ"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"ಆರ್ಕೈವ್‌ ಮಾಡಲಾದ ಸಂವಾದಗಳು ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"ಸಂವಾದಗಳನ್ನು ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"ಚಿತ್ರ"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ಆಡಿಯೊ ಕ್ಲಿಪ್"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"ವೀಡಿಯೊ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"ಸಂಪರ್ಕದ ಕಾರ್ಡ್"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"ರದ್ದುಮಾಡು"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"ಮರುಪ್ರಯತ್ನಿಸು"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"ಹೊಸ ಸಂದೇಶವನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಂಪರ್ಕ ಹೆಸರು ಅಥವಾ ಫೊನ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ"</string>
-    <string name="action_block" msgid="9032076625645190136">"ನಿರ್ಬಂಧಿಸು"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> ಅನಿರ್ಬಂಧಿಸು"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> ನಿರ್ಬಂಧಿಸುವುದೇ?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"ಈ ಸಂಖ್ಯೆಯಿಂದ ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ನೀವು ಮುಂದುವರೆಸುತ್ತೀರಿ ಆದರೆ ಇನ್ನು ಮುಂದೆ ಸೂಚನೆ ನೀಡುವುದಿಲ್ಲ. ಈ ಸಂವಾದವನ್ನು ಆರ್ಕೈವ್‌ ಮಾಡಲಾಗುವುದು."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಪರ್ಕಗಳು"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ಅನಿರ್ಬಂಧಿಸು"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಪರ್ಕಗಳು"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"ಡಾಕ್ಯುಮೆಂಟ್ ಲೈಬ್ರರಿಯಿಂದ ಚಿತ್ರವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="sending_message" msgid="6363584950085384929">"ಸಂದೇಶ ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"ಸಂದೇಶ ಕಳುಹಿಸಲಾಗಿದೆ"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"ಸೆಲ್ಯುಲಾರ್ ಡೇಟಾ ಆಫ್ ಮಾಡಲಾಗಿದೆ. ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"ಸಂದೇಶಗಳನ್ನು ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್‌ನಲ್ಲಿ ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"ಸಂದೇಶ ಕಳುಸಲು ಆಗುತ್ತಿಲ್ಲ"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"ಸಂದೇಶ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"ಸೆಲ್ಯುಲಾರ್ ಡೇಟಾ ಆಫ್ ಮಾಡಲಾಗಿದೆ. ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರೀಕ್ಷಿಸಿ."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್‌ನಲ್ಲಿ ಸಂದೇಶಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"ಸಂದೇಶವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"ಶೂನ್ಯ"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"ಒಂದು"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"ಎರಡು"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"ಮೂರು"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"ನಾಲ್ಕು"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"ಐದು"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ಆರು"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"ಏಳು"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"ಎಂಟು"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"ಒಂದತ್ತು"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> ಮೂಲಕ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ದೋಷ <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"ಅಜ್ಞಾತ ವಾಹಕದ ಮೂಲಕ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ದೋಷ <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"ಫಾರ್ವರ್ಡ್‌: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ: ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಸೇವೆಯು ಸಕ್ರಿಯಗೊಂಡಿಲ್ಲ"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ: ಅಮಾನ್ಯವಾದ ಗಮ್ಯಸ್ಥಾನ ವಿಳಾಸ"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ: ಅಮಾನ್ಯವಾದ ಸಂದೇಶ"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ: ಬೆಂಬಲವಿಲ್ಲದ ವಿಷಯ"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಲಿಲ್ಲ: ಬೆಂಬಲವಿಲ್ಲದ ಸಂದೇಶ"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗಿಲ್ಲ: ತುಂಬಾ ದೊಡ್ಡದಾಗಿದೆ"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"ಹೊಸ ಸಂದೇಶ"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"ವೀಕ್ಷಿಸಿ"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"ಚಿತ್ರ"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"ಸೂಕ್ತವಾದ ಅಪ್ಲಿಕೇಶನ್ ಕಂಡುಬಂದಿಲ್ಲ"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"ಸ್ವೀಕೃತಿದಾರರನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"ಹೊಸ ಸಂದೇಶ"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"ರದ್ದುಮಾಡು"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"ಪ್ರವೇಶ ಬಿಂದು ಸಂಪಾದನೆ"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"ಹೊಂದಿಸಿಲ್ಲ"</string>
-    <string name="apn_name" msgid="1572691851070894985">"ಹೆಸರು"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS ಪ್ರಾಕ್ಸಿ"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS ಪೋರ್ಟ್"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN ಪ್ರಕಾರ"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN ಅಳಿಸು"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"ಹೊಸ APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"ಉಳಿಸು"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"ತಿರಸ್ಕರಿಸು"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"ಹೆಸರಿನ ಕ್ಷೇತ್ರವು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN ಖಾಲಿ ಇರುವಂತಿಲ್ಲ."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC ಕ್ಷೇತ್ರವು 3 ಅಂಕಿಗಳಾಗಿರಬೇಕು."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC ಕ್ಷೇತ್ರವು 2 ಅಥವಾ 3 ಅಂಕಿಗಳಾಗಿರಬೇಕು."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"ಡೀಫಾಲ್ಟ್ APN ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"ಡೀಫಾಲ್ಟ್‌ಗೆ  ಮರುಹೊಂದಿಸು"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"ಡೀಫಾಲ್ಟ್ APN ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಮರುಹೊಂದಿಕೆಯು ಪೂರ್ಣಗೊಂಡಿದೆ."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"ಶೀರ್ಷಿಕೆರಹಿತ"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ಪ್ರವೇಶಿಸುವಿಕೆ ಕೇಂದ್ರದ ಹೆಸರುಗಳು"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN ಗಳು"</string>
-    <string name="menu_new" msgid="8286285392706532511">"ಹೊಸ APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"ಪ್ರವೇಶ ಬಿಂದು ಹೆಸರಿನ ಸೆಟ್ಟಿಂಗ್‌ಗಳು ಈ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿಲ್ಲ"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸುವುದೇ?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"ನಕಲಿಸು"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> ಗೆ"</string>
-    <string name="general_settings" msgid="5409336577057897710">"ಸಾಮಾನ್ಯ"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"ಸುಧಾರಿತ"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"ಸಾಮಾನ್ಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"ಸುಧಾರಿತ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" ಸಿಮ್‌"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"ಎಲ್ಲಾ ಸ್ವೀಕೃತದಾರರಿಗೆ ಪ್ರತ್ಯೇಕ SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಿ. ಯಾವುದೇ ಪ್ರತ್ಯುತ್ತರಗಳು ನಿಮಗೆ ಮಾತ್ರ ಬರುತ್ತವೆ"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"ಎಲ್ಲಾ ಸ್ವೀಕೃತಿದಾರರಿಗೆ ಒಂದೇ MMS ಕಳುಹಿಸಿ"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"ಅಜ್ಞಾತ ಸಂಖ್ಯೆ"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"ಹೊಸ ಸಂದೇಶ"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"ಹೊಸ ಸಂದೇಶ."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"ಸಿಮ್ ಆಯ್ಕೆದಾರ"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ, ಸಿಮ್ ಆಯ್ಕೆ"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"ವಿಷಯವನ್ನು ಸಂಪಾದಿಸಿ"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"ಸಿಮ್ ಆಯ್ಕೆ ಮಾಡಿ ಅಥವಾ ವಿಷಯ ಸಂಪಾದಿಸಿ"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ಆಡಿಯೋ ಅನ್ನು ರೆಕಾರ್ಡ್ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"ಹೊಸ ಸಂವಾದವನ್ನು ಪ್ರಾರಂಭಿಸಿ"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ ಪಟ್ಟಿ"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"ಹೊಸ ಸಂದೇಶ"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"ಸಂವಾದ ಪಟ್ಟಿ"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"ಸಂವಾದಗಳನ್ನು ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"ಸಂದೇಶಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"ಇನ್ನಷ್ಟು ಸಂವಾದಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"ಹೆಚ್ಚಿನ ಸಂದೇಶಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"ಸಂವಾದವನ್ನು ಅಳಿಸಲಾಗಿದೆ"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"ಸಂಭಾಷಣೆಯನ್ನು ಅಳಿಸಲಾಗಿದೆ. ಬೇರೆ ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ ಸಂಭಾಷಣೆಯನ್ನು ತೋರಿಸಲು ಸ್ಪರ್ಶಿಸಿ"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"ಅನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
-    <string name="db_full" msgid="8459265782521418031">"ಸಂಗ್ರಹಣೆ ಸ್ಥಳಾವಕಾಶವು ಕಡಿಮೆ ಇದೆ. ಕೆಲವು ಡೇಟಾ ನಷ್ಟವಾಗಬಹುದು."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"ಲಗತ್ತುಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"ಆಯ್ಕೆ ಖಚಿತಪಡಿಸಿ"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"ದಯವಿಟ್ಟು ಒಂದು ಅಥವಾ ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಲಗತ್ತುಗಳನ್ನು ತೆಗೆದುಹಾಕಿ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"ನಿಮ್ಮ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ನೀವು ಪ್ರಯತ್ನಿಸಬಹುದು, ಆದರೆ ನೀವು ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಲಗತ್ತುಗಳನ್ನು ತೆಗೆದುಹಾಕದ ಹೊರತು ಇದು ತಲುಪದಿರಬಹುದು."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"ನೀವು ಪ್ರತಿ ಸಂದೇಶಕ್ಕೆ ಒಂದು ವೀಡಿಯೊ ಮಾತ್ರ ಕಳುಹಿಸಬಹುದು. ದಯವಿಟ್ಟು ಹೆಚ್ಚುವರಿ ವೀಡಿಯೊಗಳನ್ನು ತೆಗೆದುಹಾಕಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆಯು ಲಗತ್ತನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"ಹೇಗಾದರೂ ಕಳುಹಿಸು"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"ಸಂವಾದವನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ"</string>
-</resources>
diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml
deleted file mode 100644
index 876776b..0000000
--- a/res/values-ko/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"제목 없음"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"예"</item>
-    <item msgid="6049132459802288033">"아니요"</item>
-    <item msgid="3084376867445867895">"알겠습니다"</item>
-    <item msgid="3155097332660174689">"하하"</item>
-    <item msgid="2611328818571146775">"감사합니다."</item>
-    <item msgid="4881335087096496747">"동의합니다"</item>
-    <item msgid="2422296858597420738">"좋습니다."</item>
-    <item msgid="4805581752819452687">"가는 중입니다"</item>
-    <item msgid="4746700499431366214">"나중에 연락드리겠습니다"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
deleted file mode 100644
index 1faec2a..0000000
--- a/res/values-ko/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"메시지"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"메시지"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"대화 선택"</string>
-    <string name="action_settings" msgid="1329008122345201684">"설정"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"메시지 보내기"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"첨부파일 추가"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"도움말"</string>
-    <string name="welcome" msgid="2857560951820802321">"환영합니다."</string>
-    <string name="skip" msgid="7238879696319945853">"건너뛰기"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"다음 &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"다음"</string>
-    <string name="exit" msgid="1905187380359981199">"종료"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"설정 &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"설정"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"메시지를 사용하려면 SMS, 전화, 주소록에 대한 권한이 필요합니다."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"설정 &gt; 앱 &gt; 메시지 &gt; 권한에서 권한을 변경할 수 있습니다."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"설정, 앱, 메시지, 권한에서 권한을 변경할 수 있습니다."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"자주 연락하는 사람"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"모든 연락처"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"받는사람: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"사진 또는 동영상 캡처"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"이 기기에서 이미지 선택"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"오디오 녹음"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"사진 선택"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"미디어가 선택되었습니다."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"미디어가 선택 취소되었습니다."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g>개 선택됨"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"이미지 - <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"이미지"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"오디오 녹음"</string>
-    <string name="action_share" msgid="2143483844803153871">"공유"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"방금 전"</string>
-    <string name="posted_now" msgid="867560789350406701">"지금"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>분</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>분</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>시간</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>시간</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>일</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>일</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>주</item>
-      <item quantity="one">1주</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>개월</item>
-      <item quantity="one">1개월</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>년</item>
-      <item quantity="one">1년</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"클래스 0 메시지"</string>
-    <string name="save" msgid="5081141452059463572">"저장"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"기기의 저장공간이 부족합니다. 메시지에서 공간을 확보하기 위해 오래된 메시지를 삭제합니다."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"저장 공간이 부족함"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"기기 공간이 더 확보되어야 메시지 앱에서 메시지를 보내고 받을 수 있습니다."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS 저장공간이 부족합니다. 메시지를 삭제해야 합니다."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"전화번호 확인"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"이 단계를 한 번만 실행하면 메시지 앱에서 그룹 메시지를 정확히 전달할 수 있습니다."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"전화번호"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"미디어가 포함된 모든 메시지 삭제"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g>보다 오래된 메시지 삭제"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> 이상 된 메시지 자동 삭제"</string>
-    <string name="ignore" msgid="7063392681130898793">"무시"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"미디어가 포함된 모든 메시지를 삭제하시겠습니까?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> 이상 된 메시지를 삭제하시겠습니까?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> 이상 된 메시지를 삭제하고 자동 삭제를 사용하시겠습니까?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g>님이 보낸 내용"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"보낸 내용"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g>님이 보낸 메시지"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"메시지 전송됨"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"보내는 중..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"전송되지 않았습니다. 다시 시도하려면 터치하세요."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"전송되지 않았습니다. 다시 시도하는 중…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"다시 보내기 또는 삭제"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"음성 통화로 응급 서비스에 연락하시기 바랍니다. 현재 SMS를 보낼 수 없습니다."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"실패"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"다운로드할 새 MMS 메시지"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"새 MMS 메시지"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"다운로드하지 못했습니다."</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"다시 시도하려면 터치"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"터치하여 다운로드"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"다운로드 또는 삭제"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"다운로드 중..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"메시지가 만료되었거나 사용할 수 없음"</string>
-    <string name="mms_info" msgid="3402311750134118165">"크기: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, 만료: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"보낼 수 없습니다. 수신자가 올바르지 않습니다."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"네트워크에 서비스가 활성화되어 있지 않습니다."</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"네트워크 문제로 인해 전송하지 못했습니다."</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"메시지가 만료되었거나 사용할 수 없음"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(제목 없음)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"알 수 없는 발신자"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"전송 완료"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g>님이 보낸 메시지(<xliff:g id="SUBJECT">%1$s</xliff:g>)를 다운로드할 수 없습니다."</string>
-    <string name="low_memory" msgid="5300743415198486619">"메모리가 부족하여 데이터베이스 작업을 완료할 수 없습니다."</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"메시지를 보내지 못함"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"일부 메시지가 전송되지 않았습니다."</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other">대화 <xliff:g id="CONVERSATIONS">%d</xliff:g>개에 메시지 <xliff:g id="MESSAGES_1">%d</xliff:g>개</item>
-      <item quantity="one">대화 1개에 메시지 <xliff:g id="MESSAGES_0">%d</xliff:g>개</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"메시지를 다운로드하지 못했습니다."</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"일부 메시지가 다운로드되지 않았습니다."</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other">대화 <xliff:g id="CONVERSATIONS">%d</xliff:g>개에 메시지 <xliff:g id="MESSAGES_1">%d</xliff:g>개</item>
-      <item quantity="one">대화 1개에 메시지 <xliff:g id="MESSAGES_0">%d</xliff:g>개</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g>에 메시지를 보내지 못했습니다."</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"음성 통화로 응급 서비스에 연락하시기 바랍니다. 현재 <xliff:g id="NUMBER">%1$s</xliff:g>번으로 SMS를 보낼 수 없습니다."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other">새 메시지 <xliff:g id="MESSAGES">%d</xliff:g>개</item>
-      <item quantity="one">새 메시지 1개</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"시작"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"카메라를 사용할 수 없습니다."</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"카메라를 사용할 수 없습니다."</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"동영상을 캡처할 수 없습니다."</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"미디어를 저장할 수 없습니다."</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"사진을 찍을 수 없음"</string>
-    <string name="back" msgid="1477626055115561645">"뒤로"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"보관처리됨"</string>
-    <string name="action_delete" msgid="4076795795307486019">"삭제"</string>
-    <string name="action_archive" msgid="5437034800324083170">"보관처리"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"보관 취소"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"알림 사용 중지"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"알림 사용"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"연락처 추가"</string>
-    <string name="action_download" msgid="7786338136368564146">"다운로드"</string>
-    <string name="action_send" msgid="377635240181672039">"전송"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"삭제"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"이 메일을 삭제하시겠습니까?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"이 작업은 취소할 수 없습니다."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"삭제"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">대화를 삭제하시겠습니까?</item>
-      <item quantity="one">대화를 삭제하시겠습니까?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"삭제"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"취소"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"받는사람"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"여러 이미지 선택"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"선택항목 확인"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"오디오를 녹음할 수 없습니다. 다시 시도해 주세요."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"오디오를 재생할 수 없습니다. 다시 시도해 주세요."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"오디오를 저장할 수 없습니다. 다시 시도해 주세요."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"길게 터치"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"사진"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"오디오 클립"</string>
-    <string name="notification_video" msgid="4331423498662606204">"동영상"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"연락처 카드"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"다운로드"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS를 통해 답장"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS로 답장"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"답장"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other">참여자 <xliff:g id="COUNT_1">%d</xliff:g>명</item>
-      <item quantity="one">참여자 <xliff:g id="COUNT_0">%d</xliff:g>명</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"나"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"연락처가 차단 및 보관되었습니다."</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"연락처 차단 해제 및 보관 취소됨"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g>개 보관됨"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g>개 보관 취소됨"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"알림 사용 중지됨"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"알림 사용 설정됨"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"준비가 완료되었습니다. 전송을 다시 터치해 주세요."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"메시지가 기본 SMS 앱으로 설정되었습니다."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">첨부파일 삭제</item>
-      <item quantity="one">첨부파일 삭제</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"오디오 첨부파일"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"오디오 첨부파일 재생"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"일시중지"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g>님의 메시지입니다. <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"받지 못한 <xliff:g id="SENDER">%1$s</xliff:g>님의 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g>님의 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g>님에게 전송되지 않은 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g>님에게 전송 중인 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g>님에게 전송하지 못한 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g>님에게 보내는 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"받지 못한 <xliff:g id="SENDER">%1$s</xliff:g>님의 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g>님의 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> 그룹에 전송되지 않은 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> 그룹에 전송 중인 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> 그룹에 전송하지 못한 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> 그룹에 보내는 메시지: <xliff:g id="MESSAGE">%2$s</xliff:g>. 시간: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"메시지를 전달하지 못했습니다. 다시 시도하려면 터치하세요."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g>님과 대화"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"제목 삭제"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"동영상 촬영"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"정지 이미지 캡처"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"사진 촬영"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"동영상 녹화 시작"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"전체화면 카메라로 전환"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"전면 및 후면 카메라 전환"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"녹화 중지 및 비디오 첨부"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"동영상 녹화 중지"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"메시지 사진"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other">사진 <xliff:g id="QUANTITY_2">%d</xliff:g>장이 \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" 앨범에 저장됨</item>
-      <item quantity="one">사진 <xliff:g id="QUANTITY_0">%d</xliff:g>장이 \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" 앨범에 저장됨</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other">동영상 <xliff:g id="QUANTITY_2">%d</xliff:g>개가 \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" 앨범에 저장됨</item>
-      <item quantity="one">동영상 <xliff:g id="QUANTITY_0">%d</xliff:g>개가 \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" 앨범에 저장됨</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other">첨부파일 <xliff:g id="QUANTITY_2">%d</xliff:g>개가 \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" 앨범에 저장됨</item>
-      <item quantity="one">첨부파일 <xliff:g id="QUANTITY_0">%d</xliff:g>개가 \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" 앨범에 저장됨</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other">첨부파일 <xliff:g id="QUANTITY_1">%d</xliff:g>개가 \"다운로드\"에 저장됨</item>
-      <item quantity="one">첨부파일 <xliff:g id="QUANTITY_0">%d</xliff:g>개가 \"다운로드\"에 저장됨</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">첨부파일 <xliff:g id="QUANTITY_1">%d</xliff:g>개가 첨부되었습니다.</item>
-      <item quantity="one">첨부파일 <xliff:g id="QUANTITY_0">%d</xliff:g>개가 저장되었습니다.</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">첨부파일 <xliff:g id="QUANTITY_1">%d</xliff:g>개를 저장하지 못했습니다.</item>
-      <item quantity="one">첨부파일 <xliff:g id="QUANTITY_0">%d</xliff:g>개를 저장하지 못했습니다.</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"저장된 MMS 첨부파일"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"설정"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"보관처리됨"</string>
-    <string name="action_close" msgid="1840519376200478419">"닫기"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"고급"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"디버그"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"알림"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"소리"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"무음"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"진동"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"차단됨"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS 전송 보고"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"모든 SMS에 대해 전송 확인 요청"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"자동 검색"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS 메시지를 자동으로 수신"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"로밍 중 자동 수신"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"로밍 시 MMS 자동 검색"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"그룹 메시지"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"수신자가 여러 명일 때 MMS를 사용하여 한 개의 메시지를 전송합니다."</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"기본 SMS 앱"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"기본 SMS 앱"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"전화번호"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"알 수 없음"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"발신 메시지 소리"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS 덤프"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"수신된 SMS 원시 데이터를 외부 저장소 파일에 덤프합니다."</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS 덤프"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"수신된 MSS 원시 데이터를 외부 저장소 파일에 덤프합니다."</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"긴급 무선 경보"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"메시지 옵션"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"텍스트 복사"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"세부정보 보기"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"삭제"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"전달"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"메시지 세부정보"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"유형: "</string>
-    <string name="text_message" msgid="7415419755252205721">"문자 메시지"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"멀티미디어 메시지"</string>
-    <string name="from_label" msgid="1947831848146564875">"보낸사람: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"받는사람: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"보낸 시간: "</string>
-    <string name="received_label" msgid="4442494712757995203">"받은 시간: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"제목: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"크기: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"중요도: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"높음"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"보통"</string>
-    <string name="priority_low" msgid="7398724779026801851">"낮음"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"숨긴 발신자 주소"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"파일을 로드하는 동안 메시지를 보낼 수 없습니다."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"첨부파일을 로드할 수 없습니다. 다시 시도해 주세요."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"네트워크가 준비되지 않았습니다. 다시 시도해 주세요."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"텍스트 삭제"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"텍스트 및 숫자 입력 간 전환"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"더 많은 참가자 추가"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"참가자 확인"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"새로운 대화 시작"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"이 항목을 선택합니다."</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Play 동영상"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"사용자 및 옵션"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"디버그"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"사용자 및 옵션"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"일반"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"이 대화에 참여하는 사용자"</string>
-    <string name="action_call" msgid="6596167921517350362">"전화 걸기"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"메시지 보내기"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;에서 메시지 보내기"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">사진 전송</item>
-      <item quantity="one">사진 전송</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">오디오 전송</item>
-      <item quantity="one">오디오 전송</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">동영상 전송</item>
-      <item quantity="one">동영상 전송</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">연락처 카드 전송</item>
-      <item quantity="one">연락처 카드 전송</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">첨부파일 전송</item>
-      <item quantity="one">첨부파일 전송</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other">첨부파일 <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g>개 전송 준비 완료</item>
-      <item quantity="one">첨부파일 1개 전송 준비 완료</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"의견 보내기"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play 스토어에서 보기"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"버전 정보"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"버전: %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"오픈소스 라이선스"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"알림"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"첨부파일 한도 도달"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"첨부파일을 로드하지 못했습니다."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"주소록에 추가하시겠습니까?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"연락처 추가"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"제목"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"제목: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"연락처 카드 로드 중"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"연락처 카드를 로드할 수 없습니다."</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"연락처 카드 보기"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other">연락처 <xliff:g id="COUNT_1">%d</xliff:g>개</item>
-      <item quantity="one">연락처 <xliff:g id="COUNT_0">%d</xliff:g>개</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"연락처 카드"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"생일"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"메모"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"메시지 전달"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"답장"</string>
-    <string name="plus_one" msgid="9010288417554932581">"외 1명"</string>
-    <string name="plus_n" msgid="8961547034116059566">"외 %d명"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS 사용 중지됨"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"메시지를 전송하려면 메시지를 기본 SMS 앱으로 설정하세요."</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"메시지를 기본 SMS 앱으로 설정하세요."</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"변경"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"메시지를 수신하려면 메시지를 기본 SMS 앱으로 설정하세요."</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS 메시지 보내기에 사용할 기본 앱이 선택되어 있지 않습니다."</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"기기 소유자가 허용하지 않은 앱입니다."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"확인"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"대화 참가자가 너무 많습니다."</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">잘못된 연락처</item>
-      <item quantity="one">잘못된 연락처</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"카메라 이미지를 로드할 수 없습니다."</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"나: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"임시보관"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"새 대화를 시작하면 여기에 표시됩니다."</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"보관처리된 대화는 여기에 표시됩니다."</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"대화 로드 중..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"사진"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"오디오 클립"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"동영상"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"연락처 카드"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"실행취소"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"다시 시도"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"새로운 메시지를 시작하려면 연락처 이름 또는 전화번호를 입력하세요."</string>
-    <string name="action_block" msgid="9032076625645190136">"차단"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> 차단"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> 차단 해제"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g>을(를) 차단하시겠습니까?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"앞으로 이 번호에서 보낸 메시지를 계속 받지만 알림은 더 이상 받지 않습니다. 이 대화는 보관처리됩니다."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"차단된 연락처"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"차단 해제"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"차단된 연락처"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"문서 라이브러리에서 이미지 선택"</string>
-    <string name="sending_message" msgid="6363584950085384929">"메시지를 전송하는 중입니다."</string>
-    <string name="send_message_success" msgid="4088006261869323324">"메시지가 전송되었습니다."</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"이동통신 데이터 사용이 중지되어 있습니다. 설정을 확인하세요."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"비행기 모드에서는 메시지를 보낼 수 없습니다."</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"메시지를 보내지 못했습니다."</string>
-    <string name="download_message_success" msgid="3514921076616367225">"메시지가 다운로드되었습니다."</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"이동통신 데이터 사용이 중지되어 있습니다. 설정을 확인하세요."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"비행기 모드에서 메시지를 다운로드할 수 없습니다."</string>
-    <string name="download_message_failure" msgid="635370887537738004">"메시지를 다운로드할 수 없습니다."</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"0"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"1"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"2"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"3"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"4"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"5"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"6"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"7"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"8"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"9"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g>을(를) 사용하여 메시지를 보낼 수 없습니다. 오류: <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"알 수 없는 이동통신사를 사용하여 메시지를 보낼 수 없습니다. 오류: <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"전달: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"서비스가 네트워크에서 활성화되지 않아 메시지가 전송되지 않았습니다."</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"메시지가 전송되지 않음: 잘못된 수신 주소"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"메시지가 전송되지 않음: 잘못된 메시지"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"메시지가 전송되지 않음: 지원되지 않는 콘텐츠"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"메시지가 전송되지 않음: 지원되지 않는 메시지"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"메시지가 전송되지 않음: 용량 초과"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"새 메시지"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"보기"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"이미지"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"관련 애플리케이션을 찾을 수 없습니다."</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"수신자 삭제"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"새 메시지"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"취소"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"액세스포인트 네임(APN) 수정"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"설정되지 않음"</string>
-    <string name="apn_name" msgid="1572691851070894985">"이름"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS 프록시"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS 포트"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN 유형"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN 삭제"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"새 APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"저장"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"취소"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"이름 입력란은 비워둘 수 없습니다."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN을 비워둘 수 없습니다."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC 입력란에는 3자리 숫자를 입력해야 합니다."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC 입력란에는 2~3자리 숫자를 입력해야 합니다."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"기본 APN 설정 복원 중"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"기본값으로 재설정"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"기본 APN 설정을 초기화했습니다."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"제목 없음"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"APN"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"새 APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"이 사용자는 액세스포인트 네임(APN) 설정을 수정할 수 없습니다."</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"클립보드에 복사할까요?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"복사"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"전송 대상: <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"일반"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"고급"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"일반 설정"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"고급 설정"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\'<xliff:g id="SIM_NAME">%s</xliff:g>\' SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"모든 수신자에게 개별 SMS 보내기(나만 답장을 받을 수 있음)"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"모든 수신자에게 하나의 MMS 보내기"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"알 수 없는 번호"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"새 메시지"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"새 메시지"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM 선택기"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> 선택됨. SIM 선택기"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"제목 수정"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM 선택 또는 제목 수정"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"길게 눌러 오디오 녹음"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"새로운 대화 시작"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"메시지"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"메시지 목록"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"메시지"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"새 메시지"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"대화 목록"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"대화 로드 중"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"메시지 로드 중"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"대화 더보기"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"메시지 더보기"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"대화를 삭제함"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"대화가 삭제되었습니다. 다른 메시지 대화를 표시하려면 터치하세요."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"차단됨"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"차단 해제됨"</string>
-    <string name="db_full" msgid="8459265782521418031">"저장공간이 충분하지 않아 일부 데이터가 저장되지 않을 수 있습니다."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"첨부파일 선택"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"선택항목 확인"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g>개 선택됨"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"하나 이상의 첨부파일을 삭제하고 다시 시도하세요."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"메시지 보내기를 시도할 수는 있지만 하나 이상의 첨부파일을 삭제하지 않으면 전송되지 않을 수 있습니다."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"메시지당 하나의 동영상만 보낼 수 있습니다. 추가 동영상을 삭제하고 다시 시도하세요."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"메시지에서 첨부파일이 로드되지 않았습니다."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"무시하고 보내기"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"대화를 시작할 수 없습니다."</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g>(<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> 선택됨"</string>
-</resources>
diff --git a/res/values-ky/arrays.xml b/res/values-ky/arrays.xml
deleted file mode 100644
index 0227144..0000000
--- a/res/values-ky/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"темасы жок"</item>
-    <item msgid="272485471009191934">"темасыжок"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ооба"</item>
-    <item msgid="6049132459802288033">"Жок"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Хе-хе"</item>
-    <item msgid="2611328818571146775">"Рахмат"</item>
-    <item msgid="4881335087096496747">"Туура"</item>
-    <item msgid="2422296858597420738">"Сонун"</item>
-    <item msgid="4805581752819452687">"Жолдомун"</item>
-    <item msgid="4746700499431366214">"Макул, бир аздан кийин кайрылайынчы"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
deleted file mode 100644
index 96b6d86..0000000
--- a/res/values-ky/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"SMS/MMS"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"SMS/MMS"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Маек тандаңыз"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Жөндөөлөр"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Билдирүү жөнөтүү"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Тиркеме кошуңуз"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Жардам"</string>
-    <string name="welcome" msgid="2857560951820802321">"Кош келиңиз"</string>
-    <string name="skip" msgid="7238879696319945853">"Өткөрүп жиберүү"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Кийинки &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Кийинки"</string>
-    <string name="exit" msgid="1905187380359981199">"Чыгуу"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Жөндөөлөр &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Жөндөөлөр"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"SMS/MMS\'ке SMS, телефон жана байланыштар уруксаты керек."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Уруксаттарды өзгөртүү үчүн Жөндөөлөр &gt; Колдонмолор &gt; SMS/MMS &gt; уруксаттарды басыңыз."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Уруксаттарды өзгөртүү үчүн Жөндөөлөр, Колдонмолор, SMS/MMS, уруксаттарды басыңыз."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Көп байланышкандар"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Бардык байланыштар"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Төмөнкүгө жөнөтүү <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Сүрөттөрдү же видео тартып алуу"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Бул түзмөктөн сүрөттөрдү тандаңыз"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Аудио жаздыруу"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Сүрөт тандаңыз"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Медиа файл тандалды."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Медиа файл тандоодон чыгарылды."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> тандалды"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"сүрөт <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"сүрөт"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Аудио жаздыруу"</string>
-    <string name="action_share" msgid="2143483844803153871">"Бөлүшүү"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Жаңы эле"</string>
-    <string name="posted_now" msgid="867560789350406701">"Азыр"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> мүн</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> мүн</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> саат</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> саат</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> күн</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> күн</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> апта</item>
-      <item quantity="one">бир апта</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ай</item>
-      <item quantity="one">бир ай</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> жыл</item>
-      <item quantity="one">бир жыл</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"0 классындагы билдирүү"</string>
-    <string name="save" msgid="5081141452059463572">"Сактоо"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Түзмөктө бош орун жетишпейт. Орун бошотуу үчүн, SMS/MMS эски SMS билдирүүлөрүн автоматтык түрдө жок кылат."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Сактагычта орун калбай баратат"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Түзмөгүңүздө көбүрөөк бош орун болмоюнча, SMS/MMS билдирүүлөрдү жөнөтүп же ала албашы мүмкүн."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS үчүн орун жетишпейт. Билдирүүлөрдү жок кылышыңыз керек окшойт."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Телефон номериңизди ырастаңыз"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Номер топтошкон SMS/MMS билдирүүлөрүн жөнөтүү үчүн талап кылынат. Аны бир гана жолу киргизүү керек."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Телефон номери"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Медиа файл камтылган бардык билдирүүлөрдү жок кылуу"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> ашкан билдирүүлөрдү жок кылуу"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> мурунку билдирүүлөр автоматтык түрдө жок кылынсын"</string>
-    <string name="ignore" msgid="7063392681130898793">"Көңүл бурбоо"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Медиа менен бардык файлдар жок кылынсынбы?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> мурунку файлдар жок кылынсынбы?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> мурунку билдирүүлөр жок кылынып, авто жок кылуу күйгүзүлсүнбү?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> айтты"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Сиз айттыңыз"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> дегенден билдирүү"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Билдирүү жөнөттүңүз"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Жөнөтүлүүдө…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Жөнөтүлгөн жок. Дагы аракет кылуу үчүн тийип коюңуз."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Жөнөтүлгөн жок. Кайра аракет жасалууда…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Кайра жөнөтүү же жок кылуу"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Өзгөчө кырдаал кызматтарына үн чалуу жасаңыз. Азыркы учурда текст билдирүүңүз жеткирилбей койду."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Болбой калды"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Жүктөлүп алынуучу жаңы MMS билдирүү"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Жаңы MMS билдирүү"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Жүктөлүп алынган жок"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Дагы аракет кылуу үчүн тийип коюңуз"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Жүктөп алуу үчүн тийип коюңуз"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Жүктөп алуу же жок кылуу"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Жүктөлүүдө…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Билдирүү мөөнөтү аяктады же жеткиликтүү эмес"</string>
-    <string name="mms_info" msgid="3402311750134118165">"өлчөмү: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, мөөнөтү бүтөт: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Жөнөтүлбөй жатат. Алуучу жарактуу эмес."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Тармакта кызмат жандырылган эмес"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Тармактагы көйгөйдөн улам жөнөтүлгөн жок"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Билдирүү мөөнөтү аяктады же жеткиликтүү эмес"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Темасы жок)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Белгисиз жөнөтүүчү"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Жеткирилди"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> келген <xliff:g id="SUBJECT">%1$s</xliff:g> билдирүүсү жүктөлүп алынган жок."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Сактагычта орун аз болгондуктан, дайындар базасы аяктабай калды"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Билдирүү жөнөтүлгөн жок"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Айрым SMS/MMS билдирүүлөрү жөнөтүлгөн жок"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> баарлашууда <xliff:g id="MESSAGES_1">%d</xliff:g> билдирүү</item>
-      <item quantity="one">Бир баарлашууда <xliff:g id="MESSAGES_0">%d</xliff:g> билдирүү</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Билдирүү жүктөлүп алынган жок"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Айрым SMS/MMS билдирүүлөрү жүктөлүп алынган жок"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> баарлашууда <xliff:g id="MESSAGES_1">%d</xliff:g> билдирүү</item>
-      <item quantity="one">Бир баарлашууда <xliff:g id="MESSAGES_0">%d</xliff:g> билдирүү</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> дегенге билдирүү жөнөтүлгөн жок"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Өзгөчө кырдаал кызматтарына үн чалуу жасаңыз. Азыркы учурда <xliff:g id="NUMBER">%1$s</xliff:g> номерине текст билдирүүңүз жеткирилбей койду."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> жаңы билдирүү</item>
-      <item quantity="one">Жаңы билдирүү</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Баштоо"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Камера жеткиликтүү эмес"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Камера жеткиликтүү эмес"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Видеону тартып алуу жеткиликтүү эмес"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Медиа сакталбай жатат"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Сүрөткө тарта албайт"</string>
-    <string name="back" msgid="1477626055115561645">"Артка"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Архивделди"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Жок кылуу"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Архивдөө"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Архивден чыгаруу"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Эскертмелерди өчүрүү"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Эскертмелерди күйгүзүү"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Байланыш кошуу"</string>
-    <string name="action_download" msgid="7786338136368564146">"Жүктөп алуу"</string>
-    <string name="action_send" msgid="377635240181672039">"Жөнөтүү"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Жок кылуу"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Бул билдирүү жок кылынсынбы?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Бул аракетти артка кайтаруу мүмкүн эмес."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Жок кылуу"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Бул баарлашуулөр жок кылынсынбы?</item>
-      <item quantity="one">Бул баарлашуу жок кылынсынбы?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Жок кылуу"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Жокко чыгаруу"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Кимге"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Бир нече сүрөт тандаңыз"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Тандалгандарды ырастаңыз"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Аудио жазылбай жатат. Дагы аракет кылыңыз."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Аудио ойнотулбай жатат. Дагы аракет кылыңыз."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Аудио сакталган жок. Дагы аракет кылыңыз."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Коё бербей amp; тийип туруу"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Сүрөт"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Аудио клип"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Видео"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Байланыш картасы"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Жүктөп алуу"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS аркылуу жооп берүү"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS аркылуу жооп берүү"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Жооп берүү"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> катышуучу</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> катышуучу</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Мен"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Байланыш бөгөттөлдү &amp; архивделди"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Байланыш бөгөттөн жана архивден чыгарылды"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> архивделди"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> архивден чыгарылды"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Эскертмелер өчүрүлгөн"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Эскертмелер күйгүзүлгөн"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Баары коюлду. Жөнөтүүнү кайра басыңыз."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"SMS/MMS демейки SMS колдонмосу катары коюлду."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Тиркемелерди жарактан чыгаруу</item>
-      <item quantity="one">Тиркемени жарактан чыгаруу</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Аудио тиркеме"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Аудио тиркемени ойнотуу"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Бир азга токтотуу"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> жөнөткөн билдирүү: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> билдирүүсү бузулду. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> билдирүүсү. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Төмөнкүгө жиберилбеген билдирү <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Төмөнкүгө билдирүү жөнөтүлүүдө: <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> билдирүүсү бузулду. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> билдирүүсү. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> билдирүүсү бузулду. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> билдирүүсү. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Төмөнкүгө жиберилбеген билдирүү: <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Төмөнкүгө билдирүү жөнөтүлүүдө: <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> билдирүүсү бузулду. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> билдирүүсү. Убакыт: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Билдирүү жөнөтүлбөй койду. Кайра аракет кылуу үчүн тийип коюңуз."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> менен сүйлөшүү"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Темасын жок кылуу"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Видео жаздыруу"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Кыймылдабаган сүрөттү тартып алуу"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Сүрөт тартуу"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Видео тартып баштоо"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Камераны толук экранга которуу"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Алдыңкы жана арткы камераны которуштуруу"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Тартылып жаткан видеону токтотуп, тиркеңиз"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Видео жаздырууну токтотуу"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"SMS/MMS сүрөттөрү"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> сүрөт \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" альбомуна сакталды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> сүрөт \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" альбомуна сакталды</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> видео \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" альбомуна сакталды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> видео \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" альбомуна сакталды</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> тиркеме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" альбомуна сакталды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> тиркеме \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" альбомуна сакталды</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> тиркеме \"Жүктөлүп алынгандарга\" сакталды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> тиркеме \"Жүктөлүп алынгандарга\" сакталды</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> тиркеме сакталды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> тиркеме сакталды</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> тиркеме сакталбай калды</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> тиркеме сакталбай калды</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Сакталган MMS тиркемеси"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Жөндөөлөр"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Архивделди"</string>
-    <string name="action_close" msgid="1840519376200478419">"Жабуу"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Өркүндөтүлгөн"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Мүчүлүштүктөрдү таап оңдоо"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Эскертмелер"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Үн"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Үнсүз"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Дирилдөө"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Бөгөттөлгөн"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS жеткирүү кабарлары"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Ар бир жөнөтүлгөн SMS билдирүүсүнүн алынгандыгын кабарлап коюну өтүнүү"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Авто-түшүрүү"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS билдирүүлөрүн автоматтык түрдө түшүрүп алуу"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Роумингде авто-түшүрүп алуу"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Роуминг учурунда MMS\'ти автоматтык түрдө чыгарып алуу"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Топтошуп билдирүү жазышуу"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Бир нече алуучуга бир билдирүү жөнөтүү үчүн MMS\'ти колдонуңуз"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Демейки SMS колдонмо"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Демейки SMS колдонмо"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Телефон номериңиз"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Белгисиз"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Билдирүү кеткенде добуш чыксын"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS\'ти ыргытуу"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Алынган SMS\'тин чийки дайындарын тышкы сактагычтагы файлга ыргытыңыз"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS\'ти ыргытуу"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Алынган MMS\'тин чийки дайындарын тышкы сактагычтагы файлга ыргытыңыз"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Зымсыз айгай кабарлар"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Билдирүүнүн параметрлери"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Текстти көчүрүү"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Дайындарды карап көрүү"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Жок кылуу"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Багыттоо"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Билдирүүнүн чоо-жайы"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Түрү: "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS билдирүүсү"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Мультимедиа билдирүүсү"</string>
-    <string name="from_label" msgid="1947831848146564875">"Кимден: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Кимге: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Жөнөтүлдү: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Алынды: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Темасы: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Өлчөмү: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Шашылыштыгы: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Жогору"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Орточо"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Төмөн"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Дареги жашырылган жөнөтүүчү"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Тиркемелер жүктөлүп жатканда билдирүү жөнөтүлбөйт."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Тиркеме жүктөлбөй жатат. Дагы аракет кылыңыз."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Тармак даяр эмес. Дагы аракет кылыңыз."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Текстти жок кылуу"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Текст жана сандарды киргизүү ыкмаларын которуштуруу"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Дагы катышуучуларды кошуу"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Катышуучуларды ырастоо"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Жаңы сүйлөшүү баштоо"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Бул нерсени тандоо"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Видео ойнотуу"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Адамдар &amp; параметрлер"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Мүчүлүштүктөрдү таап оңдоо"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Адамдар &amp; параметрлер"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Жалпы"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Бул маектеги адамдар"</string>
-    <string name="action_call" msgid="6596167921517350362">"Чалуу"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Билдирүү жөнөтүү"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;br/&gt;&lt;small&gt; <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt; аркылуу билдирүү жөнөтүү"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Сүрөттөрдү жөнөтүү</item>
-      <item quantity="one">Сүрөт жөнөтүү</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Аудиолорду жөнөтүү</item>
-      <item quantity="one">Аудио жөнөтүү</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Видеолорду жөнөтүү</item>
-      <item quantity="one">Видео жөнөтүү</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Байланыш карталарын жөнөтүү</item>
-      <item quantity="one">Байланыш картасын жөнөтүү</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Тиркемелерди жөнөтүү</item>
-      <item quantity="one">Тиркемени жөнөтүү</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> тиркеме жөнөтүүгө даяр</item>
-      <item quantity="one">Бир тиркеме жөнөтүүгө даяр</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Жооп пикир жөнөтүү"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Дүкөнүндө карап көрүү"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Версия маалыматы"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"%1$s версиясы"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Ачык булак лицензиялары"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Эскертмелер"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Тиркеме чегине жетти"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Тиркеме жүктөлбөй койду."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Байланыштарга кошулсунбу?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Байланыш кошуу"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Тема"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Темасы: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Байланыш картасы жүктөлүүдө"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Байланыштын картасы жүктөлгөн жок"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Байланыш картасын карап көрүү"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> байланыш</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> байланыш</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Байланыш карталары"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Туулган күн"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Эскертүүлөр"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Билдирүүнү багыттоо"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Жооп берүү"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS өчүк"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Билдирүүлөрдү жөнөтүү үчүн, SMS/MMS\'ти демейки SMS колдонмосу катары коюңуз"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"SMS/MMS\'ти демейки SMS колдонмосу катары коюңуз"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Өзгөртүү"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Билдирүүлөрдү алуу үчүн, SMS/MMS\'ти демейки SMS колдонмосу катары коюңуз"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS билдирүүлөрдү жөнөтүү үчүн артыкчылыктуу SIM тандалган эмес"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Бул колдонмого түзмөк ээсинен уруксат жок."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Маекте катышуучулар өтө эле көп"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Жараксыз байланыштар</item>
-      <item quantity="one">Жараксыз байланыш</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Камера сүрөтү жүктөлгөн жок"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Сиз: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Сомо"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Жаңы маек башталганда, аны бул жердеги тизмеден көрөсүз"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Архивделген маектер бул жерден көрүнөт"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Маектер жүктөлүүдө…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Сүрөт"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Аудио клип"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Видео"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Байланыш картасы"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Кайтаруу"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Дагы аракет кылуу"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Жаңы билдирүүнү жазып баштоо үчүн байланыштын атын же телефон номерин киргизиңиз"</string>
-    <string name="action_block" msgid="9032076625645190136">"Бөгөттөө"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> дегенди бөгөттөө"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> дегенди бөгөттөн чыгаруу"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> бөгөттөлсүнбү?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Бул номерден билдирүүлөрдү ала бересиз, бирок мындан ары эскертмелерди албай каласыз. Бул маек архивделет."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Бөгөттөлгөн байланыштар"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"БӨГӨТТӨН ЧЫГАРУУ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Бөгөттөлгөн байланыштар"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Документтер китепканасынан сүрөт тандаңыз"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Билдирүү жөнөтүлүүдө…"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Билдирүү жөнөтүлдү"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Уюлдук дайындар өчүрүлгөн. Жөндөөлөрүңүздү текшериңиз."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Учак режиминде билдирүүлөр жөнөтүлбөйт"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Билдирүү жөнөтүлбөй жатат"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Билдирүү жүктөлүп алынды"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Уюлдук дайындар өчүрүлгөн. Жөндөөлөрүңүздү текшериңиз."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Учак режиминде билдирүүлөрдү жүктөп ала албайт"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Билдирүү жүктөлүп алынбай койду"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Ноль"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Бир"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Эки"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Үч"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Төрт"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Беш"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Алты"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Жети"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Сегиз"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Тогуз"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Билдирүүнү <xliff:g id="CARRIERNAME">%1$s</xliff:g> оператору аркылуу жөнөтүү мүмкүн эмес, ката <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Билдирүүнү белгисиз түзмөк аркылуу жөнөтүү мүмкүн эмес, ката <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Багыттоо: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Билдирүү жөнөтүлгөн жок: кызмат тармакта жандырылган эмес"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Билдирүү жөнөтүлгөн жок: жеткирүү дареги жараксыз"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Билдирүү жөнөтүлгөн жок: билдирүү жараксыз"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Билдирүү жөнөтүлгөн жок: мазмун колдоого алынбайт"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Билдирүү жөнөтүлгөн жок: билдирүү колдоого алынбайт"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Билдирүү жөнөтүлгөн жок: өтө чоң"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Жаңы билдирүү"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Карап көрүү"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Сүрөт"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Ылайыктуу колдонмо табылган жок"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Алуучуну чыгарып салуу"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Жаңы билдирүү"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Жокко чыгаруу"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Мүмкүнчүлүк алуу түйүнүн түзөтүү"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Коюлган эмес"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Ысымы"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS прокси"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS порту"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN түрү"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN жок кылуу"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Жаңы APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Сактоо"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Жарактан чыгаруу"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Аталыш талаасы бош болбошу керек."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN бош болбошу керек."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC талаасы 3 сандан турушу керек."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC талаасы 2 же 3 сандан турушу керек."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Демейки APN жөндөөлөрү калыбына келтирилүүдө."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Баштапкы абалга келтирүү"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Демейки APN жөндөөлөрү баштапкы абалга келтирилди."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Аталышы жок"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Мүмкүнчүлүк алуу түйүнүнүн аталыштары"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN\'дер"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Жаңы APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Бул колдонуучу мүмкүнчүлүк алуу түйүнүнүн аталышынын жөндөөлөрүн колдоно албайт"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Буферге көчүрүлсүнбү?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Көчүрүү"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> SIMге"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Жалпы"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Өркүндөтүлгөн"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Жалпы жөндөөлөр"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Өркүндөтүлгөн жөндөөлөр"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Бардык алуучуларга жеке SMS билдирүүлөрүн жөнөтүү. Бардык жоопторду сиз гана аласыз"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Бардык алуучуларга бир MMS жөнөтүү"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Белгисиз номер"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Жаңы билдирүү"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Жаңы билдирүү."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM тандагыч"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> тандалган, SIM тандагыч"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Теманы түзөтүү"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM тандоо же теманы түзөтүү"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Аудио жаздырыш үчүн кол тийгизип туруңуз"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Жаңы сүйлөшүү баштоо"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"SMS/MMS"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"SMS/MMS тизмеси"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"SMS/MMS"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Жаңы билдирүү"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Маек тизмеси"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Сүйлөшүүлөр жүктөлүүдө…"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Билдирүүлөр жүктөлүүдө"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Көбүрөөк сүйлөшүүлөрдү көрүү"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Дагы билдирүүлөрдү көрүү"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Сүйлөшүү жок кылынды"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Сүйлөшүү жок кылынды. Башка SMS/MMS сүйлөшүүсүн көрсөтүү үчүн тийиңиз"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Бөгөттөлдү"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Бөгөттөн чыгарылды"</string>
-    <string name="db_full" msgid="8459265782521418031">"Сактагычта бош орун аз. Айрым дайындар жоголушу мүмкүн."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Тиркемелерди тандаңыз"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Тандалгандарды ырастаңыз"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> тандалды"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Тиркемелердин бирин же көбүрөөгүн алып салып, кайра аракет кылыңыз."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Билдирүүңүздү жөнөтүп көрсөңүз болот, бирок ал бир же көбүрөөк тиркемени алып салмайыңызча жеткирилбеши мүмкүн."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Бир билдирүү менен бир эле видео жөнөтө аласыз. Кошумча видеолорду алып салып, кайра аракет кылыңыз."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Тиркелген файлдар жүктөлбөй калды."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Баары бир жөнөтүлсүн"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Сүйлөшүүнү баштай алган жок"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> тандалды"</string>
-</resources>
diff --git a/res/values-ldrtl-v21/styles.xml b/res/values-ldrtl-v21/styles.xml
deleted file mode 100644
index 4775979..0000000
--- a/res/values-ldrtl-v21/styles.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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>
-    <style name="ComposeMessageViewAttachMediaButtonStyle">
-        <item name="android:paddingStart">@dimen/compose_message_attachment_padding_sides</item>
-        <item name="android:paddingEnd">@dimen/compose_message_attachment_padding_sides</item>
-        <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
-    </style>
-</resources>
diff --git a/res/values-ldrtl/styles.xml b/res/values-ldrtl/styles.xml
deleted file mode 100644
index de4d9e8..0000000
--- a/res/values-ldrtl/styles.xml
+++ /dev/null
@@ -1,273 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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>
-    <style name="AttachmentPreviewCloseButtonStyle">
-        <item name="android:gravity">start</item>
-    </style>
-
-    <style name="ComposeMessageViewAttachMediaButtonStyle">
-        <item name="android:paddingStart">@dimen/compose_message_attachment_padding_sides</item>
-        <item name="android:paddingEnd">@dimen/compose_message_attachment_padding_sides</item>
-        <item name="android:background">?android:attr/selectableItemBackground</item>
-    </style>
-
-    <style name="ConversationComposeSendText">
-        <item name="android:textColor">@color/compose_send_text_color</item>
-        <item name="android:singleLine">false</item>
-        <item name="android:textSize">@dimen/conversation_compose_send_text_size</item>
-        <item name="android:gravity">center_vertical</item>
-        <item name="android:fontFamily">sans-serif</item>
-        <item name="android:paddingStart">@dimen/compose_message_text_box_padding_side</item>
-        <item name="android:paddingEnd">@dimen/compose_message_text_box_padding_side</item>
-        <item name="android:minHeight">@dimen/conversation_message_contact_icon_size</item>
-        <item name="android:maxLines">4</item>
-        <item name="android:background">@null</item>
-        <item name="android:scrollHorizontally">false</item>
-        <item name="android:textCursorDrawable">@null</item>
-        <item name="android:inputType">textShortMessage|textAutoCorrect|textCapSentences|textMultiLine</item>
-    </style>
-
-    <style name="ConversationComposeSubjectText" parent="ConversationComposeSendText">
-        <item name="android:paddingStart">18dp</item>
-        <item name="android:gravity">start|center_vertical</item>
-        <item name="android:layout_marginStart">@dimen/compose_message_subject_cancel_left_margin</item>
-    </style>
-
-    <style name="ContactListItemViewStyle">
-        <item name="android:paddingStart">16dp</item>
-    </style>
-
-    <style name="ContactListItemLinearLayoutStyle">
-        <item name="android:paddingStart">12dp</item>
-        <item name="android:paddingEnd">24dp</item>
-    </style>
-
-    <style name="ConversationListItemViewPaddingStyle">
-        <item name="android:paddingStart">@dimen/conversation_list_item_view_padding</item>
-        <item name="android:paddingEnd">@dimen/conversation_list_item_view_padding</item>
-    </style>
-
-    <style name="ConversationListItemViewTextStyle">
-        <item name="android:includeFontPadding">false</item>
-        <item name="android:textSize">14sp</item>
-        <item name="android:background">@null</item>
-        <item name="android:textAlignment">viewStart</item>
-        <item name="android:textColor">@color/conversation_list_details</item>
-    </style>
-
-    <style name="ConversationListItemViewConversationNameStyle" parent="ConversationListItemViewTextStyle">
-        <item name="android:textSize">16sp</item>
-        <item name="android:textColor">@color/conversation_list_name</item>
-    </style>
-
-    <style name="ConversationListNotificationBellPaddingStyle">
-        <item name="android:paddingEnd">@dimen/conversation_list_notification_bell_padding</item>
-    </style>
-
-    <style name="ComposeMessageViewFrameLayoutStyle">
-        <item name="android:paddingEnd">@dimen/compose_message_send_button_padding_right</item>
-    </style>
-
-    <style name="ConversationListFragmentStartNewButtonStyle">
-        <item name="android:layout_marginEnd">@dimen/fab_left_right_margin</item>
-    </style>
-
-    <style name="GalleryGridItemViewCheckBoxStyle">
-        <item name="android:paddingEnd">4dp</item>
-    </style>
-
-    <style name="BugleActionBarTitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
-      <item name="android:textColor">@color/action_bar_title_text_color</item>
-      <item name="android:textSize">@dimen/action_bar_text_size</item>
-      <item name="android:lines">1</item>
-      <item name="android:textAlignment">viewStart</item>
-    </style>
-
-    <style name="AttachmentPreviewAttachmentStyle">
-        <item name="android:layout_marginStart">10dp</item>
-    </style>
-
-    <style name="AudioAttachmentViewPlayPauseButtonStyle">
-        <item name="android:layout_marginEnd">16dp</item>
-    </style>
-
-    <style name="ComposeMessageViewDraftViewStyle">
-        <item name="android:layout_marginStart">53dp</item>
-        <item name="android:layout_marginEnd">63dp</item>
-    </style>
-
-    <style name="AudioAttachmentTimerText">
-        <item name="android:textSize">@dimen/audio_attachment_text_size</item>
-        <item name="android:textColor">@color/audio_attachment_timer_text_color</item>
-        <item name="android:layout_marginEnd">16dp</item>
-    </style>
-
-    <style name="ConversationMessageText">
-        <item name="android:background">@null</item>
-        <item name="android:textAlignment">viewStart</item>
-    </style>
-
-    <style name="ConversationMessageViewStyle">
-        <item name="android:paddingStart">12dp</item>
-        <item name="android:paddingEnd">12dp</item>
-    </style>
-
-    <style name="SnackBarMessageWrapper">
-        <item name="android:layout_marginStart">@dimen/snack_bar_left_right_margin</item>
-        <item name="android:layout_marginEnd">0dp</item>
-    </style>
-
-    <style name="SubjectViewStyle">
-        <item name="android:paddingStart">@dimen/compose_message_subject_left_padding</item>
-        <item name="android:paddingEnd">@dimen/compose_message_subject_right_padding</item>
-    </style>
-
-    <style name="SmsDeliverdBadge">
-        <item name="android:layout_marginStart">4dp</item>
-    </style>
-
-    <style name="ChipDeleteIconStyle">
-        <item name="android:paddingStart">8dp</item>
-    </style>
-
-    <style name="ChipIconStyle">
-        <item name="android:layout_marginEnd">12dp</item>
-    </style>
-
-    <style name="SimSelectorItem">
-        <item name="android:textSize">@dimen/sim_selector_text_size</item>
-        <item name="android:textColor">@color/sim_selector_text_primary</item>
-        <item name="android:background">@null</item>
-        <item name="android:layout_gravity">end</item>
-    </style>
-
-    <style name="SimSelectorItemDetail">
-        <item name="android:textSize">@dimen/sim_selector_detail_text_size</item>
-        <item name="android:textColor">@color/sim_selector_text_secondary</item>
-        <item name="android:background">@null</item>
-        <item name="android:layout_gravity">end</item>
-    </style>
-
-    <style name="SimSelectorItemLinearLayoutStyle">
-        <item name="android:paddingEnd">12dp</item>
-    </style>
-
-    <style name="MessageSimIndicator">
-        <item name="android:textSize">@dimen/conversation_status_text_size</item>
-        <item name="android:layout_marginStart">4dp</item>
-    </style>
-
-    <style name="ComposeMessageViewMessageBodySizeStyle">
-        <item name="android:textColor">@color/message_body_size_text_color</item>
-        <item name="android:textSize">@dimen/message_body_size_text_size</item>
-        <item name="android:fontFamily">sans-serif</item>
-        <item name="android:layout_gravity">end|center_vertical</item>
-        <item name="android:paddingEnd">@dimen/compose_message_text_box_padding_side</item>
-    </style>
-
-    <style name="MmsIndicatorStyle">
-        <item name="android:textColor">@color/mms_indicator_color</item>
-        <item name="android:textSize">@dimen/mms_indicator_size</item>
-        <item name="android:fontFamily">sans-serif</item>
-        <item name="android:background">@null</item>
-        <item name="android:paddingEnd">@dimen/compose_message_send_button_padding_right</item>
-        <item name="android:paddingTop">@dimen/compose_message_mms_indicator_padding_top</item>
-        <item name="android:layout_gravity">center_horizontal</item>
-    </style>
-
-    <style name="AttachmentGridItemViewCheckBoxStyle">
-        <item name="android:paddingEnd">4dp</item>
-    </style>
-
-    <style name="ParticipantListItem">
-        <item name="android:textSize">@dimen/participant_list_text_size</item>
-        <item name="android:textColor">@color/participant_list_text_primary</item>
-        <item name="android:background">@null</item>
-        <item name="android:layout_gravity">start|center_vertical</item>
-    </style>
-
-    <style name="WidgetConversationItemFailed">
-        <item name="android:layout_gravity">bottom|end</item>
-    </style>
-
-    <style name="WidgetConversationItemIncomingAvatarShadow">
-        <item name="android:layout_marginStart">4dp</item>
-    </style>
-
-    <style name="WidgetConversationItemOutgoingAvatarShadow">
-        <item name="android:layout_marginStart">-4dp</item>
-    </style>
-
-    <style name="WidgetConversationItemDate">
-        <item name="android:layout_marginEnd">8dp</item>
-        <item name="android:layout_marginStart">5dp</item>
-        <item name="android:layout_alignParentStart">true</item>
-    </style>
-
-    <style name="WidgetConversationItemWidget">
-        <item name="android:layout_marginEnd">8dp</item>
-        <item name="android:layout_marginStart">5dp</item>
-        <item name="android:layout_alignParentStart">true</item>
-    </style>
-
-    <style name="WidgetConversationListItemBody">
-        <item name="android:layout_toEndOf">@id/avatarFrame</item>
-    </style>
-
-    <style name="WidgetLoading">
-        <item name="android:layout_marginStart">16dp</item>
-    </style>
-
-    <style name="WidgetConversationItemBodyIncoming">
-        <item name="android:layout_toEndOf">@id/avatarFrame</item>
-    </style>
-
-    <style name="WidgetConversationItemBodyOutgoing">
-        <item name="android:layout_toStartOf">@id/avatarFrame</item>
-    </style>
-
-    <style name="WidgetConversationItemIncoming">
-        <item name="android:layout_marginEnd">5dp</item>
-        <item name="android:layout_alignParentStart">true</item>
-        <item name="android:layout_toStartOf">@id/date</item>
-    </style>
-
-    <style name="WidgetConversationItemAttachment">
-        <item name="android:layout_gravity">bottom|end</item>
-    </style>
-
-    <style name="WidgetConversationAppIcon" parent="WidgetHeaderImage">
-        <item name="android:layout_marginStart">-20dp</item>
-    </style>
-
-    <style name="WidgetConversationItemAvatarOutgoing">
-        <item name="android:layout_marginEnd">8dp</item>
-        <item name="android:layout_alignParentEnd">true</item>
-    </style>
-
-    <style name="WidgetConversationListItemFrom">
-        <item name="android:layout_marginEnd">5dp</item>
-        <item name="android:layout_alignParentStart">true</item>
-    </style>
-
-    <style name="WidgetConversationListItemDate">
-        <item name="android:layout_marginEnd">8dp</item>
-        <item name="android:layout_marginStart">5dp</item>
-        <item name="android:layout_gravity">start</item>
-    </style>
-
-</resources>
diff --git a/res/values-lo/arrays.xml b/res/values-lo/arrays.xml
deleted file mode 100644
index cae3797..0000000
--- a/res/values-lo/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"ບໍ່ມີຫົວຂໍ້"</item>
-    <item msgid="272485471009191934">"​ບໍ່​ມີ​ຫົວ​ຂໍ້"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"​ແມ່ນ​ແລ້ວ"</item>
-    <item msgid="6049132459802288033">"ບໍ່​"</item>
-    <item msgid="3084376867445867895">"ຕົກລົງ"</item>
-    <item msgid="3155097332660174689">"​ຮິ​ຮິ"</item>
-    <item msgid="2611328818571146775">"​ຂອບ​ໃຈ"</item>
-    <item msgid="4881335087096496747">"​ຂ້ອຍ​​ຍອມ​ຮັບ"</item>
-    <item msgid="2422296858597420738">"​ຄັກຫຼາຍ"</item>
-    <item msgid="4805581752819452687">"​ກຳ​ລັງ​ໄປ"</item>
-    <item msgid="4746700499431366214">"​ຕົກ​ລົງ, ດຽວ​ຂ້ອຍ​ຈະ​ຕິດ​ຕໍ່​ກັບ​ໄປ"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
deleted file mode 100644
index 4911499..0000000
--- a/res/values-lo/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"ຂໍ້ຄວາມ"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"ຂໍ້ຄວາມ"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"​ເລືອກ​ການ​ແປງ​ຂໍ້​ມູນ"</string>
-    <string name="action_settings" msgid="1329008122345201684">"​ການ​ຕັ້ງ​ຄ່າ"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"​ສົ່ງ​ຂໍ້​ຄວາມ"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"ເພີ່ມໄຟລ໌ແນບ"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"​ຊ່ວຍ​ເຫຼືອ"</string>
-    <string name="welcome" msgid="2857560951820802321">"ຍິນດີຕ້ອນຮັບ"</string>
-    <string name="skip" msgid="7238879696319945853">"ຂ້າມ"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"ຕໍ່ໄປ &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"ຕໍ່​ໄປ"</string>
-    <string name="exit" msgid="1905187380359981199">"ອອກ"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"ການ​ຕັ້ງ​ຄ່າ &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"ການ​ຕັ້ງ​ຄ່າ"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"ການສົ່ງຂໍ້​ຄວາມຕ້ອງ​ການ​ການ​ອະ​ນຸ​ຍາດ​ຫາ SMS, ໂທ​ລະ​ສັບ ແລະ ​ລາຍ​ຊື່."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"ທ່ານ​ສາ​ມາດ​ປ່ຽນ​ແປງ​ການ​ການ​ອະ​ນຸ​ຍາດ​ໄດ້​ຢູ່​ໃນ​ການ​ຕັ້ງ​ຄ່າ &gt; ແອັບ &gt; ຂໍ້​ຄວາມ &gt; ການ​ອະ​ນຸ​ຍາດ."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"ທ່ານ​ສາ​ມາດ​ປ່ຽນ​ແປງ​ການ​ອະ​ນຸ​ຍາດ​ໄດ້​ຢູ່​ໃນ​ການ​ຕັ້ງ​ຄ່າ, ແອັບ, ຂໍ້​ຄວາມ, ການ​ອະ​ນຸ​ຍາດ."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"​ຄວາມ​ຖີ່"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"ລາຍ​ຊື່​ຜູ້ຕິດ​ຕໍ່​ທັງ​ໝົດ"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"ສົ່ງໄປ <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"ບັນ​ທຶກ​ຮູບ ຫຼື​ວິ​ດີ​ໂອ"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"ເລືອກ​ຮູບ​ສຳ​ລັບ​ອຸ​ປະ​ກອນ​ນີ້"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ບັນທຶກສຽງ"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ເລືອກ​ຮູບ"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"ມີ​ດີ​ນີ້​ຖືກ​ເລືອກ​ແລ້ວ."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"ມີ​ເດຍ​ຖືກ​ຖອນ​ເລືອກ​ແລ້ວ."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"ເລືອກແລ້ວ <xliff:g id="COUNT">%d</xliff:g> ລາຍການ"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"ຮູບ <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"ຮູບ"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ບັນທຶກສຽງ"</string>
-    <string name="action_share" msgid="2143483844803153871">"ແບ່ງ​ປັນ"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ຕອນນີ້"</string>
-    <string name="posted_now" msgid="867560789350406701">"ຕອນນີ້"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ນ​ທ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ນ​ທ</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ຊົ່ວ​ໂມງ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ຊົ່ວ​ໂມງ</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ວັນ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ວັນ</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ອາ​ທິດ</item>
-      <item quantity="one">ໜຶ່ງອາ​ທິດ</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ເດືອນ</item>
-      <item quantity="one">ໜຶ່ງ​ເດືອນ</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ປີ</item>
-      <item quantity="one">ໜຶ່ງ​ປີ</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"ຂໍ້ຄວາມຄລາສ 0"</string>
-    <string name="save" msgid="5081141452059463572">"ບັນທຶກ"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"ອຸ​ປະ​ກອນ​ມີ​ພື້ນ​ທີ່​​ເກັບ​ຂໍ້​ມູນ​ໜ້ອຍ. ກາ​ນສົ່ງຂໍ້​ຄວາມ​ຈະ​ລຶບ​ຂໍ້​ຄວາມ​ເກົ່າ​ໂດຍ​ອັດ​ຕະ​ໂນ​ມັດ ເພື່ອ​ເຮັດ​ໃຫ້​ມີ​ພື້ນ​ທີ່​ຫວ່າງ​ເພີ່ມ​ຂຶ້ນ."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"ພື້ນທີ່​ຈັດ​ເກັບ​ຂໍ້ມູນ​ກຳລັງ​ຈະ​ເຕັມ"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"ການສົ່ງຂໍ້​ຄວາມ​ອາດ​ຈະ​ບໍ່​ສົ່ງ ຫຼື ຮັບ​ຂໍ້​ຄວາມ​ຈົນ​ກ່​ວາ​ມີ​ພື້ນ​ທີ່​ເພີ່ມ​ເຕີມ​ຢູ່​ໃນ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"ພື້ນ​ທີ່​ເກັບ​ຂໍ້ຄວາມ​ໜ້ອຍ​ລົງ. ທ່ານ​ອາດ​ຈະ​ຕ້ອງ​ລຶບ​ຂໍ້​ຄວາມ​ເກົ່າ​ອອກ​ກ່ອນ."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"ຢືນຢັນເບີໂທລະສັບຂອງທ່ານ"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"ຂັ້ນ​ຕອນ​ໃຊ້​ເທື່ອ​ດຽວ​ນີ້​ຈະ​ຮັບ​ປະ​ກັນ​ໃຫ້ຂໍ້​ຄວາມສົ່ງ​ຂໍ້​ຄວາມ​ກຸ່ມ​ຂອງ​ທ່ານ​ໄດ້​ຢ່າງ​ຖືກ​ຕ້ອງ."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ເບີໂທລະສັບ"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"ລຶບ​ຂໍ້ຄວາມ​ທັງໝົດ​ພ້ອມ​ທັງ​ມີເດຍ​ຕ່າງໆ"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"ລຶບ​ຂໍ້​ຄວາມ​ທີ່​ເກົ່າ​ກວ່າ <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"ລຶບ​ຂໍ້​ຄວາມ​ເກົ່າ​ກວ່າ <xliff:g id="DURATION">%s</xliff:g> ໂດຍ​ອັດ​ຕະ​ໂນ​ມັດ"</string>
-    <string name="ignore" msgid="7063392681130898793">"ບໍ່ສົນໃຈ"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"ລຶບ​ຂໍ້ຄວາມ​ທັງ​ໝົດ​ພ້ອມ​ທັງ​ມີເດຍ​ຕ່າງໆຫຼື​ບໍ່?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"ລຶບ​ຂໍ້ຄວາມ​ທີ່ເກົ່າກວ່າ <xliff:g id="DURATION">%s</xliff:g> ຫຼື​ບໍ່?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"​ລຶບ​ຂໍ້​ຄວາມ​ເກົ່າ​ກວ່າ <xliff:g id="DURATION">%s</xliff:g> ​ແລະ ເປີດ​ການ​ລຶບ​ໂດຍ​ອັດ​ຕະ​ໂນ​ມັດຫຼື​ບໍ່?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> ໄດ້ເວົ້າ"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"ທ່ານໄດ້​ເວົ້າ"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"ຂໍ້ຄວາມຈາກ <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"ທ່ານ​ໄດ້ສົ່ງ​ຂໍ້​ຄວາມ"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"ກຳລັງສົ່ງ..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"ສົ່ງ​ບໍ່​ໄດ້. ສຳ​ຜັດ​ເພື່ອ​ລອງ​ໃໝ່​ອີກ​ຄັ້ງ."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"ສົ່ງ​ບໍ່​ໄດ້. ກຳ​ລັງ​ລອງ​ໃໝ່​ອີກ​ຄັ້ງ…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Resend or delete"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"ກະ​ລຸ​ນາ​ໂທ​ດ້ວຍ​ສຽງ​ໄປ​ຫາ​ບໍ​ລິ​ການ​ສຸກ​ເສີນ. ຂໍ້​ຄວາມ​ຂອງ​ທ່ານ​ບໍ່​ສາ​ມາດ​ນຳ​ສົ່ງ​ໄດ້​ໃນ​ເວ​ລາ​ນີ້."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"​ລົ້ມ​ເຫລວ"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"ຂໍ້ຄວາມ MMS ​ໃຫມ່​ທີ່ຈະ​ດາວ​ໂຫລດ"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"ຂໍ້ຄວາມ MMS ​ໃຫມ່"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ບໍ່​ສາ​ມາດ​ດາວ​ໂຫລດ​ໄດ້"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"ສຳ​ຜັດ​ເພື່ອ​ລອງ​ອີກ​ຄັ້ງ"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ແຕະເພື່ອ​ດາວ​ໂຫຼດ"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ດາວ​ໂຫລດ​ ຫລື​ລຶບ"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"​ກຳ​ລັງ​ດາວ​ໂຫລດ..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"ຂໍ້​ຄວາມ​ໝົດ​ອາຍຸ ຫຼື ໃຊ້​ບໍ່​ໄດ້​ແລ້ວ"</string>
-    <string name="mms_info" msgid="3402311750134118165">"size: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, expiration: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"​ບໍ່​ສາ​ມາດ​ສົ່ງ​ໄດ້. ຂໍ້​ມູນ​ຜູ່​ຮັບ​ບໍ່​ຖືກ​ຕ້ອງ."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"ບໍ່​ໄດ້​ເປີດ​ໃຊ້​ບໍລິການ​ໃນ​ເຄືອຂ່າຍ"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"ບໍ່ສາມາດ​ສົ່ງໄດ້​ເນື່ອງຈາກ​ມີບັນຫາ​ກັບເຄືອຂ່າຍ"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"ຂໍ້​ຄວາມ​ໝົດ​ກຳ​ນົດ ຫຼື ໃຊ້​ບໍ່​ໄດ້​ແລ້ວ"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(ບໍ່ມີຫົວຂໍ້)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"ບໍ່ຮູ້ຜູ່ສົ່ງ"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"ສົ່ງຮອດແລ້ວ"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"ບໍ່​ສາມາດ​ດາວໂຫລດ​ຂໍ້​ຄວາມ <xliff:g id="SUBJECT">%1$s</xliff:g> ຈາກ <xliff:g id="FROM">%2$s</xliff:g> ໄດ້."</string>
-    <string name="low_memory" msgid="5300743415198486619">"ບໍ່​ສາມາດ​ປະຕິບັດ​ການ​ທາງ​ດ້ານ​ຖານ​ຂໍ້ມູນ​ເນື່ອງ​ຈາກ​ໜ່ວຍ​ຄວາມ​ຈຳ​ຕໍ່າ"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"ຂໍ້ຄວາມ​ຍັງ​ບໍ່ໄດ້​ຖືກສົ່ງ"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"ບາງ​ຂໍ້​ຄວາມ​ບໍ່​ໄດ້​ສົ່ງ​ຢູ່​ໃນການສົ່ງ​ຂໍ້​ຄວາມ"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> ຂໍ້​ຄວາມ​ໃນ <xliff:g id="CONVERSATIONS">%d</xliff:g> ບົດ​ສົນ​ທະ​ນາ</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> ຂໍ້​ຄວາມ​ໃນ​ຫນຶ່ງ​ບົດ​ສົນ​ທະ​ນາ</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"ບໍ່ສາມາດດາວໂຫລດຂໍ້ຄວາມໄດ້"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"ບາງ​ຂໍ້​ຄວາມ​ບໍ່​ໄດ້​ຮັບ​ການ​ດາວ​ໂຫຼດ​ຢູ່​ໃນການສົ່ງ​ຂໍ້​ຄວາມ"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> ຂໍ້​ຄວາມ​ໃນ <xliff:g id="CONVERSATIONS">%d</xliff:g> ບົດ​ສົນ​ທະ​ນາ</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> ຂໍ້​ຄວາມ​ໃນ​ຫນຶ່ງ​ບົດ​ສົນ​ທະ​ນາ</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"ຂໍ້​ຄວາມ​ຫາ <xliff:g id="NUMBER">%1$s</xliff:g> ບໍ່​ໄດ້​ສົ່ງ"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"ກະ​ລຸ​ນາ​ໂທ​ດ້ວຍ​ສຽງ​ໄປ​ຫາ​ບໍ​ລິ​ການ​ສຸກ​ເສີນ. ຂໍ້​ຄວາມ​ຂອງ​ທ່ານຫາ <xliff:g id="NUMBER">%1$s</xliff:g> ບໍ່​ສາ​ມາດ​ນຳ​ສົ່ງ​ໄດ້​ໃນ​ເວ​ລາ​ນີ້."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> ຂໍ້ຄວາມ​ໃໝ່.</item>
-      <item quantity="one">ຂໍ້ຄວາມ​ໃໝ່.</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"ເລີ່ມ"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"ບໍ່​ສາມາດ​ໃຊ້​ກ້ອງໄດ້"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"ບໍ່​ສາມາດ​ໃຊ້​ກ້ອງໄດ້"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"​ບໍ່​ສາ​ມາດ​ໃຊ້​ການບັນ​ທຶກວິ​ດີ​ໂອ​ໄດ້"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"​ບໍ່​ສາ​ມາດ​ບັນ​ທຶກ​ມີ​ເດຍ​ໄດ້"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"ບໍ່​ສາ​ມາດ​ຖ່າຍ​ຮູບ​ໄດ້"</string>
-    <string name="back" msgid="1477626055115561645">"ກັບຄືນ"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"ຈັດເກັບແລ້ວ"</string>
-    <string name="action_delete" msgid="4076795795307486019">"​ລຶບ"</string>
-    <string name="action_archive" msgid="5437034800324083170">"ຈັດເກັບ"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"ຖອດອອກຈາກແຟ້ມ"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"ປິດ​ການ​ແຈ້ງເຕືອນ"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"ເປີດ​ການ​ແຈ້ງເຕືອນ"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"ເພີ່ມ​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່"</string>
-    <string name="action_download" msgid="7786338136368564146">"ດາວໂຫລດ"</string>
-    <string name="action_send" msgid="377635240181672039">"ສົ່ງ"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"​ລຶບ"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"ລຶບ​ຂໍ້ຄວາມ​ນີ້ຫຼືບໍ່?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"​ການ​ກະ​ທຳ​ນີ້ຈະ​ບໍ່​ສາ​ມາດ​ກູ້​ຄືນ​ໄດ້."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"​ລຶບ"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">ລຶບການສົນທະນານີ້ບໍ?</item>
-      <item quantity="one">ລຶບການສົນທະນານີ້ບໍ?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"​ລຶບ"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"​ຍົກ​ເລີກ"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"ໄປ"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"​ເລືອກ​ຫຼາຍ​ຮູບ"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"​ຢືນ​ຢັນ​ການ​ເລືອກ"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ບໍ່​ສາ​ມາດ​ອັດ​ສຽງ​ໄດ້. ລອງ​ໃໝ່​ອີກ​ຄັ້ງ."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ບໍ່​ສາ​ມາດຫຼິ້ນ​ສຽງ​ໄດ້. ລອງ​ໃໝ່​ອີກ​ຄັ້ງ."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"​ບໍ່​ສາ​ມາດ​ບັນ​ທຶກ​ສຽງ​ໄດ້. ລອງ​ໃໝ່​ອີກ​ຄັ້ງ."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"ແຕະຄ້າງ​ໄວ້"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"ຮູບພາບ"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ຄລິບສຽງ"</string>
-    <string name="notification_video" msgid="4331423498662606204">"ວິດີໂອ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"ບັດ​ລາຍຊື່​ຜູ່ຕິດຕໍ່"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ດາວໂຫຼດ"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"ຕອບ​ກັບ​ຜ່ານ SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"ຕອບ​ກັບ​ຜ່ານ MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"ຕອບກັບ"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ຜູ້ເຂົ້າ​ຮ່ວມ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ຜູ້ເຂົ້າ​ຮ່ວມ</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"ຂ້ອຍ"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"ບລັອກ​ &amp; ຈັດ​ເກັບ​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່​ເຂົ້າ​ແຟ້ມ​ແລ້ວ"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"ປົດ​ບ​ລັອກ​ລາຍ​ຊື່​ແລ້ວ &amp; ບໍ່​ໄດ້​ເກັບ​ໄວ້"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> ຖືກຈັດເກັບແລ້ວ"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> ຖືກ​ຖອດ​ອອກ​ຈາກ​ບ່ອນ​ຈັດ​ເກັບ​ແລ້ວ"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"ການ​ແຈ້ງ​ເຕືອນ​ປິດ​ແລ້ວ"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"ການ​ແຈ້ງ​ເຕືອນ​ເປີດ​ແລ້ວ"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"​ຕັ້ງ​ຮຽບ​ຮ້ອຍ​ແລ້ວ. ສຳ​ຜັດ​ເພື່ອ​ສົ່ງ​ໃໝ່​ອີກ​ຄັ້ງ."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"ຕັ້ງ​ຂໍ້​ຄວາມ​ເປັນ​ແອັບ SMS ເລີ່ມຕົ້ນ​ສຳ​ເລັດ​ແລ້ວ."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">ເອົາ​ໄຟ​ລ໌​ຄັດ​ຕິດ​ຖິ້ມ</item>
-      <item quantity="one">ເອົາ​ໄຟ​ລ໌​ຄັດ​ຕິດ​ຖິ້ມ</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ໄຟ​ລ໌​ຄັດ​ຕິດ​ສຽງ"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ຫຼິ້ນ​ສິ່ງຕິດຄັດທີ່ເປັນ​ສຽງ"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"ຢຸດຊົ່ວຄາວ"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"ຂໍ້​ຄວາມ​ຈາກ<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"ຂໍ້​ຄວາມ​ບໍ່​ສຳ​ເລັດ​ຈາກ <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"ຂໍ້​ຄວາມ​ຈາກ <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"ຂໍ້​ຄວາມ​ບໍ່​ໄດ້​ສົ່ງ​ຫາ <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"ຂໍ້​ຄວາມ​ກຳ​ລັງ​ສົ່ງ​ຫາ <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"ຂໍ້​ຄວາມ​ບໍ່​ສຳ​ເລັດ​ຫາ <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"ຂໍ້​ຄວາມ​ຫາ <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"ຂໍ້​ຄວາມ​ບໍ່​ສຳ​ເລັດຈາກ <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"ຂໍ້​ຄວາມ​ຈາກ <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"ຂໍ້​ຄວາມ​ບໍ່​ໄດ້​ສົ່ງ​ຫາ <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"ຂໍ້​ຄວາມກຳ​ລັງ​ສົ່ງ​​ຫາ <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"ຂໍ້​ຄວາມ​ບໍ່​ສຳເລັດ​ຫາ <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Time: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"ຂໍ້​ຄວາມ​ຫາ <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. ເວ​ລາ: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"ຂໍ້​ຄວາມ​ບໍ່​ສຳ​ເລັດ. ສຳ​ຜັດ​ເພື່ອ​ລອງ​ໃໝ່​ອີກ."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"ການ​ສົນ​ທະ​ນາ​ກັບ <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"​ລຶບ​ຫົວ​ຂໍ້"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"ບັນ​ທຶກ​ວິດີໂອ"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"ບັນ​ທຶກ​ຮູບ"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"ຖ່າຍຮູບ"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"ເລີ່ມ​ການ​ບັນທຶກ​ວິດີໂອ"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"ສະລັບ​ໄປ​ໃຊ້​ກ້ອງ​ແບບ​ເຕັມຈໍ"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"​ສະ​ລັບ​ລະ​ຫວ່າງ​ກ້ອງ​ໜ້າ ແລະ ຫຼັງ"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"​ຢຸດ​ການ​ບັນ​ທຶກ ແລະ ແນບ​ວິ​ດີ​ໂອ"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"​ຢຸດ​ການ​ບັນ​ທຶກວິ​ດີ​ໂອ"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"ຮູບຖ່າຍານສົ່ງ​ຂໍ້​ຄວາມ"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ຮູບ​ຖືກ​ບັນ​ທຶກ​ໄປ​ໃສ່​ອາ​ລະ​ບັ້ມ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ຮູບ​ຖືກ​ບັນ​ທຶກ​ໄປ​ໃສ່​ອາ​ລະ​ບັ້ມ \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ວິ​ດີ​ໂອ​ຖືກ​ບັນ​ທຶກ​ໄປ​ໃສ່​ອາ​ລະ​ບັ້ມ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ວິ​ດີ​ໂອ​ຖືກ​ບັນ​ທຶກ​ໄປ​ໃສ່​ອາ​ລະ​ບັ້ມ \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ໄຟ​ລ໌​ຄັດ​ຕິດ​ຖືກ​ບັນ​ທຶ​ກ​ໄປ​ໃສ່ອາ​ລະບັ້ມ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ໄຟ​ລ໌​ຄັດ​ຕິດ​ຖືກ​ບັນ​ທຶ​ກ​ໄປ​ໃສ່ອາ​ລະ​ບັ້ມ \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g>ໄຟ​ລ໌​ຄັດ​ຕິດ​ຖືກ​ບັນ​ທຶກ​ໄປ​ໃສ່ \"ດາວ​ໂຫຼດ\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ໄຟ​ລ໌​ຄັດ​ຕິດ​ຖືກ​ບັນ​ທຶກ​ໄປ​ໃສ່ \"ດາວ​ໂຫຼດ\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ໄຟ​ລ໌​ຄັດ​ຕິດ​ຖືກ​ບັນ​ທຶກ​ແລ້ວ</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ໄຟ​ລ໌​ຄັດ​ຕິດ​ຖືກ​ບັນ​ທຶກ​ແລ້ວ</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">ບໍ່​ສາ​ມາດ​ບັນ​ທຶກ <xliff:g id="QUANTITY_1">%d</xliff:g> ໄຟ​ລ໌​ຄັດ​ຕິດ​ໄດ້</item>
-      <item quantity="one">ບໍ່​ສາ​ມາດ​ບັນ​ທຶກ <xliff:g id="QUANTITY_0">%d</xliff:g> ໄຟ​ລ໌​ຄັດ​ຕິດ​ໄດ້</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"ບັນ​ທຶກ​ໄຟລ໌​ແນບ MMS ​ແລ້ວ"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"ການ​ຕັ້ງ​ຄ່າ"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"ຈັດເກັບແລ້ວ"</string>
-    <string name="action_close" msgid="1840519376200478419">"ປິດ"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"​ຂັ້ນ​ສູງ"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"ດີບັ໊ກ"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"ການແຈ້ງເຕືອນ"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ສຽງ"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"ປິດສຽງ"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"ສັ່ນເຕືອນ"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"ບລັອກ​ແລ້ວ"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"​ລາຍ​ງານ​ຜົນ​ການສົ່ງ SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"​ຂໍ​ລາຍ​ງານຜົນ​ການ​ສົ່ງ​ສຳ​ລັບ​ແຕ່​ລະ​ SMS ທີ່​ທ່ານ​ສົ່ງ"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"ດຶງ​ຂໍ້ມູນ​ອັດຕະໂນມັດ"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"ດຶງຂໍ້ຄວາມ MMS ອັດຕະໂນມັດ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"ດຶງ​ຂໍ້ຄວາມ​ອັດຕະໂນມັດ​ເມື່ອ​ໂຣມມິງ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"ກູ້​ຄືນ MMS ອັດ​ຕະ​ໂນ​ມັດ​ເມື່ອ​ໂຣມ​ມິງ"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"ການສົ່ງ​ຂໍ້ຄວາມກຸ່ມ"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"ໃຊ້ MMS ເພື່ອສົ່ງ​ຂໍ້ຄວາມ​ໃດນຶ່ງ​ເມື່ອມີຜູ່ຮັບ​ຫຼາຍຄົນ"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"ແອັບຯ SMS ມາດ​ຕະ​ຖານ"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"ແອັບຯ SMS ມາດ​ຕະ​ຖານ"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"​ເບີ​ໂທ​ລະ​ສັບ​ຂອງ​ທ່ານ"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"​ບໍ່​ຮູ້​ຈັກ"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"ສຽງ​ຂໍ້​ຄວາມ​ຂາ​ອອກ"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"ດຶງ SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"ດຶງ​ຂໍ້​ມູນ SMS ​ດິບທີ່​ໄດ້​ຮັບ​ໃນ​ຮູບ​ແບບ​ໄຟ​ລ໌​ເກັບ​ຂໍ້​ມູນ​ພາຍນອກ"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"ດຶງ MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"ດຶງ​ຂໍ້​ມູນ MMS ​ດິບທີ່​ໄດ້​ຮັບ​ໃນ​ຮູບ​ແບບ​ໄຟ​ລ໌​ເກັບ​ຂໍ້​ມູນ​ພາຍນອກ"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"ແຈ້ງ​ເຕືອນ​ລະບົບ​ໄຮ້ສາຍ"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"​ໂຕ​ເລືອກ​ຂໍ້​ຄວາມ"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"​ສຳ​ເນົາ​ຂໍ້​ຄວາມ"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"​ເບິ່ງ​ລາຍ​ລະ​ອຽດ"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"​ລຶບ"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"ສົ່ງຕໍ່"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"​ລາຍ​ລະ​ອຽດ​ຂໍ້​ຄວາມ"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"ປະ​ເພດ: "</string>
-    <string name="text_message" msgid="7415419755252205721">"​ຂໍ້​ຄວາມ"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"ຂໍ້​ຄວາມ​ມັນ​ຕິ​ມີ​ເດຍ"</string>
-    <string name="from_label" msgid="1947831848146564875">"ຈາກ: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"ເຖິງ: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"ສົ່ງ​ເມື່ອ: "</string>
-    <string name="received_label" msgid="4442494712757995203">"ໄດ້​ຮັບເມື່ອ: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"ຫົວ​ຂໍ້: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"​ຂະ​ໜາດ: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"ຄວາມ​ສຳ​ຄັນ: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"​ຊິມ: "</string>
-    <string name="priority_high" msgid="728836357310908368">"​ສູງ"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"​ປານ​ກາງ"</string>
-    <string name="priority_low" msgid="7398724779026801851">"​ຕ່ຳ"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"​ຊິມ <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"​​ເຊື່ອງ​ທີ່​ຢູ່​ຜູ່​ສົ່ງ"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"​ບໍ່​ສາ​ມາດ​ສົ່ງ​ຂໍ້​ຄວາມ​ໄດ້​ໃນ​ຂະ​ນະ​ທີ່​ໂຫຼດ​ໄຟລ໌​ແນບ."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"ບໍ່​ສາ​ມາດ​ໂຫລດ​ໄຟລ໌​ແນບ​ໄດ້. ​ລອງ​ໃໝ່​ອີກ​ຄັ້ງ."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"ເຄືອ​ຂ່າຍ​ບໍ່​ພ້ອມ. ລອງ​ໃໝ່​ອີກ."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"ລຶບ​ຂໍ້​ຄວາມ"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"ສະ​ລັບ​ລະ​ຫວ່າງ​ການ​ພິມ​ໂຕ​ອັກ​ສອນ ແລະ​ໂຕ​ເລກ"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"ເພີ່ມ​ຜູ່​ເຂົ້າ​ຮ່ວມ​ອື່ນ"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"ຢືນ​ຢັນ​ຜູ່​ເຂົ້າ​ຮ່ວມ"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"​ເລີ່ມ​ບົດ​ສົນ​ທະ​ນາ​ໃໝ່"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"​ເລືອກ​ລາຍ​ການ​ນີ້"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"ຫຼິ້ນວິດີໂອ"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່ &amp; ໂຕ​ເລືອກ"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"ດີບັ໊ກ"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່ &amp; ໂຕ​ເລືອກ"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"ທົ່ວໄປ"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"ຄ​ົນ​ໃນ​ບົດ​ສົນ​ທະ​ນາ​ນີ້"</string>
-    <string name="action_call" msgid="6596167921517350362">"​ໂທ​ອອກ"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"ສົ່ງຂໍ້ຄວາມ"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"​ສົ່ງ​ຂໍ້​ຄວາມ&lt;br/&gt;&lt;small&gt;​ຈາກ <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">​ສົ່ງ​ຮູບ​ພາບ</item>
-      <item quantity="one">​ສົ່ງ​ຮູບ​ພາບ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">​ສົ່ງ​ສຽງ</item>
-      <item quantity="one">​ສົ່ງ​ສຽງ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">ສົ່ງ​ວິດີໂອ</item>
-      <item quantity="one">ສົ່ງ​ວິດີໂອ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">​ສົ່ງ​ບັດ​ລາຍ​ຊື່​ຜູ້ຕິດ​ຕໍ່</item>
-      <item quantity="one">​ສົ່ງ​ບັດ​ລາຍ​ຊື່​ຜູ້ຕິດ​ຕໍ່</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">​ສົ່ງ​ໄຟລ໌​ຄັດ​ຕິດ</item>
-      <item quantity="one">​ສົ່ງ​ໄຟລ໌​ຄັດ​ຕິດ</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ​ໄຟ​ລ໌​ຄັດ​ຕິດ​ພ້ອມ​ສົ່ງ​ໄດ້​ແລ້ວ</item>
-      <item quantity="one">ໜຶ່ງ​ໄຟ​ລ໌​ຄັດ​ຕິດ​ພ້ອມ​ສົ່ງ​ໄດ້​ແລ້ວ</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"​ສົ່ງ​ຄຳ​ຕິ​ຊົມ"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"ເບິ່ງໃນ Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"​​ຂໍ​້​ມູນ​ເວີ​ຊັນ"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"ເວີ​ຊັນ %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"​ລິ​ຂະ​ສິດ​ໂອ​ເພນ​ຊອດ"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"ການແຈ້ງເຕືອນ"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"ຮອດ​ຂີດ​ຈຳ​ກັດ​ໄຟ​ລ໌​ຄັດ​ຕິດ​ແລ້ວ"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"ໂຫຼດ​ໄຟ​ລ໌​ຄັດ​ຕິດ​ບໍ່​ສຳ​ເລັດ."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"ເພີ່ມ​ໃສ່​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່​ບໍ່?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"ເພີ່ມ​​ໃສ່​ລາ​ຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"ຫົວຂໍ້"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"ຫົວຂໍ້: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"​ກຳ​ລັງ​ໂຫລດ​ບັດ​ລາຍ​ຊື່​ຜ​ູ່​ຕິດ​ຕໍ່"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"​ບໍ່​ສາ​ມາດ​ໂຫລດ​ບັດ​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່ໄດ້"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"​ເບິ່ງ​ບັດ​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ລາຍ​ຊື່</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ລາຍ​ຊື່</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"ບັດ​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"ວັນເດືອນປີເກີດ"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"ບັນທຶກ"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"​ສົ່ງ​ຕໍ່​ຂໍ້​ຄວາມ"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"ຕອບຄືນ"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS ​ຖືກ​ປິດ​ແລ້ວ"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"ເພື່ອ​ສົ່ງ, ຕັ້ງ​ການສົ່ງຂໍ້​ຄວາມ​ເປັນ​ແອັບ SMS ເລີ່ມຕົ້ນ"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"ຕັ້ງການສົ່ງ​ຂໍ້​ຄວາມ​ເປັນ​ແອັບ SMS ເລີ່ມຕົ້ນ"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"ປ່ຽນແປງ"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"​ເພື່ອ​ຮັບ​ຂໍ້​ຄວາມ, ຕັ້ງການສົ່ງຂໍ້​ຄວາມໃຫ້​ເປັນ​ແອັບ SMS ​ເລີ່ມ​ຕົ້ນ​ຂອງ​ທ່ານ"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"ບໍ່​ມີ SIM ທີ່​ມັກ​ຖືກ​ເລືອກ​ໄວ້​ ເພື່ອ​ສົ່ງ​ຂໍ້​ຄວາມ SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"​​ເຈົ້າ​ຂອງ​ອຸ​ປະ​ກອນບໍ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ໃຊ້​ແອັບຯ​ນີ້."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ຕົກລົງ"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"​ມີ​ຜູ່​ເຂົ້າ​ຮ່ວມ​ໃນ​ການ​ສົນ​ທະ​ນາຫຼາຍ​ເກີນ​ໄປ"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">ລາຍ​ຊື່​ຕິດ​ຕໍ່​ບໍ່​ຖືກ​ຕ້ອງ</item>
-      <item quantity="one">ລາຍ​ຊື່​ຕິດ​ຕໍ່​ບໍ່​ຖືກ​ຕ້ອງ</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"​ບໍ່​ສາ​ມາດ​ໂຫລດ​ຮູບ​ຈາກ​ກ້ອງ​ໄດ້"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"ທ່ານ: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"ສະບັບຮ່າງ"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"ໃນເວລາ​ທີ່ທານ​ເລີ່ມການ​ສົນທະນາ​ໃຫມ່, ທ່ານຈະເຫັນ​ມັນສະແດງ​ຢູ່ບ່ອນ​ນີ້"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"​ບົດ​ສົນ​ທະ​ນາ​ທີ່​ຖືກ​ຈັດ​ເກັບ​ຈະ​ສະ​ແດງ​ຢູ່​ນີ້"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"ກຳລັງ​ໂຫລດ​ບົດ​ສົນທະນາ..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"ຮູບພາບ"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ຄລິບສຽງ"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"ວິດີໂອ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"ບັດ​ລາຍຊື່​ຕິດຕໍ່"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"ຍົກເລີກ"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"ລອງໃໝ່"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"​ປ້ອນ​ຊື່​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່ ຫຼື ເບີ​ໂທ​ລະ​ສັບ​ເພື່ອ​ເລີ່ມ​ຂໍ້​ຄວາມ​ໃໝ່"</string>
-    <string name="action_block" msgid="9032076625645190136">"ບລັອກ"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"ບລັອກ <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"​ປົດ​ບລັອກ <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"ບລັອກ <xliff:g id="DESTINATION">%s</xliff:g> ບໍ?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"​ທ່ານ​ຈະ​ຍັງ​ສືບ​ຕໍ່​ໄດ້​ຮັບ​ຂໍ້​ຄວາມ​ຈາກ​ເບີ​ນີ້ ແຕ່​ຈະ​ບໍ່​ຖືກ​ແຈ້ງ​ເຕືອນ​ອີກ​ຕໍ່​ໄປ. ບົດ​ສົນ​ທະ​ນາ​ນີ້​ຈະ​ຖືກ​ຈັດ​ເກັບ."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່​ທີ່​ຖືກບລັອກ"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"​ປົດ​ບລັອກ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"ບລັອກ​ລາຍ​ຊື່​ຜູ່​ຕິດ​ຕໍ່​ແລ້ວ"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"​ເລືອກ​ຮູບ​ຈາກ​ຫ້ອງ​ສະ​ໝຸດ​ເອ​ກະ​ສານ"</string>
-    <string name="sending_message" msgid="6363584950085384929">"ກຳລັງສົ່ງຂໍ້ຄວາມ"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"ສົ່ງຂໍ້ຄວາມແລ້ວ"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"ຂໍ້​ມູນ​ເຄືອ​ຂ່າຍ​ໂທ​ລະ​ສັບ​ຖືກ​ປິດ​ໄວ້. ກະ​ລຸ​ນາ​ກວດ​ສອບ​ການ​ຕັ້ງ​ຄ່າ​ຂອງ​ທ່ານ."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"​ບໍ່​ສາ​ມາດ​ສົ່ງ​ຂໍ້​ຄວາມ​ໃນ​ໂໝດ​ໃນ​ຍົນ​ໄດ້"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"ບໍ່ສາມາດສົ່ງຂໍ້ຄວາມໄປໄດ້"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"ດາວ​ໂຫຼດ​ຂໍ້​ຄວາມ​ແລ້ວ"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"ຂໍ້​ມູນເຊວ​ລູ​ລາ​ຖືກ​ປິດ​ໄວ້. ສອບ​ການ​ຕັ້ງ​ຄ່າ​ຂອງ​ທ່ານ."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"ບໍ່​ສາ​ມາດ​ກາວ​ໂຫຼດ​ຂໍ້​ຄວາມ​ຢູ່​ໃນ​ໂໝດ​ເຮືອ​ບິນ​ໄດ້"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"ບໍ່​ສາ​ມາດ​ດາວ​ໂຫຼດ​ໄດ້"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"​ສູນ"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"​ນຶ່ງ"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"​ສອງ"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"​ສາມ"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"​ສີ່"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"​ຫ້າ"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"​ຫົກ"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"​ເຈັດ"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"ແປດ"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"​ເກົ້າ"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"ບໍ່​ສາ​ມາດ​ສົ່ງ​ຂໍ້​ຄວາມ​ດ້ວຍ <xliff:g id="CARRIERNAME">%1$s</xliff:g> ໄດ້, ຂໍ້​ຜິດ​ພາດ <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"ບໍ່​ສາ​ມາດ​ສົ່ງ​ຂໍ້​ຄວາມ​ດ້ວຍບໍ​ລິ​ສັດ​ເຄືອ​ຂ່າຍ​ມື​ຖື​ບໍ່​ຮູ້​ຈັກ​ໄດ້, ຂໍ້​ຜິດ​ພາດ <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"ຂໍ້​ຄວາມ​ຍັງ​ບໍ່​ໄດ້​ສົ່ງ: ບໍ​ລິ​ການ​ຍັງ​ບໍ່​ໄດ້​ເປີດ​ນຳ​ໃຊ້​ໃນ​ເຄືອ​ຂ່າຍ​ເທື່ອ"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"ຂໍ້​ຄວາມ​ຍັງ​ບໍ່​ໄດ້​ສົ່ງ: ທີ່​ຢູ່​ປາຍ​ທາງບໍ່​ຖືກ​ຕ້ອງ"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"ຂໍ້​ຄວາມ​ຍັງ​ບໍ່​ໄດ້​ສົ່ງ: ຂໍ້​ຄວາມ​ບໍ່​ຖືກ​ຕ້ອງ"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"ຂໍ້​ຄວາມ​ຍັງ​ບໍ່​ໄດ້​ສົ່ງ: ​ບໍ່​ຮອງ​ຮັບ​ເນື້ອ​ຫາ"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"ຂໍ້​ຄວາມ​ຍັງ​ບໍ່​ໄດ້​ສົ່ງ: ບໍ່​ຮອງ​ຮັບ​ຂໍ້​ຄວາມ"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"ຂໍ້ຄວາມ​ຍັງ​ບໍ່ໄດ້​ຖືກສົ່ງ: ໃຫຍ່​ເກີນ​ໄປ"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"ຂໍ້ຄວາມໃໝ່"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"​ເບິ່ງ"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"ຮູບພາບ"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"ບໍ່​ສາ​ມາດ​ຊອກ​ຫາ​ແອັບ​ພລິ​ເຄ​ຊັນ​ທີ່​ເໝາະ​ສົມ​ໄດ້"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"ລຶບ​ຜູ່​ຮັບ"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"ຂໍ້ຄວາມໃໝ່"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"​ຍົກ​ເລີກ"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"ແກ້ໄຂ​ຈຸດ​ການ​ເຊື່ອມຕໍ່"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"ຍັງບໍ່ໄດ້ຕັ້ງ"</string>
-    <string name="apn_name" msgid="1572691851070894985">"ຊື່"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"ພອດ MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"ປະເພດ APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"ລຶບ APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN ໃໝ່"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"ບັນທຶກ"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"ຍົກເລີກ"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"ຊ່ອງຂໍ້ມູນ​ຊື່​ບໍ່ສາມາດ​ປ່ອຍ​ຫວ່າງໄດ້."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN ບໍ່​ສາມາດ​ປ່ອຍ​ໃຫ້​ຫວ່າງ​ໄດ້."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"ຊ່ອງຂໍ້ມູນ MMC ຕ້ອງມີ 3 ໂຕເລກ."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"ຊ່ອງຂໍ້ມູນ MNC ຕ້ອງມີ 2 ຫຼື 3 ໂຕເລກ."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"ກຳລັງ​ກັບ​ໄປ​ໃຊ້ການຕັ້ງຄ່າ APN ເລີ່ມຕົ້ນ."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"ກັບຄືນໄປໃຊ້ຄ່າເລີ່ມຕົ້ນ"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"​ສຳ​ເລັດ​ການ​ກັບ​ໄປໃຊ້ການ​ຕັ້ງ​ຄ່າ APN ເລີ່ມຕົ້ນແລ້ວ."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"ບໍ່ໄດ້ຕັ້ງຊື່"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ຊື່ຂອງ​ຈຸດການ​ເຂົ້າເຖິງ (APN)"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN ໃໝ່"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"ຜູ່​ໃຊ້​ນີ້ບໍ່​ສາ​ມາດ​ຕັ້ງ​ຄ່າ​ຊື່​ຈຸດ​ການ​ເຂົ້າ​ເຖິງ​ໄດ້"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"​ສຳ​ເນົາ​ໄວ້​ໃນຄລິບບອດຫຼື​ບໍ່?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"ສຳເນົາ"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"ເຖິງ <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"ທົ່ວໄປ"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"​ຂັ້ນ​ສູງ"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"ການຕັ້ງຄ່າ​ທົ່ວໄປ"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"ການຕັ້ງຄ່າ​ຂັ້ນສູງ"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"​ສົ່ງ​ຂໍ້​ຄວາມ SMS ​ສະ​ເພາະ​ບຸກ​ຄົນໄປ​ຫາ​ທຸກໆ​ຜູ່​ຮັບ. ​ສະ​ເພາະ​ທ່ານ​ເທົ່າ​ນັ້ນ​ທີ່​ຈະ​ໄດ້​ຮັບ​ແຕ່​ລະ​ການ​ຕອບ​ກັບ"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"​ສົ່ງ MMS ​ສະ​ບັບ​ນຶ່ງ​ໄປ​ຫາ​ທຸກໆ​ຜູ່​ຮັບ"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"​ເບີ​ໂທບໍ່​ຮູ້​ຈັກ"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"ຂໍ້ຄວາມ​ໃໝ່"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"ຂໍ້ຄວາມ​ໃໝ່."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"ຕົວ​ເລືອກ SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> ຖືກ​ເລືອກ​ແລ້ວ, ຕົວ​ເລືອກ SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"ແກ້ໄຂຫົວຂໍ້"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"ເລືອກ SIM ຫຼື​ແກ້​ໄຂ​ຫົວ​ຂໍ້"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ສຳ​ພັດ​ຄ້າງ​ໄວ້ ເພື່ອ​ບັນ​ທຶກ​ສຽງ"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"​ເລີ່ມ​ບົດ​ສົນ​ທະ​ນາ​ໃໝ່"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"ຂໍ້ຄວາມ"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"ລາຍ​ການການສົ່ງ​ຂໍ້​ຄວາມ"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"ຂໍ້ຄວາມ"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"ຂໍ້ຄວາມໃໝ່"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"ລາຍການການສົນທະນາ"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"ກຳລັງ​ໂຫລດ​ບົດ​ສົນທະນາ..."</string>
-    <string name="loading_messages" msgid="3894765818932489665">"ກຳລັງໂຫລດຂໍ້ຄວາມ"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"ເບິ່ງບົດສົນທະນາເພີ່ມເຕີມ"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"ເບິ່ງ​ຂໍ້​ຄວາມ​ເພີ່ມ​ເຕີມ"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"ການ​ສົນທະນາ​ຖືກລຶບແລ້ວ"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"ການ​ສົນ​ທະ​ນາ​ຖືກ​ລຶບ​ແລ້ວ. ສຳ​ຜັດ​ເພື່ອ​ສະ​ແດງ, ການ​ສົນ​ທະ​ນາ​ຂໍ້​ຄວາມ​ທີ່​ແຕກ​ຕ່າງ"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"ບລັອກ​ແລ້ວ"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"ປົດ​ບ​ລັອກ​ແລ້ວ"</string>
-    <string name="db_full" msgid="8459265782521418031">"ພື້ນ​ທີ່​ຈັດ​ເກັບ​ຕ່ຳ. ບາງ​ຂໍ້​ມູນ​ອາດ​ຈະ​ເສຍ​ໄປ."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"ເລືອກ​ໄຟ​ລ໌​ຄັດ​ຕິດ"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"​ຢືນ​ຢັນ​ການ​ເລືອກ"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ເລືອກ​ແລ້ວ"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"ກະ​ລຸ​ນາ​ເອົາ​ໜຶ່ງ ຫຼື​ຫຼາຍ​ໄຟ​ລ໌​ຄັດ​ຕິດ​ອອກ​ໄປ ແລະ​ລອງ​ໃໝ່​ອີກ."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"ທ່ານ​ສາ​ມາດ​ລອງ​ສົ່ງ​ຂໍ້​ຄວາມ​ຂອງ​ທ່ານ​ໄດ້, ແຕ່​ມັນ​ອາດ​ຈະ​ບໍ່​ຖືກ​ສົ່ງ​ໄປ ນອກ​ຈາກວ່າ​ທ່ານ​ເອົາ​ໜຶ່ງ ຫຼື​ຫຼາຍ​ໄຟ​ລ໌​ຄັດ​ຕິດ."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"ທ່ານ​ສາ​ມາດ​ສົ່ງ​ໄດ້​ແຕ່​ໜຶ່ງວິ​ດີ​ໂອ​ຕໍ່​ຂໍ້​ຄວາມ​ເທົ່າ​ນັ້ນ. ກະ​ລຸ​ນາ​ເອົາ​ວິ​ດີ​ໂອ​ເພີ່ມ​ເຕີມ​ອອກ ແລະ​ລອງ​ໃໝ່​ອີກ."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"ການສົ່ງຂໍ້​ຄວາມ​ໂຫຼດ​ໄຟ​ລ໌​ຄັດ​ຕິດ​ບໍ່ສຳເລັດ."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"ແນວ​ໃດ​ກໍ່​ສົ່ງ​"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"ບໍ່​ສາ​ມາດ​ເລີ່ມ​ຕົ້ນ​ການ​ສົນ​ທະ​ນາ​ໄດ້"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> ເລືອກ​ແລ້ວ"</string>
-</resources>
diff --git a/res/values-lt/arrays.xml b/res/values-lt/arrays.xml
deleted file mode 100644
index 3c1c116..0000000
--- a/res/values-lt/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"nėra temos"</item>
-    <item msgid="272485471009191934">"nėra temos"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Taip"</item>
-    <item msgid="6049132459802288033">"Ne"</item>
-    <item msgid="3084376867445867895">"Gerai"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Ačiū"</item>
-    <item msgid="4881335087096496747">"Sutinku"</item>
-    <item msgid="2422296858597420738">"Puiku"</item>
-    <item msgid="4805581752819452687">"Pakeliui"</item>
-    <item msgid="4746700499431366214">"Gerai, informuosiu vėliau"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
deleted file mode 100644
index 0430221..0000000
--- a/res/values-lt/strings.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Susirašinėjimas pranešimais"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Susirašinėjimas pranešimais"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Pasirinkti pokalbį"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Nustatymai"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Siųsti pranešimą"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Pridėti priedą"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Pagalba"</string>
-    <string name="welcome" msgid="2857560951820802321">"Sveiki!"</string>
-    <string name="skip" msgid="7238879696319945853">"Praleisti"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Kitas &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Kitas"</string>
-    <string name="exit" msgid="1905187380359981199">"Išeiti"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Nustatymai &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Nustatymai"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Susirašinėjimo programai reikia leidimų pasiekti SMS pranešimus, telefoną ir kontaktus."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Leidimus galite pakeisti skiltyje „Nustatymai &gt; Programos &gt; Susirašinėjimo programa &gt; Leidimai“."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Leidimus galite pakeisti skiltyje „Nustatymai, Programos, Susirašinėjimo programa, Leidimai“."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Dažniausiai naudojami"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Visi kontaktai"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Siųsti: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Fotografuokite arba filmuokite"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Pasirinkite vaizdus iš šio įrenginio"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Įrašyti garsą"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Pasirinkti nuotrauką"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Medija pasirinkta."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Medija nepasirinkta."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Pasirinkta: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"vaizdas: <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"vaizdas"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Įrašyti garsą"</string>
-    <string name="action_share" msgid="2143483844803153871">"Bendrinimas"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Ką tik"</string>
-    <string name="posted_now" msgid="867560789350406701">"Dabar"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> min.</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> min.</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> min.</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min.</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> val.</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> val.</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> val.</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> val.</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> diena</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> dienos</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> dienos</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dienų</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> savaitė</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> savaitės</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> savaitės</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> savaičių</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mėnesiai</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> mėnesiai</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> mėnesio</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mėnesių</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> metai</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> metai</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> metų</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> metų</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"0 klasės pranešimas"</string>
-    <string name="save" msgid="5081141452059463572">"Išsaugoti"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Mažai vietos įrenginyje. Susirašinėjimo programa automatiškai ištrins senesnius pranešimus, kad atlaisvintų vietos."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Mažėja laisvos saugyklos vietos saugykloje"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Galbūt Susirašinėjimo programa negalės siųsti ar gauti pranešimų, kol įrenginyje nebus daugiau laisvos vietos."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Mažai laisvos SMS saugyklos vietos. Gali reikėti ištrinti pranešimus."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Patvirtinkite telefono numerį"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Atlikę šį vienkartinį veiksmą užtikrinsite, kad Susirašinėjimo programa tinkamai pateiks grupės pranešimus."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefono numeris"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Ištrinti visus pranešimus su medija"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Ištrinti senesnius nei <xliff:g id="DURATION">%s</xliff:g> pranešimus"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Automatiškai ištrinti pranešimus, kurie senesni nei <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Nepaisyti"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Ištrinti visus pranešimus su medija?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Ištrinti pranešimus, kurie senesni nei <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Ištrinti pranešimus, kurie senesni nei <xliff:g id="DURATION">%s</xliff:g>, ir įjungti automatinį ištrynimą?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> sakė"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Jūs sakėte"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Pranešimas nuo <xliff:g id="SENDER">%s</xliff:g>:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Išsiuntėte pranešimą"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Siunčiama…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Neišsiųsta. Palieskite, kad bandytumėte dar kartą."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Neišsiųsta. Bandoma dar kartą…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Persiųsti arba ištrinti"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Atlikite balso skambutį pagalbos tarnyboms. Šiuo metu negalime pateikti teksto pranešimo."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Nepavyko"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Naujas MMS pranešimas, kurį galima atsisiųsti"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Naujas MMS pranešimas"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Nepavyko atsisiųsti"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Palieskite ir bandykite dar kartą"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Palieskite, kad atsisiųstumėte"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Atsisiųskite arba ištrinkite"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Atsisiunčiama..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Pranešimo galiojimo laikas pasibaigė arba jis negalimas"</string>
-    <string name="mms_info" msgid="3402311750134118165">"dydis: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, galiojimo pabaiga: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Nepavyko išsiųsti. Netinkamas gavėjas."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Paslauga nesuaktyvinta tinkle"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Nepavyko išsiųsti dėl tinklo problemos"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Pranešimo galiojimo laikas pasibaigė arba jis negalimas"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Nėra temos)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Nežinomas siuntėjas"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Pristatyta"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Nepavyko atsisiųsti pranešimo „<xliff:g id="SUBJECT">%1$s</xliff:g>“ nuo <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Nepavyko atlikti duomenų bazės operacijos dėl atminties trūkumo"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Pranešimas neišsiųstas"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Kai kurie pranešimai neišsiųsti naudojant Susirašinėjimo programą"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one">Pranešimų: <xliff:g id="MESSAGES_1">%d</xliff:g> (<xliff:g id="CONVERSATIONS">%d</xliff:g> pokalbis)</item>
-      <item quantity="few">Pranešimų: <xliff:g id="MESSAGES_1">%d</xliff:g> (<xliff:g id="CONVERSATIONS">%d</xliff:g> pokalbiai)</item>
-      <item quantity="many">Pranešimų: <xliff:g id="MESSAGES_1">%d</xliff:g> (<xliff:g id="CONVERSATIONS">%d</xliff:g> pokalbio)</item>
-      <item quantity="other">Pranešimų: <xliff:g id="MESSAGES_1">%d</xliff:g> (<xliff:g id="CONVERSATIONS">%d</xliff:g> pokalbių)</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Pranešimas neatsisiųstas"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Kai kurie pranešimai neatsisiųsti naudojant Susirašinėjimo programą"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one">Pranešimų: <xliff:g id="MESSAGES_1">%d</xliff:g> (<xliff:g id="CONVERSATIONS">%d</xliff:g> pokalbis)</item>
-      <item quantity="few">Pranešimų: <xliff:g id="MESSAGES_1">%d</xliff:g> (<xliff:g id="CONVERSATIONS">%d</xliff:g> pokalbiai)</item>
-      <item quantity="many">Pranešimų: <xliff:g id="MESSAGES_1">%d</xliff:g> (<xliff:g id="CONVERSATIONS">%d</xliff:g> pokalbio)</item>
-      <item quantity="other">Pranešimų: <xliff:g id="MESSAGES_1">%d</xliff:g> (<xliff:g id="CONVERSATIONS">%d</xliff:g> pokalbių)</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Pranešimas numeriu <xliff:g id="NUMBER">%1$s</xliff:g> nebuvo išsiųstas"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Atlikite balso skambutį pagalbos tarnyboms. Šiuo metu negalime pateikti teksto pranešimo numeriu <xliff:g id="NUMBER">%1$s</xliff:g>."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> naujas pranešimas</item>
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> nauji pranešimai</item>
-      <item quantity="many"><xliff:g id="MESSAGES">%d</xliff:g> naujo pranešimo</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> naujų pranešimų</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Pradėti"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Fotoaparatas negalimas"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Fotoaparatas negalimas"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Vaizdo įrašo fiksavimas negalimas"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Nepavyko išsaugoti medijos"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Negalima fotografuoti"</string>
-    <string name="back" msgid="1477626055115561645">"Atgal"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Suarchyvuota"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Ištrinti"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archyvuoti"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Išarchyvuoti"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Išjungti pranešimus"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Įjungti pranešimus"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Pridėti kontaktą"</string>
-    <string name="action_download" msgid="7786338136368564146">"Atsisiųsti"</string>
-    <string name="action_send" msgid="377635240181672039">"Siųsti"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Ištrinti"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Ištrinti šį pranešimą?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Šio veiksmo anuliuoti negalima."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Ištrinti"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Ištrinti šiuos pokalbius?</item>
-      <item quantity="few">Ištrinti šiuos pokalbius?</item>
-      <item quantity="many">Ištrinti šiuos pokalbius?</item>
-      <item quantity="other">Ištrinti šiuos pokalbius?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Ištrinti"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Atšaukti"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Kam"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Pasirinkti kelis vaizdus"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Patvirtinti pasirinkimą"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"Dar <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Nepavyko įrašyti garso. Bandykite dar kartą."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Nepavyko paleisti garso įrašo. Bandykite dar kartą."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Nepavyko išsaugoti garso įrašo. Bandykite dar kartą."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Palieskite ir palaikykite"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Nuotrauka"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Garso įrašo klipas"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Vaizdo įrašas"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kontakto kortelė"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Atsisiųsti"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Atsakyti SMS žinute"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Atsakyti MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Atsakyti"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> dalyvis</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> dalyviai</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> dalyvio</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dalyvių</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Aš"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontaktas užblokuotas ir suarchyvuotas"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontaktas atblokuotas ir išarchyvuotas"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Suarchyvuota: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Išarchyvuota: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Pranešimai išjungti"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Pranešimai įjungti"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Viskas nustatyta. Dar kartą palieskite „Siųsti“."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Susirašinėjimo programa sėkmingai nustatyta kaip numatytoji SMS programa."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Išmesti priedus</item>
-      <item quantity="few">Išmesti priedus</item>
-      <item quantity="many">Išmesti priedus</item>
-      <item quantity="other">Išmesti priedus</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Garso priedas"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Leisti garso priedą"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pristabdyti"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Pranešimas nuo <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Nepavyko atsiųsti pranešimo nuo <xliff:g id="SENDER">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Pranešimas nuo <xliff:g id="SENDER">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Neišsiųstas pranešimas grupei „<xliff:g id="CONTACT">%1$s</xliff:g>“: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Siunčiamas pranešimas grupei „<xliff:g id="CONTACT">%1$s</xliff:g>“: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Nepavyko išsiųsti pranešimo grupei „<xliff:g id="CONTACT">%1$s</xliff:g>“: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Pranešimas grupei „<xliff:g id="CONTACT">%1$s</xliff:g>“: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Nepavyko atsiųsti pranešimo nuo <xliff:g id="SENDER">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Pranešimas nuo <xliff:g id="SENDER">%1$s</xliff:g>: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Neišsiųstas pranešimas grupei „<xliff:g id="GROUP">%1$s</xliff:g>“: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Siunčiamas pranešimas grupei „<xliff:g id="GROUP">%1$s</xliff:g>“: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Nepavyko išsiųsti pranešimo grupei „<xliff:g id="GROUP">%1$s</xliff:g>“: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Pranešimas grupei „<xliff:g id="GROUP">%1$s</xliff:g>“: „<xliff:g id="MESSAGE">%2$s</xliff:g>“. Laikas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Įvyko pranešimo klaida. Palieskite ir bandykite dar kartą."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Pokalbis su <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Pašalinti temą"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Filmuoti"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Fiksuoti nejudantį vaizdą"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Fotografuoti"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Pradėti filmuoti"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Perjungti į viso ekrano režimu veikiantį fotoaparatą"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Perjungti priekinį ir užpakalinį fotoaparatus"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Sustabdyti įrašymą ir pridėti vaizdo įrašą"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Sustabdyti vaizdo įrašymą"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Susirašinėjimo programos nuotraukos"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> nuotrauka išsaugota albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> nuotraukos išsaugotos albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> nuotraukos išsaugota albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> nuotraukų išsaugota albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> vaizdo įrašas išsaugotas albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> vaizdo įrašai išsaugoti albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> vaizdo įrašo išsaugota albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> vaizdo įrašų išsaugota albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> priedas išsaugotas albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> priedai išsaugoti albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> priedo išsaugota albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> priedų išsaugota albume „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> priedas išsaugotas aplanke „Atsisiuntimai“</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> priedai išsaugoti aplanke „Atsisiuntimai“</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> priedo išsaugota aplanke „Atsisiuntimai“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> priedų išsaugota aplanke „Atsisiuntimai“</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one">Išsaugotas <xliff:g id="QUANTITY_1">%d</xliff:g> priedas</item>
-      <item quantity="few">Išsaugoti <xliff:g id="QUANTITY_1">%d</xliff:g> priedai</item>
-      <item quantity="many">Išsaugota <xliff:g id="QUANTITY_1">%d</xliff:g> priedo</item>
-      <item quantity="other">Išsaugota <xliff:g id="QUANTITY_1">%d</xliff:g> priedų</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Nepavyko išsaugoti <xliff:g id="QUANTITY_1">%d</xliff:g> priedo</item>
-      <item quantity="few">Nepavyko išsaugoti <xliff:g id="QUANTITY_1">%d</xliff:g> priedų</item>
-      <item quantity="many">Nepavyko išsaugoti <xliff:g id="QUANTITY_1">%d</xliff:g> priedo</item>
-      <item quantity="other">Nepavyko išsaugoti <xliff:g id="QUANTITY_1">%d</xliff:g> priedų</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Išsaugotas MMS priedas"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Nustatymai"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Suarchyvuota"</string>
-    <string name="action_close" msgid="1840519376200478419">"Uždaryti"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Išplėstiniai"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Derinti"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Pranešimai"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Garsas"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Tylus"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibravimas"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Užblokuota"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS pristatymo ataskaitos"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Pateikti kiekvieno išsiųsto SMS pristatymo ataskaitos užklausą"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automatiškai nuskaityti"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Automatiškai nuskaityti MMS pranešimus"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Aut. nuskait. naud. tarptinklinį ryšį"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Automatiškai nuskaityti MMS, kai veikia tarptinklinis ryšys"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Grupinis susirašinėjimas"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Naudokite MMS, kad siųstumėte vieną pranešimą, kai yra keli gavėjai"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Numatytoji SMS programa"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Numatytoji SMS programa"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Jūsų telefono numeris"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Nežinomas"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Siunčiamų pranešimų garsai"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Pateikti SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Pateikti gautų SMS neapdorotus duomenis išorinės atminties faile"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Pateikti MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Pateikti gautų MMS neapdorotus duomenis išorinės atminties faile"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Belaidžiu ryšiu siunčiami įspėjimai"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Pranešimo parinktys"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopijuoti tekstą"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Peržiūrėti išsamią informaciją"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Ištrinti"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Persiųsti"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Išsami pranešimo informacija"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tipas: "</string>
-    <string name="text_message" msgid="7415419755252205721">"teksto pranešimas"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Įvairialypės informacijos pranešimas"</string>
-    <string name="from_label" msgid="1947831848146564875">"Nuo: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Kam: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Išsiųsta: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Gauta: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Tema: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Dydis: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Pirmenybė: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Aukšta"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Įprasta"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Žema"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Paslėptas siuntėjo adresas"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Negalima siųsti žinutės, kol įkeliami priedai."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Nepavyko įkelti priedo. Bandykite dar kartą."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Tinklas neparuoštas. Bandykite dar kartą."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Pašalinti tekstą"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Perjungti iš teksto įvedimo į skaičių įvedimą ir atvirkščiai"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Pridėti daugiau dalyvių"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Patvirtinti dalyvius"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Pradėti naują pokalbį"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Pasirinkti šį elementą"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Leisti vaizdo įrašą"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Žmonės ir parinktys"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Derinti"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Žmonės ir parinktys"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Bendrieji"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Žmonės šiame pokalbyje"</string>
-    <string name="action_call" msgid="6596167921517350362">"Skambinti"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Siųsti pranešimą"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Siųsti pranešimą&lt;br/&gt;&lt;small&gt;iš <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Siųsti nuotraukas</item>
-      <item quantity="few">Siųsti nuotraukas</item>
-      <item quantity="many">Siųsti nuotraukas</item>
-      <item quantity="other">Siųsti nuotraukas</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Siųsti garso įrašus</item>
-      <item quantity="few">Siųsti garso įrašus</item>
-      <item quantity="many">Siųsti garso įrašus</item>
-      <item quantity="other">Siųsti garso įrašus</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Siųsti vaizdo įrašus</item>
-      <item quantity="few">Siųsti vaizdo įrašus</item>
-      <item quantity="many">Siųsti vaizdo įrašus</item>
-      <item quantity="other">Siųsti vaizdo įrašus</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Siųsti kontaktų korteles</item>
-      <item quantity="few">Siųsti kontaktų korteles</item>
-      <item quantity="many">Siųsti kontaktų korteles</item>
-      <item quantity="other">Siųsti kontaktų korteles</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Siųsti priedus</item>
-      <item quantity="few">Siųsti priedus</item>
-      <item quantity="many">Siųsti priedus</item>
-      <item quantity="other">Siųsti priedus</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> priedas paruoštas siųsti</item>
-      <item quantity="few"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> priedai paruošti siųsti</item>
-      <item quantity="many"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> priedo paruošta siųsti</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> priedų paruošta siųsti</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Siųsti atsiliepimą"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Žr. „Google Play“ parduotuvėje"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Versijos informacija"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"%1$s versija"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Atvirojo šaltinio licencijos"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Pranešimai"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Pasiektas priedų apribojimas"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Nepavyko įkelti priedo."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Pridėti prie kontaktų?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Pridėti kontaktą"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Tema"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Tema: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Įkeliama kontakto kortelė"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Nepavyko įkelti kontakto kortelės"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Peržiūrėti kontakto kortelę"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontaktas</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontaktai</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> kontakto</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktų</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontaktų kortelės"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Gimimo data"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Užrašai"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Persiųsti pranešimą"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Atsakyti"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS išjungta"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Kad galėtumėte išsiųsti, nustatykite Susirašinėjimo programą kaip numatytąją SMS programą"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Nustatykite Susirašinėjimo programą kaip numatytąją SMS programą"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Pakeisti"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Kad galėtumėte gauti pranešimus, nustatykite Susirašinėjimo programą kaip numatytąją SMS programą"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Nepasirinkta jokių pageidaujamų SIM kortelių, kurias būtų galima naudoti SMS pranešimams siųsti"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Įrenginio savininkas neleidžia naudoti šios programos."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Gerai"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Per daug pokalbio dalyvių"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Netinkami kontaktai</item>
-      <item quantity="few">Netinkami kontaktai</item>
-      <item quantity="many">Netinkami kontaktai</item>
-      <item quantity="other">Netinkami kontaktai</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Nepavyko įkelti fotoaparato vaizdo"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Jūs: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Juodraštis"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Kai pradėsite naują pokalbį, jis bus pateiktas čia"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Archyvuoti pokalbiai rodomi čia"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Įkeliami pokalbiai..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Nuotrauka"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Garso įrašo klipas"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Vaizdo įrašas"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kontakto kortelė"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Anuliuoti"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Bandyti dar kartą"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Įveskite kontakto vardą arba telefono numerį, kad pradėtumėte naują pranešimą"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokuoti"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blokuoti <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Panaikinti <xliff:g id="DESTINATION">%s</xliff:g> blokavimą"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Blokuoti <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Ir toliau gausite pranešimus iš šio numerio, bet nebūsite apie juos įspėti. Šis pokalbis bus archyvuotas."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Užblokuoti kontaktai"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"PANAIKINTI BLOKAVIMĄ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Užblokuoti kontaktai"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Pasirinkite vaizdą iš dokumentų bibliotekos"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Siunčiamas pranešimas"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Pranešimas išsiųstas"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobiliojo ryšio duomenys išjungti. Patikrinkite nustatymus."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Negalima siųsti pranešimų lėktuvo režimu"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Nepavyko išsiųsti pranešimo"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Pranešimas atsisiųstas"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobiliojo ryšio duomenys išjungti. Patikrinkite nustatymus."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Nepavyksta atsisiųsti pranešimų lėktuvo režimu"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Pranešimo nepavyko atsisiųsti"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nulis"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Vienas"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Du"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Trys"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Keturi"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Penki"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Šeši"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Septyni"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Aštuoni"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Devyni"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Nepavyko išsiųsti pranešimo; operatorius „<xliff:g id="CARRIERNAME">%1$s</xliff:g>“, <xliff:g id="ERRORCODE">%2$d</xliff:g> klaida"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Nepavyko išsiųsti pranešimo; operatorius nežinomas, <xliff:g id="ERRORCODE">%1$d</xliff:g> klaida"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Pers.: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Pranešimas neišsiųstas: paslauga nesuaktyvinta tinkle"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Pranešimas neišsiųstas: netinkamas paskirties adresas"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Pranešimas neišsiųstas: netinkamas pranešimas"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Pranešimas neišsiųstas: nepalaikomas turinys"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Pranešimas neišsiųstas: nepalaikomas pranešimas"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Pranešimas neišsiųstas: per didelis"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Naujas pranešimas"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Peržiūrėti"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Vaizdas"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Nepavyko rasti tinkamos programos"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Pašalinti gavėją"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Naujas pranešimas"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Atšaukti"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Redaguoti prieigos tašką"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nenustatyta"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Pavadinimas"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS tarpinis serveris"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS prievadas"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN tipas"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Ištrinti APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Naujas APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Išsaugoti"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Atmesti"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Pavadinimo laukas negali būti tuščias."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN laukas negali būti tuščias."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC lauke turi būti įvesti 3 skaitmenys."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC lauke turi būti įvesti 2 ar 3 skaitmenys."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Atkuriami numatytieji APN nustatymai."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Iš naujo nustatyti numatytuosius nustatymus"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Numatytųjų APN nustatymų nustatymas iš naujo baigtas."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Be pavadinimo"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Prieigos taškų pavadinimai"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Naujas APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Prieigos taško pavadinimo nustatymai šiam naudotojui nepasiekiami"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Kopijuoti į iškarpinę?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopijuoti"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"į <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Bendrieji"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Išplėstiniai"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Bendrieji nustatymai"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Išplėstiniai nustatymai"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"„<xliff:g id="SIM_NAME">%s</xliff:g>“ SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Siųsti individualius SMS pranešimus visiems gavėjams. Atsakymus gausite tik jūs"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Siųsti vieną MMS visiems gavėjams"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Nežinomas numeris"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Naujas pranešimas"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Naujas pranešimas."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM pasirinkimas"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Pasirinkta: <xliff:g id="SIM_0">%1$s</xliff:g>, SIM pasirinkimas"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Redaguoti temą"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Pasirinkite SIM arba redaguokite temą"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Palaikykite palietę, kad įrašytumėte garso įrašą"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Pradėti naują pokalbį"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Susirašinėjimo programa"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Susirašinėjimo programos sąrašas"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Susirašinėjimo programa"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Naujas pranešimas"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Pokalbių sąrašas"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Įkeliami pokalbiai"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Įkeliami pranešimai"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Peržiūrėti daugiau pokalbių"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Peržiūrėti daugiau pranešimų"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Pokalbis ištrintas"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Pokalbis ištrintas. Palieskite, kad būtų rodomas kitas Susirašinėjimo programos pokalbis."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Užblokuota"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Atblokuota"</string>
-    <string name="db_full" msgid="8459265782521418031">"Mažai laisvos saugyklos vietos. Kai kurie duomenys gali būti prarasti."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Pasirinkti priedus"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Patvirtinti pasirinkimą"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Pasirinkta: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Pašalinkite bent vieną priedą ir bandykite dar kartą."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Galite pabandyti siųsti pranešimą, bet gali nepavykti jo pristatyti, nebent pašalinsite bent vieną priedą."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Viename pranešime galite siųsti tik vieną vaizdo įrašą. Pašalinkite papildomus vaizdo įrašus ir bandykite dar kartą."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Susirašinėjimo programai nepavyko įkelti priedo."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Vis tiek siųsti"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Nepavyko pradėti pokalbio"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Pasirinkta <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-lv/arrays.xml b/res/values-lv/arrays.xml
deleted file mode 100644
index 0e130b7..0000000
--- a/res/values-lv/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"bez temata"</item>
-    <item msgid="272485471009191934">"bez temata"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Jā"</item>
-    <item msgid="6049132459802288033">"Nē"</item>
-    <item msgid="3084376867445867895">"Labi"</item>
-    <item msgid="3155097332660174689">"He-he"</item>
-    <item msgid="2611328818571146775">"Paldies!"</item>
-    <item msgid="4881335087096496747">"Piekrītu"</item>
-    <item msgid="2422296858597420738">"Jauki"</item>
-    <item msgid="4805581752819452687">"Esmu ceļā"</item>
-    <item msgid="4746700499431366214">"Labi, vēlāk ar tevi sazināšos."</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
deleted file mode 100644
index f598c77..0000000
--- a/res/values-lv/strings.xml
+++ /dev/null
@@ -1,545 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Ziņojumapmaiņa"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Ziņojumapmaiņa"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Atlasiet sarunu"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Iestatījumi"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Nosūtīt ziņojumu"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Pievienot pielikumu"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Palīdzība"</string>
-    <string name="welcome" msgid="2857560951820802321">"Laipni lūdzam!"</string>
-    <string name="skip" msgid="7238879696319945853">"Izlaist"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Tālāk &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Tālāk"</string>
-    <string name="exit" msgid="1905187380359981199">"Iziet"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Iestatījumi &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Iestatījumi"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Lietotnei Ziņojumapmaiņa ir nepieciešama piekļuves atļauja īsziņām, kā arī lietotnēm Tālrunis un Kontaktpersonas."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Atļaujas varat mainīt sadaļā Iestatījumi &gt; Lietotnes &gt; Ziņojumapmaiņa &gt; Atļaujas."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Atļaujas varat mainīt sadaļā Iestatījumi &gt; Lietotnes &gt; Ziņojumapmaiņa &gt; Atļaujas."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Biežāk izmantotās"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Visas kontaktpersonas"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Nosūtīt uz: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Uzņemt attēlus vai video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Izvēlieties attēlus no šīs ierīces."</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Ierakstīt audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Fotoattēla izvēle"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Saturs ir atlasīts."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Satura atlase ir noņemta."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Atlasīts: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"attēls, <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"attēls"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Ierakstīt audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Kopīgot"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Tikko"</string>
-    <string name="posted_now" msgid="867560789350406701">"Tikko"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="zero"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="zero"><xliff:g id="COUNT_1">%d</xliff:g> stundas</item>
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> stunda</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> stundas</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="zero"><xliff:g id="COUNT_1">%d</xliff:g> dienas</item>
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> diena</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dienas</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> nedēļas</item>
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> nedēļa</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> nedēļas</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> mēneši</item>
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mēnesis</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mēneši</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> gadi</item>
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> gads</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gadi</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"0. klases ziņojums"</string>
-    <string name="save" msgid="5081141452059463572">"Saglabāt"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Ierīcē ir maz vietas. Lai atbrīvotu vietu, lietotnē Ziņojumapmaiņa tiks automātiski dzēsti vecāki ziņojumi."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Paliek maz brīvas vietas"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Kamēr ierīcē nebūs vairāk vietas, lietotnē Ziņojumapmaiņa, iespējams, nevarēs sūtīt vai saņemt ziņojumus."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Maz vietas īsziņām. Iespējams, jums būs jādzēš īsziņas."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Tālruņa numura apstiprināšana"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Šī vienreizējā darbība ir nepieciešama, lai lietotnē Ziņojumapmaiņa tiktu pareizi piegādāti jūsu grupas ziņojumi."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Tālruņa numurs"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Dzēst visus ziņojumus, kas ietver multivides saturu"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Dzēst ziņojumus, kas vecāki par <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Automātiski dzēst ziņojumus, kas vecāki par: <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorēt"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Vai dzēst visas ziņas, kurās ietverts multivides saturs?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Vai dzēst ziņojumus, kas vecāki par: <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Vai dzēst ziņojumus, kas vecāki par: <xliff:g id="DURATION">%s</xliff:g>, un ieslēgt automātisko dzēšanu?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> rakstīja"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Jūs rakstījāt"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Ziņojums no <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Jūs nosūtījāt ziņojumu"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Notiek sūtīšana…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Neizdevās nosūtīt. Pieskarieties, lai mēģinātu vēlreiz."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Neizdevās nosūtīt. Notiek atkārtots mēģinājums…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Sūtiet vēlreiz vai dzēsiet vienumu"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Veiciet balss zvanu uz avārijas dienesta tālruņa numuru. Pašlaik nevar nosūtīt īsziņu."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Neizdevās"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Jauna lejupielādējama multiziņa"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Jauna multiziņa"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Nevarēja lejupielādēt"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Pieskarieties, lai mēģinātu vēlreiz"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Pieskarieties, lai lejupielādētu"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Lejupielādējiet vai dzēsiet"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Notiek lejupielāde…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Ziņojums nav pieejams, vai ir beidzies tā derīguma termiņš"</string>
-    <string name="mms_info" msgid="3402311750134118165">"lielums: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>; derīgs līdz: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Nevar nosūtīt ziņojumu. Adresāts nav derīgs."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Pakalpojums tīklā nav aktivizēts."</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Nevarēja nosūtīt tīkla problēmas dēļ."</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Ziņa nav pieejama, vai ir beidzies tās derīguma termiņš."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Bez temata)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Nezināms sūtītājs"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Piegādāts"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Nevarēja lejupielādēt no sūtītāja <xliff:g id="FROM">%2$s</xliff:g> saņemto ziņojumu “<xliff:g id="SUBJECT">%1$s</xliff:g>”."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Nevarēja pabeigt datu bāzes darbību, jo nav vietas atmiņā."</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Ziņojums netika nosūtīts."</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Lietotnē Ziņojumapmaiņa netika nosūtīti daži ziņojumi."</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="zero"><xliff:g id="MESSAGES_1">%d</xliff:g> ziņojumi <xliff:g id="CONVERSATIONS">%d</xliff:g> sarunās</item>
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> ziņojumi <xliff:g id="CONVERSATIONS">%d</xliff:g> sarunā</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> ziņojumi <xliff:g id="CONVERSATIONS">%d</xliff:g> sarunās</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Ziņojums nav lejupielādēts."</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Lietotnē Ziņojumapmaiņa nav lejupielādēti daži ziņojumi."</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="zero"><xliff:g id="MESSAGES_1">%d</xliff:g> ziņojumi <xliff:g id="CONVERSATIONS">%d</xliff:g> sarunās</item>
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> ziņojumi <xliff:g id="CONVERSATIONS">%d</xliff:g> sarunā</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> ziņojumi <xliff:g id="CONVERSATIONS">%d</xliff:g> sarunās</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Ziņojums netika nosūtīts uz tālruņa numuru <xliff:g id="NUMBER">%1$s</xliff:g>."</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Veiciet balss zvanu uz avārijas dienesta tālruņa numuru. Pašlaik nevar nosūtīt īsziņu uz tālruņa numuru <xliff:g id="NUMBER">%1$s</xliff:g>."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="zero"><xliff:g id="MESSAGES">%d</xliff:g> jauni ziņojumi</item>
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> jauns ziņojums</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> jauni ziņojumi</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Ieslēgt"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera nav pieejama."</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera nav pieejama."</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Video tveršana nav pieejama."</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Nevar saglabāt multivides failu."</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Nevar uzņemt attēlu"</string>
-    <string name="back" msgid="1477626055115561645">"Atpakaļ"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arhīvs"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Dzēst"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arhivēt"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Izņemt no arhīva"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Izslēgt paziņojumus"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Ieslēgt paziņojumus"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Pievienot kontaktpersonu"</string>
-    <string name="action_download" msgid="7786338136368564146">"Lejupielādēt"</string>
-    <string name="action_send" msgid="377635240181672039">"Sūtīt"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Dzēst"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Vai dzēst šo ziņojumu?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Šo darbību nevar atsaukt."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Dzēst"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="zero">Vai dzēst šīs sarunas?</item>
-      <item quantity="one">Vai dzēst šīs sarunas?</item>
-      <item quantity="other">Vai dzēst šīs sarunas?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Dzēst"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Atcelt"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Kam:"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Atlasīt vairākus attēlus"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Apstiprināt atlasi"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"Vēl <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Nevar ierakstīt audio. Mēģiniet vēlreiz."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Nevar atskaņot audio. Mēģiniet vēlreiz."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Nevarēja saglabāt audio. Mēģiniet vēlreiz."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Pieskarieties un turiet."</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Attēls"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audioklips"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Videoklips"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kontaktpersonas kartīte"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Lejupielādēt"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Atbildēt ar īsziņu"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Atbildēt ar MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Atbildēt"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="zero"><xliff:g id="COUNT_1">%d</xliff:g> dalībnieki</item>
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> dalībnieks</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dalībnieki</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Es"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontaktpersona ir bloķēta un arhivēta"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontaktpersona ir atbloķēta un atarhivēta."</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Arhivētas: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Atcelta arhivēšana: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Paziņojumi ir izslēgti."</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Paziņojumi ir ieslēgti."</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Iestatīšana ir pabeigta. Vēlreiz pieskarieties vienumam Sūtīt."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Lietotne Ziņojumapmaiņa ir sekmīgi iestatīta kā noklusējuma īsziņu lietotne."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="zero">Atmest pielikumus</item>
-      <item quantity="one">Atmest pielikumu</item>
-      <item quantity="other">Atmest pielikumus</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Audio pielikums"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Atskaņot audio pielikumu"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pārtraukt"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Ziņojums no lietotāja <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Neizdevās saņemt ziņojumu no kontaktpersonas <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Ziņojums no kontaktpersonas <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Nenosūtīts ziņojums kontaktpersonai <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Notiek ziņojuma sūtīšana kontaktpersonai <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Neizdevās nosūtīt ziņojumu kontaktpersonai <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Ziņojums kontaktpersonai <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Neizdevās saņemt ziņojumu no kontaktpersonas <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Ziņojums no kontaktpersonas <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Nenosūtīts ziņojums grupai <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Notiek ziņojuma sūtīšana grupai <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Neizdevās nosūtīt ziņojumu grupai <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Ziņojums grupai <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Laiks: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Radās problēma ar ziņojumu. Pieskarieties, lai mēģinātu vēlreiz."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Saruna ar grupu: <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Dzēst tēmu"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Uzņemt video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Uzņemt fotoattēlu"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Uzņemt attēlu"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Sākt video ierakstīšanu"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Pārslēgties uz pilnekrāna kameru"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Pārslēgties no priekšējās kameras uz aizmugurējo kameru un otrādi"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Pārtraukt ierakstīšanu un pievienot videoklipu"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Pārtraukt videoklipa ierakstīšanu"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotoattēli lietotnē Ziņojumapmaiņa"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="zero"><xliff:g id="QUANTITY_2">%d</xliff:g> fotoattēli tika saglabāti albumā “<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> fotoattēls tika saglabāts albumā “<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotoattēli tika saglabāti albumā “<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="zero"><xliff:g id="QUANTITY_2">%d</xliff:g> videoklipi tika saglabāti albumā “<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> videoklips tika saglabāts albumā “<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videoklipi tika saglabāti albumā “<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="zero"><xliff:g id="QUANTITY_2">%d</xliff:g> pielikumi tika saglabāti albumā “<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> pielikums tika saglabāts albumā “<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> pielikumi tika saglabāti albumā “<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="zero"><xliff:g id="QUANTITY_1">%d</xliff:g> pielikumi tika saglabāti mapē “Lejupielādes”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> pielikums tika saglabāts mapē “Lejupielādes”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> pielikumi tika saglabāti mapē “Lejupielādes”</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="zero">Tika saglabāti <xliff:g id="QUANTITY_1">%d</xliff:g> pielikumi.</item>
-      <item quantity="one">Tika saglabāts <xliff:g id="QUANTITY_1">%d</xliff:g> pielikums.</item>
-      <item quantity="other">Tika saglabāti <xliff:g id="QUANTITY_1">%d</xliff:g> pielikumi.</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="zero">Nevarēja saglabāt <xliff:g id="QUANTITY_1">%d</xliff:g> pielikumus.</item>
-      <item quantity="one">Nevarēja saglabāt <xliff:g id="QUANTITY_1">%d</xliff:g> pielikumu.</item>
-      <item quantity="other">Nevarēja saglabāt <xliff:g id="QUANTITY_1">%d</xliff:g> pielikumus.</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Multiziņas pielikums tika saglabāts."</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Iestatījumi"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arhīvs"</string>
-    <string name="action_close" msgid="1840519376200478419">"Aizvērt"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"Multiziņa"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Papildu"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Atkļūdot"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Paziņojumi"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Signāls"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Klusums"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrozvans"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloķēts"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Īsziņu piegādes atskaites"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Pieprasiet piegādes atskaiti par katru sūtīto īsziņu."</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automātiski izgūt"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Automātiski izgūstiet multiziņas."</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Autom. izgūšana viesabon. laikā"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Automātiska multiziņu izgūšana viesabonēšanas laikā"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Grupas ziņojumapmaiņa"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Izmantojiet multiziņu, lai vairākiem adresātiem nosūtītu vienu ziņu."</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Noklusējuma īsziņu lietotne"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Noklusējuma īsziņu lietotne"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Jūsu tālruņa numurs"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Nezināms"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Izejošo ziņojumu signāli"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Īsziņu izrakstīšana"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Izrakstiet saņemto īsziņu jēldatus ārējā krātuves failā."</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Multiziņu izrakstīšana"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Izrakstiet saņemto multiziņu jēldatus ārējā krātuves failā."</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Bezvadu brīdinājumi"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Ziņojuma opcijas"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopēt tekstu"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Skatīt detalizētu informāciju"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Dzēst"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Pārsūtīt"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Detalizēta informācija par ziņojumu"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Veids: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Īsziņa"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multiziņa"</string>
-    <string name="from_label" msgid="1947831848146564875">"No: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Kam: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Nosūtīts: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Saņemts: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Temats: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Lielums: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioritāte: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Augsta"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Parasta"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Zema"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Sūtītāja adrese ir slēpta"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Ziņojumu nevar nosūtīt, kamēr tiek ielādēti pielikumi."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Nevar ielādēt pielikumu. Mēģiniet vēlreiz."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Tīkls nav gatavs lietošanai. Mēģiniet vēlreiz."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Dzēst tekstu"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Pārslēgties starp teksta un ciparu ievadīšanu"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Pievienot vēl dalībniekus"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Apstiprināt dalībniekus"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Sākt jaunu sarunu"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Atlasīt šo vienumu"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Atskaņot videoklipu"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Personas un opcijas"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Atkļūdot"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Personas un opcijas"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Vispārīgi"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Sarunas dalībnieki"</string>
-    <string name="action_call" msgid="6596167921517350362">"Zvanīt"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Sūtīt ziņojumu"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Sūtiet īsziņu,&lt;br/&gt;&lt;small&gt;izmantojot šo SIM: <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="zero">Sūtīt fotoattēlus</item>
-      <item quantity="one">Sūtīt fotoattēlus</item>
-      <item quantity="other">Sūtīt fotoattēlus</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="zero">Sūtīt audio failus</item>
-      <item quantity="one">Sūtīt audio failus</item>
-      <item quantity="other">Sūtīt audio failus</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="zero">Sūtīt videoklipus</item>
-      <item quantity="one">Sūtīt videoklipus</item>
-      <item quantity="other">Sūtīt videoklipus</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="zero">Sūtīt kontaktpersonu kartītes</item>
-      <item quantity="one">Sūtīt kontaktpersonu kartītes</item>
-      <item quantity="other">Sūtīt kontaktpersonu kartītes</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="zero">Sūtīt pielikumus</item>
-      <item quantity="one">Sūtīt pielikumus</item>
-      <item quantity="other">Sūtīt pielikumus</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="zero">Nav atlasīts neviens pielikums.</item>
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> pielikums ir gatavs nosūtīšanai.</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> pielikumi ir gatavi nosūtīšanai.</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Sūtīt atsauksmes"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Skatīt Google Play veikalā"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informācija par versiju"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versija %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Atklātā pirmkoda licences"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Paziņojumi"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Sasniegts pielikumu ierobežojums."</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Neizdevās ielādēt pielikumu."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Vai pievienot kontaktpersonām?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Pievienot kontaktpersonu"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Temats"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Temats: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Notiek kontaktpersonas kartītes ielāde…"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Nevarēja ielādēt kontaktpersonas kartīti."</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Skatiet kontaktpersonas kartīti"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="zero"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersonas</item>
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersona</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersonas</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontaktpersonu kartītes"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Dzimšanas diena"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Piezīmes"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Ziņojuma pārsūtīšana"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Atbildēt"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Īsziņas ir atspējotas."</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Lai sūtītu īsziņas, iestatiet lietotni Ziņojumapmaiņa kā noklusējuma īsziņu lietotni."</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Iestatiet lietotni Ziņojumapmaiņa kā noklusējuma īsziņu lietotni."</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Mainīt"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Lai saņemtu īsziņas, iestatiet lietotni Ziņojumapmaiņa kā noklusējuma īsziņu lietotni."</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Īsziņu sūtīšanai nav atlasīta vēlamā SIM karte"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Ierīces īpašnieks nav atļāvis šīs lietotnes darbību."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Labi"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Sarunā ir pārāk daudz dalībnieku."</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="zero">Nederīgas kontaktpersonas</item>
-      <item quantity="one">Nederīga kontaktpersona</item>
-      <item quantity="other">Nederīgas kontaktpersonas</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Nevarēja ielādēt kameras attēlu."</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Jūs: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Melnraksts"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Jaunas sarunas tiks rādītas šeit."</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Šeit tiek rādītas arhivētās sarunas."</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Notiek sarunu ielāde..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Attēls"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audioklips"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Videoklips"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kontaktpersonas kartīte"</string>
-    <string name="mms_text" msgid="1528791558806015806">"Multiziņa"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Atsaukt"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Mēģināt vēlreiz"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Ievadiet kontaktpersonas vārdu vai tālruņa numuru, lai sāktu rakstīt jaunu ziņojumu."</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloķēt"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloķēt: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Atbloķēt: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Vai bloķēt <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Jūs turpināsiet saņemt ziņojumus no šī numura, taču vairs nesaņemsiet par tiem paziņojumus. Šī saruna tiks arhivēta."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Bloķētās kontaktpersonas"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ATBLOĶĒT"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Bloķētās kontaktpersonas"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Izvēlēties attēlu no dokumentu bibliotēkas"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Notiek ziņojuma sūtīšana"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Ziņojums nosūtīts"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobilo datu savienojums ir izslēgts. Pārbaudiet iestatījumus."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Lidojuma režīmā nevar nosūtīt ziņojumus."</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Ziņojumu nevarēja nosūtīt."</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Ziņojums lejupielādēts"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobilo datu savienojums ir izslēgts. Pārbaudiet iestatījumus."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Ziņojumus nevar lejupielādēt lidojuma režīmā"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Ziņojumu nevarēja lejupielādēt"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nulle"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Viens"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Divi"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Trīs"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Četri"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Pieci"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Seši"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Septiņi"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Astoņi"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Deviņi"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Nevar nosūtīt ziņojumu: operatora <xliff:g id="CARRIERNAME">%1$s</xliff:g> kļūda <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Nevar nosūtīt ziņojumu: nezināma operatora kļūda <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Pārs.: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Ziņojums netika nosūtīts: pakalpojums nav aktivizēts tīklā."</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Ziņojums nav nosūtīts: nederīga galamērķa adrese"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Ziņojums nav nosūtīts: nederīgs ziņojums"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Ziņojums nav nosūtīts: neatbalstīts saturs"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Ziņojums nav nosūtīts: neatbalstīts ziņojums"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Ziņojums nav nosūtīts: pārāk liels"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Jauns ziņojums"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Skatīt"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Attēls"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Neizdevās atrast atbilstošu lietojumprogrammu."</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Noņemt adresātu"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Jauns ziņojums"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Atcelt"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Piekļuves punkta rediģēšana"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nav iestatīts"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nosaukums"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Multiziņu starpniekserveris"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Multiziņu ports"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN veids"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Dzēst APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Jauns APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Saglabāt"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Atmest"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Nosaukuma lauks nedrīkst būt tukšs."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN lauks nedrīkst būt tukšs."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC laukā ir jābūt 3 cipariem."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC laukā ir jābūt 2 vai 3 cipariem."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Notiek APN noklusējuma iestatījumu atjaunošana."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Atiestatīt noklusējuma vērtības"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Noklusējuma APN iestatījumu atiestatīšana ir pabeigta."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Bez nosaukuma"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Piekļuves punktu nosaukumi"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Jauns APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Piekļuves punkta nosaukuma iestatījumi šim lietotājam nav pieejami."</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Vai kopēt starpliktuvē?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopēt"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"šajā SIM: <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Vispārīgi"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Papildu"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Vispārīgi iestatījumi"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Papildu iestatījumi"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM kartes “<xliff:g id="SIM_NAME">%s</xliff:g>” iestatījumi"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Sūtīt atsevišķas īsziņas visiem adresātiem (atbildes saņemsiet tikai jūs)"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Sūtīt vienu multiziņu visiem adresātiem"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Nezināms numurs"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Jauns ziņojums"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Jauns ziņojums"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM kartes atlasītājs"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Atlasīta <xliff:g id="SIM_0">%1$s</xliff:g>, SIM kartes atlasītājs"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Rediģēt tematu"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Atlasīt SIM karti vai rediģēt tematu"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Pieskarieties un turiet, lai ierakstītu skaņu."</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Sākt jaunu sarunu"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Ziņojumapmaiņa"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Sarunu saraksts lietotnē Ziņojumapmaiņa"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Ziņojumapmaiņa"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Jauns ziņojums"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Sarunu saraksts"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Notiek sarunu ielāde"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Notiek ziņojumu ielāde."</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Skatīt citas sarunas"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Skatīt vairāk ziņojumu"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Saruna ir izdzēsta"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Saruna dzēsta. Pieskarieties, lai skatītu citu sarunu lietotnē Ziņojumapmaiņa."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloķēts"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Atbloķēts"</string>
-    <string name="db_full" msgid="8459265782521418031">"Krātuvē ir maz vietas. Daļa datu var tikt zaudēta."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Pielikumu atlasīšana"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Apstiprināt atlasi"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Atlasīti: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Lūdzu, noņemiet vienu vai vairākus pielikumus un mēģiniet vēlreiz."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Varat mēģināt sūtīt ziņojumu, taču tas, iespējams, netiks piegādāts, ja vien nenoņemsiet vienu vai vairākus pielikumus."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Ziņojumam var pievienot tikai vienu videoklipu. Lūdzu, noņemiet liekos videoklipus un mēģiniet vēlreiz."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Lietotnē Ziņojumapmaiņa neizdevās ielādēt pielikumu."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Tik un tā sūtīt"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Nevarēja sākt sarunu"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Atlasīts: <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-mk/arrays.xml b/res/values-mk/arrays.xml
deleted file mode 100644
index eba8db7..0000000
--- a/res/values-mk/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"без наслов"</item>
-    <item msgid="272485471009191934">"без тема"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Да"</item>
-    <item msgid="6049132459802288033">"Не"</item>
-    <item msgid="3084376867445867895">"Во ред"</item>
-    <item msgid="3155097332660174689">"Хехе"</item>
-    <item msgid="2611328818571146775">"Фала"</item>
-    <item msgid="4881335087096496747">"Се согласувам"</item>
-    <item msgid="2422296858597420738">"Убаво"</item>
-    <item msgid="4805581752819452687">"На пат сум"</item>
-    <item msgid="4746700499431366214">"Во ред, ќе ти јавам подоцна"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
deleted file mode 100644
index 16f60c9..0000000
--- a/res/values-mk/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Пораки"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Пораки"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Изберете разговор"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Поставки"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Испрати порака"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Додај прилог"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Помош"</string>
-    <string name="welcome" msgid="2857560951820802321">"Добре дојдовте"</string>
-    <string name="skip" msgid="7238879696319945853">"Прескокни"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Следно &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Следно"</string>
-    <string name="exit" msgid="1905187380359981199">"Излези"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Поставки &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Поставки"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"На Messaging му треба дозвола за СМС, телефон и контакти."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Дозволите може да ги промените во Поставки &gt; Апликации &gt; Messaging &gt; Дозволи."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Дозволите може да ги промените во Поставки, Апликации, Messaging, Дозволи."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Чести"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Сите контакти"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Испрати на <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Снимај слики или видео"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Изберете слики од уредот"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Снимај аудио"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Избери фотографија"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Медиумот е избран."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Медиумот е неизбран."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Избрани: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"слика <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"слика"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Снимај аудио"</string>
-    <string name="action_share" msgid="2143483844803153871">"Сподели"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Пред малку"</string>
-    <string name="posted_now" msgid="867560789350406701">"Сега"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> мин.</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> мин.</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> час</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> часа</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ден</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> дена</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> седмица</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> седмици</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> месец</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> месеци</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> година</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> години</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Порака 0 класа"</string>
-    <string name="save" msgid="5081141452059463572">"Зачувај"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Уредот нема доволно меморија. Messaging автоматски ќе ги брише постарите текстуални пораки за да ослободи простор."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Меморијата е речиси полна"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Messaging може да не испраќа или прима пораки сѐ додека не се ослободи повеќе простор на уредот."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Малку простор за складирање СМС. Можеби ќе треба да избришете пораки."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Потврдете го својот телефонски број"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Со овој еднократен чекор ќе се погрижите Messaging правилно да ви ги испорачува групните пораки."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Телефонски број"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Избриши ги сите пораки со медиуми"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Избриши ги пораките постари од <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Автоматско бришење пораки постари од <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Игнорирај"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Да се избришат сите пораки со медиуми?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Да се избришат пораките постари од <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Да се избришат пораките постари од <xliff:g id="DURATION">%s</xliff:g> и да се вклучи автоматското бришење?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> рече"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Рековте"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Порака од <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Испративте порака"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Се испраќа..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Не се испрати. Допрете за да се обидете повторно."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Не се испрати. Се обидуваме повторно…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Испратете повторно или избришете"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Направете гласовен повик до службите за итни случаи. Вашата текстуална порака не може да се испорача во ова време."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Неуспешно"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Нова ММС-порака за преземање"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Нова ММС-порака"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Не можеше да се преземе"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Допрете да се обидете повторно"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Допри за преземање"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Преземете или избришете"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Се презема..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Пораката е истечена или не е достапна"</string>
-    <string name="mms_info" msgid="3402311750134118165">"големина: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, истекување: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Не може да се испрати. Примачот не е важечки."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Услугата не е активирана на мрежата"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Не можеше да се испрати поради проблем со мрежата"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Пораката е истечена или не е достапна"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Без наслов)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Непознат испраќач"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Доставено"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Пораката <xliff:g id="SUBJECT">%1$s</xliff:g> од <xliff:g id="FROM">%2$s</xliff:g> не може да се преземе."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Не може да се заврши дејството во базата со податоци поради мала меморија"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Пораката не се испрати"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Некои пораки не се испратени во Messaging"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> пораки во <xliff:g id="CONVERSATIONS">%d</xliff:g> разговор</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> пораки во <xliff:g id="CONVERSATIONS">%d</xliff:g> разговори</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Пораката не е преземена"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Некои пораки не се преземени во Messaging"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> пораки во <xliff:g id="CONVERSATIONS">%d</xliff:g> разговор</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> пораки во <xliff:g id="CONVERSATIONS">%d</xliff:g> разговори</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Пораката до <xliff:g id="NUMBER">%1$s</xliff:g> не се испрати"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Направете гласовен повик до службите за итни случаи. Вашата текстуална порака до <xliff:g id="NUMBER">%1$s</xliff:g> не може да се испорача во ова време."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> нова порака</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> нови пораки</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Започни"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Нема фотоапарат на располагање"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Нема фотоапарат на располагање"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Снимањето видео не е достапно"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Медиумите не може да се зачуваат"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Не може да фотографира"</string>
-    <string name="back" msgid="1477626055115561645">"Назад"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Архивирано"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Бришење"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Архивирање"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Извади од архива"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Исклучи известувања"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Вклучи известувања"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Додај контакт"</string>
-    <string name="action_download" msgid="7786338136368564146">"Преземи"</string>
-    <string name="action_send" msgid="377635240181672039">"Испрати"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Избриши"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Да се избрише пораката?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Дејството не може да се врати."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Избриши"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Да се избрише разговоров?</item>
-      <item quantity="other">Да се избришат разговориве?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Избриши"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Откажи"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"До"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Избери повеќе слики"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Потврдете го изборот"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Аудиото не може да се сними. Обидете се повторно."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Аудиото не може да се пушти. Обидете се повторно."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Аудиото не можеше да се зачува. Обидете се повторно."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Допри и задржи"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Слика"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Аудиоклип"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Видео"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Картичка за контакти"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Преземи"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Одговори преку СМС"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Одговори преку ММС"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Одговори"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> учесник</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> учесници</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Јас"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Контактот е блокиран и архивиран"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Одблокиран и одархивиран контакт"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> архивирани"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> извадени од архива"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Известувањата се исклучени"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Известувањата се вклучени"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Сè е подготвено. Допрете Испрати повторно."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Messaging е успешно поставен како стандардна апликација за СМС."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Отфрли го прилогот</item>
-      <item quantity="other">Отфрли ги прилозите</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Аудио прилог"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Репродуцирај аудио прилог"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Пауза"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Порака од <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Неуспешна порака од <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Порака од <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Неиспратена порака до <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Се испраќа порака до <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Неуспешна порака до <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Порака до <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Неуспешна порака од <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Порака од <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Неиспратена порака до <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Се испраќа порака до <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Неуспешна порака до <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Порака до <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Неуспешна порака. Допрете за да се обидете повторно."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Разговор со <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Избриши тема"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Снимај видео"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Сними фотографија"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Фотографирај"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Започни со снимање видео"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Префрлете на камера на цел екран"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Префрли меѓу предна и задна камера"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Престани со снимање и прикачи видео"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Прекини со снимање видео"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Фотографии во Messaging"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> фотографија се зачува во албумот „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> фотографии се зачуваа во албумот „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> видео се зачува во албумот „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> видеа се зачуваа во албумот „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> прилог се зачува во албумот „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> прилози се зачуваа во албумот „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> прилог се зачува во „Преземања“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> прилози се зачуваа во „Преземања“</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one">Зачуван е <xliff:g id="QUANTITY_1">%d</xliff:g> прилог</item>
-      <item quantity="other">Зачувани се <xliff:g id="QUANTITY_1">%d</xliff:g> прилози</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Не можеше да се зачува <xliff:g id="QUANTITY_1">%d</xliff:g> прилог</item>
-      <item quantity="other">Не можеше да се зачуваат <xliff:g id="QUANTITY_1">%d</xliff:g> прилози</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Зачуван ММС-прилог"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Поставки"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Архивирано"</string>
-    <string name="action_close" msgid="1840519376200478419">"Затвори"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"ММС"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Напредни"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Отстрани грешка"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Известувања"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Звук"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"На тивко"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Вибрации"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Блокирано"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Извештаи за испорака на СМС"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Побарајте извештај за испорака за секоја СМС што ја испраќате"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Автоматско преземање"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Преземај ММС-пораки автоматски"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Автоматско преземање во роаминг"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Автоматски преземај MMS додека си во роаминг"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Групно испраќање пораки"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Користи ММС за испраќање една порака кога има повеќе примачи"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Стандардна СМС апликација"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Стандардна СМС апликација"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Вашиот телефонски број"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Непознато"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Звуци на појдовни пораки"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Извади СМС"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Извади ги примените необработени податоци за СМС на надворешна датотека за складирање"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Извади ММС"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Извади ги примените необработени податоци за ММС на надворешна датотека за складирање"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Безжични предупредувања"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Опции на порака"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Копирај текст"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Прикажи детали"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Избриши"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Проследи"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Детали на порака"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Тип: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Текстуална порака"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Мултимедијална порака"</string>
-    <string name="from_label" msgid="1947831848146564875">"Од: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"До: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Испратено: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Примени: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Предмет: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Големина: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Приоритет: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"СИМ: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Високо"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Нормално"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Ниско"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"СИМ <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Скриена адреса на испраќачот"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Не може да се испрати порака додека се вчитуваат прилозите."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Прилогот не може да се вчита. Обидете се повторно."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Мрежата не е подготвена. Обидете се повторно."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Избриши текст"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Префрлајте меѓу внесување текст и броеви"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Додај повеќе учесници"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Потврди учесници"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Започнете нов разговор"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Изберете ја ставкава"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Пушти видео"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Луѓе и опции"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Отстрани грешка"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Луѓе и опции"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Општи"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Луѓе во овој разговор"</string>
-    <string name="action_call" msgid="6596167921517350362">"Повикај"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Испрати порака"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Испратете порака &lt;br/&gt;&lt;small&gt;од <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Испрати ја фотографијата</item>
-      <item quantity="other">Испрати ги фотографиите</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Испрати го аудиото</item>
-      <item quantity="other">Испрати ги аудиата</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Испрати го видеото</item>
-      <item quantity="other">Испрати ги видеата</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Испрати ја картичката за контакт</item>
-      <item quantity="other">Испрати ги картичките за контакт</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Испрати го прилогот</item>
-      <item quantity="other">Испрати ги прилозите</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> прилог е подготвен за испраќање</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> прилози се подготвени за испраќање</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Испрати повратни информации"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Прикажи во продавницата на Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Информации за верзијата"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Верзија %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Лиценци со отворен код"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Известувања"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Достигнато е ограничувањето за прилози"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Не успеа да се вчита прилогот."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Да додадеме во контакти?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Додај контакт"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Предмет"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Предмет: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Се вчитува картичката за контакт"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Картичката за контакт не можеше да се вчита"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Прикажи картичка за контакти"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> контакт</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакти</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Картички за контакт"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Роденден"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Белешки"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Проследи порака"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Одговори"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"СМС-пораките се оневозможени"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"За испраќање, поставете го Messaging како стандардна апликација за СМС"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Поставете го Messaging како стандардна апликација за СМС"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Промени"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"За примање пораки, поставете го Messaging како стандардна апликација за СМС"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Не е избрана претпочитана СИМ за испраќање СМС-пораки"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Оваа апликација не е дозволена од сопственикот на уредот."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Во ред"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Премногу учесници во разговорот"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Неважечки контакт</item>
-      <item quantity="other">Неважечки контакти</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Слика од камерата не можеше да се вчита"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Вие: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Нацрт"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Штом започнете нов разговор, ќе го видите наведен тука"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Архивираните разговори се појавуваат тука"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Се вчитуваат разговори…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Слика"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Аудиоклип"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Видео"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Картичка за контакти"</string>
-    <string name="mms_text" msgid="1528791558806015806">"ММС"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Врати"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Обидете се повторно"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Внесете име на контактот или телефонски број за да започнете нова порака"</string>
-    <string name="action_block" msgid="9032076625645190136">"Блокирај"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Блокирај <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Одблокирај <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Да се блокира <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Ќе продолжите да добивате пораки од овој број, но веќе нема да добивате известувања. Разговорот ќе се архивира."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Блокирани контакти"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ОДБЛОКИРАЈ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Блокирани контакти"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Изберете слика од библиотеката со документи"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Пораката се испраќа"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Пораката е испратена"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Мобилните податоци се исклучени. Проверете ги поставките."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Не може да се испраќаат пораки во авионски режим"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Пораката не може да се испрати."</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Пораката е преземeна"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Мобилните податоци се исклучени. Проверете ги поставките."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Не може да се преземаат пораки во авионски режим"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Пораката не можеше да се преземе"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Нула"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Еден"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Два"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Три"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Четири"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Пет"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Шест"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Седум"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Осум"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Девет"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Пораката не може да се испрати преку <xliff:g id="CARRIERNAME">%1$s</xliff:g>, грешка <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Пораката не може да се испрати преку непознат давател на услуга, грешка <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Препрати: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Пораката не се испрати: услугата не е активирана на мрежата"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Пораката не е испратена: неважечка адреса на одредиштето"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Пораката не е испратена: неважечка порака"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Пораката не е испратена: неподдржана содржина"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Пораката не е испратена: неподдржана порака"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Пораката не е испратена: преголема"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Нова порака"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Прикажи"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Слика"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Не може да се најде соодветна апликација"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Отстрани го примачот"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Нова порака"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Откажи"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Уреди пристапна точка"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Не е поставено"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Име"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"Име на пристапна точка (APN)"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"ММСЦ"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Прокси на ММС"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Порта за ММС"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Тип APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Избриши APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Ново APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Зачувај"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Отфрли"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Полето за име не може да биде празно."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN не може да биде празна."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Полето MNC мора да содржи 3 цифри."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Полето MNC мора да содржи 2 или 3 цифри."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Враќање стандардни поставки на APN."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Ресетирај на стандардни вредности"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Ресетирањето стандардни поставки на APN е завршено."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Без наслов"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Имиња на пристапни точки"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Поставување APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Ново APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Поставките за името на пристапната точка не се достапни за овој корисник"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Копирајте во таблата со исечоци?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Копирај"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"до <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Општи"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Напредни"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Општи поставки"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Напредни поставки"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"СИМ „<xliff:g id="SIM_NAME">%s</xliff:g>“"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Испратете поединечни СМС-пораки до сите примачи. Само вие ќе добивате одговори"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Испратете единствена ММС-порака до сите примачи"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Непознат број"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Нова порака"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Нова порака."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Бирач на СИМ"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> е избран, бирач на СИМ"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Уреди предмет"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Избери СИМ или уреди предмет"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Допри и задржи за снимање аудио"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Започнете нов разговор"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Messaging"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Список на Messaging"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Messaging"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Нова порака"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Список со разговори"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Разговорите се вчитуваат"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Се вчитуваат пораки"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Прикажи повеќе разговори"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Прикажи повеќе пораки"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Конверзацијата е избришана"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Разговорот е избришан. Допрете за да се прикаже друг разговор на Messaging"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Блокирано"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Одблокирано"</string>
-    <string name="db_full" msgid="8459265782521418031">"Просторот за складирање е премногу мал. Некои податоци може да се изгубат."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Изберете прилози"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Потврдете го изборот"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Избрани <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Отстранете еден или повеќе прилози и обидете се повторно."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Може да се обидете да ја испратите пораката, но можеби нема да се испорача, освен ако не отстраните еден или повеќе прилози."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Може да испраќате само едно видео по порака. Отстранете ги дополнителните видеа и обидете се повторно."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Messaging не успеа да го вчита прилогот."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Сепак испрати"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Не може да се започне разговор"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Избрана е <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-ml/arrays.xml b/res/values-ml/arrays.xml
deleted file mode 100644
index 7454e1f..0000000
--- a/res/values-ml/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"വിഷയമില്ല"</item>
-    <item msgid="272485471009191934">"വിഷയമൊന്നുമില്ല"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"ഉവ്വ്"</item>
-    <item msgid="6049132459802288033">"ഇല്ല"</item>
-    <item msgid="3084376867445867895">"ശരി"</item>
-    <item msgid="3155097332660174689">"ഹിഹി"</item>
-    <item msgid="2611328818571146775">"നന്ദി"</item>
-    <item msgid="4881335087096496747">"ഞാൻ അംഗീകരിക്കുന്നു"</item>
-    <item msgid="2422296858597420738">"കൊള്ളാം"</item>
-    <item msgid="4805581752819452687">"മറുപടി നൽകാൻ തയ്യാറാണ്"</item>
-    <item msgid="4746700499431366214">"ശരി, പിന്നീട് നിങ്ങളുമായി ബന്ധപ്പെടാൻ എന്നെ അനുവദിക്കുക"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
deleted file mode 100644
index b292525..0000000
--- a/res/values-ml/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"സന്ദേശമയയ്‌ക്കൽ"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"സന്ദേശമയയ്‌ക്കൽ"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"സംഭാഷണം തിരഞ്ഞെടുക്കുക"</string>
-    <string name="action_settings" msgid="1329008122345201684">"ക്രമീകരണങ്ങൾ"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"സന്ദേശം അയയ്ക്കൂ"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"ഒരു അറ്റാച്ചുമെന്റ് ചേർക്കുക"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"സഹായം"</string>
-    <string name="welcome" msgid="2857560951820802321">"സ്വാഗതം"</string>
-    <string name="skip" msgid="7238879696319945853">"ഒഴിവാക്കുക"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"അടുത്തത് &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"അടുത്തത്"</string>
-    <string name="exit" msgid="1905187380359981199">"പുറത്തുകടക്കുക"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"ക്രമീകരണം &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"ക്രമീകരണം"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"SMS, ഫോൺ, കോൺടാക്റ്റുകൾ എന്നിവയിലേക്ക് സന്ദേശമയയ്ക്കലിന് അനുമതി ആവശ്യമാണ്."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"ക്രമീകരണം &gt; ആപ്സ് &gt; സന്ദേശമയയ്ക്കൽ &gt; അനുമതികൾ എന്നതിൽ നിങ്ങൾക്ക് അനുമതികൾ മാറ്റാവുന്നതാണ്."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"ക്രമീകരണം, ആപ്സ്, സന്ദേശമയയ്ക്കൽ, അനുമതികൾ എന്നതിൽ നിങ്ങൾക്ക് അനുമതികൾ മാറ്റാവുന്നതാണ്."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"പതിവായി കോൺടാക്‌റ്റുചെയ്യുന്നവർ"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> എന്നതിലേയ്ക്ക് അയയ്ക്കുക"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"ചിത്രങ്ങൾ അല്ലെങ്കിൽ വീഡിയോ എടുക്കുക"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"ഈ ഉപകരണത്തിൽ നിന്ന് ചിത്രങ്ങൾ തിരഞ്ഞെടുക്കുക"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ഓഡിയോ റെക്കോർഡുചെയ്യുക"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"മീഡിയ തിരഞ്ഞെടുത്തിരിക്കുന്നു."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"മീഡിയ തിരഞ്ഞെടുത്തത് മാറ്റി."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> എണ്ണം തിരഞ്ഞെടുത്തു"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"ചിത്രം <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"ചിത്രം"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ഓഡിയോ റെക്കോർഡുചെയ്യുക"</string>
-    <string name="action_share" msgid="2143483844803153871">"പങ്കിടുക"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ഇപ്പോൾ"</string>
-    <string name="posted_now" msgid="867560789350406701">"ഇപ്പോൾ"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> മിനിറ്റ്</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> മിനിറ്റ്</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> മണിക്കൂർ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> മണിക്കൂർ</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ദിവസം</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ദിവസം</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ആഴ്‌ച</item>
-      <item quantity="one">ഒരു ആഴ്‌ച</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> മാസം</item>
-      <item quantity="one">ഒരു മാസം</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> വർഷം</item>
-      <item quantity="one">ഒരു വർഷം</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"ക്ലാസ് 0 സന്ദേശം"</string>
-    <string name="save" msgid="5081141452059463572">"സംരക്ഷിക്കുക"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"ഉപകരണത്തിൽ ഇടം കുറവാണ്. ഇടം സ്വതന്ത്രമാക്കുന്നതിന് പഴയ സന്ദേശങ്ങളെ സന്ദേശമയയ്ക്കൽ സ്വയമേവ ഇല്ലാതാക്കും."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"സംഭരണയിടം കഴിഞ്ഞു"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"നിങ്ങളുടെ ഉപകരണത്തിൽ കൂടുതൽ ഇടം ലഭ്യമാകുന്നത് വരെ സന്ദേശമയയ്ക്കലിന് സന്ദേശങ്ങൾ അയയ്ക്കാനോ സ്വീകരിക്കാനോ ആയേക്കില്ല."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS സ്റ്റോറേജ്  കുറവാണ്. നിങ്ങൾക്ക് സന്ദേശങ്ങൾ ഇല്ലാതാക്കേണ്ടതായി വരാം."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"നിങ്ങളുടെ ഫോൺ നമ്പർ സ്ഥിരീകരിക്കുക"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"സന്ദേശമയയ്ക്കൽ നിങ്ങളുടെ ഗ്രൂപ്പ് സന്ദേശങ്ങൾ ശരിയായി വിതരണം ചെയ്യുമെന്ന് ഈ ഒറ്റത്തവണയുള്ള ഘട്ടം ഉറപ്പാക്കും."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ഫോണ്‍‌ നമ്പര്‍‌"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"മീഡിയയുള്ള എല്ലാ സന്ദേശങ്ങളും ഇല്ലാതാക്കുക"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> എന്നതിലും പഴയ സന്ദേശങ്ങൾ ഇല്ലാതാക്കുക"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> മുമ്പുള്ള സന്ദേശങ്ങൾ യാന്ത്രികമായി ഇല്ലാതാക്കുക"</string>
-    <string name="ignore" msgid="7063392681130898793">"നിരസിക്കുക"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"മീഡിയയുള്ള എല്ലാ സന്ദേശങ്ങളും ഇല്ലാതാക്കണോ?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> മുമ്പുള്ള സന്ദേശങ്ങൾ ഇല്ലാതാക്കണോ?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> മുമ്പുള്ള സന്ദേശങ്ങൾ ഇല്ലാതാക്കുകയും യാന്ത്രിക ഇല്ലാതാക്കൽ ഓണാക്കുകയും ചെയ്യണോ?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g>, പറഞ്ഞു"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"നിങ്ങൾ പറഞ്ഞു"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> എന്നയാളില്‍ നിന്നുള്ള സന്ദേശം"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"നിങ്ങൾ ഒരു സന്ദേശമയച്ചു"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"അയയ്‌ക്കുന്നു…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"അയച്ചില്ല. വീണ്ടും ശ്രമിക്കാൻ സ്‌പർശിക്കുക."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"അയച്ചില്ല. വീണ്ടും ശ്രമിക്കുന്നു..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"വീണ്ടും അയയ്ക്കുക അല്ലെങ്കിൽ ഇല്ലാതാക്കുക"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"അടിയന്തര സേവനങ്ങളിലേക്ക് വോയ്‌സ് കോൾ ചെയ്യുക. ഇപ്പോൾ നിങ്ങളുടെ ടെക്‌സ്‌റ്റ് സന്ദേശം കൈമാറാനായില്ല."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"പരാജയപ്പെട്ടു"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"ഡൗൺലോഡുചെയ്യാനുള്ള പുതിയ MMS സന്ദേശം"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"പുതിയ MMS സന്ദേശം"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ഡൗൺലോഡുചെയ്യാനായില്ല"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"വീണ്ടും ശ്രമിക്കാൻ സ്‌പർശിക്കുക"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ഡൗൺലോഡുചെയ്യാൻ സ്‌പർശിക്കുക"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ഡൗൺലോഡുചെയ്യുക അല്ലെങ്കിൽ ഇല്ലാതാക്കുക"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"ഡൗൺലോഡുചെയ്യുന്നു…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"സന്ദേശം കാലഹരണപ്പെട്ടു അല്ലെങ്കിൽ ലഭ്യമല്ല"</string>
-    <string name="mms_info" msgid="3402311750134118165">"വലുപ്പം: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, കാലഹരണപ്പെടുന്നത്: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"അയയ്‌ക്കാനാവില്ല. സ്വീകർത്താവ് അസാധുവാണ്."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"സേവനം നെറ്റ്‌വർക്കിൽ സജീവമാക്കിയിട്ടില്ല"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"നെറ്റ്‌വർക്ക് പ്രശ്‌നം കാരണം അയ‌യ്‌ക്കാനായില്ല"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"സന്ദേശം കാലഹരണപ്പെട്ടു അല്ലെങ്കിൽ ലഭ്യമല്ല"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(വിഷയമൊന്നുമില്ല)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"അയച്ചയാൾ അജ്ഞാതനാണ്"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"ഡെലിവർ ചെയ്‌തു"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> എന്നയാളിൽ നിന്നുള്ള <xliff:g id="SUBJECT">%1$s</xliff:g> എന്ന സന്ദേശം ഡൗൺലോഡുചെയ്യാനായില്ല."</string>
-    <string name="low_memory" msgid="5300743415198486619">"മെമ്മറി കുറവായതിനാൽ ഡാറ്റാബേസ് പ്രവർത്തനം പൂർത്തിയാക്കാനായില്ല"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"സന്ദേശം അയച്ചില്ല"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"സന്ദേശമയയ്ക്കലിൽ ചില സന്ദേശങ്ങൾ അയച്ചിട്ടില്ല"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> സംഭാഷണങ്ങളിൽ <xliff:g id="MESSAGES_1">%d</xliff:g> സന്ദേശങ്ങൾ</item>
-      <item quantity="one">ഒരു സംഭാഷണത്തിൽ <xliff:g id="MESSAGES_0">%d</xliff:g> സന്ദേശങ്ങൾ</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"സന്ദേശം ഡൗൺലോഡുചെയ്‌തില്ല"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"സന്ദേശമയയ്ക്കലിൽ ചില സന്ദേശങ്ങൾ ഡൗൺലോഡ് ചെയ്തിട്ടില്ല"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> സംഭാഷണങ്ങളിൽ <xliff:g id="MESSAGES_1">%d</xliff:g> സന്ദേശങ്ങൾ</item>
-      <item quantity="one">ഒരു സംഭാഷണത്തിൽ <xliff:g id="MESSAGES_0">%d</xliff:g> സന്ദേശങ്ങൾ</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> എന്ന നമ്പറിലേക്ക് സന്ദേശം അയച്ചില്ല"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"അടിയന്തര സേവനങ്ങളിലേക്ക് വോയ്‌സ് കോൾ ചെയ്യുക. ഇപ്പോൾ നിങ്ങളുടെ ടെക്‌സ്‌റ്റ് സന്ദേശം <xliff:g id="NUMBER">%1$s</xliff:g> എന്ന നമ്പറിലേക്ക് കൈമാറാനായില്ല."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> പുതിയ സന്ദേശങ്ങൾ</item>
-      <item quantity="one">പുതിയ സന്ദേശം</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"ആരംഭിക്കുക"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"ക്യാമറ ലഭ്യമല്ല"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"ക്യാമറ ലഭ്യമല്ല"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"വീഡിയോ എടുക്കൽ ലഭ്യമല്ല"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"മീഡിയ സംരക്ഷിക്കാനാവില്ല"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"ചിത്രമെടുക്കാനാവില്ല"</string>
-    <string name="back" msgid="1477626055115561645">"മടങ്ങുക"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"ആർക്കൈവുചെയ്‌തവ"</string>
-    <string name="action_delete" msgid="4076795795307486019">"ഇല്ലാതാക്കുക"</string>
-    <string name="action_archive" msgid="5437034800324083170">"ആര്‍ക്കൈവുചെയ്യുക"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"ആർക്കൈവുചെയ്‌തത് മാറ്റുക"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"അറിയിപ്പുകൾ ഓഫാക്കുക"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"അറിയിപ്പുകൾ ഓണാക്കുക"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"കോൺടാക്റ്റ് ചേർക്കുക"</string>
-    <string name="action_download" msgid="7786338136368564146">"ഡൗൺലോഡ്"</string>
-    <string name="action_send" msgid="377635240181672039">"അയയ്‌ക്കുക"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"ഇല്ലാതാക്കുക"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"ഈ സന്ദേശം ഇല്ലാതാക്കണോ?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"ഈ പ്രവർത്തനം പഴയപടിയാക്കാനാകില്ല."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"ഇല്ലാതാക്കുക"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">ഈ സംഭാഷണങ്ങൾ ഇല്ലാതാക്കണോ?</item>
-      <item quantity="one">ഈ സംഭാഷണം ഇല്ലാതാക്കണോ?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"ഇല്ലാതാക്കുക"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"റദ്ദാക്കുക"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"സ്വീകര്‍ത്താവ്"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"ഒന്നിലധികം ചിത്രങ്ങൾ തിരഞ്ഞെടുക്കുക"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"തിരഞ്ഞെടുത്തവ സ്ഥിരീകരിക്കുക"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"<xliff:g id="COUNT">%d</xliff:g> എണ്ണം കൂടി"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ഓഡിയോ റെക്കോർഡ് ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ഓഡിയോ പ്ലേ ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ഓഡിയോ സംരക്ഷിക്കാനായില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"സ്‌പർശിച്ച് പിടിക്കുക"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"ചിത്രം"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ഓഡിയോ ക്ലിപ്പ്"</string>
-    <string name="notification_video" msgid="4331423498662606204">"വീഡിയോ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"കോൺടാക്‌റ്റ് കാർഡ്"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ഡൗൺലോഡുചെയ്യുക"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS വഴി മറുപടി നൽകുക"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS വഴി മറുപടി നൽകുക"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"മറുപടി നൽകുക"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> പങ്കെടുക്കുന്നവർ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> പങ്കെടുക്കുന്നയാൾ</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"ഞാന്‍"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"കോൺടാക്‌റ്റ് തടഞ്ഞ് ആർക്കൈവുചെയ്‌തു"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"കോൺടാക്റ്റിനെ തടഞ്ഞതും ആർക്കൈവ് ചെയ്‌തതും മാറ്റി"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> എണ്ണം ആർക്കൈവുചെ‌യ്‌തു"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> എണ്ണം ആർക്കൈവുചെയ്‌തത് മാറ്റി"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"അറിയിപ്പുകൾ ഓഫാക്കി"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"അറിയിപ്പുകൾ ഓണാക്കി"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"എല്ലാം സജ്ജീകരിച്ചു. വീണ്ടും അയയ്‌ക്കാൻ സ്‌‌‌പർശിക്കുക."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"സ്ഥിര SMS ആപ്പായി സന്ദേശമയയ്ക്കൽ സജ്ജീകരിച്ചു."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">അറ്റാച്ച്‌മെന്റുകൾ ഉപേക്ഷിക്കുക</item>
-      <item quantity="one">അറ്റാച്ച്‌മെന്റ് ഉപേക്ഷിക്കുക</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ഓഡിയോ അറ്റാച്ചുമെന്റ്"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ഓഡിയോ അറ്റാച്ചുമെന്റ് പ്ലേ ചെയ്യുക"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"താൽക്കാലികമായി നിർത്തുക"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> എന്നയാളിൽ നിന്നുള്ള സന്ദേശം : <xliff:g id="MESSAGE">%2$s</xliff:g> ."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> എന്നയാളിൽ നിന്നുള്ള സന്ദേശം പരാജയപ്പെട്ടു: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> എന്നയാളിൽ നിന്നുള്ള സന്ദേശം: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> എന്നതിലേക്ക് സന്ദേശം അയച്ചില്ല: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> എന്നതിലേക്ക് സന്ദേശം അയയ്‌ക്കുന്നു: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> എന്നതിലേക്കുള്ള സന്ദേശം പരാജയപ്പെട്ടു: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> എന്നതിലേക്കുള്ള സന്ദേശം: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> എന്നയാളിൽ നിന്നുള്ള സന്ദേശം പരാജയപ്പെട്ടു: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> എന്നയാളിൽ നിന്നുള്ള സന്ദേശം: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> എന്നതിലേക്ക് സന്ദേശം അയച്ചില്ല: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> എന്നതിലേക്ക് സന്ദേശം അയയ്‌ക്കുന്നു: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> എന്നതിലേക്കുള്ള സന്ദേശം പരാജയപ്പെട്ടു: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> എന്നതിലേക്കുള്ള സന്ദേശം: <xliff:g id="MESSAGE">%2$s</xliff:g>. സമയം: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"സന്ദേശം പരാജയപ്പെട്ടു. വീണ്ടും ശ്രമിക്കുന്നതിന് സ്‌പർശിക്കുക."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> എന്നിവരുമായുള്ള സംഭാഷണം"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"വിഷയം ഇല്ലാതാക്കുക"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"വീഡിയോ എടുക്കുക"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"ഒരു സ്റ്റിൽ ചിത്രം എടുക്കുക"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"ചിത്രം എടുക്കുക"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"വീഡിയോ റെക്കോർഡുചെയ്യാൻ ആരംഭിക്കുക"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"പൂർണ്ണസ്ക്രീൻ ക്യാമറയിലേക്ക് മാറുക"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"മുന്നിലെയും പിന്നിലെയും ക്യാമറയ്‌ക്കിടയിൽ മാറുക"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"റെക്കോർഡുചെയ്യൽ നിർത്തി, വീഡിയോ അറ്റാച്ചുചെയ്യുക"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"വീഡിയോ റെക്കോർഡുചെയ്യൽ നിർത്തുക"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"സന്ദേശമയയ്ക്കൽ ഫോട്ടോകൾ"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ഫോട്ടോകൾ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ഫോട്ടോ \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> വീഡിയോകൾ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> വീഡിയോ \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> അറ്റാച്ചുമെന്റുകൾ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> അറ്റാച്ച്‌മെന്റ് \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" ആൽബത്തിലേക്ക് സംരക്ഷിച്ചു</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> അറ്റാച്ചുമെന്റുകൾ \"ഡൗൺലോഡുകളി\"ലേക്ക് സംരക്ഷിച്ചു </item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> അറ്റാച്ചുമെന്റ് \"ഡൗൺലോഡുകളി\"ലേക്ക് സംരക്ഷിച്ചു</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> അറ്റാച്ച്‌മെന്റുകൾ സംരക്ഷിച്ചു</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> അറ്റാച്ച്‌മെന്റ് സംരക്ഷിച്ചു</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g>അറ്റാച്ച്‌മെന്റുകൾ സംരക്ഷിക്കാനായില്ല</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> അറ്റാച്ച്‌മെന്റ് സംരക്ഷിക്കാനായില്ല</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS അറ്റാച്ചുമെന്റ് സംരക്ഷിച്ചു"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"ക്രമീകരണങ്ങൾ"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"ആർക്കൈവുചെയ്‌തവ"</string>
-    <string name="action_close" msgid="1840519376200478419">"അടയ്‌ക്കുക"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"വിപുലം"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"ഡീബഗ്"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"അറിയിപ്പുകൾ"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ശബ്‌ദം"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"നിശബ്‌ദം"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"വൈബ്രേറ്റുചെയ്യുക"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"തടഞ്ഞിരിക്കുന്നു"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS ഡെലിവറി റിപ്പോർട്ടുകൾ"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"അയയ്‌ക്കുന്ന ഓരോ SMS-നും ഒരു ഡെലിവറി റിപ്പോർട്ട് അഭ്യർത്ഥിക്കുക"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"സ്വയമേവ വീണ്ടെടുക്കുക"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS സന്ദേശങ്ങൾ സ്വയമേവ ലഭ്യമാക്കുക"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"റോമിംഗിൽ ലഭ്യമാക്കുക"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"റോമിംഗിലായിരിക്കുമ്പോൾ സ്വയമേ MMS വീണ്ടെടുക്കുന്നു"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"ഗ്രൂപ്പ് സന്ദേശമയയ്‌ക്കൽ"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"ഒന്നിലധികം സ്വീകർത്താക്കൾ ഉള്ളപ്പോൾ ഒരൊറ്റ സന്ദേശം അയയ്‌ക്കാൻ MMS ഉപയോഗിക്കുക."</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"സ്ഥിര SMS അപ്ലിക്കേഷൻ"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"സ്ഥിര SMS അപ്ലിക്കേഷൻ"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"നിങ്ങളുടെ ഫോൺ നമ്പർ"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"അജ്ഞാതം"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"ഔട്ട്‌ഗോയിംഗ് സന്ദേശ ശബ്‌ദങ്ങൾ"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS നൽകുക"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"ബാഹ്യ സംഭരണ ഫയലിലേക്ക് സ്വീകരിച്ച SMS റോ ഡാറ്റ നൽകുക"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS നൽകുക"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"ബാഹ്യ സംഭരണ ഫയലിലേക്ക് സ്വീകരിച്ച MMS റോ ഡാറ്റ നൽകുക"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"വയർലെസ് അലേർട്ടുകൾ"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"സന്ദേശ ഓ‌പ്ഷനുകൾ"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"ടെക്‌‌സ്‌റ്റ് പകർത്തുക"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"വിശദാംശങ്ങൾ കാണുക"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"ഇല്ലാതാക്കുക"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"കൈമാറുക"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"സന്ദേശ വിശദാംശങ്ങൾ"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"തരം: "</string>
-    <string name="text_message" msgid="7415419755252205721">"ടെക്‌സ്റ്റ് സന്ദേശം"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"മൾട്ടിമീഡിയ സന്ദേശം"</string>
-    <string name="from_label" msgid="1947831848146564875">"അയച്ചയാൾ: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"സ്വീകർത്താവ്: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"അയച്ചത്: "</string>
-    <string name="received_label" msgid="4442494712757995203">"ലഭിച്ചവ: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"വിഷയം: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"വലുപ്പം: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"പ്രധാനപ്പെട്ടവ: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"ഉയർന്നത്"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"സാധാരണ"</string>
-    <string name="priority_low" msgid="7398724779026801851">"കുറഞ്ഞവ"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"അയച്ചയാളിന്റെ വിലാസം മറച്ചിരിക്കുന്നു"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"അറ്റാച്ചുമെന്റുകൾ ലോഡുചെയ്യുന്ന സമയത്ത് സന്ദേശം അയയ്‌ക്കാനാവില്ല."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"അറ്റാച്ചുമെന്റ് ലോഡുചെയ്യാനാവില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"നെറ്റ്‌വർക്ക് തയ്യാറായില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"ടെക്‌സ്റ്റ് ഇല്ലാതാക്കുക"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"ടെക്സ്റ്റും നമ്പറുകളും നൽകുന്നതിനിടയിൽ മാറുക"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"കൂടുതൽ പങ്കാളികളെ ചേർക്കുക"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"പങ്കെടുക്കുന്നവരെ സ്ഥിരീകരിക്കുക"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"പുതിയ സംഭാഷണം ആരംഭിക്കുക"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"ഈ ഇനം തിരഞ്ഞെടുക്കുക"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"വീഡിയോ പ്ലേചെയ്യുക"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"ആളുകളും ഓപ്‌ഷനുകളും"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"ഡീബഗ്"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"ആളുകളും ഓപ്‌ഷനുകളും"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"പൊതുവായത്"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"ഈ സംഭാഷണത്തിലെ ആളുകൾ"</string>
-    <string name="action_call" msgid="6596167921517350362">"ഒരു കോൾ ചെയ്യുക"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"സന്ദേശം അയയ്ക്കുക"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g> -ൽ നിന്ന്&lt;/small&gt; സന്ദേശമയയ്‌ക്കുക"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">ഫോട്ടോകൾ അയയ്‌ക്കുക</item>
-      <item quantity="one">ഫോട്ടോ അയയ്ക്കുക</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">ഓഡിയോകൾ അയയ്‌ക്കുക</item>
-      <item quantity="one">ഓഡിയോ അയയ്ക്കുക</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">വീഡിയോകൾ അയയ്‌ക്കുക</item>
-      <item quantity="one">വീഡിയോ അയയ്‌ക്കുക</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">കോൺടാക്റ്റ് കാർഡുകൾ അയയ്‌ക്കുക</item>
-      <item quantity="one">കോൺടാക്റ്റ് കാർഡ് അയയ്ക്കുക</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">അറ്റാച്ച്‌മെന്റുകൾ അയയ്ക്കുക</item>
-      <item quantity="one">അറ്റാച്ച്‌മെന്റ് അയയ്ക്കുക</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> അറ്റാച്ച്‌മെന്റുകൾ അയയ്‌ക്കാൻ തയ്യാറാണ്</item>
-      <item quantity="one">ഒരു അറ്റാച്ച്‌മെന്റ് അയയ്‌ക്കാൻ തയ്യാറാണ്</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"ഫീഡ്‍ബാക്ക് അയയ്ക്കുക"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Store-ൽ കാണുക"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"പതിപ്പ് വിവരം"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"പതിപ്പ് %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"ഓപ്പൺ സോഴ്‌സ് ലൈസൻസുകൾ"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"അറിയിപ്പുകൾ"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"അറ്റാച്ചുമെന്റ് പരിധിയെത്തി"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"അറ്റാച്ചുമെന്റ് ലോഡുചെയ്യുന്നത് പരാജയപ്പെട്ടു."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"കോൺടാക്റ്റിലേക്ക് ചേർക്കണോ?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"കോൺടാക്‌റ്റ് ചേർക്കുക"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"വിഷയം"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"വിഷയം: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"കോൺടാക്‌റ്റ് കാർഡ് ലോഡുചെയ്യുന്നു"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"കോൺടാക്‌റ്റ് കാർഡ് ലോഡുചെയ്യാനായില്ല"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"കോൺടാക്റ്റ് കാർഡ് കാണുക"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> കോൺടാക്റ്റുകൾ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> കോൺടാക്റ്റ്</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"കോൺ‌ടാക്‌റ്റ് കാർഡുകൾ"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"ജന്മദിനം"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"കുറിപ്പുകള്‍"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"സന്ദേശം കൈമാറൽ"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"മറുപടി നൽകുക"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1 ചെയ്യുക"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"അയയ്ക്കുന്നതിന്, സ്ഥിര SMS ആപ്പ് ആയി സന്ദേശമയയ്ക്കൽ സജ്ജമാക്കുക"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"സ്ഥിര SMS ആപ്പ് ആയി സന്ദേശമയയ്ക്കൽ സജ്ജമാക്കുക"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"മാറ്റുക"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"സന്ദേശങ്ങൾ സ്വീകരിക്കുന്നതിന്, സ്ഥിര SMS ആപ്പ് ആയി സന്ദേശമയയ്ക്കൽ സജ്ജമാക്കുക"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS സന്ദേശങ്ങൾ അയയ്‌ക്കാൻ പ്രസ്താവിത SIM ഒന്നും തിരഞ്ഞെടുത്തിട്ടില്ല"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"ഉപകരണത്തിന്റെ ഉടമ ഈ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നില്ല."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ശരി"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"ഒരു സംഭാഷണത്തിൽ നിരവധി പേർ പങ്കെടുക്കുന്നു"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">അസാധുവായ കോൺടാക്റ്റുകൾ</item>
-      <item quantity="one">അസാധുവായ കോൺടാക്‌റ്റ്</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"ക്യാമറ ചിത്രം ലോഡുചെയ്യാനായില്ല"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"നിങ്ങൾ: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"ഡ്രാഫ്റ്റ്"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"ഒരു പുതിയ സംഭാഷണം ആരംഭിക്കുമ്പോൾ, ഇത് ഇവിടെ ലിസ്‌റ്റുചെയ്‌തിരിക്കുന്നത് നിങ്ങൾ കാണും"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"ആർക്കൈവുചെയ്‌ത സംഭാഷണങ്ങൾ ഇവിടെ ദൃശ്യമാകും"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"സംഭാഷണങ്ങൾ ലോഡുചെയ്യുന്നു…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"ചിത്രം"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ഓഡിയോ ക്ലിപ്പ്"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"വീഡിയോ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"കോൺടാക്‌റ്റ് കാർഡ്"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"പഴയപടിയാക്കുക"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"വീണ്ടും ശ്രമിക്കുക"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"ഒരു പുതിയ സന്ദേശം ആരംഭിക്കാൻ കോൺടാക്‌റ്റ് പേരോ ഫോൺ നമ്പറോ നൽകുക"</string>
-    <string name="action_block" msgid="9032076625645190136">"തടയുക"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> എന്നയാളെ തടയുക"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> എന്നയാളെ തടഞ്ഞത് മാറ്റുക"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> തടയണോ?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"ഈ നമ്പറിൽ നിന്ന് സന്ദേശങ്ങൾ തുടർന്നും ലഭിക്കുമെങ്കിലും ഇനി അറിയിപ്പൊന്നും ലഭിക്കില്ല. ഈ സംഭാഷണം ആർക്കൈവുചെയ്യും."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"തടഞ്ഞ കോൺടാക്‌റ്റുകൾ"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"തടഞ്ഞത് മാറ്റുക"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"തടഞ്ഞ കോൺടാക്‌റ്റുകൾ"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"പ്രമാണ ലൈബ്രറിയിൽ നിന്ന് ചിത്രം തിരഞ്ഞെടുക്കുക"</string>
-    <string name="sending_message" msgid="6363584950085384929">"സന്ദേശം അയക്കുന്നു"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"സന്ദേശം അയച്ചു"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"സെല്ലുലാർ ഡാറ്റ ഓഫാക്കിയിരിക്കുന്നു. നിങ്ങളുടെ ക്രമീകരണങ്ങൾ പരിശോധിക്കുക."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"വിമാന മോഡിൽ സന്ദേശങ്ങൾ അയയ്‌ക്കാനാവില്ല"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"സന്ദേശം അയയ്ക്കാനായില്ല"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"സന്ദേശം ഡൗൺലോഡുചെയ്‌തു"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"സെല്ലുലാർ ഡാറ്റ ഓഫാണ്. നിങ്ങളുടെ ക്രമീകരണം പരിശോധിക്കുക."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"വിമാന മോഡിൽ സന്ദേശങ്ങൾ ഡൗൺലോഡുചെയ്യാനാവില്ല"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"സന്ദേശം ഡൗൺലോഡുചെയ്യാനായില്ല"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"പൂജ്യം"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"ഒന്ന്"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"രണ്ട്"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"മൂന്ന്"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"നാല്"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"അഞ്ച്"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ആറ്"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"ഏഴ്"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"എട്ട്"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"ഒൻപത്"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> എന്നതിലൂടെ സന്ദേശമയയ്‌ക്കാനായില്ല, പിശക് <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"അജ്ഞാത കാരിയറിലൂടെ സന്ദേശമയയ്‌ക്കാനായില്ല, പിശക് <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"കൈമാറിയത്: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"സന്ദേശം അയച്ചില്ല: നെറ്റ്‌വർക്കിൽ സേവനം സജീവമാക്കിയിട്ടില്ല"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"സന്ദേശം അയച്ചില്ല: ലക്ഷ്യസ്ഥാന വിലാസം അസാധുവാണ്"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"സന്ദേശം അയച്ചില്ല: സന്ദേശം അസാധുവാണ്"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"സന്ദേശം അയച്ചില്ല: ഉള്ളടക്കം പിന്തുണയ്ക്കാത്തതാണ്"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"സന്ദേശം അയച്ചില്ല: സന്ദേശം പിന്തുണയ്ക്കാത്തതാണ്"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"സന്ദേശം അയച്ചില്ല: വളരെ വലുതാണ്"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"പുതിയ സന്ദേശം"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"കാണുക"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"ചിത്രം"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"അനുയോജ്യമായൊരു അപ്ലിക്കേഷൻ കണ്ടെത്താനായില്ല"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"സ്വീകർത്താവിനെ നീക്കംചെയ്യുക"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"പുതിയ സന്ദേശം"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"റദ്ദാക്കുക"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"ആക്‌സസ്സ്‌പോയിന്റ് എഡിറ്റുചെയ്യൂ"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"സജ്ജീകരിച്ചിട്ടില്ല"</string>
-    <string name="apn_name" msgid="1572691851070894985">"പേര്"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS പ്രോക്‌സി"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS പോർട്ട്"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN തരം"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN ഇല്ലാതാക്കുക"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"പുതിയ APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"സംരക്ഷിക്കുക"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"നിരസിക്കുക"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"പേരിന്റെ ഫീൽഡ് ശൂന്യമായിരിക്കരുത്."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN ശൂന്യമായിരിക്കരുത്."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC ഫീൽഡിൽ 3 സംഖ്യകൾ ഉണ്ടായിരിക്കണം."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC ഫീൽഡിൽ 2 അല്ലെങ്കിൽ 3 സംഖ്യകൾ ഉണ്ടായിരിക്കണം."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"സ്ഥിര APN ക്രമീകരണങ്ങൾ പുനഃസ്ഥാപിക്കുന്നു"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"സ്ഥിരമായതിലേക്ക് പുനഃസജ്ജമാക്കുക"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"സ്ഥിര APN ക്രമീകരണങ്ങൾ പുനഃസജ്ജീകരിക്കൽ പൂർത്തിയാക്കി."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"പേരില്ലാത്തത്"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ആക്‌സസ്സ് പോയിന്റ് പേരുകൾ"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-കൾ"</string>
-    <string name="menu_new" msgid="8286285392706532511">"പുതിയ APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"ആക്‌സസ്സ് പോയിന്റ് നെയിം ക്രമീകരണങ്ങൾ ഈ ഉപയോക്താവിനായി ലഭ്യമല്ല"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"ക്ലിപ്പ്‌ബോർഡിലേക്ക് പകർത്തണോ?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"പകര്‍ത്തുക"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> എന്നതിലേക്ക്"</string>
-    <string name="general_settings" msgid="5409336577057897710">"പൊതുവായത്"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"വിപുലമായത്"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"പൊതു ക്രമീകരണങ്ങൾ"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"വിപുലമായ ക്രമീകരണങ്ങൾ"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"എല്ലാ സ്വീകർത്താക്കൾക്കും വെവ്വേറെ SMS സന്ദേശങ്ങൾ അയയ്‌ക്കുക. മറുപടികളെല്ലാം നിങ്ങൾക്കുമാത്രമേ ലഭിക്കൂ"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"എല്ലാ സ്വീകർത്താക്കൾക്കും ഒരൊറ്റ MMS അയയ്‌ക്കുക"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"അജ്ഞാത നമ്പര്‍"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"പുതിയ സന്ദേശം"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"പുതിയ സന്ദേശം."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM സെലക്‌ടർ"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> തിരഞ്ഞെടുത്തു, SIM സെലക്‌ടർ"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"വിഷയം എഡിറ്റുചെയ്യുക"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM തിരഞ്ഞെടുക്കുക അല്ലെങ്കിൽ വിഷയം എഡിറ്റുചെയ്യുക"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ഓഡിയോ റെക്കോർഡുചെയ്യാൻ സ്‌പർശിച്ച് പിടിക്കുക"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"പുതിയ സംഭാഷണം ആരംഭിക്കുക"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"സന്ദേശമയയ്‌ക്കൽ"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"സന്ദേശമയയ്ക്കൽ ലിസ്റ്റ്"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"സന്ദേശമയയ്‌ക്കൽ"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"പുതിയ സന്ദേശം"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"സംഭാഷണ ലിസ്റ്റ്"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"സംഭാഷണങ്ങൾ ലോഡുചെയ്യുന്നു"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"സന്ദേശങ്ങൾ ലോഡുചെയ്യുന്നു"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"കൂടുതൽ സംഭാഷണങ്ങൾ കാണുക"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"കൂടുതൽ സന്ദേശങ്ങൾ കാണുക"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"സംഭാഷണം ഇല്ലാതാക്കി"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"സംഭാഷണം ഇല്ലാതാക്കി. മറ്റൊരു സന്ദേശമയയ്ക്കൽ സംഭാഷണം കാണിക്കുന്നതിന് സ്പർശിക്കുക"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"തടഞ്ഞു"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"തടഞ്ഞത് മാറ്റി"</string>
-    <string name="db_full" msgid="8459265782521418031">"സംഭരണത്തിനുള്ള ഇടം കുറവാണ്. ചില വിവരം നഷ്‌ടപ്പെട്ടേക്കാം."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"അറ്റാച്ചുമെന്റുകൾ തിരഞ്ഞെടുക്കുക"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"തിരഞ്ഞെടുത്തവ സ്ഥിരീകരിക്കുക"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> എണ്ണം തിരഞ്ഞെടുത്തു"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"ഒന്നോ അതിൽ കൂടുതലോ അറ്റാച്ചുമെന്റുകൾ നീക്കംചെയ്‌തുകൊണ്ട് വീണ്ടും ശ്രമിക്കുക."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"നിങ്ങളുടെ സന്ദേശം അയയ്‌ക്കാൻ ശ്രമിക്കാമെങ്കിലും ഒന്നോ അതിലധികമോ അറ്റാച്ചുമെന്റുകൾ നീക്കംചെയ്യാതെ അത് ഡെലിവർ ചെയ്തേക്കില്ല."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"നിങ്ങൾക്ക് ഒരു സന്ദേശത്തിന് ഒരു വീഡിയോ മാത്രമേ അയയ്‌ക്കാനാകൂ. കൂടുതൽ വീഡിയോകൾ നീക്കംചെയ്‌ത് വീണ്ടും ശ്രമിക്കുക."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"അറ്റാച്ച്മെന്റ് ലോഡുചെയ്യുന്നതിൽ സന്ദേശമയയ്‌ക്കൽ പരാജയപ്പെട്ടു."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"ഏതുവിധേനയും അയയ്‌ക്കുക"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"സംഭാഷണം ആരംഭിക്കാനായില്ല"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"തിരഞ്ഞെടുത്തത്, <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-mn/arrays.xml b/res/values-mn/arrays.xml
deleted file mode 100644
index b47063a..0000000
--- a/res/values-mn/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"гарчиггүй"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Тийм"</item>
-    <item msgid="6049132459802288033">"Үгүй"</item>
-    <item msgid="3084376867445867895">"Тийм"</item>
-    <item msgid="3155097332660174689">"Хэхэ"</item>
-    <item msgid="2611328818571146775">"Баярлалаа"</item>
-    <item msgid="4881335087096496747">"Би зөвшөөрч байна"</item>
-    <item msgid="2422296858597420738">"Янзтай"</item>
-    <item msgid="4805581752819452687">"Очиж байна"</item>
-    <item msgid="4746700499431366214">"За, би эргээд холбоо баръя"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
deleted file mode 100644
index f3edd91..0000000
--- a/res/values-mn/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Зурвас"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Зурвас"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Харилцааг сонгох"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Тохиргоо"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Зурвас Илгээх"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Хавсралт нэмэх"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Тусламж"</string>
-    <string name="welcome" msgid="2857560951820802321">"Тавтай морилно уу"</string>
-    <string name="skip" msgid="7238879696319945853">"Алгасах"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Дараах &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Дараах"</string>
-    <string name="exit" msgid="1905187380359981199">"Гарах"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Тохиргоо &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Тохиргоо"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Messaging-д SMS, Утас, Харилцагч хаягийн зөвшөөрөл шаардлагатай."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Та зөвшөөрлийг Тохиргоо &gt; Aпп &gt; Зурвас &gt; Зөвшөөрөл хэсэгт өөрчилж болно."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Та зөвшөөрлийг Тохиргоо, Апп, Messaging, Зөвшөөрөл хэсэгт өөрчилж болно."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"БАЙНГЫН ХАРИЛЦАГЧ"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Бүх харилцагч"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> руу илгээх"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Зураг буюу видео авах"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Энэ төхөөрөмжөөс зураг сонгоно уу"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Аудио бичих"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Зураг сонгох"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Медиаг сонгосон байна."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Медиаг сонгоогүй байна."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> сонгогдсон"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"зураг <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"зураг"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Аудио бичих"</string>
-    <string name="action_share" msgid="2143483844803153871">"Хуваалцах"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Дөнгөж сая"</string>
-    <string name="posted_now" msgid="867560789350406701">"Одоо"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> минут</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> минут</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> цаг</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> цаг</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> өдөр</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> өдөр</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> долоо хоног</item>
-      <item quantity="one"> долоо хоног</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> сар</item>
-      <item quantity="one"> нэг сар</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> жил</item>
-      <item quantity="one"> нэг жил</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Ангилал 0 зурвас"</string>
-    <string name="save" msgid="5081141452059463572">"Хадгалах"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Төхөөрөмжийн багтаамж бага байна. Messaging нь багтаамж үүсгэхийн тулд хуучин зурвасыг автоматаар устгана."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Сангийн хэмжээ дутагдаж байна"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Мessaging нь таны төхөөрөмжид хангалттай багтаамж гарах хүртэл зурвас илгээх эсвэл хүлээн авах боломжгүй."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS сан бага байна. Та зурвасуудаас устгах шаардлагатай бололтой."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Утасны дугаараа баталгаажуулна уу"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Нэг удаагийн алхам нь Messaging-г таны бүлэг зурвасыг асуудалгүйгээр илгээнэ."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Утасны дугаар"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Медиатай бүх зурвасуудыг устгах"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g>-с өмнөх зурвасуудыг устгах"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g>-с өмнөх зурвасуудыг автоматаар устгах"</string>
-    <string name="ignore" msgid="7063392681130898793">"Үл тоох"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Медиа бүхий бүх зурвасыг устгах уу?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g>-с өмнөх зурвасуудыг устгах уу?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g>-с өмнөх зурвасуудыг устгаж, автомат устгалтыг асаах уу?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> гэж хэлсэн"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Та хэлсэн байна"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g>-ээс ирсэн мессеж"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Та мессеж илгээсэн байна"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Илгээж байна ..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Илгээгээгүй. Дахин оролдохын тулд хүрнэ үү."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Илгээгээгүй. Дахин оролдож байна…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Дахин илгээх буюу устгах"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Яаралтай түргэн тусламж руу залгана уу. Таны мессежийг яг одоо явуулах боломжгүй байна."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Амжилтгүй"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Татаж авах шинэ MMS мессеж"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Шинэ MMS мессеж"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Татан авч чадсангүй"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Дахин оролдохын тулд хүрнэ үү"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Татаж авахын тулд хүрнэ үү"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Татаж авах буюу устгах"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Татаж авч байна..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Зурвасын хугацаа өнгөрсөн буюу байхгүй"</string>
-    <string name="mms_info" msgid="3402311750134118165">"хэмжээ: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, хугацаа дуусах: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Илгээх боломжгүй. Хүлээн авагч буруу."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Сүлжээнд үйлчилгээг идэвхжүүлээгүй байна."</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Сүлжээний асуудлаас шалтгаалан илгээж чадсангүй."</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Зурвасын хугацаа өнгөрсөн буюу байхгүй"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Гарчиггүй)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Тодорхойгүй илгээгч"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Хүргэгдсэн"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g>-с <xliff:g id="SUBJECT">%1$s</xliff:g> зурвасыг татаж чадсангүй."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Санах ой бага байгаагаас шалтгаалан датабаазын үйлдлийг гүйцээж чадсангүй"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Зурвас илгээгдээгүй"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Messaging-н зарим зурвасыг илгээгээгүй"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"> <xliff:g id="CONVERSATIONS">%d</xliff:g> Харилцан ярианд <xliff:g id="MESSAGES_1">%d</xliff:g> зурвас байна</item>
-      <item quantity="one"> Нэг харилцан ярианд <xliff:g id="MESSAGES_0">%d</xliff:g> зурвас байна</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"зурвасыг татаж болсонгүй"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Зарим зурвасыг Messaging-д татаагүй"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"> <xliff:g id="CONVERSATIONS">%d</xliff:g> Харилцан ярианд <xliff:g id="MESSAGES_1">%d</xliff:g> зурвас байна</item>
-      <item quantity="one"> Нэг харилцан ярианд <xliff:g id="MESSAGES_0">%d</xliff:g> зурвас байна</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> явуулсан мессеж амжилтгүй болсон байна"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Яаралтай түргэн тусламж руу залгана уу. Таны мессежийг <xliff:g id="NUMBER">%1$s</xliff:g> дугаарт яг одоо явуулах боломжгүй байна. "</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> шинэ зурвас</item>
-      <item quantity="one">Шинэ зурвас</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Эхлэх"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Камер ашиглах боломжгүй"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Камер ашиглах боломжгүй"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Видео бичих боломжгүй"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Медиаг хадгалах боломжгүй"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Зураг авч болохгүй байна"</string>
-    <string name="back" msgid="1477626055115561645">"Буцах"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Архивлагдсан"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Устгах"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Архивлах"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Архиваас гаргах"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Мэдэгдэл унтраах"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Мэдэгдлүүдийг асаах"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Харилцагч нэмэх"</string>
-    <string name="action_download" msgid="7786338136368564146">"Татаж авах"</string>
-    <string name="action_send" msgid="377635240181672039">"Илгээх"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Устгах"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Энэ зурвасыг устгах уу?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Энэ үйлдлийг буцаах боломжгүй."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Устгах"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Эдгээр харилцан яриаг устгах уу?</item>
-      <item quantity="one">Энэ харилцан яриаг устах уу?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Устгах"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Цуцлах"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Хэнд"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Олон зураг сонгох"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Сонголтыг баталгаажуулах"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Аудиог бичих боломжгүй. Дахин оролдоно уу."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Аудиог тоглуулах боломжгүй. Дахин оролдоно уу."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Аудиог хадгалж чадсангүй. Дахин оролдоно уу."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Хүрээд &amp; барих"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Зураг"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Аудио клип"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Видео"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Харилцагчийн карт"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Татаж авах"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS-р хариулах"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS-ээр хариулах"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Хариулах"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> оролцогч</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> оролцогч</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Би"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Харилцагчийг хориглож &amp; архивласан"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Харилцаа холбоог хориглоогүй &amp; архивлагдаагүй"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> aрхивлагдсан"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> архивлагдаагүй"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Мэдэгдлүүдийг унтраасан"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Мэдэгдлүүдийг асаасан"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Бүгдийг нь тохируулсан. Илгээх-д дахин хүрнэ үү."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Мessaging-г SMS-н үндсэн апп-аар амжилттай тохирууллаа."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Хавсралтыг цуцлах</item>
-      <item quantity="one">Хавсралтыг цуцлах</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Аудио хавсралт"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Аудио хавсралтыг тоглуулах"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Түр зогсоох"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>-аас ирсэн зурвас."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g>-с илгээсэн амжилтгүй болсон мессеж: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g>-с илгээсэн мессеж: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g>-д илгээгээгүй байгаа мессеж: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g>-д мессеж илгээж байна: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g>-д илгээсэн амжилтгүй болсон мессеж: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g>-д мессеж илгээх: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g>-с илгээсэн амжилтгүй болсон мессеж: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g>-с илгээсэн мессеж: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g>-т зориулсан илгээгээгүй байгаа мессеж: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g>-т мессеж илгээж байна: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g>-т зориулсан амжилтгүй болсон мессеж: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g>-т илгээх мессеж: <xliff:g id="MESSAGE">%2$s</xliff:g>. Цаг: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Амжилтгүй болсон мессеж. Дахин оролдоно уу."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> нартай холбоо тогтоох"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Гарчгийг устгах"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Видео авах"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Хөдөлгөөнгүй зураг авах"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Зураг авах"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Видео бичлэг хийж эхлэх"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Бүтэн дэлгэцийн камер руу сэлгэх"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Урд болон хойд камер хооронд сэлгэх"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Бичлэгийг зогсоож видеог хавсаргах"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Видео бичилтийг зогсоох"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Messaging-н зураг"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> зургийг \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" цомогт хадгаллаа</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> зургийг \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" цомогт хадгаллаа</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> бичлэгийг \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" цомогт хадгаллаа</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> бичлэгийг \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" цомогт хадгаллаа</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> хавсралтыг \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" цомогт хадгаллаа</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> хавсралтыг \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" цомогт хадгаллаа</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> хавсралтыг \"Татаж авсан файл\"-д хадгаллаа</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> хавсралтыг \"Татаж aвсан файл\"-д хадгаллаа</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> хавсралт хадгалсан</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> хавсралт хадгалсан</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> хавсралтыг хадгалж чадсангүй</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> хавсралтыг хадгалж чадсангүй</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS хавсралтыг хадгалсан"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Тохиргоо"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Архивлагдсан"</string>
-    <string name="action_close" msgid="1840519376200478419">"Хаах"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Дэлгэрэнгүй"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Дебаг"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Мэдэгдэл"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Дуу"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Чимээгүй"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Чичиргээ"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Хориглогдсон"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS хүргэлтийн репорт"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Өөрийн илгээх SMS бүрт хүргэлтийн репорт хүснэ үү"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Автомат-татагч"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS зурвасуудыг автоматаар татах"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Роумингын автомат-татагч"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Роуминг ашиглаж байх үедээ MMS-ийг автоматаар сэргээж авч байх"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Бүлгэмийн зурвас"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Олон хүлээн авагчид нэг зурвас явуулахдаа MMS ашиглаарай"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Үндсэн SMS програм"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Үндсэн SMS програм"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Таны утасны дугаар"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Тодорхойгүй"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Мессеж илгээх үеийн ая"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS хадгалах"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Хүлээн авсан SMS түүхий датаг гадаад сангийн файлд хадгалах"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS хадгалах"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Dump Хүлээн авсан MMS түүхий датаг гадаад сангийн файлд хадгалах"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Утасгүй сэрэмжлүүлэг"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Зурвасын тохиргоо"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Текстийг хуулах"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Дэлгэрэнгүй үзэх"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Устгах"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Дамжуулах"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Зурвасын мэдээлэл"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Төрөл: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Текст зурвас"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Мультимедиа зурвас"</string>
-    <string name="from_label" msgid="1947831848146564875">"Хэнээс: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Хэнд: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Илгээсэн: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Хүлээн авсан: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Гарчиг: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Хэмжээ: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Ач холбогдол: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Өндөр"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Энгийн"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Бага"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Илгээгчийн хаяг нууцлагдсан"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Хавсралтуудыг ачаалах үед зурвас илгээх боломжгүй."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Хавсралтыг ачаалж чадсангүй. Дахин оролдоно уу."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Сүлжээ бэлэн биш байна. Дахин оролдоно уу."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Текстийг устгах"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Текст болон тоо оруулах хооронд сэлгэх"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Өөр оролцогчид нэмэх"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Оролцогчдыг баталгаажуулах"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Шинээр харилцан яриа үүсгэж байна"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Энэ зүйлийг сонгох"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Видео тоглуулах"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Хүмүүс &amp; тохируулга"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Дебаг"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Хүмүүс &amp; тохируулга"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Ерөнхий"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Энэ харилцаан доторх хүмүүс"</string>
-    <string name="action_call" msgid="6596167921517350362">"Дуудлага хийх"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Зурвас илгээх"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Зурвас илгээх&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g>-с&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Зураг илгээх</item>
-      <item quantity="one">Зураг илгээх</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Аудио илгээх</item>
-      <item quantity="one">Аудио илгээх</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Видео илгээх</item>
-      <item quantity="one">Видео илгээх</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Харилцагчийн карт илгээх</item>
-      <item quantity="one">Харилцагчийн карт илгээх</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Хавсралт илгээх</item>
-      <item quantity="one">Хавсралт илгээх</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other">Илгээхэд бэлэн <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> хавсралт байна</item>
-      <item quantity="one">Илгээхэд бэлэн нэг хавсралт байна</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Санал хүсэлт илгээх"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play дэлгүүр дээр харах"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Хувилбарын мэдээлэл"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Хувилбар %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Нээлттэй эхийн лиценз"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Мэдэгдэл"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Хавсралтын дээд хэмжээнд хүрсэн байна"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Хавсралтыг татаж авах үйлдэл амжилтгүй болсон байна."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Харилцагчидад нэмэх үү?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Харилцагч нэмэх"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Гарчиг"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Гарчиг: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Харилцагчийн картыг ачаалж байна"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Харилцагчийн картыг дуудаж чадсангүй"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Харилцагчийн картыг харах"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> харилцагч</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> харилцагч</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Харилцагчийн картууд"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Төрсөн өдөр"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Тэмдэглэл"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Зурвасыг дамжуулах"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Хариулах"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS идэвхгүй"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Илгээхийн тулд Messaging-г үндсэн SMS апп болго"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Messaging-г үндсэн SMS апп болгох"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Солих"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Зурвас хүлээн авахын тулд Messaging-г үндсэн SMS апп-аар тохируулаарай"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS зурвас илгээхээр сонгосон ямар ч SIM алга байна"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Энэ апп-г төхөөрөмжийн эзэмшигч зөвшөөрөөгүй."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ТИЙМ"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Харилцаанд хэт олон оролцогч байна"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Харилцагчийн хаяг буруу байна</item>
-      <item quantity="one">Харилцагчийн хаяг буруу байна</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Камерийн дүрсийг дуудаж чадсангүй"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Та: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Ноорог"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Шинэ харилцаа эхлүүлмэгц энэ жагсаалтад харагдах болно"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Архивлагдсан харилцаанууд энд харагдана"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Харилцааг ачаалж байна..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Зураг"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Аудио клип"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Видео"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Харилцагчийн карт"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Буцаах"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Дахин оролдох"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Шинэ зурвас эхлүүлэхийн тулд харилцагчийн нэр буюу утасны дугаар оруулна уу"</string>
-    <string name="action_block" msgid="9032076625645190136">"Хориглох"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g>-г хориглох"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g>-н хориг авах"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g>-г хориглох уу?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Та энэ дугаараас үргэлжлүүлэн зурвас хүлээн авах боловч мэдэгдэл авахгүй. Энэ харилцааг архивлах болно."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Хориглогдсон харилцагчид"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ХОРИГ АВАХ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Хориглогдсон харилцагчид"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Документ сангаас зураг сонгох"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Зурвасыг илгээж байна"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Зурвас илгээгдсэн"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Үүрэн дата унтарсан. Тохиргоог шалгана уу."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Нислэгийн горимд зурвас илгээх боломжгүй"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Зурвасыг илгээж чадсангүй."</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Зурвасыг татаж авсан"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Гар утасны интернет холболт идэвхгүй байна. Тохиргоог дахин шалгана уу."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Airplane mode дээр тавьсан байгаа тул мэдээллийг татаж авах боломжгүй байна"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Мэдээллийг татаж авах боломжгүй байна"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Тэг"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Нэг"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Хоёр"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Гурав"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Дөрөв"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Тав"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Зургаа"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Долоо"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Найм"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Ес"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="ERRORCODE">%2$d</xliff:g> алдаа бүхий <xliff:g id="CARRIERNAME">%1$s</xliff:g> мессежийг илгээх боломжгүй"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Үл мэдэгдэх зөөвөрлөгчөөр ирсэн мессежийг илгээх боломжгүй, алдаа <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Зурвас илгээгдээгүй: үйлчилгээ сүлжээн дээр идэвхжээгүй"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Зурвас илгээгдээгүй: чиглэлийн хаяг буруу"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Зурвас илгээгдээгүй: хүчингүй зурвас"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Зурвас илгээгдээгүй: дэмжигдээгүй контент"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Зурвас илгээгдээгүй: дэмжигдээгүй зурвас"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Мессежийг илгээж болохгүй байна: хэтэрхий их хэмжээтэй байна"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Шинэ зурвас"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Харагдац"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Зураг"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Тохирох аппликешныг олж чадсангүй"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Хүлээн авагчийг арилгах"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Шинэ зурвас"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Цуцлах"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Хандалтын цэгийг засах"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Тохируулаагүй"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Нэр"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS прокси"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS порт"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN төрөл"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN устгах"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Шинэ APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Хадгалах"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Устгах"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Нэр оруулах талбар хоосон байж болохгүй."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN хоосон байж болохгүй."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC талбар 3 цифртэй байх ёстой."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC талбар 2 буюу 3 цифртэй байх ёстой."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Үндсэн APN тохиргоог сэргээж байна"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Үндсэн рүү сэргээх"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Үндсэн APN тохиргоог дахин шинэчилж дууслаа."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Гарчиггүй"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Хандалтын Цэгийн Нэрс"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Шинэ APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Энэ хэрэглэгчийн хувьд Хандалтын цэгийн нэрийн тохиргоог ашиглах боломжгүй"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Санах ойд хуулах уу?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Хуулах"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> руу"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Ерөнхий"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Дэлгэрэнгүй"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Ерөнхий тохиргоо"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Дэлгэрэнгүй тохиргоо"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\" <xliff:g id="SIM_NAME">%s</xliff:g> \"SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Бүх хүлээн авагч руу хувийн SMS мессеж илгээх. Зөвхөн та ямар ч хариу авахгүй"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Бүх хүлээн авагч руу нэг MMS илгээх"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Тодорхойгүй дугаар"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Шинэ зурвас"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Шинэ зурвас."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM сонгогч"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> сонгосон, СИМ сонгогч"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Гарчигийг засах"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM-г сонгох эсвэл гарчигийг засах"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Дуут бичлэг хийхийн тулд холбогдох хэсэгт даран түр хүлээнэ үү"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Шинээр харилцан яриа үүсгэх"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Messaging"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Messaging-н жагсаалт"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Messaging"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Шинэ мэдээлэл"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Харилцааны жагсаалт"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Харилцан солилцсон мэдээллийг ачаалж байна"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Зурвасуудыг дуудаж байна"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Харилцан яриаг дэлгэрэнгүй харах"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Илүү олон зурвасуудыг харах"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Харилцаа холбоог устгасан байна"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Харилцан яриа устсан. Messaging-н өөр харилцан яриа харуулахын тулд хүрнэ үү"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Блоклосон байна"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Блокыг арилгасан байна"</string>
-    <string name="db_full" msgid="8459265782521418031">"Таны мэдээлэл хадгалах зай хангалтгүй байна. Зарим мэдээлэл алдагдах магадлалтай байна."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Хавсралтыг сонгох"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Сонголтыг баталгаажуулах"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> сонгосон"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Нэг эсвэл түүнээс дээш тооны хавсралтыг арилгасны дараагаар дахин оролдоно уу."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Та өөрийн мессежийг илгээх оролдлогыг хийж болох боловч нэг эсвэл түүнээс дээг тооны хавсралтыг арилгахаас нааш илгээгдэхгүй байх магадлалтай."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Та нэг мессежээр нэг л видео илгээж болно. Нэмэлт видеонуудыг устгаад, дахин оролдоно уу."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Messaging нь хавсралтыг ачаалж чадсангүй."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Юутай ч илгээх"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Харилцан яриаг эхэлж болохгүй байна"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> сонгогдсон"</string>
-</resources>
diff --git a/res/values-mr/arrays.xml b/res/values-mr/arrays.xml
deleted file mode 100644
index 73cd4c2..0000000
--- a/res/values-mr/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"कोणताही विषय नाही"</item>
-    <item msgid="272485471009191934">"कोणताही विषय नाही"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"होय"</item>
-    <item msgid="6049132459802288033">"नाही"</item>
-    <item msgid="3084376867445867895">"ठीक आहे"</item>
-    <item msgid="3155097332660174689">"हेहे"</item>
-    <item msgid="2611328818571146775">"धन्यवाद"</item>
-    <item msgid="4881335087096496747">"मी सहमत आहे"</item>
-    <item msgid="2422296858597420738">"छान"</item>
-    <item msgid="4805581752819452687">"मी वाटेत आहे"</item>
-    <item msgid="4746700499431366214">"ठीक, नंतर मला आपल्याकडे परत येऊ द्या"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
deleted file mode 100644
index ff585ba..0000000
--- a/res/values-mr/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"संदेशन"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"संदेशन"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"संभाषण निवडा"</string>
-    <string name="action_settings" msgid="1329008122345201684">"सेटिंग्ज"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"संदेश पाठवा"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"एखादे संलग्नक जोडा"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"मदत"</string>
-    <string name="welcome" msgid="2857560951820802321">"सुस्वागतम"</string>
-    <string name="skip" msgid="7238879696319945853">"वगळा"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"पुढील &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"पुढील"</string>
-    <string name="exit" msgid="1905187380359981199">"बाहेर पडा"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"सेटिंग्ज &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"सेटिंग्ज"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"संदेशनला SMS, फोन आणि संपर्कांसाठी परवानगी आवश्यक आहे."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"आपण सेटिंग्ज &gt; अॅप्स &gt; संदेशन &gt; परवानग्या मध्ये परवानग्या बदलू शकता."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"आपण सेटिंग्ज, अॅप्स, संदेशन, परवानग्या मध्ये परवानग्या बदलू शकता."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"वारंवार"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"सर्व संपर्क"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> वर पाठवा"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"चित्रे किंवा व्हिडिओ कॅप्चर करा"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"या डिव्हाइसवरून प्रतिमा निवडा"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ऑडिओ रेकॉर्ड करा"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"फोटो निवडा"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"मीडिया निवडण्यात आला आहे."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"मीडियाची निवड रद्द करण्यात आली आहे."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> निवडले"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"प्रतिमा <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"प्रतिमा"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ऑडिओ रेकॉर्ड करा"</string>
-    <string name="action_share" msgid="2143483844803153871">"सामायिक करा"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"आत्ताच"</string>
-    <string name="posted_now" msgid="867560789350406701">"आत्ता"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> मिनि</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> मिनिटे</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> तास</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> तास</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> दिवस</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> दिवस</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> आठवडा</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> आठवडे</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> महिना</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> महिने</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> वर्ष</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> वर्षे</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"वर्ग 0 संदेश"</string>
-    <string name="save" msgid="5081141452059463572">"जतन करा"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"डिव्हाइसवर स्थान कमी आहे. स्थान मोकळे करण्‍यासाठी संदेशन जुने संदेश स्वयंचलितपणे हटवेल."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"संचयन स्थान संपत आहे"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"आपल्या डिव्हाइसवर आणखी स्थान उपलब्ध होईपर्यंत संदेशन संदेश पाठवू किंवा प्राप्त करू शकत नाही."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"कमी SMS संचयन. आपल्याला संदेश हटविण्याची आवश्यकता असू शकते."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"आपल्‍या फोन नंबरची पुष्‍टी करा"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"हे एक-वेळ चरण संदेशन आपले गट संदेश योग्यरित्या वितरीत करेल हे सुनिश्चित करेल."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"फोन नंबर"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"मीडिया असलेले सर्व संदेश हटवा"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> पेक्षा अधिक जुने संदेश हटवा"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> पेक्षा जुने संदेश स्वयं हटवा"</string>
-    <string name="ignore" msgid="7063392681130898793">"दुर्लक्ष करा"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"मीडिया असलेले सर्व संदेश हटवायचे?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> पेक्षा जुने संदेश हटवायचे?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> पेक्षा जुने संदेश हटवायचे आणि स्वयं-हटवा चालू करायचे?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> म्हणाले"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"आपण म्हटले"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> कडून संदेश"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"आपण एक संदेश पाठविला"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"पाठवित आहे..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"पाठविले नाही. पुन्हा प्रयत्न करण्यासाठी स्पर्श करा."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"पाठविले नाही. पुन्हा प्रयत्न करत आहे…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"पुन्हा पाठवा किंवा हटवा"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"कृपया आणीबाणी सेवांना एक व्हॉईस कॉल करा. यावेळी आपला मजकूर संदेश वितरीत केला जाऊ शकत नाही."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"अयशस्‍वी झाले"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"डाउनलोड करण्यासाठी नवीन MMS संदेश"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"नवीन MMS संदेश"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"डाउनलोड करू शकलो नाही"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"पुन्हा प्रयत्न करण्यासाठी स्पर्श करा"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"डाउनलोड करण्यासाठी स्पर्श करा"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"डाउनलोड करा किंवा हटवा"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"डाउनलोड करत आहे..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"संदेश कालबाह्य झाला किंवा उपलब्‍ध नाही"</string>
-    <string name="mms_info" msgid="3402311750134118165">"आकार: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, कालबाह्यता: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"पाठवू शकलो नाही. प्राप्तकर्ता वैध नाही."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"नेटवर्कवर सेवा सक्रिय केली नाही"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"नेटवर्क समस्येमुळे पाठवू शकलो नाही"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"संदेश कालबाह्य झाला किंवा उपलब्‍ध नाही"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(विषय नाही)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"अज्ञात प्रेषक"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"वितरित"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> कडील <xliff:g id="SUBJECT">%1$s</xliff:g> संदेश डाउनलोड करू शकलो नाही"</string>
-    <string name="low_memory" msgid="5300743415198486619">"कमी मेमरीमुळे डेटाबेस ऑपरेशन पूर्ण करू शकलो नाही"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"संदेश पाठविला नाही"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"काही संदेश संदेशन मध्ये पाठविले गेले नाहीत"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="CONVERSATIONS">%d</xliff:g> संभाषणांमधील <xliff:g id="MESSAGES_1">%d</xliff:g> संदेश</item>
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> संभाषणांमधील <xliff:g id="MESSAGES_1">%d</xliff:g> संदेश</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"संदेश डाउनलोड केला नाही"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"काही संदेश संदेशन मध्ये डाउनलोड झाले नाहीत"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="CONVERSATIONS">%d</xliff:g> संभाषणांमधील <xliff:g id="MESSAGES_1">%d</xliff:g> संदेश</item>
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> संभाषणांमधील <xliff:g id="MESSAGES_1">%d</xliff:g> संदेश</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> वर संदेश पाठविला नाही"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"कृपया आणीबाणी सेवांना एक व्हॉईस कॉल करा. यावेळी आपला मजकूर संदेश <xliff:g id="NUMBER">%1$s</xliff:g> ला वितरीत केला जाऊ शकत नाही."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> नवीन संदेश</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> नवीन संदेश</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"प्रारंभ करा"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"कॅमेरा उपलब्ध नाही"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"कॅमेरा उपलब्ध नाही"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"व्हिडिओ कॅप्चर उपलब्ध नाही"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"मीडिया जतन करू शकत नाही"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"चित्र घेऊ शकत नाही"</string>
-    <string name="back" msgid="1477626055115561645">"परत"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"संग्रहित"</string>
-    <string name="action_delete" msgid="4076795795307486019">"हटवा"</string>
-    <string name="action_archive" msgid="5437034800324083170">"संग्रहण करा"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"संग्रहण रद्द करा"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"सूचना बंद करा"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"सूचना चालू करा"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"संपर्क जोडा"</string>
-    <string name="action_download" msgid="7786338136368564146">"डाउनलोड करा"</string>
-    <string name="action_send" msgid="377635240181672039">"पाठवा"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"हटवा"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"हा संदेश हटवायचा?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"ही क्रिया पूर्ववत केली जाणे शक्य नाही."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"हटवा"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">हे संभाषण हटवायचे?</item>
-      <item quantity="other">ही संभाषणे हटवायची?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"हटवा"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"रद्द करा"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"प्रति"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"एकाधिक प्रतिमा निवडा"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"निवडीची पुष्टी करा"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ऑडिओ रेकॉर्ड करू शकत नाही. पुन्हा प्रयत्न करा."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ऑडिओ प्ले करू शकत नाही. पुन्हा प्रयत्न करा."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ऑडिओ जतन करू शकलो नाही. पुन्हा प्रयत्न करा."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"स्पर्श करा आणि धरून ठेवा"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"चित्र"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ऑडिओ क्लिप"</string>
-    <string name="notification_video" msgid="4331423498662606204">"व्हिडिओ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"संपर्क कार्ड"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"डाउनलोड करा"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS द्वारे प्रत्युत्तर द्या"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS द्वारे प्रत्‍युत्तर द्या"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"प्रत्युत्तर द्या"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> सहभागी</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> सहभागी</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"मी"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"संपर्क अवरोधित आणि संग्रहित केला"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"संपर्क अनावरोधित केला आणि संग्रहण करणे रद्द केले"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> संग्रहित केले"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> संग्रहण करणे रद्द केले"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"सूचना बंद"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"सूचना चालू"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"सर्व सेट केले. पुन्हा पाठवा ला स्पर्श करा."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"डीफॉल्ट SMS अॅप म्हणून संदेशन यशस्वीरित्या सेट झाले."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">संलग्नक टाकून द्या</item>
-      <item quantity="other">संलग्नके टाकून द्या</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ऑडिओ संलग्नक"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ऑडिओ संलग्नक प्ले करा"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"विराम द्या"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> कडून संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> कडील अयशस्‍वी संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> कडील संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> ला न पाठविलेला संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> ला संदेश पाठवित आहे: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> चा अयशस्‍वी संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> चा संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> कडील अयशस्‍वी संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> कडील संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> ला न पाठविलेला संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> ला संदेश पाठवित आहे: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> चा अयशस्‍वी संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> चा संदेश: <xliff:g id="MESSAGE">%2$s</xliff:g>. वेळ: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"संदेश अयशस्वी. पुन्हा प्रयत्न करण्यासाठी स्पर्श करा."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> सह संभाषण"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"विषय हटवा"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"व्‍हिडिओ कॅप्‍चर करा"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"एक स्थिर प्रतिमा कॅप्च करा"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"चित्र घ्या"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"व्हिडिओ रेकॉर्ड करणे प्रारंभ करा"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"पूर्ण स्क्रीन कॅमेर्‍यावर स्विच करा"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"पुढील आणि मागील कॅमेर्‍यात स्विच करा"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"रेकॉर्डिंग थांबवा आणि व्‍हिडिओ संलग्न करा"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"व्हिडिओ रेकॉर्ड करणे थांबवा"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"संदेशन फोटो"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> फोटो \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" अल्बममध्‍ये जतन केला</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> फोटो \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" अल्बममध्‍ये जतन केले</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> व्हिडिओ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" अल्बममध्‍ये जतन केला</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> व्हिडिओ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" अल्बममध्‍ये जतन केले</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> संलग्नक \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" अल्बममध्‍ये जतन केले</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> संलग्नके \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" अल्बममध्‍ये जतन केली</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> संलग्नक \"डाउनलोड\" मध्‍ये जतन केले</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> संलग्नके \"डाउनलोड\" मध्‍ये जतन केली</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> संलग्नक जतन केले</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> संलग्नके जतन केली</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> संलग्नक जतन करणे शक्य झाले नाही</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> संलग्नके जतन करणे शक्य झाले नाही</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS संलग्नक जतन केले"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"सेटिंग्ज"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"संग्रहित"</string>
-    <string name="action_close" msgid="1840519376200478419">"बंद करा"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"प्रगत"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"डीबग करणे"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"सूचना"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ध्वनी"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"मूक"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"कंपन"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"अवरोधित केले"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS वितरण अहवाल"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"आपण पाठविता त्या प्रत्‍येक SMS साठी वितरण अहवालाची विनंती करा"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"स्‍वयं-पुनर्प्राप्त करा"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS संदेश स्वयंचलितपणे पुनर्प्राप्त करा"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"रोमिंग स्‍वयं-पुनर्प्राप्त करा"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"रोमिंगमध्‍ये असताना स्वयंचलितपणे MMS पुनर्प्राप्त करा"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"गट संदेशन"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"एक संदेश एकाधिक प्राप्तकर्त्यांना पाठविण्‍यासाठी MMS चा वापर करा."</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"डीफॉल्ट SMS अॅप"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"डीफॉल्ट SMS अॅप"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"आपला फोन नंबर"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"अज्ञात"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"पाठविला जाणारा संदेश ध्वनी करतो"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS साचवा"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"प्राप्त केलेला SMS अविश्लेषित डेटा बाह्य संचयन फायलीमध्‍ये साचवा"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS साचवा"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"प्राप्त केलेला MMS अविश्लेषित डेटा बाह्य संचयन फायलीमध्‍ये साचवा"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"वायरलेस अॅलर्ट"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"संदेश पर्याय"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"मजकूर कॉपी करा"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"तपशील पहा"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"हटवा"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"अग्रेषित करा"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"संदेश तपशील"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"प्रकार: "</string>
-    <string name="text_message" msgid="7415419755252205721">"मजकूर संदेश"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"मल्‍टीमीडिया संदेश"</string>
-    <string name="from_label" msgid="1947831848146564875">"प्रेषक: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"प्रति: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"प्रेषित: "</string>
-    <string name="received_label" msgid="4442494712757995203">"प्राप्त झाले: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"विषय: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"आकार: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"प्राधान्य: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"सिम: "</string>
-    <string name="priority_high" msgid="728836357310908368">"उच्च"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"सामान्य"</string>
-    <string name="priority_low" msgid="7398724779026801851">"निम्न"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"सिम <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"लपविलेला प्रेषक पत्ता"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"संलग्नके लोड करताना संदेश पाठवू शकत नाही."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"संलग्नक लोड करू शकत नाही. पुन्हा प्रयत्न करा."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"नेटवर्क सज्ज नाही. पुन्हा प्रयत्न करा."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"मजकूर हटवा"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"मजकूर आणि संख्या प्रविष्ट करणे दरम्यान स्विच करा"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"अधिक सहभागी जोडा"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"सहभाग्यांची पुष्टी करा"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"नवीन संभाषण प्रारंभ करा"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"हा आयटम निवडा"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"व्हिडिओ प्ले करा"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"लोक आणि पर्याय"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"डीबग करणे"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"लोक आणि पर्याय"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"सामान्य"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"या संभाषणातील लोक"</string>
-    <string name="action_call" msgid="6596167921517350362">"एक कॉल करा"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"संदेश पाठवा"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g> वरून&lt;/small&gt;संदेश पाठवा"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">फोटो पाठवा</item>
-      <item quantity="other">फोटो पाठवा</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">ऑडिओ पाठवा</item>
-      <item quantity="other">ऑडिओ पाठवा</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">व्हिडिओ पाठवा</item>
-      <item quantity="other">व्हिडिओ पाठवा</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">संपर्क कार्ड पाठवा</item>
-      <item quantity="other">संपर्क कार्ड पाठवा</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">संलग्नक पाठवा</item>
-      <item quantity="other">संलग्नके पाठवा</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one">पाठविण्‍यासाठी <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> संलग्नक सज्ज</item>
-      <item quantity="other">पाठविण्‍यासाठी <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> संलग्नक सज्ज</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"अभिप्राय पाठवा"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Store मध्ये पहा"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"आवृत्ती माहिती"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"आवृत्ती %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"मुक्त स्त्रोत परवाने"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"सूचना"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"संलग्नक मर्यादेपर्यंत पोहोचले"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"संलग्नक लोड करण्यात अयशस्वी."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"संपर्कांवर जोडायचे?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"संपर्क जोडा"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"विषय"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"विषय: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"संपर्क कार्ड लोड करीत आहे"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"संपर्क कार्ड लोड करू शकलो नाही"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"संपर्क कार्ड पहा"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> संपर्क</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> संपर्क</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"संपर्क कार्ड"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"जन्मदिवस"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"टिपा"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"संदेश अग्रेषित करा"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"प्रत्युत्तर द्या"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS अक्षम"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"पाठविण्यासाठी, डीफॉल्ट SMS अॅप म्हणून संदेशन सेट करा"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"डीफॉल्ट SMS अॅप म्हणून संदेशन सेट करा"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"बदला"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"संदेश प्राप्त करण्यासाठी, डीफॉल्ट SMS अॅप म्हणून संदेशन सेट करा"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS संदेश पाठविण्यासाठी कोणतेही प्राधान्यकृत सिम निवडले नाही"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"या अॅप ला डिव्हाइस मालकाने अनुमती दिलेली नाही."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ठीक आहे"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"एका संभाषणात पुष्कळ सहभागी आहेत"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">अवैध संपर्क</item>
-      <item quantity="other">अवैध संपर्क</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"कॅमेरा प्रतिमा लोड करू शकलो नाही"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"आपण: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"मसुदा"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"आपण नवीन संभाषण प्रारंभ केल्यावर, आपल्याला तो येथे सूचीबद्ध केलेला दिसेल"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"संग्रहित केलेली संभाषणे येथे दिसतात"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"संभाषणे लोड करीत आहे…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"चित्र"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ऑडिओ क्लिप"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"व्हिडिओ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"संपर्क कार्ड"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"पूर्ववत करा"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"पुन्हा प्रयत्न करा"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"एक नवीन संदेश प्रारंभ करण्यासाठी एक संपर्क नाव किंवा फोन नंबर प्रविष्ट करा"</string>
-    <string name="action_block" msgid="9032076625645190136">"अवरोधित करा"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> अवरोधित करा"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> अनावरोधित करा"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> अवरोधित करायचे?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"आपण या नंबरवरून संदेश प्राप्त करणे सुरु ठेवाल परंतु आपल्याला आणखी सूचित केले जाणार नाही. हे संभाषम संग्रहित केले जाईल."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"अवरोधित संपर्क"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"अनावरोधित करा"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"अवरोधित संपर्क"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"दस्तऐवज लायब्ररीतून प्रतिमा निवडा"</string>
-    <string name="sending_message" msgid="6363584950085384929">"संदेश पाठवित आहे"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"संदेश पाठवला"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"सेल्युलर डेटा बंद आहे. आपल्या सेटिंग्ज तपासा."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"विमान मोडमध्ये संदेश पाठवू शकत नाही"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"संदेश पाठविला जाऊ शकला नाही"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"संदेश डाउनलोड केला"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"सेल्युलर डेटा बंद आहे. आपल्या सेटिंग्ज तपासा."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"विमान मोडमध्ये संदेश डाउनलोड करू शकत नाही"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"संदेश डाउनलोड करणे शक्य झाले नाही"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"शून्य"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"एक"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"दोन"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"तीन"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"चार"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"पाच"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"सहा"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"सात"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"आठ"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"नऊ"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> सह संदेश पाठवू शकत नाही, त्रुटी <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"अज्ञात वाहकासह संदेश पाठवू शकत नाही, त्रुटी <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"अग्रेषित: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"संदेश पाठविला नाही: नेटवर्क वर सेवा सक्रिय नाही"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"संदेश पाठविला नाही: अवैध गंतव्यस्‍थान पत्ता"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"संदेश पाठविला नाही: अवैध संदेश"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"संदेश पाठविला नाही: असमर्थित सामग्री"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"संदेश पाठविला नाही: असमर्थित संदेश"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"संदेश पाठविला नाही: खूप मोठा"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"नवीन संदेश"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"पहा"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"प्रतिमा"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"योग्य अनुप्रयोग शोधणे शक्य झाले नाही"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"प्राप्तकर्ता काढा"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"नवीन संदेश"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"रद्द करा"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"प्रवेश बिंदू संपादित करा"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"सेट केले नाही"</string>
-    <string name="apn_name" msgid="1572691851070894985">"नाव"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS प्रॉक्सी"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS पोर्ट"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN प्रकार"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN हटवा"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"नवीन APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"जतन करा"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"टाकून द्या"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"नाव फील्ड रिक्त असू शकत नाही."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN रिक्त असू शकत नाही."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC फील्ड 3 अंकी असणे आवश्यक आहे."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC फील्ड 2 किंवा 3 अंकी असणे आवश्यक आहे."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"डीफॉल्ट APN सेटिंग्ज पुनर्संचयित करत आहे."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"डीफॉल्टवर रीसेट करा"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"डीफॉल्ट APN सेटिंग्ज रीसेट करणे पूर्ण झाले."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"अशीर्षकांकित"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"प्रवेश बिंदू नावे"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"नवीन APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"या वापरकर्त्यासाठी प्रवेश बिंदू नाव सेटिंग्ज उपलब्ध नाहीत"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"क्लिपबोर्डवर कॉपी करायचे?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"कॉपी करा"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> वर"</string>
-    <string name="general_settings" msgid="5409336577057897710">"सामान्य"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"प्रगत"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"सामान्य सेटिंग्ज"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"प्रगत सेटिंग्ज"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" सिम"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"सर्व प्राप्तकर्त्यांना वैयक्तिक SMS संदेश पाठवा. केवळ आपणच कोणतीही प्रत्युत्तरे मिळवाल"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"सर्व प्राप्तकर्त्यांना एक एकल MMS पाठवा"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"अज्ञात नंबर"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"नवीन संदेश"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"नवीन संदेश."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"सिम निवडकर्ता"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> निवडले, सिम निवडकर्ता"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"विषय संपादित करा"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"सिम निवडा किंवा विषय संपादित करा"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ऑडिओ रेकॉर्ड करण्‍यासाठी स्पर्श करा आणि धरून ठेवा"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"नवीन संभाषण प्रारंभ करा"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"संदेशन"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"संदेशन सूची"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"संदेशन"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"नवीन संदेश"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"संभाषण सूची"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"संभाषणे लोड करीत आहे"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"संदेश लोड करत आहे"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"अधिक संभाषणे पहा"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"अधिक संदेश पहा"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"संभाषण हटवले"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"संभाषण हटविले. भिन्न संदेशन संभाषण दर्शविण्यासाठी स्पर्श करा"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"अवरोधित केले"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"अनावरोधित केले"</string>
-    <string name="db_full" msgid="8459265782521418031">"संचयन स्थान कमी आहे. काही डेटा गमावला जाऊ शकतो."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"संलग्नके निवडा"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"निवडीची पुष्टी करा"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> निवडली"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"कृपया एक किंवा अधिक संलग्नके काढा आणि पुन्हा प्रयत्न करा."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"आपण आपला संदेश पाठविण्याचा प्रयत्न करू शकता, परंतु आपण जोपर्यंत एक किंवा अधिक संलग्नके काढत नाही तोपर्यंत तो वितरित केला जाऊ शकत नाही."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"आपण प्रति संदेश केवळ एक व्हिडिओ पाठवू शकता. कृपया अतिरिक्त व्हिडिओ काढा आणि पुन्हा प्रयत्न करा."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"संलग्नक लोड करण्यात संदेशन अयशस्वी झाले."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"तरीही पाठवा"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"संभाषण प्रारंभ करू शकलो नाही"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> निवडले"</string>
-</resources>
diff --git a/res/values-ms/arrays.xml b/res/values-ms/arrays.xml
deleted file mode 100644
index 10f0c1c..0000000
--- a/res/values-ms/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"tiada subjek"</item>
-    <item msgid="272485471009191934">"tiada subjek"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ya"</item>
-    <item msgid="6049132459802288033">"Tidak"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Terima kasih"</item>
-    <item msgid="4881335087096496747">"Saya bersetuju"</item>
-    <item msgid="2422296858597420738">"Nice"</item>
-    <item msgid="4805581752819452687">"Saya dalam perjalanan"</item>
-    <item msgid="4746700499431366214">"OK, saya akan hubungi anda semula"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
deleted file mode 100644
index 3094e1d..0000000
--- a/res/values-ms/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Pemesejan"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Pemesejan"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Pilih perbualan"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Tetapan"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Hantar Mesej"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Tambah lampiran"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Bantuan"</string>
-    <string name="welcome" msgid="2857560951820802321">"Selamat datang"</string>
-    <string name="skip" msgid="7238879696319945853">"Langkau"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Seterusnya &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Seterusnya"</string>
-    <string name="exit" msgid="1905187380359981199">"Keluar"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Tetapan &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Tetapan"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Pemesejan memerlukan kebenaran untuk mengakses SMS, Telefon dan Kenalan."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Anda boleh menukar kebenaran dalam Tetapan &gt; Apl &gt; Pemesejan &gt; Kebenaran."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Anda boleh menukar kebenaran dalam Tetapan, Apl, Pemesejan, Kebenaran."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Kerap"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Semua kenalan"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Hantar ke <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Abadikan gambar atau video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Pilih imej dari peranti ini"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Rakam audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Pilih foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Media dipilih."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Media tidak dipilih."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> dipilih"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"imej <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"imej"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Rakam audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Kongsi"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Sebentar tadi"</string>
-    <string name="posted_now" msgid="867560789350406701">"Sekarang"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> jam</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> jam</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> hari</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hari</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> minggu</item>
-      <item quantity="one">seminggu</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> bulan</item>
-      <item quantity="one">sebulan</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tahun</item>
-      <item quantity="one">setahun</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Mesej kelas 0"</string>
-    <string name="save" msgid="5081141452059463572">"Simpan"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Peranti kekurangan ruang. Pemesejan akan memadamkan mesej yang lebih lama secara automatik untuk mengosongkan ruang."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Ruang storan semakin berkurangan"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Pemesejan mungkin tidak akan menghantar atau menerima mesej sehingga lebih banyak ruang tersedia pada peranti anda."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Storan SMS kurang. Anda mungkin perlu memadamkan mesej."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Sahkan nombor telefon anda"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Langkah sekali ini akan memastikan Pemesejan menghantar mesej kumpulan anda dengan betul."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Nombor telefon"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Padamkan semua mesej dengan media"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Padamkan mesej yang lebih lama daripada <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Auto padam mesej yang lebih lama daripada <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Abaikan"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Padam semua mesej dengan media?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Padam mesej yang lebih lama daripada <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Padam mesej yang lebih lama daripada <xliff:g id="DURATION">%s</xliff:g> dan hidupkan autopadam?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> kata"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Anda kata"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Mesej daripada <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Anda telah menghantar mesej"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Menghantar…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Tidak dihantar. Sentuh untuk mencuba lagi."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Tidak dihantar. Mencuba lagi..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Hantar semula atau padam"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Sila buat panggilan suara ke perkhidmatan kecemasan. Mesej teks anda tidak dapat dihantar pada masa ini."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Gagal"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Mesej MMS baharu untuk dimuat turun"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Mesej MMS baharu"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Tidak dapat memuat turun"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Sentuh untuk mencuba lagi"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Sentuh untuk memuat turun"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Muat turun atau padam"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Memuat turun..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Mesej telah tamat tempoh atau tidak tersedia"</string>
-    <string name="mms_info" msgid="3402311750134118165">"saiz: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, tarikh luput: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Tidak dapat menghantar. Penerima tidak sah."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Perkhidmatan tidak diaktifkan pada rangkaian"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Tidak dapat menghantar kerana masalah rangkaian"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Mesej telah tamat tempoh atau tidak tersedia"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Tiada subjek)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Pengirim tidak dikenali"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Dikirimkan"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Tidak dapat memuat turun <xliff:g id="SUBJECT">%1$s</xliff:g> daripada <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Tidak dapat menyelesaikan operasi pangkalan data akibat memori rendah"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Mesej tidak dihantar"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Sesetengah mesej tidak dihantar dalam Pemesejan"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mesej dalam <xliff:g id="CONVERSATIONS">%d</xliff:g> perbualan</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mesej dalam satu perbualan</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Mesej tidak dimuat turun"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Sesetengah mesej tidak dimuat turun dalam Pemesejan"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mesej dalam <xliff:g id="CONVERSATIONS">%d</xliff:g> perbualan</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mesej dalam satu perbualan</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Mesej ke <xliff:g id="NUMBER">%1$s</xliff:g> tidak dihantar"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Sila buat panggilan suara ke perkhidmatan kecemasan. Mesej teks anda ke <xliff:g id="NUMBER">%1$s</xliff:g> tidak dapat dihantar pada masa ini."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> mesej baharu</item>
-      <item quantity="one">Mesej baharu</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Mula"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera tidak tersedia"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera tidak tersedia"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Pengabadian video tidak tersedia"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Tidak dapat menyimpan media"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Tidak boleh mengambil gambar"</string>
-    <string name="back" msgid="1477626055115561645">"Kembali"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Diarkibkan"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Padam"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arkib"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Nyaharkib"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Matikan pemberitahuan"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Hidupkan pemberitahuan"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Tambah kenalan"</string>
-    <string name="action_download" msgid="7786338136368564146">"Muat turun"</string>
-    <string name="action_send" msgid="377635240181672039">"Hantar"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Padam"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Padamkan mesej ini?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Tindakan ini tidak boleh dibuat asal."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Padam"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Padamkan perbualan ini?</item>
-      <item quantity="one">Padamkan perbualan ini?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Padam"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Batal"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Ke"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Pilih berbilang imej"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Sahkan pilihan"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Tidak dapat merakam audio. Cuba lagi."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Tidak dapat memainkan audio. Cuba lagi."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Tidak dapat menyimpan audio. Cuba lagi."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Sentuh &amp; tahan"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Gambar"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Klip audio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video dalam strim"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kad kenalan"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Muat turun"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Balas melalui SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Balas melalui MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Balas"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> peserta</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> peserta</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Saya"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kenalan yang disekat &amp; diarkib"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kenalan dinyahsekat &amp; dinyaharkib"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> diarkibkan"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> dinyaharkib"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Pemberitahuan dimatikan"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Pemberitahuan dihidupkan"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Semuanya sedia. Sentuh Hantar lagi."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Pemesejan berjaya dijadikan sebagai apl SMS lalai."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Buang lampiran</item>
-      <item quantity="one">Buang lampiran</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Lampiran audio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Mainkan lampiran audio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Jeda"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Mesej daripada <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Mesej gagal daripada <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Mesej daripada <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Mesej tidak dihantar kepada <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Menghantar mesej kepada <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Mesej gagal kepada <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Mesej kepada <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Mesej gagal daripada <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Mesej daripada <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Mesej tidak dihantar kepada <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Menghantar mesej kepada <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Mesej gagal kepada <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Mesej kepada <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Masa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Mesej gagal. Sentuh untuk mencuba semula."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Perbualan dengan <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Padam subjek"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Rakam video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Abadikan imej pegun"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Ambil gambar"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Mula merakam video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Tukar kepada kamera skrin penuh"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Bertukar antara kamera hadapan dan belakang"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Berhenti merakam dan lampirkan video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Berhenti merakam video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Foto pemesejan"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> foto disimpan ke album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> foto disimpan ke album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> video disimpan ke album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video disimpan ke album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> lampiran disimpan ke album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> lampiran disimpan ke album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> lampiran disimpan ke \"Muat Turun\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> lampiran disimpan ke \"Muat Turun\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> lampiran disimpan</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> lampiran disimpan</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Tidak dapat menyimpan <xliff:g id="QUANTITY_1">%d</xliff:g> lampiran</item>
-      <item quantity="one">Tidak dapat menyimpan <xliff:g id="QUANTITY_0">%d</xliff:g> lampiran</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Lampiran MMS yang disimpan"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Tetapan"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Diarkibkan"</string>
-    <string name="action_close" msgid="1840519376200478419">"Tutup"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Lanjutan"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Nyahpepijat"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Pemberitahuan"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Bunyi"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Senyap"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Bergetar"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Disekat"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Laporan penghantaran SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Minta laporan penghantaran untuk setiap SMS yang anda hantar"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Auto dapat kembali"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Dapatkan semula mesej MMS secara automatik"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Dapatkan kembali perayauan secara automatik"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Dapatkan MMS secara automatik semasa merayau"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Pemesejan kumpulan"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Gunakan MMS untuk menghantar mesej tunggal apabila terdapat berbilang penerima"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Apl SMS lalai"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Apl SMS lalai"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Nombor telefon anda"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Tidak diketahui"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Bunyi mesej keluar"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Buang SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Buang data mentah SMS yang diterima ke dalam fail storan luaran"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Buang MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Buang data mentah MMS yang diterima ke dalam fail storan luaran"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Makluman wayarles"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Pilihan mesej"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Salin teks"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Lihat butiran"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Padam"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Kirim semula"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Butiran mesej"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Jenis: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Mesej teks"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mesej multimedia"</string>
-    <string name="from_label" msgid="1947831848146564875">"Daripada: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Kepada: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Dihantar: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Diterima: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Subjek: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Saiz: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Keutamaan: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Tinggi"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Biasa"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Rendah"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Alamat pengirim tersembunyi"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Tidak boleh menghantar mesej semasa memuatkan lampiran."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Tidak dapat memuatkan lampiran. Cuba lagi."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Rangkaian tidak sedia. Cuba lagi."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Padam teks"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Beralih antara memasukkan teks dan nombor"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Tambah peserta lagi"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Sahkan peserta"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Mulakan perbualan baharu"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Pilih item ini"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Mainkan video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Orang &amp; pilihan"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Nyahpepijat"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Orang &amp; pilihan"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Umum"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Orang dalam perbualan ini"</string>
-    <string name="action_call" msgid="6596167921517350362">"Buat panggilan"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Hantar mesej"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Hantar mesej&lt;br/&gt;&lt;small&gt;from <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Hantar foto</item>
-      <item quantity="one">Hantar foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Hantar audio</item>
-      <item quantity="one">Hantar audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Hantar video</item>
-      <item quantity="one">Hantar video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Hantar kad kenalan</item>
-      <item quantity="one">Hantar kad kenalan</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Hantar lampiran</item>
-      <item quantity="one">Hantar lampiran</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> lampiran sedia untuk dihantar</item>
-      <item quantity="one">Satu lampiran sedia untuk dihantar</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Hantar maklum balas"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Lihat di Gedung Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Maklumat versi"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versi %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Lesen sumber terbuka"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Pemberitahuan"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Had lampiran dicapai"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Gagal memuatkan lampiran."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Tambah pada Kenalan?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Tambah Kenalan"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Subjek"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Subjek: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Memuatkan kad kenalan"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Tidak dapat memuatkan kad kenalan"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Lihat kad kenalan"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kenalan</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kenalan</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kad kenalan"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Tarikh lahir"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Nota"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Kirim semula mesej"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Balas"</string>
-    <string name="plus_one" msgid="9010288417554932581">"1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS dilumpuhkan"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Untuk menghantar, jadikan Pemesejan apl SMS lalai"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Jadikan Pemesejan apl SMS lalai"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Tukar"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Untuk menerima mesej, jadikan Pemesejan apl SMS lalai"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Tiada SIM pilihan yang dipilih untuk menghantar mesej SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Apl ini tidak dibenarkan oleh pemilik peranti."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Terlalu ramai peserta dalam perbualan"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Kenalan tidak sah</item>
-      <item quantity="one">Kenalan tidak sah</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Tidak dapat memuatkan imej kamera"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Anda: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Draf"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Sebaik sahaja anda memulakan perbualan baharu, anda akan melihat perbualan itu disenaraikan di sini"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Perbualan diarkibkan dipaparkan di sini"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Memuatkan perbualan..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Gambar"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Klip audio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kad kenalan"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Buat asal"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Cuba semula"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Masukkan nama kenalan atau nombor telefon untuk memulakan mesej baharu"</string>
-    <string name="action_block" msgid="9032076625645190136">"Sekat"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Sekat <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Nyahsekat <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Sekat <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Anda akan terus menerima mesej daripada nombor ini tetapi tidak akan dimaklumkan lagi. Perbualan ini akan diarkibkan."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Kenalan yang disekat"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"NYAHSEKAT"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Kenalan yang disekat"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Pilih imej dari perpustakaan dokumen"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Menghantar mesej"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Mesej dihantar"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Data selular dimatikan. Periksa tetapan anda."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Tidak dapat menghantar mesej dalam mod Pesawat"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Mesej tidak dapat dihantar"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Mesej dimuat turun"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Data selular dimatikan. Periksa tetapan anda."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Tidak dapat memuat turun mesej dalam mod Pesawat"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Mesej tidak dapat dimuat turun"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Sifar"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Satu"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dua"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tiga"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Empat"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Lima"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Enam"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Tujuh"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Lapan"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Sembilan"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Tidak dapat menghantar mesej dengan <xliff:g id="CARRIERNAME">%1$s</xliff:g>, ralat <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Tidak dapat menghantar mesej dengan pembawa yang tidak diketahui, ralat <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"K.S.: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Mesej tidak dihantar: perkhidmatan tidak diaktifkan di rangkaian"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Mesej tidak dihantar: alamat destinasi tidak sah"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Mesej tidak dihantar: mesej tidak sah"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Mesej tidak dihantar: kandungan tidak disokong"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Mesej tidak dihantar: mesej tidak disokong"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Mesej tidak dihantar: terlalu besar"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Mesej baharu"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Paparan"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Imej"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Tidak menemui aplikasi yang sesuai"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Alih keluar penerima"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Mesej baharu"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Batal"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Edit titik capaian"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Tidak ditetapkan"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nama"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proksi MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Port MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Jenis APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Padam APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN Baharu"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Simpan"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Buang"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Medan Nama tidak boleh kosong."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN tidak boleh kosong."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Medan MCC mestilah 3 digit."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Medan MNC hendaklah mempunyai 2 atau 3 digit."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Memulihkan tetapan lalai APN."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Tetapkan semula kepada lalai"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Penetapan semula tetapan lalai APN selesai."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Tidak bertajuk"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Nama Titik Capaian"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN Baharu"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Tetapan Nama Titik Capaian tidak tersedia untuk pengguna ini"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Salin ke papan keratan?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Salin"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"ke <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Umum"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Lanjutan"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Tetapan umum"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Tetapan terperinci"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Hantar mesej SMS individu kepada semua penerima. Hanya anda yang akan menerima sebarang balasan"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Hantar MMS tunggal kepada semua penerima"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Nombor tidak diketahui"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Mesej baharu"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Mesej baharu"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Pemilih SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> dipilih, pemilih SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Edit subjek"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Pilih SIM atau edit subjek"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Sentuh dan tahan untuk merakam audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Mulakan perbualan baharu"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Pemesejan"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Senarai Pemesejan"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Pemesejan"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Mesej baharu"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Senarai perbualan"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Memuatkan perbualan"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Memuatkan mesej"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Lihat lagi perbualan"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Lihat pesanan lagi"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Perbualan dipadamkan"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Perbualan dipadamkan. Sentuh untuk menunjukkan perbualan Pemesejan yang lain"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Disekat"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Dinyahsekat"</string>
-    <string name="db_full" msgid="8459265782521418031">"Ruang storan rendah. Sesetengah data mungkin hilang."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Pilih lampiran"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Sahkan pilihan"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> dipilih"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Sila alih keluar satu atau lebih lampiran, kemudian cuba lagi."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Anda boleh cuba menghantar mesej tetapi mesej itu mungkin tidak dihantar kecuali anda mengalih keluar satu atau beberapa lampiran."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Anda hanya boleh menghantar satu video bagi setiap mesej. Sila alih keluar video tambahan dan cuba lagi."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Pemesejan gagal memuatkan lampiran."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Hantar juga"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Tidak dapat memulakan perbualan"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> dipilih"</string>
-</resources>
diff --git a/res/values-my/arrays.xml b/res/values-my/arrays.xml
deleted file mode 100644
index 331ac85..0000000
--- a/res/values-my/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"အကြောင်းအရာ မရှိ"</item>
-    <item msgid="272485471009191934">"အကြောင်းအရာမဲ့"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"ဟုတ်"</item>
-    <item msgid="6049132459802288033">"မဟုတ်"</item>
-    <item msgid="3084376867445867895">"အိုကေ"</item>
-    <item msgid="3155097332660174689">"ဟဲဟဲ"</item>
-    <item msgid="2611328818571146775">"ကျေးဇူးပဲ"</item>
-    <item msgid="4881335087096496747">"ကျွန်ုပ် သဘောတူသည်"</item>
-    <item msgid="2422296858597420738">"ကောင်း"</item>
-    <item msgid="4805581752819452687">"ကျွန်ုပ်၏ လမ်းပေါ်မှာ"</item>
-    <item msgid="4746700499431366214">"အိုကေ၊ ကျွန်ုပ် နောက်မှာ ပြန်လာပါရစေ"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
deleted file mode 100644
index 26df42e..0000000
--- a/res/values-my/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"စာပို့ခြင်း"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"စာပို့ခြင်း"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"စကားဝိုင်း ရွေးချယ်ပါ"</string>
-    <string name="action_settings" msgid="1329008122345201684">"ဆက်တင်များ"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"စာ ပို့ရန်"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"ပူးတွချက် တစ်ခု ထည့်ရန်"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"အကူအညီ"</string>
-    <string name="welcome" msgid="2857560951820802321">"မင်္ဂလာပါ"</string>
-    <string name="skip" msgid="7238879696319945853">"ကျော်ရန်"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"နောက်တစ်ခု"</string>
-    <string name="next" msgid="4496962051601713843">"နောက်တစ်ခု"</string>
-    <string name="exit" msgid="1905187380359981199">"ထွက်ရန်"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"ချိန်ညှိချက်များ &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"ချိန်ညှိချက်များ"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"စာတိုပို့ခြင်က SMS၊ ဖုန်း နှင့် အဆက်အသွယ်များထံ ခွင့်ပြုချက် လိုအပ်သည်။"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"သင်သည် ခွင့်ပြုချက်များကို ဆက်တင်များထဲမှာ ပြောင်းလဲနိုင် &gt; အက်ပ်များ &gt; စာတိုပို့ခြင်း &gt; ခွင့်ပြုချက်များ။"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"သင်သည် ခွင့်ပြုချက်များကို ဆက်တင်များ၊ အက်ပ်များ၊ စာတိုပို့ခြင်း၊ ခွင့်ပြုချက်များထဲတွင် ပြောင်းလဲနိုင်သည်။"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"မကြာခဏ"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"ဆက်သွယ်အားလုံး"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g>သို့ ပို့ရန်"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"ပုံများ သို့မဟုတ် ဗီဒီယို ရိုက်ယူရန်"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"ဤစက်ပစ္စည်းမှ ပုံများ ရွေးရန်"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"အသံကို ဖမ်းရန်"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ပုံရွေးရန်"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"မီဒီယာကိုရွေးချယ်ထားသည်။"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"မီဒီယာကို မရွေးချယ်ထားပါ။"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> ခု ရွေးချယ်ထား"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"ပုံ <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"ပုံ"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"အသံကို ဖမ်းရန်"</string>
-    <string name="action_share" msgid="2143483844803153871">"မျှဝေရန်"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ယခုလေးတင်"</string>
-    <string name="posted_now" msgid="867560789350406701">"ယခု"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> မိနစ်</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> မိနစ်</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> နာရီ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> နာရီ</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ရက်</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ရက်</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ပတ်</item>
-      <item quantity="one">၁ ပတ်</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> လ</item>
-      <item quantity="one">တစ်လ</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> နှစ်</item>
-      <item quantity="one">တစ်နှစ်</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"အဆင် ၀ စာတို"</string>
-    <string name="save" msgid="5081141452059463572">"သိမ်းဆည်းရန်"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"ကိရိယာထဲတွင် နေရာ နည်းနေသည်။ နေရာလွတ်ပေးရန် စာတိုပို့ခြင်းက စာတို စာသား အဟောင်းကို အလိုအလျောက် ဖယ်ရှားပစ်မည်။"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"သိုလှောင်ခန်း နေရာ ကုန်ပါတော့မည်"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"သင်၏ ကိရိယာထဲတွင် နေရာလွတ် နောက်ထပ် ပေါ်မလာမချင်း စာတိုပို့ခြင်းက စာတိုများကို ပို့ခြင်း သို့မဟုတ် လက်ခံခြင်း လုပ်နိုင်မည် မဟုတ်ပါ။"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS သိုလှောင်ခန်း နည်းနေသည်။ သင်သည် စာများကို ဖျက်ချင် ဖျက်ရနိုင်သည်။"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"သင့် ဖုန်းနံပါတ်ကို အတည်ပြုပါ"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"တကြိမ် လုပ်ရသည့် ဒီခြေလှမ်းက စာတိုပို့ခြင်းမှ သင်၏ အုပ်စု စာတိုများကို စနစ်တကျ ပို့ပေးမှာကို စိတ်ချနိုင်ပါသည်။"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ဖုန်း နံပါတ်"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"မီဒီယာနှင့် စာများ အားလုံးကို ဖျက်မည်"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> ထက် ပိုကြာသော စာများကို ဖျက်မည်"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> မတိုင်ခင်က စာများအား အလိုအလျောက် ဖျက်ရန်"</string>
-    <string name="ignore" msgid="7063392681130898793">"လစ်လျှူရှုရန်"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"မီဒီယာနှင့် စာတိုများ ဖျက်မည်လား?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> ထက် ပိုကြာသော စာများ ဖျက်မည်လား?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> မတိုင်ခင်က စာများအား ဖျက်ပြီး စာများ အလိုအလျောက်ဖျက်နိုင်မှုကို ဖွင့်ထားမည်လား?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> ပြောတာက"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"သင်ပြောတာက"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> ထံမှစာ"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"သင်စာပို့သည်"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"ပို့နေ၏…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"မပို့နိုင်ပါ။ ထပ်မံကြိုးစားရန် ထိပါ။"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"မပို့နိုင်ပါ။ ထပ်မံကြိုးစားနေ၏…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"ပြန်ပို့ရန် သို့မဟုတ် ဖျက်ရန်"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"အရေးပေါ်ဝန်ဆောင်မှုများထံ အသံဖြင့် ခေါ်ပါ။ ယခုအချိန်တွင် သင့် စာတို မပို့နိုင်ပါ။"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"မအောင်မြင်ခဲ့"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"MMS စာအသစ်ကို ဒေါင်းလုဒ် လုပ်ရန်"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"MMS စာအသစ်"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ဒေါင်းလုဒ် မလုပ်နိုင်ခဲ့ပါ"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"ထပ်စမ်းရန် ထိပါ"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ဒေါင်းလုပ်ရယူရန် ထိပါ"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ဒေါင်းလုဒ် လုပ်ရန် သို့မဟုတ် ဖျက်ရန်"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"ဒေါင်းလုပ် လုပ်နေစဉ်"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"စာသက်တမ်းကုန်ဆုံးသွား၏ သို့မဟုတ် စာမရှိတော့ပါ။"</string>
-    <string name="mms_info" msgid="3402311750134118165">"ဆိုက်: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>၊ သက်တမ်း ကုန်ဆုံး: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"မပို့နိုင်ပါ။ လက်ခံမည့်သူ မရယူနိုင်ပါ။"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"ကွန်ရက်တွင် ဝန်ဆောင်မှု စဖွင့်သတ်မှတ်ခြင်း မပြုရသေးပါ"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"ကွန်ရက် ပြဿနာကြောင့် မပို့နိုင်ခဲ့ပါ။"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"စာ သက်တမ်းကုန်ဆုံးသွား၏ သို့မဟုတ် စာမရှိတော့ပါ။"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(အကြောင်းအရာမရှိ)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"ပေးပို့သူ မသိရ"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"ပေးသွင်းပြီး"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="SUBJECT">%1$s</xliff:g>စာကို <xliff:g id="FROM">%2$s</xliff:g>မှ ဒေါင်းလုဒ် မလုပ်နိုင်ခဲ့ပါ"</string>
-    <string name="low_memory" msgid="5300743415198486619">"မှတ်ဉာဏ် နည်းနေ၍ ဒေတာဘေ့စ် လုပ်ကိုင်စရာ မပြီးဆုံးနိုင်ခဲ့ပါ။"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"စာ မပို့ခဲ့ပါ"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"အချို့ စာတိုများကို စာပို့ခြင်းထဲတွင် မပို့ခဲ့ပါ။"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"> စာတိုများ <xliff:g id="MESSAGES_1">%d</xliff:g> ခုမှာ စကားပြောခန်း <xliff:g id="CONVERSATIONS">%d</xliff:g> ခု အတွင်းတွင် ဖြစ်၏</item>
-      <item quantity="one"> စကားပြောခန်းတစ်ခုတွင်းရှိ စာတိုများ <xliff:g id="MESSAGES_0">%d</xliff:g> ခု</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"စာကို ဒေါင်းလုပ်မလုပ်ထားပါ"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"အချို့ စာတိုများကို စာပို့ခြင်းထဲသို့ ဒေါင်းလုဒ် မလုပ်ခဲ့ပါ။"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"> စာတိုများ <xliff:g id="MESSAGES_1">%d</xliff:g> ခုမှာ စကားပြောခန်း <xliff:g id="CONVERSATIONS">%d</xliff:g> ခု အတွင်းတွင် ဖြစ်၏</item>
-      <item quantity="one"> စကားပြောခန်းတစ်ခုတွင်းရှိ စာတိုများ <xliff:g id="MESSAGES_0">%d</xliff:g> ခု</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> သို့ စာတို ပို့မရပါ"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"အရေးပေါ်ဝန်ဆောင်မှုများထံ အသံဖြင့် ခေါ်ပါ။ <xliff:g id="NUMBER">%1$s</xliff:g> သို့ ယခုအချိန်တွင် သင့် စာတို မပို့နိုင်ပါ။"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> စာအသစ်</item>
-      <item quantity="one">စာအသစ်</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"စတင်ရန်"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"ကင်မရာ အသုံးမပြုနိုင်ပါ"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"ကင်မရာ အသုံးမပြုနိုင်ပါ"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"ဗွီဒီယို မရိုက်ယူနိုင်ပါ"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"မီဒီယာအား မသိမ်းဆည်းနိုင်ပါ"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"ဓာတ်ပုံရိုက်၍ မရနိုင်ပါ"</string>
-    <string name="back" msgid="1477626055115561645">"နောက်သို့"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"မော်ကွန်းတင်ပြီး"</string>
-    <string name="action_delete" msgid="4076795795307486019">"ဖျက်ရန်"</string>
-    <string name="action_archive" msgid="5437034800324083170">"မော်ကွန်း"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"မော်ကွန်းမှထုတ်ယူရန်"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"အက​ြောင်းကြားချက်များ ပိတ်ရန်"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"အကြောင်းကြားချက်များ ဖွင့်ရန်"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"အဆက်အသွယ် ထည့်ရန်"</string>
-    <string name="action_download" msgid="7786338136368564146">"ဒေါင်းလုဒ် လုပ်ရန်"</string>
-    <string name="action_send" msgid="377635240181672039">"ပို့ရန်"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"ဖျက်ရန်"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"ဤ စာကို ဖျက်မလား?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"ဒီလုပ်ဆောင်ချက်ကို ြပန်ဖျက်မရနိုင်ပါ။"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"ဖျက်ရန်"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">ဤစကားဝိုင်းများအား ဖျက်မည်လား?</item>
-      <item quantity="one">ဤစကားဝိုင်းအား ဖျက်မည်လား?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"ဖျက်ရန်"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"ထားတော့"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"သို့"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"ပုံများစွာ ရွေးချယ်ရန်"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"ရွေးချယ်မှုကို အတည်ပြုရန်"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"အသံ ဖမ်းမရပါ။ ထပ်မံကြိုးစားပါ။"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"အသံဖွင့်မရပါ။ ထပ်မံကြိုးစားပါ။"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"အသံ သိမ်းမရပါ။ ထပ်မံကြိုးစားပါ။"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"ထိပြီး &amp; ကိုင်ထားရန်"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"ပုံ"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"အသံ ကလီပ်"</string>
-    <string name="notification_video" msgid="4331423498662606204">"ဗီဒီယို"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"အဆက်အသွယ် ကဒ်"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ဒေါင်းလုဒ် လုပ်ရန်"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS မှတစ်ဆင့် ဖြေကြားရန်"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS ဖြင့် ဖြေကြားရန်"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"ဖြေကြားရန်"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"> ပါဝင်သူ <xliff:g id="COUNT_1">%d</xliff:g> ယောက်</item>
-      <item quantity="one"> ပါဝင်သူ <xliff:g id="COUNT_0">%d</xliff:g> ယောက်</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"ကျွန်ုပ်"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"အဆက်အသွယ်ဖြတ်တောက်ပြီး &amp; သိမ်းဆည်းပြီး"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"အဆက်အသွယ်အား မပိတ်ဆို့တော့ပါ &amp;amp မှော်ကွန်းမတင်တော့ပါ"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> မှတ်တမ်းတင်သိမ်းဆည်းခဲ့၏"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> သိမ်းထားခြင်းမှ ပြန်ထုတ်ယူသည်"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"အသိပေးချက်များ ပိတ်ထား"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"အသိပေးချက်များ ဖွင့်ထား"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"အဆင်သင့်ဖြစ်ပြီ။ Send အား ထိပါ။"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"စာတို့ပို့ခြင်းကို SMS ပုံသေ app အဖြစ် အောင်မြင်စွာ သတ်မှတ်လိုက်ပြီ။"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">ပူးတွဲပါဖိုင်များအား ဖယ်ရှားပါ</item>
-      <item quantity="one">ပူးတွဲပါဖိုင်အား ဖယ်ရှားပါ</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"အသံ ပူးတွဲဖိုင်"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ပူးတွဲပါအသံကိုဖွင့်ပါ"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"ဆိုင်းငံ့ရန်"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> ထံမှ စာတို: <xliff:g id="MESSAGE">%2$s</xliff:g> ။"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> မှ စာတိုပို့ခြင်းမအောင်မြင်ပါ။ အချိန်: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> မှ စာတို။ အချိန်: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> သို့ စာတိုမပို့ရသေးပါ။ အချိန်: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> သို့ စာတိုပို့နေသည်။ အချိန်: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> သို့ စာတိုပို့ခြင်းမအောင်မြင်ပါ။ အချိန်: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> သို့ စာတို။ အချိန်: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> မှ စာပို့ခြင်းမအောင်မြင်ပါ။အချိန်: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>မှ စာတိုပို့နေသည်။ အချိန်: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> သို့ စာတိုမပို့ရသေးပါ။ အချိန်: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> သို့ စာတိုပို့ နေသည်။အချိန်: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> သို့စာတိုပို့ခြင်းမအောင်မြင်ပါ။ အချိန်: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> သို့ စာတိုပို့နေသည်။ အချိန်: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"စာတိုပို့ခြင်းမအောင်မြင်ပါ။ ပြန်လည်ကြိုးစားရန် ထိပါ။"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g>နှင့် စကားဝိုင်းများ"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"အကြောင်းအရာကို ဖျက်ရန်"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"ဗီဒီယို ဖမ်းယူရန်"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"ပုံသေ တစ်ခုကို ရိုက်ယူရန်"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"ပုံ ရိုက်ယူရန်"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"ဗီဒီယို ဖမ်းယူမှု စတင်ရန်"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"မျက်နှာပြင် အပြည့် ကင်မရာသို့ ပြောင်းရန်"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"ကင်မရာ အရှေ့ဘက်နှင့် အနောက်ဘက် ပြောင်းရန်"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"မှတ်တမ်းတင်မှုရပ်ကာ ဗီဒီယို ချိတ်ရန်"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"ဗွီဒီယိုရိုက်ကူးခြင်း ရပ်ရန်"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"ဓာတ်ပုံများကို စာတိုပို့ခြင်း"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ဓါတ်ပုံများကို \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ဓါတ်ပုံကို \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ဗီဒီယိုများကို \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ဗီဒီယိုကို \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ပူးတွဲပါဖိုင်များကို \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ပူးတွဲပါဖိုင်ကို \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" အယ်လ်ဘမ်သို့ သိမ်းဆည်းပြီးပါပြီ</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ပူးတွဲပါဖိုင်များကို \"ဒေါင်းလုဒ်များ\" သို့ သိမ်းဆည်းပြီ:ပါပြီ</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ပူးတွဲပါဖိုင်ကို \"ဒေါင်းလုဒ်များ\" သို့ သိမ်းဆည်းပြီးပါပြီ</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"> ပူးတွဲပါဖိုင် <xliff:g id="QUANTITY_1">%d</xliff:g> ဖိုင် သိမ်းဆည်းပြီး၏</item>
-      <item quantity="one"> ပူးတွဲပါဖိုင် <xliff:g id="QUANTITY_0">%d</xliff:g> ဖိုင် သိမ်းဆည်းပြီး၏</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"> ပူးတွဲပါဖိုင် <xliff:g id="QUANTITY_1">%d</xliff:g> အား မသိမ်းဆည်းနိုင်ခဲ့ပါ</item>
-      <item quantity="one"> ပူးတွဲပါဖိုင် <xliff:g id="QUANTITY_0">%d</xliff:g> ဖိုင်အား မသိမ်းဆည်းနိုင်ခဲ့ပါ</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"သိမ်းဆည်းထားသည့် MMS ပူးတွဲချက်"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"ဆက်တင်များ"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"မော်ကွန်းတင်ပြီး"</string>
-    <string name="action_close" msgid="1840519376200478419">"ပိတ်ရန်"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"ရုပ်သံစာ"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"အဆင့်မြင့်"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"ဒီဘာဂ်"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"အကြောင်းကြားချက်များ"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"အသံ"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"အသံတိတ်ရန်"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"တုန်ခါရန်"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"ပိတ်ဆို့ထား"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS ဖြန့်ဝေမှု အစီရင်ခံစာများ"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"သင် ပို့လိုက်သော စာတိုင်း အတွက် ပို့ပြီးကြောင်း အစီရင်ခံစာကို တောင်းဆိုမည်"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"အလိုအလျောက် ပြန်လည်ရယူမည်"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS စာများကို အလိုအလျောက် ရယူရန်"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"ရုန်းမင်းလုပ်စဉ် အလိုအလျောက် ပြန်လည်ထုတ်ယူမည်"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"ရုန်းမင်းသုံးစဉ် MMS အလိုအလျောက် ရယူရန်"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"အဖွဲ့လိုက် စာပို့ခြင်း"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"စာတစ်စောင်ပို့ရန် လက်ခံသူအမြောက်အမြားရှိနေလျှင် ရုပ်သံစာကို သုံးရန်"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"စာတိုပို့ရန်သုံး အပလီကေးရှင်း"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"စာတိုပို့ရန်သုံး အပလီကေးရှင်း"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"သင့် ဖုန်းနံပါတ်"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"မသိရ"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"အပြင်သို့စာပေးပို့သည့် အသံများ"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"စိုစွတ် SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"စိုစွတ် SMS အချက်လက်အကြမ်းများကို ပြင်ပသိုလှောင်မှုဖိုင် သို့လက်ခံ ရရှိပါသည်"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"စိုစွတ် MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"စိုစွတ် MMS အချက်လက်အကြမ်းများကို ပြင်ပသိုလှောင်မှုဖိုင် သို့လက်ခံ ရရှိပါသည်"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"ကြိုးမဲ့ သတိပေးချက်များ"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"စာ အတွက် ရွေးစရာများ"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"စာကူးယူရန်"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"အသေးစိတ်များကို ကြည့်မည်"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"ဖျက်ရန်"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"တစ်ဆင့်ပို့ရန်"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"စာသေးစိတ်များ"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"အမျိုးအစား: "</string>
-    <string name="text_message" msgid="7415419755252205721">"စာတို"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"မာလ်တီမီဒီယာ စာ"</string>
-    <string name="from_label" msgid="1947831848146564875">"မှ: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"သို့: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"ပို့ပြီး: "</string>
-    <string name="received_label" msgid="4442494712757995203">"လက်ခံရရှိခဲ့: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"အကြောင်းအရာ: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"အရွယ်အစား: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"ဦးစားပေးမှု: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"ဆင်းမ်: "</string>
-    <string name="priority_high" msgid="728836357310908368">"မြင့်"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"ပုံမှန်"</string>
-    <string name="priority_low" msgid="7398724779026801851">"နိမ့်"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"ဆင်းမ် <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"ဝှက်ထားသော စာပို့သူ လိပ်စာ"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"ပူးတွဲချက်များဖွင့်စဉ် စာပို့၍မရပါ။"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"ပူးတွဲဖိုင် မရယူနိုင်ပါ။ ထပ်မံကြိုးစားပါ။"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"ကွန်ရက်အဆင်သင့် မဖြစ်သေးပါ။ ထပ်မံကြိုးစားပါ။"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"စာသားကို ဖျက်ရန်"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"စာသား နှင့် ဂဏန်းများ ရိုက်ထည့်မှု အကြားမှာ ပြောင်းလဲရန်"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"ပါဝင်သူများထပ်ထည့်မည်"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"ပါဝင်သူများ အတည်ပြုရန်"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"ပြောဆိုမှု အသစ် စတင်ရန်"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"ဒီအရာကို ရွေးရန်"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"ဗီဒီယို ဖွင့်ရန်"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"လူများ &amp; ရွေးစရာများ"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"ဒီဘာဂ်"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"လူများ &amp; ရွေးစရာများ"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"အထွေထွေ"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"ဒီစကားဝိုင်း ထဲက လူများ"</string>
-    <string name="action_call" msgid="6596167921517350362">"ခေါ်ဆိုမှု ပြုလုပ်ရန်"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"စာတို ပို့ရန်"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"စာတိုကို&lt;br/&gt;&lt;&gt; <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt; ထံမှပို့ရန်"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">ဓာတ်ပုံများ ပို့ရန်</item>
-      <item quantity="one">ဓာတ်ပုံ ပို့ရန်</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">အသံဖိုင်များ ပို့ရန်</item>
-      <item quantity="one">အသံဖိုင် ပို့ရန်</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">ဗီဒီယိုများ ပို့ရန်</item>
-      <item quantity="one">ဗီဒီယို ပို့ရန်</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">အဆက်အသွယ်ကဒ်များ ပို့ရန်</item>
-      <item quantity="one">အဆက်အသွယ်ကဒ် ပို့ရန်</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">ပူးတွဲပါဖိုင်များ ပို့ရန်</item>
-      <item quantity="one">ပူးတွဲပါဖိုင် ပို့ရန်</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"> ပူးတွဲဖိုင် <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ဖိုင် ပို့ရန် အဆင်သင့်ဖြစ်၏</item>
-      <item quantity="one">ပူးတွဲဖိုင်တစ်ဖိုင် ပို့ရန် အဆင်သင့်ဖြစ်၏</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"တုံ့ပြန်ချက် ပို့ရန်"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google ပလေး စတိုးတွင် ကြည့်ရန်"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"ဗားရှင်း အင်ဖို"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"ဗားရှင်း %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"အခမဲ့ ရင်းမြစ် လိုင်စင်များ"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"အကြောင်းကြားချက်များ"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"ချိတ်တွဲမှု ကန့်သတ်ချက်သို့ရောက်ရှိပါပြီ"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"ချိတ်တွဲမှု ဖွင့်ရန်မအောင်မြင်ပါ။"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"အဆက်အသွယ်များသို့ ထည့်ရမလား?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"အဆက်အသွယ် ထည့်ရန်"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"ဘာသာရပ်"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"အကြောင်းအရာ: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"အဆက်အသွယ် ကဒ်ကို တင်ပေးနေ"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"နာမည်ကဒ် မရယူနိုင်ပါ"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"အဆက်အသွယ် ကဒ်ကို ကြည့်ရန်"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> အဆက်အသွယ်</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> အဆက်အသွယ်</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"နာမည် ကဒ်များ"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"မွေးနေ့"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"မှတ်စုများ"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"စာကို တစ်ဆင့်ပို့ရန်"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"စာပြန်ရန်"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+၁"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS ပိတ်ထား"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"ပို့ရန်အတွက် စာတိုပို့ခြင်းကို SMS ပုံသေ app အဖြစ် သတ်မှတ်ပေးပါ"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"စာတိုပို့ခြင်းကို SMS ပုံသေ app အဖြစ် သတ်မှတ်ရန်"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"ပြောင်းရန်"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"စာတိုများကို လက်ခံရန်အတွက်၊ စာတိုပို့ခြင်းကို SMS ပုံသေ app အဖြစ် သတ်မှတ်ပေးပါ"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS စာများ ပို့ရန်အတွက် ဦးစားပေး ဆင်းမ်ကို မရွေးရသေးပါ"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"ဒီappကို ကိရိယာ ပိုင်ရှင်က ခွင့် မပြုပါ။"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"အိုကေ"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"စကားဝိုင်း တစ်ခုထဲမှာ ပါဝင်သူ များလွန်းနေ"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">အဆက်အသွယ်များ မမှန်ကန်ပါ</item>
-      <item quantity="one">အဆက်အသွယ် မမှန်ကန်ပါ</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"ကင်မရာ ပုံ မရယူနိုင်ပါ"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"သင်: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"မူကြမ်း"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"စကားပြောစတင်သည်နှင့်၊ ဤစာရင်းတွင် ပေါ်လာသည်ကို သင်မြင်ရလိမ့်မည်။"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"ဤတွင်မြင်ရသည့် ပြောဆိုမှုများအား သိမ်းဆည်းရန်"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"ပြောဆိုမှုများကို တင်နေ..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"ပုံ"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"အသံ ကလီပ်"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"ဗီဒီယို"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"အဆက်အသွယ် ကဒ်"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"ပြန်ဖျက်ရန်"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"ထပ်စမ်းရန်"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"စာတို အသစ် စပို့ရန် အမည် သို့မဟုတ် ဖုန်းနံပါတ် ရိုက်ထည့်ပါ"</string>
-    <string name="action_block" msgid="9032076625645190136">"ပိတ်ဆို့ရန်"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"အဆက်အသွယ်ဖြတ်ရန် <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"အဆက်အသွယ်ပြန်လုပ် <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"ပိတ်ဆို့ရမလား<xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"ဤနံပါတ်မှ စာတိုများ သင် ဆက်လက်ရရှိနေမည်ဖြစ်သော်လည်း အကြောင်းကြားချက်ပေးပို့တော့မည် မဟုတ်ပါ။ ဤပြောဆိုမှုများအား သိုလှောင်သိမ်းဆည်းထားမည်ဖြစ်၏။"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"အဆက်အသွယ် ဖြတ်ပြီး"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"အဆက်အသွယ်ပြန်လုပ်"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"အဆက်အသွယ် ဖြတ်ပြီး"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"စာကြည့်တိုက်မှ ပုံရွေးရန်"</string>
-    <string name="sending_message" msgid="6363584950085384929">"စာတိုပို့နေသည်"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"စာတိုပို့ပြီးပါပြီ"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"ဆဲလူလာ ဒေတာ ပိတ်ထား၏။ ဆက်တင်တွင် စစ်ဆေးပါ။"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"လေယာဉ်ပျံပေါ်သုံးစနစ်တွင် စာများ မပို့နိုင်ပါ"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"စာများ ပို့၍မရပါ။"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"စာတိုအားဒေါင်းလုတ်လုပ်ပြီး"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"ဆဲလူလာ ဒေတာ ပိတ်ထား၏။ ဆက်တင်တွင် စစ်ဆေးပါ။"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"လေယာဉ်ပျံမုဒ်တွင် စာတိုများကို ဒေါင်းလုပ်လုပ်၍မရနိုင်ပါ"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"စာတိုအား ဒေါင်းလုပ်လုပ်၍မရပါ"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"သုည"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"တစ်"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"နှစ်"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"သုံး"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"လေး"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"ငါး"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ခြောက်"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"ခုနစ်"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"ရှစ်"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"ကိုး"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g>ဖြင့် စာတိုမပို့နိုင်ပါ၊ အမှား <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"အမည်မသိသယ်ဆောင်သူဖြင့် စာတိုမပို့နိုင်ပါ၊ အမှား <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"တစ်ဆင့်ပို့: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"စာတိုကို မပို့ခဲ့: ဝန်ဆောင်မှုကို ကွန်ရက် ပေါ်မှာ စဖွင့်မသုံးရသေး"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"စာမပို့နိုင်ပါ − လက်ခံယူမည့် လိပ်စာ မှားနေ၏"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"စာမပို့နိုင်ပါ− စာ မမှန်ကန်ပါ။"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"စာမပို့နိုင်ပါ − ထောက်ပံ့မထားသော အကြောင်းအရာဖြစ်၏"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"စာမပို့နိုင်ပါ− ထောက်ပံ့မထားသော စာဖြစ်၏"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"စာပိုဒ်အလွန်ရှည်ပါက မက်ဆေ့ချ် ပို့မရပါ။"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"စာ အသစ်"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"ကြည့်ရှုရန်"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"ပုံ"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"သင့်တော်သည့် အပလီကေးရှင်းကို ရှာမရခဲ့"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"အဝေးမှ လက်ခံရရှိသူ"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"စာ အသစ်"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"ဖျက်သိမ်းရန်"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"ဝင်ရောက်မည့်ပွိုင့်အား ပြင်ဆင်ရန်"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"မသတ်မှတ်ထားပါ"</string>
-    <string name="apn_name" msgid="1572691851070894985">"အမည်"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS ပရော့က်စီ"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS ပို့တ်နံပါတ်"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN အမျိုးအစား"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN ကိုဖျက်မည်"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN အသစ်"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"သိမ်းဆည်းရန်"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"ဖျက်သိမ်းရန်"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"အမည်အကွက်မှာ ကွက်လပ်ဖြစ်မနေစေရပါ"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN မှာ ကွက်လပ်ဖြစ်မနေစေရပါ"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MNC အကွက်မှာ ဂဏန်း ၃ လုံးဖြစ်ရမည်"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC အကွက်မှာ ဂဏန်း ၂ လုံး သို့မဟုတ် ၃ လုံးဖြစ်ရမည်"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"မူရင်း APN ဆက်တင်များကိုပြန်လည်ရယူစေမည်"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"စနစ်အား မူလစက်ရုံအခြအေနေထံ ပြန်လည်သတ်မှတ်ရန်"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"APN ၏မူရင်းအပြင်အဆင်များကို အစသို့ပြန်လည်စတင်မှုအား ပြီးဆုံး၏။"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"ခေါင်းစဉ်မဲ့"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ချိတ်ဆက်သောပွိုင့်အမည်များ"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN အသစ်"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"ဤအသုံးပြုသူ အတွက် ချိတ်ဆက်သောပွိုင့်အမည်၏ ဆက်တင်များကို မရယူနိုင်"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"ကလီပ်ဘုတ်သို့ ကူးရမလား?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"ကူးယူရန်"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g>သို့"</string>
-    <string name="general_settings" msgid="5409336577057897710">"အထွေထွေ"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"အဆင့်မြင့်သော"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"အထွေထွေ ဆက်တင်များ"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"အဆင့်မြင့် ဆက်တင်များ"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"ရရှိသူ အားလုံးတို့ထံ တစ်ဦးချင်း SMS စာများကို ပို့ပါ။ သင်သည်သာလျှင် ​ဖြေကြားချက် မှန်သမျှကို ရရှိမည်။"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"ရရှိသူ အားလုံးထံသို့ တစ်ခုတည်းသော MMS ကို ပို့ပါ"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"မသိရ နံပါတ်"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"စာ အသစ်"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"စာ အသစ်"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM ရွေးချယ်ပေးရေးလက္ခဏာရပ်"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> ရွေးချယ်ပြီး၊ SIM ရွေးချယ်ပေးသူ"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"အကြောင်းအရာကို တည်းဖြတ်ပါ။"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM ကို‌ရွေးချယ်ပါ သို့မဟုတ် အကြောင်းအရာတည်းဖြတ်ခြင်းကိုရွေးချယ်ပါ။"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"အသံအား ဖမ်းယူထားရန် ထိပြီးဖိထားပါ"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"ပြောဆိုမှု အသစ် စတင်ရန်"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"စာတိုပို့ခြင်း"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"စာတိုပို့ခြင်း စာရင်း"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"စာတိုပို့ခြင်း"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"စာ အသစ်"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"ပြောဆိုမှုစာရင်း"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"စကားဝိုင်းများကို ဖွင့်နေသည်"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"စာများကို တင်နေ"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"စကားပြောဆက်သွယ်မှုများကို ထပ်ပြီး ကြည့်မည်"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"နောက်ထပ် မက်ဆေ့များကြည့်ရန်"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"စကားဝိုင်းကို ဖျက်လိုက်ပြီ"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"ပြောဆိုမှုကို ဖျက်ခဲ့သည်။ အခြား စာတိုပို့ခြင်း ပြောဆိုမှုကို ပြရန် တို့ထိပါ။"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"ပိတ်ဆို့ထား"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"ပြန်ဖွင့်ထားခြင်း"</string>
-    <string name="db_full" msgid="8459265782521418031">"သိုလှောင်ထားသည့်နေရာ နည်းနေပါသည်။ ဒေတာတချို့ပျောက်ဆုံးပါလိမ့်မည်။"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"ချိတ်တွဲမှုများ ရွေးချယ်မည်"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"ရွေးချယ်မှုကို အတည်ပြုရန်"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ခရွေးချယ်ပြီး"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"ကျေးဇူးပြု၍ တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ချိတ်တွဲမှုများကို ဖယ်ရှားပြီး နောက်တစ်ကြိမ်ကြိုးစားပါ။"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"သင့်စာတိုကို ပေးပို့ရန် သင်ကြိုးစားနိုင်ပါသည်၊ သို့သော်သင်သည် တစ်ခုသို့မဟုတ် တစ်ခုထက်ပိုသော ချိတ်တွဲမှုများကို ဖယ်ရှားခြင်းမပြုပါက ၎င်းကို ပေးပို့မှုမရှိခြင်း ဖြစ်နိုင်သည်။"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"သင်သည် မက်ဆေ့ဂျ်တစ်ခုလျှင် ဗွီဒီယိုတကားသာ ပေးပို့နိုင်သည်။ အပိုဆောင်း ဗွီဒီယိုများအား ဖယ်ရှားပြီး ထပ်မံကြိုးစားပါ။"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"စာတိုကိုပို့စဉ် ပူးတွဲချက်ကို တင် မရခဲ့ပါ။"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"မည်သို့ပင်ဖြစ်စေ ပို့မည်"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"စကားဝိုင်းအား မစတင်နိုင်ပါ"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> ရွေးချယ်ပြီး၏"</string>
-</resources>
diff --git a/res/values-nb/arrays.xml b/res/values-nb/arrays.xml
deleted file mode 100644
index c9efc6f..0000000
--- a/res/values-nb/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"emne mangler"</item>
-    <item msgid="272485471009191934">"ikke noe emne"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ja"</item>
-    <item msgid="6049132459802288033">"Nei"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Takk"</item>
-    <item msgid="4881335087096496747">"Jeg er enig"</item>
-    <item msgid="2422296858597420738">"Bra"</item>
-    <item msgid="4805581752819452687">"Jeg er på vei"</item>
-    <item msgid="4746700499431366214">"OK, jeg tar kontakt med deg senere"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
deleted file mode 100644
index ca04e94..0000000
--- a/res/values-nb/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Meldinger"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Meldinger"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Markér samtalen"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Innstillinger"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Send meldingen"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Legg ved et vedlegg"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Hjelp"</string>
-    <string name="welcome" msgid="2857560951820802321">"Velkommen"</string>
-    <string name="skip" msgid="7238879696319945853">"Hopp over"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Neste &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Neste"</string>
-    <string name="exit" msgid="1905187380359981199">"Avslutt"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Innstillinger &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Innstillinger"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Meldinger trenger tillatelse til å bruke SMS, Telefon og Kontakter."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Du kan endre tillatelser i Innstillinger &gt; Apper &gt; Meldinger &gt; Tillatelser."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Du kan endre tillatelser i Innstillinger &gt; Apper &gt; Meldinger &gt; Tillatelser."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Ofte brukte"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Alle kontakter"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Send til <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Ta bilder eller spill inn video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Velg bilder fra denne enheten"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Spill inn lyd"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Velg bilde"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Mediene er valgt."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Valget av mediene er fjernet."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> valgt"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"bilde <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"bilde"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Spill inn lyd"</string>
-    <string name="action_share" msgid="2143483844803153871">"Del"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Nå nettopp"</string>
-    <string name="posted_now" msgid="867560789350406701">"Nå"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> minutter</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> minutt</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> timer</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> time</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"> dager</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> dag</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> uker</item>
-      <item quantity="one">én uke</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> måneder</item>
-      <item quantity="one">én måned</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> år</item>
-      <item quantity="one">ett år</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Klasse 0-melding"</string>
-    <string name="save" msgid="5081141452059463572">"Lagre"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Enheten har lite lagringsplass. Meldinger-appen sletter eldre meldinger automatisk for å frigjøre lagringsplass."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Lite ledig lagringsplass"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Du kan kanskje ikke sende eller motta SMS i Meldinger før mer plass er tilgjengelig på enheten din."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Du har lite lagringsplass for SMS. Du må slette andre meldinger."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Bekreft telefonnummeret ditt"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Dette engangstrinnet sikrer at Meldinger leverer gruppemeldingene dine på riktig måte."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefonnummer"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Slett alle meldinger med medier"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Slett meldinger som er eldre enn <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Slett meldinger som er eldre enn <xliff:g id="DURATION">%s</xliff:g> automatisk"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorer"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Vil du slette alle meldinger med media?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Vil du slette meldinger som er eldre enn <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Vil du slette meldinger som er eldre enn <xliff:g id="DURATION">%s</xliff:g> og slå av automatisk sletting?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> sa"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Du sa"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Melding fra <xliff:g id="SENDER">%s</xliff:g>:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Du sendte en melding"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Sender ..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Ikke sendt. Trykk for å prøve på nytt."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Ikke sendt. Prøver på nytt …"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Send på nytt eller slett"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Ring til alarmsentralen. Tekstmeldingen kunne ikke leveres for øyeblikket."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Mislykket"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Ny MMS-melding for nedlasting"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Ny MMS-melding"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Kan ikke laste ned"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Trykk for å prøve på nytt"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Trykk for å laste ned"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Last ned eller slett"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Laster ned …"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Meldingen er utløpt eller ikke tilgjengelig"</string>
-    <string name="mms_info" msgid="3402311750134118165">"størrelse: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, utløper: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Kan ikke sende. Mottaker er ikke gyldig."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Tjenesten er ikke aktivert på nettverket"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Kunne ikke sende på grunn av et nettverksproblem"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Meldingen er utløpt eller ikke tilgjengelig"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Mangler emne)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Ukjent avsender"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Levert"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Kunne ikke laste ned meldingen <xliff:g id="SUBJECT">%1$s</xliff:g> fra <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Databasehandlingen kunne ikke fullføres på grunn av lite minne."</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Meldingen er ikke sendt"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Enkelte meldinger er ikke sendt i Meldinger"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> meldinger i <xliff:g id="CONVERSATIONS">%d</xliff:g> samtaler</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> meldinger i én samtale</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Meldingen er ikke lastet ned"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Enkelte meldinger er ikke lastet ned i Meldinger"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> meldinger i <xliff:g id="CONVERSATIONS">%d</xliff:g> samtaler</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> meldinger i én samtale</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Melding til <xliff:g id="NUMBER">%1$s</xliff:g> ble ikke sendt"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Ring til alarmsentralen. Tekstmeldingen til <xliff:g id="NUMBER">%1$s</xliff:g> kunne ikke leveres for øyeblikket."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nye meldinger</item>
-      <item quantity="one">Ny melding</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Start"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kameraet er ikke tilgjengelig"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kameraet er ikke tilgjengelig"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Videoinnspilling er ikke tilgjengelig"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Kan ikke lagre media"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Kan ikke ta bilde"</string>
-    <string name="back" msgid="1477626055115561645">"Tilbake"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arkivert"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Slett"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arkivér"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Fjern fra arkivet"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Slå av varsler"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Slå på varsler"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Legg til kontakt"</string>
-    <string name="action_download" msgid="7786338136368564146">"Last ned"</string>
-    <string name="action_send" msgid="377635240181672039">"Send"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Slett"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Vil du slette denne meldingen?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Denne handlingen kan ikke angres."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Slett"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Vil du slette disse samtalene?</item>
-      <item quantity="one">Vil du slette denne samtalen?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Slett"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Avbryt"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Til"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Velg flere bilder"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Bekreft utvalget"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Kan ikke ta opp lyd. Prøv på nytt."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Kan ikke spille av lyd. Prøv på nytt."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Kunne ikke lagre lydfil. Prøv på nytt."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Berør og hold nede"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Bilde"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Lydklipp"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kontaktkort"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Last ned"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Svar via SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Svar via MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Svar"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> deltakere</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> deltaker</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Meg"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakten er blokkert og arkivert"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontakt ublokkerte &amp; uarkiverte"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> er arkivert"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> er fjernet fra arkivet"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Varsler er slått av"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Varsler er slått av"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Alt klart. Trykk på Send én gang til."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Meldinger er nå angitt som standard SMS-app."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Forkast vedlegg</item>
-      <item quantity="one">Forkast vedlegget</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Lydvedlegg"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Spill av lydvedlegg"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Sett på pause"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Melding fra <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Mislykket melding fra <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Melding fra <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Usendt melding til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Sender melding til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Mislykket melding til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Melding til <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Mislykket melding fra <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Melding fra <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Usendt melding til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Sender melding til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Mislykket melding til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Melding til <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidspunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Meldingen ble ikke sendt. Trykk for å prøve på nytt."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Samtale med <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Slett emnet"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Ta video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Ta et stillbilde"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Ta bilde"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Start et videoopptak"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Bytt til fullskjermkamera"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Bytt mellom for- og baksidekamera"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Stopp opptak og legg ved video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Slutt å filme"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Bilder i Meldinger"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> bilder er lagret i albumet «<xliff:g id="ALBUMNAME_3">%s</xliff:g>»</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bilde er lagret i albumet «<xliff:g id="ALBUMNAME_1">%s</xliff:g>»</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videoer er lagret i albumet «<xliff:g id="ALBUMNAME_3">%s</xliff:g>»</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video er lagret i albumet «<xliff:g id="ALBUMNAME_1">%s</xliff:g>»</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> tillegg er lagret i albumet «<xliff:g id="ALBUMNAME_3">%s</xliff:g>»</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> tillegg er lagret i albumet «<xliff:g id="ALBUMNAME_1">%s</xliff:g>»</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> tillegg er lagret i «Nedlastinger»</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> tillegg er lagret i «Nedlastinger»</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> vedlegg er lagret</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> vedlegg er lagret</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Kunne ikke lagre <xliff:g id="QUANTITY_1">%d</xliff:g> vedlegg</item>
-      <item quantity="one">Kunne ikke lagre <xliff:g id="QUANTITY_0">%d</xliff:g> vedlegg</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS-vedlegget er lagret"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Innstillinger"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arkivert"</string>
-    <string name="action_close" msgid="1840519376200478419">"Lukk"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avansert"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Feilsøk"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Varsler"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Lyd"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Stille"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrer"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blokkert"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Leveringsrapporter for SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Be om leveringsrapport for hver SMS du sender"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automatisk henting"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Hent MMS-meldinger automatisk"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Automatisk henting under roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Hent MMS automatisk ved romaning"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Gruppemeldinger"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Bruk MMS for å sende én melding med flere mottakere"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Standard SMS-app"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Standard SMS-app"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Telefonnummeret ditt"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Ukjent"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Lyder for utgående meldinger"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Dump SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Dump rådata fra mottatte SMS-er i en ekstern lagringsfil"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Dump MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Dump rådata fra mottatte MMS-er i en ekstern lagringsfil"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Trådløse varsler"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Meldingsalternativer"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopiér teksten"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Se detaljer"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Slett"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Videresend"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Meldingsinformasjon"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Type: "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Bildemelding"</string>
-    <string name="from_label" msgid="1947831848146564875">"Fra: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Til: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Sendt: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Mottatt: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Emne: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Størrelse: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioritet: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM-kort: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Høy"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Vanlig"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Lav"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM-kort <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Skjult avsenderadresse"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Meldingen kan ikke sendes mens vedleggene lastes inn."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Kan ikke laste inn vedlegg. Prøv på nytt."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Nettverket er ikke klart. Prøv på nytt."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Slett teksten"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Veksle mellom å skrive inn tekst og tall"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Legg til flere deltakere"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Bekreft deltakere"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Start ny samtale"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Velg dette elementet"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Spill av videoen"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Personer-appen og alternativer"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Feilsøk"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Personer-appen og alternativer"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Generelt"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Folk i denne samtalen"</string>
-    <string name="action_call" msgid="6596167921517350362">"Start en samtale"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Send melding"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Send melding&lt;br/&gt;&lt;small&gt;fra <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Send bilder</item>
-      <item quantity="one">Send bilde</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Send lydklipp</item>
-      <item quantity="one">Send lydklipp</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Send videoer</item>
-      <item quantity="one">Send video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Send kontaktkort</item>
-      <item quantity="one">Send kontaktkort</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Send vedlegg</item>
-      <item quantity="one">Send vedlegg</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> vedlegg er klare til å sendes</item>
-      <item quantity="one">Ett vedlegg er klart til å sendes</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Send tilbakemelding"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Se i Google Play-butikken"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Versjonsinformasjon"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versjon %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Lisenser for åpen kildekode"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Varsler"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Vedleggsgrensen er nådd"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Kunne ikke laste inn vedlegg."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Vil du legge til nummeret i kontakter?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Legg til kontakten"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Emne"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Emne: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Laster inn kontaktkortet"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kunne ikke laste kontaktkort"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Se kontaktkortet"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakter</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontaktkort"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Fødselsdag"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notater"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Videresend meldingen"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Svar"</string>
-    <string name="plus_one" msgid="9010288417554932581">"1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS er deaktivert"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"For å sende meldinger, angi Meldinger som standard SMS-app"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Angi Meldinger som standard SMS-app"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Endre"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"For å motta meldinger, angi Meldinger som standard SMS-app"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Ingen foretrukne SIM-kort er valgt for å sende SMS-meldinger"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Denne appen er ikke tillatt av enhetseieren."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"For mange deltakere i en samtale"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Ugyldige kontakter</item>
-      <item quantity="one">Ugyldig kontakt</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Kunne ikke laste inn kamerabilde"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Du: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Utkast"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Når du starter en ny samtale, vises den her"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Arkiverte samtaler vises her"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Laster inn samtaler ..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Bilde"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Lydklipp"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Instream-video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kontaktkort"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Angre"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Prøv på nytt"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Skriv inn et kontaktnavn eller -telefonnummer for å starte en ny melding"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokkér"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blokkér <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Opphev blokkeringen av <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Vil du blokkere <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Du fortsetter å motta meldinger fra dette nummeret, men blir ikke lenger varslet. Denne samtalen blir arkivert."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blokkerte kontakter"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"OPPHEV BLOKKERING"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blokkerte kontakter"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Velg et bilde fra dokumentbiblioteket"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Sender meldingen"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Meldingen er sendt"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobildata er slått av. Sjekk innstillingene dine."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Kan ikke sende meldinger i flymodus"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Kan ikke sende meldingen"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Meldingen er nedlastet"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobildata er slått av. Sjekk innstillingene dine."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Kan ikke laste ned meldinger i flymodus"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Meldingen kunne ikke lastes ned"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Null"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Én"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"To"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tre"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Fire"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Fem"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Seks"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sju"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Åtte"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Ni"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Kan ikke sende meldinger med <xliff:g id="CARRIERNAME">%1$s</xliff:g> – feil <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Kan ikke sende meldinger med ukjent operatør – feil <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"V.send: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Meldingen er ikke sendt: Tjenesten er ikke aktivert på nettverket"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Meldingen ble ikke sendt: ugyldig måladresse"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Meldingen ble ikke sendt: ugyldig melding"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Meldingen ble ikke sendt: innholdet støttes ikke"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Meldingen ble ikke sendt: meldingen støttes ikke"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Meldingen ble ikke sendt: Den var for stor."</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Ny melding"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Se"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Bilde"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Kunne ikke finne en passende app"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Fjern mottakeren"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Ny melding"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Avbryt"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Rediger tilgangspunkt"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Ikke angitt"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Navn"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN-navn"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy-tjener for MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS-port"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN-type"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Slett APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Ny APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Lagre"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Forkast"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Navnefeltet kan ikke være tomt."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN kan ikke være tomt."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC-feltet må bestå av tre siffer."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC-feltet må bestå av to eller tre siffer."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Gjenoppretter standard APN-innstillinger."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Tilbakestill til standard"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Tilbakestilling av standard APN-innstillinger er fullført."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Uten navn"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Navn på tilgangspunkt"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-er"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Ny APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Innstillingene for navn på tilgangspunkt er ikke tilgjengelig for denne brukeren"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Vil du kopiere til utklippstavlen?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopiér"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"til <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Generelt"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avansert"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Generelle innstillinger"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Avanserte innstillinger"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"«<xliff:g id="SIM_NAME">%s</xliff:g>»-SIM-kort"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Send SMS-meldinger til alle mottakere. Bare du mottar svarene."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Send én enkelt MMS til alle mottakere"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Ukjent nummer"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Ny melding"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Ny melding."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM-kortvelger"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> er valgt – SIM-kortvelger"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Rediger emne"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Velg SIM-kort eller rediger emnet"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Trykk og hold inne for å ta opp lyd"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Start ny samtale"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Meldinger"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Samtaleliste"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Meldinger"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Ny melding"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Samtaleliste"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Laster inn samtaler"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Laster inn e-postmeldinger"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Se flere samtaler"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Se flere e-poster"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Samtalen er slettet"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Samtalen er slettet. Trykk for å se en annen samtale i Meldinger"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blokkert"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Blokkeringen er opphevet"</string>
-    <string name="db_full" msgid="8459265782521418031">"Lite lagringsplass ledig. Noen data kan gå tapt."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Velg vedlegg"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Bekreft utvalget"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> er valgt"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Fjern ett eller flere vedlegg og prøv på nytt."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Du kan prøve å sende meldingen din, men det er ikke sikkert at den kommer frem med mindre du fjerner ett eller flere vedlegg."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Du kan bare sende én video per melding. Fjern overflødige videoer og prøv igjen."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Meldinger kunne ikke laste inn vedlegget."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Send likevel"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Kunne ikke starte samtalen"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> er valgt"</string>
-</resources>
diff --git a/res/values-ne/arrays.xml b/res/values-ne/arrays.xml
deleted file mode 100644
index 614436d..0000000
--- a/res/values-ne/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"शीर्षक नभएको"</item>
-    <item msgid="272485471009191934">"विषय छैन"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"हो"</item>
-    <item msgid="6049132459802288033">"हैन"</item>
-    <item msgid="3084376867445867895">"ठीक छ"</item>
-    <item msgid="3155097332660174689">"हाहा"</item>
-    <item msgid="2611328818571146775">"धन्यवाद"</item>
-    <item msgid="4881335087096496747">"म सहमत छु"</item>
-    <item msgid="2422296858597420738">"राम्रो"</item>
-    <item msgid="4805581752819452687">"मेरो बाटोमा"</item>
-    <item msgid="4746700499431366214">"ठीक छ, तपाईंलाई पछिको लागि मलाई अनुमति दिनुहोस्"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
deleted file mode 100644
index b269345..0000000
--- a/res/values-ne/strings.xml
+++ /dev/null
@@ -1,521 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"सन्देश पठाइदै"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"सन्देश पठाइदै"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"कुराकानी चयन गर्नुहोस्"</string>
-    <string name="action_settings" msgid="1329008122345201684">"सेटिङ्हरू"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"सन्देश पठाउनुहोस्"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"एक अनुलग्नक थप गर्नुहोस्"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"मद्दत"</string>
-    <string name="welcome" msgid="2857560951820802321">"स्वागतम"</string>
-    <string name="skip" msgid="7238879696319945853">"छोड्नुहोस्"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"अर्को &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"अर्को"</string>
-    <string name="exit" msgid="1905187380359981199">"बाहिर"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"सेटिङहरू &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"सेटिङहरू"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"सन्देश प्रवाहलाई SMS, फोन र सम्पर्क ठेगानाहरूमा अनुमतिको आवश्यक पर्छ।"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"तपाईँ अनुमतिहरूलाई सेटिङ अनुप्रयोगहरू &gt; सन्देश प्रवाह &gt; अनुमतिहरूमा परिवर्तन गर्न सक्नु हुनेछ।"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"तपाईँ अनुमतिहरूलाई सेटिङ अनुप्रयोगहरू, सन्देश प्रवाह, अनुमतिहरूमा परिवर्तन गर्न सक्नु हुनेछ।"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"नियमित"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"सबै सम्पर्कहरू"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> मा पठाउनुहोस्"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"तस्बिर वा भिडियो लिनुहोस्"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"यस उपकरणबाट तस्बिरहरू छान्नुहोस्"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ध्वनि रेकर्ड गर्नुहोस्"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"फोटो छान्नुहोस्"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"यस मिडिया चयन गरिएको छ।"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"यस मिडियाको चयन हटाइएको छ।"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> चयन गरियो"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"छवि <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"छवि"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ध्वनि रेकर्ड गर्नुहोस्"</string>
-    <string name="action_share" msgid="2143483844803153871">"साझेदारी गर्नुहोस्"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"अहिले भर्खर"</string>
-    <string name="posted_now" msgid="867560789350406701">"अब"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> मिनेट</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> मिनेट</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> घन्टा</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> घन्टा</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> दिन</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> दिन</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> हप्ता</item>
-      <item quantity="one"> एक हप्ता</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> महिना</item>
-      <item quantity="one"> एक महिना</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> वर्ष</item>
-      <item quantity="one"> एक वर्ष</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"वर्ग ० सन्देश"</string>
-    <string name="save" msgid="5081141452059463572">"सुरक्षित गर्नुहोस्"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"यन्त्रमा ठाउँ कम छ। ठाउँ खाली गर्न सन्देश प्रवाहले पुराना सन्देशहरूलाई स्वचालित रूपमा मेट्ने छ।"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"भण्डारण ठाउँ सकिँदै छ"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"तपाईँको यन्त्रमा थप ठाउँ उपलब्ध नभएसम्म सन्देश प्रवाहले सन्देश पठाउन वा प्राप्त नगर्न सक्छ।"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS भण्डारणमा कमी। तपाईँले सन्देशहरु हटाउनु पर्नेहुन्छ।"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"आफ्नो फोन नम्बर पुष्टि गर्नुहोस्"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"यो एक पटके चरणले सन्देश प्रवाहले तपाईँको समूह सन्देशहरू उचित रूपमा डेलिभर गर्ने छ भन्ने सुनिश्चित गर्ने छ।"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"फोन नम्बर"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"मीडियाको साथमा सबै सन्देशहरु मेटाउनुहोस्"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> भन्दा पुराना सन्देशहरुलाई मेट्नुहोस्"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> भन्दा पुरानो सन्देशहरू स्वत: मेट्नुहोस्"</string>
-    <string name="ignore" msgid="7063392681130898793">"बेवास्ता गर्नुहोस्"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"मिडिया भएको सन्देशहरू मेट्ने?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> भन्दा पुरानो सन्देशहरू मेट्ने?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> भन्दा पुरानो सन्देशहरू मेटाउनुहुन्छ र स्वचालित-मेट्ने सक्षम गर्नुहुन्छ?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> ले भन्नुभयो"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"तपाईंले भन्नुभयो"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g>  बाट सन्देश"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"तपाईंले एक सन्देश पठाउनुभयो"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"पठाउँदै..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"पठाइएको छैन। पुन: प्रयास गर्न छुनुहोस्।"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"पठाइएको छैन। पुन: प्रयास गर्दै ..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"पुन: पठाउनुहोस् वा मेट्नुहोस्"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"कृपया आकस्मिक सेवाहरूमा आवाज कल गर्नुहोस्। तपाईंको पाठ सन्देश यो समयमा डेलिभर हुन सक्दैन।"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"विफल भयो"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"डाउनलोड गर्न नयाँ MMS सन्देश"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"नयाँ MMS सन्देश"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"डाउनलोड गर्न सकिएन"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"पुनः प्रयास गर्न छुनुहोस्"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"डाउनलोड गर्न छुनुहोस्"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"डाउनलोड वा मेट्नुहोस्"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"डाउनलोड हुँदै..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"सन्देशको अवधि सकियो वा उपलब्ध छैन"</string>
-    <string name="mms_info" msgid="3402311750134118165">"आकार: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, समाप्ति: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"पठाउन सकिएन। प्रापक मान्य छैन।"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"नेटवर्कमा सेवा सक्रिय छैन"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"नेटवर्कको समस्याको कारण पठाउन सकिएन"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"सन्देशको अवधि सकियो वा उपलब्ध छैन"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(कुनै विषय छैन)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"अज्ञात प्रेषक"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"पुर्याइयो"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> बाट सन्देश <xliff:g id="SUBJECT">%1$s</xliff:g> डाउनलोड गर्न सकिएन।"</string>
-    <string name="low_memory" msgid="5300743415198486619">"कम मेमोरीका कारण डेटाबेस कार्य पुरा गर्न सकिएन।"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"सन्देश पठाइएन"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"केही सन्देशहरू सन्देश प्रवाहमा पठाइएनन्"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"> <xliff:g id="CONVERSATIONS">%d</xliff:g> वार्तालापमा <xliff:g id="MESSAGES_1">%d</xliff:g> सन्देशहरू</item>
-      <item quantity="one"> एउटा वार्तालापमा <xliff:g id="MESSAGES_0">%d</xliff:g> सन्देशहरू</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"सन्देश डाउनलोड भएन"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"सन्देशहरू सन्देश प्रवाहमा डाउनलोड भएनन्"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"> <xliff:g id="CONVERSATIONS">%d</xliff:g> वार्तालापमा <xliff:g id="MESSAGES_1">%d</xliff:g> सन्देशहरू</item>
-      <item quantity="one"> एउटा वार्तालापमा <xliff:g id="MESSAGES_0">%d</xliff:g> सन्देशहरू</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> मा सन्देश पठाइएन"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"कृपया आकस्मिक सेवाहरूमा आवाज कल गर्नुहोस्। <xliff:g id="NUMBER">%1$s</xliff:g> मा तपाईंको पाठ सन्देश यो समयमा डेलिभर हुन सक्दैन।"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> नयाँ सन्देशहरू</item>
-      <item quantity="one"> नयाँ सन्देश</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"सुरु गर्नुहोस्"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"क्यामेरा उपलब्ध छैन"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"क्यामेरा उपलब्ध छैन"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"भिडियो क्याप्चर उपलब्ध छैन"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"मिडिया बचत गर्न सकिँदैन"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"तस्वीर लिन सक्दैन"</string>
-    <string name="back" msgid="1477626055115561645">"पछाडि"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"अभिलेख बनाइयो"</string>
-    <string name="action_delete" msgid="4076795795307486019">"मेटाउनुहोस्"</string>
-    <string name="action_archive" msgid="5437034800324083170">"अभिलेख"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"अभिलेखबाट निकाल्नुहोस्"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"सूचनाहरू बन्द गर्नुहोस्"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"सूचनाहरू सुचारु गर्नुहोस्"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"सम्पर्क थप्नुहोस्"</string>
-    <string name="action_download" msgid="7786338136368564146">"डाउनलोड गर्नुहोस्"</string>
-    <string name="action_send" msgid="377635240181672039">"पठाउनुहोस्"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"मेटाउनुहोस्"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"यस सन्देश मेटाउने हो?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"यो कार्य पूर्ववत् पार्न सकिँदैन।"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"मेटाउनुहोस्"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other"> यी वार्तालापहरू मेटाउने हो?</item>
-      <item quantity="one"> यो वार्तालाप मेटाउने हो?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"मेटाउनुहोस्"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"रद्द गर्नुहोस्"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"प्रापक"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"बहु तस्बिर चयन गर्नुहोस्"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"चयन यकिन गर्नुहोस्"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"अडियो रेकर्ड गर्न सकिँदैन। पुन: प्रयास गर्नुहोस्।"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"अडियो बजाउन सकिएन। पुन: प्रयास गर्नुहोस्।"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"अडियो सुरक्षित गर्न सकेन। फेरी प्रयास गर्नुहोस्।"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"छुनुहोस् र होल्ड गर्नुहोस्"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"चित्र"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ध्वनि क्लिप"</string>
-    <string name="notification_video" msgid="4331423498662606204">"भिडियो"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"सम्पर्क कार्ड"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"डाउनलोड गर्नुहोस्"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS मार्फत जवाफ दिनुहोस्"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS मार्फत जवाफ दिनुहोस्"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"जवाफ पठाउनुहोस्"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> सहभागीहरू</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> सहभागी</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"म"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"सम्पर्क अवरुद्ध; अभिलेख राखियो"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"सम्पर्क खुल्ला गरियो &amp;amp अभिलेख हटाइयो"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g>अभिलेख गरियो"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> अभिलेख हटाउनुहोस्"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"सूचनाहरू निष्क्रिय पारिए"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"सूचनाहरू सक्रिय पारिए"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"सबै ठीक छ। पुन: पठाउन छुनुहोस्।"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"सन्देश प्रवाह सफलतापूर्वक पूर्वनिर्धारित SMS अनुप्रयोगको रूपमा सेट भयो।"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other"> संलग्नकहरू खारेज गर्नुहोस्</item>
-      <item quantity="one"> संलग्नक खारेज गर्नुहोस्</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"अडियो संलग्नक"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"अडियो संलग्नक प्ले गर्नुहोस्"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"पज गर्नुहोस्"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> बाट प्राप्त सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>।"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> बाट विफल सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> बाट सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> मा नपठाइएको सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> मा सन्देश पठाउँदै: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> मा विफल सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> मा सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> बाट विफल सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> बाट सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> मा नपठाइएको सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> मा सन्देश पठाउँदै: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> मा विफल सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> मा सन्देश: <xliff:g id="MESSAGE">%2$s</xliff:g>. समय: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"असफल सन्देश। पुन: प्रयास गर्न छुनुहोस्।"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> सँग कुराकानी"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"विषय मेट्नुहोस्"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"भिडियो खिच्नुहोस्"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"स्थिर छाँया लिदै"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"फोटो लिनुहोस्"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"भिडियो रेकर्ड सुरु गर्नुहोस्"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"पूरा पर्दा क्यामेरा  खोल्नुहोस्"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"अगाडि र पछाडि क्यामेरा बीच बदल्नुहोस्"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"भिडियो रेकर्ड गर्न र संलग्न रोक्नुहोस्"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"भिडियो रेकर्ड रोक्नुहोस्"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"सन्देश प्रवाह तस्बिरहरू"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> तस्बिरहरू \"<xliff:g id="ALBUMNAME_3">%s</xliff:g> \" एल्बममा सुरक्षित गरियो</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> तस्बिर \"<xliff:g id="ALBUMNAME_1">%s</xliff:g> \" एल्बममा सुरक्षित गरियो</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> भिडियोहरू \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" एल्बममा सुरक्षित गरियो</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> भिडियो \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" एल्बममा सुरक्षित गरियो</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> संलग्नकहरू \" <xliff:g id="ALBUMNAME_3">%s</xliff:g> \" एल्बममा सुरक्षित गरियो</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> संलग्नक \" <xliff:g id="ALBUMNAME_1">%s</xliff:g> \" एल्बममा सुरक्षित गरियो</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> संलग्नकहरू \"डाउनलोडहरू\" मा सुरक्षित गरियो</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> संलग्नक \"डाउनलोडहरू\" मा सुरक्षित गरियो</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> संलग्नकहरू सुरक्षित गरियो</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> संलग्नक सुरक्षित गरियो</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"> <xliff:g id="QUANTITY_1">%d</xliff:g> संलग्नकहरू सुरक्षित गर्न सकेन</item>
-      <item quantity="one"> <xliff:g id="QUANTITY_0">%d</xliff:g> संलग्नक सुरक्षित गर्न सकेन</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"संलग्न MMS सुरक्षित गरियो"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"सेटिङहरू"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"अभिलेख बनाइयो"</string>
-    <string name="action_close" msgid="1840519376200478419">"बन्द गर्नुहोस्"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"उन्नत"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"डिबग"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"सूचनाहरू"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"आवाज"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"मौन"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"कम्पन गर्नुहोस्"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"अवरूद्ध गरियो"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS वितरण प्रतिवेदनहरू"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"तपाईँले पठाउनु हुने हरेक SMS को लागि पुगेको खबर अनुरोध गर्नुहोस्"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"स्वत:प्राप्ति"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS सन्देशहरु स्वत: रूपमा पुनः प्राप्त गर्नुहोस्"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"रोमिङ स्वतः पुनः प्राप्ति"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"रोमिङमा हुँदा MMS स्वचालित रूपमा प्राप्त गर्नुहोस्"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"समूहिक सन्देश पठाइँदै"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"जब त्यहाँ बहुप्राप्तकर्ताहरू हुन्छन् तब सन्देश पठाउनको लागि MMS प्रयोग गर्नुहोस्।"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"पूर्वनिर्धारित SMS अनुप्रयोग"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"पूर्वनिर्धारित SMS अनुप्रयोग"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"तपाईँको फोन नम्बर"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"अज्ञात"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"बाहिर जाने सन्देशका लागि ध्वनिहरू"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS फाल्नुहोस्"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"प्राप्त भएको MMS अप्रशोधित डेटा बाह्य भण्डारण फाइलमा फाल्नुहोस्"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS फाल्दिनुहोस्"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"प्राप्त भएको MMS अप्रशोधित डेटा बाह्य भण्डारण फाइलमा फाल्नुहोस्"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"ताररहित सतर्कताहरू"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"सन्देश विकल्पहरू"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"पाठ प्रतिलिपि गर्नुहोस्"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"विवरणहरू हेर्नुहोस्"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"मेटाउनुहोस्"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"फर्वार्ड गर्नुहोस्"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"सन्देश विवरणहरू"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"प्रकार: "</string>
-    <string name="text_message" msgid="7415419755252205721">"पाठ सन्देश"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"मल्टिमिडिया सन्देश"</string>
-    <string name="from_label" msgid="1947831848146564875">"प्रेषक: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"प्रापक: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"पठाइयो: "</string>
-    <string name="received_label" msgid="4442494712757995203">"प्राप्त: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"विषय: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"आकार: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"प्राथमिकता: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"उच्च"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"सामान्य"</string>
-    <string name="priority_low" msgid="7398724779026801851">"कम"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"प्रेषकको ठेगाना लुकेको"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"संलग्नहरू लोड गर्दा सन्देश पठाउन सक्दैन।"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"संलग्नक लोड गर्न सकिएन। पुन: प्रयास गर्नुहोस्।"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"नेटवर्क तयार छैन। पुन: प्रयास गर्नुहोस्।"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"पाठ मेट्नुहोस्"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"पाठ र संख्या बीच प्रविष्टि गर्न स्विच गर्नुहोस्"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"थप सहभागी थप्नुहोस्"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"सहभागीहरूको पुष्टि गर्नुहोस्"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"नयाँ कुराकानी सुरू गर्नुहोस्"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"यो वस्तु चयन गर्नुहोस्"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"भिडियो चलाउनुहोस्"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"मानिस र विकल्पहरू"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"डिबग"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"मानिसहरू र विकल्पहरु"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"सामान्य"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"यस कुराकानीमा मानिसहरू"</string>
-    <string name="action_call" msgid="6596167921517350362">"कल गर्नुहोस्"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"सन्देश पठाउनुहोस्"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"सन्देश पठाउनुहोस्&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&amp;gt बाट"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other"> तस्बिरहरू पठाउनुहोस्</item>
-      <item quantity="one"> तस्बिर पठाउनुहोस्</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other"> अडियोहरू पठाउनुहोस्</item>
-      <item quantity="one"> अडियो पठाउनुहोस्</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other"> भिडियोहरू पठाउनुहोस्</item>
-      <item quantity="one"> भिडियो पठाउनुहोस्</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other"> सम्पर्क कार्डहरू पठाउनुहोस्</item>
-      <item quantity="one"> सम्पर्क कार्ड पठाउनुहोस्</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other"> संलग्नक पठाउनुहोस्</item>
-      <item quantity="one"> संलग्नक पठाउनुहोस्</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> संलग्नकहरू पठाउनको लागि तयार</item>
-      <item quantity="one">एउटा संलग्नक पठाउनको लागि तयार</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"प्रतिक्रिया पठाउनुहोस्"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Store मा हेर्नुहोस्"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"संस्करण जानकारी"</string>
-    <!-- String.format failed for translation -->
-    <!-- no translation found for subtitle_format_for_version_number (446082111129170749) -->
-    <skip />
-    <string name="menu_license" msgid="1157954180701135202">"खुला स्रोत इजाजतपत्रहरू"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"अधिसूचनाहरू"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"संलग्नकको सीमा पुग्यो"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"संलग्नक लोड गर्न असफल।"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"सम्पर्कहरूमा थप्नुहुन्छ?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"सम्पर्क थप्नुहोस्"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"विषय"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"विषय: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"सम्पर्क कार्ड लोड गर्दै"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"सम्पर्क कार्ड लोड गर्न सकिएन"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"सम्पर्क कार्ड हेर्नुहोस्"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> सम्पर्कहरू</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> सम्पर्क</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"सम्पर्क कार्डहरू"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"जन्मदिन"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"टिप्पणीहरू"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"सन्देश फर्वार्ड गर्नुहोस्"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"जवाफ पठाउनुहोस्"</string>
-    <string name="plus_one" msgid="9010288417554932581">"‌+१"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS असक्षम गरियो"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"पठाउनका लागि सन्देश प्रवाहलाई पूर्वनिर्धारित SMS अनुप्रयोगको रूपमा सेट गर्नुहोस्"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"सन्देश प्रवाहलाई पूर्वनिर्धारित SMS अनुप्रयोगको रूपमा सेट गर्नुहोस्"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"परिवर्तन गर्नुहोस्"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"सन्देशहरू प्राप्त गर्न, सन्देश प्रवाहलाई पूर्वनिर्धारित SMS अनुप्रयोगको रूपमा सेट गर्नुहोस्"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS सन्देशहरू पठाउनको लागि मान्यता प्राप्त SIM चयन गरिएको छैन।"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"यो अनुप्रयोग उपकरण मालिकद्वारा अनुमति छैन।"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ठीक छ"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"कुराकानीमा धेरै सहभागीहरू"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">अमान्य सम्पर्कहरू</item>
-      <item quantity="one"> अमान्य सम्पर्क</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"क्यामेराको तस्बिर लोड गर्न सकिएन"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"तपाईँ: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"मस्यौदा"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"तपाईँ नयाँ कुराकानी सुरु भएपछि, तपाईँ यसलाई यहाँ सूचीबद्ध देख्नुहुने छ"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"अभिलेख कुराकानी यहाँ देखा पर्नेछ"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"कुराकानीहरू लोड हुँदै..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"तस्बिर"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"अडियो क्लिप"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"भिडियो"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"सम्पर्क कार्ड"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"अनडु गर्नुहोस्"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"पुनःप्रयास गर्नुहोस्"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"सम्पर्क नाम वा फोन नम्बर प्रविष्ट गरी नयाँ सन्देश सुरु गर्नुहोस्"</string>
-    <string name="action_block" msgid="9032076625645190136">"रोक्नुहोस्"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"अवरुद्ध <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"अनब्लक <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"अवरुद्ध गर्नुस् <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"तपाईँ यो नम्बरबाट सन्देश प्राप्त गरिरहनु हुनेछ तर तपाईँलाई सूचीत गरिने छैन। यो कुराकानीलाई संग्रह गरिने छ।"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"अवरुद्ध सम्पर्कहरू"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"UNBLOCK"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"अवरुद्ध सम्पर्कहरू"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"कागजात लाइब्रेरीबाट तस्बिर छान्नुहोस्"</string>
-    <string name="sending_message" msgid="6363584950085384929">"सन्देश पठाउँदै"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"सन्देश पठाइयो"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"सेलुलर डेटा बन्द छ। आफ्नो सेटिङ जाँच गर्नुहोस्।"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"हवाइजहाज मोडमा सन्देश पठाउन सक्नुहुन्‍न्"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"सन्देश पठाउन सकिएन"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"सन्देश डाउनलोड गरियो"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"सेलुलर डाटा बन्द गरिएको छ। आफ्नो सेटिङहरू जाँच्नुहोस्।"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"हवाइजहाज मोडमा सन्देशहरू डाउनलोड गर्न सक्दैन"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"सन्देश डाउनलोड गर्न सकिएन"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"शून्य"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"एक"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"दुई"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"तीन"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"चार"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"पाँच"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"छ"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"सात"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"आठ"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"नौ"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> मार्फत सन्देश पठाउन सक्दैन, त्रुटि <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"अज्ञात वाहकमार्फत सन्देश पठाउन सक्दैन, त्रुटि <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"फर्वाड गर्नुहोस्: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"सन्देश पठाइएको छैन: सञ्जालमा सेवा सक्रिय छैन"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"सन्देश पठाइएको छैन: अवैध गन्तव्य ठेगाना"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"सन्देश पठाइएको छैन: अमान्य सन्देश"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"सन्देश पठाइएको छैन: असमर्थित सामाग्री"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"सन्देश पठाइएको छैन: असमर्थित सन्देश"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"सन्देश पठाइएन: निकै ठूलो छ"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"नयाँ सन्देश"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"हेर्नुहोस्"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"तस्बिर"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"उपयुक्त अनुप्रयोग फेला पार्न सकिएन"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"प्राप्तकर्ता हटाउनुहोस्"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"नयाँ सन्देश"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"रद्द गर्नुहोस्"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"पहुँच बिन्दु सम्पादन गर्नुहोस्"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"सेट गरेको छैन"</string>
-    <string name="apn_name" msgid="1572691851070894985">"नाम"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS प्रोक्सी"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS पोर्ट"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN प्रकार"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN मेटाउनुहोस्"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"नयाँ APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"सुरक्षित गर्नुहोस्"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"त्याग्नुहोस्"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"नाम क्षेत्र खाली हुन सक्दैन।"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN खाली हुन सक्दैन।"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC क्षेत्र कम्तिमा ३ अङ्कको हुनु पर्छ।"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC क्षेत्रमा २ वा ३ अंकहरू हुनु पर्दछ।"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"पूर्वनिर्धारित APN सेटिङ्हरू पुनःप्राप्त गर्दै।"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"पूर्वनिर्धारितमा पुनःसेट गर्नुहोस्"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"पूर्वनिर्धारित APN सेटिङ्हरू पुनः सेट गर्ने काम पूरा भयो।"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"शीर्षक विहिन"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"पहुँच बिन्दु नामहरू"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"नयाँ APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"पहुँच बिन्दु नामको सेटिङ्हरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"क्लिपबोर्डमा प्रतिलिपि गर्ने?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"प्रतिलिपि गर्नुहोस्"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> लाई"</string>
-    <string name="general_settings" msgid="5409336577057897710">"सामान्य"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"उन्नत"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"साधारण सेटिङ्हरू"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"उन्नत सेटिङ्हरू"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"सबै प्रापकलाई व्यक्तिगत SMS सन्देशहरू पठाउनुहोस्। केवल तपाईँले कुनै पनि उत्तर प्राप्त गर्नुहुने छ"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"सबै प्रापकलाई एउटा एकल MMS पठाउनुहोस्"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"अज्ञात संख्या"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"नयाँ सन्देश"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"नयाँ सन्देश।"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"सिम चयनकर्ता"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> चयन गरियो, SIM चयनकर्ता"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"विषय सम्पादन गर्नुहोस्"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"सिम चयन गर्नुहोस् वा विषय सम्पादन गर्नुहोस्"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"अडियो रेकर्ड गर्न छुनुहोस् र होल्ड गर्नुहोस्"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"नयाँ कुराकानी सुरू गर्नुहोस्"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"सन्देश प्रवाह"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"सन्देश प्रवाह सूची"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"सन्देश प्रवाह"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"नयाँ सन्देश"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"कुराकानी सूची"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"कुराकानीहरू लोड हुँदै..."</string>
-    <string name="loading_messages" msgid="3894765818932489665">"सन्देशहरू लोड हुँदै"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"थप कुराकानीहरू हेर्नुहोस्"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"थप सन्देशहरू हेर्नुहोस्"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"कुराकानी मेटिएको छ"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"वार्तालाप मेटियो। एउटा फरक सन्देश प्रवाह वार्तालाप देखाउन छुनुहोस्"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"अवरूद्ध गरियो"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"अवरोध हटाइयो"</string>
-    <string name="db_full" msgid="8459265782521418031">"भण्डारण ठाउँ कम छ। केही डाटा हराउन सक्छ।"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"संलग्नकहरू चयन गर्नुहोस्"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"चयन पुष्टि गर्नुहोस्"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> चयन गरियो"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"कृपया एक वा बढी संलग्नकहरू हटाउनुहोस् र फेरि प्रयास गर्नुहोस्।"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"तपाईं आफ्नो सन्देश पठाउन प्रयास गर्न सक्नुहुन्छ, तर तपाईंले एक वा बढी संलग्नकहरू नहटाएसम्म यो डेलिभर नहुन सक्छ।"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"तपाईँले  प्रति सन्देश एउटा मात्र भिडियो पठाउन सक्नुहुन्छ। अतिरिक्त भिडियो हटाउनुहोस् र फेरि प्रयास गर्नुहोस्।"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"संलग्नक लोड गर्न सन्देश प्रवाह असफल भयो।"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"जसरी  भए पनि पठाउनुहोस्"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"कुराकानी सुरु गर्न सकेन"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> चयन गरियो"</string>
-</resources>
diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml
deleted file mode 100644
index adfdcbe..0000000
--- a/res/values-nl/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"geen onderwerp"</item>
-    <item msgid="272485471009191934">"geenonderwerp"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ja"</item>
-    <item msgid="6049132459802288033">"Nee"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Haha"</item>
-    <item msgid="2611328818571146775">"Hartelijk dank"</item>
-    <item msgid="4881335087096496747">"Ik ga akkoord"</item>
-    <item msgid="2422296858597420738">"Mooi"</item>
-    <item msgid="4805581752819452687">"Ik ben onderweg"</item>
-    <item msgid="4746700499431366214">"Hier kom ik later op terug"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
deleted file mode 100644
index 8312dcc..0000000
--- a/res/values-nl/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Berichten"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Berichten"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Gesprek selecteren"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Instellingen"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Bericht verzenden"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Een bijlage toevoegen"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Help"</string>
-    <string name="welcome" msgid="2857560951820802321">"Welkom"</string>
-    <string name="skip" msgid="7238879696319945853">"Overslaan"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Volgende &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Volgende"</string>
-    <string name="exit" msgid="1905187380359981199">"Sluiten"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Instellingen &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Instellingen"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Berichten heeft toegang tot Sms, Telefoon en Contacten nodig."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"U kunt rechten wijzigen via \'Instellingen\' &gt; \'Apps\' &gt; \'Berichten\' &gt; \'Rechten\'."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"U kunt rechten wijzigen via \'Instellingen\' &gt; \'Apps\' &gt; \'Berichten\' &gt; \'Rechten\'."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Veelgebruikt"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Alle contacten"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Verzenden naar <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Foto\'s of video vastleggen"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Afbeeldingen kiezen op dit apparaat"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Audio opnemen"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Foto kiezen"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Het medium is geselecteerd."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Het medium is gedeselecteerd."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> geselecteerd"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"afbeelding <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"afbeelding"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Audio opnemen"</string>
-    <string name="action_share" msgid="2143483844803153871">"Delen"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Zojuist"</string>
-    <string name="posted_now" msgid="867560789350406701">"Nu"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min.</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min.</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> uur</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> uur</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dagen</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> dag</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> weken</item>
-      <item quantity="one">één week</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> maanden</item>
-      <item quantity="one">één maand</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> jaar</item>
-      <item quantity="one">één jaar</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Berichtklasse 0"</string>
-    <string name="save" msgid="5081141452059463572">"Opslaan"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Er is weinig ruimte vrij op het apparaat. Oudere berichten worden automatisch verwijderd om ruimte vrij te maken."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Opslagruimte is bijna vol"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Berichten verzendt of ontvangt mogelijk geen berichten totdat er meer ruimte beschikbaar is op uw apparaat."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Weinig opslagruimte voor sms-berichten beschikbaar. Je moet mogelijk berichten verwijderen."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Uw telefoonnummer bevestigen"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Deze eenmalige stap zorgt ervoor dat Berichten uw groepsberichten correct aflevert."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefoonnummer"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Alle berichten met media verwijderen"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Berichten ouder dan <xliff:g id="DURATION">%s</xliff:g> verwijderen"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Berichten ouder dan <xliff:g id="DURATION">%s</xliff:g> automatisch verwijderen"</string>
-    <string name="ignore" msgid="7063392681130898793">"Negeren"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Alle berichten met media verwijderen?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Berichten ouder dan <xliff:g id="DURATION">%s</xliff:g> verwijderen?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Berichten ouder dan <xliff:g id="DURATION">%s</xliff:g> verwijderen en automatisch verwijderen inschakelen?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> zei"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"U zei"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Bericht van <xliff:g id="SENDER">%s</xliff:g>:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"U heeft een bericht verzonden"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Verzenden…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Niet verzonden. Tik om het opnieuw te proberen."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Niet verzonden. Nieuwe poging…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Opnieuw verzenden of verwijderen"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Bel de hulpdiensten. Uw sms kan momenteel niet worden afgeleverd."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Mislukt"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nieuw mms-bericht downloaden"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nieuw mms-bericht"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Kan niet downloaden"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Tik voor nieuwe poging"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Tik om te downloaden"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Downloaden of verwijderen"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Downloaden..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Bericht verlopen of niet beschikbaar"</string>
-    <string name="mms_info" msgid="3402311750134118165">"grootte: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, verloopt: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Kan niet verzenden. Ontvanger niet geldig."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Service niet geactiveerd in netwerk"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Kan niet verzenden wegens een netwerkprobleem"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Bericht verlopen of niet beschikbaar"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Geen onderwerp)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Onbekende afzender"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Bezorgd"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Kan bericht <xliff:g id="SUBJECT">%1$s</xliff:g> niet downloaden van <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Kan databasebewerking niet voltooien wegens onvoldoende geheugen"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Bericht niet verzonden"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Sommige berichten niet verzonden in Berichten"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> berichten in <xliff:g id="CONVERSATIONS">%d</xliff:g> gesprekken</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> berichten in één gesprek</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Bericht niet gedownload"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Sommige berichten zijn niet gedownload in Berichten"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> berichten in <xliff:g id="CONVERSATIONS">%d</xliff:g> gesprekken</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> berichten in één gesprek</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Bericht naar <xliff:g id="NUMBER">%1$s</xliff:g> niet verzonden"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Bel de hulpdiensten. Uw sms aan <xliff:g id="NUMBER">%1$s</xliff:g> kan momenteel niet worden afgeleverd."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nieuwe berichten</item>
-      <item quantity="one">Nieuw bericht</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Starten"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Camera niet beschikbaar"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Camera niet beschikbaar"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Video-opname niet beschikbaar"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Kan media niet opslaan"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Kan geen foto maken"</string>
-    <string name="back" msgid="1477626055115561645">"Terug"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Gearchiveerd"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Verwijderen"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archiveren"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Terugzetten uit archief"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Meldingen uitschakelen"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Meldingen inschakelen"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Contact toevoegen"</string>
-    <string name="action_download" msgid="7786338136368564146">"Downloaden"</string>
-    <string name="action_send" msgid="377635240181672039">"Verzenden"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Verwijderen"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Dit bericht verwijderen?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Deze actie kan niet ongedaan worden gemaakt."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Verwijderen"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Deze gesprekken verwijderen?</item>
-      <item quantity="one">Dit gesprek verwijderen?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Verwijderen"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Annuleren"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Aan"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Meerdere afbeeldingen selecteren"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Selectie bevestigen"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Kan audio niet opnemen. Probeer het opnieuw."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Kan audio niet afspelen. Probeer het opnieuw."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Kan audio niet opslaan. Probeer het opnieuw."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Blijven aanraken"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Afbeelding"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audioclip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Visitekaartje"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Downloaden"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Reageren via sms"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Reageren via mms"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Beantwoorden"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> deelnemers</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> deelnemer</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ik"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contact geblokkeerd en gearchiveerd"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Blokkering van contact opgeheven en teruggezet uit archief"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> gearchiveerd"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> teruggezet uit archief"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Meldingen uitgeschakeld"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Meldingen ingeschakeld"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Alles is ingesteld. Tik nogmaals op \'Verzenden\'."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Berichten is ingesteld als de standaard sms-app"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Bijlagen verwijderen</item>
-      <item quantity="one">Bijlage verwijderen</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Audiobijlage"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Audiobijlage afspelen"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Onderbreken"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Bericht van <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Mislukt bericht van <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Bericht van <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Niet-verzonden bericht aan <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Bericht verzenden naar <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Mislukt bericht aan <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Bericht aan <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Mislukt bericht van <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Bericht van <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Niet-verzonden bericht aan <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Bericht verzenden naar <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Mislukt bericht aan <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Bericht aan <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tijd: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Bericht mislukt. Tik om het opnieuw te proberen."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Gesprek met <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Onderwerp verwijderen"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Video opnemen"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Een stilstaand beeld opnemen"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Foto maken"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Video opnemen"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Overschakelen naar camera op volledig scherm"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Schakelen tussen camera aan voorzijde en camera aan achterzijde"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Opname stoppen en video bijvoegen"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Video-opname stoppen"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Foto\'s in Berichten"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> foto\'s opgeslagen in het album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> foto opgeslagen in het album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> video\'s opgeslagen in het album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video opgeslagen in het album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> bijlagen opgeslagen in het album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bijlage opgeslagen in het album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> bijlagen opgeslagen in \"Downloads\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bijlage opgeslagen in \"Downloads\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> bijlagen opgeslagen</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bijlage opgeslagen</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Kan <xliff:g id="QUANTITY_1">%d</xliff:g> bijlagen niet opslaan</item>
-      <item quantity="one">Kan <xliff:g id="QUANTITY_0">%d</xliff:g> bijlage niet opslaan</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Opgeslagen mms-bijlage"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Instellingen"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Gearchiveerd"</string>
-    <string name="action_close" msgid="1840519376200478419">"Sluiten"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"Mms"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Geavanceerd"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Fouten opsporen"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Meldingen"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Geluid"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Stil"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Trillen"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Geblokkeerd"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Bezorgingsrapporten voor sms"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Ontvangstbevestiging vragen voor elke verzonden sms"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automatisch ophalen"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Mms-berichten automatisch ophalen"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Automatisch ophalen tijdens roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Automatisch MMS ophalen tijdens roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Groepsberichten"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Mms gebruiken om één bericht te verzenden wanneer er meerdere ontvangers zijn"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Standaard sms-app"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Standaard sms-app"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Uw telefoonnummer"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Onbekend"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Geluiden voor uitgaand bericht"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Sms dumpen"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Onbewerkte gegevens voor ontvangen sms\'jes in een extern opslagbestand dumpen"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Mms dumpen"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Onbewerkte gegevens voor ontvangen mms\'jes in een extern opslagbestand dumpen"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Waarschuwingen voor draadloos"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Berichtopties"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Tekst kopiëren"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Details weergeven"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Verwijderen"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Doorsturen"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Berichtdetails"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Type: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Sms-bericht"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mms-bericht"</string>
-    <string name="from_label" msgid="1947831848146564875">"Van: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Aan: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Verzonden: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Ontvangen: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Onderwerp: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Grootte: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioriteit: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"Simkaart: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Hoog"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normaal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Laag"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"Simkaart <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Verborgen adres verzender"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Kan bericht niet verzenden terwijl bijlagen worden geladen."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Kan bijlage niet laden. Probeer het opnieuw."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Netwerk is niet gereed. Probeer het opnieuw."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Tekst verwijderen"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Schakelen tussen letters en cijfers invoeren"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Meer deelnemers toevoegen"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Deelnemers bevestigen"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Nieuw gesprek starten"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Dit item selecteren"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Video afspelen"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Mensen en opties"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Fouten opsporen"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Mensen en opties"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Algemeen"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Mensen in dit gesprek"</string>
-    <string name="action_call" msgid="6596167921517350362">"Bellen"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Bericht verzenden"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Bericht verzenden&lt;br/&gt;&lt;small&gt;via <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Foto\'s verzenden</item>
-      <item quantity="one">Foto verzenden</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Audio-opnamen verzenden</item>
-      <item quantity="one">Audio-opname verzenden</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Video\'s verzenden</item>
-      <item quantity="one">Video verzenden</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Contactkaarten verzenden</item>
-      <item quantity="one">Contactkaart verzenden</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Bijlagen verzenden</item>
-      <item quantity="one">Bijlage verzenden</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> bijlagen klaar voor verzenden</item>
-      <item quantity="one">Eén bijlage klaar voor verzenden</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Feedback verzenden"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Bekijken in de Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Versie-informatie"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versie %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Open-sourcelicenties"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Meldingen"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Bijlagelimiet bereikt"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Kan bijlage niet laden."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Toevoegen aan contacten?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Contact toevoegen"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Onderwerp"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Onderwerp: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Contactkaart laden"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kan visitekaartje niet laden"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Contactkaart weergeven"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacten</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Visitekaartjes"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Verjaardag"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notities"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Bericht doorsturen"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Beantwoorden"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Sms uitgeschakeld"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Stel Berichten in als standaard sms-app om berichten te verzenden"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Berichten instellen als standaard sms-app"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Wijzigen"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Stel Berichten in als standaard sms-app om berichten te ontvangen"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Geen voorkeurs-simkaart geselecteerd voor het verzenden van sms\'jes"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Deze app is niet toegestaan door de eigenaar van het apparaat."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Te veel deelnemers in een gesprek"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Ongeldige contacten</item>
-      <item quantity="one">Ongeldig contact</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Kan camera-afbeelding niet laden"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"U: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Concept"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Zodra u een nieuw gesprek start, wordt dit hier vermeld"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Gearchiveerde gesprekken worden hier weergegeven"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Gesprekken laden..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Afbeelding"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audioclip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Visitekaartje"</string>
-    <string name="mms_text" msgid="1528791558806015806">"Mms"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Ongedaan maken"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Opnieuw proberen"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Geef de naam of het telefoonnummer van een contact op om een nieuw bericht te starten"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokkeren"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> blokkeren"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Blokkering van <xliff:g id="DESTINATION">%s</xliff:g> opheffen"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> blokkeren?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"U blijft berichten van dit nummer ontvangen, maar krijgt geen meldingen meer. Dit gesprek wordt gearchiveerd."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Geblokkeerde contacten"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"BLOKKERING OPHEFFEN"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Geblokkeerde contacten"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Afbeelding kiezen uit documentbibliotheek"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Bericht wordt verzonden"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Bericht verzonden"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobiele gegevens zijn ingeschakeld. Controleer uw instellingen."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Kan geen berichten verzenden in vliegtuigmodus"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Kan bericht niet verzenden"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Bericht gedownload"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobiele gegevens zijn uitgeschakeld. Controleer uw instellingen."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Kan geen berichten downloaden in de vliegtuigmodus"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Bericht kan niet worden gedownload"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nul"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Eén"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Twee"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Drie"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Vier"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Vijf"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Zes"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Zeven"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Acht"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Negen"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Kan bericht niet verzenden via <xliff:g id="CARRIERNAME">%1$s</xliff:g>, fout <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Kan bericht niet verzenden via onbekende provider, fout <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Bericht niet verzonden: service niet geactiveerd in netwerk"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Bericht niet verzonden: ongeldig bestemmingsadres"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Bericht niet verzonden: ongeldig bericht"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Bericht niet verzonden: niet-ondersteunde inhoud"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Bericht niet verzonden: niet-ondersteund bericht"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Bericht niet verzonden: te groot"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nieuw bericht"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Weergeven"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Afbeelding"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Kan geen geschikte applicatie vinden"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Ontvanger verwijderen"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nieuw bericht"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Annuleren"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Toegangspunt bewerken"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Niet ingesteld"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Naam"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS-proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS-poort"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN-type"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN verwijderen"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nieuwe APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Opslaan"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Verwijderen"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Het veld \'Naam\' mag niet leeg zijn."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"De APN mag niet leeg zijn."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC-veld moet drie cijfers bevatten."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC-veld moet twee of drie cijfers bevatten."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Standaard-APN-instellingen herstellen."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Standaardinstellingen herstellen"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Herstellen van standaard-APN-instellingen voltooid."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Naamloos"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Namen toegangspunten"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN\'s"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nieuwe APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Instellingen voor toegangspuntnamen zijn niet beschikbaar voor deze gebruiker"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Kopiëren naar klembord?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopiëren"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"naar <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Algemeen"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Geavanceerd"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Algemene instellingen"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Geavanceerde instellingen"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"Sim van \'<xliff:g id="SIM_NAME">%s</xliff:g>\'"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Afzonderlijke sms\'jes verzenden naar alle ontvangers. U bent de enige die eventuele reacties ontvangt"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Eén mms verzenden naar alle ontvangers"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Onbekend nummer"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nieuw bericht"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nieuw bericht."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Simkaart selecteren"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> geselecteerd, simkaartkiezer"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Onderwerp bewerken"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Simkaart selecteren of onderwerp bewerken"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Blijf aanraken om audio op te nemen"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Nieuw gesprek starten"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Berichten"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Lijst in Berichten"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Berichten"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nieuw bericht"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Gesprekslijst"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Gesprekken laden"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Berichten laden"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Meer gesprekken bekijken"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Meer berichten bekijken"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Gesprek verwijderd"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Gesprek verwijderd. Tik om een ander Berichten-gesprek weer te geven"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Geblokkeerd"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Blokkering opgeheven"</string>
-    <string name="db_full" msgid="8459265782521418031">"Er is weinig opslagruimte beschikbaar. Er kunnen gegevens verloren gaan."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Bijlagen selecteren"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Selectie bevestigen"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> geselecteerd"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Verwijder een of meer bijlagen en probeer het opnieuw."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"U kunt proberen uw bericht te verzenden, maar het bericht wordt mogelijk niet bezorgd, tenzij u een of meer bijlagen verwijdert."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"U kunt slechts één video verzenden per bericht. Verwijder extra video\'s en probeer het opnieuw."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Berichten kan de bijlage niet laden."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Toch verzenden"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Kan gesprek niet starten"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> geselecteerd"</string>
-</resources>
diff --git a/res/values-pa/arrays.xml b/res/values-pa/arrays.xml
deleted file mode 100644
index 1cf23e9..0000000
--- a/res/values-pa/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"ਕੋਈ ਵਿਸ਼ਾ ਨਹੀਂ"</item>
-    <item msgid="272485471009191934">"ਕੋਈ ਵਿਸ਼ਾ ਨਹੀਂ"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"ਹਾਂ"</item>
-    <item msgid="6049132459802288033">"ਨਹੀਂ"</item>
-    <item msgid="3084376867445867895">"ਠੀਕ"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"ਧੰਨਵਾਦ"</item>
-    <item msgid="4881335087096496747">"ਮੈਂ ਸਹਿਮਤ ਹਾਂ"</item>
-    <item msgid="2422296858597420738">"ਵਧੀਆ"</item>
-    <item msgid="4805581752819452687">"ਰਸਤੇ ਵਿੱਚ ਹਾਂ"</item>
-    <item msgid="4746700499431366214">"ਠੀਕ, ਮੈਂ ਤੁਹਾਨੂੰ ਬਾਅਦ ਵਿੱਚ ਸੰਪਰਕ ਕਰਾਂਗਾ"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
deleted file mode 100644
index 3ccc046..0000000
--- a/res/values-pa/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Messaging"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Messaging"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"ਗੱਲਬਾਤ ਚੁਣੋ"</string>
-    <string name="action_settings" msgid="1329008122345201684">"ਸੈਟਿੰਗਾਂ"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"ਸੁਨੇਹਾ ਭੇਜੋ"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"ਇੱਕ ਅਟੈਚਮੈਂਟ ਜੋੜੋ"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"ਸਹਾਇਤਾ"</string>
-    <string name="welcome" msgid="2857560951820802321">"ਸੁਆਗਤ ਹੈ"</string>
-    <string name="skip" msgid="7238879696319945853">"ਛੱਡੋ"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"ਅਗਲਾ &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"ਅਗਲਾ"</string>
-    <string name="exit" msgid="1905187380359981199">"ਬਾਹਰ ਜਾਓ"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"ਸੈਟਿੰਗਾਂ &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"ਸੈਟਿੰਗਾਂ"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Messaging ਨੂੰ SMS, ਫੋਨ ਅਤੇ ਸੰਪਰਕਾਂ ਲਈ ਅਨੁਮਤੀ ਦੀ ਲੋੜ ਹੈ।"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ &gt; ਐਪਸ &gt; Messaging &gt; ਅਨੁਮਤੀਆਂ ਵਿੱਚ ਅਨੁਮਤੀਆਂ ਬਦਲ ਸਕਦੇ ਹੋ।"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ, ਐਪਸ, Messaging, ਅਨੁਮਤੀਆਂ ਵਿੱਚ ਅਨੁਮਤੀਆਂ ਬਦਲ ਸਕਦੇ ਹੋ।"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"ਫ੍ਰੀਕਵੈਂਟਸ"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"ਸਾਰੇ ਸੰਪਰਕ"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> ਨੂੰ ਭੇਜੋ"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"ਤਸਵੀਰਾਂ ਜਾ ਵੀਡੀਓ ਕੈਪਚਰ ਕਰੋ"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"ਇਸ ਡਿਵਾਈਸ ਤੋਂ ਚਿੱਤਰ ਚੁਣੋ"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ਔਡੀਓ ਰਿਕਾਰਡ ਕਰੋ"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ਫੋਟੋ ਚੁਣੋ"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"ਮੀਡੀਆ ਚੁਣਿਆ ਗਿਆ ਹੈ।"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"ਮੀਡੀਆ ਅਚੋਣਵਾਂ ਕੀਤਾ ਗਿਆ ਹੈ।"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> ਚੁਣਿਆ ਗਿਆ"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"ਚਿੱਤਰ <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"ਚਿੱਤਰ"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ਔਡੀਓ ਰਿਕਾਰਡ ਕਰੋ"</string>
-    <string name="action_share" msgid="2143483844803153871">"ਸ਼ੇਅਰ ਕਰੋ"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ਬਿਲਕੁਲ ਹੁਣੇ"</string>
-    <string name="posted_now" msgid="867560789350406701">"ਹੁਣ"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ਮਿੰਟ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ਮਿੰਟ</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ਘੰਟੇ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ਘੰਟੇ</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ਦਿਨ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ਦਿਨ</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਹਫ਼ਤੇ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਹਫ਼ਤੇ</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਮਹੀਨੇ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਮਹੀਨੇ</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਸਾਲ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਸਾਲ</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"ਕਲਾਸ 0 ਸੁਨੇਹਾ"</string>
-    <string name="save" msgid="5081141452059463572">"ਸੁਰੱਖਿਅਤ ਕਰੋ"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"ਡਿਵਾਈਸ ਵਿੱਚ ਘੱਟ ਸਪੇਸ ਹੈ। Messaging ਆਟੋਮੈਟਿਕਲੀ ਸਪੇਸ ਖਾਲੀ ਕਰਨ ਲਈ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਮਿਟਾ ਦੇਵੇਗਾ।"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"ਸਟੋਰੇਜ ਸਪੇਸ ਖ਼ਤਮ ਹੋ ਰਿਹਾ ਹੈ"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Messaging ਸੁਨੇਹੇ ਭੇਜ ਜਾਂ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰ ਸਕਦਾ ਜਦੋਂ ਤੱਕ ਕਿ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਤੇ ਹੋਰ ਸਪੇਸ ਉਪਲਬਧ ਨਾ ਹੋਵੇ।"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"ਘੱਟ SMS ਸਟੋਰੇਜ। ਤੁਹਾਨੂੰ ਸੁਨੇਹੇ ਮਿਟਾਉਣ ਦੀ ਲੋੜ ਪੈ ਸਕਦੀ ਹੈ।"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"ਆਪਣੇ ਫੋਨ ਨੰਬਰ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"ਇਹ ਵਨ-ਟਾਈਮ ਸਟੈਪ ਯਕੀਨੀ ਬਣਾਏਗਾ ਕਿ Messaging ਤੁਹਾਡੇ ਸਮੂਹ ਦੇ ਸੁਨੇਹੇ ਸਹੀ ਢੰਗ ਨਾਲ ਡਿਲੀਵਰ ਕਰੇਗਾ।"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ਫੋਨ ਨੰਬਰ"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"ਮੀਡੀਆ ਵਾਲੇ ਸਾਰੇ ਸੁਨੇਹੇ ਮਿਟਾਓ"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> ਤੋਂ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਮਿਟਾਓ"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> ਤੋਂ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਆਟੋ-ਮਿਟਾਓ"</string>
-    <string name="ignore" msgid="7063392681130898793">"ਅਣਡਿੱਠ ਕਰੋ"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"ਕੀ ਮੀਡੀਆ ਵਾਲੇ ਸਾਰੇ ਸੁਨੇਹੇ ਮਿਟਾਉਣੇ ਹਨ?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"ਕੀ <xliff:g id="DURATION">%s</xliff:g> ਤੋਂ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਮਿਟਾਉਣੇ ਹਨ?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"ਕੀ <xliff:g id="DURATION">%s</xliff:g> ਤੋਂ ਪੁਰਾਣੇ ਸੁਨੇਹੇ ਮਿਟਾਉਣੇ ਹਨ ਅਤੇ ਆਟੋ-ਮਿਟਾਓ ਨੂੰ ਚਾਲੂ ਕਰਨਾ ਹੈ?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> ਨੇ ਕਿਹਾ"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"ਤੁਸੀਂ ਕਿਹਾ"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> ਦਾ ਸੁਨੇਹਾ"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"ਤੁਸੀਂ ਇੱਕ ਸੁਨੇਹਾ ਭੇਜਿਆ"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"ਭੇਜ ਰਿਹਾ ਹੈ..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"ਨਹੀਂ ਭੇਜਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਛੋਹਵੋ।"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"ਨਹੀਂ ਭੇਜਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਹੈ..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"ਦੁਬਾਰਾ ਭੇਜੋ ਜਾਂ ਮਿਟਾਓ"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"ਕਿਰਪਾ ਕਰਕੇ ਐਮਰਜੈਂਸੀ ਸੇਵਾਵਾਂ ਨੂੰ ਇੱਕ ਵੌਇਸ ਕਾਲ ਕਰੋ। ਤੁਹਾਡਾ ਟੈਕਸਟ ਸੁਨੇਹਾ ਇਸ ਵੇਲੇ ਡਿਲੀਵਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕੇਗਾ।"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"ਅਸਫਲ"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਨਵਾਂ MMS ਸੁਨੇਹਾ"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"ਨਵਾਂ MMS ਸੁਨੇਹਾ"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ਡਾਊਨਲੋਡ ਨਹੀਂ ਕਰ ਸਕਿਆ"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਛੋਹਵੋ"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਛੋਹਵੋ"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ਡਾਊਨਲੋਡ ਕਰੋ ਜਾਂ ਮਿਟਾਓ"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"ਡਾਊਨਲੋਡ ਕਰ ਰਿਹਾ ਹੈ..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"ਸੁਨੇਹੇ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਜਾਂ ਉਪਲਬਧ ਨਹੀਂ"</string>
-    <string name="mms_info" msgid="3402311750134118165">"ਆਕਾਰ: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, ਮਿਆਦ ਪੁੱਗਣ ਦਾ ਸਮਾਂ: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"ਭੇਜ ਨਹੀਂ ਸਕਦਾ। ਪ੍ਰਾਪਤਕਰਤਾ ਪ੍ਰਮਾਣਿਕ ਨਹੀਂ ਹੈ।"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"ਨੈਟਵਰਕ ਤੇ ਸੇਵਾ ਸਕਿਰਿਆ ਨਹੀਂ ਕੀਤੀ"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"ਨੈਟਵਰਕ ਸਮੱਸਿਆ ਦੇ ਕਾਰਨ ਨਹੀਂ ਭੇਜ ਸਕਿਆ"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"ਸੁਨੇਹੇ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਜਾਂ ਉਪਲਬਧ ਨਹੀਂ"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(ਕੋਈ ਵਿਸ਼ਾ ਨਹੀਂ)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"ਅਗਿਆਤ ਭੇਜਣ ਵਾਲਾ"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"ਡਿਲੀਵਰ ਕੀਤਾ"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> ਦਾ <xliff:g id="SUBJECT">%1$s</xliff:g> ਸੁਨੇਹਾ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
-    <string name="low_memory" msgid="5300743415198486619">"ਘੱਟ ਮੈਮਰੀ ਦੇ ਕਾਰਨ ਡਾਟਾਬੇਸ ਓਪਰੇਸ਼ਨ ਪੂਰਾ ਨਹੀਂ ਕਰ ਸਕਿਆ"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਗਿਆ"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"ਕੁਝ ਸੁਨੇਹੇ Messaging ਵਿੱਚ ਨਹੀਂ ਭੇਜੇ ਗਏ ਹਨ"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"> <xliff:g id="CONVERSATIONS">%d</xliff:g> ਗੱਲਬਾਤਾਂ ਵਿੱਚ <xliff:g id="MESSAGES_1">%d</xliff:g> ਸੁਨੇਹੇ</item>
-      <item quantity="other"> <xliff:g id="CONVERSATIONS">%d</xliff:g> ਗੱਲਬਾਤਾਂ ਵਿੱਚ <xliff:g id="MESSAGES_1">%d</xliff:g> ਸੁਨੇਹੇ</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"ਸੁਨੇਹਾ ਡਾਉਨਲੋਡ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"ਕੁਝ ਸੁਨੇਹੇ Messaging ਵਿੱਚ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤੇ ਗਏ ਹਨ"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"> <xliff:g id="CONVERSATIONS">%d</xliff:g> ਗੱਲਬਾਤਾਂ ਵਿੱਚ <xliff:g id="MESSAGES_1">%d</xliff:g> ਸੁਨੇਹੇ</item>
-      <item quantity="other"> <xliff:g id="CONVERSATIONS">%d</xliff:g> ਗੱਲਬਾਤਾਂ ਵਿੱਚ <xliff:g id="MESSAGES_1">%d</xliff:g> ਸੁਨੇਹੇ</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> ਨੂੰ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਗਿਆ"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"ਕਿਰਪਾ ਕਰਕੇ ਐਮਰਜੈਂਸੀ ਸੇਵਾਵਾਂ ਨੂੰ ਇੱਕ ਵੌਇਸ ਕਾਲ ਕਰੋ। ਤੁਹਾਡਾ ਟੈਕਸਟ ਸੁਨੇਹਾ ਇਸ ਵੇਲੇ <xliff:g id="NUMBER">%1$s</xliff:g> ਨੂੰ ਡਿਲੀਵਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕੇਗਾ।"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> ਨਵੇਂ ਸੁੁਨੇਹੇ</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> ਨਵੇਂ ਸੁੁਨੇਹੇ</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"ਚਾਲੂ ਕਰੋ"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"ਕੈਮਰਾ ਉਪਲਬਧ ਨਹੀਂ"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"ਕੈਮਰਾ ਉਪਲਬਧ ਨਹੀਂ"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"ਵੀਡੀਓ ਕੈਪਚਰ ਉਪਲਬਧ ਨਹੀਂ"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"ਮੀਡੀਆ ਨੂੰ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਦਾ"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"ਤਸਵੀਰ ਨਹੀਂ ਲੈ ਸਕਦਾ"</string>
-    <string name="back" msgid="1477626055115561645">"ਪਿੱਛੇ"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"ਆਰਕਾਈਵ ਕੀਤਾ"</string>
-    <string name="action_delete" msgid="4076795795307486019">"ਮਿਟਾਓ"</string>
-    <string name="action_archive" msgid="5437034800324083170">"ਆਰਕਾਈਵ ਕਰੋ"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"ਅਨਆਰਕਾਈਵ ਕਰੋ"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"ਸੂਚਨਾਵਾਂ ਬੰਦ ਕਰੋ"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"ਸੂਚਨਾਵਾਂ ਚਾਲੂ ਕਰੋ"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"ਸੰਪਰਕ ਜੋੜੋ"</string>
-    <string name="action_download" msgid="7786338136368564146">"ਡਾਊਨਲੋਡ ਕਰੋ"</string>
-    <string name="action_send" msgid="377635240181672039">"ਭੇਜੋ"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"ਮਿਟਾਓ"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"ਕੀ ਇਹ ਸੁਨੇਹਾ ਮਿਟਾਉਣਾ ਹੈ?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"ਇਹ ਕਿਰਿਆ ਨਸ਼ਟ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ।"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"ਮਿਟਾਓ"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">ਕੀ ਇਹ ਗੱਲਬਾਤਾਂ ਮਿਟਾਉਣੀਆਂ ਹਨ?</item>
-      <item quantity="other">ਕੀ ਇਹ ਗੱਲਬਾਤਾਂ ਮਿਟਾਉਣੀਆਂ ਹਨ?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"ਮਿਟਾਓ"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"ਰੱਦ ਕਰੋ"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"ਵੱਲ"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"ਮਲਟੀਪਲ ਚਿੱਤਰ ਚੁਣੋ"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"ਚੋਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ਔਡੀਓ ਰਿਕਾਰਡ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ਔਡੀਓ ਪਲੇ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ਔਡੀਓ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"ਛੋਹਵੋ &amp; ਹੋਲਡ ਕਰੋ"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"ਤਸਵੀਰ"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ਔਡੀਓ ਕਲਿਪ"</string>
-    <string name="notification_video" msgid="4331423498662606204">"ਵੀਡੀਓ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"ਸੰਪਰਕ ਕਾਰਡ"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ਡਾਊਨਲੋਡ ਕਰੋ"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS ਰਾਹੀਂ ਜਵਾਬ"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS ਰਾਹੀਂ ਜਵਾਬ"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"ਜਵਾਬ"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ਭਾਗੀਦਾਰ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ਭਾਗੀਦਾਰ</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"ਮੈਂ"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"ਬਲੌਕ ਕੀਤਾ &amp; ਆਰਕਾਈਵ ਕੀਤਾ ਸੰਪਰਕ"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"ਸੰਪਰਕ ਅਨਬਲੌਕ ਕੀਤਾ &amp; ਅਨਆਰਕਾਈਵ ਕੀਤਾ"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> ਆਰਕਾਈਵ ਕੀਤੀਆਂ"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> ਅਨਆਰਕਾਈਵ ਕੀਤੀਆਂ"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"ਸੂਚਨਾਵਾਂ ਬੰਦ ਕੀਤੀਆਂ"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"ਸੂਚਨਾਵਾਂ ਚਾਲੂ ਕੀਤੀਆਂ"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"ਸਾਰੇ ਸੈਟ ਕੀਤੇ। ਭੇਜੋ ਨੂੰ ਦੁਬਾਰਾ ਛੋਹਵੋ।"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Messaging ਡਿਫੌਲਟ SMS ਐਪਸ ਦੇ ਤੌਰ ਤੇ ਸਫਲਤਾਪੂਰਵਕ ਸੈਟ ਕੀਤਾ ਗਿਆ।"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">ਅਟੈਚਮੈਂਟਾਂ ਬਰਖਾਸਤ ਕਰੋ</item>
-      <item quantity="other">ਅਟੈਚਮੈਂਟਾਂ ਬਰਖਾਸਤ ਕਰੋ</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ਔਡੀਓ ਅਟੈਚਮੈਂਟ"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ਔਡੀਓ ਅਟੈਚਮੈਂਟ ਪਲੇ ਕਰੋ"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"ਰੋਕੋ"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> ਦਾ ਸੁਨੇਹਾ: <xliff:g id="MESSAGE">%2$s</xliff:g>।"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> ਦਾ ਸੁਨੇਹਾ ਅਸਫਲ: <xliff:g id="MESSAGE">%2$s</xliff:g>। ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> ਦਾ ਸੁਨੇਹਾ: <xliff:g id="MESSAGE">%2$s</xliff:g>। ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> ਨੂੰ ਨਾ ਭੇਜਿਆ ਗਿਆ ਸੁਨੇਹਾ: <xliff:g id="MESSAGE">%2$s</xliff:g>। Time: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> ਨੂੰ ਸੁਨੇਹਾ ਭੇਜ ਰਿਹਾ ਹੈ: <xliff:g id="MESSAGE">%2$s</xliff:g>। ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> ਨੂੰ ਸੁਨੇਹਾ ਭੇਜਣਾ ਅਸਫਲ: <xliff:g id="MESSAGE">%2$s</xliff:g>। ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> ਨੂੰ ਸੁਨੇਹਾ: <xliff:g id="MESSAGE">%2$s</xliff:g>। ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> ਦਾ ਸੁਨੇਹਾ ਅਸਫਲ: <xliff:g id="MESSAGE">%2$s</xliff:g>। ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>। <xliff:g id="GROUPINFO">%4$s</xliff:g>।"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> ਦਾ ਸੁਨੇਹਾ: <xliff:g id="MESSAGE">%2$s</xliff:g>. ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>। <xliff:g id="GROUPINFO">%4$s</xliff:g>।"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> ਨੂੰ ਨਾ ਭੇਜਿਆ ਗਿਆ ਸੁਨੇਹਾ: <xliff:g id="MESSAGE">%2$s</xliff:g>। ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> ਨੂੰ ਸੁਨੇਹਾ ਭੇਜ ਰਿਹਾ ਹੈ: <xliff:g id="MESSAGE">%2$s</xliff:g>। ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> ਨੂੰ ਸੁਨੇਹਾ ਭੇਜਣਾ ਅਸਫਲ: <xliff:g id="MESSAGE">%2$s</xliff:g>। ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> ਨੂੰ ਸੁਨੇਹਾ: <xliff:g id="MESSAGE">%2$s</xliff:g>। ਸਮਾਂ: <xliff:g id="TIME">%3$s</xliff:g>।"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"ਸੁਨੇਹਾ ਅਸਫਲ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਛੋਹਵੋ।"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> ਨਾਲ ਗੱਲਬਾਤ ਕਰੋ"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"ਵਿਸ਼ਾ ਹਟਾਓ"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"ਵੀਡੀਓ ਕੈਪਚਰ ਕਰੋ"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"ਇੱਕ ਸਟਿਲ ਚਿੱਤਰ ਕੈਪਚਰ ਕਰੋ"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"ਤਸਵੀਰ ਲਓ"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"ਵੀਡੀਓ ਰਿਕਾਰਡ ਕਰਨਾ ਚਾਲੂ ਕਰੋ"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"ਪੂਰੀ ਸਕ੍ਰੀਨ ਕੈਮਰਾ ਤੇ ਸਵਿਚ ਕਰੋ"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"ਫ੍ਰੰਟ ਅਤੇ ਬੈਕ ਕੈਮਰਾ ਵਿਚਕਾਰ ਸਵਿਚ ਕਰੋ"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"ਰਿਕਾਰਡਿੰਗ ਰੋਕੋ ਅਤੇ ਵੀਡੀਓ ਅਟੈਚ ਕਰੋ"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"ਵੀਡੀਓ ਰਿਕਾਰਡ ਕਰਨਾ ਰੋਕੋ"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Messaging ਫੋਟੋਆਂ"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> ਫੋਟੋਆਂ ਨੂੰ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ਫੋਟੋਆਂ ਨੂੰ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> ਵੀਡਿਓ ਨੂੰ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ਵੀਡਿਓ ਨੂੰ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> ਅਟੈਚਮੈਂਟਾਂ ਨੂੰ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ਅਟੈਚਮੈਂਟਾਂ ਨੂੰ \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ਐਲਬਮ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> ਅਟੈਚਮੈਂਟਾਂ ਡਾਊਨਲੋਡਸ\" ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤੀਆਂ ਗਈਆਂ</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ਅਟੈਚਮੈਂਟਾਂ ਡਾਊਨਲੋਡਸ\" ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕੀਤੀਆਂ ਗਈਆਂ</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> ਅਟੈਚਮੈਂਟਾਂ ਸੁਰੱਖਿਅਤ ਕੀਤੀਆਂ</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ਅਟੈਚਮੈਂਟਾਂ ਸੁਰੱਖਿਅਤ ਕੀਤੀਆਂ</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one"> <xliff:g id="QUANTITY_1">%d</xliff:g> ਅਟੈਚਮੈਂਟਾਂ ਨੂੰ ਸੁੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ</item>
-      <item quantity="other"> <xliff:g id="QUANTITY_1">%d</xliff:g> ਅਟੈਚਮੈਂਟਾਂ ਨੂੰ ਸੁੁਰੱਖਿਅਤ ਨਹੀਂ ਕਰ ਸਕਿਆ</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"ਸੁਰੱਖਿਅਤ ਕੀਤੀ MMS ਅਟੈਚਮੈਂਟ"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"ਸੈਟਿੰਗਾਂ"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"ਆਰਕਾਈਵ ਕੀਤਾ"</string>
-    <string name="action_close" msgid="1840519376200478419">"ਬੰਦ ਕਰੋ"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"ਉੱਨਤ"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"ਡੀਬਗ ਕਰੋ"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"ਸੂਚਨਾਵਾਂ"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ਅਵਾਜ਼"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"ਸਾਈਲੈਂਟ"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"ਵਾਈਬ੍ਰੇਟ"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"ਬਲੌਕ ਕੀਤਾ"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS ਡਿਲੀਵਰੀ ਰਿਪੋਰਟਾਂ"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"ਤੁਸੀਂ ਜੋ ਵੀ SMS ਭੇਜੋ ਉਸ ਹਰੇਕ ਲਈ ਇੱਕ ਡਿਲੀਵਰੀ ਰਿਪੋਰਟ ਦੀ ਬੇਨਤੀ ਕਰੋ"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"ਆਟੋ-ਮੁੜ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"ਆਟੋਮੈਟਿਕਲੀ MMS ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"ਰੋਮਿੰਗ ਆਟੋ-ਮੁੜ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"ਰੋਮਿੰਗ ਵੇਲੇ MMS ਆਟੋਮੈਟਿਕਲੀ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"ਸਮੂਹ ਮੈਸੇਂਜ਼ਿੰਗ"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"ਜਦੋਂ ਮਲਟੀਪਲ ਪ੍ਰਾਪਤਕਰਤਾ ਹੋਣ ਤਾਂ ਇੱਕ ਸਿੰਗਲ ਸੁਨੇਹਾ ਭੇਜਣ ਲਈ MMS ਵਰਤੋ"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"ਡਿਫੌਲਟ SMS ਐਪ"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"ਡਿਫੌਲਟ SMS ਐਪ"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"ਤੁਹਾਡਾ ਫੋਨ ਨੰਬਰ"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"ਅਗਿਆਤ"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"ਆਊਟਗੋਇੰਗ ਸੁਨੇਹਾ ਅਵਾਜ਼ਾਂ"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS ਡੰਪ ਕਰੋ"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ ਫਾਈਲ ਵਿੱਚ ਪ੍ਰਾਪਤ ਕੀਤਾ SMS ਅਧੂਰਾ ਡਾਟਾ ਡੰਪ ਕਰੋ"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS ਡੰਪ ਕਰੋ"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ ਫਾਈਲ ਵਿੱਚ ਪ੍ਰਾਪਤ ਕੀਤਾ MMS ਅਧੂਰਾ ਡਾਟਾ ਡੰਪ ਕਰੋ"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"ਵਾਇਰਲੈਸ ਚਿਤਾਵਨੀਆਂ"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"ਸੁਨੇਹਾ ਚੋਣਾਂ"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"ਟੈਕਸਟ ਕਾਪੀ ਕਰੋ"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"ਵੇਰਵੇ ਦੇਖੋ"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"ਮਿਟਾਓ"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"ਅੱਗੇ ਭੇਜੋ"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"ਸੁਨੇਹਾ ਵੇਰਵੇ"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"ਟਾਈਪ: "</string>
-    <string name="text_message" msgid="7415419755252205721">"ਟੈਕਸਟ ਸੁਨੇਹਾ"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"ਮਲਟੀਮੀਡੀਆ ਸੁਨੇਹਾ"</string>
-    <string name="from_label" msgid="1947831848146564875">"ਇਸ ਤੋਂ: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"ਵੱਲ: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"ਭੇਜਿਆ: "</string>
-    <string name="received_label" msgid="4442494712757995203">"ਪ੍ਰਾਪਤ ਕੀਤਾ: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"ਵਿਸ਼ਾ: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"ਆਕਾਰ: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"ਤਰਜੀਹ: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"ਉੱਚ"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"ਸਧਾਰਨ"</string>
-    <string name="priority_low" msgid="7398724779026801851">"ਘੱਟ"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"ਭੇਜਣ ਵਾਲੇ ਦਾ ਪਤਾ ਲੁਕਾਇਆ ਗਿਆ"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"ਅਟੈਚਮੈਂਟਾਂ ਲੋਡ ਕਰਨ ਵੇਲੇ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜ ਸਕਦਾ।"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"ਅਟੈਚਮੈਂਟ ਲੋਡ ਨਹੀਂ ਕਰ ਸਕਦਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"ਨੈੱਟਵਰਕ ਤਿਆਰ ਨਹੀਂ ਹੈ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"ਟੈਕਸਟ ਮਿਟਾਓ"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"ਟੈਕਸਟ ਅਤੇ ਨੰਬਰ ਦਰਜ ਕਰਨ ਵਿਚਕਾਰ ਸਵਿਚ ਕਰੋ"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"ਹੋਰ ਭਾਗੀਦਾਰ ਜੋੜੋ"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"ਭਾਗੀਦਾਰਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"ਨਵੀਂ ਗੱਲਬਾਤ ਚਾਲੂ ਕਰੋ"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"ਇਹ ਆਈਟਮ ਚੁਣੋ"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"ਵੀਡੀਓ ਪਲੇ ਕਰੋ"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"ਲੋਕ &amp; ਚੋਣਾਂ"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"ਡੀਬਗ ਕਰੋ"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"ਲੋਕ &amp; ਚੋਣਾਂ"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"ਸਧਾਰਨ"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"ਇਸ ਗੱਲਬਾਤ ਵਿੱਚ ਲੋਕ"</string>
-    <string name="action_call" msgid="6596167921517350362">"ਇੱਕ ਕਾਲ ਕਰੋ"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"ਸੁਨੇਹਾ ਭੇਜੋ"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"ਸੁਨੇਹਾ ਭੇਜੋ&lt;br/&gt;&lt;ਛੋਟਾ&gt;<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/ਤੋਂ ਛੋਟਾ&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">ਫੋਟੋਆਂ ਭੇਜੋ</item>
-      <item quantity="other">ਫੋਟੋਆਂ ਭੇਜੋ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">ਔਡੀਓ ਭੇਜੋ</item>
-      <item quantity="other">ਔਡੀਓ ਭੇਜੋ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">ਵੀਡਿਓ ਭੇਜੋ</item>
-      <item quantity="other">ਵੀਡਿਓ ਭੇਜੋ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">ਸੰਪਰਕ ਕਾਰਡ ਭੇਜੋ</item>
-      <item quantity="other">ਸੰਪਰਕ ਕਾਰਡ ਭੇਜੋ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">ਅਟੈਚਮੈਂਟਾਂ ਭੇਜੋ</item>
-      <item quantity="other">ਅਟੈਚਮੈਂਟਾਂ ਭੇਜੋ</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ਅਟੈਚਮੈਂਟਾਂ ਭੇਜਣ ਲਈ ਤਿਆਰ</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ਅਟੈਚਮੈਂਟਾਂ ਭੇਜਣ ਲਈ ਤਿਆਰ</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"ਫੀਡਬੈਕ ਭੇਜੋ"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play ਸਟੋਰ ਵਿੱਚ ਦੇਖੋ"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"ਵਰਜਨ ਜਾਣਕਾਰੀ"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"ਵਰਜਨ %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"ਓਪਨ ਸ੍ਰੋਤ ਲਸੰਸ"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"ਸੂਚਨਾਵਾਂ"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"ਅਟੈਚਮੈਂਟ ਸੀਮਾ ਪੂਰੀ ਹੋਈ"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"ਅਟੈਚਮੈਂਟ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ।"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"ਕੀ ਸੰਪਰਕ ਜੋੜਨੇ ਹਨ?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"ਸੰਪਰਕ ਜੋੜੋ"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"ਵਿਸ਼ਾ"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"ਵਿਸ਼ਾ: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"ਸੰਪਰਕ ਕਾਰਡ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"ਸੰਪਰਕ ਕਾਰਡ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"ਸੰਪਰਕ ਕਾਰਡ ਦੇਖੋ"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ਸੰਪਰਕ</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ਸੰਪਰਕ</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"ਸੰਪਰਕ ਕਾਰਡ"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"ਜਨਮਦਿਨ"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"ਸੂਚਨਾਵਾਂ"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"ਸੁਨੇਹਾ ਅੱਗੇ ਭੇਜੋ"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"ਜਵਾਬ ਦਿਓ"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS ਅਸਮਰਥਿਤ"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"ਭੇਜਣ ਲਈ, Messaging ਨੂੰ ਡਿਫੌਲਟ SMS ਐਪ ਦੇ ਤੌਰ ਤੇ ਸੈਟ ਕਰੋ"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Messaging ਨੂੰ ਡਿਫੌਲਟ SMS ਐਪ ਦੇ ਤੌਰ ਤੇ ਸੈਟ ਕਰੋ"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"ਬਦਲੋ"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ, Messaging ਨੂੰ ਡਿਫੌਲਟ SMS ਐਪਸ ਦੇ ਤੌਰ ਤੇ ਸੈਟ ਕਰੋ"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS ਸੁਨੇਹੇ ਭੇਜਣ ਲਈ ਕੋਈ ਤਰਜੀਹੀ SIM ਨਹੀਂ ਚੁਣਿਆ ਗਿਆ"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"ਡਿਵਾਈਸ ਮਾਲਕ ਵੱਲੋਂ ਇਸ ਐਪ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ।"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ਠੀਕ"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"ਇੱਕ ਗੱਲਬਾਤਾ ਵਿੱਚ ਬਹੁਤ ਜ਼ਿਆਦਾ ਪ੍ਰਾਪਤਕਰਤਾ"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">ਅਪ੍ਰਮਾਣਿਕ ਸੰਪਰਕ</item>
-      <item quantity="other">ਅਪ੍ਰਮਾਣਿਕ ਸੰਪਰਕ</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"ਕੈਮਰਾ ਚਿੱਤਰ ਲੋਡ ਨਹੀਂ ਕਰ ਸਕਿਆ"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"ਤੁਸੀਂ: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"ਡ੍ਰਾਫਟ"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਨਵੀਂ ਗੱਲਬਾਤ ਚਾਲੂ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਇਸਨੂੰ ਇੱਥੇ ਸੂਚੀਬੱਧ ਦੇਖੋਗੇ"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"ਆਰਕਾਈਵ ਕੀਤੀਆਂ ਗੱਲਬਾਤਾਂ ਇੱਥੇ ਪ੍ਰਗਟ ਹੋਣਗੀਆਂ"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"ਗੱਲਬਾਤਾਂ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"ਤਸਵੀਰ"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ਔਡੀਓ ਕਲਿਪ"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"ਵੀਡੀਓ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"ਸੰਪਰਕ ਕਾਰਡ"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"ਪਹਿਲਾਂ ਵਰਗਾ ਕਰੋ"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ ਚਾਲੂ ਕਰਨ ਲਈ ਇੱਕ ਸੰਪਰਕ ਨਾਮ ਜਾਂ ਫੋਨ ਨੰਬਰ ਦਰਜ ਕਰੋ"</string>
-    <string name="action_block" msgid="9032076625645190136">"ਬਲੌਕ ਕਰੋ"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> ਨੂੰ ਬਲੌਕ ਕਰੋ"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> ਨੂੰ ਅਨਬਲੌਕ ਕਰੋ"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"ਕੀ <xliff:g id="DESTINATION">%s</xliff:g> ਨੂੰ ਬਲੌਕ ਕਰਨਾ ਹੈ?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"ਤੁਸੀਂ ਇਸ ਨੰਬਰ ਤੋਂ ਲਗਾਤਾਰ ਸੁਨੇਹੇ ਪ੍ਰਾਪਤ ਕਰੋਗੇ ਪਰੰਤੂ ਹੁਣ ਤੁਹਾਨੂੰ ਸੂਚਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾਏਗਾ। ਇਹ ਗੱਲਬਾਤ ਆਰਕਾਈਵ ਕੀਤੀ ਜਾਏਗੀ।"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"ਬਲੌਕ ਕੀਤੇ ਸੰਪਰਕ"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ਅਨਬਲੌਕ ਕਰੋ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"ਬਲੌਕ ਕੀਤੇ ਸੰਪਰਕ"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"ਦਸਤਾਵੇਜ਼ ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚੋਂ ਚਿੱਤਰ ਚੁਣੋ"</string>
-    <string name="sending_message" msgid="6363584950085384929">"ਸੁਨੇਹਾ ਭੇਜ ਰਿਹਾ ਹੈ"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"ਸੁਨੇਹਾ ਭੇਜਿਆ ਗਿਆ"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"ਸੈਲਿਊਲਰ ਡਾਟਾ ਬੰਦ ਹੈ। ਆਪਣੀਆਂ ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਕਰੋ।"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"ਏਅਰਪਲੇਨ ਮੋਡ ਵਿੱਚ ਸੁਨੇਹੇ ਨਹੀਂ ਭੇਜ ਸਕਦਾ"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਜਾ ਸਕੇਗਾ"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"ਸੁਨੇਹਾ ਡਾਊਨਲੋਡ ਕੀਤਾ"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"ਸੈਲਿਊਲਰ ਡਾਟਾ ਬੰਦ ਹੈ। ਆਪਣੀਆਂ ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਕਰੋ।"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"ਏਅਰਪਲੇਨ ਮੋਡ ਵਿੱਚ ਸੁਨੇਹੇ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"ਸੁਨੇਹਾ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕੇਗਾ"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"ਸਿਫਰ"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"ਇੱਕ"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"ਦੋ"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"ਤਿੰਨ"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"ਚਾਰ"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"ਪੰਜ"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ਛੇ"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"ਸੱਤ"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"ਅੱਠ"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"ਨੌ"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> ਨਾਲ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜ ਸਕਦਾ, ਅਸ਼ੁੱਧੀ <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"ਅਗਿਆਤ ਕੈਰੀਅਰ ਨਾਲ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜ ਸਕਦਾ, ਅਸ਼ੁੱਧੀ <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ: ਨੈਟਵਰਕ ਤੇ ਸੇਵਾ ਸਕਿਰਿਆ ਨਹੀਂ"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ: ਅਪ੍ਰਮਾਣਿਕ ਡੈਸਟੀਨੇਸ਼ਨ ਪਤਾ"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ: ਅਪ੍ਰਮਾਣਿਤ ਸੁਨੇਹਾ"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ: ਅਸਮਰਥਿਤ ਸਮੱਗਰੀ"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ: ਅਸਮਰਥਿਤ ਸੁਨੇਹਾ"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਗਿਆ: ਬਹੁਤ ਜ਼ਿਆਦਾ ਵੱਡਾ"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"ਨਵਾਂ ਸੁਨੇਹਾ"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"ਦੇਖੋ"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"ਚਿੱਤਰ"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"ਇੱਕ ਅਨੁੁਕੂਲ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਲੱਭ ਸਕਿਆ"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"ਪ੍ਰਾਪਤਕਰਤਾ ਹਟਾਓ"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"ਨਵਾਂ ਸੁਨੇਹਾ"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"ਰੱਦ ਕਰੋ"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"ਪਹੁੰਚ ਬਿੰਦੂ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"ਸੈਟ ਨਹੀਂ ਕੀਤਾ"</string>
-    <string name="apn_name" msgid="1572691851070894985">"ਨਾਮ"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS ਪ੍ਰੌਕਸੀ"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS ਪੋਰਟ"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN ਪ੍ਰਕਾਰ"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN ਮਿਟਾਓ"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"ਨਵਾਂ APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"ਸੁਰੱਖਿਅਤ ਕਰੋ"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"ਅਣਡਿੱਠਾ"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"ਨਾਮ ਖੇਤਰ ਨੂੰ ਖਾਲੀ ਨਹੀਂ ਛੱਡਿਆ ਜਾ ਸਕਦਾ।"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN ਨੂੰ ਖਾਲੀ ਨਹੀਂ ਛੱਡਿਆ ਜਾ ਸਕਦਾ।"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC ਖੇਤਰ 3 ਅੰਕਾਂ ਦਾ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ।"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC ਖੇਤਰ 2 ਜਾਂ 3 ਅੰਕਾਂ ਦਾ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ।"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"ਡਿਫੌਲਟ APN ਸੈਟਿੰਗਾਂ ਰੀਸਟੋਰ ਕਰ ਰਿਹਾ ਹੈ।"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"ਡਿਫੌਲਟਸ ਤੇ ਰੀਸੈਟ ਕਰੋ"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"ਡਿਫੌਲਟ APN ਸੈਟਿੰਗਾਂ ਰੀਸੈਟ ਕਰਨਾ ਪੂਰਾ ਹੋਇਆ।"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"ਬਿਨਾਂ ਨਾਮ"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ਪਹੁੰਚ ਬਿੰਦੂ ਨਾਮ"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"ਨਵਾਂ APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"ਪਹੁੰਚ ਬਿੰਦੂ ਨਾਮ ਸੈਟਿੰਗਾਂ ਇਸ ਉਪਭੋਗਤਾ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"ਕੀ ਕਲਿਪਬੋਰਡ ਤੇ ਕਾਪੀ ਕਰਨਾ ਹੈ?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"ਕਾਪੀ ਕਰੋ"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> ਨੂੰ"</string>
-    <string name="general_settings" msgid="5409336577057897710">"ਸਧਾਰਨ"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"ਉੱਨਤ"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"ਸਧਾਰਨ ਸੈਟਿੰਗਾਂ"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"ਉੱਨਤ ਸੈਟਿੰਗਾਂ"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"ਸਾਰੇ ਪ੍ਰਾਪਤਕਰਤਾਵਾਂ ਨੂੰ ਵੱਖ-ਵੱਖ SMS ਸੁਨੇਹੇ ਭੇਜੋ। ਕੇਵਲ ਤੁਸੀਂ ਹੀ ਕੋਈ ਜਵਾਬ ਪ੍ਰਾਪਤ ਕਰੋਗੇ"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"ਸਾਰੇ ਪ੍ਰਾਪਤਕਰਤਾਵਾਂ ਨੂੰ ਇੱਕ ਸਿੰਗ MMS ਭੇਜੋ।"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"ਅਗਿਆਤ ਨੰਬਰ"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"ਨਵਾਂ ਸੁਨੇਹਾ"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"ਨਵਾਂ ਸੁਨੇਹਾ।"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM ਚੋਣਕਾਰ"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> ਚੁਣਿਆ ਗਿਆ, SIM ਚੋਣਕਰਤਾ"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"ਵਿਸ਼ਾ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM ਚੁਣੋ ਜਾਂ ਵਿਸ਼ਾ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ਔਡੀਓ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਛੋਹਵੋ ਅਤੇ ਹੋਲਡ ਕਰੋ"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"ਨਵੀਂ ਗੱਲਬਾਤ ਚਾਲੂ ਕਰੋ"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Messaging"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Messaging ਸੂਚੀ"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Messaging"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"ਨਵਾਂ ਸੁਨੇਹਾ"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"ਗੱਲਬਾਤ ਸੂਚੀ"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"ਗੱਲਬਾਤਾਂ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"ਸੁਨੇਹੇ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"ਹੋਰ ਗੱਲਬਾਤਾਂ ਦੇਖੋ"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"ਹੋਰ ਸੁਨੇਹੇ ਦੇਖੋ"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"ਗੱਲਬਾਤ ਮਿਟਾਈ ਗਈ"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"ਗੱਲਬਾਤ ਮਿਟਾਈ ਗਈ। ਇੱਕ ਵੱਖਰੀ Messaging ਗੱਲਬਾਤ ਦਿਖਾਉਣ ਲਈ ਛੋਹਵੋ"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"ਬਲੌਕ ਕੀਤਾ"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"ਅਨਬਲੌਕ ਕੀਤਾ"</string>
-    <string name="db_full" msgid="8459265782521418031">"ਸਟੋਰੇਜ ਸਪੇਸ ਘੱਟ ਹੈ। ਕੁਝ ਡਾਟਾ ਨਸ਼ਟ ਹੋ ਸਕਦਾ ਹੈ।"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"ਅਟੈਚਮੈਂਟਾਂ ਚੁਣੋ"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"ਚੋਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ਚੁਣਿਆ ਗਿਆ"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਜਾਂ ਵੱਧ ਅਟੈਚਮੈਂਟਾਂ ਹਟਾਓ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"ਤੁਸੀਂ ਆਪਣਾ ਸੁਨੇਹਾ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹੋ, ਪਰੰਤੂ ਇਹ ਸ਼ਾਇਦ ਨਾ ਭੇਜਿਆ ਜਾ ਸਕੇ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਇੱਕ ਜਾਂ ਵੱਧ ਅਟੈਚਮੈਂਟਾਂ ਨਹੀਂ ਹਟਾਉਂਦੇ।"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"ਤੁਸੀਂ ਪ੍ਰਤੀ ਸੁਨੇਹਾ ਕੇਵਲ ਇੱਕ ਵੀਡੀਓ ਭੇਜ ਸਕਦੇ ਹੋ। ਕਿਰਪਾ ਕਰਕੇ ਵਾਧੂ ਵੀਡੀਓ ਹਟਾਓ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Messaging ਅਟੈਚਮੈਂਟ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ।"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"ਫੇਰ ਵੀ ਭੇਜੋ"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"ਗੱਲਬਾਤ ਚਾਲੂ ਨਹੀਂ ਕਰ ਸਕਿਆ"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> ਚੁਣਿਆ ਗਿਆ"</string>
-</resources>
diff --git a/res/values-pl/arrays.xml b/res/values-pl/arrays.xml
deleted file mode 100644
index 2bd82e4..0000000
--- a/res/values-pl/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"brak tematu"</item>
-    <item msgid="272485471009191934">"braktematu"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Tak"</item>
-    <item msgid="6049132459802288033">"Nie"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Ha ha"</item>
-    <item msgid="2611328818571146775">"Dzięki"</item>
-    <item msgid="4881335087096496747">"Zgadzam się"</item>
-    <item msgid="2422296858597420738">"Super"</item>
-    <item msgid="4805581752819452687">"Jestem w drodze"</item>
-    <item msgid="4746700499431366214">"Skontaktuję się z Tobą później"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
deleted file mode 100644
index 1f21955..0000000
--- a/res/values-pl/strings.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Wiadomości"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Wiadomości"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Wybierz wątek"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Ustawienia"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Wyślij wiadomość"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Dodaj załącznik"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Pomoc"</string>
-    <string name="welcome" msgid="2857560951820802321">"Witamy"</string>
-    <string name="skip" msgid="7238879696319945853">"Pomiń"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Dalej &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Dalej"</string>
-    <string name="exit" msgid="1905187380359981199">"Zakończ"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Ustawienia &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Ustawienia"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Aplikacja SMS/MMS potrzebuje uprawnień do SMS-ów, telefonu i kontaktów."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Uprawnienia możesz zmienić, klikając Ustawienia &gt; Aplikacje &gt; SMS/MMS &gt; Uprawnienia."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Uprawnienia możesz zmienić, klikając Ustawienia, Aplikacje, SMS/MMS, Uprawnienia."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Częste kontakty"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Wszystkie kontakty"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Wyślij pod numer <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Zrób zdjęcia lub nagraj film"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Wybierz obrazy z tego urządzenia"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Nagraj dźwięk"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Wybierz zdjęcie"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Plik multimedialny został wybrany."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Plik multimedialny nie został wybrany."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Wybrano: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"obraz – <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"obraz"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Nagraj dźwięk"</string>
-    <string name="action_share" msgid="2143483844803153871">"Udostępnij"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"W tej chwili"</string>
-    <string name="posted_now" msgid="867560789350406701">"Teraz"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> godziny</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> godzin</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> godziny</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> godzina</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> dni</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> dni</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dnia</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> dzień</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> tygodnie</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> tygodni</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tygodnia</item>
-      <item quantity="one">tydzień</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> miesiące</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> miesięcy</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> miesiąca</item>
-      <item quantity="one">miesiąc</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> lata</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> lat</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> roku</item>
-      <item quantity="one">rok</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Wiadomość klasy 0"</string>
-    <string name="save" msgid="5081141452059463572">"Zapisz"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Na urządzeniu jest mało miejsca. Aplikacja SMS/MMS automatycznie usunie starsze SMS-y, by zwolnić miejsce."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Kończy się miejsce"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Aplikacja SMS/MMS może nie wysyłać i nie odbierać wiadomości do momentu zwolnienia miejsca na urządzeniu."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Mało miejsca na SMS-y. Może usuniesz niektóre wiadomości?"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Potwierdź swój numer telefonu"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Dzięki tej jednorazowej czynności aplikacja SMS/MMS będzie poprawnie dostarczać Twoje wiadomości grupowe."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Numer telefonu"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Usuń wszystkie MMS-y"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Usuń wiadomości starsze niż <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Automatycznie usuwaj wiadomości starsze niż <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignoruj"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Usunąć wszystkie MMS-y?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Usunąć wiadomości starsze niż <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Usunąć wiadomości starsze niż <xliff:g id="DURATION">%s</xliff:g> i włączyć automatyczne usuwanie?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> pisze"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Treść Twojej wiadomości"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Wiadomość od użytkownika <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Wysłałeś wiadomość"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Wysyłam…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Nie wysłano. Kliknij, by spróbować ponownie."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Nie wysłano. Próbuję ponownie…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Wyślij ponownie lub usuń"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Zadzwoń do służb ratunkowych. Tym razem nie udało się dostarczyć SMS-a."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Błąd"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nowa wiadomość MMS do pobrania"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nowa wiadomość MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Nie udało się pobrać"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Kliknij, by spróbować ponownie"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Kliknij, by pobrać"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Pobierz lub usuń"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Pobieram…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Wiadomość wygasła lub jest niedostępna"</string>
-    <string name="mms_info" msgid="3402311750134118165">"rozmiar: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, termin ważności: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Nie można wysłać. Nieprawidłowy adresat."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Usługa nie została aktywowana w sieci"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Nie udało się wysłać z powodu problemu z siecią"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Wiadomość wygasła lub jest niedostępna"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Brak tematu)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Nieznany nadawca"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Dostarczono"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Nie udało się pobrać wiadomości <xliff:g id="SUBJECT">%1$s</xliff:g> od użytkownika <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Nie można dokończyć operacji na bazie danych z powodu zbyt małej ilości pamięci"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Wiadomość nie została wysłana"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Niektóre wiadomości nie zostały wysłane w aplikacji SMS/MMS"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> wiadomości w <xliff:g id="CONVERSATIONS">%d</xliff:g> wątkach</item>
-      <item quantity="many"><xliff:g id="MESSAGES_1">%d</xliff:g> wiadomości w <xliff:g id="CONVERSATIONS">%d</xliff:g> wątkach</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> wiadomości w <xliff:g id="CONVERSATIONS">%d</xliff:g> wątku</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> wiadomości w jednym wątku</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Wiadomość nie została pobrana"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Niektóre wiadomości nie zostały pobrane w aplikacji SMS/MMS"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> wiadomości w <xliff:g id="CONVERSATIONS">%d</xliff:g> wątkach</item>
-      <item quantity="many"><xliff:g id="MESSAGES_1">%d</xliff:g> wiadomości w <xliff:g id="CONVERSATIONS">%d</xliff:g> wątkach</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> wiadomości w <xliff:g id="CONVERSATIONS">%d</xliff:g> wątku</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> wiadomości w jednym wątku</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Wiadomość do <xliff:g id="NUMBER">%1$s</xliff:g> nie została wysłana"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Zadzwoń do służb ratunkowych. Tym razem nie udało się dostarczyć SMS-a pod numer <xliff:g id="NUMBER">%1$s</xliff:g>."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> nowe wiadomości</item>
-      <item quantity="many"><xliff:g id="MESSAGES">%d</xliff:g> nowych wiadomości</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nowej wiadomości</item>
-      <item quantity="one">Nowa wiadomość</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Rozpocznij"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Aparat jest niedostępny"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Aparat jest niedostępny"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Nagrywanie filmu jest niedostępne"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Nie można zapisać pliku multimedialnego"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Nie można zrobić zdjęcia"</string>
-    <string name="back" msgid="1477626055115561645">"Wstecz"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archiwum"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Usuń"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archiwizuj"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Przywróć z archiwum"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Wyłącz powiadomienia"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Włącz powiadomienia"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Dodaj kontakt"</string>
-    <string name="action_download" msgid="7786338136368564146">"Pobierz"</string>
-    <string name="action_send" msgid="377635240181672039">"Wyślij"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Usuń"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Usunąć tę wiadomość?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Nie można tego cofnąć."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Usuń"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="few">Usunąć te wątki?</item>
-      <item quantity="many">Usunąć te wątki?</item>
-      <item quantity="other">Usunąć te wątki?</item>
-      <item quantity="one">Usunąć ten wątek?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Usuń"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Anuluj"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Do"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Wybierz wiele obrazów"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Potwierdź wybór"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"Jeszcze <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Nie można nagrać dźwięku. Spróbuj ponownie."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Nie można odtworzyć dźwięku. Spróbuj ponownie."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Nie można zapisać dźwięku. Spróbuj ponownie."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Kliknij i przytrzymaj"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Zdjęcie"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Klip dźwiękowy"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Film"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Wizytówka"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Pobierz"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Odpowiedz SMS-em"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Wyślij MMS-a"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Odpowiedz"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> uczestników</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> uczestników</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> uczestnika</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> uczestnik</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ja"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakt został zablokowany i zarchiwizowany"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontakt odblokowany i rozpakowany"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Zarchiwizowano: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Przywrócone z archiwum: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Powiadomienia wyłączone"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Powiadomienia włączone"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Wszystko gotowe. Ponownie kliknij Wyślij."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"SMS/MMS to teraz domyślna aplikacja do SMS-ów."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="few">Odrzuć załączniki</item>
-      <item quantity="many">Odrzuć załączniki</item>
-      <item quantity="other">Odrzuć załączniki</item>
-      <item quantity="one">Odrzuć załącznik</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Załącznik audio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Odtwórz załącznik audio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pauza"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Wiadomość od użytkownika <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Nieudane odbieranie wiadomości od: <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Wiadomość od: <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Niewysłana wiadomość do: <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Wysyłanie wiadomości do: <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Nieudane wysyłanie wiadomości do: <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Wiadomość do: <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Nieudane odbieranie wiadomości od: <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Wiadomość od: <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Niewysłana wiadomość do: <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Wysyłanie wiadomości do: <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Nieudane wysyłanie wiadomości do: <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Wiadomość do: <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Godzina: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Niedostarczona wiadomość. Kliknij, aby ponowić próbę."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Rozmowa z: <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Usuń temat"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Nagraj film"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Zrób zdjęcie"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Zrób zdjęcie"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Zacznij nagrywać film"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Włącz aparat pełnoekranowy"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Przełącz między kamerą z przodu i z tyłu"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Zatrzymaj nagrywanie i dołącz film"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Zatrzymaj nagrywanie filmu"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Zdjęcia z aplikacji SMS/MMS"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> zdjęcia zapisane w albumie „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> zdjęć zapisanych w albumie „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> zdjęcia zapisane w albumie „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> zdjęcie zapisane w albumie „<xliff:g id="ALBUMNAME_1">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> filmy zapisane w albumie „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> filmów zapisanych w albumie „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> filmu zapisane w albumie „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> film zapisany w albumie „<xliff:g id="ALBUMNAME_1">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> załączniki zapisane w albumie „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> załączników zapisanych w albumie „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> załącznika zapisane w albumie „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> załącznik zapisany w albumie „<xliff:g id="ALBUMNAME_1">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> załączniki zapisane w folderze „Pobrane pliki”</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> załączników zapisanych w folderze „Pobrane pliki”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> załącznika zapisane w folderze „Pobrane pliki”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> załącznik zapisany w folderze „Pobrane pliki”</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> załączniki zapisane</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> załączników zapisanych</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> załącznika zapisane</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> załącznik zapisany</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="few">Nie udało się zapisać <xliff:g id="QUANTITY_1">%d</xliff:g> załączników</item>
-      <item quantity="many">Nie udało się zapisać <xliff:g id="QUANTITY_1">%d</xliff:g> załączników</item>
-      <item quantity="other">Nie udało się zapisać <xliff:g id="QUANTITY_1">%d</xliff:g> załącznika</item>
-      <item quantity="one">Nie udało się zapisać <xliff:g id="QUANTITY_0">%d</xliff:g> załącznika</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Zapisany załącznik MMS-a"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Ustawienia"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Zarchiwizowane"</string>
-    <string name="action_close" msgid="1840519376200478419">"Zamknij"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Zaawansowane"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Debugowanie"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Powiadomienia"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Dźwięk"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Cichy"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Wibracje"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Zablokowany"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Raporty doręczeń SMS-ów"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Otrzymuj raport o dostarczeniu każdego wysłanego SMS-a"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Autopobieranie"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Automatycznie pobieraj MMS-y"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Autopobieranie w roamingu"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Automatycznie pobieraj MMS-y w roamingu"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Wiadomości grupowe"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Używaj MMS-ów, gdy chcę wysłać jedną wiadomość do wielu odbiorców"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Domyślna aplikacja do SMS-ów"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Domyślna aplikacja do SMS-ów"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Twój numer telefonu"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Nieznany"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Dźwięki przy wysyłaniu wiadomości"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Zrzuć SMS-y"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Zrzuć odebrane nieprzetworzone dane SMS-ów do pliku w pamięci zewnętrznej"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Zrzuć MMS-y"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Zrzuć odebrane nieprzetworzone dane MMS-ów do pliku w pamięci zewnętrznej"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Alerty o zagrożeniach"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opcje wiadomości"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Skopiuj tekst"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Wyświetl szczegóły"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Usuń"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Przekaż dalej"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Szczegóły wiadomości"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Typ: "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Wiadomość multimedialna"</string>
-    <string name="from_label" msgid="1947831848146564875">"Od: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Do: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Wysłano: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Odebrane: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Temat: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Rozmiar: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priorytet: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Wysoki"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normalny"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Niski"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Ukryty adres nadawcy"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Nie można wysłać wiadomości w czasie ładowania załączników."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Nie można załadować załącznika. Spróbuj ponownie."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Sieć nie jest gotowa. Spróbuj ponownie."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Usuń tekst"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Przełącz się między wpisywaniem tekstu i cyfr"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Dodaj uczestników"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Potwierdź uczestników"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Rozpocznij nowy wątek"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Wybierz ten element"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Odtwórz film"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Osoby i opcje"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Debuguj"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Osoby i opcje"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Ogólne"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Uczestnicy tej rozmowy"</string>
-    <string name="action_call" msgid="6596167921517350362">"Zadzwoń"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Wyślij wiadomość"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Wyślij wiadomość&lt;br/&gt;&lt;small&gt;z <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="few">Wyślij zdjęcia</item>
-      <item quantity="many">Wyślij zdjęcia</item>
-      <item quantity="other">Wyślij zdjęcia</item>
-      <item quantity="one">Wyślij zdjęcie</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="few">Wyślij pliki audio</item>
-      <item quantity="many">Wyślij pliki audio</item>
-      <item quantity="other">Wyślij pliki audio</item>
-      <item quantity="one">Wyślij plik audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="few">Wyślij filmy</item>
-      <item quantity="many">Wyślij filmy</item>
-      <item quantity="other">Wyślij filmy</item>
-      <item quantity="one">Wyślij film</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="few">Wyślij wizytówki</item>
-      <item quantity="many">Wyślij wizytówki</item>
-      <item quantity="other">Wyślij wizytówki</item>
-      <item quantity="one">Wyślij wizytówkę</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="few">Wyślij załączniki</item>
-      <item quantity="many">Wyślij załączniki</item>
-      <item quantity="other">Wyślij załączniki</item>
-      <item quantity="one">Wyślij załącznik</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="few"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> załączniki gotowe do wysłania</item>
-      <item quantity="many"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> załączników gotowych do wysłania</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> załącznika gotowe do wysłania</item>
-      <item quantity="one">Jeden załącznik gotowy do wysłania</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Prześlij opinię"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Zobacz w Sklepie Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informacje o wersji"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Wersja %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licencje open source"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Powiadomienia"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Osiągnięto limit załączników"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Nie udało się załadować załącznika."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Dodać do kontaktów?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Dodaj kontakt"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Temat"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Temat: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Ładowanie wizytówki"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Nie można załadować wizytówki"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Wyświetl wizytówkę"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakty</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> kontaktów</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktu</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Wizytówki"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Urodziny"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notatki"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Przekaż wiadomość dalej"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Odpowiedz"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS-y wyłączone"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Aby wysyłać wiadomości, ustaw SMS/MMS jako domyślną aplikację do SMS-ów"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Ustaw SMS/MMS jako domyślną aplikację do SMS-ów"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Zmień"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Aby odbierać wiadomości, ustaw SMS/MMS jako domyślną aplikację do SMS-ów"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Nie wybrano preferowanej karty SIM do wysyłania SMS-ów"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Właściciel urządzenia nie zezwolił na działanie tej aplikacji."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Zbyt wielu uczestników rozmowy"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="few">Nieprawidłowe kontakty</item>
-      <item quantity="many">Nieprawidłowe kontakty</item>
-      <item quantity="other">Nieprawidłowe kontakty</item>
-      <item quantity="one">Nieprawidłowy kontakt</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Nie udało się załadować zdjęcia z aparatu"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Ty: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Wersja robocza"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Po rozpoczęciu nowej rozmowy zobaczysz ją tutaj"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Tutaj będą widoczne zarchiwizowane wątki"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Ładuję wątki…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Zdjęcie"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Klip dźwiękowy"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Film"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Wizytówka"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Cofnij"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Ponów"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Wpisz nazwę kontaktu lub numer telefonu, by rozpocząć nową wiadomość"</string>
-    <string name="action_block" msgid="9032076625645190136">"Zablokuj"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Zablokuj: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Odblokuj: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Zablokować <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Będziesz nadal otrzymywać wiadomości z tego numeru, ale nie będzie już powiadomień o nich. Ten wątek zostanie zarchiwizowany."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Zablokowane kontakty"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ODBLOKUJ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Zablokowane kontakty"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Wybierz obraz z biblioteki dokumentów"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Wysyłam wiadomość"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Wiadomość wysłana"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Komórkowa transmisja danych jest wyłączona. Sprawdź ustawienia."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"W trybie samolotowym nie można wysyłać wiadomości"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Nie można wysłać wiadomości"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Wiadomość pobrana"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Komórkowa transmisja danych jest wyłączona. Sprawdź ustawienia."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Wiadomości nie można pobierać w trybie samolotowym"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Nie udało się pobrać wiadomości"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Jeden"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dwa"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Trzy"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Cztery"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Pięć"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Sześć"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Siedem"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Osiem"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Dziewięć"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Nie można wysłać wiadomości w sieci <xliff:g id="CARRIERNAME">%1$s</xliff:g> (błąd <xliff:g id="ERRORCODE">%2$d</xliff:g>)"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Nie można wysłać wiadomości w sieci nieznanego operatora (błąd <xliff:g id="ERRORCODE">%1$d</xliff:g>)"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"PD: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Nie wysłano wiadomości: usługa nie została aktywowana w sieci"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Wiadomość nie została wysłana: nieprawidłowy adres docelowy"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Wiadomość nie została wysłana: nieprawidłowa wiadomość"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Wiadomość nie została wysłana: nieobsługiwane treści"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Wiadomość nie została wysłana: nieobsługiwana wiadomość"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Wiadomość nie została wysłana: jest za duża"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nowa wiadomość"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Wyświetl"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Obraz"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Nie udało się znaleźć stosownej aplikacji"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Usuń odbiorcę"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nowa wiadomość"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Anuluj"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Edytuj punkt dostępu"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nie ustawiono"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nazwa"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy dla MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Port MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Typ APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Usuń APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nowy APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Zapisz"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Odrzuć"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Pole Nazwa nie może być puste."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Nazwa APN nie może być pusta."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Pole MCC musi zawierać 3 cyfry."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Pole MNC musi zawierać 2 lub 3 cyfry."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Przywracam domyślne ustawienia APN."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Przywróć domyślne"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Przywrócono domyślne ustawienia APN."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Bez nazwy"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Nazwy punktów dostępu"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-y"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nowy APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Ustawienia nazwy punktu dostępu są niedostępne dla tego użytkownika"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Skopiować do schowka?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopiuj"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"do <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Ogólne"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Zaawansowane"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Ustawienia ogólne"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Ustawienia zaawansowane"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"Karta SIM „<xliff:g id="SIM_NAME">%s</xliff:g>”"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Wyślij osobne SMS-y do wszystkich odbiorców. Odpowiedzi trafią tylko do Ciebie"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Wysyłaj jednego MMS-a do wszystkich odbiorców"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Nieznany numer"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nowa wiadomość"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nowa wiadomość."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Przełącznik SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Przełącznik SIM, wybrana karta: <xliff:g id="SIM_0">%1$s</xliff:g>"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Edytuj temat"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Wybierz SIM lub edytuj temat"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Dotknij i przytrzymaj, aby nagrać dźwięk"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Zacznij nową rozmowę"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Wiadomości"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Lista wiadomości"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Wiadomości"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nowa wiadomość"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Lista wątków"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Ładuję wątki"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Wczytuję wiadomości"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Wyświetl więcej wątków"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Wyświetl więcej wiadomości"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Wątek został usunięty"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Rozmowa usunięta. Kliknij, by zobaczyć inną rozmowę w aplikacji SMS/MMS"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Zablokowano"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Odblokowano"</string>
-    <string name="db_full" msgid="8459265782521418031">"Mała ilość miejsca. Część danych może zostać utracona."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Wybierz załączniki"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Potwierdź wybór"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Wybrano <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Usuń co najmniej jeden załącznik i spróbuj ponownie."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Możesz spróbować wysłać wiadomość, ale może ona nie zostać dostarczona, dopóki nie usuniesz przynajmniej jednego załącznika."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"W jednej wiadomości możesz wysłać tylko jeden film. Usuń dodatkowe filmy i spróbuj ponownie."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Nie udało się załadować załącznika w aplikacji SMS/MMS."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Wyślij mimo wszystko"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Nie udało się rozpocząć rozmowy"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Wybrano <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-pt-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml
deleted file mode 100644
index 3f99811..0000000
--- a/res/values-pt-rPT/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"sem assunto"</item>
-    <item msgid="272485471009191934">"sem assunto"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Sim"</item>
-    <item msgid="6049132459802288033">"Não"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Eh eh"</item>
-    <item msgid="2611328818571146775">"Obrigado"</item>
-    <item msgid="4881335087096496747">"Aceito"</item>
-    <item msgid="2422296858597420738">"Boa"</item>
-    <item msgid="4805581752819452687">"Estou a caminho"</item>
-    <item msgid="4746700499431366214">"OK, ligo mais tarde"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
deleted file mode 100644
index 5c64052..0000000
--- a/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Mensagens"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Mensagens"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Selecionar conversa"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Definições"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Enviar mensagem"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Adicionar um anexo"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Ajuda"</string>
-    <string name="welcome" msgid="2857560951820802321">"Bem-vindo"</string>
-    <string name="skip" msgid="7238879696319945853">"Ignorar"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Seguinte &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Seguinte"</string>
-    <string name="exit" msgid="1905187380359981199">"Sair"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Definições &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Definições"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"A aplicação Mensagens necessita de autorização para SMS, Telefone e Contactos."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Pode alterar as autorizações em Definições &gt; Aplicações &gt; Mensagens &gt; Autorizações."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Pode alterar as autorizações em Definições, Aplicações, Mensagens, Autorizações."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Frequentes"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Todos os contactos"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Enviar para <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Capturar imagens ou vídeo"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Escolher imagens deste dispositivo"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Gravar áudio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Escolher fotografia"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"O ficheiro multimédia está selecionado."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"O ficheiro multimédia está desselecionado."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> selecionado(s)"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"imagem de <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"imagem"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Gravar áudio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Partilhar"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Agora mesmo"</string>
-    <string name="posted_now" msgid="867560789350406701">"Agora"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> horas</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hora</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dias</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> dia</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> semanas</item>
-      <item quantity="one">uma semana</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> meses</item>
-      <item quantity="one">um mês</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> anos</item>
-      <item quantity="one">um ano</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Mensagem de classe 0"</string>
-    <string name="save" msgid="5081141452059463572">"Guardar"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"O dispositivo tem pouco espaço disponível. A aplicação Mensagens elimina automaticamente mensagens mais antigas para libertar espaço."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Está quase sem espaço de armazenamento"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"A aplicação Mensagens pode não enviar ou receber mensagens até que exista mais espaço disponível no dispositivo."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Armazenamento SMS reduzido. Pode ter de eliminar mensagens."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirmar número de telefone"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Este passo único assegura que a aplicação Mensagens fornece as suas mensagens de grupo corretamente."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Número de telefone"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Eliminar todas as mensagens com multimédia"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Eliminar mensagens com mais de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Eliminar automaticamente mensagens com mais de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorar"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Eliminar todas as mensagens com multimédia?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Eliminar mensagens com mais de <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Eliminar mensagens com mais de <xliff:g id="DURATION">%s</xliff:g> e ativar eliminação automática?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> disse"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Você disse"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Mensagem de <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Enviou uma mensagem"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"A enviar..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Não enviado. Toque para tentar novamente."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Não enviado. A tentar novamente..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Reenviar ou eliminar"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Faça uma chamada de voz para os serviços de emergência. Neste momento, não foi possível entregar a sua mensagem de texto."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Falha"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nova mensagem MMS para transferir"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nova mensagem MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Não foi possível transferir"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Toque para tentar novamente"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Toque para transferir"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Transferir ou eliminar"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"A transferir..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Mensagem expirada ou não disponível"</string>
-    <string name="mms_info" msgid="3402311750134118165">"tamanho: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, data de validade: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Não é possível enviar. O destinatário não é válido."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Serviço não ativado na rede"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Não foi possível enviar devido a um problema de rede"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Mensagem expirada ou não disponível"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Sem assunto)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Remetente desconhecido"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Entregue"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Não foi possível transferir a mensagem <xliff:g id="SUBJECT">%1$s</xliff:g> de <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Não foi possível concluir a operação da base de dados devido a pouca memória"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Mensagem não enviada"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Algumas mensagens não enviadas na aplicação Mensagens"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mensagens em <xliff:g id="CONVERSATIONS">%d</xliff:g> conversas</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mensagens numa conversa</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Mensagem não transferida"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Algumas mensagens não transferidas na aplicação Mensagens"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mensagens em <xliff:g id="CONVERSATIONS">%d</xliff:g> conversas</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mensagens numa conversa</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Mensagem para <xliff:g id="NUMBER">%1$s</xliff:g> não enviada"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Faça uma chamada de voz para os serviços de emergência. Neste momento, não foi possível entregar a sua mensagem de texto para o número <xliff:g id="NUMBER">%1$s</xliff:g>."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> novas mensagens</item>
-      <item quantity="one">Nova mensagem</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Iniciar"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Câmara não disponível"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Câmara não disponível"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Captura de vídeo não disponível"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Não é possível guardar multimédia"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Não é possível tirar a fotografia"</string>
-    <string name="back" msgid="1477626055115561645">"Anterior"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arquivadas"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Eliminar"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arquivar"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Retirar do arquivo"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Desativar as notificações"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Ativar notificações"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Adicionar contacto"</string>
-    <string name="action_download" msgid="7786338136368564146">"Transferir"</string>
-    <string name="action_send" msgid="377635240181672039">"Enviar"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Eliminar"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Pretende eliminar esta mensagem?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Esta ação não pode ser anulada."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Eliminar"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Pretende eliminar estas conversas?</item>
-      <item quantity="one">Pretende eliminar esta conversa?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Eliminar"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Cancelar"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Para"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Selecionar várias imagens"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirmar seleção"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Não é possível gravar áudio. Tente novamente."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Não é possível reproduzir áudio. Tente novamente."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Não foi possível guardar áudio. Tente novamente."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Toque sem largar"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Imagem"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Clipe de áudio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Vídeo"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Cartão de contacto"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Transferir"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Responder por SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Responder por MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Responder"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participantes</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> participante</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Eu"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contacto bloqueado e arquivado"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contacto desbloqueado e não arquivado"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> arquivada(s)"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> não arquivada(s)"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notificações desativadas"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notificações ativadas"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Tudo definido. Toque novamente em Enviar."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"A aplicação Mensagens foi definida com êxito como a aplicação de SMS predefinida."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Rejeitar anexos</item>
-      <item quantity="one">Rejeitar anexo</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Anexo de áudio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Reproduzir anexo de áudio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Interromper"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Mensagem de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Mensagem falhada de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Mensagem de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Mensagem não enviada para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"A enviar mensagem para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Mensagem falhada para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Mensagem para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Mensagem falhada de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Mensagem de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Mensagem não enviada para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"A enviar mensagem para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Mensagem falhada para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Mensagem para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Mensagem falhada. Toque para tentar novamente."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversa com <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Eliminar assunto"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Capturar vídeo"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Capturar uma imagem fixa"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Tirar fotografia"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Começar a gravar vídeo"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Mudar para a câmara de ecrã completo"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Alternar entre as câmaras frontal e traseira"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Parar gravação e anexar vídeo"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Parar a gravação de vídeo"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotos das Mensagens"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotos guardadas no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> foto guardada no álbum \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> vídeos guardados no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> vídeo guardado no álbum \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> anexos guardados no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> anexo guardado no álbum \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> anexos guardados em \"Transferências\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> anexo guardado em \"Transferências\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> anexos guardados</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> anexo guardado</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Não foi possível guardar <xliff:g id="QUANTITY_1">%d</xliff:g> anexos</item>
-      <item quantity="one">Não foi possível guardar <xliff:g id="QUANTITY_0">%d</xliff:g> anexo</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Anexo de MMS guardado"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Definições"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arquivadas"</string>
-    <string name="action_close" msgid="1840519376200478419">"Fechar"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avançadas"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Depurar"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notificações"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Som"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silencioso"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrar"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloqueado"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Relatórios de entrega de SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Solicitar um relatório de entrega para cada SMS enviada"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Recuperação automática"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Recuperar automaticamente mensagens MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Recuperar automat. em roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Obter automaticamente MMS em roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Mensagens de grupo"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Utilizar MMS para enviar uma única mensagem quando houver vários destinatários"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Aplicação de SMS predefinida"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Aplicação de SMS predefinida"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"O seu número de telefone"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Desconhecido"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Sons de mensagem enviada"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Criar cópia de segurança de SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"A cópia de segurança recebeu dados SMS não processados no ficheiro de armazenamento externo"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Criar cópia de segurança de MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"A cópia de segurança recebeu dados MMS não processados no ficheiro de armazenamento externo"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Alertas sem fios"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opções da mensagem"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copiar texto"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Ver detalhes"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Eliminar"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Encaminhar"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Detalhes da mensagem"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tipo: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Mensagem de texto"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mensagem multimédia"</string>
-    <string name="from_label" msgid="1947831848146564875">"De: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Para: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Enviadas: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Recebidas: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Assunto: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Tamanho: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioridade: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Alta"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Baixa"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Endereço do remetente oculto"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Não é possível enviar a mensagem enquanto os anexos estiverem a ser carregados."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Não é possível carregar o anexo. Tente novamente."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"A rede não está pronta. Tente novamente."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Eliminar texto"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Alternar entre a introdução de texto e números"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Adicionar mais participantes"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirmar participantes"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Iniciar nova conversa"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Selecionar este item"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Reproduzir vídeo"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Pessoas e opções"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Depurar"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Pessoas e opções"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Geral"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Pessoas nesta conversa"</string>
-    <string name="action_call" msgid="6596167921517350362">"Efetuar uma chamada"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Enviar mensagem"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Enviar mensagem&lt;br/&gt;&lt;small&gt;de <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Enviar fotos</item>
-      <item quantity="one">Enviar foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Enviar ficheiros de áudio</item>
-      <item quantity="one">Enviar ficheiro de áudio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Enviar vídeos</item>
-      <item quantity="one">Enviar vídeo</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Enviar cartões de contacto</item>
-      <item quantity="one">Enviar cartão de contacto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Enviar anexos</item>
-      <item quantity="one">Enviar anexo</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> anexos prontos a enviar</item>
-      <item quantity="one">Um anexo pronto a enviar</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Enviar comentários"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Ver na Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informações da versão"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versão %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licenças de código aberto"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notificações"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Foi atingido o limite de anexos"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Falha ao carregar o anexo."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Adicionar a Contactos?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Adicionar contacto"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Assunto"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Assunto: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"A carregar o cartão de contacto"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Não foi possível carregar o cartão de contacto"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Ver cartão de contacto"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contactos</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Cartões de contacto"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Aniversário"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notas"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Encaminhar mensagem"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Responder"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS desativado"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Para enviar, defina a aplicação Mensagens como a aplicação de SMS predefinida"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Defina a aplicação Mensagens como a aplicação de SMS predefinida"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Alterar"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Para receber mensagens, defina a aplicação Mensagens como a aplicação de SMS predefinida"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Nenhum SIM preferido selecionado para o envio de mensagens SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Esta aplicação não é permitida pelo proprietário do dispositivo."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Demasiados participantes numa conversa"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Contactos inválidos</item>
-      <item quantity="one">Contacto inválido</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Não foi possível carregar a imagem da câmara"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Utilizador: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Rascunho"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Ao iniciar uma nova conversa, esta será listada aqui"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"As conversas arquivadas aparecem aqui"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"A carregar conversações..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Imagem"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Clipe de áudio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Vídeo"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Cartão de contacto"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Anular"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Tentar novamente"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Introduza um nome ou número de telefone do contacto para iniciar uma nova mensagem"</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloquear"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloquear <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Desbloquear <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Pretende bloquear <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"O utilizador continuará a receber mensagens deste número, mas deixará de ser notificado. Esta conversa será arquivada."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Contactos bloqueados"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DESBLOQUEAR"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Contactos bloqueados"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Escolher imagem da biblioteca de documentos"</string>
-    <string name="sending_message" msgid="6363584950085384929">"A enviar mensagem"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Mensagem enviada"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Os dados celulares estão desligados. Verifique as suas definições."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Não é possível enviar mensagens no modo de avião"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Não foi possível enviar a mensagem"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Mensagem transferida"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Os dados celulares estão desligados. Verifique as suas definições."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Não é possível transferir mensagens no modo de avião"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Não foi possível transferir a mensagem"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Um"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dois"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Três"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Quatro"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Cinco"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Seis"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sete"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Oito"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nove"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Não é possível enviar a mensagem com <xliff:g id="CARRIERNAME">%1$s</xliff:g>, erro <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Não é possível enviar a mensagem com operador desconhecido, erro <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Enc: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Mensagem não enviada: serviço não ativado na rede"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Mensagem não enviada: endereço de destino inválido"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Mensagem não enviada: mensagem inválida"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Mensagem não enviada: conteúdo não suportado"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Mensagem não enviada: a mensagem não é compatível"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Mensagem não enviada: demasiado grande"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nova mensagem"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Ver"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Imagem"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Não foi possível encontrar uma aplicação adequada"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Remover o destinatário"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nova mensagem"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Cancelar"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Editar ponto de acesso"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Não definido"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nome"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy de MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Porta MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Tipo de APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Eliminar APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Novo APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Guardar"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Rejeitar"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"O campo Nome não pode estar vazio."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"O APN não pode estar vazio."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"O campo MCC tem de ter 3 dígitos."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"O campo MNC tem de ter 2 ou 3 dígitos."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"A restaurar as predefinições do APN"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Repor as predefinições"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Reposição das predefinições do APN concluída."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Sem nome"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Nomes dos Pontos de Acesso"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Novo APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"As definições de Nome do Ponto de Acesso não estão disponíveis para este utilizador"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Pretende copiar para a área de transferência?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copiar"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"em <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Geral"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avançadas"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Definições gerais"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Definições avançadas"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Enviar mensagens SMS individuais para todos os destinatários. Apenas o utilizador recebe as respostas"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Enviar uma única MMS para todos os destinatários"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Número desconhecido"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nova mensagem"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nova mensagem."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Seletor de SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> selecionado, seletor de SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Editar assunto"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Selecionar SIM ou editar assunto"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Tocar sem soltar para gravar áudio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Iniciar nova conversa"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Mensagens"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Lista de mensagens"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Mensagens"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nova mensagem"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Lista de conversas"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"A carregar conversas"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"A carregar mensagens"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Ver mais conversas"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Ver mais mensagens"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversa eliminada"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Conversa eliminada. Toque para mostrar uma conversa das Mensagens diferente"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloqueado"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Desbloqueado"</string>
-    <string name="db_full" msgid="8459265782521418031">"O espaço de armazenamento é reduzido. Alguns dados podem ser perdidos."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Selecionar anexos"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirmar seleção"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> selecionado(s)"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Remova um ou mais anexos e tente novamente."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Pode tentar enviar a sua mensagem, mas esta pode não ser entregue se não remover um ou mais anexos."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Apenas pode enviar um vídeo por mensagem. Remova os vídeos adicionais e tente novamente."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Falha da aplicação Mensagens ao carregar o anexo."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Enviar mesmo assim"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Não foi possível iniciar a conversa"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> selecionado"</string>
-</resources>
diff --git a/res/values-pt/arrays.xml b/res/values-pt/arrays.xml
deleted file mode 100644
index 0ab0334..0000000
--- a/res/values-pt/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"sem assunto"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Sim"</item>
-    <item msgid="6049132459802288033">"Não"</item>
-    <item msgid="3084376867445867895">"Ok"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Obrigado"</item>
-    <item msgid="4881335087096496747">"Concordo"</item>
-    <item msgid="2422296858597420738">"Legal"</item>
-    <item msgid="4805581752819452687">"Estou a caminho"</item>
-    <item msgid="4746700499431366214">"OK, falo com você mais tarde"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
deleted file mode 100644
index bd60502..0000000
--- a/res/values-pt/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Mensagens"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Mensagens"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Selecionar uma conversa"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Configurações"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Enviar mensagem"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Adicionar um anexo"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Ajuda"</string>
-    <string name="welcome" msgid="2857560951820802321">"Bem-vindo"</string>
-    <string name="skip" msgid="7238879696319945853">"Pular"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Próxima &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Próximo"</string>
-    <string name="exit" msgid="1905187380359981199">"Sair"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Configurações &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Configurações"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"O app Mensagens precisa de permissão para SMS, telefone e contatos."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"É possível alterar as permissões em \"Config. &gt; Apps &gt; Mensagens &gt; Permissões\"."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"É possível alterar as permissões em \"Config. &gt; Apps &gt; Mensagens &gt; Permissões\"."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Frequentes"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Todos os contatos"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Enviar para <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Capturar fotos ou vídeos"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Escolher imagens do dispositivo"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Gravar áudio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Escolher foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"A mídia foi selecionada."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"A mídia foi desmarcada."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> selecionado"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"imagem <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"imagem"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Gravar áudio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Compartilhar"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Há pouco"</string>
-    <string name="posted_now" msgid="867560789350406701">"Agora"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> horas</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> horas</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> dias</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dias</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> semanas</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> semanas</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> meses</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> meses</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> anos</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> anos</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Mensagem classe 0"</string>
-    <string name="save" msgid="5081141452059463572">"Salvar"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"O dispositivo está com pouco espaço. As mensagens mais antigas serão excluídas automaticamente para liberar espaço."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Pouco espaço de armazenamento"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"O app Mensagens talvez não envie ou receba mensagens até que mais espaço esteja disponível no seu dispositivo."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Pouco espaço para SMS. Pode ser necessário excluir mensagens."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirme seu número de telefone"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Esta etapa única garantirá que o app Mensagens entregue suas mensagens em grupo corretamente."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Número de telefone"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Excluir todas as mensagens com mídia"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Excluir mensagens com mais de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Excluir automaticamente mensagens com mais de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorar"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Excluir todas as mensagens com mídia?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Excluir mensagens com mais de <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Excluir mensagens com mais de <xliff:g id="DURATION">%s</xliff:g> e ativar a exclusão automática?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> disse"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Você disse"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Mensagem de <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Você enviou uma mensagem"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Enviando…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Não enviado. Toque para tentar novamente."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Não enviado. Tentando novamente…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Reenviar ou excluir"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Faça uma chamada de voz para os serviços de emergência. Não foi possível entregar sua mensagem de texto no momento."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Falhou"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nova mensagem MMS para fazer o download"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nova mensagem MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Falha no download"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Tocar para tentar novamente"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Tocar para fazer o download"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Fazer o download ou excluir"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Fazendo o download…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"A mensagem expirou ou não está disponível"</string>
-    <string name="mms_info" msgid="3402311750134118165">"tamanho: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, validade: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Falha ao enviar. Destinatário inválido."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Serviço não ativado na rede"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Falha ao enviar devido a um problema de rede"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"A mensagem expirou ou não está disponível"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Sem assunto)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Remetente desconhecido"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Entregue"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Não foi possível fazer o download da mensagem <xliff:g id="SUBJECT">%1$s</xliff:g> de <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Não foi possível concluir a operação do banco de dados devido a memória insuficiente"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Mensagem não enviada"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Algumas mensagens não foram enviadas no app Mensagens"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> mensagens em <xliff:g id="CONVERSATIONS">%d</xliff:g> conversas</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mensagens em <xliff:g id="CONVERSATIONS">%d</xliff:g> conversas</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Download da mensagem não realizado"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Não foi feito o download de algumas mensagens no app Mensagens"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> mensagens em <xliff:g id="CONVERSATIONS">%d</xliff:g> conversas</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mensagens em <xliff:g id="CONVERSATIONS">%d</xliff:g> conversas</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Mensagem para <xliff:g id="NUMBER">%1$s</xliff:g> não enviada"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Faça uma chamada de voz para os serviços de emergência. Não foi possível entregar sua mensagem de texto para <xliff:g id="NUMBER">%1$s</xliff:g> no momento."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> novas mensagens</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> novas mensagens</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Iniciar"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Câmera não disponível"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Câmera não disponível"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Captura de vídeo não disponível"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Falha ao salvar a mídia"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Não é possível tirar uma foto"</string>
-    <string name="back" msgid="1477626055115561645">"Voltar"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arquivadas"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Excluir"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arquivar"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Desarquivar"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Desativar notificações"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Ativar notificações"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Adicionar contato"</string>
-    <string name="action_download" msgid="7786338136368564146">"Fazer o download"</string>
-    <string name="action_send" msgid="377635240181672039">"Enviar"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Excluir"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Excluir esta mensagem?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Esta ação não pode ser desfeita."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Excluir"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Excluir estas conversas?</item>
-      <item quantity="other">Excluir estas conversas?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Excluir"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Cancelar"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Para"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Selecionar várias imagens"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirmar seleção"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Falha ao gravar o áudio. Tente novamente."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Falha ao reproduzir o áudio. Tente novamente."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Falha ao salvar o áudio. Tente novamente."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Toque e mantenha pressionado"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Imagem"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Clipe de áudio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Vídeo"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Cartão de visita"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Download"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Responder via SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Responder via MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Responder"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> participantes</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> participantes</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Eu"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Contato bloqueado e arquivado"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Contato desbloqueado e desarquivado"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> arquivada(s)"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> desarquivada(s)"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notificações desativadas"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notificações ativadas"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Tudo pronto. Toque em \"Enviar\" novamente."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"O app Mensagens foi definido como o app padrão de SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Descartar anexos</item>
-      <item quantity="other">Descartar anexos</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Anexo de áudio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Reproduzir anexo de áudio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pausa"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Mensagem de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Falha na mensagem de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Mensagem de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Mensagem não enviada para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Enviando mensagem para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Falha na mensagem para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Mensagem para <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Falha na mensagem de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Mensagem de <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Mensagem não enviada para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Enviando mensagem para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Falha na mensagem para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Mensagem para <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Hora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Falha na mensagem. Toque para tentar novamente."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversa com <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Excluir assunto"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Capturar vídeo"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Capturar uma imagem estática"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Tirar foto"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Iniciar gravação de vídeo"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Alternar para câmera em tela cheia"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Alternar entre câmera frontal e traseira"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Parar a gravação e anexar vídeo"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Parar gravação de vídeo"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotos do app Mensagens"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> fotos salvas no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotos salvas no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> vídeos salvos no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> vídeos salvos no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> anexos salvos no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> anexos salvos no álbum \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> anexos salvos em \"Downloads\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> anexos salvos em \"Downloads\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> anexos salvos</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> anexos salvos</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Não foi possível salvar <xliff:g id="QUANTITY_1">%d</xliff:g> anexos</item>
-      <item quantity="other">Não foi possível salvar <xliff:g id="QUANTITY_1">%d</xliff:g> anexos</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Anexo MMS salvo"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Configurações"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arquivadas"</string>
-    <string name="action_close" msgid="1840519376200478419">"Fechar"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avançadas"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Depurar"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notificações"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Som"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silencioso"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibração"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloqueado"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Relat. de entrega de SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Solicitar um relatório de entrega para cada SMS enviado"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Recuperação automática"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Recuperar mensagens MMS automaticamente"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Recup. autom. em roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Recuperar MMS automaticamente durante roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Mensagens em grupo"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Usar MMS para enviar uma única mensagem para vários destinatários"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"App de SMS padrão"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"App de SMS padrão"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Seu número de telefone"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Desconhecido"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Sons de mensagem de saída"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Descartar SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Descartar dados brutos de SMS recebidos no arquivo de armazenamento externo"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Descartar MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Descartar dados brutos de MMS recebidos no arquivo de armazenamento externo"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Alertas sem fio"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opções de mensagem"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copiar texto"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Ver detalhes"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Excluir"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Avançar"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Detalhes da mensagem"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tipo: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Mensagem de texto"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mensagem multimídia"</string>
-    <string name="from_label" msgid="1947831848146564875">"De: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Para: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Enviada: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Recebida: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Assunto: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Tamanho: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioridade: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Alta"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Baixa"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Endereço do remetente oculto"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Não é possível enviar mensagens ao carregar anexos."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Falha ao carregar o anexo. Tente novamente."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"A rede não está pronta. Tente novamente."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Excluir texto"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Alternar entre entrada de texto ou números"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Adicionar mais participantes"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirmar participantes"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Iniciar nova conversa"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Selecione este item"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Reproduzir vídeo"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Pessoas e opções"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Depurar"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Pessoas e opções"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Gerais"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Pessoas nesta conversa"</string>
-    <string name="action_call" msgid="6596167921517350362">"Fazer uma chamada"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Enviar mensagem"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Enviar mensagem&lt;br/&gt;&lt;small&gt;de <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Enviar fotos</item>
-      <item quantity="other">Enviar fotos</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Enviar áudios</item>
-      <item quantity="other">Enviar áudios</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Enviar vídeos</item>
-      <item quantity="other">Enviar vídeos</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Enviar cards de contato</item>
-      <item quantity="other">Enviar cards de contato</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Enviar anexos</item>
-      <item quantity="other">Enviar anexos</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> anexos prontos para envio</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> anexos prontos para envio</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Enviar feedback"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Ver na Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informações da versão"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versão %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licenças de código aberto"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notificações"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Limite de anexos alcançado"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Falha ao carregar anexo."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Adicionar a Contatos?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Adicionar contato"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Assunto"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Assunto: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Carregando cartão de visita"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Falha ao carregar o cartão de visita"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Ver cartão de visita"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contatos</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contatos</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Cartões de visita"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Aniversário"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notas"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Encaminhar mensagem"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Responder"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS desativado"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Para enviar, defina o Mensagens como app padrão de SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Definir o Mensagens como o app padrão de SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Alterar"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Para receber mensagens, defina o Mensagens como app padrão de SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Nenhum SIM preferido para o envio de mensagens SMS selecionado"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Este app não é permitido pelo proprietário do dispositivo."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Ok"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Muitos participantes em uma conversa"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Contatos inválidos</item>
-      <item quantity="other">Contatos inválidos</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Falha ao carregar a imagem da câmera"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Você: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Rascunho"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Quando uma nova conversa for iniciada, será listada aqui"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"As conversas arquivadas aparecem aqui"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Carregando conversas…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Imagem"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Clipe de áudio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Vídeo"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Cartão de visita"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Desfazer"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Repetir"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Digite o nome ou telefone de um contato para iniciar uma nova mensagem"</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloquear"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloquear <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Desbloquear <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Bloquear <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Você continuará recebendo mensagens deste número, mas não será notificado. Esta conversa será ativada."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Contatos bloqueados"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DESBLOQUEAR"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Contatos bloqueados"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Escolher imagem da biblioteca de documentos"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Enviando mensagem"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Mensagem enviada"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Dados da rede celular desativados. Verifique suas configurações."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Não é possível enviar mensagens no modo avião"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Não foi possível enviar a mensagem"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Mensagem baixada"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Dados da rede celular desativados. Verifique suas configurações."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Não é possível fazer o download de mensagens no modo Avião"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Não foi possível fazer o download da mensagem"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Um"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dois"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Três"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Quatro"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Cinco"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Seis"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sete"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Oito"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nove"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Não é possível enviar a mensagem com <xliff:g id="CARRIERNAME">%1$s</xliff:g>. Erro: <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Não é possível enviar a mensagem com operadora desconhecida. Erro: <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Enc: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Mensagem não enviada: serviço não ativado na rede"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Mensagem não enviada: endereço de destino inválido"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Mensagem não enviada: mensagem inválida"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Mensagem não enviada: conteúdo não compatível"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Mensagem não enviada: mensagem não compatível"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Mensagem não enviada: muito grande"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nova mensagem"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Visualizar"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Imagem"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Não foi possível encontrar um app adequado"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Remover destinatário"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nova mensagem"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Cancelar"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Editar ponto de acesso"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Não definido"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nome"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Porta MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Tipo de APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Excluir APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Novo APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Salvar"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Descartar"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"O campo Nome não pode ficar vazio."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"O APN não pode estar vazio."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"O campo MCC deve ter 3 dígitos."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"O campo MNC deve ter 2 ou 3 dígitos."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Restaurando as configurações APN padrão."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Redefinir para o padrão"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Redefinição das configurações padrão do APN concluída."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Sem título"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Nomes dos pontos de acesso"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Novo APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"As configurações do Nome do ponto de acesso não estão disponíveis para este usuário"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Copiar para área de transferência?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copiar"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"para <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Gerais"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avançadas"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Configurações gerais"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Configurações avançadas"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Enviar mensagens SMS individuais para todos os destinatários. Só você receberá respostas"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Enviar uma só mensagem MMS para todos os destinatários"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Número desconhecido"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nova mensagem"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nova mensagem."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Seletor de SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> selecionado, seletor de SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Editar assunto"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Selecione o SIM ou edite o assunto"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Toque e segure para gravar áudio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Iniciar nova conversa"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Mensagens"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Lista de mensagens"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Mensagens"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nova mensagem"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Lista de conversas"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Carregando conversas"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Carregando mensagens"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Ver mais conversas"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Ver mais mensagens"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversa excluída"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Conversa excluída. Toque para mostrar outra conversa do app Mensagens"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Contato bloqueado"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Contato desbloqueado"</string>
-    <string name="db_full" msgid="8459265782521418031">"O espaço de armazenamento está baixo. Alguns dados podem ser perdidos."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Selecionar anexos"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirmar seleção"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> selecionados"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Remova um ou mais anexos e tente novamente."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Tente enviar sua mensagem. Se ela não for entregue, remova um ou mais anexos."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Você só pode enviar um vídeo por mensagem. Remova os vídeos adicionais e tente novamente."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Ocorreu uma falha no app Mensagens ao carregar o anexo."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Enviar mesmo assim"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Não foi possível iniciar a conversa"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> selecionado"</string>
-</resources>
diff --git a/res/values-ro/arrays.xml b/res/values-ro/arrays.xml
deleted file mode 100644
index dc5e3fe..0000000
--- a/res/values-ro/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"fără subiect"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Da"</item>
-    <item msgid="6049132459802288033">"Nu"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Mulțumesc"</item>
-    <item msgid="4881335087096496747">"Sunt de acord"</item>
-    <item msgid="2422296858597420738">"Frumos"</item>
-    <item msgid="4805581752819452687">"Sunt pe drum"</item>
-    <item msgid="4746700499431366214">"OK, revin mai târziu"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
deleted file mode 100644
index 2f9c5a7..0000000
--- a/res/values-ro/strings.xml
+++ /dev/null
@@ -1,545 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Mesaje"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Mesaje"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Selectați conversația"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Setări"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Trimiteți mesajul"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Adăugați un atașament"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Ajutor"</string>
-    <string name="welcome" msgid="2857560951820802321">"Bun venit"</string>
-    <string name="skip" msgid="7238879696319945853">"Omiteți"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Înainte &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Înainte"</string>
-    <string name="exit" msgid="1905187380359981199">"Ieșiți"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Setări &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Setări"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Mesageria necesită permisiuni la SMS, Telefon și Agendă."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Puteți să schimbați permisiunile din Setări &gt; Aplicații &gt; Mesagerie &gt; Permisiuni."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Puteți să schimbați permisiunile din Setări, Aplicații, Mesagerie, Permisiuni."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Folosite frecvent"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Toată agenda"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Trimiteți la <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Faceți fotografii sau înregistrați videoclipuri"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Alegeți imagini de pe acest dispozitiv"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Înregistrați conținut audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Alegeți o fotografie"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Conținutul media este selectat."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Conținutul media este deselectat."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Ați selectat <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"imagine din <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"imagine"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Înregistrați conținut audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Trimiteți"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Adineauri"</string>
-    <string name="posted_now" msgid="867560789350406701">"Acum"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> minute</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> de minute</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> minut</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> ore</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> de ore</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> oră</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> zile</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> de zile</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> zi</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> săptămâni</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de săptămâni</item>
-      <item quantity="one">o săptămână</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> luni</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de luni</item>
-      <item quantity="one">o lună</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> ani</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de ani</item>
-      <item quantity="one">un an</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Mesaje clasa 0"</string>
-    <string name="save" msgid="5081141452059463572">"Salvați"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Spațiul de stocare pe dispozitiv este redus. Mesageria va șterge automat mesaje mai vechi pentru a elibera spațiul."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Spațiu de stocare limitat"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Este posibil ca aplicația Mesagerie să nu trimită și să nu primească mesaje până când nu este disponibil mai mult spațiu pe dispozitiv."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Spațiu de stocare scăzut pentru SMS-uri. Poate fi necesar să ștergeți unele mesaje."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Confirmați numărul de telefon"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Prin acest pas efectuat o singură dată vă asigurați că Mesageria va livra în mod corespunzător mesajele de grup."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Număr de telefon"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Ștergeți toate mesajele multimedia"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Ștergeți mesajele mai vechi de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Ștergeți automat mesajele mai vechi de <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorați"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Ștergeți toate mesajele multimedia?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Ștergeți mesajele mai vechi de <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Ștergeți mesajele mai vechi de <xliff:g id="DURATION">%s</xliff:g> și activați ștergerea automată?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> a spus"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Ați spus"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Mesaj de la <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Ați trimis un mesaj"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Se trimite..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Nu s-a trimis. Atingeți pentru a încerca din nou."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Nu s-a trimis. Se încearcă din nou..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Trimiteți din nou sau ștergeți"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Inițiați un apel vocal către serviciile de urgență. Momentan, mesajul text nu a putut fi livrat."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Eroare"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Mesaj MMS nou de descărcat"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Mesaj MMS nou"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Descărcarea nu a reușit"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Atingeți pentru a reîncerca"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Atingeți pentru a descărca"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Descărcați sau ștergeți"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Se descarcă..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Mesajul a expirat sau nu este disponibil"</string>
-    <string name="mms_info" msgid="3402311750134118165">"dimensiune: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, expirare: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Nu se poate trimite. Destinatar nevalid."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Serviciul nu este activat în rețea"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Mesajul nu s-a putut trimite din cauza unei probleme de rețea"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Mesajul a expirat sau nu este disponibil."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Fără subiect)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Expeditor necunoscut"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Livrat"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Nu s-a putut descărca mesajul <xliff:g id="SUBJECT">%1$s</xliff:g> de la <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Nu s-a putut finaliza operațiunea în baza de date din cauza memoriei reduse"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Mesajul nu a fost trimis."</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Unele mesaje nu au fost trimise în Mesagerie"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> (de) mesaje în <xliff:g id="CONVERSATIONS">%d</xliff:g> conversații</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> (de) mesaje în <xliff:g id="CONVERSATIONS">%d</xliff:g> de conversații</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> (de) mesaje într-o conversație</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Mesajul nu a fost descărcat"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Unele mesaje nu au fost descărcate în Mesagerie"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> (de) mesaje în <xliff:g id="CONVERSATIONS">%d</xliff:g> conversații</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> (de) mesaje în <xliff:g id="CONVERSATIONS">%d</xliff:g> de conversații</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> (de) mesaje într-o conversație</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Mesajul către <xliff:g id="NUMBER">%1$s</xliff:g> nu a fost trimis"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Inițiați un apel vocal către serviciile de urgență. Momentan, mesajul text către <xliff:g id="NUMBER">%1$s</xliff:g> nu a putut fi livrat."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> mesaje noi</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> de mesaje noi</item>
-      <item quantity="one">Mesaj nou</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Începeți"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Camera foto nu este disponibilă"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Camera foto nu este disponibilă"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Filmarea video nu este disponibilă"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Nu se poate salva fișierul multimedia"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Nu se poate fotografia"</string>
-    <string name="back" msgid="1477626055115561645">"Înapoi"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arhivate"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Ștergeți"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arhivați"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Dezarhivați"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Dezactivați notificările"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Activați notificările"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Adăugați o persoană"</string>
-    <string name="action_download" msgid="7786338136368564146">"Descărcați"</string>
-    <string name="action_send" msgid="377635240181672039">"Trimiteți"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Ștergeți"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Ștergeți acest mesaj?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Această acțiune nu poate fi anulată."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Ștergeți"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="few">Ștergeți aceste conversații?</item>
-      <item quantity="other">Ștergeți aceste conversații?</item>
-      <item quantity="one">Ștergeți această conversație?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Ștergeți"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Anulați"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Către"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Selectați mai multe imagini"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Confirmați selecția"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Mesajul audio nu poate fi înregistrat. Încercați din nou."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Mesajul audio nu poate fi redat. Încercați din nou."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Mesajul audio nu a putut fi salvat. Încercați din nou."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Apăsați lung"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Imagine"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Clip audio"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Videoclip"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Carte de vizită"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Descărcați"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Răspundeți prin SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Răsp. prin MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Răspundeți"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> participanți</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> de participanți</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> participant</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Eu"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Persoana de contact este blocată și arhivată"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Persoană de contact deblocată și dezarhivată"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> arhivate"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> dezarhivate"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Notificări dezactivate"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Notificări activate"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Gata. Atingeți din nou Trimiteți."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Mesageria a fost setată ca aplicație prestabilită pentru SMS-uri."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="few">Eliminați atașamentele</item>
-      <item quantity="other">Eliminați atașamentele</item>
-      <item quantity="one">Eliminați atașamentul</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Atașament audio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Redați atașamentul audio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pauză"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Mesaj de la <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Mesaj neprimit de la <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Mesaj de la <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Mesaj netrimis către <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Se trimite mesajul către <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Mesaj netrimis către <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Mesaj către <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Mesaj neprimit de la <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Mesaj de la <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Mesaj netrimis către <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Se trimite mesajul către <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Mesaj netrimis către <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Mesaj către <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Mesaj nelivrat. Atingeți pentru a reîncerca."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Conversație cu <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Ștergeți subiectul"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Înregistrați conținut video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Fotografiați o imagine statică"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Fotografiaţi"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Începeți să înregistrați conținut video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Comutați la camera pe ecran complet"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Comutați între camera foto frontală și camera foto posterioară"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Opriți înregistrarea și atașați videoclipul"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Opriți înregistrarea video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotografii din Mesagerie"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> fotografii salvate în albumul „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> de fotografii salvate în albumul „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> fotografie salvată în albumul „<xliff:g id="ALBUMNAME_1">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> videoclipuri salvate în albumul „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> de videoclipuri salvate în albumul „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> videoclip salvat în albumul „<xliff:g id="ALBUMNAME_1">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> atașamente salvate în albumul „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> de atașamente salvate în albumul „<xliff:g id="ALBUMNAME_3">%s</xliff:g>”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> atașament salvat în albumul „<xliff:g id="ALBUMNAME_1">%s</xliff:g>”</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> atașamente salvate în „Descărcări”</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> de atașamente salvate în „Descărcări”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> atașament salvat în „Descărcări”</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> atașamente au fost salvate</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> de atașamente au fost salvate</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> atașament a fost salvat</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="few">Nu s-au putut salva <xliff:g id="QUANTITY_1">%d</xliff:g> atașamente</item>
-      <item quantity="other">Nu s-au putut salva <xliff:g id="QUANTITY_1">%d</xliff:g> de atașamente</item>
-      <item quantity="one">Nu s-a putut salva <xliff:g id="QUANTITY_0">%d</xliff:g> atașament</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Atașamentul MMS a fost salvat"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Setări"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arhivate"</string>
-    <string name="action_close" msgid="1840519376200478419">"Închideți"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avansate"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Remedierea erorilor"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Notificări"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Sunet"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Silențios"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrații"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blocat"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Rapoarte de trimitere a SMS-urilor"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Solicitați un raport de expediere pentru fiecare mesaj SMS trimis"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Preluare automată"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Preia automat mesajele MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Preluare automată în roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Preia automat mesajele MMS în roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Mesagerie de grup"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Utilizați serviciul MMS pentru a trimite un singur mesaj, atunci când există mai mulți destinatari"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Aplicație SMS prestabilită"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Aplicație SMS prestabilită"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Numărul dvs. de telefon"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Necunoscut"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Sunete pentru mesaje trimise"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Copiați mesajele SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Copiați datele brute din mesajele SMS primite în fișierul de stocare externă"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Copiați mesajele MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Copiați datele brute din mesajele MMS primite în fișierul de stocare externă"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Alerte wireless"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opţiuni mesaj"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Copiați textul"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Vedeți detaliile"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Ștergeți"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Redirecționați"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Detalii mesaj"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tip: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Mesaj text"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mesaj multimedia"</string>
-    <string name="from_label" msgid="1947831848146564875">"De la: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Către: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Trimis: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Primit: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Subiect: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Dimensiune: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioritate: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Ridicată"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normală"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Scăzută"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Adresa expeditorului este ascunsă"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Nu se poate trimite mesajul în timp ce se încarcă atașamente."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Nu se poate încărca atașamentul. Încercați din nou."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Rețeaua nu este gata. Încercați din nou."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Ștergeți textul"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Comutați între introducere de text și numere"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Adăugați mai mulți participanți"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Confirmați participanții"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Începeți o conversație nouă"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Selectați acest articol"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Redați videoclipul"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Persoane și opțiuni"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Remediați erorile"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Persoane și opțiuni"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Generale"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Persoane participante la conversație"</string>
-    <string name="action_call" msgid="6596167921517350362">"Efectuați un apel"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Trimiteți mesajul"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Trimiteți mesajul&lt;br/&gt;&lt;small&gt;de pe cardul <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="few">Trimiteți fotografiile</item>
-      <item quantity="other">Trimiteți fotografiile</item>
-      <item quantity="one">Trimiteți fotografia</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="few">Trimiteți fișierele audio</item>
-      <item quantity="other">Trimiteți fișierele audio</item>
-      <item quantity="one">Trimiteți fișierul audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="few">Trimiteți videoclipurile</item>
-      <item quantity="other">Trimiteți videoclipurile</item>
-      <item quantity="one">Trimiteți videoclipul</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="few">Trimiteți cărțile de vizită</item>
-      <item quantity="other">Trimiteți cărțile de vizită</item>
-      <item quantity="one">Trimiteți cartea de vizită</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="few">Trimiteți atașamentele</item>
-      <item quantity="other">Trimiteți atașamentele</item>
-      <item quantity="one">Trimiteți atașamentul</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="few"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> atașamente gata de trimis</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> de atașamente gata de trimis</item>
-      <item quantity="one">Un atașament gata de trimis</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Trimiteți feedback"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Vedeți în Magazinul Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informații despre versiune"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versiunea %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licențe open source"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Notificări"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"S-a atins limita pentru atașamente"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Atașamentul nu a putut fi încărcat."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Adăugați în Agendă?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Adăugați o persoană"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Subiect"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Subiect: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Se încarcă cartea de vizită"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Cartea de vizită nu a putut fi încărcată"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Vedeți cartea de vizită"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> persoane de contact</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> de persoane de contact</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> persoană de contact</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Cărți de vizită"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Ziua de naștere"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Note"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Redirecționați mesajul"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Răspundeți"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS-urile sunt dezactivate"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Pentru a trimite mesaje, setați Mesageria ca aplicație prestabilită pentru SMS-uri"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Setați Mesageria ca aplicație prestabilită pentru SMS-uri"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Modificați"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Pentru a primi mesaje, setați Mesageria ca aplicație prestabilită pentru SMS-uri"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Pentru trimiterea mesajelor SMS nu este selectat niciun card SIM preferat"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Această aplicație nu este acceptată de proprietarul dispozitivului."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Prea mulți participanți la o conversație"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="few">Persoane de contact nevalide</item>
-      <item quantity="other">Persoane de contact nevalide</item>
-      <item quantity="one">Persoană de contact nevalidă</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Nu s-a putut încărca imaginea de la camera foto"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Dvs.: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Mesaj nefinalizat"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Când începeți o nouă conversație, o veți vedea aici"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Conversațiile arhivate apar aici"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Conversațiile sunt în curs de încărcare..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Imagine"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Clip audio"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Videoclip"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Carte de vizită"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Anulați"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Reîncercați"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Introduceți numele unei persoane de contact sau un număr de telefon pentru a începe un nou mesaj"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blocați"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blocați <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Deblocați-l(o) pe <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Blocați <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Veți primi, în continuare, mesaje de la acest număr, dar nu veți mai primi notificări. Această conversație va fi arhivată."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Persoane din Agendă blocate"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"DEBLOCAȚI"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Persoane din Agendă blocate"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Alegeți imaginea din biblioteca de documente"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Se trimite mesajul"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Mesaj trimis"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Datele mobile sunt dezactivate. Verificați setările."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Nu se pot trimite mesaje în modul Avion"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Mesajul nu a putut fi trimis"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Mesaj descărcat"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Datele mobile sunt dezactivate. Verificați setările."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Nu se pot descărca mesaje în modul Avion"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Mesajul nu a putut fi descărcat"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Unu"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Doi"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Trei"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Patru"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Cinci"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Șase"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Șapte"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Opt"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nouă"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Nu se poate trimite mesaj prin <xliff:g id="CARRIERNAME">%1$s</xliff:g>, eroare <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Nu se poate trimite mesaj printr-un operator necunoscut, eroare <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Redir.: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Mesajul nu a fost trimis: serviciul nu este activat în rețea"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Mesajul nu a fost trimis: adresă de destinație nevalidă"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Mesajul nu a fost trimis: mesaj nevalid"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Mesajul nu a fost trimis: conținut neacceptat"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Mesajul nu a fost trimis: mesaj neacceptat"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Mesajul nu a fost trimis: mesaj prea mare"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Mesaj nou"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Afișați"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Imagine"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Nu am găsit o aplicație adecvată"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Eliminați un destinatar"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Mesaj nou"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Anulați"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Modificaţi punctul de acces"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nesetat"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nume"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Port MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Tip APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Ștergeți APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN nou"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Salvați"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Renunțați"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Câmpul Nume trebuie completat."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN-ul trebuie completat."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Câmpul MCC trebuie să conțină 3 cifre."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Câmpul MNC trebuie să conțină 2 sau 3 cifre."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Se restabilesc setările APN prestabilite."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Resetați la valorile prestabilite"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Resetarea setărilor APN prestabilite a fost finalizată."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Fără titlu"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Numele punctelor de acces"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-uri"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN nou"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Setările pentru „Nume puncte de acces” nu sunt disponibile pentru acest utilizator"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Copiați în clipboard?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Copiați"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"pe cardul <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Generale"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avansate"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Setări generale"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Setări avansate"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"Cartela SIM „<xliff:g id="SIM_NAME">%s</xliff:g>”"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Trimiteți mesaje SMS individuale către toți destinatarii. Numai dvs. veți primi răspunsurile."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Trimiteți un singur mesaj MMS către toți destinatarii"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Număr necunoscut"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Mesaj nou"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Mesaj nou."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Selector de SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> a fost selectat, selector de SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Editați subiectul"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Selectați cardul SIM sau editați subiectul"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Atingeți lung pentru a înregistra conținutul audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Începeți o conversație nouă"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Mesagerie"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Listă Mesagerie"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Mesagerie"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Mesaj nou"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Lista de conversații"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Se încarcă conversațiile"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Se încarcă mesajele"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Vedeți mai multe conversații"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Vedeți mai multe mesaje"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Conversație ștearsă"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Conversația a fost ștearsă. Atingeți pentru a afișa altă conversație din Mesagerie"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blocat"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Deblocat"</string>
-    <string name="db_full" msgid="8459265782521418031">"Spațiul de stocare este scăzut. Se pot pierde unele date."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Selectați atașamentele"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Confirmați selecția"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Ați selectat <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Eliminați unul sau mai multe atașamente și încercați din nou."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Puteți încerca să trimiteți mesajul, însă dacă nu eliminați unul sau mai multe atașamente, este posibil ca acesta să nu fie livrat."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Puteți trimite doar un videoclip per mesaj. Eliminați videoclipurile suplimentare și încercați din nou."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Mesageria nu a putut încărca atașamentul."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Trimiteți oricum"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Conversația nu a putut fi începută"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> selectat"</string>
-</resources>
diff --git a/res/values-ru/arrays.xml b/res/values-ru/arrays.xml
deleted file mode 100644
index 8af4db2..0000000
--- a/res/values-ru/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"без темы"</item>
-    <item msgid="272485471009191934">"без темы"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Да"</item>
-    <item msgid="6049132459802288033">"Нет"</item>
-    <item msgid="3084376867445867895">"ОК"</item>
-    <item msgid="3155097332660174689">"Ха-ха"</item>
-    <item msgid="2611328818571146775">"Спасибо!"</item>
-    <item msgid="4881335087096496747">"Хорошо"</item>
-    <item msgid="2422296858597420738">"Отлично"</item>
-    <item msgid="4805581752819452687">"Скоро буду"</item>
-    <item msgid="4746700499431366214">"ОК, отвечу позже"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
deleted file mode 100644
index 132f8c4..0000000
--- a/res/values-ru/strings.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"SMS/MMS"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"SMS/MMS"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Выберите чат"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Настройки"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Отправить сообщение"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Прикрепить файл"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Справка"</string>
-    <string name="welcome" msgid="2857560951820802321">"Добро пожаловать!"</string>
-    <string name="skip" msgid="7238879696319945853">"Пропустить"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Далее &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Далее"</string>
-    <string name="exit" msgid="1905187380359981199">"Закрыть"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Настройки &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Настройки"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Приложению SMS/MMS требуются разрешения категорий SMS, \"Телефон\" и \"Контакты\"."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Чтобы изменить разрешения, нажмите \"Настройки &gt; Приложения &gt; SMS/MMS &gt; Разрешения\"."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Чтобы изменить разрешения, нажмите \"Настройки &gt; Приложения &gt; SMS/MMS &gt; Разрешения\"."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Частые"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Все контакты"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Отправить на номер <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Снять фото или видео"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Выбрать изображения на устройстве"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Записать аудио"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Выбрать фотографию"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Медиафайл выбран"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Выбор отменен"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Выбрано: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"изображение <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"изображение"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Запись аудио"</string>
-    <string name="action_share" msgid="2143483844803153871">"Поделиться"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Только что"</string>
-    <string name="posted_now" msgid="867560789350406701">"Только что"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> минута</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> минуты</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> минут</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> минуты</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> час</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> часа</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> часов</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> часа</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> день</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> дня</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> дней</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> дня</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> неделя</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> недели</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> недель</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> недели</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> месяц</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> месяца</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> месяцев</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> месяца</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> год</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> года</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> лет</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> года</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Сообщение класса 0"</string>
-    <string name="save" msgid="5081141452059463572">"Сохранить"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Свободное место в памяти устройства заканчивается. Чтобы освободить его, приложение удалит старые сообщения."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Недостаточно памяти"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Недостаточно свободного места, чтобы отправлять и получать сообщения в SMS/MMS."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Для хранения SMS осталось мало места. Удалите старые сообщения."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Подтверждение номера телефона"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Номер требуется для отправки групповых сообщений в SMS/MMS. Его нужно ввести только один раз."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Номер телефона"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Удалить сообщения с медиафайлами"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Удалить сообщения старше <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Автоматически удалять сообщения старше <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Игнорировать"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Удалить сообщения с медиафайлами?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Удалить сообщения старше <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Удалить сообщения старше <xliff:g id="DURATION">%s</xliff:g> и включить автоматическое удаление?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> пишет:"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Вы сказали:"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Сообщение от пользователя <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Вы отправили сообщение"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Отправка…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Сообщение не отправлено. Нажмите, чтобы повторить попытку."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Сообщение не отправлено. Повторная попытка…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Переслать или удалить"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Не удалось доставить сообщение. Чтобы связаться с экстренными службами, позвоните по этому номеру."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Не удалось отправить"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Скачайте новое MMS-сообщение"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Новое сообщение MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Не удалось скачать"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Нажмите, чтобы повторить попытку"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Нажмите, чтобы скачать"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Скачать или удалить"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Скачивание…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Срок действия сообщения истек, или оно недоступно"</string>
-    <string name="mms_info" msgid="3402311750134118165">"размер: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, срок действия: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Не удалось отправить сообщение: укажите действительного получателя."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Услуга не активирована в сети"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Не удалось отправить сообщение из-за ошибки сети"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Срок действия сообщения истек, или оно недоступно"</string>
-    <string name="no_subject" msgid="5587715902648568767">"Без темы"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Неизвестный отправитель"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Доставлено"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Не удалось загрузить сообщение \"<xliff:g id="SUBJECT">%1$s</xliff:g>\" от пользователя <xliff:g id="FROM">%2$s</xliff:g>"</string>
-    <string name="low_memory" msgid="5300743415198486619">"Не удалось выполнить операцию с базой данных: недостаточно памяти"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Сообщение не отправлено"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Некоторые сообщения в SMS/MMS не отправлены"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one">Сообщений: <xliff:g id="MESSAGES_1">%d</xliff:g>, чатов: <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="few">Сообщений: <xliff:g id="MESSAGES_1">%d</xliff:g>, чатов: <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="many">Сообщений: <xliff:g id="MESSAGES_1">%d</xliff:g>, чатов: <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="other">Сообщений: <xliff:g id="MESSAGES_1">%d</xliff:g>, чатов: <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Не удалось загрузить сообщение"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Некоторые сообщения в SMS/MMS не скачаны"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one">Сообщений: <xliff:g id="MESSAGES_1">%d</xliff:g>, чатов: <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="few">Сообщений: <xliff:g id="MESSAGES_1">%d</xliff:g>, чатов: <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="many">Сообщений: <xliff:g id="MESSAGES_1">%d</xliff:g>, чатов: <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="other">Сообщений: <xliff:g id="MESSAGES_1">%d</xliff:g>, чатов: <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"SMS на номер <xliff:g id="NUMBER">%1$s</xliff:g> не отправлено"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Не удалось доставить сообщение на номер <xliff:g id="NUMBER">%1$s</xliff:g>. Позвоните в экстренную службу по телефону."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> новое сообщение</item>
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> новых сообщения</item>
-      <item quantity="many"><xliff:g id="MESSAGES">%d</xliff:g> новых сообщений</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> нового сообщения</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Начать беседу"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Камера недоступна"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Камера недоступна"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Видеозапись недоступна"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Не удалось сохранить"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Не удалось сфотографировать"</string>
-    <string name="back" msgid="1477626055115561645">"Назад"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Архив"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Удалить"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Архив"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Вернуть из архива"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Отключить оповещения"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Включить оповещения"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Добавить контакт"</string>
-    <string name="action_download" msgid="7786338136368564146">"Скачать"</string>
-    <string name="action_send" msgid="377635240181672039">"Отправить"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Удалить"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Удалить сообщение?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Это действие нельзя будет отменить."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Удалить"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Удалить эти чаты?</item>
-      <item quantity="few">Удалить эти чаты?</item>
-      <item quantity="many">Удалить эти чаты?</item>
-      <item quantity="other">Удалить эти чаты?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Удалить"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Отмена"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Кому"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Выбрать несколько изображений"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Подтверждение выбора"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Не удалось записать. Повторите попытку."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Не удалось воспроизвести. Повторите попытку."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Не удалось сохранить. Повторите попытку."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Нажмите и удерживайте"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Изображение"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Аудиоклип"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Видео"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Карточка контакта"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Скачать"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Отправить SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Ответить MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Ответить"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> участник</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> участника</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> участников</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> участника</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Вы"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Контакт заблокирован, переписка помещена в архив"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Контакт разблокирован, чат возвращен из архива"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Добавлено в архив: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Возвращено из архива: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Уведомления отключены"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Уведомления включены"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Все готово. Нажмите \"Отправить\" ещё раз."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Вы назначили SMS/MMS приложением для SMS по умолчанию"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Убрать прикрепленные файлы</item>
-      <item quantity="few">Убрать прикрепленные файлы</item>
-      <item quantity="many">Убрать прикрепленные файлы</item>
-      <item quantity="other">Убрать прикрепленные файлы</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Аудиофайл"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Воспроизвести прикрепленный аудиофайл"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Пауза"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Сообщение от пользователя <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Не удалось отправить сообщение от пользователя <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Сообщение от пользователя <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Неотправленное сообщение для пользователя <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Отправляется сообщение для пользователя <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Не удалось отправить сообщение для пользователя <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Сообщение для пользователя <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Не удалось отправить сообщение от пользователя <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Сообщение от пользователя <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Неотправленное сообщение для группы <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Отправляется сообщение для группы <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Не удалось отправить сообщение для группы <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Сообщение для группы <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Время: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Не удалось отправить сообщение. Нажмите, чтобы повторить попытку."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Чат с пользователями <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Удалить тему."</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Снять видео"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Сделать стоп-кадр"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Сделать снимок"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Начать запись видео"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Перейти в полноэкранный режим"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Переключение между основной и фронтальной камерами"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Остановить запись и прикрепить видео"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Остановить запись видео"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Фото из SMS/MMS"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> фото сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> фото сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> фото сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> фото сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> видео сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> видео сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> видео сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> видео сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> прикрепленный файл сохранен в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> прикрепленных файла сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> прикрепленных файлов сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> прикрепленных файла сохранено в альбоме \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленный файл сохранен в Загрузках</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленных файла сохранено в Загрузках</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленных файлов сохранено в Загрузках</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленных файла сохранено в Загрузках</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленный файл сохранен</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленных файла сохранено</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленных файлов сохранено</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленного файла сохранено</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Не удалось сохранить <xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленный файл</item>
-      <item quantity="few">Не удалось сохранить <xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленных файла</item>
-      <item quantity="many">Не удалось сохранить <xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленных файлов</item>
-      <item quantity="other">Не удалось сохранить <xliff:g id="QUANTITY_1">%d</xliff:g> прикрепленного файла</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Сохраненный файл из MMS"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Настройки"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Архив"</string>
-    <string name="action_close" msgid="1840519376200478419">"Закрыть"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Дополнительные настройки"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Выполнить отладку"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Уведомления"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Звуковой сигнал"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Без звука"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Вибросигнал"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Заблокировано"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Отчеты о доставке SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Запрашивать отчет о доставке для всех отправляемых SMS"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Автополучение"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Автоматически загружать MMS-сообщения"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Автополучение в роуминге"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Автоматически загружать MMS-сообщения в роуминге"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Групповые сообщения"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Использовать MMS для отправки одного сообщения нескольким получателям"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Приложение для обмена SMS"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Приложение для обмена SMS"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Ваш номер телефона"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Неизвестный"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Сигнал исходящего сообщения"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Передача SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Передать необработанные данные полученных SMS во внешнее хранилище"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Передача MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Передать необработанные данные полученных MMS во внешнее хранилище"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Оповещение населения"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Параметры сообщения"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Копировать текст"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Сведения"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Удалить"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Переслать"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Сведения о сообщении"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Тип: "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"MMS"</string>
-    <string name="from_label" msgid="1947831848146564875">"От: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Кому: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Отправлено: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Получено: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Тема: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Размер: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Приоритет: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM-карта: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Высокий"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Обычный"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Низкий"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM-карта <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Адрес отправителя скрыт"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Не удается отправить сообщение. Дождитесь завершения загрузки прикрепленных файлов."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Не удалось загрузить прикрепленный файл. Повторите попытку."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Сеть не готова. Повторите попытку."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Удалить текст"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Переключение между вводом букв и цифр"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Добавить участников"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Подтвердить участников"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Начать чат"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Выбрать этот вариант"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Воспроизвести видео"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Участники и параметры"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Выполнить отладку"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Участники и параметры"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Общие"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Участники чата"</string>
-    <string name="action_call" msgid="6596167921517350362">"Позвонить"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Отправить сообщение"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Отправить сообщение&lt;br/&gt;&lt;small&gt;с <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Отправить фото</item>
-      <item quantity="few">Отправить фото</item>
-      <item quantity="many">Отправить фото</item>
-      <item quantity="other">Отправить фото</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Отправить аудио</item>
-      <item quantity="few">Отправить аудио</item>
-      <item quantity="many">Отправить аудио</item>
-      <item quantity="other">Отправить аудио</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Отправить видео</item>
-      <item quantity="few">Отправить видео</item>
-      <item quantity="many">Отправить видео</item>
-      <item quantity="other">Отправить видео</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Отправить карточки контактов</item>
-      <item quantity="few">Отправить карточки контактов</item>
-      <item quantity="many">Отправить карточки контактов</item>
-      <item quantity="other">Отправить карточки контактов</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Отправить прикрепленные файлы</item>
-      <item quantity="few">Отправить прикрепленные файлы</item>
-      <item quantity="many">Отправить прикрепленные файлы</item>
-      <item quantity="other">Отправить прикрепленные файлы</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> прикрепленный файл готов к отправке</item>
-      <item quantity="few"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> прикрепленных файла готовы к отправке</item>
-      <item quantity="many"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> прикрепленных файлов готовы к отправке</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> прикрепленного файла готовы к отправке</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Отправить отзыв"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Искать в Play Маркете"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Версия"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Версия %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Лицензии открытого ПО"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Уведомления"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Прикреплено максимальное количество файлов"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Не удалось загрузить прикрепленный файл"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Добавить в контакты?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Добавить"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Тема"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Тема: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Загрузка карточки контакта…"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Не удалось загрузить карточку контакта"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Посмотреть карточку контакта"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> контакт</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> контактов</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Карточки контактов"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"День рождения"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Примечания"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Пересылка сообщения"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Ответ"</string>
-    <string name="plus_one" msgid="9010288417554932581">"и ещё 1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"и ещё %d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS-служба отключена"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Чтобы отправлять сообщения, назначьте SMS/MMS приложением для SMS по умолчанию"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Назначьте SMS/MMS приложением для SMS по умолчанию"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Изменить"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Чтобы получать сообщения, сделайте SMS/MMS приложением для SMS по умолчанию"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Не выбрана SIM-карта для отправки SMS-сообщений"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Владелец устройства запретил использовать это приложение."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ОК"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Слишком много участников"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Контакты не найдены</item>
-      <item quantity="few">Контакты не найдены</item>
-      <item quantity="many">Контакты не найдены</item>
-      <item quantity="other">Контакты не найдены</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Не удалось загрузить изображение с камеры"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Вы: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Черновик"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Когда вы начнете переписку, она появится здесь"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Здесь появятся архивированные чаты"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Загрузка цепочек писем…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Изображение"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Аудиоклип"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Видео"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Карточка контакта"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Отменить"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Повторить"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Введите имя пользователя или номер телефона"</string>
-    <string name="action_block" msgid="9032076625645190136">"Заблокировать"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Заблокировать пользователя <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Разблокировать пользователя <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Заблокировать <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Вы по-прежнему будете получать сообщения с этого номера, но не увидите оповещений о них. Этот чат будет архивирован."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Заблокированные контакты"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"РАЗБЛОКИРОВАТЬ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Заблокированные контакты"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Выбрать изображение в библиотеке документов"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Отправка сообщения"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Сообщение отправлено"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Передача данных по мобильной сети отключена в настройках устройства"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"В режиме полета нельзя отправлять сообщения"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Не удалось отправить сообщение"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Сообщение скачано"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Передача данных по мобильной сети отключена в настройках устройства"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Невозможно скачать сообщения в режиме полета"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Невозможно скачать сообщение"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Ноль"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Один"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Два"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Три"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Четыре"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Пять"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Шесть"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Семь"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Восемь"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Девять"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Не удалось отправить сообщение с помощью оператора \"<xliff:g id="CARRIERNAME">%1$s</xliff:g>\" (ошибка <xliff:g id="ERRORCODE">%2$d</xliff:g>)"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Не удалось отправить сообщение с помощью неизвестного оператора (ошибка <xliff:g id="ERRORCODE">%1$d</xliff:g>)"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Сообщение не отправлено: услуга не активирована в сети"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Сообщение не отправлено: недопустимый адрес получателя"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Ошибка: недопустимое сообщение"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Сообщение не отправлено, поскольку содержит неподдерживаемый контент"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Ошибка: неподдерживаемое сообщение"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Не удалось отправить сообщение из-за его размера"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Новое сообщение"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Посмотреть"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Изображение"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Подходящее приложение не найдено"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Удалить получателя."</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Новое сообщение"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Отмена"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Настройки точки доступа"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Не настроено"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Название"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"Точка доступа"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Прокси-сервер MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Порт MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Тип точки доступа"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Удалить точку доступа"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Создать точку доступа"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Сохранить"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Отменить"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Укажите название."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Укажите точку доступа."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Поле MCC должно содержать 3 цифры."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Поле MNC должно содержать 2 или 3 цифры."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Восстановление настроек по умолчанию…"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Восстановить настройки по умолчанию"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Настройки по умолчанию восстановлены"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Без названия"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Точки доступа"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Точки доступа"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Создать точку доступа"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Этот пользователь не может изменять настройки точки доступа"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Скопировать в буфер обмена?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Да"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"На <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Общие"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Дополнительные настройки"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Общие настройки"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Расширенные настройки"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM-карта \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Отправлять всем получателям отдельные SMS-сообщения. Ответы на них будут отправлены только вам."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Отправлять всем получателям одно MMS-сообщение"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Неизвестный номер"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Новое сообщение"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Новое сообщение"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Выбрать SIM-карту"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Выбрана SIM-карта <xliff:g id="SIM_0">%1$s</xliff:g>"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Изменить тему"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Выбрать SIM-карту или изменить тему"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Нажмите и удерживайте, чтобы записать аудио"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Начать чат"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"SMS/MMS"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Чаты из SMS/MMS"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"SMS/MMS"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Новое сообщение"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Список чатов"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Загрузка чатов"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Загрузка сообщений…"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Другие чаты"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Другие сообщения"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Чат удален"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Чат удален. Нажмите здесь, чтобы перейти к другому."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Заблокирован"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Разблокирован"</string>
-    <string name="db_full" msgid="8459265782521418031">"Заканчивается место в памяти устройства. Некоторые данные могут быть потеряны."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Выбор прикрепленных файлов"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Подтверждение выбора"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Выбрано: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Удалите один или несколько прикрепленных файлов и повторите попытку."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Если вы не удалите один или несколько прикрепленных файлов, сообщение может не дойти до адресата."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Вы можете отправлять по одному видео за раз. Удалите лишние ролики и повторите попытку."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Не удалось загрузить прикрепленные файлы."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Отправить"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Не удается начать разговор"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"SIM-карта выбрана: <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-si/arrays.xml b/res/values-si/arrays.xml
deleted file mode 100644
index 89f6c6c..0000000
--- a/res/values-si/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"කාරණාවක් නොමැත"</item>
-    <item msgid="272485471009191934">"කාරණාවක් නොමැත"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"ඔව්"</item>
-    <item msgid="6049132459802288033">"නැත"</item>
-    <item msgid="3084376867445867895">"හරි"</item>
-    <item msgid="3155097332660174689">"හා හා"</item>
-    <item msgid="2611328818571146775">"ස්තූතියි"</item>
-    <item msgid="4881335087096496747">"මම එකඟයි"</item>
-    <item msgid="2422296858597420738">"නයිස්"</item>
-    <item msgid="4805581752819452687">"මම එන ගමන්"</item>
-    <item msgid="4746700499431366214">"හරි, මම ඔබ වෙත පසුව පැමිණෙන්නම්"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
deleted file mode 100644
index 80c7cd7..0000000
--- a/res/values-si/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"පණිවිඩ යැවීම"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"පණිවිඩ යැවීම"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"සංවාදය තෝරන්න"</string>
-    <string name="action_settings" msgid="1329008122345201684">"සැකසීම්"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"පණිවිඩය යවන්න"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"ඇමිණුමක් එක් කරන්න"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"උදවු"</string>
-    <string name="welcome" msgid="2857560951820802321">"සාදරයෙන් පිළිගනිමු"</string>
-    <string name="skip" msgid="7238879696319945853">"මඟ හරින්න"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"ඊළඟ &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"මීළඟ"</string>
-    <string name="exit" msgid="1905187380359981199">"පිටවන්න"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"සැකසීම් &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"සැකසීම්"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"පණිවිඩ යැවීමට SMS, Phone සහ සම්බන්ධතා වෙත අවසර අවශ්‍යයි."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"ඔබට සැකසීම් &gt; යෙදුම් &gt; පණිවිඩ යැවීම &gt; අවසරවල අවසර වෙනස් කළ හැකිය."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"ඔබට සැකසීම්, යෙදුම්, පණිවිඩ යැවීම, අවසරවල අවසර වෙනස් කළ හැකිය."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"නිතරම"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"සියලුම සම්බන්ධතා"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> වෙත යවන්න"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"පින්තූර හෝ වීඩියෝ ලබාගන්න"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"මෙම උපාංගයෙන් පින්තූර තෝරන්න"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ශ්‍රව්‍ය තැටිගත කරන්න"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ඡායාරූපය තෝරන්න"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"මාධ්‍යය තෝරාගෙන තිබේ."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"මාධ්‍යය තෝරාගෙන නොතිබේ."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> ක් තෝරාගන්නා ලදි"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"රූපය <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"රූපය"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ශ්‍රව්‍ය තැටිගත කරන්න"</string>
-    <string name="action_share" msgid="2143483844803153871">"බෙදාගන්න"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"මේ දැන්"</string>
-    <string name="posted_now" msgid="867560789350406701">"දැන්"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one">මිනිත්තු <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="other">මිනිත්තු <xliff:g id="COUNT_1">%d</xliff:g></item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one">පැය <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="other">පැය <xliff:g id="COUNT_1">%d</xliff:g></item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one">දින <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="other">දින <xliff:g id="COUNT_1">%d</xliff:g></item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one">සති <xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="other">සති <xliff:g id="COUNT">%d</xliff:g></item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one">මාස <xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="other">මාස <xliff:g id="COUNT">%d</xliff:g></item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one">අවුරුදු <xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="other">අවුරුදු <xliff:g id="COUNT">%d</xliff:g></item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"0 පන්තියේ පණිවිඩය"</string>
-    <string name="save" msgid="5081141452059463572">"සුරකින්න"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"උපාංගයේ ඉඩ අඩුය. පණිවිඩකරණය ඉඩ හිස් කර ගැනීමට පැරණි පණිවිඩ ස්වයංක්‍රියව මකනු ඇත."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"ආචයනය ඉඩ ප්‍රමාණය අඩු වී ඇත"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"පණිවිඩ යැවීම ඔබේ උපාංගය මත වැඩි ඉඩක් ලබාගත හැකිවන තෙක් පණිවිඩ නොයැවිය හැකිය නැතහොත් ලබා නොගත හැකිය."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"අඩු SMS ආචයනය. ඇතැම් විට ඔබට පණිවිඩ මැකීමට සිදුවේ."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"ඔබගේ දුරකථන අංකය තහවුරු කරන්න"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"පණිවිඩ යැවීම ඔබේ සමූහ පණිවිඩ නිසි ලෙස බෙදා හරිනු ඇති බවට මෙම එක්-වරක් පියවර තහවුරු කරනු අැත."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"දුරකථන අංකය"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"මාධ්‍ය සමඟ ඇති සියලුම පණිවිඩ මකන්න"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> වඩා පැරණි පණිවිඩ මකන්න"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> වඩා පැරණි පණිවිඩ ස්වයංක්‍රීයව මකන්න"</string>
-    <string name="ignore" msgid="7063392681130898793">"නොසලකා හරින්න"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"මාධ්‍ය සමඟ ඇති සියලුම පණිවිඩ මකන්නද?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> වඩා පැරණි පණිවිඩ මකන්නද?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> වඩා පැරණි පණිවිඩ ස්වයංක්‍රීයව මැකීම සක්‍රිය කරන්නද?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> පැවසුවා"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"ඔබ පැවසුවා"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> වෙතින් පණිවිඩය:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"ඔබ පණිවිඩයක් යැවුවා"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"යවමින්..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"යැව්වේ නැත. නැවත උත්සාහ කිරීමට ස්පර්ශ කරන්න."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"යැව්වේ නැත. නැවත උත්සාහ කරමින්…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"නැවත යවන්න නැතහොත් මකන්න"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"කරුණාකර හදිසි සේවාවන් සඳහා හඬ ඇමතුමක් ගන්න. මේ මොහොතේ ඔබගේ පෙළ පණිවිඩය යැවීමට නොහැක."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"අසාර්ථක වුණි"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"බාගැනීමට අලුත් MMS පණිවුඩයකි"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"අලුත් MMS පණිවුඩය"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"බාගැනීමට නොහැකි විය"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"නැවත උත්සාහයට ස්පර්ශ කරන්න"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"බාගැනීමට ස්පර්ශ කරන්න"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"බාගතකරන්න නැතහොත් මකන්න"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"බාගනිමින්…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"පණිවිඩය කල් ඉකුත්වී ඇත හෝ දැනට නොමැත."</string>
-    <string name="mms_info" msgid="3402311750134118165">"ප්‍රමාණය: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, කල් ඉකුත් වීම: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"යැවිය නොහැක. ලබන්නා වලංගු නැත."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"ජාලය තුළ සේවාව සක්‍රිය කර නොමැත"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"ජාලයේ ගැටළුවක් හේතුවෙන් යැවීම කළ නොහැක"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"පණිවිඩය කල් ඉකුත්වී ඇත හෝ දැනට නොමැත."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(කාරණාවක් නොමැත)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"නොහඳුනන යවන්නෙක්"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"භාර දුණි"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="SUBJECT">%1$s</xliff:g> පණිවිඩය <xliff:g id="FROM">%2$s</xliff:g> වෙතින් බාගත නොහැකි විය."</string>
-    <string name="low_memory" msgid="5300743415198486619">"අඩු මතකය නිසා දත්ත සමුදාය මත මෙහෙයුම සම්පූර්ණ කළ නොහැකි විය"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"පණිවිඩය යැවුවේ නැත"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"සමහර පණිවිඩ පණිවිඩ යැවීමේදී නොයවන ලදී"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one">සංවාද <xliff:g id="MESSAGES_1">%d</xliff:g> ක් තුළ පණිවිඩ <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="other">සංවාද <xliff:g id="MESSAGES_1">%d</xliff:g> ක් තුළ පණිවිඩ <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"පණිවිඩය බානොගන්නා ලදී"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"සමහර පණිවිඩ පණිවිඩ යැවීමේදී බා නොගන්නා ලදී"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one">සංවාද <xliff:g id="MESSAGES_1">%d</xliff:g> ක් තුළ පණිවිඩ <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="other">සංවාද <xliff:g id="MESSAGES_1">%d</xliff:g> ක් තුළ පණිවිඩ <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> වෙත පණිවිඩය ගියේ නැත"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"කරුණාකර හදිසි සේවාවන් සඳහා හඬ ඇමතුමක් ගන්න. මේ මොහොතේ <xliff:g id="NUMBER">%1$s</xliff:g> වෙත ඔබගේ පෙළ පණිවිඩය යැවීමට නොහැක."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one">නව පණිවිඩ <xliff:g id="MESSAGES">%d</xliff:g></item>
-      <item quantity="other">නව පණිවිඩ <xliff:g id="MESSAGES">%d</xliff:g></item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"ආරම්භ කරන්න"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"කැමරාව නොපවතී"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"කැමරාව නොපවතී"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"වීඩියෝව ගැනීම නොතිබේ"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"මාධ්‍ය සුරැකීම කළ නොහැක"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"පින්තූරය ලබාගත නොහැක"</string>
-    <string name="back" msgid="1477626055115561645">"ආපසු"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"සංරක්ෂිත"</string>
-    <string name="action_delete" msgid="4076795795307486019">"මකන්න"</string>
-    <string name="action_archive" msgid="5437034800324083170">"සංරක්ෂිත කරන්න"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"සංරක්ෂණය නොකළ"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"දැනුම්දීම් අක්‍රිය කරන්න"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"දැනුම්දීම් සක්‍රිය කරන්න"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"සම්බන්ධතාවය එක් කරන්න"</string>
-    <string name="action_download" msgid="7786338136368564146">"බාගන්න"</string>
-    <string name="action_send" msgid="377635240181672039">"යවන්න"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"මකන්න"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"මෙම පණිවිඩය මකන්න?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"මෙම ක්‍රියාව අවසන් කිරීම කළ නොහැක."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"මකන්න"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">මෙම සංවාද මකන්නද?</item>
-      <item quantity="other">මෙම සංවාද මකන්නද?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"මකන්න"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"අවලංගු කරන්න"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"වෙත"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"බහු පින්තූර තෝරන්න"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"තේරීම සහතික කරන්න"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ශ්‍රව්‍ය පටිගත කළ නොහැක. නැවත උත්සාහ කරන්න."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ශ්‍රව්‍ය ධාවනය කළ නොහැක. නැවත උත්සාහ කරන්න."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ශ්‍රව්‍ය සුරැකීම කළ නොහැක. නැවත උත්සාහ කරන්න."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"ස්පර්ශ කරන්න සහ අල්ලා සිටින්න"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"පින්තූරය"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ශ්‍රව්‍ය පසුර"</string>
-    <string name="notification_video" msgid="4331423498662606204">"වීඩියෝව"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"සම්බන්ධතා කාඩ් පත"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"බාගන්න"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS ඔස්සේ ප්‍රතිචාර දක්වන්න"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS හරහා පිළිතුරු දෙන්න"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"පිළිතුරු දෙන්න"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one">සහභාගිවන්නන් <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="other">සහභාගිවන්නන් <xliff:g id="COUNT_1">%d</xliff:g></item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"මම"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"සම්බන්ධතා අවහිර කරන ලද සහ සංරක්ෂණය කරන ලද"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"සම්බන්ධතාව අවහිර කිරීම ඉවත් කර සංරක්ෂණය නොකරන ලදී"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> ක් සංරක්ෂණය කරන ලදි"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> ක් සංරක්ෂණය නොකරන ලදි"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"දැනුම්දීම් ක්‍රියාවිරහිත කරන ලදී"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"දැනුම්දීම් ක්‍රියාත්මක කරන ලදී"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"සියල්ල සකසා ඇත. නැවත යැවීමට ස්පර්ශ කරන්න."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"පණිවිඩ යැවීම සාර්ථකව පෙරනිමි SMS යෙදුම ලෙස සකසන ලදී."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">ඇමුණුම් ඉවත ලන්න</item>
-      <item quantity="other">ඇමුණුම් ඉවත ලන්න</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ශ්‍රව්‍ය ඇමුණුම"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ශ්‍රව්‍ය ඇමුණුම ධාවනය කරන්න"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"විරාමය"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> වෙතින් පණිවිඩය: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> වෙතින් අසාර්ථක පණිවිඩයක්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> වෙතින් පණිවිඩයක්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g> වෙත නොයැවූ පණිවිඩයක්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g> වෙත පණිවිඩයක් යවමින්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g> වෙත අසාර්ථක පණිවිඩයක්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g> වෙත පණිවිඩයක්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> වෙතින් අසාර්ථක පණිවිඩයක්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> වෙතින් පණිවිඩයක්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> වෙත නොයැවූ පණිවිඩය: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> වෙත පණිවිඩයක් යවමින්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> වෙත අසාර්ථක පණිවිඩයක්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> වෙත පණිවිඩයක්: <xliff:g id="MESSAGE">%2$s</xliff:g>. වේලාව: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"පණිවිඩය අසාර්ථක විය. නැවත උත්සාහ කිරීමට ස්පර්ශ කරන්න."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> සමඟ සංවාදය"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"කාරණය මකන්න"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"වීඩියෝව ග්‍රහණය කරගන්න"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"නිසල පින්තූරයක් ලබාගන්න"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"පින්තූරයක් ගන්න"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"වීඩියෝව පටිගත කිරීම ආරම්භ කරන්න"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"පූර්ණ තිර කැමරාව වෙත මාරු වෙන්න"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"ඉදිරිපස සහ පසුපස කාමර අතර මාරු නොවන්න"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"පටිගත කිරීම නවත්වා වීඩියෝව අමුණන්න"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"වීඩියෝ පටිගත කිරීම නැවත් වන්න"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"ඡායාරූප පණිවිඩ යැවීම"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one">ඡායාරූප <xliff:g id="QUANTITY_2">%d</xliff:g> ක් \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ඇල්බමය වෙත සුරකින ලදී</item>
-      <item quantity="other">ඡායාරූප <xliff:g id="QUANTITY_2">%d</xliff:g> ක් \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ඇල්බමය වෙත සුරකින ලදී</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one">වීඩියෝ <xliff:g id="QUANTITY_2">%d</xliff:g> ක් \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ඇල්බමය වෙත සුරකින ලදී</item>
-      <item quantity="other">වීඩියෝ <xliff:g id="QUANTITY_2">%d</xliff:g> ක් \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ඇල්බමය වෙත සුරකින ලදී</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one">ඇමුණුම් <xliff:g id="QUANTITY_2">%d</xliff:g> ක් \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ඇල්බමය වෙත සුරකින ලදී</item>
-      <item quantity="other">ඇමුණුම් <xliff:g id="QUANTITY_2">%d</xliff:g> ක් \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ඇල්බමය වෙත සුරකින ලදී</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one">ඇමුණුම් <xliff:g id="QUANTITY_1">%d</xliff:g> ක් \"බාගැනීම්\" වෙත සුරකින ලදී</item>
-      <item quantity="other">ඇමුණුම් <xliff:g id="QUANTITY_1">%d</xliff:g> ක් \"බාගැනීම්\" වෙත සුරකින ලදී</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one">ඇමුණුම් <xliff:g id="QUANTITY_1">%d</xliff:g> ක් සුරකින ලදි</item>
-      <item quantity="other">ඇමුණුම් <xliff:g id="QUANTITY_1">%d</xliff:g> ක් සුරකින ලදි</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">ඇමුණුම් <xliff:g id="QUANTITY_1">%d</xliff:g> ක් සුරැකීමට නොහැකි විය</item>
-      <item quantity="other">ඇමුණුම් <xliff:g id="QUANTITY_1">%d</xliff:g> ක් සුරැකීමට නොහැකි විය</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS ඇමුණුම සුරකින ලදි"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"සැකසීම්"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"සංරක්ෂිත"</string>
-    <string name="action_close" msgid="1840519376200478419">"වසන්න"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"උසස්"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"නිදොස්කරණය"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"දැනුම්දීම්"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ශබ්දය"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"නිහඬ"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"කම්පනය වන්න"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"අවහිර කරන ලදි"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS යැවීමේ වාර්තාව"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"ඔබ යවන ලද සෑම පණිවිඩයකටම යැවීමේ වාර්තාවක් ඉල්ලන්න"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"ස්වයං-ලබාගැනීම"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS පණිවිඩ ස්වයංක්‍රීයව ලබාගන්න"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"රෝමින් ස්වයං-ලබාගැනීම"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"රෝමිං විට MMS ස්වයංක්‍රියව යළි ලබා ගන්න"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"කණ්ඩායම් පණිවිඩ යැවීම්"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"ලබන්නන් කිහිපදෙනෙක් සිටින විට එක් පණිවිඩයක් යැවීමට MMS භාවිතා කරන්න"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"සුපුරුදු SMS යෙදුම"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"සුපුරුදු SMS යෙදුම"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"ඔබගේ දුරකථන අංකය"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"නොදනී"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"යන පණිවිඩ හඬ"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS ගොඩ ගසන්න"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"ලැබුණු SMS අමු දත්ත බාහිර ආචයන ගොනුවකට ගොඩ ගසන්න"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS ගොඩ ගසන්න"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"ලැබුණු MMS අමු දත්ත බාහිර ආචයන ගොනුවකට ගොඩ ගසන්න"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"නොරැහැන් ඇඟවීම්"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"පණිවිඩ විකල්ප"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"පෙළ පිටපත් කරන්න"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"විස්තර බලන්න"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"මකන්න"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"ඉදිරියට යවන්න"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"පණිවිඩ විස්තර"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"වර්ගය: "</string>
-    <string name="text_message" msgid="7415419755252205721">"පෙළ පණිවුඩය"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"බහු මාධ්‍ය පණිවිඩය"</string>
-    <string name="from_label" msgid="1947831848146564875">"වෙතින්: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"වෙත: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"යවන ලද: "</string>
-    <string name="received_label" msgid="4442494712757995203">"ලැබිණි: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"කාරණය: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"ප්‍රමාණය: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"ප්‍රමුඛතාව: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"ඉහළ"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"සාමාන්‍ය"</string>
-    <string name="priority_low" msgid="7398724779026801851">"පහළ"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"සැඟවුණු යවන්නාගේ ලිපිනය"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"ඇමුණුම් පුරණය කිරීමේදී පණිවිඩය යැවිය නොහැක."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"ඇමුණුම පුර්ණය කළ නොහැක. නැවත උත්සාහ කරන්න."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"ජාලය සූදානම් නැත. නැවත උත්සාහ කරන්න."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"පෙළ මකන්න"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"පෙළ සහ අංක ඇතුළු කිරීම අතර මාරුවන්න"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"සහභාගිවන්නන් තව එකතු කරන්න"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"සහභාගිවන්නන් සහතික කරන්න"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"අළුත් සංවාදයක් ආරම්භ කරන්න"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"මෙම අයිතමය තෝරන්න"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"වීඩියෝව ධාවනය කරන්න"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"පුද්ගලයින් සහ විකල්ප"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"නිදොස්කරණය"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"පුද්ගලයින් සහ විකල්ප"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"පොදු"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"මෙම සංවාදයේ සිටින පුද්ගලයින්"</string>
-    <string name="action_call" msgid="6596167921517350362">"ඇමතුමක් ලබාගන්න"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"පණිවිඩය යවන්න"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g> සිට&lt;/small&gt;&lt;br/&gt; පණිවිඩ යවන්න"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">ඡායාරූප යවන්න</item>
-      <item quantity="other">ඡායාරූප යවන්න</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">ශ්‍රව්‍යය යවන්න</item>
-      <item quantity="other">ශ්‍රව්‍යය යවන්න</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">වීඩියෝ යවන්න</item>
-      <item quantity="other">වීඩියෝ යවන්න</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">සම්බන්ධතා කාඩ්පත් යවන්න</item>
-      <item quantity="other">සම්බන්ධතා කාඩ්පත් යවන්න</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">ඇමුණුම් යවන්න</item>
-      <item quantity="other">ඇමුණුම් යවන්න</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one">ඇමුණුම් <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ක් යැවීමට සුදානම්</item>
-      <item quantity="other">ඇමුණුම් <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ක් යැවීමට සුදානම්</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"ප්‍රතිපෝෂණය යවන්න"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play වෙළඳසැල තුළ බලන්න"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"අනුවාදයේ තොරතුරු"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"අනුවාදය %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"විවෘත මූලාශ්‍ර බලපත්‍ර"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"දැනුම්දීම්"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"ඇමුණුම් සීමාව ළඟා විය"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"ඇමුණුම ප්‍රවේශනය කිරීම අසාර්ථක විය."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"සම්බන්ධතාවෙත එකතු කරනද?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"සම්බන්ධතාවය එකතු කරන්න"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"මාතෘකාව"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"මාතෘකාව "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"සම්බන්ධතා කාඩ් පත් පුර්ණ කරමින්"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"සම්බන්ධතා කාඩ්පත පුර්ණය කළ නොහැක"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"සම්බන්ධ්තා කාඩ්පත පෙන්වන්න"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one">සම්බන්ධතා <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="other">සම්බන්ධතා <xliff:g id="COUNT_1">%d</xliff:g></item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"සම්බන්ධතා කාඩ්පත්"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"උපන්දිනය"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"සටහන්"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"ඉදිරියට යන පණිවිඩය"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"පිළිතුරු දෙන්න"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS අබල කරන ලදි"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"යැවීමට, පණිවිඩ යැවීම පෙරනිමි SMS යෙදුම ලෙස සකසන්න"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"පණිවිඩ යැවීම පෙරනිමි SMS යෙදුම ලෙස සකසන්න"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"වෙනස් කරන්න"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"පණිවිඩ ලබා ගැනීම සඳහා, පණිවිඩ යැවීම පෙරනිමි SMS යෙදුම ලෙස සකසන්න"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS පණිවිඩ යැවීමට සඳහා මනාප SIM එකක් තෝරාගෙන නොමැත"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"උපාංගයේ හිමිකරු මෙම යෙදුමට ඉඩ නොදෙන ලදි."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"හරි"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"සංවාදයේ සහභාගීවන්නන් ගොඩක් සිටි"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">වලංගු නොවන සම්බන්ධතා</item>
-      <item quantity="other">වලංගු නොවන සම්බන්ධතා</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"කැමරා පින්තූරය පුර්ණය කළ නොහැක"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"ඔබ: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"කටු සටහන"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"අලුත් සංවාදක් ඔබ ආරම්භ කළ පසු, එය මෙතැන ලැයිස්තු කර ඇති බව ඔබ දකීවි"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"සංරක්ෂණය කළ සංවාද මෙහි දිස් වේ"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"සංවාද පුර්ණය වෙමින්..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"පින්තූරය"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ශ්‍රව්‍ය පසුර"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"වීඩියෝව"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"සම්බන්ධතා කාඩ් පත"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"අස් කරන්න"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"නැවත උත්සාහ කරන්න"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"අලුත් පණිවිඩයක් ආරම්භ කිරීමට සම්බන්ධතාවේ නම හෝ දුරකථන අංකය ඇතුළු කරන්න"</string>
-    <string name="action_block" msgid="9032076625645190136">"අවහිර කරන්න"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> අවහිර කරන ලද"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> අවහිර නොකරන්න"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> අවහිර කරලද?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"මෙම අංකයෙන් දිගටම පණිවිඩ ලැබීමට ඔබ ඉදිරියට යන ලදි නමුත් තවදුරත් දැනුම් දෙන්න එපා. මෙම සංවාදය සංරක්ෂණය කරවී."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"සම්බන්ධතා අවහිර කරන ලදි"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"අවහිර නොකරන්න"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"සම්බන්ධතා අවහිර කරන ලදි"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"ලේඛන පුස්ථකාලයෙන් පින්තූර තෝරන්න"</string>
-    <string name="sending_message" msgid="6363584950085384929">"පණිවිඩය යවමින්"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"පණිවිඩය යවන ලදී"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"සෙල්‍යුලර් දත්ත අක්‍රිය කර තිබේ. ඔබගේ සැකසීම් පරික්ෂා කරන්න."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"අහස්යානා ආකාරය තුළ පණිවිඩ යැවිය නොහැක"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"පණිවිඩය යැවිය නොහැකි විය"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"පණිවිඩය බාගන්නා ලදි"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"සෙල්‍යුලර් දත්ත අක්‍රිය කර තිබේ. ඔබගේ සැකසීම් පරික්ෂා කරන්න."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"ගුවන්යානා ප්‍රකාරයේදී පණිවිඩ බාගැනීමට නොහැකිය"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"පණිවිඩය බාගැනීමට නොහැකි විය"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"බිංදුව"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"එක"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"දෙක"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"තුන"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"හතර"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"පහ"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"හය"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"හත"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"අට"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"නවය"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> සමඟ පණිවිඩය යැවිය නොහැක, දෝෂය <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"නොදන්නා වාහකයක් සමඟ පණිවිඩය යැවිය නොහැක, දෝෂය <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"ඉදිරි: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"පණිවිඩ නොයවන ලදි: ජාලය තුළ සක්‍රිය නොකළ සේවාවකි"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"පණිවිඩ නොයවන ලදි: ගමනාන්ත ලිපිනය වලංගු නැත"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"පණිවිඩ නොයවන ලදි: පණිවිඩය වලංගු නැත"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"පණිවිඩ නොයවන ලදි: අන්තර්ගතය සහාය නොදක්වයි"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"පණිවිඩ නොයවන ලදි: පණිවිඩ සහාය නොදක්වයි"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"පණිවිඩය නොයවන ලදි: ඉතාම විශාලයි"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"අලුත් පණිවිඩය"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"බලන්න"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"පින්තුරය"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"අදාළ යෙදුම සොයාගත නොහැක"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"ලබන්නා ඉවත් කරන්න"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"අලුත් පණිවිඩය"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"අවලංගු කරන්න"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"ප්‍රවේශ ස්ථානය සංස්කරණය"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"සකසා නැත"</string>
-    <string name="apn_name" msgid="1572691851070894985">"නම‍"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS ප්‍රොක්සිය"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS තොට"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN වර්ගය"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN මකන්න"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"නව APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"සුරකින්න"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"ඉවතලන්න"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"නම ක්ෂේත්‍රය හිස් විය නොහැක."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN හිස් විය නොහැක."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC ක්ෂේත්‍රය සංඛ්‍යා 3 ක් විය යුතුය."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC ක්ෂේත්‍රය ඉලක්කම් 2 ක් හෝ 3 ක් විය යුතුය."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"සුපුරුදු APN සැකසුම් යළි පිහිටුවමින්."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"සුපුරුදු වෙත යළි සකසන්න"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"සුපුරුදු APN සැකසීම නැවත සැකසීම සම්පූර්ණ කරන ලදි."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"නම් යොදා නැත"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ප්‍රවේශ ලක්ෂ්‍ය නම්"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"නව APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"මෙම පරිශීලකයා සඳහා ප්‍රවේශ ලක්ෂ්‍යයේ නමේ සැකසීම් නොතිබේ"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"පසුරු පුවරුව වෙත පිටපත් කරන්නද?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"පිටපත්කරණය"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> වෙත"</string>
-    <string name="general_settings" msgid="5409336577057897710">"පොදු"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"උසස්"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"පොදු සැකසීම්"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"උසස් සැකසුම්"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"සියළුම ලබන්නන් වෙත තනි SMS පණිවිඩ යවන්න. ඕනෑම පිළිතුරක් පමණක් ඔබට ලැබේ"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"සියළුම ලබන්නන් වෙත තනි MMS යවන්න"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"නොදන්නා අංකය"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"අලුත් පණිවිඩය"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"අලුත් පණිවිඩය."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM තෝරාගැනීම"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> තෝරාගත්තේය, SIM තෝරාගැනීම"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"මාතෘකාව සකසන්න"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM තෝරන්න හෝ මාතෘකාව සකසන්න"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ශ්‍රව්‍ය පටිගත කිරීමට තට්ටු කර අල්ලා සිටින්න"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"අළුත් සංවාදයක් ආරම්භ කරන්න"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"පණිවිඩ යැවීම"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"පණිවිඩ යැවීමේ ලැයිස්තුව"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"පණිවිඩ යැවීම"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"අලුත් පණිවිඩය"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"සංවාද ලැයිස්තුව"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"සංවාද පුරණය වෙමින්"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"පණිවුඩ පූරණය කරමින්"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"තවත් සංවාද පෙන්වන්න"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"View more messages"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"සංවාදය මකාදැමුණි"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"සංවාදය මකන ලදී. වෙනස් පණිවිඩ යැවීමේ සංවාදයක් පෙන්වීමට ස්පර්ශ කරන්න"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"අවහිර කරන ලදි"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"අවහුර නොකළ"</string>
-    <string name="db_full" msgid="8459265782521418031">"ගබඩා ඉඩ අවමයි. ඇතැම් දත්ත අහිමි වනු ඇත."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"ඇමුණුම් තෝරන්න"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"තේරීම සහතික කරන්න"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ක් තෝරන ලදි"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"කරුණාකර ඇමුණුම් එකක් හෝ වැඩි සංඛ්‍යාවක් ඉවත් කර නැවත උත්සාහ කරන්න."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"ඔබට ඔබේ පණිවිඩය යැවීමට උත්සාහ කළ හැකි වුවත්, ඔබ ඇමුණුම් එකක් හෝ වැඩි සංඛ්‍යාවක් ඉවත් කරන්නේ නම් හැර එය බෙදාගැනීම නොහැකි විය හැකිය."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"ඔබට පණිවිඩයකට එක් වීඩියෝවක් පමණක් යැවිය හැකිය. කරුණාකර අමතර වීඩියෝ ඉවත් කර නැවත උත්සාහ කරන්න."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"පණිවිඩ යැවීම ඇමුණුම පූරණය කිරීමට අසමත් විය."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"කෙසේ වුවත් යවන්න"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"සංවාදය ඇරඹීමට නොහැකි විය"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> තෝරාගත්තේය"</string>
-</resources>
diff --git a/res/values-sk/arrays.xml b/res/values-sk/arrays.xml
deleted file mode 100644
index 0e48259..0000000
--- a/res/values-sk/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"bez predmetu"</item>
-    <item msgid="272485471009191934">"žiadny predmet"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Áno"</item>
-    <item msgid="6049132459802288033">"Nie"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Haha"</item>
-    <item msgid="2611328818571146775">"Ďakujeme"</item>
-    <item msgid="4881335087096496747">"Súhlasím"</item>
-    <item msgid="2422296858597420738">"Pekné"</item>
-    <item msgid="4805581752819452687">"Som na ceste"</item>
-    <item msgid="4746700499431366214">"OK, odpíšem neskôr"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
deleted file mode 100644
index 1056a95..0000000
--- a/res/values-sk/strings.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"SMS a MMS"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"SMS a MMS"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Vybrať konverzáciu"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Nastavenia"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Odoslať správu"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Pridať prílohu"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Pomocník"</string>
-    <string name="welcome" msgid="2857560951820802321">"Vitajte"</string>
-    <string name="skip" msgid="7238879696319945853">"Preskočiť"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Ďalej &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Ďalej"</string>
-    <string name="exit" msgid="1905187380359981199">"Ukončiť"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Nastavenia &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Nastavenia"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Aplikácia SMS a MMS vyžaduje povolenie na prístup k správam SMS, telefónu a kontaktom."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Povolenia môžete zmeniť v časti Nastavenia &gt; Aplikácie &gt; SMS a MMS &gt; Povolenia."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Povolenia môžete zmeniť v časti Nastavenia, Aplikácie, SMS a MMS, Povolenia."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Často kontaktované osoby"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Všetky kontakty"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Odoslať na číslo <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Snímať obrázky alebo videá"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Vybrať obrázky z tohto zariadenia"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Zaznamenať zvuk"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Vybrať fotku"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Je vybrané médium."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Výber média bol zrušený."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Vybrané: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"obrázok – <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"obrázok"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Zaznamenanie zvuku"</string>
-    <string name="action_share" msgid="2143483844803153871">"Zdieľať"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Práve teraz"</string>
-    <string name="posted_now" msgid="867560789350406701">"Teraz"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> hodiny</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> hodiny</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> hodín</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> hodina</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> dni</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> dňa</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dní</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> deň</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> týždne</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> týždňa</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> týždňov</item>
-      <item quantity="one">týždeň</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> mesiace</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> mesiaca</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mesiacov</item>
-      <item quantity="one">mesiac</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> roky</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> roka</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> rokov</item>
-      <item quantity="one">rok</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Správa triedy 0"</string>
-    <string name="save" msgid="5081141452059463572">"Uložiť"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"V zariadení dochádza voľné miesto. Služba SMS a MMS bude automaticky odstraňovať staršie správy, aby uvoľnila miesto."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Nedostatok miesta na úložisku"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Aplikácia SMS a MMS nebude môcť posielať ani prijímať správy, pokiaľ v zariadení nebude k dispozícii viac miesta."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"V úložisku pre správy SMS nie je dostatok voľného miesta. Je možné, že budete musieť správy odstrániť."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Potvrďte svoje telefónne číslo"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Tento jednorazový krok zaistí, že aplikácia SMS a MMS bude správne doručovať vaše skupinové správy."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefónne číslo"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Odstrániť všetky správy s médiami"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Odstrániť správy staršie ako <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Automaticky odstrániť správy staršie ako <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorovať"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Odstrániť všetky správy s médiami?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Odstrániť správy staršie ako <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Chcete odstrániť správy staršie ako <xliff:g id="DURATION">%s</xliff:g> a zapnúť automatické odstraňovanie?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> povedal(a)"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Povedali ste"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Správa od používateľa <xliff:g id="SENDER">%s</xliff:g>:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Odoslali ste správu"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Odosiela sa…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Správa nebola odoslaná. Klepnutím to skúste znova."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Správa nebola odoslaná. Skúšame to znova…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Znova odoslať alebo odstrániť"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Zavolajte na pohotovostné služby. Vašu textovú správu sa v tejto chvíli nepodarilo doručiť."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Nepodarilo sa"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nová správa MMS na stiahnutie"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nová správa MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Nepodarilo sa stiahnuť"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Klepnutím to skúste znova"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Stiahnite klepnutím"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Stiahnuť alebo odstrániť"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Sťahuje sa..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Platnosť správy vypršala alebo správa nie je k dispozícii"</string>
-    <string name="mms_info" msgid="3402311750134118165">"veľkosť: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, vypršanie platnosti: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Správu nie je možné odoslať. Nie je uvedený platný príjemca."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Služba nie je v sieti aktivovaná"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Správu sa nepodarilo odoslať, pretože sa vyskytol problém so sieťou"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Platnosť správy vypršala alebo správa nie je k dispozícii"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Bez predmetu)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Neznámy odosielateľ"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Doručené"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Nepodarilo sa stiahnuť správu <xliff:g id="SUBJECT">%1$s</xliff:g> od odosielateľa <xliff:g id="FROM">%2$s</xliff:g>"</string>
-    <string name="low_memory" msgid="5300743415198486619">"Operáciu v databáze sa nepodarilo dokončiť z dôvodu nedostatku pamäte"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Správu sa nepodarilo odoslať"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Niektoré správy neboli odoslané v aplikácii SMS a MMS"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> Počet správ v <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzáciách</item>
-      <item quantity="many"><xliff:g id="MESSAGES_1">%d</xliff:g> Počet správ v <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzácie</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> Počet správ v <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzáciách</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> Počet správ v jednej konverzácii</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Správu sa nepodarilo stiahnuť"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Niektoré správy neboli stiahnuté v aplikácii SMS a MMS"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> Počet správ v <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzáciách</item>
-      <item quantity="many"><xliff:g id="MESSAGES_1">%d</xliff:g> Počet správ v <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzácie</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g>  Počet správ v <xliff:g id="CONVERSATIONS">%d</xliff:g> konverzáciách</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> Počet správ v jednej konverzácii</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Správa na číslo <xliff:g id="NUMBER">%1$s</xliff:g> nebola odoslaná"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Zavolajte na pohotovostné služby. Vašu textovú správu na číslo <xliff:g id="NUMBER">%1$s</xliff:g> sa v tejto chvíli nepodarilo doručiť."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> nové správy</item>
-      <item quantity="many"><xliff:g id="MESSAGES">%d</xliff:g> novej správy</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nových správ</item>
-      <item quantity="one">Nová správa</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Spustiť"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Fotoaparát nie je k dispozícii"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Fotoaparát nie je k dispozícii"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Snímanie videa nie je k dispozícii"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Média nie je možné uložiť"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Snímku nie je možné odfotiť"</string>
-    <string name="back" msgid="1477626055115561645">"Späť"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Archivované"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Odstrániť"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Archivovať"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Vybrať z archívu"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Vypnúť upozornenia"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Zapnúť upozornenia"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Pridať kontakt"</string>
-    <string name="action_download" msgid="7786338136368564146">"Stiahnuť"</string>
-    <string name="action_send" msgid="377635240181672039">"Odoslať"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Odstrániť"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Chcete odstrániť túto správu?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Táto akcia sa nedá vrátiť späť."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Odstrániť"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="few">Odstrániť tieto konverzácie?</item>
-      <item quantity="many">Odstrániť tieto konverzácie?</item>
-      <item quantity="other">Odstrániť tieto konverzácie?</item>
-      <item quantity="one">Odstrániť túto konverzáciu?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Odstrániť"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Zrušiť"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Komu"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Vybrať viaceré obrázky"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Potvrdiť výber"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+ <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Zvuk sa nedá zaznamenať. Skúste to znova."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Zvuk sa nedá prehrať. Skúste to znova."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Zvuk sa nepodarilo uložiť. Skúste to znova."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Klepnutie a podržanie"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Fotografia"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Zvukový klip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Vizitka"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Stiahnuť"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Odpovedať pomocou správy SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Odpovedať správou MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Odpovedať"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> účastníci</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> účastníka</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> účastníkov</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> účastník</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ja"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakt bol zablokovaný a archivovaný"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontakt bol odblokovaný a jeho archivácia bola zrušená"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Archivované: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Zrušená archivácia: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Upozornenia sú vypnuté"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Upozornenia sú zapnuté"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Všetko je pripravené. Klepnite znova na tlačidlo Odoslať."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Aplikácia SMS a MMS bola úspešne nastavená ako predvolená aplikácia pre SMS"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="few">Zahodiť prílohy</item>
-      <item quantity="many">Zahodiť prílohy</item>
-      <item quantity="other">Zahodiť prílohy</item>
-      <item quantity="one">Zahodiť prílohu</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Zvuková príloha"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Prehrať zvukovú prílohu"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pozastaviť"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Správa od používateľa <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Správa od používateľa <xliff:g id="SENDER">%1$s</xliff:g> bola neúspešná: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Správa od používateľa <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Správa nebola odoslaná používateľovi <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Odosiela sa správa používateľovi <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Správa používateľovi <xliff:g id="CONTACT">%1$s</xliff:g> bola neúspešná: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Správa používateľovi <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Neúspešná správa od používateľa <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Správa od používateľa <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Správa nebola odoslaná skupine <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Odosiela sa správa skupine <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Správa skupine <xliff:g id="GROUP">%1$s</xliff:g> bola neúspešná: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Správa skupine <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Neúspešná správa. Skúste to znova klepnutím."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Rozhovor s používateľmi <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Odstrániť predmet"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Natočiť video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Urobiť statickú snímku"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Vyfotiť"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Spustiť natáčanie videa"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Prepnúť na fotoaparát na celej obrazovke"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Prepnúť medzi predným a zadným fotoaparátom"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Zastaviť zaznamenávanie a pripojiť video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Zastaviť zaznamenávanie videa"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotky v aplikácii SMS a MMS"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> fotky boli uložené do albumu <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> fotky bolo uloženej do albumu <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotiek bolo uložených do albumu <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> fotka bola uložená do albumu <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> videá boli uložené do albumu <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> videa bolo uloženého do albumu <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videí bolo uložených do albumu <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video bolo uložené do albumu <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> prílohy boli uložené do albumu <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> prílohy bolo uloženej do albumu <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> príloh bolo uložených do albumu <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> príloha bola uložená do albumu <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> prílohy boli uložené do priečinka so stiahnutými súbormi</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> prílohy bolo uloženej do priečinka so stiahnutými súbormi</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> príloh bolo uložených do priečinka so stiahnutými súbormi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> príloha bola uložená do priečinka so stiahnutými súbormi</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="few">Boli uložené <xliff:g id="QUANTITY_1">%d</xliff:g> prílohy</item>
-      <item quantity="many">Bolo uloženej <xliff:g id="QUANTITY_1">%d</xliff:g> prílohy</item>
-      <item quantity="other">Bolo uložených <xliff:g id="QUANTITY_1">%d</xliff:g> príloh</item>
-      <item quantity="one">Bola uložená <xliff:g id="QUANTITY_0">%d</xliff:g> príloha</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="few">Nepodarilo sa uložiť <xliff:g id="QUANTITY_1">%d</xliff:g> prílohy</item>
-      <item quantity="many">Nepodarilo sa uložiť <xliff:g id="QUANTITY_1">%d</xliff:g> prílohy</item>
-      <item quantity="other">Nepodarilo sa uložiť <xliff:g id="QUANTITY_1">%d</xliff:g> príloh</item>
-      <item quantity="one">Nepodarilo sa uložiť <xliff:g id="QUANTITY_0">%d</xliff:g> prílohu</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Uložené prílohy správ MMS"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Nastavenia"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Archivované"</string>
-    <string name="action_close" msgid="1840519376200478419">"Zavrieť"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Rozšírené"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Ladiť"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Upozornenia"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Zvuk"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Tichý režim"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibrovanie"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blokované"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Prehľady doručovania SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Vyžadovať potvrdenie o doručení každej odoslanej SMS"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automatické načítanie"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Automaticky načítať správy MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Automatické načítanie pri roamingu"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Automaticky načítať správy MMS počas roamingu"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Skupinové správy"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Použiť MMS na odoslanie jednej správy, ak má niekoľko príjemcov"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Predvolená aplikácia SMS"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Predvolená aplikácia SMS"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Vaše telefónne číslo"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Neznáme"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Zvuky odosielanej správy"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Zálohovať správy SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Zálohovať nespracované údaje prijatých správ SMS do súboru v externom úložisku"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Zálohovať správy MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Zálohovať nespracované údaje prijatých správ MMS do súboru v externom úložisku"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Bezdrôtové núdzové upozornenia"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Možnosti správy"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopírovať text"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Zobraziť podrobnosti"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Odstrániť"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Poslať ďalej"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Podrobnosti správy"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Typ: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Textová správa"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimediálna správa"</string>
-    <string name="from_label" msgid="1947831848146564875">"Od: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Komu: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Odoslané: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Prijaté: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Predmet: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Veľkosť: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priorita: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM karta: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Vysoká"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normálna"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Nízka"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"Slot SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Skrytá adresa odosielateľa"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Počas načítavania príloh nie je možné odoslať správu."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Nie je možné načítať prílohu. Skúste to znova."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Sieť nie je pripravená. Skúste to znova."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Odstrániť text"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Prepnúť medzi zadávaním textu a číslic"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Pridať ďalších účastníkov"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Potvrdiť účastníkov"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Začať novú konverzáciu"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Vybrať túto položku"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Prehrať video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Ľudia a možnosti"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Ladiť"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Ľudia a možnosti"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Všeobecné"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Ľudia v tejto konverzácii"</string>
-    <string name="action_call" msgid="6596167921517350362">"Zavolať"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Odoslať správu"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Odošlite správu&lt;br/&gt;&lt;small&gt;zo SIM karty <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="few">Odoslať fotky</item>
-      <item quantity="many">Odoslať fotky</item>
-      <item quantity="other">Odoslať fotky</item>
-      <item quantity="one">Odoslať fotku</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="few">Odoslať zvukové súbory</item>
-      <item quantity="many">Odoslať zvukové súbory</item>
-      <item quantity="other">Odoslať zvukové súbory</item>
-      <item quantity="one">Odoslať zvukový súbor</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="few">Odoslať videá</item>
-      <item quantity="many">Odoslať videá</item>
-      <item quantity="other">Odoslať videá</item>
-      <item quantity="one">Odoslať video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="few">Odoslať vizitky</item>
-      <item quantity="many">Odoslať vizitky</item>
-      <item quantity="other">Odoslať vizitky</item>
-      <item quantity="one">Odoslať vizitku</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="few">Odoslať prílohy</item>
-      <item quantity="many">Odoslať prílohy</item>
-      <item quantity="other">Odoslať prílohy</item>
-      <item quantity="one">Odoslať prílohu</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="few"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> prílohy sú pripravené na odoslanie</item>
-      <item quantity="many"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> prílohy je pripravenej na odoslanie</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> príloh je pripravených na odoslanie</item>
-      <item quantity="one">Jedna príloha je pripravená na odoslanie</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Odoslať spätnú väzbu"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Zobraziť v Obchode Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informácie o verzii"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Verzia %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licencie open source"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Upozornenia"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Dosiahli ste limit pre počet príloh"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Prílohu sa nepodarilo načítať."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Pridať medzi kontakty?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Pridať kontakt"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Predmet"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Predmet: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Načítava sa vizitka"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Nepodarilo sa načítať vizitku"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Zobraziť vizitku"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> kontakty</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> kontaktu</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktov</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Vizitky"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Narodeniny"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Poznámky"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Poslanie správy ďalej"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Odpovedanie"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Správy SMS sú zakázané"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Ak chcete odosielať správy, nastavte SMS a MMS ako predvolenú aplikáciu pre SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Nastavte SMS a MMS ako predvolenú aplikáciu pre SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Zmeniť"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Ak chcete prijímať správy, nastavte SMS a MMS ako predvolenú aplikáciu pre SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Nie je vybraná preferovaná SIM karta na odosielanie správ SMS."</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Túto aplikáciu vlastník zariadenia nepovolil."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"V konverzácii je príliš mnoho účastníkov"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="few">Neplatné kontakty</item>
-      <item quantity="many">Neplatné kontakty</item>
-      <item quantity="other">Neplatné kontakty</item>
-      <item quantity="one">Neplatný kontakt</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Obrázok z fotoaparátu sa nepodarilo načítať"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Vy: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Koncept"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Tu uvidíte svoje konverzácie"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Tu sa zobrazujú archivované konverzácie"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Načítavajú sa konverzácie..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Obrázok"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Zvukový klip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Vizitka"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Späť"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Skúsiť znova"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Zadajte meno kontaktu alebo telefónne číslo a začnite písať novú správu"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokovať"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blokovať kontakt <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Odblokovať kontakt <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Blokovať <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Z tohto čísla budete aj naďalej dostávať správy. Nebudete už však dostávať upozornenia. Táto konverzácia bude archivovaná."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blokované kontakty"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ODBLOKOVAŤ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blokované kontakty"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Vyberte obrázok z knižnice dokumentov"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Správa sa odosiela"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Správa bola odoslaná"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Prenos mobilných údajov je vypnutý. Skontrolujte svoje nastavenia."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"V režime V lietadle nie je možné odosielať správy"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Odoslanie správy zlyhalo"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Správa bola stiahnutá"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Prenos mobilných dát je vypnutý. Skontrolujte svoje nastavenia."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"V režime v lietadle nie je možné sťahovať správy"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Správu nie je možné stiahnuť"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nula"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Jedna"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dva"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tri"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Štyri"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Päť"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Šesť"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sedem"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Osem"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Deväť"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Správu prostredníctvom operátora <xliff:g id="CARRIERNAME">%1$s</xliff:g> nie je možné odoslať. Chyba: <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Správu prostredníctvom neznámeho operátora nie je možné odoslať. Chyba: <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Poslať ďalej: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Správa nebola odoslaná: služba nie je aktivovaná v sieti"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Správa nebola odoslaná: neplatná cieľová adresa"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Správa nebola odoslaná: neplatná správa"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Správa nebola odoslaná: nepodporovaný obsah"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Správa nebola odoslaná: nepodporovaná správa"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Správa nebola odoslaná: veľkosť prekročila limit"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nová správa"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Zobraziť"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Obrázok"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Nenašla sa vhodná aplikácia"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Odstrániť príjemcu"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nová správa"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Zrušiť"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Úprava prístupového bodu"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nenastavené"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Názov"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"Názov prístupového bodu"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy server systému MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Port systému MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Typ prístupového bodu"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Odstrániť názov prístupového bodu (APN)"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nový prístupový bod"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Uložiť"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Zrušiť"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Pole Meno nemôže byť prázdne."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Názov prístupového bodu (APN) nemôže byť prázdny."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Pole MCC musí obsahovať 3 číslice."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Pole MNC musí obsahovať 2 alebo 3 číslice."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Obnovujú sa predvolené nastavenia názvu prístupového bodu (APN)."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Obnoviť predvolené"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Predvolené nastavenia prístupových bodov boli obnovené"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Bez názvu"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Názvy prístupových bodov"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Prístupové body"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nový prístupový bod"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Nastavenia názvu prístupového bodu (APN) nie sú dostupné pre tohto používateľa"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Kopírovať do schránky?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopírovať"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"na SIM kartu <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Všeobecné"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Rozšírené"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Všeobecné nastavenia"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Rozšírené nastavenia"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM karta <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Odoslať osobitné správy SMS všetkým príjemcom. Všetky odpovede dostanete iba vy."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Odoslať jednu správu MMS všetkým príjemcom"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Neznáme číslo"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nová správa"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nová správa"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Výber SIM karty"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Výber SIM karty (vybraná SIM karta <xliff:g id="SIM_0">%1$s</xliff:g>)"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Upraviť predmet"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Vybrať SIM kartu alebo upraviť predmet"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Zvuk zaznamenáte klepnutím a podržaním"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Začať novú konverzáciu"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"SMS a MMS"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Zoznam v aplikácii SMS a MMS"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"SMS a MMS"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nová správa"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Zoznam konverzácií"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Načítavajú sa konverzácie..."</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Načítavajú sa správy"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Zobraziť ďalšie konverzácie"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Zobraziť viac správ"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Konverzácia bola odstránená"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Konverzácia bola odstránená. Klepnutím si zobrazte inú konverzáciu aplikácie SMS a MMS."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Zablokované"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Odblokované"</string>
-    <string name="db_full" msgid="8459265782521418031">"V úložisku je málo miesta. Niektoré údaje môžu byť stratené."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Vybrať prílohy"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Potvrďte výber"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Vybrané: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Odstráňte jednu alebo viac príloh a skúste to znova."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Svoju správu sa môžete pokúsiť odoslať, ale pravdepodobne bude doručená až vtedy, keď odstránite jednu alebo viac príloh."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Môžete odoslať iba jedno video na správu. Odstráňte ďalšie videá a skúste to znova."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Aplikácii SMS a MMS sa nepodarilo načítať prílohu."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Aj tak odoslať"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Rozhovor nie je možné spustiť"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Vybrané: <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-sl/arrays.xml b/res/values-sl/arrays.xml
deleted file mode 100644
index 0cd69b7..0000000
--- a/res/values-sl/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"brez zadeve"</item>
-    <item msgid="272485471009191934">"nizadeve"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Da"</item>
-    <item msgid="6049132459802288033">"Ne"</item>
-    <item msgid="3084376867445867895">"V redu"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Hvala"</item>
-    <item msgid="4881335087096496747">"Strinjam se"</item>
-    <item msgid="2422296858597420738">"Lepo"</item>
-    <item msgid="4805581752819452687">"Prihajam"</item>
-    <item msgid="4746700499431366214">"V redu, oglasim se pozneje"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
deleted file mode 100644
index 6c85318..0000000
--- a/res/values-sl/strings.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Sporočila"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Sporočila"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Izbira pogovora"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Nastavitve"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Pošlji sporočilo"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Dodajte prilogo"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Pomoč"</string>
-    <string name="welcome" msgid="2857560951820802321">"Pozdravljeni"</string>
-    <string name="skip" msgid="7238879696319945853">"Preskoči"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Naprej &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Naprej"</string>
-    <string name="exit" msgid="1905187380359981199">"Izhod"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Nastavitve &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Nastavitve"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Sporočila zahtevajo dovoljenje za dostop do sporočil SMS, telefona in stikov."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Dovoljenja lahko spreminjate v »Nastavitve &gt; Aplikacije &gt; Sporočila &gt; Dovoljenja«."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Dovoljenja lahko spreminjate v »Nastavitve, Aplikacije, Sporočila, Dovoljenja«."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Pogosti"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Vsi stiki"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Pošlji na številko <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Snemanje slik ali videoposnetkov"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Izbira slik iz te naprave"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Snemanje zvoka"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Izbira fotografije"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Predstavnost je izbrana."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Izbor predstavnosti je preklican."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Št. izbranih: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"slika <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"slika"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Snemanje zvoka"</string>
-    <string name="action_share" msgid="2143483844803153871">"Skupna raba"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Pravkar"</string>
-    <string name="posted_now" msgid="867560789350406701">"Zdaj"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ura</item>
-      <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> uri</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> ure</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ur</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> dan</item>
-      <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> dneva</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> dni</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dni</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> teden</item>
-      <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> tedna</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> tedne</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tednov</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mesec</item>
-      <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> meseca</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> mesece</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mesecev</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> leto</item>
-      <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> leti</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> leta</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> let</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Sporočilo razreda 0"</string>
-    <string name="save" msgid="5081141452059463572">"Shrani"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"V napravi primanjkuje prostora za shranjevanje. Sporočila bodo zaradi sprostitve prostora samodejno izbrisala starejša sporočila."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Zmanjkalo bo prostora za shranjevanje"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Sporočila morda ne bodo pošiljala ali sprejemala sporočil, dokler v napravi ne bo na voljo več prostora."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Prostora za SMS-je je malo. Morda boste morali izbrisati sporočila."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Potrditev telefonske številke"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"S tem enkratnim korakom boste zagotovili, da bodo Sporočila pravilno dostavljala skupinska sporočila."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefonska številka"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Izbriši vsa sporočila s predstavnostjo"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Izbriši sporočila, starejša od <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Samodejno brisanje sporočil, starejših od <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Prezri"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Želite izbrisati vsa sporočila s predstavnostjo?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Želite izbrisati sporočila, starejša od <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Želite izbrisati sporočila, starejša od <xliff:g id="DURATION">%s</xliff:g>, in vklopiti samodejno brisanje?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"Oseba <xliff:g id="SENDER">%s</xliff:g> sporoča"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Sporočili ste"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Sporočilo osebe <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Poslali ste sporočilo"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Pošiljanje …"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Ni bilo poslano. Dotaknite se za vnovični poskus."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Ni bilo poslano. Vnovični poskus …"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Znova pošlji ali izbriši"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Pokličite nujno pomoč. SMS-ja ni bilo mogoče poslati."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Ni uspelo"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Novo sporočilo MMS za prenos"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Novo sporočilo MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Prenos ni uspel"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Dotaknite se za vnovični poskus"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Dotaknite se za prenos"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Prenesi ali izbriši"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Prenašanje …"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Sporočilo je poteklo ali ni na voljo"</string>
-    <string name="mms_info" msgid="3402311750134118165">"velikost: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, poteče: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Pošiljanje ni mogoče. Prejemnik ni veljaven."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Storitev ni aktivirana v omrežju"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Pošiljanje zaradi težave v omrežju ni uspelo"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Sporočilo je poteklo ali ni na voljo"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Ni zadeve)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Neznan pošiljatelj"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Dostavljeno"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Sporočila <xliff:g id="SUBJECT">%1$s</xliff:g> osebe <xliff:g id="FROM">%2$s</xliff:g> ni bilo mogoče prenesti."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Postopka v zbirki podatkov ni bilo mogoče dokončati, ker primanjkuje pomnilnika"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Sporočilo ni bilo poslano"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Nekatera sporočila niso bila poslana v Sporočilih"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> sporočilo v <xliff:g id="CONVERSATIONS">%d</xliff:g> pogovoru</item>
-      <item quantity="two"><xliff:g id="MESSAGES_1">%d</xliff:g> sporočili v <xliff:g id="CONVERSATIONS">%d</xliff:g> pogovorih</item>
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> sporočila v <xliff:g id="CONVERSATIONS">%d</xliff:g> pogovorih</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> sporočil v <xliff:g id="CONVERSATIONS">%d</xliff:g> pogovorih</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Sporočilo ni bilo preneseno"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Nekatera sporočila niso bila prenesena v Sporočilih"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> sporočilo v <xliff:g id="CONVERSATIONS">%d</xliff:g> pogovoru</item>
-      <item quantity="two"><xliff:g id="MESSAGES_1">%d</xliff:g> sporočili v <xliff:g id="CONVERSATIONS">%d</xliff:g> pogovorih</item>
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> sporočila v <xliff:g id="CONVERSATIONS">%d</xliff:g> pogovorih</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> sporočil v <xliff:g id="CONVERSATIONS">%d</xliff:g> pogovorih</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Sporočilo na številko <xliff:g id="NUMBER">%1$s</xliff:g> ni bilo poslano"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Pokličite nujno pomoč. SMS-ja na <xliff:g id="NUMBER">%1$s</xliff:g> ni bilo mogoče poslati."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> novo sporočilo</item>
-      <item quantity="two"><xliff:g id="MESSAGES">%d</xliff:g> novi sporočili</item>
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> nova sporočila</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> novih sporočil</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Začni"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Fotoaparat ni na voljo"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Fotoaparat ni na voljo"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Snemanje videoposnetkov ni na voljo"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Predstavnosti ni mogoče shraniti"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Ni mogoče posneti fotografije"</string>
-    <string name="back" msgid="1477626055115561645">"Nazaj"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arhivirano"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Izbriši"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arhiviraj"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Odstrani iz arhiva"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Izklop obvestil"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Vklop obvestil"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Dodaj stik"</string>
-    <string name="action_download" msgid="7786338136368564146">"Prenos"</string>
-    <string name="action_send" msgid="377635240181672039">"Pošlji"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Izbriši"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Želite izbrisati sporočilo?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Tega dejanja ni mogoče razveljaviti."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Izbriši"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Želite izbrisati te pogovore?</item>
-      <item quantity="two">Želite izbrisati te pogovore?</item>
-      <item quantity="few">Želite izbrisati te pogovore?</item>
-      <item quantity="other">Želite izbrisati te pogovore?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Izbriši"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Prekliči"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Za"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Izbira več slik"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Potrditev izbora"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Zvoka ni mogoče posneti. Poskusite znova."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Zvoka ni mogoče predvajati. Poskusite znova."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Zvoka ni bilo mogoče shraniti. Poskusite znova."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Dotaknite se in pridržite"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Slika"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Zvočni posnetek"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Videoposnetek"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Osebna vizitka"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Prenos"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Odgovor prek sporočila SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Odg. z MMS-jem"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Odgovori"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> udeleženec</item>
-      <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> udeleženca</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> udeleženci</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> udeležencev</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Jaz"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Blokirani in arhivirani stiki"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Stik odblokiran in odstranjen iz arhiva"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Št. arhiviranih: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Št. povrnjenih iz arhiva: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Obvestila izklopljena"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Obvestila vklopljena"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Vse je nastavljeno. Znova se dotaknite »Pošlji«."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Sporočila so uspešno nastavljena kot privzeta aplikacija za sporočila SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Zavrzi priloge</item>
-      <item quantity="two">Zavrzi priloge</item>
-      <item quantity="few">Zavrzi priloge</item>
-      <item quantity="other">Zavrzi priloge</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Zvočna priloga"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Predvajanje zvočne priloge"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Začasna zaustavitev"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Sporočilo pošiljatelja <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Neuspelo sporočilo osebe <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Sporočilo osebe <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Neposlano sporočilo osebi <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Pošiljanje sporočila osebi <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Neuspelo sporočilo osebi <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Sporočilo osebi <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Neuspelo sporočilo osebe <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Sporočilo osebe <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Neposlano sporočilo skupini <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Pošiljanje sporočila skupini <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Neuspelo sporočilo skupini <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Sporočilo skupini <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Čas: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Neuspelo sporočilo. Dotaknite se za vnovičen poskus."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Pogovor z udeleženci <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Izbris zadeve"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Posnemi video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Posnemi fotografijo"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Fotografiraj"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Začni snemanje videa"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Preklopi v celozaslonski način fotoaparata"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Preklop med sprednjim in zadnjim fotoaparatom"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Ustavi snemanje in pripni videoposnetek"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Ustavi snemanje videoposnetka"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Fotografije v Sporočilih"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> fotografija shranjena v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-      <item quantity="two"><xliff:g id="QUANTITY_2">%d</xliff:g> fotografiji shranjeni v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> fotografije shranjene v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotografij shranjenih v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> videoposnetek shranjen v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-      <item quantity="two"><xliff:g id="QUANTITY_2">%d</xliff:g> videoposnetka shranjena v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> videoposnetki shranjeni v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videoposnetkov shranjenih v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> priloga shranjena v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-      <item quantity="two"><xliff:g id="QUANTITY_2">%d</xliff:g> prilogi shranjeni v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> priloge shranjene v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> prilog shranjenih v album »<xliff:g id="ALBUMNAME_3">%s</xliff:g>«</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> priloga shranjena v »Prenosi«</item>
-      <item quantity="two"><xliff:g id="QUANTITY_1">%d</xliff:g> prilogi shranjeni v »Prenosi«</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> priloge shranjene v »Prenosi«</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> prilog shranjenih v »Prenosi«</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> priloga je bila shranjena</item>
-      <item quantity="two"><xliff:g id="QUANTITY_1">%d</xliff:g> prilogi sta bili shranjeni</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> priloge so bile shranjene</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> prilog je bilo shranjenih</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> priloge ni bilo mogoče shraniti</item>
-      <item quantity="two"><xliff:g id="QUANTITY_1">%d</xliff:g> prilog ni bilo mogoče shraniti</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> prilog ni bilo mogoče shraniti</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> prilog ni bilo mogoče shraniti</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Shranjena priloga sporočila MMS"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Nastavitve"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arhivirano"</string>
-    <string name="action_close" msgid="1840519376200478419">"Zapri"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Dodatno"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Odpravljanje napak"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Obvestila"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Zvok"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Tiho"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibriranje"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blokirano"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Poročila o dostavi sporočil SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Zahtevanje poročila o dostavi za vsak poslan SMS"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Samodejni prenos"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Samodejni prenos MMS-jev"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Samodejni prenos med gostovanjem"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Samodejni prenos sporočil MMS med gostovanjem"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Skupinsko pošiljanje sporočil"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Če želite eno sporočilo poslati več prejemnikom, uporabite MMS"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Privzeta aplikacija za sporočila SMS"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Privzeta aplikacija za sporočila SMS"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Vaša telefonska številka"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Neznano"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Zvoki pri odhodnih sporočilih"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Izvoz SMS-jev"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Izvoz neobdelanih podatkov iz prejetih SMS-jev v datoteko v zunanji napravi za shranjevanje"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Izvoz MMS-jev"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Izvoz neobdelanih podatkov iz prejetih MMS-jev v datoteko v zunanji napravi za shranjevanje"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Brezžična opozorila"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Možnosti sporočila"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopiraj besedilo"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Ogled podrobnosti"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Brisanje"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Posreduj"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Podrobnosti sporočila"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Vrsta: "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"MMS"</string>
-    <string name="from_label" msgid="1947831848146564875">"Od: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Za: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Poslano: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Prejeto: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Zadeva: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Velikost: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prednost: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Visoka"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Običajna"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Nizka"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Skrit naslov pošiljatelja"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Med nalaganjem priponk ni mogoče poslati sporočila."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Priloge ni mogoče naložiti. Poskusite znova."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Omrežje ni pripravljeno. Poskusite znova."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Izbriši besedilo"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Preklop med vnašanjem besedila in številk"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Dodaj več udeležencev"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Potrditev udeležencev"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Začenjanje novega pogovora"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Izbira tega elementa"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Predvajanje videoposnetka"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Osebe in možnosti"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Odpravljanje napak"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Osebe in možnosti"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Splošno"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Osebe v tem pogovoru"</string>
-    <string name="action_call" msgid="6596167921517350362">"Klicanje"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Pošlji sporočilo"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Pošiljanje sporočila&lt;br/&gt;&lt;small&gt;s kartico <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Pošljite fotografije</item>
-      <item quantity="two">Pošljite fotografije</item>
-      <item quantity="few">Pošljite fotografije</item>
-      <item quantity="other">Pošljite fotografije</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Pošljite zvočne posnetke</item>
-      <item quantity="two">Pošljite zvočne posnetke</item>
-      <item quantity="few">Pošljite zvočne posnetke</item>
-      <item quantity="other">Pošljite zvočne posnetke</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Pošljite videoposnetke</item>
-      <item quantity="two">Pošljite videoposnetke</item>
-      <item quantity="few">Pošljite videoposnetke</item>
-      <item quantity="other">Pošljite videoposnetke</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Pošljite osebne vizitke</item>
-      <item quantity="two">Pošljite osebne vizitke</item>
-      <item quantity="few">Pošljite osebne vizitke</item>
-      <item quantity="other">Pošljite osebne vizitke</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Pošljite priloge</item>
-      <item quantity="two">Pošljite priloge</item>
-      <item quantity="few">Pošljite priloge</item>
-      <item quantity="other">Pošljite priloge</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> priloga je pripravljena za pošiljanje</item>
-      <item quantity="two"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> prilogi sta pripravljeni za pošiljanje</item>
-      <item quantity="few"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> priloge so pripravljene za pošiljanje</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> prilog je pripravljenih za pošiljanje</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Pošljite povratne informacije"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Ogled v Trgovini Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Podatki o različici"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Različica %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Odprtokodne licence"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Obvestila"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Dosežena je omejitev za priloge"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Nalaganje priloge ni uspelo."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Ali želite dodati med stike?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Dodaj stik"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Zadeva"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Zadeva: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Nalaganje osebne vizitke"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Vizitke ni bilo mogoče naložiti"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Ogled osebne vizitke"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> stik</item>
-      <item quantity="two"><xliff:g id="COUNT_1">%d</xliff:g> stika</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> stiki</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> stikov</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Vizitke"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Rojstni dan"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Zapiski"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Posredovanje sporočila"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Odgovor"</string>
-    <string name="plus_one" msgid="9010288417554932581">"še 1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"več kot %d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS-ji so onemogočeni"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Če želite pošiljati, nastavite Sporočila kot privzeto aplikacijo za sporočila SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Nastavite Sporočila kot privzeto aplikacijo za sporočila SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Spremeni"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Če želite prejemati sporočila, nastavite Sporočila kot privzeto aplikacijo za sporočila SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Ni izbrane prednostne kartice SIM za pošiljanje sporočil SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Lastnik naprave ne dovoli uporabe te aplikacije."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"V redu"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Preveč udeležencev v pogovoru"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Neveljavni stiki</item>
-      <item quantity="two">Neveljavni stiki</item>
-      <item quantity="few">Neveljavni stiki</item>
-      <item quantity="other">Neveljavni stiki</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Slike fotoaparata ni bilo mogoče naložiti"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Vi: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Osnutek"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Ko začnete nov pogovor, bo naveden tukaj"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Tu so prikazani arhivirani pogovori"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Nalaganje pogovorov ..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Slika"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Zvočni posnetek"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Videoklic"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Osebna vizitka"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Razveljavi"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Poskusi znova"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Če želite začeti novo sporočilo, vnesite ime stika ali telefonsko številko"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blokiraj"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blokiraj stik <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Odblokiraj stik <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Želite blokirati <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Še vedno boste prejemali sporočila s te številke, vendar ne boste več obveščeni. Ta pogovor bo arhiviran."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blokirani stiki"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ODBLOKIRAJ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blokirani stiki"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Izbira slike iz knjižnice dokumentov"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Pošiljanje sporočila"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Sporočilo poslano"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Prenos podatkov v mobilnem omrežju je izklopljen. Preverite nastavitve."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"V načinu za letalo ni mogoče pošiljati sporočil"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Sporočila ni bilo mogoče poslati."</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Sporočilo preneseno"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Prenos podatkov v mobilnem omrežju je izklopljen. Preverite nastavitve."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"V načinu za letalo ni mogoče prenašati sporočil"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Sporočila ni bilo mogoče prenesti"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nič"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Ena"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dva"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tri"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Štiri"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Pet"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Šest"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sedem"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Osem"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Devet"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Sporočila prek operaterja <xliff:g id="CARRIERNAME">%1$s</xliff:g> ni mogoče poslati, napaka <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Sporočila prek neznanega operaterja ni mogoče poslati, napaka <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Sporočilo ni bilo poslano: storitev ni aktivirana v omrežju"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Sporočilo ni poslano: neveljaven naslov prejemnika"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Sporočilo ni poslano: neveljavno sporočilo"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Sporočilo ni poslano: nepodprta vsebina"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Sporočilo ni poslano: nepodprto sporočilo"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Sporočilo ni bilo poslano: prevelika velikost"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Novo sporočilo"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Pogled"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Slika"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Ni bilo mogoče najti primerne aplikacije"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Odstrani prejemnika"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Novo sporočilo"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Prekliči"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Urejanje dostopne točke"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Ni nastavljeno"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Ime"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"Storitveni center za sporočila MMS"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Strežnik proxy za sporočila MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Vrata za sporočila MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"Mobilna koda države"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"Koda mobilnega omrežja"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Vrsta APN-ja"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Izbriši APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nov APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Shrani"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Zavrzi"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Polje z imenom ne sme biti prazno."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN ne sme biti prazen."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Polje z mobilno kodo države mora vsebovati 3 števke."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Polje s kodo mobilnega omrežja mora vsebovati 2 ali 3 števke."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Obnavljanje privzetih nastavitev APN-ja."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Ponastavi na privzeto"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Ponastavitev privzetih nastavitev APN-ja je končana."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Neimenovano"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Imena dostopnih točk"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-ji"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nov APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Nastavitve imena dostopne točke niso na voljo za tega uporabnika"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Želite kopirati v odložišče?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopiraj"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"v kartico <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Splošno"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Dodatno"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Splošne nastavitve"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Dodatne nastavitve"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"Kartica SIM »<xliff:g id="SIM_NAME">%s</xliff:g>«"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Pošiljanje posameznih sporočil SMS vsem prejemnikom. Morebitne odgovore boste prejeli samo vi."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Pošiljanje enega sporočila MMS vsem prejemnikom"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Neznana številka"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Novo sporočilo"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Novo sporočilo."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Izbirnik kartice SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Izbrana kartica SIM <xliff:g id="SIM_0">%1$s</xliff:g>, izbirnik kartic SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Uredi zadevo"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Izberi kartico SIM ali uredi zadevo"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Dotakni se in pridrži za snemanje zvoka"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Začenjanje novega pogovora"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Sporočila"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Seznam sporočil"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Sporočila"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Novo sporočilo"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Seznam pogovorov"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Nalaganje pogovorov"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Nalaganje sporočil"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Več pogovorov"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Prikaz več sporočil"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Pogovor je izbrisan"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Pogovor je izbrisan. Dotaknite se, če želite prikazati drug pogovor v Sporočilih."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blokiran(-a)"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Odblokiran(-a)"</string>
-    <string name="db_full" msgid="8459265782521418031">"Primanjkuje prostora za shranjevanje. Nekateri podatki bodo morda izgubljeni."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Izbira prilog"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Potrditev izbora"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Št. izbranih: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Odstranite eno ali več prilog in poskusite znova."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Lahko poskusite poslati sporočilo, vendar morda ne bo dostavljeno, razen če odstranite eno ali več prilog."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Pošljete lahko samo en videoposnetek na sporočilo. Odstranite druge videoposnetke in poskusite znova."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Sporočila niso uspela naložiti priloge."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Vseeno pošlji"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Pogovora ni bilo mogoče začeti"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Izbrana kartica SIM <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-sq/arrays.xml b/res/values-sq/arrays.xml
deleted file mode 100644
index 2744180..0000000
--- a/res/values-sq/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"pa subjekt"</item>
-    <item msgid="272485471009191934">"pa subjekt"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Po"</item>
-    <item msgid="6049132459802288033">"Jo"</item>
-    <item msgid="3084376867445867895">"Në rregull!"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Faleminderit"</item>
-    <item msgid="4881335087096496747">"Pranoj"</item>
-    <item msgid="2422296858597420738">"Këndshëm"</item>
-    <item msgid="4805581752819452687">"Jam rrugës"</item>
-    <item msgid="4746700499431366214">"Në rregull, më lejo të të marr më vonë"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
deleted file mode 100644
index f7b858c..0000000
--- a/res/values-sq/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Mesazhet"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Mesazhet"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Përzgjidh bisedën"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Cilësimet"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Dërgo mesazh"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Shto një bashkëngjitje"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Ndihma"</string>
-    <string name="welcome" msgid="2857560951820802321">"Mirë se erdhe"</string>
-    <string name="skip" msgid="7238879696319945853">"Kapërce"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Përpara &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Përpara"</string>
-    <string name="exit" msgid="1905187380359981199">"Dil"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Cilësimet &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Cilësimet"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Mesazhet kanë nevojë për leje për në SMS, Telefon dhe Kontakte."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Lejet mund t\'i ndryshosh te Cilësimet, Aplikacionet, Mesazhet, Lejet."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Lejet mund t\'i ndryshosh te Cilësimet, Aplikacionet, Mesazhet, Lejet."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Të shpeshta"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Të gjitha kontaktet"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Dërgoje te <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Regjistro fotografi ose video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Zgjidh imazhe nga kjo pajisje"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Regjistro audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Zgjidh foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Artikulli \"media\" u zgjodh."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Artikulli \"media\" nuk u zgjodh."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"U përzgjodhën <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"imazhi <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"imazhi"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Regjistro audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Shpërnda"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Pikërisht tani"</string>
-    <string name="posted_now" msgid="867560789350406701">"Tani"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> minuta</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> minutë</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> orë</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> orë</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ditë</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ditë</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> javë</item>
-      <item quantity="one">një javë</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> muaj</item>
-      <item quantity="one">një muaj</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> vite</item>
-      <item quantity="one">një vit</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Mesazh i kategorisë 0"</string>
-    <string name="save" msgid="5081141452059463572">"Ruaj"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Në pajisje ka mbetur pak hapësirë e lirë. Mesazhet do të fshijnë automatikisht mesazhet e vjetra për të liruar hapësirë."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Hapësira ruajtëse po mbaron"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"\"Mesazhet\" mund të mos dërgojë ose pranojë mesazhe derisa të ketë hapësirë tjetër të lirë në pajisjen tënde."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Hapësirë e paktë ruajtëse për SMS-tw. Mund të të duhet të fshish mesazhe."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Konfirmo numrin tënd të telefonit"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Ky hap që kryhet vetëm një herë do të garantojë që Mesazhet t\'i dorëzojë siç duhet mesazhet e tua në grup."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Numri i telefonit"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Fshiji të gjitha mesazhet me klipe \"media\""</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Fshi mesazhe më të vjetra se <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Fshi automatikisht mesazhe më të vjetra se <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Shpërfill"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Të fshihen të gjitha mesazhet me klipe \"media\"?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Të fshihen mesazhet më të vjetra se <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Të fshihen mesazhet më të vjetra se <xliff:g id="DURATION">%s</xliff:g> dhe të aktivizohet fshirja automatike?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> tha"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Ti the"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Mesazh nga <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Dërgove një mesazh"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Po dërgon..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Nuk u dërgua. Prek për të provuar sërish."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Nuk u dërgua. Po provon sërish…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Dërgo sërish ose fshi"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Bëj një telefonatë me zë drejt shërbimeve të urgjencës. Mesazhi yt me tekst nuk arriti të dërgohej këtë herë."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Dështoi"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Mesazh i ri MMS-je për të shkarkuar"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Mesazh i ri MMS-je"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Nuk arriti ta shkarkonte"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Prek për të provuar sërish"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Prek për të shkarkuar"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Shkarko ose fshi"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Po shkarkon…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Mesazhi skadoi ose nuk mund të përdoret"</string>
-    <string name="mms_info" msgid="3402311750134118165">"madhësia: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, skadimi: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Nuk mund ta dërgojë. Marrësi është i pavlefshëm."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Shërbimi nuk është i aktivizuar në rrjet"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Nuk arriti ta dërgonte për shkak të një problemit në rrjet"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Mesazhi skadoi ose nuk mundësohet"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Pa subjekt)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Dërgues i panjohur"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Dorëzuar"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Nuk arriti të shkarkonte mesazhin <xliff:g id="SUBJECT">%1$s</xliff:g> nga <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Nuk arriti të përfundonte operacionin e bazës së të dhënave për shkak të kujtesës së pakët"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Mesazhi nuk është dërguar"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Disa mesazhe nuk janë dërguar te Mesazhet"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mesazhe në <xliff:g id="CONVERSATIONS">%d</xliff:g> bashkëbisedime</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mesazhe në një bashkëbisedim</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Mesazhi nuk u shkarkua"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Disa mesazhe nuk janë shkarkuar te Mesazhet"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> mesazhe në <xliff:g id="CONVERSATIONS">%d</xliff:g> bashkëbisedime</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> mesazhe në një bashkëbisedim</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Mesazhi për <xliff:g id="NUMBER">%1$s</xliff:g> nuk u dërgua"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Bëj një telefonatë me zë drejt shërbimeve të urgjencës. Mesazhi yt me tekst për <xliff:g id="NUMBER">%1$s</xliff:g> nuk arriti të dërgohej këtë herë."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> mesazhe të reja</item>
-      <item quantity="one">Mesazh i ri</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Fillo"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera nuk mund të përdoret"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera nuk mund të përdoret"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Regjistrimi i videos nuk mundësohet"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Nuk mund të ruajë materiale \"media\""</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Nuk mund të nxjerrë fotografi"</string>
-    <string name="back" msgid="1477626055115561645">"Prapa"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arkivuar"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Fshi"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arkivo"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Hiq nga arkiva"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Çaktivizo njoftimet"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Aktivizo njoftimet"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Shto kontakt"</string>
-    <string name="action_download" msgid="7786338136368564146">"Shkarko"</string>
-    <string name="action_send" msgid="377635240181672039">"Dërgo"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Fshi"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Të fshihet ky mesazh?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Ky veprim nuk mund të zhbëhet."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Fshi"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Fshiji këto biseda?</item>
-      <item quantity="one">Fshije këtë bisedë?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Fshi"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Anulo"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Për"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Përzgjidh shumë imazhe"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Konfirmo përzgjedhjen"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Nuk mund të regjistrojë audio. Provo sërish."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Nuk mund të luajë audio. Provo sërish."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Nuk arriti ta ruante audion. Provo sërish."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Prek dhe mbaj shtypur"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Fotografi"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Klip audioje"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kartë kontakti"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Shkarko"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Përgjigju përmes SMS-së"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Përgjigju përmes MMS-së"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Përgjigju"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> pjesëmarrës</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> pjesëmarrës</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Unë"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakt i bllokuar dhe i arkivuar"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontakti u zhbllokua dhe arkivimi i tij u anulua"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> të arkivuara"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> të paarkivuara"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Njoftimet janë të çaktivizuara"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Njoftimet janë të aktivizuara"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Gjithçka gati. Prek sërish \"Dërgo\"."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"\"Mesazhet\" u caktua me sukses si aplikacioni me parazgjedhje i SMS-ve."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Hiq bashkëngjitjet</item>
-      <item quantity="one">Hiq bashkëngjitjen</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Bashkëngjitja audio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Luaj bashkëngjitjen në audio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pauzë"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Mesazh nga <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Mesazh i dështuar nga <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Mesazh nga <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Mesazh i padërguar për <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Po dërgon mesazh te <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Mesazh i dështuar për <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Mesazh për <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Mesazh i dështuar nga <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>.  Ora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Mesazh nga <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Mesazh i padërguar për <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Po dërgon mesazh te <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Mesazh i dështuar për <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Mesazh për <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Ora: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Mesazhi dështoi. Prek për ta provuar sërish."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Bisedë me <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Fshi subjektin"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Regjistro video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Regjistro një pamje të palëvizshme"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Nxirr fotografi"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Fillo regjistrimin në video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Kalo në kamerën me ekran të plotë"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Ndërro mes kamerës para dhe mbrapa"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Ndalo regjistrimin dhe bashkëngjit video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Ndalo regjistrimin e videos"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Foto me mesazhe"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotografi u ruajtën tek albumi \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> fotografi u ruajt tek albumi \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> video u ruajtën tek albumi \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video u ruajt tek albumi \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> bashkëngjitje u ruajtën tek albumi\"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bashkëngjitje u ruajt tek albumi \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> bashkëngjitje u ruajtën tek \"Shkarkimet\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bashkëngjitje u ruajt tek \"Shkarkimet\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> bashkëngjitje u ruajtën</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bashkëngjitje u ruajt</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> bashkëngjitje nuk mund të ruheshin</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bashkëngjitje nuk mund të ruhej</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Bashkëgjitje MMS e ruajtur"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Cilësimet"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arkivuar"</string>
-    <string name="action_close" msgid="1840519376200478419">"Mbyll"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Të përparuara"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Korrigjo"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Njoftime"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Zëri"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Hesht"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Dridh"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"I bllokuar"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Raportet e dorëzimit të SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Kërko një raport dorëzimi për çdo SMS që dërgon"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Gjej automatikisht"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Gjej automatikisht mesazhe MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Gjetje automatike në roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Merr automatikisht mesazhin MMS kur je në roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Mesazhe në grup"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Përdor \"MMS\" për të dërguar një mesazh të vetëm kur ka shumë marrës"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Aplikacioni me parazgjedhje i SMS-ve"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Aplikacioni me parazgjedhje i SMS-ve"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Numri yt i telefonit"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"E panjohur"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Tingujt e mesazheve dalëse"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Hidh SMS-të"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Hidhi të dhënat SMS të papërpunuara në skedarin e hapësirës së jashtme ruajtëse"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Hidh MMS-të"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Hidhi të dhënat MMS të papërpunuara në skedarin e hapësirës së jashtme ruajtëse"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Sinjalizimi pa tel"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Opsionet e mesazhit"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopjo tekstin"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Shiko detajet"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Fshi"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Përpara"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Detajet e mesazhit"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Shkruaj: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Mesazh me tekst"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mesazh multimedial"</string>
-    <string name="from_label" msgid="1947831848146564875">"Nga: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Për: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Dërguar: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Marrë: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Subjekti: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Madhësia: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Përparësia: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"Karta SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"E lartë"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normale"</string>
-    <string name="priority_low" msgid="7398724779026801851">"E ulët"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"Numri i kartës SIM: <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Adresë e fshehur e dërguesit"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Nuk mund të dërgojë mesazh kur ngarkon bashkëngjitje."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Nuk mund ta ngarkojë bashkëngjitjen. Provo sërish."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Rrjeti nuk është gati. Provo përsëri."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Fshi tekstin"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Kalo mes futjes së tekstit dhe numrave"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Shto më shumë pjesëmarrës"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Konfirmo pjesëmarrësit"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Fillo bisedë të re"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Përzgjidh këtë artikull"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Luaj video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Kontaktet dhe opsionet"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Korrigjo"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Kontaktet dhe opsionet"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Të përgjithshme"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Kontakte në këtë bisedë"</string>
-    <string name="action_call" msgid="6596167921517350362">"Bëj telefonatë"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Dërgo mesazh"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Dërgo mesazh&lt;br/&gt;&lt;small&gt;nga <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Dërgo fotografitë</item>
-      <item quantity="one">Dërgo fotografinë</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Dërgo audiot</item>
-      <item quantity="one">Dërgo audion</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Dërgo videot</item>
-      <item quantity="one">Dërgo videon</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Dërgo kartat e kontaktit</item>
-      <item quantity="one">Dërgo kartën e kontaktit</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Dërgo bashkëngjitjet</item>
-      <item quantity="one">Dërgo bashkëngjitjen</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> bashkëngjitje gati për dërgim</item>
-      <item quantity="one">Një bashkëngjitje gati për dërgim</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Dërgo përshtypjet"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Shiko në Dyqanin \"Luaj me Google\""</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Informacion mbi versionin"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Versioni %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licenca me burim informacioni të hapur"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Njoftime"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"U arrit kufiri i bashkëngjitjeve"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Dështoi në ngarkimin e bashkëngjitjes."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Shto te kontaktet?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Shto kontakt"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Subjekti"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Subjekti: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Po ngarkon kartën e kontaktit"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Nuk arriti të ngarkonte kartën e kontakteve"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Shiko kartën e kontaktit"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakte</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kartat e kontakteve"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Ditëlindje"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Shënime"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Transfero mesazhin"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Përgjigju"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Funksioni \"SMS\" u çaktivizua"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Për të dërguar, caktoje \"Mesazhet\" si aplikacionin me parazgjedhje të SMS-ve"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Caktoje \"Mesazhet\" si aplikacionin me parazgjedhje të SMS-ve"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Ndrysho"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Për të pranuar mesazhe, caktoje \"Mesazhet\" si aplikacionin me parazgjedhje të SMS-ve"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Nuk u përzgjodh kartë e preferuar SIM për dërgimin e mesazheve SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Ky aplikacion nuk lejohet nga zotëruesi i pajisjes."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Në rregull!"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Shumë pjesëmarrës në një bisedë"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Kontakte të pavlefshme</item>
-      <item quantity="one">Kontakt i pavlefshëm</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Nuk arriti të ngarkonte pamjen e kamerës"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Ti: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Draft"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Pasi të fillosh një bisedë të re, do ta shikosh të listuar këtu"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Bisedat e arkivuara shfaqen këtu"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Po ngarkon bisedat…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Fotografi"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Klip audioje"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kartë kontakti"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Zhbëj"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Provo përsëri"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Fut një emër kontakti ose numër telefoni për të nisur një mesazh të ri"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blloko"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blloko <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Zhblloko <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Të bllokohet <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Do të vazhdosh të marrësh mesazhe nga ky numër, por nuk do të njoftohesh më. Kjo bisedë do të arkivohet."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Kontaktet e bllokuara"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ZHBLLOKO"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Kontaktet e bllokuara"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Zgjidh imazh nga biblioteka e dokumenteve"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Po dërgon mesazhin"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Mesazhi u dërgua"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Të dhënat celulare janë të çaktivizuara. Kontrollo cilësimet."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Nuk mund të dërgojë mesazhe në modalitetin \"në aeroplan\""</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Mesazhi nuk u arrit të dërgohej"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Mesazhi u shkarkua"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Të dhënat celulare janë të çaktivizuara. Kontrollo cilësimet."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Nuk mund të shkarkojë mesazhe në modalitetin \"në aeroplan\""</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Mesazhi nuk u arrit të shkarkohej"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Një"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dy"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tre"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Katër"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Pesë"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Gjashtë"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Shtatë"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Tetë"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nëntë"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Mesazhi nuk mund të dërgohet me <xliff:g id="CARRIERNAME">%1$s</xliff:g> - gabimi <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Mesazhi nuk mund të dërgohet me një operator celular të panjohur - gabimi <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Transfero: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Mesazhi nuk u dërgua - shërbimi nuk është i aktivizuar në rrjet"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Mesazhi nuk u dërgua - adresë e pavlefshme vendmbërritje"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Mesazhi nuk u dërgua - mesazh i pavlefshëm"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Mesazhi nuk u dërgua - përmbajtje e pambështetur"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Mesazhi nuk u dërgua - mesazh i pambështetur"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Mesazhi nuk u dërgua: shumë i madh"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Mesazh i ri"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Shiko"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Imazh"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Nuk arriti të gjente një aplikacion të përshtatshëm"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Hiq marrësin"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Mesazh i ri"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Anulo"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Redakto pikën e qasjes"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Nuk është vendosur"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Emri"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN-ja"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC-ja"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Përfaqësuesi i MMS-ve"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Porta e MMS-ve"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC-ja"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Lloji i APN-së"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Fshi APN-në"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN e re"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Ruaj"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Injoro"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Fusha \"Emri\" nuk të lihet bosh."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN-ja nuk mund të lihet bosh."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Fusha e MCC-së duhet të ketë 3 shifra."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Fusha e MNC-së duhet të ketë 2 ose 3 shifra."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Po restauron cilësimet e APN-së me parazgjedhje."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Rivendos në parazgjedhje"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Rivendosja e cilësimeve të APN-së me parazgjedhje përfundoi."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Pa titull"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Emrat e Pikës së Qasjes"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN-të"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN e re"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Cilësimet e Emrit të Pikës së Qasjes nuk mund të përdoren për këtë përdorues"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Të kopjohet në kujtesën e fragmenteve"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopjo"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"për <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Të përgjithshme"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Të përparuara"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Cilësimet e përgjithshme"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Cilësimet e përparuara"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"Emri i kartës SIM: \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Dërgoju mesazhe SMS të gjithë marrësve. Vetëm ti do të marrësh përgjigje"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Dërgoju një MMS të vetme, të gjithë marrësve"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Numër i panjohur"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Mesazh i ri."</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Mesazh i ri."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Përzgjedhësi i kartës SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> i përzgjedhur, përzgjedhësi i kartës SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Redakto subjektin"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Përzgjidh kartën SIM ose redakto subjektin"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Prek dhe mbaj shtypur për të regjistruar audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Fillo bisedë të re"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Mesazhet"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Lista e Mesazheve"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Mesazhet"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Mesazh i ri"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Lista e bisedave"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Po ngarkon bisedat"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Po ngarkon mesazhet"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Shiko më shumë biseda"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Shiko më shumë mesazhe"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Biseda është fshirë"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Biseda u fshi. Prek për të shfaqur një bisedë tjetër te \"Mesazhet\""</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"I bllokuar"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"I zhbllokuar"</string>
-    <string name="db_full" msgid="8459265782521418031">"Hapësira ruajtëse është e vogël. Disa të dhëna mund të humbin."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Përzgjidh bashkëngjitje"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Konfirmo përzgjedhjen"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"U përzgjodhën <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Hiq një ose më shumë bashkëngjitje dhe provo sërish."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Mund të provosh ta dërgosh mesazhin, por mund të mos dërgohet pa hequr një ose disa bashkëngjitje."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Mund të dërgosh vetëm një video për çdo mesazh. Hiqi videot shtesë dhe provo përsëri."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Mesazhet dështuan në ngarkimin e bashkëngjitjes."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Dërgoje gjithsesi"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Nuk arriti të fillonte bisedën"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> u zgjodh"</string>
-</resources>
diff --git a/res/values-sr/arrays.xml b/res/values-sr/arrays.xml
deleted file mode 100644
index f099488..0000000
--- a/res/values-sr/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"без наслова"</item>
-    <item msgid="272485471009191934">"нема наслова"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Да"</item>
-    <item msgid="6049132459802288033">"Не"</item>
-    <item msgid="3084376867445867895">"Потврди"</item>
-    <item msgid="3155097332660174689">"Хе хе"</item>
-    <item msgid="2611328818571146775">"Хвала"</item>
-    <item msgid="4881335087096496747">"Слажем се"</item>
-    <item msgid="2422296858597420738">"Фино"</item>
-    <item msgid="4805581752819452687">"Стижем ускоро"</item>
-    <item msgid="4746700499431366214">"Добро, јавићу ти се касније"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
deleted file mode 100644
index a1262a0..0000000
--- a/res/values-sr/strings.xml
+++ /dev/null
@@ -1,545 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Размена порука"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Размена порука"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Изаберите преписку"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Подешавања"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Пошаљи поруку"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Додај прилог"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Помоћ"</string>
-    <string name="welcome" msgid="2857560951820802321">"Добро дошли"</string>
-    <string name="skip" msgid="7238879696319945853">"Прескочи"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Следеће &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Даље"</string>
-    <string name="exit" msgid="1905187380359981199">"Изађи"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Подешавања &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Подешавања"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Размена порука тражи дозволу за SMS, телефон и контакте."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Можете да мењате дозволе у одељку Подешавања &gt; Апликације &gt; Размена порука &gt; Дозволе."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Можете да мењате дозволе у одељку Подешавања, Апликације, Размена порука, Дозволе."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Често контактирани"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Сви контакти"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Пошаљи на <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Сними слику или видео снимак"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Избор слика са овог уређаја"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Сними звук"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Изаберите слику"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Изабрали сте медијски садржај."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Опозвали сте избор медијског садржаја."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Изабраних: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"слика <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"слика"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Снимање звука"</string>
-    <string name="action_share" msgid="2143483844803153871">"Дели"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Управо сад"</string>
-    <string name="posted_now" msgid="867560789350406701">"Сада"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> мин</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> мин</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> мин</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> сат</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> сата</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> сати</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> дан</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> дана</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> дана</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> недеље</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> недеље</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> недеља</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> месеца</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> месеца</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> месеци</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> године</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> године</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> година</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Порука класе 0"</string>
-    <string name="save" msgid="5081141452059463572">"Сачувај"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Понестаје простора на уређају. Апликација за размену порука ће аутоматски обрисати старије поруке да би ослободила простор."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Понестаје складишног простора"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Размена порука можда неће моћи да шаље нити прима поруке док још простора не буде доступно на уређају."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Понестаје меморије за SMS. Можда ћете морати да избришете поруке."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Потврдите број телефона"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Овим једнократним кораком обезбеђујете да Размена порука правилно испоручује групне поруке."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Број телефона"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Избриши све поруке са медијским садржајем"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Избриши поруке старије од <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Аутоматски бриши поруке старије од <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Игнориши"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Желите ли да избришете све поруке са медијским садржајем?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Желите ли да избришете поруке старије од <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Желите ли да избришете поруке старије од <xliff:g id="DURATION">%s</xliff:g> и да укључите аутоматско брисање?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> каже"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Рекли сте"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Порука од корисника <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Послали сте поруку"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Шаље се..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Слање није успело. Додирните да бисте покушали поново."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Слање није успело. Покушавамо поново…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Пошаљите поново или избришите"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Упутите гласовни позив службама за хитне случајеве. Слање SMS-а тренутно није успело."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Није успело"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Нова MMS порука за преузимање"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Нова MMS порука"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Преузимање није успело"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Додирните да бисте покушали поново"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Додирните да бисте преузели"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Преузмите или избришите"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Преузима се..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Порука је истекла или није доступна"</string>
-    <string name="mms_info" msgid="3402311750134118165">"величина: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, истиче: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Слање није могуће. Прималац није важећи."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Услуга није активирана у мрежи"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Слање није могуће због проблема са мрежом"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Порука је истекла или није доступна"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Без наслова)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Непознати пошиљалац"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Испоручено"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Није могуће преузети поруку <xliff:g id="SUBJECT">%1$s</xliff:g> пошиљаоца <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Није могуће довршити операцију у вези са базом података због недостатка меморије"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Порука није послата"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Неке поруке нису послате у Размени порука"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> поруке(а) у <xliff:g id="CONVERSATIONS">%d</xliff:g> конверзацији</item>
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> поруке(а) у <xliff:g id="CONVERSATIONS">%d</xliff:g> конверзације</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> поруке(а) у <xliff:g id="CONVERSATIONS">%d</xliff:g> конверзација</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Порука није преузета"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Неке поруке нису преузете у Размени порука"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> поруке(а) у <xliff:g id="CONVERSATIONS">%d</xliff:g> конверзацији</item>
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> поруке(а) у <xliff:g id="CONVERSATIONS">%d</xliff:g> конверзације</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> поруке(а) у <xliff:g id="CONVERSATIONS">%d</xliff:g> конверзација</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Порука на <xliff:g id="NUMBER">%1$s</xliff:g> није послата"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Упутите гласовни позив службама за хитне случајеве. Слање SMS-а на <xliff:g id="NUMBER">%1$s</xliff:g> тренутно није успело."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> нова порука</item>
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> нове поруке</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> нових порука</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Покрени"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Камера није доступна"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Камера није доступна"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Снимање видео снимака није доступно"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Чување медија није могуће"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Није успело снимање слике"</string>
-    <string name="back" msgid="1477626055115561645">"Назад"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Архивирано"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Избриши"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Архивирај"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Опозови архивирање"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Искључи обавештења"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Укључи обавештења"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Додај контакт"</string>
-    <string name="action_download" msgid="7786338136368564146">"Преузми"</string>
-    <string name="action_send" msgid="377635240181672039">"Пошаљи"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Избриши"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Желите да избришете ову поруку?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Ова радња не може да се опозове."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Избриши"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Желите ли да избришете ове конверзације?</item>
-      <item quantity="few">Желите ли да избришете ове конверзације?</item>
-      <item quantity="other">Желите ли да избришете ове конверзације?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Избриши"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Откажи"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Прима"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Изаберите више слика"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Потврди избор"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Снимање звука није успело. Покушајте поново."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Пуштање звука није успело. Покушајте поново."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Чување звука није успело. Покушајте поново."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Додирните и задржите"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Слика"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Аудио исечак"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Видео"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Картица контакта"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Преузми"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Одговори преко SMS-а"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Одговори MMS-ом"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Одговорите"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> учесник</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> учесника</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> учесника</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ја"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Контакт је блокиран и архивиран"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Контакт је деблокиран и архивирање је опозвано"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Архивирано: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Опозвано је архивирање за: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Обавештења су искључена"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Обавештења су укључена"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Све је спремно. Додирните Пошаљи поново."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Размена порука је подешена као подразумевана апликација за SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Одбаци прилоге</item>
-      <item quantity="few">Одбаци прилоге</item>
-      <item quantity="other">Одбаци прилоге</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Аудио прилог"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Пусти аудио прилог"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Пауза"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> вам шаље нову поруку: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Није примљена порука од корисника <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Порука од корисника <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Порука није послата кориснику <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Шаље се порука кориснику <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Није успело слање поруке кориснику <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Порука кориснику <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Није примљена порука од корисника <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Порука од корисника <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Порука која није послата групи <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Шаље се порука групи <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Није успело слање поруке групи <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Порука групи <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Време: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Слање поруке није успело. Додирните да бисте поново покушали."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Конверзација са учесницима <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Брисање наслова"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Снимите видео"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Снимите слику"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Снимите слику"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Почните да снимате видео"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Пређите на камеру целог екрана"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Пребацујте са предње на задњу камеру и обрнуто"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Заустави снимање и приложи видео"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Заустави снимање звука"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Слике из Размене порука"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> слика је сачувана у албуму „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> слике су сачуване у албуму „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> слика је сачувано у албуму „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> видео је сачуван у албуму „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> видео снимка су сачувана у албуму „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> видео снимака је сачувано у албуму „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> прилог је сачуван у албуму „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> прилога су сачувана у албуму „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> прилога је сачувано у албуму „<xliff:g id="ALBUMNAME_3">%s</xliff:g>“</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> прилог је сачуван у директоријуму „Преузимања“</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> прилога су сачувана у директоријуму „Преузимања“</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> прилога је сачувано у директоријуму „Преузимања“</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> прилог је сачуван</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> прилога су сачувана</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> прилога је сачувано</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Нисмо успели да сачувамо <xliff:g id="QUANTITY_1">%d</xliff:g> прилог</item>
-      <item quantity="few">Нисмо успели да сачувамо <xliff:g id="QUANTITY_1">%d</xliff:g> прилога</item>
-      <item quantity="other">Нисмо успели да сачувамо <xliff:g id="QUANTITY_1">%d</xliff:g> прилога</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Сачувани прилог MMS-а"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Подешавања"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Архивирано"</string>
-    <string name="action_close" msgid="1840519376200478419">"Затвори"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Напредно"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Отклањање грешака"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Обавештења"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Звук"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Нечујно"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Вибрација"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Блокирано"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Извештаји о испоруци SMS-ова"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Захтевајте извештај о испоруци за сваки послати SMS"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Аутоматско преузимање"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Аутоматско преузимање MMS порука"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Аутоматски преузимај у ромингу"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Аутоматски преузимај MMS у ромингу"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Групна размена порука"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Користите MMS за слање једне поруке када постоји више прималаца"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Подразумевана апликација за SMS"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Подразумевана апликација за SMS"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Број телефона"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Непознато"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Звукови за одлазне поруке"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Направи сирову копију SMS-а"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Направи сирову копију необрађених података примљеног SMS-а у датотеци спољног складишног простора"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Направи сирову копију MMS-а"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Направи сирову копију необрађених података примљеног MMS-а у датотеци спољног складишног простора"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Обавештења преко мобилне мреже"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Опције поруке"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Копирај текст"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Погледајте детаље"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Избриши"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Проследи"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Детаљи поруке"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Тип: "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Мултимедијална порука"</string>
-    <string name="from_label" msgid="1947831848146564875">"Од: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Коме: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Послато: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Примљено: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Наслов: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Величина: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Приоритет: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM картица: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Висок"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Нормалан"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Низак"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"Отвор за SIM картицу <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Скривена адреса пошиљаоца"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Не можете да пошаљете поруку док се прилози учитавају."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Учитавање прилога није успело. Покушајте поново."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Мрежа није спремна. Покушајте поново."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Избриши текст"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Пребацивање између уноса текста и бројева"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Додај још учесника"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Потврди учеснике"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Започни нову конверзацију"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Изаберите ову ставку"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Пусти видео"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Људи и опције"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Отклони грешке"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Људи и опције"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Опште"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Људи у овој конверзацији"</string>
-    <string name="action_call" msgid="6596167921517350362">"Позови"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Пошаљите поруку"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Пошаљите поруку&lt;br/&gt;&lt;small&gt;са картице <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Пошаљите слике</item>
-      <item quantity="few">Пошаљите слике</item>
-      <item quantity="other">Пошаљите слике</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Пошаљите аудио снимке</item>
-      <item quantity="few">Пошаљите аудио снимке</item>
-      <item quantity="other">Пошаљите аудио снимке</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Пошаљите видео снимке</item>
-      <item quantity="few">Пошаљите видео снимке</item>
-      <item quantity="other">Пошаљите видео снимке</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Пошаљите картице контаката</item>
-      <item quantity="few">Пошаљите картице контаката</item>
-      <item quantity="other">Пошаљите картице контаката</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Пошаљите прилоге</item>
-      <item quantity="few">Пошаљите прилоге</item>
-      <item quantity="other">Пошаљите прилоге</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> прилог је спреман за слање</item>
-      <item quantity="few"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> прилога су спремна за слање</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> прилога је спремно за слање</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Пошаљи повратне информације"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Прикажи у Google Play продавници"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Информације о верзији"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Верзија %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Лиценце отвореног кода"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Обавештења"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Ограничење за прилоге је достигнуто"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Учитавање прилога није успело."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Желите ли да додате у контакте?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Додај контакт"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Наслов"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Наслов: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Учитава се картица контакта"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Учитавање картице контакта није успело"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Погледајте картицу контакта"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> контакт</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контаката</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Картице контаката"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Рођендан"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Белешке"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Проследите поруку"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Одговорите"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS је онемогућен"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Да бисте слали поруке, подесите Размену порука као подразумевану апликацију за SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Подесите Размену порука као подразумевану апликацију за SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Промени"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Да бисте примали поруке, подесите Размену порука као подразумевану апликацију за SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Није изабран жељени SIM за слање SMS-ова"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Власник уређаја не дозвољава ову апликацију."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Потврди"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Превише учесника у конверзацији"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Неважећи контакти</item>
-      <item quantity="few">Неважећи контакти</item>
-      <item quantity="other">Неважећи контакти</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Учитавање слике са камере није успело"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Ви: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Недовршена порука"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Када започнете нову конверзацију, видећете је наведену овде"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Овде се појављују архивиране преписке"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Преписке се учитавају..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Слика"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Аудио клип"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Видео"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Картица контакта"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Опозови"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Покушај поново"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Унесите име или број телефона контакта да бисте започели нову поруку"</string>
-    <string name="action_block" msgid="9032076625645190136">"Блокирај"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Блокирај <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Деблокирај <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Желите ли да блокирате <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"И даље ћете примати поруке са овог броја, али нећете више добијати обавештења. Ова преписка ће бити архивирана."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Блокирани контакти"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ДЕБЛОКИРАЈ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Блокирани контакти"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Изаберите слику из библиотеке докумената"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Порука се шаље"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Порука је послата"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Подаци за мобилне уређаје су искључени. Проверите подешавања."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Слање порука није могуће у Режиму рада у авиону"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Порука није послата"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Порука је преузета"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Подаци за мобилне уређаје су искључени. Проверите подешавања."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Није могуће преузимати поруке у режиму рада у авиону"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Преузимање поруке није успело"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Нула"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Један"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Два"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Три"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Четири"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Пет"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Шест"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Седам"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Осам"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Девет"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Није могуће послати поруку помоћу мобилног оператера <xliff:g id="CARRIERNAME">%1$s</xliff:g>, грешка <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Није могуће послати поруку помоћу непознатог мобилног оператера, грешка <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Порука није послата: услуга није активирана на мрежи"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Порука није послата: неважећа одредишна адреса"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Порука није послата: неважећа порука"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Порука није послата: неподржани садржај"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Порука није послата: неподржана порука"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Порука није послата: превелика је"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Нова порука"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Прикажи"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Слика"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Проналажење одговарајуће апликације није успело"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Уклањање примаоца"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Нова порука"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Откажи"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Измените приступну тачку"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Није подешено"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Назив"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"Назив приступне тачке"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS прокси"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS порт"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Тип назива приступне тачке"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Избриши назив приступне тачке"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Нов назив приступне тачке"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Сачувај"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Одбаци"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Поље Назив не сме да буде празно."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Поље Назив приступне тачке не сме да буде празно."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Поље MCC мора да садржи 3 цифре."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Поље MNC мора да садржи 2 или 3 цифре."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Враћање подразумеваних подешавања назива приступне тачке."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Ресетуј подразумеване вредности"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Ресетовање подразумеваних подешавања назива приступне тачке је довршено."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Ненасловљено"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Називи приступних тачака"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Називи приступних тачака"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Нов назив приступне тачке"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Подешавања назива приступне тачке нису доступна за овог корисника"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Желите ли да копирате у привремену меморију?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Копирај"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"на картицу <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Опште"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Напредно"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Општа подешавања"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Напредна подешавања"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"„<xliff:g id="SIM_NAME">%s</xliff:g>“ SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Шаљите појединачне SMS поруке свим примаоцима. Само ви ћете добијати одговоре"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Пошаљите један MMS свим примаоцима"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Непознат број"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Нова порука"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Нова порука."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Бирач SIM картице"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Изабран је <xliff:g id="SIM_0">%1$s</xliff:g>, бирач SIM картица"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Измени наслов"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Изабери SIM или измени наслов"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Додирните и задржите за снимање звука"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Започни нову конверзацију"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Размена порука"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Листа из Размене порука"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Размена порука"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Нова порука"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Листа преписки"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Учитавају се конверзације"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Учитавају се поруке"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Прикажи још конверзација"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Прикажи још порука"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Конверзација је избрисана"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Конверзација је избрисана. Додирните да бисте приказали неку другу конверзацију Размене порука"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Блокирано"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Деблокирано"</string>
-    <string name="db_full" msgid="8459265782521418031">"Нема довољно меморијског простора. Неки подаци ће можда бити изгубљени."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Изабери прилоге"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Потврди избор"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Изабраних: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Уклоните један прилог или више њих и покушајте поново."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Можете да покушате да пошаљете поруку, али можда неће бити испоручена ако не уклоните један прилог или више њих."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Можете да пошаљете само један видео по поруци. Уклоните друге видео снимке и покушајте поново."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Размена порука није успела да учита прилог."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Ипак пошаљи"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Започињање преписке није успело"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Изабрали сте <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-sv/arrays.xml b/res/values-sv/arrays.xml
deleted file mode 100644
index 8f03e4b..0000000
--- a/res/values-sv/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"inget ämne"</item>
-    <item msgid="272485471009191934">"inget ämne"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ja"</item>
-    <item msgid="6049132459802288033">"Nej"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Tack"</item>
-    <item msgid="4881335087096496747">"Jag accepterar"</item>
-    <item msgid="2422296858597420738">"Nice"</item>
-    <item msgid="4805581752819452687">"På väg"</item>
-    <item msgid="4746700499431366214">"OK, jag återkommer senare"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
deleted file mode 100644
index 01d5820..0000000
--- a/res/values-sv/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Sms/mms"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Sms/mms"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Välj konversation"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Inställningar"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Skicka meddelande"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Lägg till en bilaga"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Hjälp"</string>
-    <string name="welcome" msgid="2857560951820802321">"Välkommen"</string>
-    <string name="skip" msgid="7238879696319945853">"Hoppa över"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Nästa &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Nästa"</string>
-    <string name="exit" msgid="1905187380359981199">"Stäng"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Inställningar &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Inställningar"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Meddelanden behöver ha åtkomst till Sms, Telefon och Kontakter."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Du kan ändra behörigheterna i Inställningar &gt; Appar &gt; Meddelanden &gt; Behörigheter."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Du kan ändra behörigheterna i Inställningar, Appar, Meddelanden, Behörigheter."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Frekventa"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Alla kontakter"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Skicka till <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Ta bilder eller spela in video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Välj bilder från den här enheten"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Spela in ljud"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Välj foto"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Video-/bildobjektet har markerats."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Video-/bildobjektet har avmarkerats."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> har valts"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"bild <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"bild"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Spela in ljud"</string>
-    <string name="action_share" msgid="2143483844803153871">"Dela"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Nyss"</string>
-    <string name="posted_now" msgid="867560789350406701">"Nu"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> timmar</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> timme</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dagar</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> dag</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> veckor</item>
-      <item quantity="one">en vecka</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> månader</item>
-      <item quantity="one">en månad</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> år</item>
-      <item quantity="one">ett år</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Meddelande, klass 0"</string>
-    <string name="save" msgid="5081141452059463572">"Spara"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Det finns ont om utrymme på enheten. Om du skickar och tar emot sms kommer äldre sms att raderas för att göra plats."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Lagringsutrymmet börjar ta slut"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Du kan behöva frigöra utrymme på enheten för att kunna skicka eller ta emot sms med Meddelanden."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Lagringsutrymmet för sms är fullt. Du kan behöva ta bort sms."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Bekräfta ditt telefonnummer"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Genom detta engångssteg säkerställer du att dina gruppmeddelanden levereras som de ska med Meddelanden."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefonnummer"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Ta bort alla meddelanden med mediefiler"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Ta bort meddelanden som är äldre än <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Ta automatiskt bort meddelanden som är äldre än <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ignorera"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Vill du ta bort alla meddelanden med media?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Vill du ta bort meddelanden som är äldre än <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Vill du ta bort meddelanden som är äldre än <xliff:g id="DURATION">%s</xliff:g> och aktivera automatisk borttagning?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> sade"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Du sade"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Meddelande från <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Du har skickat ett meddelande"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Skickar …"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Det gick inte att skicka. Tryck om du vill försöka igen."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Det gick inte att skicka. Försöker igen ..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Skicka igen eller ta bort"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Ring larmcentralen. Det gick inte att skicka ett sms just nu."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Misslyckades"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Nya MMS att ladda ned"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Nytt MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Nedladdningen genomfördes inte"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Tryck om du vill försöka igen"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Ladda ned genom att trycka"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Ladda ned eller radera"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Hämtar ..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Meddelandet har upphört att gälla eller är inte tillgängligt"</string>
-    <string name="mms_info" msgid="3402311750134118165">"storlek: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, finns kvar till: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Det gick inte att skicka. Mottagaren är inte giltig."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Tjänsten är inte aktiverad i nätverket"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Det gick inte att skicka på grund av nätverksproblem"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Meddelandet har upphört att gälla eller är inte tillgängligt."</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Inget ämne)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Okänd avsändare"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Levererat"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Det gick inte att ladda ned meddelandet <xliff:g id="SUBJECT">%1$s</xliff:g> från <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Det gick inte att slutföra åtgärden i databasen på grund av för låg minneskapacitet"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Meddelandet har inte skickats"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Vissa meddelanden skickades inte i Meddelanden"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> meddelanden i <xliff:g id="CONVERSATIONS">%d</xliff:g> konversationer</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> meddelanden i en konversation</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Meddelandet har inte laddats ned"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Vissa meddelanden laddades inte ned i Meddelanden"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> meddelanden i <xliff:g id="CONVERSATIONS">%d</xliff:g> konversationer</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> meddelanden i en konversation</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Meddelandet till <xliff:g id="NUMBER">%1$s</xliff:g> skickades inte"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Ring larmcentralen. Det gick inte att skicka ett sms till <xliff:g id="NUMBER">%1$s</xliff:g> just nu."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> nya meddelanden</item>
-      <item quantity="one">Nytt meddelande</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Börja"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kameran är inte tillgänglig"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kameran är inte tillgänglig"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Det går inte att spela in video"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Det går inte att spara media"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Det går inte att fota"</string>
-    <string name="back" msgid="1477626055115561645">"Föregående"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arkiverat"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Ta bort"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arkivera"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Ångra arkivering"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Inaktivera aviseringar"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Aktivera aviseringar"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Lägg till kontakt"</string>
-    <string name="action_download" msgid="7786338136368564146">"Ladda ned"</string>
-    <string name="action_send" msgid="377635240181672039">"Skicka"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Ta bort"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Vill du ta bort meddelandet?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Åtgärden kan inte ångras."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Ta bort"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Vill du ta bort dessa konversationer?</item>
-      <item quantity="one">Vill du ta bort konversationen?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Ta bort"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Avbryt"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Till"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Markera flera bilder"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Bekräfta ditt val"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Det gick inte att spela in ljud. Försök igen."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Det gick inte att spela upp ljudet. Försök igen."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Det gick inte att spara ljud. Försök igen."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Tryck länge"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Bild"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Ljudklipp"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Visitkort"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Ladda ned"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Svara via sms"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Svara via mms"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Svara"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> deltagare</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> deltagare</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Jag"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakten har blockerats och arkiverats"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontakten har återaktiverats och hämtats från arkivet"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> har arkiverats"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> arkiveringar har ångrats"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Aviseringar har inaktiverats"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Aviseringar har aktiverats"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Allt klart. Tryck på Skicka igen."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Meddelanden har angetts som standardapp för sms."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Släng bilagor</item>
-      <item quantity="one">Släng bilaga</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Ljudbilaga"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Spela upp ljudbilaga"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Pausa"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Meddelande från <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Meddelande som inte kunde skickas från <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Meddelande från <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Meddelande som inte har skickats till <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Skickar meddelande till <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Meddelande som inte kunde skickas till <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Meddelande till <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Meddelande som inte kunde skickas från <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Meddelande från <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Meddelande som inte har skickats till <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Skickar meddelande till <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Meddelande som inte kunde skickas till <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Meddelande till <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Tidpunkt: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Det här meddelandet gick inte att skicka. Tryck om du vill försöka igen."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Samtal med <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Radera ämne"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Spela in video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Ta en stillbild"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Ta bild"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Börja spela in video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Byt till fullskärmskamera"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Växla mellan främre och bakre kamera"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Stoppa inspelningen och bifoga en video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Sluta spela in video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Skicka foton med Meddelanden"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> foton har sparats i albumet <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> foto har sparats i albumet <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> videor har sparats i albumet <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video har sparats i albumet <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> bilagor har sparats i albumet <xliff:g id="ALBUMNAME_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bilaga har sparats i albumet <xliff:g id="ALBUMNAME_1">%s</xliff:g></item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> bilagor har sparats i Nedladdningar</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bilaga har sparats i Nedladdningar</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> bilagor sparas</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> bilaga har sparats</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Det gick inte att spara <xliff:g id="QUANTITY_1">%d</xliff:g> bilagor</item>
-      <item quantity="one">Det gick inte att spara <xliff:g id="QUANTITY_0">%d</xliff:g> bilaga</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Mms-bilaga har sparats"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Inställningar"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arkiverat"</string>
-    <string name="action_close" msgid="1840519376200478419">"Stäng"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"Mms"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Avancerat"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Felsökning"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Aviseringar"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Ljud"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Tyst"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Vibration"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Blockerad"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Sms-leveransrapporter"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Begär en leveransrapport för varje sms du skickar"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Automatisk hämtning"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Hämta mms-meddelanden automatiskt"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Autohämtning vid roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Hämta mms automatiskt vid roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Gruppmeddelanden"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Använd mms för att skicka ett meddelande när det finns flera mottagare"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Standardapp för sms"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Standardapp för sms"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Ditt telefonnummer"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Okänt"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Ljud vid utgående meddelande"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Dumpa sms"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Dumpa rådata för mottagna sms i en extern lagringsfil"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Dumpa mms"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Dumpa rådata för mottagna mms i en extern lagringsfil"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Trådlösa varningar"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Meddelandealternativ"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopiera text"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Visa mer information"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Ta bort"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Vidarebefordra"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Meddelandeinformation"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Typ: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Sms"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Mms"</string>
-    <string name="from_label" msgid="1947831848146564875">"Från: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Till: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Skickat: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Mottaget: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Ämne: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Storlek: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Prioritet: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Hög"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Låg"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Avsändaradress dold"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Kan inte skicka meddelandet samtidigt som bilagor läses in."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Det gick inte att läsa in bilagan. Försök igen."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Nätverket är inte klart. Försök igen."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Ta bort text"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Växla mellan att ange text och siffror"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Lägg till fler deltagare"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Bekräfta deltagare"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Starta ny konversation"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Välj det här objektet"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Spela upp video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Personer och alternativ"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Felsökning"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Personer och alternativ"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Allmänt"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Personer i den här konversationen"</string>
-    <string name="action_call" msgid="6596167921517350362">"Ring ett samtal"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Skicka meddelande"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Skicka meddelandet&lt;br/&gt;&lt;small&gt;från <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Skicka foton</item>
-      <item quantity="one">Skicka foto</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Skicka ljud</item>
-      <item quantity="one">Skicka ljud</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Skicka videor</item>
-      <item quantity="one">Skicka video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Skicka kontaktkort</item>
-      <item quantity="one">Skicka kontaktkort</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Skicka bilagor</item>
-      <item quantity="one">Skicka bilaga</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> bilagor är klara att skicka</item>
-      <item quantity="one">En bilaga är klar att skicka</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Skicka feedback"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Visa i Google Play Butik"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Version"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Version %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Licenser, öppen källkod"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Aviseringar"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Gränsen för bilagor har uppnåtts"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Det gick inte att läsa in bilagan."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Vill du lägga till detta i Kontakter?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Lägg till kontakt"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Ämne"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Ämne: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Läser in visitkort"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Det gick inte att läsa in kontaktkortet"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Visa visitkort"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakter</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontaktkort"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Födelsedatum"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Anteckningar"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Vidarebefordra meddelande"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Svara"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+ 1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Sms har inaktiverats"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Ange Meddelanden som standardapp för sms om du vill skicka"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Ange Meddelanden som standardapp för sms"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Ändra"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Ställ in Meddelanden som standardapp för sms om du vill ta emot meddelanden"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Inget SIM-kort har angetts som primärt för att skicka sms"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Appen tillåts inte av enhetsägaren."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"För många deltagare i en konversation"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Ogiltiga kontakter</item>
-      <item quantity="one">Ogiltig kontakt</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Det gick inte att läsa in kamerabild"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Du: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Utkast"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"När du startar en ny konversation listas den här"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Arkiverade konversationer visas här"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Läser in konversationer …"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Bild"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Ljudklipp"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Visitkort"</string>
-    <string name="mms_text" msgid="1528791558806015806">"Mms"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Ångra"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Försök igen"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Ange namnet på en kontakt eller ett telefonnummer för att starta ett nytt meddelande"</string>
-    <string name="action_block" msgid="9032076625645190136">"Blockera"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Blockera <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Återaktivera <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Vill du blockera <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Du kan fortfarande få meddelanden från det här numret, men du får inga fler aviseringar. Den här konversationen arkiveras."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Blockerade kontakter"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ÅTERAKTIVERA"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Blockerade kontakter"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Välj en bild från dokumentbiblioteket"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Skickar meddelande"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Meddelandet har skickats"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobildata har inaktiverats. Kontrollera inställningarna."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Det går inte att skicka meddelanden i flygplansläge"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Meddelandet kunde inte skickas"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Meddelandet har laddats ned"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobildata har inaktiverats. Kontrollera inställningarna."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Det går inte att ladda ned meddelanden i flygplansläge"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Det gick inte att ladda ned meddelandet"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Noll"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Ett"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Två"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tre"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Fyra"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Fem"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Sex"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Sju"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Åtta"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Nio"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Det gick inte att skicka meddelandet med <xliff:g id="CARRIERNAME">%1$s</xliff:g>, fel <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Det gick inte att skicka meddelandet med okänd operatör, fel <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Vidarebefordra: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Meddelandet har inte skickats: tjänsten är inte aktiverad i nätverket"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Meddelandet skickades inte: ogiltig e-postadress"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Meddelandet skickades inte: ogiltigt meddelande"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Meddelandet skickades inte: inget stöd för innehållet"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Meddelandet skickades inte: inget stöd för meddelandet"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Meddelandet skickades inte: för stort"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Nytt meddelande"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Visa"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Bild"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Ingen app för detta hittades"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Ta bort mottagare"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Nytt meddelande"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Avbryt"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Redigera åtkomstpunkt"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Har inte angetts"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Namn"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS-proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS-port"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN-typ"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Ta bort APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Nytt APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Spara"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Ignorera"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Fältet Namn får inte vara tomt."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN får inte vara tomt."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC-fältet måste bestå av 3 siffror."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC-fältet måste bestå av 2 eller 3 siffror."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Återställer standardinställningar för APN."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Återställ standardinställningarna"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Standardinställningar för APN har återställts."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Namnlös"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Åtkomstpunktens namn (APN)"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN:er"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Nytt APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Inställningarna för åtkomstpunktens namn är inte tillgängliga för den här användaren"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Vill du kopiera till urklipp?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopiera"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"till <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Allmänt"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Avancerat"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Allmänna inställningar"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Avancerade inställningar"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM-kortet <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Skicka enskilda sms till alla mottagare. Det är endast du som får de eventuella svaren."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Skicka samma mms till alla mottagare."</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Okänt nummer"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Nytt meddelande"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Nytt meddelande."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM-kortsväljaren"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> har valts, SIM-kortsväljare"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Redigera ämne"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Välj SIM-kort eller redigera ämne"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Tryck länge för att spela in ljud"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Starta ny konversation"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Meddelanden"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Meddelandelista"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Meddelanden"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Nytt meddelande"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Konversationslista"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Konversationer hämtas"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Läser in meddelanden"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Visa fler konversationer"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Visa fler meddelanden"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Konversationen har raderats"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Konversationen raderades. Tryck här om du vill visa en annan konversation i Meddelanden."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Blockerad"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Återaktiverad"</string>
-    <string name="db_full" msgid="8459265782521418031">"Lagringsutrymmet är nästan fullt. All data kanske inte sparas."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Välj bilagor"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Bekräfta ditt val"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> har valts"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Ta bort en eller flera av bilagorna och försök igen."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Du kan testa att skicka meddelandet, men det kanske inte kommer fram om du inte tar bort en eller flera av bilagorna först."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Det går bara att skicka en video per meddelande. Ta bort ytterligare videor och försök igen."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Det gick inte att läsa in bilagan i Meddelanden."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Skicka ändå"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Det gick inte att starta en konversation"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> har valts"</string>
-</resources>
diff --git a/res/values-sw/arrays.xml b/res/values-sw/arrays.xml
deleted file mode 100644
index 1641f55..0000000
--- a/res/values-sw/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"kichwa hakijaongezwa"</item>
-    <item msgid="272485471009191934">"kichwa hakijaongezwa"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ndiyo"</item>
-    <item msgid="6049132459802288033">"Hapana"</item>
-    <item msgid="3084376867445867895">"Sawa"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Asante"</item>
-    <item msgid="4881335087096496747">"Nakubali"</item>
-    <item msgid="2422296858597420738">"Shwari"</item>
-    <item msgid="4805581752819452687">"Niko njiani"</item>
-    <item msgid="4746700499431366214">"Sawa, nitawasiliana na wewe baadaye"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
deleted file mode 100644
index 87b12ae..0000000
--- a/res/values-sw/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Utumaji ujumbe"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Utumaji ujumbe"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Chagua mazungumzo"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Mipangilio"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Tuma Ujumbe"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Ongeza kiambatisho"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Usaidizi"</string>
-    <string name="welcome" msgid="2857560951820802321">"Karibu"</string>
-    <string name="skip" msgid="7238879696319945853">"Ruka"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Inayofuata &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Inayofuata"</string>
-    <string name="exit" msgid="1905187380359981199">"Ondoka"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Mipangilio &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Mipangilio"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Programu ya Ujumbe inahitaji ruhusa za SMS, Simu na Anwani."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Unaweza kubadilisha ruhusa katika Mipangilio&gt; Programu&gt; Ujumbe&gt; Ruhusa."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Unaweza kubadilisha ruhusa katika Mipangilio, Programu, Ujumbe, Ruhusa."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Mara kwa mara"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Anwani zote"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Tuma kwa <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Piga picha au urekodi video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Chagua picha kutoka kifaa hiki"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Rekodi sauti"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Chagua picha"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Maudhui yameteuliwa."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Maudhui yameondolewa uteuzi."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> zimechaguliwa"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"picha <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"picha"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Rekodi sauti"</string>
-    <string name="action_share" msgid="2143483844803153871">"Shiriki"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Sasa hivi tu"</string>
-    <string name="posted_now" msgid="867560789350406701">"Sasa"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other">Dakika <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="one">Dakika <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other">Saa <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="one">Saa <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other">Siku <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="one">Siku <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other">wiki <xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="one">wiki</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other">miezi <xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="one">mwezi</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other">miaka <xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="one">mwaka</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Ujumbe wa tabaka 0"</string>
-    <string name="save" msgid="5081141452059463572">"Hifadhi"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Nafasi haitoshi kwenye kifaa. Programu ya Ujumbe itafuta kiotomatiki ujumbe wa zamani ili kuacha nafasi kwenye kifaa."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Nafasi ya kuhafadhi inakaribia kujaa"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Huenda programu ya Ujumbe isitume au kupokea ujumbe hadi nafasi zaidi ipatikane katika kifaa chako."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Hifadhi ya SMS ni ndogo. Itakubidi ufute ujumbe."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Thibitisha nambari yako ya simu"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Hatua hii ya kufanywa mara moja itahakikisha kuwa programu ya Ujumbe itawasilisha ujumbe wako wa kikundi bila tatizo."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Nambari ya simu"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Futa ujumbe wote ulio na picha, sauti au video"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Futa ujumbe uliokaa zaidi ya <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Futa kiotomatiki ujumbe uliokaa zaidi ya <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Puuza"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Je, ungependa kufuta ujumbe wote ulio na maudhui?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Je, ungependa kufuta ujumbe uliokaa zaidi ya <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Je, ungependa kufuta ujumbe uliokaa zaidi ya <xliff:g id="DURATION">%s</xliff:g> na uwashe kufuta kiotomatiki?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> alisema"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Ulisema"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Ujumbe kutoka <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Ulituma ujumbe"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Inatuma…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Haikutumwa. Gusa ili ujaribu tena."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Haikutumwa. Jaribu tena..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Tuma tena au ufute"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Tafadhali piga simu ya sauti kwa huduma za dharura. Ujumbe wako haukuweza kupokelewa kwa wakati huu."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Imeshindikana"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Ujumbe mpya wa MMS wa kupakua"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Ujumbe mpya wa MMS"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Haikuweza kupakua"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Gusa ili ujaribu tena"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Gusa ili upakue"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Pakua au ufute"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Inapakua…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Ujumbe umepitwa na wakati au haupo"</string>
-    <string name="mms_info" msgid="3402311750134118165">"ukubwa: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, mwisho: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Haiwezi kutuma. Mpokeaji si sahihi."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Huduma haijaanza kutumika kwenye mtandao."</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Haikutuma kwa sababu ya hitilafu ya mtandao"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Ujumbe umepitwa na wakati au haupo"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Kichwa hakijaongezwa)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Mtumaji asiyejulikana"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Umewasilishwa"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Haikuweza kupakua ujumbe <xliff:g id="SUBJECT">%1$s</xliff:g> kutoka <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Haikuweza kukamilisha utendaji wa hifadhidata kwa sababu ya kumbukumbu ndogo"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Ujumbe haujatumwa"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Baadhi ya ujumbe haukutumwa katika programu ya Ujumbe"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other">Ujumbe <xliff:g id="MESSAGES_1">%d</xliff:g> katika mazungumzo <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="one">Ujumbe <xliff:g id="MESSAGES_0">%d</xliff:g> katika mazungumzo moja</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Ujumbe haujapakuliwa"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Baadhi ya ujumbe haukupakuliwa katika programu ya Ujumbe"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other">Ujumbe <xliff:g id="MESSAGES_1">%d</xliff:g>katika mazungumzo <xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="one">Ujumbe <xliff:g id="MESSAGES_0">%d</xliff:g> katika mazungumzo moja</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Ujumbe kwa <xliff:g id="NUMBER">%1$s</xliff:g> haukutumwa"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Tafadhali piga simu ya sauti kwa huduma za dharura. Ujumbe wako kwa <xliff:g id="NUMBER">%1$s</xliff:g> haukuweza kupokelewa kwa wakati huu."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other">Ujumbe <xliff:g id="MESSAGES">%d</xliff:g> mpya</item>
-      <item quantity="one">Ujumbe mpya</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Anza"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera haipatikani"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera haipatikani"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Kurekodi video hakupatikani"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Haiwezi kuhifadhi maudhui ya picha au video"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Haiwezi kupiga picha"</string>
-    <string name="back" msgid="1477626055115561645">"Nyuma"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Imewekwa kwenye kumbukumbu"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Futa"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Kumbukumbu"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Ondoa kwenye kumbukumbu"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Zima arifa"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Washa arifa"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Ongeza anwani"</string>
-    <string name="action_download" msgid="7786338136368564146">"Pakua"</string>
-    <string name="action_send" msgid="377635240181672039">"Tuma"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Futa"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Je, ungependa kufuta ujumbe huu?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Kitendo hiki hakiwezi kutenduliwa."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Futa"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Ungependa kufuta mazungumzo haya?</item>
-      <item quantity="one">Ungependa kufuta mazungumzo haya?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Futa"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Ghairi"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Kwa"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Chagua picha nyingi"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Thibitisha uteuzi"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"<xliff:g id="COUNT">%d</xliff:g>+"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Haiwezi kurekodi sauti. Jaribu tena."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Haiwezi kucheza sauti. Jaribu tena."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Haikuweza kuhifadhi sauti. Jaribu tena."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Gusa na ushikilie"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Picha"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Klipu ya sauti"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kadi ya anwani"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Pakua"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Jibu kupitia SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Jibu kupitia MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Jibu"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other">Washiriki <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="one">Mshiriki <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Mimi"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Anwani imezuiwa na imewekwa kwenye kumbukumbu"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Anwani imeacha kuzuiliwa na imetolewa kwenye kumbukumbu"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> yamewekwa kwenye kumbukumbu"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> yameondolewa kwenye kumbukumbu"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Arifa zimezimwa"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Arifa zimewashwa"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Imewekwa. Gusa Tuma tena."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Umefaulu kuweka Programu ya Ujumbe kuwa programu ya chaguo-msingi ya SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Tupa viambatisho</item>
-      <item quantity="one">Tupa kiambatisho</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Kiambatisho cha sauti"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Cheza kiambatisho cha sauti"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Sitisha"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Ujumbe kutoka kwa <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Ujumbe ulioshindikana kutoka kwa <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Ujumbe kutoka <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Ujumbe ambao haukutumwa kwa <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Inatuma ujumbe kwa <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Ujumbe ulioshindikana kwa <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Ujumbe kwa <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Ujumbe ulioshindikana kutoka kwa <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Ujumbe kutoka <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Ujumbe ambao haukutumwa kwa <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Inatuma ujumbe kwa <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Ujumbe ulioshindikana kwenda kwa <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Ujumbe kwa <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saa: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Ujumbe ulishindikana. Gusa ili ujaribu tena."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Mazungumzo na <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Futa kichwa"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Rekodi video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Piga picha ya mnato"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Piga picha"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Anza kurekodi video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Badili utumie kamera ya skrini nzima"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Badili kati ya kamera ya nyuma na mbele"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Acha kurekodi na kuambatisha video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Acha kurekodi video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Picha za programu ya Ujumbe"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other">Picha <xliff:g id="QUANTITY_2">%d</xliff:g> zimehifadhiwa kwenye albamu ya \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">Picha <xliff:g id="QUANTITY_0">%d</xliff:g> imehifadhiwa kwenye albamu ya \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other">Video <xliff:g id="QUANTITY_2">%d</xliff:g> zimehifadhiwa kwenye albamu ya \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one">Video <xliff:g id="QUANTITY_0">%d</xliff:g> imehifadhiwa kwenye albamu ya \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other">Viambatisho <xliff:g id="QUANTITY_2">%d</xliff:g> vimehifadhiwa kwenye albamu ya \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" </item>
-      <item quantity="one">Kiambatisho <xliff:g id="QUANTITY_0">%d</xliff:g> kimehifadhiwa kwenye albamu ya \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other">Viambatisho <xliff:g id="QUANTITY_1">%d</xliff:g> vimehifadhiwa kwenye \"Vipakuliwa\"</item>
-      <item quantity="one">Kiambatisho <xliff:g id="QUANTITY_0">%d</xliff:g> kimehifadhiwa kwenye \"Vipakuliwa\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">Imehifadhi viambatisho <xliff:g id="QUANTITY_1">%d</xliff:g></item>
-      <item quantity="one">Imehifadhi kiambatisho <xliff:g id="QUANTITY_0">%d</xliff:g></item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Haikuweza kuhifadhi viambatisho <xliff:g id="QUANTITY_1">%d</xliff:g></item>
-      <item quantity="one">Haikuweza kuhifadhi kiambatisho <xliff:g id="QUANTITY_0">%d</xliff:g></item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Kiambatisho cha MMS kimehifadhiwa"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Mipangilio"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Imewekwa kwenye kumbukumbu"</string>
-    <string name="action_close" msgid="1840519376200478419">"Funga"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Mahiri"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Tatua"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Arifa"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Mlio"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Kimya"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Tetema"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Imezuiwa"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Ripoti za kupokelewa kwa SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Omba ripoti ya kuthibitisha kuwa kila SMS unayotuma imewasilishwa"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Pakua kiotomatiki"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Rejesha ujumbe wa MMS kiotomatiki"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Rejesha kiotomatiki wakati wa kutumia mitandao mingine"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Rejesha MMS kiotomatiki unapotumia mitandao mingine"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Utumaji ujumbe kwa kikundi"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Tumia MMS kutuma ujumbe mmoja wakati kuna wapokeaji wengi"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Programu chaguo-msingi ya SMS"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Programu chaguo-msingi ya SMS"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Nambari yako ya simu"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Isiyojulikana"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Sauti za ujumbe unaotumwa"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Tupa SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Tupa data ghafi za SMS zilizopokelewa kwenye faili ya hifadhi ya nje"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Tupa ujumbe wa MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Tupa data ghafi za ujumbe wa MMS uliopokelewa kwenye faili ya hifadhi ya nje"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Arifa ya dharura"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Chaguo za ujumbe"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Nakili maandishi"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Tazama maelezo"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Futa"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Sambaza"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Maelezo ya ujumbe"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Aina: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Ujumbe wa maandishi"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Ujumbe anuai"</string>
-    <string name="from_label" msgid="1947831848146564875">"Kutoka: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Kwa: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Imetumwa: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Imepokelewa: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Kichwa: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Ukubwa: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Kipaumbele: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Juu"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Kawaida"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Chini"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Anwani ya mtumaji iliyofichwa"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Haiwezi kutuma ujumbe wakati inapakiwa viambatisho."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Haiwezi kupakia kiambatisho. Jaribu tena."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Mtandao hauko tayari. Jaribu tena."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Futa ujumbe"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Badili kati ya kuweka maandishi na nambari"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Ongeza washiriki zaidi"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Thibitisha washiriki"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Anzisha mazungumzo mapya"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Chagua bidhaa hii"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Cheza video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Watu na chaguo"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Tatua"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Watu na chaguo"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Jumla"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Watu katika mazungumzo haya"</string>
-    <string name="action_call" msgid="6596167921517350362">"Piga simu"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Tuma ujumbe"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Tuma ujumbe&lt;br/&gt;&lt;small&gt;kutoka <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Tuma picha</item>
-      <item quantity="one">Tuma picha</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Tuma sauti</item>
-      <item quantity="one">Tuma sauti</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Tuma video</item>
-      <item quantity="one">Tuma video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Tuma kadi za anwani</item>
-      <item quantity="one">Tuma kadi ya anwani</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Tuma viambatisho</item>
-      <item quantity="one">Tuma kiambatisho</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other">Viambatisho <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> viko tayari kutumwa</item>
-      <item quantity="one">Kiambatisho kimoja kiko tayari kutumwa</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Tuma maoni"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Angalia katika Duka la Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Maelezo kuhusu toleo hili"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Toleo la %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Leseni za programu huria"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Arifa"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Kikomo cha kiambatisho kilifikiwa"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Imeshindwa kupakia kiambatisho."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Ungependa kuongeza kwenye Anwani?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Ongeza Anwani"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Kichwa"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Kichwa: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Inapakia kadi ya anwani"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Haikuweza kupakia kadi ya anwani"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Angalia kadi ya anwani"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other">Anwani <xliff:g id="COUNT_1">%d</xliff:g></item>
-      <item quantity="one">Anwani <xliff:g id="COUNT_0">%d</xliff:g></item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kadi za mawasiliano"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Siku ya kuzaliwa"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Madokezo"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Sambaza ujumbe"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Jibu"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS imezimwa"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Ili utume ujumbe, weka programu ya Ujumbe kuwa programu ya chaguo-msingi ya SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Weka programu ya Ujumbe kuwa programu ya chaguo-msingi ya SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Badilisha"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Ili kupokea ujumbe, weka programu ya Ujumbe iwe programu ya chaguo-msingi ya SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Hakuna SIM inayopendelewa kwa kutuma ujumbe wa SMS iliyochaguliwa"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Programu hii hairuhusiwi na mmiliki kifaa."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"SAWA"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Washiriki wengi mno katika mazungumzo"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Anwani zisizo sahihi</item>
-      <item quantity="one">Anwani isiyo sahihi</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Haikuweza kupakia picha ya kamera"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Wewe: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Rasimu"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Utakapoanzisha mazungumzo mapya, utayaona yameorodheshwa hapa"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Mazungumzo yaliyowekwa kwenye kumbukumbu huonekana hapa"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Inapakia mazungumzo..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Picha"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Klipu ya sauti"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kadi ya anwani"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Tendua"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Jaribu tena"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Andika jina la anwani au nambari ya simu ili uanze ujumbe mpya"</string>
-    <string name="action_block" msgid="9032076625645190136">"Zuia"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Zuia <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Ondoa kizuizi kwa <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Ungependa kuzuia <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Utaendelea kupokea ujumbe kutoka nambari hii ila hutapewa arifa tena. Mazungumzo haya yatawekwa kwenye kumbukumbu."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Anwani zilizozuiwa"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ONDOA KIZUIZI"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Anwani zilizozuiwa"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Chagua picha kutoka maktaba ya hati"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Inatuma ujumbe"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Ujumbe umetumwa"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Data ya simu za mkononi imezimwa. Angalia mipangilio yako."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Haiwezi kutuma ujumbe katika Hali ya ndegeni"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Ujumbe haukutumwa"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Ujumbe umepakuliwa"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Data ya simu za mkononi imezimwa. Angalia mipangilio yako."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Haiwezi kupakua ujumbe katika Hali ya ndegeni"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Ujumbe haukuweza kupakuliwa"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Sifuri"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Moja"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Mbili"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tatu"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Nne"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Tano"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Sita"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Saba"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Nane"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Tisa"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Huwezi kutuma ujumbe ukitumia <xliff:g id="CARRIERNAME">%1$s</xliff:g>, hitilafu <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Huwezi kutuma ujumbe ukitumia mtoa huduma asiyejulikana, hitilafu <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Ujumbe haukutumwa: huduma haijaanza kutumika kwenye mtandao."</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Ujumbe haujatumwa: anwani ya unakotuma si sahihi"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Ujumbe haujatumwa: ujumbe usio sahihi"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Ujumbe haujatumwa: maudhui yasiyoweza kutumika"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Ujumbe haujatumwa: ujumbe usioweza kutumika"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Ujumbe haujatumwa: ni mkubwa mno"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Ujumbe mpya"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Tazama"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Picha"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Haikuweza kupata programu inayofaa"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Ondoa mpokeaji"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Ujumbe mpya"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Ghairi"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Badilisha mahali pa kufikia"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Haijawekwa"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Jina"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proksi ya MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Mlango wa  MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Aina ya APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Futa APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN Mpya"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Hifadhi"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Tupa"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Sehemu hii haiwezi kuachwa ikiwa haijajazwa."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN haiwezi kuwa tupu."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Sehemu ya MCC lazima iwe na nambari 3."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Sehemu ya MNC lazima iwe na nambari 2 au 3."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Inarejesha mipangilio mbadala ya APN"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Rudisha kwenye chaguo-msingi"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Kuweka upya kwa mipangilio mbadala ya APN kumekamilika"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Haina Kichwa"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Majina ya Lango la Mtandao"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN Mpya"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Mipangilio ya Jina la Lango la Mtandao (APN) haipatikani kwa mtumiaji huyu"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Je, ungependa kunakili kwenye ubao klipu?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Nakili"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"kwa <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Jumla"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Mahiri"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Mipangilio ya jumla"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Mipangilio ya kina"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Tuma ujumbe binafsi wa SMS kwa wapokeaji wote. Wewe tu ndiye utakayepata majibu yoyote"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Tuma MMS moja kwa wapokeaji wote"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Nambari isiyojulikana"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Ujumbe mpya"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Ujumbe mpya."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Kichagua SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> imechaguliwa, Kichagua SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Badilisha kichwa"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Chagua SIM au ubadilishe kichwa"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Gusa na ushikilie ili urekodi sauti"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Anzisha mazungumzo mapya"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Ujumbe"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Orodha ya Ujumbe"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Ujumbe"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Ujumbe mpya"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Orodha ya mazungumzo"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Inapakia mazungumzo"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Inapakia ujumbe"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Tazama mazungumzo zaidi"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Angalia ujumbe zaidi"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Mazungumzo yamefutwa"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Mazungumzo yamefutwa. Gusa ili uonyeshe mazungumzo tofauti ya programu ya Ujumbe"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Amezuiwa"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Ameondolewa kizuizi"</string>
-    <string name="db_full" msgid="8459265782521418031">"Nafasi ya hifadhi ni ndogo. Unaweza kupoteza baadhi ya data."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Chagua viambatisho"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Thibitisha uteuzi"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> vimechaguliwa"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Tafadhali ondoa moja au zaidi ya viambatisho na ujaribu tena."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Unaweza kujaribu kutuma ujumbe wako, lakini huenda usitumwe hadi uondoe kiambatisho kimoja au zaidi."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Unaweza kutuma video moja pekee kwa kila ujumbe. Tafadhali ondoa video za ziada na ujaribu tena."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Programu ya Ujumbe haikupakia kiambatisho."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Tuma tu"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Haikuweza kuanza mazungumzo"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> imechaguliwa"</string>
-</resources>
diff --git a/res/values-ta/arrays.xml b/res/values-ta/arrays.xml
deleted file mode 100644
index 9953b60..0000000
--- a/res/values-ta/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"தலைப்பு இல்லை"</item>
-    <item msgid="272485471009191934">"தலைப்பு இல்லை"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"ஆம்"</item>
-    <item msgid="6049132459802288033">"இல்லை"</item>
-    <item msgid="3084376867445867895">"சரி"</item>
-    <item msgid="3155097332660174689">"ஹிஹி"</item>
-    <item msgid="2611328818571146775">"நன்றி"</item>
-    <item msgid="4881335087096496747">"ஆம்"</item>
-    <item msgid="2422296858597420738">"அருமை"</item>
-    <item msgid="4805581752819452687">"வந்துகொண்டிருக்கிறேன்"</item>
-    <item msgid="4746700499431366214">"பின்னர் அழைக்கிறேன்"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
deleted file mode 100644
index 327e454..0000000
--- a/res/values-ta/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"மெசேஜ்"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"மெசேஜ்"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"உரையாடலைத் தேர்ந்தெடுக்கவும்"</string>
-    <string name="action_settings" msgid="1329008122345201684">"அமைப்பு"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"செய்தி அனுப்பு"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"இணைப்பைச் சேர்"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"உதவி"</string>
-    <string name="welcome" msgid="2857560951820802321">"நல்வரவு"</string>
-    <string name="skip" msgid="7238879696319945853">"தவிர்"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"அடுத்து &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"அடுத்து"</string>
-    <string name="exit" msgid="1905187380359981199">"வெளியேறு"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"அமைப்புகள் &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"அமைப்புகள்"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"செய்தியிடலுக்கு SMS, ஃபோன் மற்றும் தொடர்புகள் ஆகியவற்றுக்கான அனுமதி தேவை."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"அமைப்புகள் &gt; பயன்பாடுகள் &gt; செய்தியிடல் &gt; அனுமதிகள் என்பதில் அனுமதிகளை மாற்றலாம்."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"அமைப்புகள், பயன்பாடுகள், செய்தியிடல், அனுமதிகள் என்பதில் அனுமதிகளை மாற்றலாம்."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"அடிக்கடி தொடர்புகொண்டவர்கள்"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"எல்லா தொடர்புகளும்"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> க்கு அனுப்பு"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"படங்கள் அல்லது வீடியோவை எடுக்கவும்"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"இந்தச் சாதனத்தில் இருந்து படங்களைத் தேர்வு செய்யவும்"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ஆடியோவைப் பதிவுசெய்"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"படத்தைத் தேர்வுசெய்"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"மீடியா தேர்ந்தெடுக்கப்பட்டது."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"மீடியா தேர்வுநீக்கப்பட்டது."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> தேர்ந்தெடுக்கப்பட்டது"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"படம் <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"படம்"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ஆடியோவைப் பதிவுசெய்"</string>
-    <string name="action_share" msgid="2143483844803153871">"பகிர்"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"சற்றுமுன்"</string>
-    <string name="posted_now" msgid="867560789350406701">"இப்போது"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> நிமிடங்கள்</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> நிமிடம்</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> மணிநேரம்</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> மணிநேரம்</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> நாட்கள்</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> நாள்</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> வாரங்கள்</item>
-      <item quantity="one">ஒரு வாரம்</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> மாதங்கள்</item>
-      <item quantity="one">ஒரு மாதம்</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ஆண்டுகள்</item>
-      <item quantity="one">ஒரு ஆண்டு</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"கிளாஸ் 0 செய்தி"</string>
-    <string name="save" msgid="5081141452059463572">"சேமி"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"சாதனத்தில் இடம் குறைவாக உள்ளது. இடத்தைக் காலியாக்க, செய்தியிடலானது பழைய உரைச் செய்திகளை தானாகவே நீக்கும்."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"சேமிப்பிடம் குறைகிறது"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"உங்கள் சாதனத்தில் கூடுதல் இடம் கிடைக்கும் வரை செய்தியிடல் செய்திகளை அனுப்பாமல் அல்லது பெறாமல் இருக்கக் கூடும்."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS சேமிப்பகம் குறைவாக உள்ளது. நீங்கள் செய்திகளை நீக்க வேண்டியிருக்கலாம்."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"உங்கள் ஃபோன் எண்ணை உறுதிசெய்யவும்"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"இந்த ஒரு முறை செயல்பாடானது, செய்தியிடல் உங்கள் குழுச் செய்திகளைச் சரியாக வழங்குவதை உறுதிப்படுத்தும்."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ஃபோன் எண்"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"மீடியாவுடனான செய்திகளை நீக்கு"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> க்கு முந்தைய செய்திகளை நீக்கு"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> காலத்திற்கு முந்தைய செய்திகளைத் தானாகவே நீக்கு"</string>
-    <string name="ignore" msgid="7063392681130898793">"புறக்கணி"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"மீடியாவுடனான எல்லா செய்திகளையும் நீக்க வேண்டுமா?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> காலத்திற்கு முந்தைய செய்திகளை நீக்க வேண்டுமா?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> காலத்திற்கு முந்தைய செய்திகளை நீக்கி, தானாக நீக்கும் அம்சத்தை இயக்கவா?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> கூறியது"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"நீங்கள் கூறியது"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> இடமிருந்து செய்தி"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"செய்தி அனுப்பியுள்ளீர்கள்"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"அனுப்புகிறது…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"அனுப்பவில்லை. மீண்டும் முயல, தொடவும்."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"அனுப்பவில்லை. மீண்டும் முயல்கிறது…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"மீண்டும் அனுப்பு அல்லது நீக்கு"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"அவசரகால சேவைகளை அழைக்கவும். உங்கள் உரைச் செய்தியை தற்போது வழங்க முடியவில்லை."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"தோல்வி"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"இறக்க, புதிய MMS செய்தி உள்ளது"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"புதிய MMS செய்தி"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"இறக்க முடியவில்லை"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"மீண்டும் முயல, தொடவும்"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"இறக்க, தொடவும்"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"இறக்கு அல்லது நீக்கு"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"இறக்குகிறது…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"செய்தி காலாவதியானது அல்லது இல்லை"</string>
-    <string name="mms_info" msgid="3402311750134118165">"அளவு: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, காலாவதியாகும் தேதி: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"அனுப்ப முடியவில்லை. பெறுநர் விவரம் தவறாக உள்ளது."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"நெட்வொர்க்கில் சேவை இயக்கப்படவில்லை"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"நெட்வொர்க் சிக்கல் காரணமாக அனுப்ப முடியவில்லை"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"செய்தி காலாவதியானது அல்லது இல்லை"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(தலைப்பு இல்லை)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"அறியப்படாத அனுப்புநர்"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"டெலிவரி செய்யப்பட்டது"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> இலிருந்து <xliff:g id="SUBJECT">%1$s</xliff:g> செய்தியைப் பதிவிறக்க முடியவில்லை."</string>
-    <string name="low_memory" msgid="5300743415198486619">"குறைந்த நினைவகம் காரணமாகத் தரவுத்தளச் செயல்பாட்டை முடிக்க முடியவில்லை"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"செய்தி அனுப்பப்படவில்லை"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"செய்தியிடலில் சில செய்திகள் அனுப்பப்படவில்லை"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> உரையாடல்களில் <xliff:g id="MESSAGES_1">%d</xliff:g> செய்திகள் உள்ளன</item>
-      <item quantity="one">ஒரு உரையாடலில் <xliff:g id="MESSAGES_0">%d</xliff:g> செய்திகள் உள்ளன</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"செய்தி இறக்கப்படவில்லை"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"செய்தியிடலில் சில செய்திகள் இறக்கப்படவில்லை"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> உரையாடல்களில் <xliff:g id="MESSAGES_1">%d</xliff:g> செய்திகள் உள்ளன</item>
-      <item quantity="one">ஒரு உரையாடலில் <xliff:g id="MESSAGES_0">%d</xliff:g> செய்திகள் உள்ளன</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g>க்குச் செய்தி அனுப்பப்படவில்லை"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"அவசரகால சேவைகளை அழைக்கவும். <xliff:g id="NUMBER">%1$s</xliff:g>_1க்கு நீங்கள் அனுப்பிய செய்தியை தற்போது வழங்க முடியவில்லை."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> புதிய செய்திகள்</item>
-      <item quantity="one">புதிய செய்தி</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"தொடங்கு"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"கேமரா இல்லை"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"கேமரா இல்லை"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"வீடியோ படமெடுக்க முடியாது"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"மீடியாவைச் சேமிக்க முடியவில்லை"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"படமெடுக்க முடியாது"</string>
-    <string name="back" msgid="1477626055115561645">"முந்தையது"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"காப்பகப்படுத்தப்பட்டன"</string>
-    <string name="action_delete" msgid="4076795795307486019">"நீக்கு"</string>
-    <string name="action_archive" msgid="5437034800324083170">"காப்பிடு"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"காப்பிட வேண்டாம்"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"அறிவிப்புகளை முடக்கு"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"அறிவிப்புகளை இயக்கு"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"தொடர்பைச் சேர்"</string>
-    <string name="action_download" msgid="7786338136368564146">"இறக்கு"</string>
-    <string name="action_send" msgid="377635240181672039">"அனுப்பு"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"நீக்கு"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"இந்தச் செய்தியை நீக்கவா?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"இந்தச் செயலை பின்னர் செயல்தவிர்க்க முடியாது."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"நீக்கு"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">உரையாடல்களை நீக்கவா?</item>
-      <item quantity="one">உரையாடலை நீக்கவா?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"நீக்கு"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"ரத்துசெய்"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"பெறுநர்"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"பல படங்களைத் தேர்ந்தெடு"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"தேர்வை உறுதிப்படுத்து"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ஆடியோவைப் பதிவு செய்ய இயலவில்லை. மீண்டும் முயலவும்."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ஆடியோவை இயக்க முடியவில்லை. மீண்டும் முயலவும்."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ஆடியோவைச் சேமிக்க முடியவில்லை. மீண்டும் முயலவும்."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"தொட்டுப் பிடித்திருக்கவும்"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"படம்"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ஆடியோ கிளிப்"</string>
-    <string name="notification_video" msgid="4331423498662606204">"வீடியோ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"தொடர்பு கார்டு"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"இறக்கு"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS மூலம் பதிலளி"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS மூலம் பதிலளி"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"பதிலளி"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> பங்கேற்பாளர்கள்</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> பங்கேற்பாளர்</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"எனக்கு"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"தொடர்பு தடுக்கப்பட்டு காப்பகப்படுத்தப்பட்டது"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"தொடர்பு தடைநீக்கப்பட்டுள்ளது &amp; பட்டியலில் தோன்றும்"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> காப்பகப்படுத்தப்பட்டன"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> பட்டியலில் தோன்றும்"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"அறிவிப்புகள் முடக்கப்பட்டுள்ளன"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"அறிவிப்புகள் இயக்கப்பட்டுள்ளன"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"எல்லாம் முடிந்தது. மீண்டும் அனுப்பு என்பதைத் தொடவும்."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"செய்தியிடல் இயல்பு SMS பயன்பாடாக அமைக்கப்பட்டது."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">இணைப்புகளை நிராகரி</item>
-      <item quantity="one">இணைப்பை நிராகரி</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ஆடியோ இணைப்பு"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ஆடியோ இணைப்பை இயக்கவும்"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"இடைநிறுத்து"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"செய்தி அனுப்பியவர்: <xliff:g id="SENDER">%1$s</xliff:g> - <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g>க்கு அனுப்பிய செய்தி தோல்வி: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> அனுப்பிய செய்தி: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g>க்கு அனுப்பப்படாத செய்தி: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g>க்குச் செய்தி அனுப்புகிறது: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g>க்கு அனுப்பிய செய்தி தோல்வி: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g>க்கான செய்தி: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g>க்கு அனுப்பிய செய்தி தோல்வி: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> இடமிருந்து செய்தி: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g>க்கு அனுப்பப்படாத செய்தி: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g>க்குச் செய்தி அனுப்புகிறது: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g>க்கு அனுப்பிய செய்தி தோல்வி: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g>க்கான செய்தி: <xliff:g id="MESSAGE">%2$s</xliff:g>. நேரம்: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"செய்தி அனுப்புவதில் தோல்வி. மீண்டும் முயற்சிக்க, தொடவும்."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> உடனான உரையாடல்"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"தலைப்பை நீக்கு"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"வீடியோ எடு"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"ஸ்டில் படமெடு"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"படமெடு"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"வீடியோவைப் படமெடு"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"முழுத் திரை கேமராவிற்கு மாறு"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"முன் மற்றும் பின்பக்க கேமராவிற்கு இடையே மாறு"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"பதிவுசெய்வதை நிறுத்தி வீடியோவை இணைக்கவும்"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"வீடியோ பதிவு செய்வதை நிறுத்து"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"செய்தியிடல் படங்கள்"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> படங்கள், \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ஆல்பத்தில் சேமிக்கப்பட்டன</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> படம், \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" ஆல்பத்தில் சேமிக்கப்பட்டது</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> வீடியோக்கள், \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ஆல்பத்தில் சேமிக்கப்பட்டன</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> வீடியோ, \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" ஆல்பத்தில் சேமிக்கப்பட்டது</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> இணைப்புகள், \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ஆல்பத்தில் சேமிக்கப்பட்டன</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> இணைப்பு, \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" ஆல்பத்தில் சேமிக்கப்பட்டது</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> இணைப்புகள், \"இறக்கங்கள்\" என்பதில் சேமிக்கப்பட்டன</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> இணைப்பு, \"இறக்கங்கள்\" என்பதில் சேமிக்கப்பட்டது</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> இணைப்புகள் சேமிக்கப்பட்டன</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> இணைப்பு சேமிக்கப்பட்டது</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> இணைப்புகளைச் சேமிக்க முடியவில்லை</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> இணைப்பைச் சேமிக்க முடியவில்லை</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"சேமித்த MMS இணைப்பு"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"அமைப்பு"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"காப்பகப்படுத்தப்பட்டன"</string>
-    <string name="action_close" msgid="1840519376200478419">"மூடு"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"மேம்பட்டவை"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"பிழைத்திருத்து"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"அறிவிப்புகள்"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ஒலி"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"நிசப்தம்"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"அதிர்வு"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"தடுக்கப்பட்டது"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS டெலிவரி அறிக்கைகள்"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"நீங்கள் அனுப்பும் ஒவ்வொரு SMS க்கும் வழங்கல் அறிக்கையைக் கோரவும்"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"தானாக மீட்டெடு"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"தானாக MMS செய்திகளை மீட்டெடு"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"ரோமிங்கில் தானாக மீட்டெடு"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"ரோமிங்கின் போது தானாகவே MMSஐ மீட்டெடு"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"குழு மெசேஜ்"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"ஒரு செய்தியைப் பல பெறுநர்களுக்கு அனுப்புவதற்கு MMS ஐப் பயன்படுத்து"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"இயல்புநிலை SMS பயன்பாடு"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"இயல்புநிலை SMS பயன்பாடு"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"மொபைல் எண்"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"தெரியாதது"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"வெளிச்செல்லும் செய்தி ஒலிகள்"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS ஐ நகலெடு"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"பெற்ற SMS அசல் தரவை வெளிப்புறச் சேமிப்பகக் கோப்பில் நகலெடு"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS ஐ நகலெடு"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"பெற்ற MMS அசல் தரவை வெளிப்புறச் சேமிப்பகச் கோப்பில் நகலெடு"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"வயர்லெஸ் விழிப்பூட்டல்கள்"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"செய்தி விருப்பங்கள்"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"உரையை நகலெடு"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"விவரங்களைக் காட்டு"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"நீக்கு"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"முன்னனுப்பு"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"செய்தி விவரங்கள்"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"வகை: "</string>
-    <string name="text_message" msgid="7415419755252205721">"உரைச் செய்தி"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"மல்டிமீடியா செய்தி"</string>
-    <string name="from_label" msgid="1947831848146564875">"அனுப்புநர்: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"பெறுநர்: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"அனுப்பியது: "</string>
-    <string name="received_label" msgid="4442494712757995203">"பெறப்பட்டது: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"தலைப்பு: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"அளவு: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"முன்னுரிமை: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"உயர்தரம்"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"இயல்பு"</string>
-    <string name="priority_low" msgid="7398724779026801851">"குறைந்த தரம்"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"மறைவிலிருக்கும் அனுப்புநர் முகவரி"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"இணைப்புகளை ஏற்றும் போது செய்தியை அனுப்ப முடியாது."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"இணைப்பை ஏற்ற முடியவில்லை. மீண்டும் முயலவும்."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"நெட்வொர்க் தயாராக இல்லை. மீண்டும் முயற்சிக்கவும்."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"உரையை நீக்கு"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"உரை மற்றும் எண்களை உள்ளிடுவதன் இடையே மாறு"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"மேலும் பங்கேற்பாளர்களைச் சேர்"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"பங்கேற்பாளர்களை உறுதிப்படுத்தவும்"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"புதிய உரையாடலைத் தொடங்கு"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"இதனைத் தேர்வுசெய்"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"வீடியோவை இயக்கு"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"நபர்களும் விருப்பங்களும்"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"பிழைத்திருத்து"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"நபர்களும் விருப்பங்களும்"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"பொது"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"உரையாடலில் உள்ளவர்கள்"</string>
-    <string name="action_call" msgid="6596167921517350362">"அழை"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"செய்தி அனுப்பு"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"செய்தி அனுப்ப:&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">படங்களை அனுப்பு</item>
-      <item quantity="one">படத்தை அனுப்பு</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">ஆடியோக்களை அனுப்பு</item>
-      <item quantity="one">ஆடியோவை அனுப்பு</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">வீடியோக்களை அனுப்பு</item>
-      <item quantity="one">வீடியோவை அனுப்பு</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">தொடர்பு கார்டுகளை அனுப்பு</item>
-      <item quantity="one">தொடர்பு கார்டை அனுப்பு</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">இணைப்புகளை அனுப்பு</item>
-      <item quantity="one">இணைப்பை அனுப்பு</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> இணைப்புகள் அனுப்புவதற்குத் தயாராக உள்ளன</item>
-      <item quantity="one">ஒரு இணைப்பு அனுப்புவதற்குத் தயாராக உள்ளது</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"கருத்தை அனுப்பு"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Store இல் காட்டு"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"பதிப்புத் தகவல்"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"பதிப்பு %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"ஓப்பன் சோர்ஸ் உரிமங்கள்"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"அறிவிப்புகள்"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"இணைப்பிற்கான வரம்பை அடைந்துவிட்டீர்கள்"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"இணைப்பை ஏற்றுவதில் தோல்வி."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"தொடர்புகளில் சேர்க்கவா?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"தொடர்பைச் சேர்"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"தலைப்பு"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"தலைப்பு: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"தொடர்பு கார்டை ஏற்றுகிறது"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"தொடர்பு கார்டை ஏற்ற முடியவில்லை"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"தொடர்பு கார்டைக் காட்டு"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> தொடர்புகள்</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> தொடர்பு</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"தொடர்பு கார்டுகள்"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"பிறந்தநாள்"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"குறிப்புகள்"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"செய்தியை முன்னனுப்பு"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"பதிலளிக்கவும்"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS முடக்கப்பட்டது"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"அனுப்ப, இயல்பு SMS பயன்பாடாக செய்தியிடலை அமைக்கவும்"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"இயல்பு SMS பயன்பாடாக செய்தியிடலை அமைக்கவும்"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"மாற்று"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"செய்திகளைப் பெற, இயல்பு SMS பயன்பாடாக செய்தியிடலை அமைக்கவும்"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS செய்திகளை அனுப்புவதற்கு விருப்பமான சிம் எதுவும் தேர்ந்தெடுக்கப்படவில்லை"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"சாதன உரிமையாளர் இந்தப் பயன்பாட்டை அனுமதிக்கவில்லை."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"சரி"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"உரையாடலில் பலர் உள்ளனர்"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">தவறான தொடர்புகள்</item>
-      <item quantity="one">தவறான தொடர்பு</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"கேமரா படத்தை ஏற்ற முடியவில்லை"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"நீங்கள்: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"வரைவு"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"புதிய உரையாடலைத் தொடங்கியதும், அது இங்கு பட்டியலிடப்படும்"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"காப்பகப்படுத்திய உரையாடல்கள் இங்கே தோன்றும்"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"உரையாடல்களை ஏற்றுகிறது…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"படம்"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ஆடியோ கிளிப்"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"வீடியோ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"தொடர்பு கார்டு"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"செயல்தவிர்"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"மீண்டும் முயற்சிக்கவும்"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"புதிய செய்தி உருவாக்க, தொடர்பின் பெயர் அல்லது மொபைல் எண்ணை உள்ளிடவும்"</string>
-    <string name="action_block" msgid="9032076625645190136">"தடு"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g>ஐத் தடு"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> இன் தடுப்பை நீக்கு"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g>ஐத் தடைசெய்யவா?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"தொடர்ந்து இந்த எண்ணில் இருந்து செய்திகளைப் பெறுவீர்கள், அது குறித்து இனி உங்களுக்கு அறிவிக்கப்படாது. உரையாடல் காப்பகப்படுத்தப்படும்."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"தடுக்கப்பட்ட தொடர்புகள்"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"தடுப்பை நீக்கு"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"தடுக்கப்பட்ட தொடர்புகள்"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"ஆவண நூலகத்தில் இருந்து படத்தைத் தேர்வு செய்யவும்"</string>
-    <string name="sending_message" msgid="6363584950085384929">"செய்தி அனுப்பப்படுகிறது"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"செய்தி அனுப்பப்பட்டது"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"செல்லுலார் தரவு முடக்கப்பட்டுள்ளது. அமைப்புகளைச் சரிபார்க்கவும்."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"விமானப் பயன்முறையில் செய்திகளை அனுப்ப முடியாது"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"செய்தியை அனுப்ப முடியவில்லை"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"செய்தி பதிவிறக்கப்பட்டது"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"செல்லுலார் தரவு முடக்கப்பட்டுள்ளது. அமைப்புகளைச் சரிபார்க்கவும்."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"விமானப் பயன்முறையில் செய்திகளை இறக்க முடியாது"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"செய்தி இறக்கப்படவில்லை"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"பூஜ்ஜியம்"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"ஒன்று"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"இரண்டு"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"மூன்று"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"நான்கு"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"ஐந்து"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ஆறு"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"ஏழு"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"எட்டு"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"ஒன்பது"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> மூலம் செய்தியை அனுப்ப முடியவில்லை, பிழை <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"அறியப்படாத மொபைல் நிறுவனம் மூலம் செய்தியை அனுப்ப முடியவில்லை, பிழை <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"அனுப்பு: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"செய்தி அனுப்பப்படவில்லை: நெட்வொர்க்கில் சேவை செயல்படுத்தப்படவில்லை"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"செய்தி அனுப்பப்படவில்லை: தவறான இலக்கு முகவரி"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"செய்தி அனுப்பப்படவில்லை: தவறான செய்தி"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"செய்தி அனுப்பப்படவில்லை: ஆதரிக்கப்படாத உள்ளடக்கம்"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"செய்தி அனுப்பப்படவில்லை: ஆதரிக்கப்படாத செய்தி"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"செய்தி அனுப்பப்படவில்லை: மிகப் பெரியது"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"புதிய செய்தி"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"காட்டு"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"படம்"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"தகுந்த பயன்பாட்டைக் கண்டுபிடிக்க இயலவில்லை"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"பெறுநரை அகற்று"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"புதிய செய்தி"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"ரத்துசெய்"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"ஆக்சஸ் பாயிண்ட்டைத் திருத்து"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"அமைக்கப்படவில்லை"</string>
-    <string name="apn_name" msgid="1572691851070894985">"பெயர்"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS ப்ராக்ஸி"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS போர்ட்"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN வகை"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APNஐ நீக்கு"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"புதிய APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"சேமி"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"நிராகரி"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"பெயர் புலம் வெறுமையாக இருக்கக்கூடாது."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN வெறுமையாக இருக்கக்கூடாது."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC புலம் கண்டிப்பாக 3 இலக்கங்களில் இருக்க வேண்டும்."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC புலம் கண்டிப்பாக 2 அல்லது 3 இலக்கங்களில் இருக்க வேண்டும்."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"இயல்புநிலை APN அமைப்புகளை மீட்டமைக்கிறது."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"இயல்புநிலைக்கு மீட்டமை"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"இயல்புநிலை APN அமைப்புகளை மீட்டமைப்பது முடிந்தது."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"பெயரிடப்படாதது"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ஆக்சஸ் பாயிண்ட் நேம்கள்"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNகள்"</string>
-    <string name="menu_new" msgid="8286285392706532511">"புதிய APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"இவரால் ஆக்சஸ் பாயிண்ட் நேம் அமைப்புகளை மாற்ற முடியாது"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"கிளிப்போர்டுக்கு நகலெடுக்கவா?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"நகலெடு"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"பொது"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"மேம்பட்டவை"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"பொது அமைப்பு"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"மேம்பட்ட அமைப்பு"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" சிம்"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"எல்லா பெறுநர்களுக்கும் SMS செய்திகளைத் தனித்தனியாக அனுப்பவும். நீங்கள் மட்டுமே பதில்களைப் பெறுவீர்கள்"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"எல்லா பெறுநர்களுக்கும் MMS செய்திகளைத் தனித்தனியாக அனுப்பவும்"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"தெரியாத எண்"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"புதிய செய்தி"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"புதிய செய்தி."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"சிம் தேர்வி"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> தேர்ந்தெடுக்கப்பட்டது, சிம் தேர்வி"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"தலைப்பைத் திருத்து"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"சிம்மைத் தேர்ந்தெடுக்கவும் அல்லது தலைப்பைத் திருத்தவும்"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ஆடியோவைப் பதிவுசெய்ய, தொட்டுப் பிடித்திருக்கவும்"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"புதிய உரையாடலைத் தொடங்கு"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"செய்தியிடல்"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"செய்தியிடல் பட்டியல்"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"செய்தியிடல்"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"புதிய செய்தி"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"உரையாடல் பட்டியல்"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"உரையாடல்களை ஏற்றுகிறது"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"செய்திகளை ஏற்றுகிறது"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"மேலும் உரையாடல்களைக் காட்டு"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"கூடுதல் செய்திகளைக் காட்டு"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"உரையாடல் நீக்கப்பட்டது"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"உரையாடல் நீக்கப்பட்டது. வேறொரு செய்தியிடல் உரையாடலைக் காட்ட, தொடவும்"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"தடுக்கப்பட்டார்"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"தடுப்பு நீக்கப்பட்டார்"</string>
-    <string name="db_full" msgid="8459265782521418031">"சேமிப்பகம் குறைவாக உள்ளது. சில தரவை இழக்க நேரிடலாம்."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"இணைப்புகளைத் தேர்ந்தெடு"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"தேர்வை உறுதிப்படுத்து"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> தேர்ந்தெடுக்கப்பட்டன"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"ஒன்று அல்லது அதற்கு மேற்பட்ட இணைப்புகளை அகற்றிவிட்டு, முயற்சிக்கவும்."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"நீங்கள் செய்தியை அனுப்ப முயற்சிக்கலாம், ஆனால் ஒன்று அல்லது அதற்கு மேற்பட்ட இணைப்புகளை நீக்கும் வரை இது வழங்கப்படாமல் இருக்கலாம்."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"ஒரு செய்தியில் ஒரு வீடியோவை மட்டுமே நீங்கள் அனுப்ப முடியும். கூடுதல் வீடியோக்களை அகற்றிவிட்டு, மீண்டும் முயற்சிக்கவும்."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"செய்தியிடலால் இணைப்பை ஏற்ற முடியவில்லை."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"எப்படியேனும் அனுப்பு"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"உரையாடலைத் தொடங்க முடியவில்லை"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> தேர்ந்தெடுக்கப்பட்டது"</string>
-</resources>
diff --git a/res/values-te/arrays.xml b/res/values-te/arrays.xml
deleted file mode 100644
index c18a1b6..0000000
--- a/res/values-te/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"విషయం లేదు"</item>
-    <item msgid="272485471009191934">"విషయం లేదు"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"అవును"</item>
-    <item msgid="6049132459802288033">"వద్దు"</item>
-    <item msgid="3084376867445867895">"సరే"</item>
-    <item msgid="3155097332660174689">"హెహే"</item>
-    <item msgid="2611328818571146775">"ధన్యవాదాలు"</item>
-    <item msgid="4881335087096496747">"నేను అంగీకరిస్తున్నాను"</item>
-    <item msgid="2422296858597420738">"బాగుంది"</item>
-    <item msgid="4805581752819452687">"నేను ఆ పని మీదే ఉన్నాను"</item>
-    <item msgid="4746700499431366214">"సరే, నేను మీతో తర్వాత మాట్లాడుతాను"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
deleted file mode 100644
index f2dabb2..0000000
--- a/res/values-te/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"మెసేజింగ్"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"మెసేజింగ్"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"సంభాషణను ఎంచుకోండి"</string>
-    <string name="action_settings" msgid="1329008122345201684">"సెట్టింగ్‌లు"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"సందేశం పంపు"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"జోడింపును జోడించండి"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"సహాయం"</string>
-    <string name="welcome" msgid="2857560951820802321">"స్వాగతం"</string>
-    <string name="skip" msgid="7238879696319945853">"దాటవేయి"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"తదుపరి &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"తదుపరి"</string>
-    <string name="exit" msgid="1905187380359981199">"నిష్క్రమించండి"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"సెట్టింగ్‌లు &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"సెట్టింగ్‌లు"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"సందేశ సేవకు SMS, ఫోన్ మరియు పరిచయాల ప్రాప్యత అనుమతి ఇవ్వడం అవసరం."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"మీరు సెట్టింగ్‌లు &gt; అనువర్తనాలు &gt; సందేశ సేవ &gt; అనుమతులులో అనుమతులను మార్చవచ్చు."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"మీరు సెట్టింగ్‌లు, అనువర్తనాలు, సందేశ సేవ, అనుమతులులో అనుమతులను మార్చవచ్చు."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"తరచుగా సంప్రదించినవి"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"అన్ని పరిచయాలు"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g>కి పంపండి"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"చిత్రాలను లేదా వీడియోను సంగ్రహించు"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"ఈ పరికరం నుండి చిత్రాలను ఎంచుకోండి"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"ఆడియోను రికార్డ్ చేయి"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"ఫోటోను ఎంచుకోండి"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"మీడియా ఎంచుకోబడింది."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"మీడియా ఎంపిక తీసివేయబడింది."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> ఎంచుకోబడింది"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"చిత్రం <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"చిత్రం"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"ఆడియోను రికార్డ్ చేయి"</string>
-    <string name="action_share" msgid="2143483844803153871">"భాగస్వామ్యం చేయి"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ఇప్పుడే"</string>
-    <string name="posted_now" msgid="867560789350406701">"ఇప్పుడు"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> నిమి</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> నిమి</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> గంటలు</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> గంట</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> రోజులు</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> రోజు</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> వారాలు</item>
-      <item quantity="one">ఒక వారం</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> నెలలు</item>
-      <item quantity="one">ఒక నెల</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> సంవత్సరాలు</item>
-      <item quantity="one">ఒక సంవత్సరం</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"తరగతి 0 సందేశం"</string>
-    <string name="save" msgid="5081141452059463572">"సేవ్ చేయి"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"పరికరంలో ఖాళీ స్థలం తక్కువగా ఉంది. స్థలం ఖాళీ చేయడానికి సందేశ సేవ స్వయంచాలకంగా పాత సందేశాలను తొలగిస్తుంది."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"నిల్వ స్థలం అయిపోతోంది"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"మీ పరికరంలో మరింత ఖాళీ స్థలం లభించే వరకు సందేశ సేవ సందేశాలను పంపలేకపోవచ్చు లేదా స్వీకరించలేకపోవచ్చు."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS నిల్వ తక్కువగా ఉంది. మీరు సందేశాలను తొలగించాల్సి రావచ్చు."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"మీ ఫోన్ నంబర్‌ను నిర్ధారించండి"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"ఈ ఒక పర్యాయ దశ సందేశ సేవ మీ సమూహ సందేశాలను సరిగ్గా బట్వాడా చేస్తుందని నిర్ధారిస్తుంది."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"ఫోన్ నంబర్"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"మీడియాలోని అన్ని సందేశాలను తొలగించండి"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> కంటే మునుపు ఉన్న సందేశాలను తొలగించండి"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> కంటే పాత సందేశాలను స్వయంచాలకంగా తొలగించు"</string>
-    <string name="ignore" msgid="7063392681130898793">"విస్మరించు"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"మీడియా ఉన్న అన్ని సందేశాలను తొలగించాలా?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> కంటే పాత సందేశాలను తొలగించాలా?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> కంటే పాత సందేశాలను తొలగించి, స్వయంచాలక తొలగింపుని ఆన్ చేయాలా?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> చెప్పారు"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"మీరు చెప్పారు"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> నుండి సందేశం"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"మీరు సందేశాన్ని పంపారు"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"పంపుతోంది..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"పంపబడలేదు. మళ్లీ ప్రయత్నించడానికి తాకండి."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"పంపబడలేదు. మళ్లీ ప్రయత్నిస్తోంది..."</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"మళ్లీ పంపండి లేదా తొలగించండి"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"దయచేసి అత్యవసర సేవలకు వాయిస్ కాల్ చేయండి. మీ వచన సందేశాన్ని ప్రస్తుతం బట్వాడా చేయడం సాధ్యపడలేదు."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"విఫలమైంది"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"డౌన్‌లోడ్ చేయడానికి కొత్త MMS సందేశం"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"కొత్త MMS సందేశం"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"డౌన్‌లోడ్ చేయడం సాధ్యపడలేదు"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"మళ్లీ ప్రయత్నించడానికి తాకండి"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"డౌన్‌లోడ్ చేయడానికి తాకండి"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"డౌన్‌లోడ్ చేయండి లేదా తొలగించండి"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"డౌన్‌లోడ్ చేస్తోంది…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"సందేశం గడువు ముగిసింది లేదా అందుబాటులో లేదు"</string>
-    <string name="mms_info" msgid="3402311750134118165">"పరిమాణం: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, గడువు: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"పంపడం సాధ్యపడదు. చెల్లని స్వీకర్త."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"నెట్‌వర్క్‌లో సేవ సక్రియం చేయబడలేదు"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"నెట్‌వర్క్ సమస్య కారణంగా పంపడం సాధ్యపడలేదు"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"సందేశం గడువు ముగిసింది లేదా అందుబాటులో లేదు"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(విషయం లేదు)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"పంపినవారు తెలియదు"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"బట్వాడా చేయబడింది"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> నుండి <xliff:g id="SUBJECT">%1$s</xliff:g> సందేశాన్ని డౌన్‌లోడ్ చేయడం సాధ్యపడలేదు."</string>
-    <string name="low_memory" msgid="5300743415198486619">"మెమరీ తక్కువగా ఉన్న కారణంగా డేటాబేస్ నిర్వహణను పూర్తి చేయడం సాధ్యపడలేదు"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"సందేశం పంపబడలేదు"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"సందేశ సేవలో కొన్ని సందేశాలు పంపబడలేదు"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> సంభాషణల్లో <xliff:g id="MESSAGES_1">%d</xliff:g> సందేశాలు</item>
-      <item quantity="one">ఒక సంభాషణలో <xliff:g id="MESSAGES_0">%d</xliff:g> సందేశాలు</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"సందేశం డౌన్‌లోడ్ కాలేదు"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"సందేశ సేవలో కొన్ని సందేశాలు డౌన్‌లోడ్ కాలేదు"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> సంభాషణల్లో <xliff:g id="MESSAGES_1">%d</xliff:g> సందేశాలు</item>
-      <item quantity="one">ఒక సంభాషణలో <xliff:g id="MESSAGES_0">%d</xliff:g> సందేశాలు</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g>కి సందేశం పంపబడలేదు"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"దయచేసి అత్యవసర సేవలకు వాయిస్ కాల్ చేయండి. మీరు <xliff:g id="NUMBER">%1$s</xliff:g>కి పంపిన వచన సందేశాన్ని ప్రస్తుతం బట్వాడా చేయడం సాధ్యపడలేదు."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> కొత్త సందేశాలు</item>
-      <item quantity="one">కొత్త సందేశం</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"ప్రారంభించు"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"కెమెరా అందుబాటులో లేదు"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"కెమెరా అందుబాటులో లేదు"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"వీడియో సంగ్రహణ అందుబాటులో లేదు"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"మీడియాను సేవ్ చేయడం సాధ్యపడదు"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"చిత్రం తీయడం సాధ్యపడలేదు"</string>
-    <string name="back" msgid="1477626055115561645">"వెనుకకు"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"ఆర్కైవ్ చేయబడినవి"</string>
-    <string name="action_delete" msgid="4076795795307486019">"తొలగించు"</string>
-    <string name="action_archive" msgid="5437034800324083170">"ఆర్కైవ్ చేయి"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"ఆర్కైవ్ నుండి తీసివేయి"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"నోటిఫికేషన్‌లను ఆఫ్ చేయి"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"నోటిఫికేషన్‌లను ఆన్ చేయి"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"పరిచయాన్ని జోడించు"</string>
-    <string name="action_download" msgid="7786338136368564146">"డౌన్‌లోడ్ చేయి"</string>
-    <string name="action_send" msgid="377635240181672039">"పంపు"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"తొలగించు"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"ఈ సందేశాన్ని తొలగించాలా?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"ఈ చర్య రద్దు చేయబడదు."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"తొలగించు"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">ఈ సంభాషణలను తొలగించాలా?</item>
-      <item quantity="one">ఈ సంభాషణను తొలగించాలా?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"తొలగించు"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"రద్దు చేయి"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"వీరికి"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"బహుళ చిత్రాలను ఎంచుకోండి"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"ఎంపికను నిర్ధారించు"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ఆడియోను రికార్డ్ చేయడం సాధ్యపడదు. మళ్లీ ప్రయత్నించండి."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ఆడియోను ప్లే చేయడం సాధ్యపడదు. మళ్లీ ప్రయత్నించండి."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ఆడియోను సేవ్ చేయడం సాధ్యపడలేదు. మళ్లీ ప్రయత్నించండి."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"తాకి ఉంచండి"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"చిత్రం"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"ఆడియో క్లిప్"</string>
-    <string name="notification_video" msgid="4331423498662606204">"వీడియో"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"పరిచయ కార్డు"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"డౌన్‌లోడ్ చేయి"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS ద్వారా ప్రత్యుత్తరం ఇవ్వండి"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMSలో ప్రత్యు."</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"ప్రత్యుత్తరం పంపండి"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> మంది పాల్గొన్నారు</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> పాల్గొన్నారు</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"నేను"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"పరిచయం బ్లాక్ చేయబడింది &amp; ఆర్కైవ్ చేయబడింది"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"పరిచయం అన్‌బ్లాక్ చేయబడింది &amp; అన్ఆర్కైవ్ చేయబడింది"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> ఆర్కైవ్ చేయబడింది/ఆర్కైవ్ చేయబడ్డాయి"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> ఆర్కైవ్ నుండి తీసివేయబడింది/ఆర్కైవ్ నుండి తీసివేయబడ్డాయి"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"నోటిఫికేషన్‌లు ఆఫ్ చేయబడ్డాయి"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"నోటిఫికేషన్‌లు ఆన్ చేయబడ్డాయి"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"అంతా సెట్ చేశారు. మళ్లీ పంపు తాకండి."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"సందేశ సేవ డిఫాల్ట్ SMS అనువర్తనంగా విజయవంతంగా సెట్ చేయబడింది."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">జోడింపులను విస్మరించండి</item>
-      <item quantity="one">జోడింపును విస్మరించండి</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ఆడియో జోడింపు"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"ఆడియో జోడింపుని ప్లే చేయండి"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"పాజ్ చేయి"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> నుండి సందేశం: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> నుండి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం పంపడంలో విఫలమైంది. సమయం: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> నుండి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం వచ్చింది. సమయం: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g>కి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం పంపబడలేదు. సమయం: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g>కి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం పంపబడుతోంది. సమయం: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g>కి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం పంపడంలో విఫలమైంది. సమయం: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g>కి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం పంపబడింది. సమయం: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> నుండి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం పంపడంలో విఫలమైంది. సమయం: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> నుండి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం వచ్చింది. సమయం: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g>కి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం పంపబడలేదు. సమయం: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g>కి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం పంపబడుతోంది. సమయం: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g>కి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం పంపడంలో విఫలమైంది. సమయం: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g>కి <xliff:g id="MESSAGE">%2$s</xliff:g> సందేశం పంపబడింది. సమయం: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"సందేశం పంపడం విఫలమైంది. మళ్లీ ప్రయత్నించడానికి తాకండి."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g>తో సంభాషణ"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"విషయాన్ని తొలగించండి"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"వీడియోను క్యాప్చర్ చేయండి"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"నిలకడగా ఉన్న చిత్రాన్ని క్యాప్చర్ చేయండి"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"చిత్రం తీయండి"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"వీడియో రికార్డింగ్‌ను ప్రారంభించండి"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"కెమెరాను పూర్తి స్క్రీన్‌కి మార్చండి"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"ముందు మరియు వెనుక కెమెరా మోడ్‌ల మధ్య మారండి"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"రికార్డింగ్‌ను ఆపివేసి, వీడియోను చేర్చండి"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"వీడియో రికార్డ్ చేయడాన్ని ఆపివేయండి"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"సందేశ సేవ ఫోటోలు"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ఫోటోలు \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ఆల్బమ్‌కి సేవ్ చేయబడ్డాయి</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ఫోటో \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" ఆల్బమ్‌కి సేవ్ చేయబడింది</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> వీడియోలు \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ఆల్బమ్‌కి సేవ్ చేయబడ్డాయి</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> వీడియో \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" ఆల్బమ్‌కి సేవ్ చేయబడింది</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> జోడింపులు \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" ఆల్బమ్‌కి సేవ్ చేయబడ్డాయి</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> జోడింపు \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" ఆల్బమ్‌కి సేవ్ చేయబడింది</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> జోడింపులు \"డౌన్‌లోడ్‌లు\"కి సేవ్ చేయబడ్డాయి</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> జోడింపు \"డౌన్‌లోడ్‌లు\"కి సేవ్ చేయబడింది</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> జోడింపులు సేవ్ చేయబడ్డాయి</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> జోడింపు సేవ్ చేయబడింది</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> జోడింపులను సేవ్ చేయలేకపోయింది</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> జోడింపును సేవ్ చేయలేకపోయింది</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS జోడింపు సేవ్ చేయబడింది"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"సెట్టింగ్‌లు"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"ఆర్కైవ్ చేయబడింది"</string>
-    <string name="action_close" msgid="1840519376200478419">"మూసివేయి"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"అధునాతనం"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"డీబగ్"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"నోటిఫికేషన్‌లు"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"ధ్వని"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"నిశ్శబ్దం"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"వైబ్రేట్"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"బ్లాక్ చేయబడింది"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS బట్వాడా నివేదికలు"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"మీరు పంపే ప్రతి SMS కోసం బట్వాడా నివేదికను అభ్యర్థించండి"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"స్వయంచాలకంగా తిరిగి పొందడం"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS సందేశాలను స్వయంచాలకంగా పునరుద్ధరించండి"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"రోమింగ్‌లో ఉన్నప్పుడు స్వీయ-పునరుద్ధరణ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"రోమింగ్‌లో ఉన్నప్పుడు MMSని స్వయంచాలకంగా తిరిగి పొందుతుంది"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"సమూహ సందేశాలు"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"ఒక సందేశాన్ని బహుళ స్వీకర్తలకు పంపాల్సినప్పుడు MMSను ఉపయోగించండి"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"డిఫాల్ట్ SMS అనువర్తనం"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"డిఫాల్ట్ SMS అనువర్తనం"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"మీ ఫోన్ నంబర్"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"తెలియదు"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"అవుట్‌గోయింగ్ సందేశ ధ్వనులు"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMSను డంప్ చేయండి"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"స్వీకరించబడిన SMS ప్రాసెస్ చేయబడని డేటాను బాహ్య నిల్వ ఫైల్‌లోకి డంప్ చేయండి"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMSను డంప్ చేయండి"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"స్వీకరించబడిన MMS ప్రాసెస్ చేయబడని డేటాను బాహ్య నిల్వ ఫైల్‌లోకి డంప్ చేయండి"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"వైర్‌లెస్ హెచ్చరికలు"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"సందేశ ఎంపికలు"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"వచనాన్ని కాపీ చేయి"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"వివరాలను వీక్షించండి"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"తొలగించు"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"ఫార్వార్డ్ చేయండి"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"సందేశ వివరాలు"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"రకం: "</string>
-    <string name="text_message" msgid="7415419755252205721">"వచన సందేశం"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"మల్టీమీడియా సందేశం"</string>
-    <string name="from_label" msgid="1947831848146564875">"వీరి నుండి: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"వీరికి: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"పంపినది: "</string>
-    <string name="received_label" msgid="4442494712757995203">"స్వీకరించినది: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"విషయం: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"పరిమాణం: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"ప్రాధాన్యత: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"అధికం"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"సాధారణం"</string>
-    <string name="priority_low" msgid="7398724779026801851">"తక్కువ"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"లేఖరి చిరునామా దాచబడింది"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"జోడింపులు లోడ్ అవుతున్నప్పుడు సందేశాన్ని పంపలేరు."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"జోడింపుని లోడ్ చేయడం సాధ్యపడదు. మళ్లీ ప్రయత్నించండి."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"నెట్‌వర్క్ సిద్ధంగా లేదు. మళ్లీ ప్రయత్నించండి."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"వచనాన్ని తొలగించు"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"వచనం మరియు సంఖ్యలను నమోదు చేయడానికి వాటిని అటుఇటు మార్చు"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"మరింతమంది పాల్గొనేవారిని జోడించు"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"పాల్గొనేవారిని నిర్ధారించండి"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"కొత్త సంభాషణను ప్రారంభించండి"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"ఈ అంశాన్ని ఎంచుకోండి"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"వీడియోను ప్లే చేయండి"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"వ్యక్తులు &amp; ఎంపికలు"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"డీబగ్"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"వ్యక్తులు &amp; ఎంపికలు"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"సాధారణం"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"ఈ సంభాషణలో పాల్గొన్న వ్యక్తులు"</string>
-    <string name="action_call" msgid="6596167921517350362">"కాల్ చేయి"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"సందేశాన్ని పంపండి"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"సందేశాన్ని &lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g> నుండి&lt;/small&gt;&lt;br/&gt;పంపు"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">ఫోటోలను పంపండి</item>
-      <item quantity="one">ఫోటోను పంపండి</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">ఆడియోలను పంపండి</item>
-      <item quantity="one">ఆడియోను పంపండి</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">వీడియోలను పంపండి</item>
-      <item quantity="one">వీడియోను పంపండి</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">పరిచయ కార్డ్‌లను పంపండి</item>
-      <item quantity="one">పరిచయ కార్డ్‌ను పంపండి</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">జోడింపులను పంపండి</item>
-      <item quantity="one">జోడింపుని పంపండి</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> జోడింపులు పంపడానికి సిద్ధంగా ఉన్నాయి</item>
-      <item quantity="one">ఒక జోడింపు పంపడానికి సిద్ధంగా ఉంది</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"అభిప్రాయం పంపండి"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Storeలో వీక్షించండి"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"సంస్కరణ సమాచారం"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"సంస్కరణ %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"ఓపెన్ సోర్స్ లైసెన్స్‌లు"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"నోటిఫికేషన్‌లు"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"జోడింపు పరిమితిని చేరుకున్నారు"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"జోడింపుని లోడ్ చేయడంలో విఫలమైంది."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"పరిచయాలకు జోడించాలా?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"పరిచయాన్ని జోడించు"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"విషయం"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"విషయం: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"పరిచయ కార్డ్‌ను లోడ్ చేస్తోంది"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"పరిచయ కార్డ్‌ను లోడ్ చేయడం సాధ్యపడలేదు"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"పరిచయ కార్డ్‌ను వీక్షించండి"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> పరిచయాలు</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> పరిచయం</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"పరిచయ కార్డ్‌లు"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"పుట్టినరోజు"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"గమనికలు"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"సందేశాన్ని ఫార్వార్డ్ చేయండి"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"ప్రత్యుత్తరం"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS నిలిపివేయబడింది"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"పంపడానికి, సందేశ సేవను డిఫాల్ట్ SMS అనువర్తనంగా సెట్ చేయండి"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"సందేశ సేవను డిఫాల్ట్ SMS అనువర్తనంగా సెట్ చేయండి"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"మార్చు"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"సందేశాలు స్వీకరించడానికి, సందేశ సేవను డిఫాల్ట్ SMS అనువర్తనంగా సెట్ చేయండి"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS సందేశాలు పంపడానికి ప్రాధాన్య SIM ఏదీ ఎంచుకోలేదు"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"ఈ అనువర్తనాన్ని పరికరం యజమాని అనుమతించలేదు."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"సరే"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"సంభాషణలో చాలా ఎక్కువ మంది పాల్గొన్నారు"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">పరిచయాలు చెల్లవు</item>
-      <item quantity="one">పరిచయం చెల్లదు</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"కెమెరా చిత్రాన్ని లోడ్ చేయడం సాధ్యపడలేదు"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"మీరు: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"చిత్తుప్రతి"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"మీరు కొత్త సంభాషణను ప్రారంభిస్తే, అది ఇక్కడ జాబితా కావడం మీకు కనిపిస్తుంది"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"ఆర్కైవ్ చేసిన సంభాషణలు ఇక్కడ కనిపిస్తాయి"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"సంభాషణలను లోడ్ చేస్తోంది…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"చిత్రం"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"ఆడియో క్లిప్"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"వీడియో"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"పరిచయ కార్డ్"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"చర్య రద్దు చేయి"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"మళ్లీ ప్రయత్నించు"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"కొత్త సందేశాన్ని ప్రారంభించడానికి పరిచయం పేరు లేదా ఫోన్ నంబర్‌ని నమోదు చేయండి"</string>
-    <string name="action_block" msgid="9032076625645190136">"బ్లాక్ చేయి"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g>ని బ్లాక్ చేయి"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g>ని అన్‌బ్లాక్ చేయి"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g>ని బ్లాక్ చేయాలా?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"మీరు ఈ నంబర్ నుండి సందేశాలను స్వీకరించడం కొనసాగుతుంది కానీ ఇకపై వాటి గురించి తెలియజేయబడదు. ఈ సంభాషణ ఆర్కైవ్ చేయబడుతుంది."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"బ్లాక్ చేయబడిన పరిచయాలు"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"అన్‌బ్లాక్ చేయి"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"బ్లాక్ చేయబడిన పరిచయాలు"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"పత్రం లైబ్రరీ నుండి చిత్రాన్ని ఎంచుకోండి"</string>
-    <string name="sending_message" msgid="6363584950085384929">"సందేశం పంపబడుతోంది"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"సందేశం పంపబడింది"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"సెల్యులార్ డేటా ఆఫ్ చేయబడింది. మీ సెట్టింగ్‌లను తనిఖీ చేయండి."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"ఎయిర్‌ప్లైన్ మోడ్‌లో సందేశాలు పంపడం సాధ్యపడదు"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"సందేశం పంపడం సాధ్యపడలేదు"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"సందేశం డౌన్‌లోడ్ చేయబడింది"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"సెల్యులార్ డేటా ఆఫ్ చేయబడింది. మీ సెట్టింగ్‌లను తనిఖీ చేయండి."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"ఎయిర్‌ప్లైన్ మోడ్‌లో సందేశాలను డౌన్‌లోడ్ చేయడం సాధ్యపడదు"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"సందేశాన్ని డౌన్‌లోడ్ చేయడం సాధ్యపడలేదు"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"సున్నా"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"ఒకటి"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"రెండు"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"మూడు"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"నాలుగు"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"ఐదు"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"ఆరు"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"ఏడు"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"ఎనిమిది"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"తొమ్మిది"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g>తో సందేశం పంపలేరు, దోషం <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"తెలియని క్యారియర్‌తో సందేశం పంపలేరు, లోపం <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"ఫార్వా.: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"సందేశం పంపబడలేదు: నెట్‌వర్క్‌లో సేవ సక్రియం కాలేదు"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"సందేశం పంపబడలేదు: గమ్యస్థాన చిరునామా చెల్లదు"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"సందేశం పంపబడలేదు: సందేశం చెల్లదు"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"సందేశం పంపబడలేదు: మద్దతు లేని కంటెంట్"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"సందేశం పంపబడలేదు: మద్దతు లేని సందేశం"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"సందేశం పంపబడలేదు: చాలా పెద్దది"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"కొత్త సందేశం"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"వీక్షించండి"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"చిత్రం"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"సముచిత అనువర్తనాన్ని కనుగొనడం సాధ్యపడలేదు"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"స్వీకర్తను తీసివేయండి"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"కొత్త సందేశం"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"రద్దు చేయి"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"ప్రాప్యత స్థానాన్ని సవరించు"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"సెట్ చేయలేదు"</string>
-    <string name="apn_name" msgid="1572691851070894985">"పేరు"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS ప్రాక్సీ"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS పోర్ట్"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN రకం"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APNను తొలగించు"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"కొత్త APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"సేవ్ చేయి"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"విస్మరించు"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"పేరు ఫీల్డ్ ఖాళీగా ఉండకూడదు."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN ఖాళీగా ఉండకూడదు."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC ఫీల్డ్‌లో తప్పనిసరిగా 3 అంకెలు ఉండాలి."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC ఫీల్డ్‌లో తప్పనిసరిగా 2 లేదా 3 అంకెలు ఉండాలి."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"డిఫాల్ట్ APN సెట్టింగ్‌లను పునరుద్ధరిస్తోంది."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"డిఫాల్ట్‌కు రీసెట్ చేయి"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"డిఫాల్ట్ APN సెట్టింగ్‌లను రీసెట్ చేయడం పూర్తయింది."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"శీర్షిక లేదు"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ప్రాప్యత స్థానం పేర్లు"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNలు"</string>
-    <string name="menu_new" msgid="8286285392706532511">"కొత్త APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"ప్రాప్యత స్థానం పేరు సెట్టింగ్‌లు ఈ వినియోగదారుకి అందుబాటులో లేవు"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"క్లిప్‌బోర్డ్‌కు కాపీ చేయాలా?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"కాపీ చేయి"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g>కి"</string>
-    <string name="general_settings" msgid="5409336577057897710">"సాధారణం"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"అధునాతనం"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"సాధారణ సెట్టింగ్‌లు"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"అధునాతన సెట్టింగ్‌లు"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"స్వీకర్తలందరికీ వేర్వేరుగా SMS సందేశాలను పంపండి. ఏవైనా ప్రత్యుత్తరాలను మీరు మాత్రమే పొందుతారు"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"స్వీకర్తలందరికీ ఒకే MMS పంపండి"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"తెలియని నంబర్"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"కొత్త సందేశం"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"కొత్త సందేశం."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM ఎంపిక సాధనం"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> ఎంచుకోబడింది, SIM ఎంపిక"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"విషయాన్ని సవరించు"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM ఎంచుకోండి లేదా విషయాన్ని సవరించండి"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"ఆడియోను రికార్డ్ చేయడానికి తాకి, అలాగే ఉంచండి"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"కొత్త సంభాషణను ప్రారంభించండి"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"సందేశ సేవ"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"సందేశ సేవ జాబితా"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"సందేశ సేవ"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"కొత్త సందేశం"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"సంభాషణ జాబితా"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"సంభాషణలను లోడ్ చేస్తోంది"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"సందేశాలు లోడ్ అవుతున్నాయి"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"మరిన్ని సంభాషణలను వీక్షించండి"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"మరిన్ని సందేశాలను వీక్షించండి"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"సంభాషణ తొలగించబడింది"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"సంభాషణ తొలగించబడింది. విభిన్న సందేశ సేవ సంభాషణను చూపడానికి తాకండి"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"బ్లాక్ చేయబడ్డారు"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"అన్‌బ్లాక్ చేయబడ్డారు"</string>
-    <string name="db_full" msgid="8459265782521418031">"నిల్వ స్థలంలో ఖాళీ తక్కువగా ఉంది. కొంత డేటా కోల్పోవచ్చు."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"జోడింపులను ఎంచుకోండి"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"ఎంపికను నిర్ధారించు"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ఎంచుకోబడింది/ఎంచుకోబడ్డాయి"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"దయచేసి ఒకటి లేదా అంతకంటే ఎక్కువ జోడింపులను తీసివేసి, మళ్లీ ప్రయత్నించండి."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"మీరు మీ సందేశం పంపడాన్ని ప్రయత్నించవచ్చు, కానీ ఒకటి లేదా అంతకంటే ఎక్కువ జోడింపులను తీసివేస్తే మినహా అది బట్వాడా చేయబడదు."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"మీరు ఒక సందేశానికి ఒక వీడియోను మాత్రమే పంపగలరు. దయచేసి అదనపు వీడియోలను తీసివేసి, ఆపై మళ్లీ ప్రయత్నించండి."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"సందేశ సేవ జోడింపును లోడ్ చేయడంలో విఫలమైంది."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"ఏదేమైనా పంపు"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"సంభాషణను ప్రారంభించలేరు"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> ఎంచుకోబడింది"</string>
-</resources>
diff --git a/res/values-th/arrays.xml b/res/values-th/arrays.xml
deleted file mode 100644
index 749516e..0000000
--- a/res/values-th/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"ไม่มีเรื่อง"</item>
-    <item msgid="272485471009191934">"ไม่มีชื่อเรื่อง"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"ใช่"</item>
-    <item msgid="6049132459802288033">"ไม่ใช่"</item>
-    <item msgid="3084376867445867895">"ตกลง"</item>
-    <item msgid="3155097332660174689">"อิอิ"</item>
-    <item msgid="2611328818571146775">"ขอบคุณ"</item>
-    <item msgid="4881335087096496747">"ฉันเห็นด้วย"</item>
-    <item msgid="2422296858597420738">"เยี่ยมเลย"</item>
-    <item msgid="4805581752819452687">"เดินทางอยู่"</item>
-    <item msgid="4746700499431366214">"ตกลง ฉันจะติดต่อกลับมาในภายหลัง"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
deleted file mode 100644
index 3768ca8..0000000
--- a/res/values-th/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"การรับส่งข้อความ"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"การรับส่งข้อความ"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"เลือกการสนทนา"</string>
-    <string name="action_settings" msgid="1329008122345201684">"การตั้งค่า"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"ส่งข้อความ"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"เพิ่มไฟล์แนบ"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"ความช่วยเหลือ"</string>
-    <string name="welcome" msgid="2857560951820802321">"ยินดีต้อนรับ"</string>
-    <string name="skip" msgid="7238879696319945853">"ข้าม"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"ถัดไป &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"ถัดไป"</string>
-    <string name="exit" msgid="1905187380359981199">"ออก"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"การตั้งค่า &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"การตั้งค่า"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"การรับส่งข้อความต้องใช้สิทธิ์เข้าถึง SMS, โทรศัพท์ และรายชื่อติดต่อ"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"คุณสามารถเปลี่ยนแปลงสิทธิ์ได้ในการตั้งค่า &gt; แอป &gt; การรับส่งข้อความ &gt; สิทธิ์"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"คุณสามารถเปลี่ยนแปลงสิทธิ์ได้ในการตั้งค่า แอป การรับส่งข้อความ และสิทธิ์"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"ผู้ที่ติดต่อบ่อย"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"รายชื่อติดต่อทั้งหมด"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"ส่งไปยัง <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"จับภาพหรือวิดีโอ"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"เลือกรูปภาพจากอุปกรณ์นี้"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"บันทึกเสียง"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"เลือกรูปภาพ"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"เลือกสื่อแล้ว"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"ไม่มีการเลือกสื่อ"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"เลือกไว้ <xliff:g id="COUNT">%d</xliff:g> รายการ"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"ภาพเมื่อวันที่ <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"ภาพ"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"บันทึกเสียง"</string>
-    <string name="action_share" msgid="2143483844803153871">"แชร์"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"เดี๋ยวนี้เอง"</string>
-    <string name="posted_now" msgid="867560789350406701">"ตอนนี้"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> นาที</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> นาที</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ชั่วโมง</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ชั่วโมง</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> วัน</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> วัน</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> สัปดาห์</item>
-      <item quantity="one">1 สัปดาห์</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> เดือน</item>
-      <item quantity="one">1 เดือน</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ปี</item>
-      <item quantity="one">1 ปี</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"ข้อความคลาส 0"</string>
-    <string name="save" msgid="5081141452059463572">"บันทึก"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"อุปกรณ์มีพื้นที่เหลือน้อย การรับส่งข้อความจะลบข้อความเก่าโดยอัตโนมัติเพื่อเพิ่มพื้นที่ว่าง"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"พื้นที่จัดเก็บเหลือน้อย"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"การรับส่งข้อความอาจไม่ส่งหรือรับข้อความจนกว่าจะมีพื้นที่เพิ่มมากขึ้นบนอุปกรณ์"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"พื้นที่จัดเก็บ SMS เหลือน้อย คุณอาจต้องลบข้อความ"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"ยืนยันหมายเลขโทรศัพท์"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"ขั้นตอนที่ทำเพียงครั้งเดียวนี้จะช่วยให้การรับส่งข้อความส่งข้อความของกลุ่มได้อย่างถูกต้อง"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"หมายเลขโทรศัพท์"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"ลบข้อความทั้งหมดที่มีสื่อ"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"ลบข้อความที่เก่ากว่า <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"ลบข้อความที่เก่ากว่า <xliff:g id="DURATION">%s</xliff:g> โดยอัตโนมัติ"</string>
-    <string name="ignore" msgid="7063392681130898793">"ไม่สนใจ"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"ลบข้อความทั้งหมดที่มีสื่อใช่ไหม"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"ลบข้อความที่เก่ากว่า <xliff:g id="DURATION">%s</xliff:g> ใช่ไหม"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"ลบข้อความที่เก่ากว่า <xliff:g id="DURATION">%s</xliff:g> และเปิดการลบอัตโนมัติใช่ไหม"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> กล่าว"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"คุณกล่าว"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"ข้อความจาก <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"คุณส่งข้อความแล้ว"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"กำลังส่ง…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"ไม่สามารถส่ง แตะเพื่อลองอีกครั้ง"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"ไม่สามารถส่ง ลองอีกครั้ง…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"ส่งอีกครั้งหรือลบ"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"โปรดโทรไปที่ฝ่ายบริการฉุกเฉิน ระบบไม่สามารถส่งข้อความของคุณได้ในขณะนี้"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"ล้มเหลว"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"มีข้อความ MMS ใหม่ให้ดาวน์โหลด"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"ข้อความ MMS ใหม่"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ไม่สามารถดาวน์โหลดได้"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"แตะเพื่อลองอีกครั้ง"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"แตะเพื่อดาวน์โหลด"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ดาวน์โหลดหรือลบ"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"กำลังดาวน์โหลด…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"ข้อความหมดอายุหรือไม่สามารถใช้ได้"</string>
-    <string name="mms_info" msgid="3402311750134118165">"ขนาด: <xliff:g id="MESSAGESIZE">%1$s</xliff:g> หมดอายุ: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"ไม่สามารถส่งได้ ผู้รับไม่ถูกต้อง"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"ไม่ได้เปิดใช้บริการบนเครือข่าย"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"ไม่สามารถส่งได้เนื่องจากปัญหาของเครือข่าย"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"ข้อความหมดอายุหรือไม่สามารถใช้ได้"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(ไม่มีเรื่อง)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"ไม่ทราบผู้ส่ง"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"ส่งแล้ว"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"ไม่สามารถดาวน์โหลดข้อความ <xliff:g id="SUBJECT">%1$s</xliff:g> จาก <xliff:g id="FROM">%2$s</xliff:g>"</string>
-    <string name="low_memory" msgid="5300743415198486619">"ไม่สามารถดำเนินการฐานข้อมูลให้เสร็จสิ้นเนื่องจากมีหน่วยความจำเหลือน้อย"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"ไม่ได้ส่งข้อความ"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"ไม่ได้ส่งข้อความบางรายการในการรับส่งข้อความ"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> ข้อความใน <xliff:g id="CONVERSATIONS">%d</xliff:g> การสนทนา</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> ข้อความใน 1 การสนทนา</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"ข้อความไม่ได้รับการดาวน์โหลด"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"ไม่ได้ดาวน์โหลดข้อความบางรายการในการรับส่งข้อความ"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> ข้อความใน <xliff:g id="CONVERSATIONS">%d</xliff:g> การสนทนา</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> ข้อความใน 1 การสนทนา</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"ไม่ได้ส่งข้อความถึง <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"โปรดโทรไปที่ฝ่ายบริการฉุกเฉิน ระบบไม่สามารถส่งข้อความของคุณไปยัง <xliff:g id="NUMBER">%1$s</xliff:g> ได้ในขณะนี้"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> ข้อความใหม่</item>
-      <item quantity="one">ข้อความใหม่</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"เริ่ม"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"กล้องไม่สามารถใช้ได้"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"กล้องไม่สามารถใช้ได้"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"การจับภาพวิดีโอไม่พร้อมใช้งาน"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"ไม่สามารถบันทึกสื่อได้"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"ไม่สามารถถ่ายภาพ"</string>
-    <string name="back" msgid="1477626055115561645">"กลับ"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"เก็บถาวรแล้ว"</string>
-    <string name="action_delete" msgid="4076795795307486019">"ลบ"</string>
-    <string name="action_archive" msgid="5437034800324083170">"เก็บถาวร"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"ยกเลิกการเก็บถาวร"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"ปิดการแจ้งเตือน"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"เปิดการแจ้งเตือน"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"เพิ่มรายชื่อติดต่อ"</string>
-    <string name="action_download" msgid="7786338136368564146">"ดาวน์โหลด"</string>
-    <string name="action_send" msgid="377635240181672039">"ส่ง"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"ลบ"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"ลบข้อความนี้ไหม"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"การดำเนินการนี้ไม่สามารถยกเลิกได้"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"ลบ"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">ลบการสนทนาเหล่านี้ใช่ไหม</item>
-      <item quantity="one">ลบการสนทนานี้ใช่ไหม</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"ลบ"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"ยกเลิก"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"ถึง"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"เลือกภาพหลายภาพ"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"ยืนยันการเลือก"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"ไม่สามารถบันทึกเสียงได้ ลองอีกครั้ง"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"ไม่สามารถเล่นเสียงได้ ลองอีกครั้ง"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"ไม่สามารถบันทึกเสียงได้ ลองอีกครั้ง"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"แตะค้างไว้"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"ภาพ"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"คลิปเสียง"</string>
-    <string name="notification_video" msgid="4331423498662606204">"วิดีโอ"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"บัตรติดต่อ"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ดาวน์โหลด"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"ตอบกลับทาง SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"ตอบกลับผ่าน MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"ตอบ"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other">ผู้เข้าร่วม <xliff:g id="COUNT_1">%d</xliff:g> คน</item>
-      <item quantity="one">ผู้เข้าร่วม <xliff:g id="COUNT_0">%d</xliff:g> คน</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"ฉัน"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"บล็อกและเก็บผู้ติดต่อแล้ว"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"เลิกบล็อกและเลิกเก็บรายชื่อติดต่อแล้ว"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"เก็บแล้ว <xliff:g id="COUNT">%d</xliff:g> รายการ"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"เลิกเก็บแล้ว <xliff:g id="COUNT">%d</xliff:g> รายการ"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"ปิดการแจ้งเตือนแล้ว"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"เปิดการแจ้งเตือนแล้ว"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"ตั้งค่าเรียบร้อย แตะ \"ส่ง\" อีกครั้ง"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"ตั้งค่าการรับส่งข้อความเป็นแอป SMS ค่าเริ่มต้นเรียบร้อยแล้ว"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">ยกเลิกไฟล์แนบ</item>
-      <item quantity="one">ยกเลิกไฟล์แนบ</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"ไฟล์แนบเสียง"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"เล่นไฟล์เสียงที่แนบอยู่"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"หยุดชั่วคราว"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"ข้อความจาก <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"ไม่สามารถรับข้อความจาก <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"ข้อความจาก <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"ข้อความที่ยังไม่ได้ส่งถึง <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"กำลังส่งข้อความถึง <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"ไม่สามารถส่งข้อความถึง <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"ส่งข้อความถึง <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"ไม่สามารถรับข้อความจาก <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g> <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"ข้อความจาก <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g> <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"ข้อความที่ยังไม่ได้ส่งถึง <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"กำลังส่งข้อความถึง <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"ไม่สามารถส่งข้อความถึง <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"ส่งข้อความถึง <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g> เวลา: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"ข้อความล้มเหลว แตะเพื่อลองใหม่"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"การสนทนากับ <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"ลบเรื่อง"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"จับภาพวิดีโอ"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"จับภาพนิ่ง"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"ถ่ายภาพ"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"เริ่มบันทึกวิดีโอ"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"สลับไปยังกล้องแบบเต็มหน้าจอ"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"สลับระหว่างกล้องหน้าและกล้องหลัง"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"หยุดการบันทึกและแนบวิดีโอ"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"หยุดการบันทึกวิดีโอ"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"รูปภาพในการรับส่งข้อความ"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other">บันทึก <xliff:g id="QUANTITY_2">%d</xliff:g> ภาพไปยังอัลบั้ม \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" แล้ว</item>
-      <item quantity="one">บันทึก <xliff:g id="QUANTITY_0">%d</xliff:g> ภาพไปยังอัลบั้ม \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" แล้ว</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other">บันทึกวิดีโอ <xliff:g id="QUANTITY_2">%d</xliff:g> รายการไปยังอัลบั้ม \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" แล้ว</item>
-      <item quantity="one">บันทึกวิดีโอ <xliff:g id="QUANTITY_0">%d</xliff:g> รายการไปยังอัลบั้ม \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" แล้ว</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other">บันทึก <xliff:g id="QUANTITY_2">%d</xliff:g> ไฟล์แนบไปยังอัลบั้ม \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" แล้ว</item>
-      <item quantity="one">บันทึก <xliff:g id="QUANTITY_0">%d</xliff:g> ไฟล์แนบไปยังอัลบั้ม \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" แล้ว</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other">บันทึก <xliff:g id="QUANTITY_1">%d</xliff:g> ไฟล์แนบไปยัง \"ดาวน์โหลด\" แล้ว</item>
-      <item quantity="one">บันทึก <xliff:g id="QUANTITY_0">%d</xliff:g> ไฟล์แนบไปยัง \"ดาวน์โหลด\" แล้ว</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">บันทึกไฟล์แนบ <xliff:g id="QUANTITY_1">%d</xliff:g> รายการแล้ว</item>
-      <item quantity="one">บันทึกไฟล์แนบ <xliff:g id="QUANTITY_0">%d</xliff:g> รายการแล้ว</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">ไม่สามารถบันทึกไฟล์แนบ <xliff:g id="QUANTITY_1">%d</xliff:g> รายการ</item>
-      <item quantity="one">ไม่สามารถบันทึกไฟล์แนบ <xliff:g id="QUANTITY_0">%d</xliff:g> รายการ</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"ไฟล์แนบของ MMS ที่บันทึกไว้"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"การตั้งค่า"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"เก็บถาวรแล้ว"</string>
-    <string name="action_close" msgid="1840519376200478419">"ปิด"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"ขั้นสูง"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"แก้ไขข้อบกพร่อง"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"การแจ้งเตือน"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"เสียง"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"เงียบ"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"สั่น"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"ถูกบล็อก"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"รายงานการส่ง SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"ขอรายงานการส่ง SMS แต่ละครั้ง"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"เรียกอัตโนมัติ"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"เรียกดูข้อความ MMS อัตโนมัติ"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"เรียกข้อความอัตโนมัติขณะโรมมิ่ง"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"ดึง MMS โดยอัตโนมัติเมื่อโรมมิ่ง"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"การรับส่งข้อความแบบกลุ่ม"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"ใช้ MMS ส่งข้อความเดียวเมื่อมีผู้รับหลายราย"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"แอป SMS เริ่มต้น"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"แอป SMS เริ่มต้น"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"หมายเลขโทรศัพท์ของคุณ"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"ไม่รู้จัก"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"เสียงข้อความขาออก"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"ถ่ายโอน SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"ถ่ายโอนข้อมูลดิบของ SMS ที่ได้รับลงในไฟล์พื้นที่จัดเก็บข้อมูลภายนอก"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"ถ่ายโอน MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"ถ่ายโอนข้อมูลดิบของ MMS ที่ได้รับลงในไฟล์พื้นที่จัดเก็บข้อมูลภายนอก"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"การแจ้งเตือนแบบไร้สาย"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"ตัวเลือกข้อความ"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"คัดลอกข้อความ"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"ดูรายละเอียด"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"ลบ"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"ส่งต่อ"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"รายละเอียดข้อความ"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"ประเภท: "</string>
-    <string name="text_message" msgid="7415419755252205721">"ข้อความ"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"ข้อความมัลติมีเดีย"</string>
-    <string name="from_label" msgid="1947831848146564875">"จาก: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"ถึง: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"ส่งแล้ว: "</string>
-    <string name="received_label" msgid="4442494712757995203">"ได้รับ: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"เรื่อง: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"ขนาด: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"ลำดับความสำคัญ: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"ซิม: "</string>
-    <string name="priority_high" msgid="728836357310908368">"สูง"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"ปกติ"</string>
-    <string name="priority_low" msgid="7398724779026801851">"ต่ำ"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"ซิม <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"ที่อยู่ผู้ส่งที่ซ่อนไว้"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"ไม่สามารถส่งข้อความเสียงขณะโหลดเอกสารแนบ"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"ไม่สามารถโหลดไฟล์แนบได้ ลองอีกครั้ง"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"เครือข่ายยังไม่พร้อม ลองอีกครั้ง"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"ลบข้อความ"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"สลับระหว่างการป้อนข้อความและตัวเลข"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"เพิ่มผู้เข้าร่วมเพิ่มเติม"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"ยืนยันผู้เข้าร่วม"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"เริ่มต้นการสนทนาใหม่"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"เลือกรายการนี้"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"เล่นวิดีโอ"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"ผู้คนและตัวเลือก"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"แก้ไขข้อบกพร่อง"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"ผู้คนและตัวเลือก"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"ทั่วไป"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"ผู้เข้าร่วมการสนทนานี้"</string>
-    <string name="action_call" msgid="6596167921517350362">"โทรออก"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"ส่งข้อความ"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"ส่งข้อความ&lt;br/&gt;&lt;small&gt;จาก <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">ส่งรูปภาพ</item>
-      <item quantity="one">ส่งรูปภาพ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">ส่งไฟล์เสียง</item>
-      <item quantity="one">ส่งไฟล์เสียง</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">ส่งวิดีโอ</item>
-      <item quantity="one">ส่งวิดีโอ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">ส่งการ์ดรายชื่อติดต่อ</item>
-      <item quantity="one">ส่งการ์ดรายชื่อติดต่อ</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">ส่งไฟล์แนบ</item>
-      <item quantity="one">ส่งไฟล์แนบ</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ไฟล์แนบพร้อมส่ง</item>
-      <item quantity="one">1 ไฟล์แนบพร้อมส่ง</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"ส่งความคิดเห็น"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"ดูใน Google Play สโตร์"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"ข้อมูลเวอร์ชัน"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"เวอร์ชัน %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"สัญญาอนุญาตสำหรับโอเพนซอร์ส"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"การแจ้งเตือน"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"ถึงขีดจำกัดของไฟล์แนบแล้ว"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"ไม่สามารถโหลดไฟล์แนบได้"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"เพิ่มในรายชื่อติดต่อใช่ไหม"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"เพิ่มรายชื่อติดต่อ"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"เรื่อง"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"เรื่อง: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"กำลังโหลดบัตรติดต่อ"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"ไม่สามารถโหลดการ์ดรายชื่อติดต่อได้"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"ดูบัตรติดต่อ"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other">รายชื่อติดต่อ <xliff:g id="COUNT_1">%d</xliff:g> ราย</item>
-      <item quantity="one">รายชื่อติดต่อ <xliff:g id="COUNT_0">%d</xliff:g> ราย</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"การ์ดรายชื่อติดต่อ"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"วันเกิด"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"บันทึก"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"ส่งต่อข้อความ"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"ตอบ"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"ปิดใช้ SMS แล้ว"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"ในการส่งข้อความ ให้ตั้งค่าการรับส่งข้อความเป็นแอป SMS ค่าเริ่มต้น"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"ตั้งค่าการรับส่งข้อความเป็นแอป SMS ค่าเริ่มต้น"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"เปลี่ยน"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"ในการรับข้อความ ให้ตั้งค่าการรับส่งข้อความเป็นแอป SMS ค่าเริ่มต้น"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"ยังไม่ได้เลือกซิมสำหรับการส่งข้อความ SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"เจ้าของอุปกรณ์ไม่อนุญาตแอปนี้"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ตกลง"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"มีผู้เข้าร่วมในการสนทนามากเกินไป"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">รายชื่อติดต่อไม่ถูกต้อง</item>
-      <item quantity="one">รายชื่อติดต่อไม่ถูกต้อง</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"ไม่สามารถโหลดภาพจากกล้องได้"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"คุณ: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"ข้อความร่าง"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"เมื่อคุณเริ่มการสนทนาใหม่ คุณจะเห็นการสนทนาใหม่ที่นี่"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"การสนทนาที่เก็บไว้จะปรากฏที่นี่"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"กำลังโหลดการสนทนา…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"ภาพ"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"คลิปเสียง"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"วิดีโอ"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"บัตรติดต่อ"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"เลิกทำ"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"ลองอีกครั้ง"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"ป้อนชื่อผู้ติดต่อหรือหมายเลขโทรศัพท์เพื่อเริ่มเขียนข้อความใหม่"</string>
-    <string name="action_block" msgid="9032076625645190136">"บล็อก"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"บล็อก <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"เลิกบล็อก <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"ต้องการบล็อก <xliff:g id="DESTINATION">%s</xliff:g> ไหม"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"คุณจะยังคงได้รับข้อความจากหมายเลขนี้ต่อไปแต่จะไม่ได้รับการแจ้งเตือนอีก ระบบจะเก็บการสนทนานี้ไว้"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"รายชื่อที่บล็อกไว้"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"เลิกบล็อก"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"รายชื่อที่บล็อกไว้"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"เลือกรูปภาพจากห้องสมุดเอกสาร"</string>
-    <string name="sending_message" msgid="6363584950085384929">"กำลังส่งข้อความ"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"ส่งข้อความแล้ว"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"ข้อมูลมือถือปิดอยู่ โปรดตรวจสอบการตั้งค่า"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"ไม่สามารถส่งข้อความในโหมดบนเครื่องบินได้"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"ไม่สามารถส่งข้อความนี้"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"ดาวน์โหลดข้อความแล้ว"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"ข้อมูลมือถือปิดอยู่ โปรดตรวจสอบการตั้งค่า"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"ไม่สามารถดาวน์โหลดข้อความในโหมดบนเครื่องบินได้"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"ไม่สามารถดาวน์โหลดข้อความได้"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"ศูนย์"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"หนึ่ง"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"สอง"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"สาม"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"สี่"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"ห้า"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"หก"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"เจ็ด"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"แปด"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"เก้า"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"ไม่สามารถส่งข้อความผ่าน <xliff:g id="CARRIERNAME">%1$s</xliff:g> ข้อผิดพลาด <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"ไม่สามารถส่งข้อความผ่านผู้ให้บริการที่ไม่รู้จัก ข้อผิดพลาด <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"ส่งต่อ: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"ไม่มีการส่งข้อความ เพราะยังไม่เปิดใช้งานบริการบนเครือข่าย"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"ไม่มีการส่งข้อความ: ที่อยู่ปลายทางไม่ถูกต้อง"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"ไม่มีการส่งข้อความ: ข้อความไม่ถูกต้อง"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"ไม่มีการส่งข้อความ: ระบบไม่สนับสนุนเนื้อหา"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"ไม่มีการส่งข้อความ: ระบบไม่สนับสนุนข้อความ"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"ไม่ได้ส่งข้อความ: ขนาดใหญ่เกินไป"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"ข้อความใหม่"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"ดู"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"รูปภาพ"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"ไม่สามารถหาแอปพลิเคชันที่เหมาะสม"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"นำผู้รับออก"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"ข้อความใหม่"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"ยกเลิก"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"แก้ไขจุดเข้าใช้งาน"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"ไม่ได้ตั้งค่า"</string>
-    <string name="apn_name" msgid="1572691851070894985">"ชื่อ"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"พร็อกซี MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"พอร์ต MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"ประเภท APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"ลบ APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN ใหม่"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"บันทึก"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"ยกเลิก"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"ต้องใส่ข้อมูลในช่องชื่อ"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"ต้องใส่ข้อมูล APN"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"ช่อง MCC ต้องเป็นเลข 3 หลัก"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"ช่อง MNC ต้องเป็นเลข 2 หรือ 3 หลัก"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"กำลังคืนการตั้งค่า APN เริ่มต้น"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"รีเซ็ตเป็นค่าเริ่มต้น"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"รีเซ็ตการตั้งค่า APN กลับเป็นค่าเริ่มต้นเรียบร้อยแล้ว"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"ไม่มีชื่อ"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"ชื่อจุดเข้าใช้งาน"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN ใหม่"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"การตั้งค่าจุดเข้าใช้งานไม่สามารถใช้ได้สำหรับผู้ใช้รายนี้"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"คัดลอกไปยังคลิปบอร์ดไหม"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"คัดลอก"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"ถึง <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"ทั่วไป"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"ขั้นสูง"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"การตั้งค่าทั่วไป"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"การตั้งค่าขั้นสูง"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"ซิม \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"ส่งข้อความ SMS ส่วนบุคคลให้กับผู้รับทุกคน เฉพาะคุณที่จะได้รับการตอบกลับ"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"ส่ง MMS เดี่ยวให้กับผู้รับทุกคน"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"ไม่ทราบหมายเลข"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"ข้อความใหม่"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"ข้อความใหม่"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"ตัวเลือกซิม"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"เลือก <xliff:g id="SIM_0">%1$s</xliff:g> แล้ว ตัวเลือกซิม"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"แก้ไขเรื่อง"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"เลือกซิมหรือแก้ไขเรื่อง"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"แตะค้างไว้เพื่อบันทึกเสียง"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"เริ่มต้นการสนทนาใหม่"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"การรับส่งข้อความ"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"รายการสนทนาในการรับส่งข้อความ"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"การรับส่งข้อความ"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"ข้อความใหม่"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"รายการการสนทนา"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"กำลังโหลดการสนทนา"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"กำลังโหลดข้อความ"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"ดูการสนทนาเพิ่มเติม"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"ดูข้อความเพิ่มเติม"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"ลบการสนทนาแล้ว"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"ลบการสนทนาแล้ว แตะเพื่อแสดงการสนทนาอื่นๆ ในการรับส่งข้อความ"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"ถูกบล็อก"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"เลิกบล็อกแล้ว"</string>
-    <string name="db_full" msgid="8459265782521418031">"พื้นที่เก็บข้อมูลเหลือน้อย ข้อมูลบางอย่างอาจสูญหายไป"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"เลือกไฟล์แนบ"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"ยืนยันการเลือก"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"เลือกไว้ <xliff:g id="COUNT">%d</xliff:g> รายการ"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"โปรดนำไฟล์แนบออกอย่างน้อย 1 รายการ แล้วลองอีกครั้ง"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"คุณสามารถลองส่งข้อความ แต่ข้อความอาจส่งไม่ได้หากคุณไม่ได้นำไฟล์แนบออกอย่างน้อย 1 รายการ"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"คุณสามารถส่งวิดีโอได้ 1 รายการต่อข้อความเท่านั้น โปรดนำวิดีโอเพิ่มเติมออกและลองอีกครั้ง"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"การรับส่งข้อความไม่สามารถโหลดไฟล์แนบ"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"ส่งเลย"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"ไม่สามารถเริ่มการสนทนาได้"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"เลือก <xliff:g id="SELECTED_SIM">%s</xliff:g> แล้ว"</string>
-</resources>
diff --git a/res/values-tl/arrays.xml b/res/values-tl/arrays.xml
deleted file mode 100644
index 6f30a29..0000000
--- a/res/values-tl/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"walang paksa"</item>
-    <item msgid="272485471009191934">"nosubject"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Oo"</item>
-    <item msgid="6049132459802288033">"Hindi"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Salamat"</item>
-    <item msgid="4881335087096496747">"Sang-ayon ako"</item>
-    <item msgid="2422296858597420738">"Ayos"</item>
-    <item msgid="4805581752819452687">"Papunta na ako"</item>
-    <item msgid="4746700499431366214">"OK, balikan na lang kita mamaya"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
deleted file mode 100644
index 091949f..0000000
--- a/res/values-tl/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Pagmemensahe"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Pagmemensahe"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Pumili ng pag-uusap"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Mga Setting"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Magpadala ng Mensahe"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Magdagdag ng attachment"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Tulong"</string>
-    <string name="welcome" msgid="2857560951820802321">"Maligayang Pagdating"</string>
-    <string name="skip" msgid="7238879696319945853">"Laktawan"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Susunod &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Susunod"</string>
-    <string name="exit" msgid="1905187380359981199">"Lumabas"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Mga Setting &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Mga Setting"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Kailangan ng pahintulot ng Pagmemensahe sa SMS, Telepono at Mga Contact."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Maaari mong baguhin ang mga pahintulot sa Mga Setting &gt; Mga App &gt; Pagmemensahe &gt; Mga Pahintulot."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Maaari mong baguhin ang mga pahintulot sa Mga Setting, Mga App, Pagmemensahe, Mga Pahintulot."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Mga madalas makaugnayan"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Lahat ng contact"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Ipadala sa <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Kumuha ng mga larawan o video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Pumili ng mga larawan mula sa device na ito"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"I-record ang audio"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Pumili ng larawan"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Napili ang media."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Inalis sa pagkakapili ang media."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> ang pinili"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"larawan <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"larawan"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"I-record ang audio"</string>
-    <string name="action_share" msgid="2143483844803153871">"Ibahagi"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Ngayon lang"</string>
-    <string name="posted_now" msgid="867560789350406701">"Ngayon"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> min</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> na min</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> oras</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> na oras</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> araw</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> na araw</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> linggo</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na linggo</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> buwan</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na buwan</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> taon</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na taon</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Class 0 na mensahe"</string>
-    <string name="save" msgid="5081141452059463572">"I-save"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Kaunti na lang ang espasyo ng device. Awtomatikong ide-delete ng Pagmemensahe ang mga mas lumang mensahe upang magbakante ng espasyo."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Nauubos na ang espasyo ng storage"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Maaaring hindi makatanggap o makapagpadala ng mga mensahe ang Pagmemensahe hanggang sa maging available ang higit pang espasyo sa iyong device."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Kaunti na ang storage ng SMS. Maaaring kailanganin mong magtanggal ng mga mensahe."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Kumpirmahin ang numero ng iyong telepono"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Titiyakin ng isang beses na hakbang na ito na maihahatid nang maayos ng Pagmemensahe ang iyong mga mensahe sa pangkat."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Numero ng telepono"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Tanggalin ang lahat ng mensahe na may media"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Tangglain ang mga mensaheng lampas na ng <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Awtomatikong i-delete ang mga mensaheng mas luma sa <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Huwag Pansinin"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"I-delete ang lahat ng mensaheng may media?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"I-delete ang mga mensaheng mas luma sa <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Awtomatikong i-delete ang mga mensaheng mas luma sa <xliff:g id="DURATION">%s</xliff:g> at i-on ang awtomatikong pag-delete?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"Sinabi ni <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Sinabi mo"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Mensahe mula kay <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Nagpadala ka ng mensahe"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Ipinapadala..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Hindi naipadala. Pindutin upang subukang muli.."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Hindi naipadala. Sinusubukang muli…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Ipadalang muli o i-delete"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Mangyaring mag-voice call sa mga pang-emergency na serbisyo. Sa ngayon, hindi maipadala ang iyong text message."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Hindi nagawa"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Bagong MMS message na ida-download"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Bagong MMS message"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Hindi mai-download"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Pindutin upang subukang muli"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Pindutin upang i-download"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"I-download o i-delete"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Nagda-download..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Nag-expire o hindi available ang mensahe"</string>
-    <string name="mms_info" msgid="3402311750134118165">"laki: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, expiration: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Hindi maipadala. Di-wasto ang tatanggap."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Hindi naka-activate sa network ang serbisyo"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Hindi maipadala dahil sa problema sa network"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Nag-expire o hindi available ang mensahe"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Walang paksa)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Hindi kilalang nagpadala"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Naihatid"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Hindi ma-download ang mensaheng <xliff:g id="SUBJECT">%1$s</xliff:g> mula kay <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Hindi makumpleto ang operation sa database dahil sa mababang memory"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Hindi naipadala ang mensahe"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Hindi naipadala sa Pagmemensahe ang ilang mensahe"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> mensahe sa <xliff:g id="CONVERSATIONS">%d</xliff:g> pag-uusap</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> na mensahe sa <xliff:g id="CONVERSATIONS">%d</xliff:g> na pag-uusap</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Hindi na-download ang mensahe"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Hindi na-download sa Pagmemensahe ang ilang mensahe"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> mensahe sa <xliff:g id="CONVERSATIONS">%d</xliff:g> pag-uusap</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> na mensahe sa <xliff:g id="CONVERSATIONS">%d</xliff:g> na pag-uusap</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Hindi naipadala ang mensahe sa <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Mangyaring mag-voice call sa mga pang-emergency na serbisyo. Sa ngayon, hindi maipadala ang iyong text message sa <xliff:g id="NUMBER">%1$s</xliff:g>."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> bagong mensahe</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> na bagong mensahe</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Magsimula"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Hindi available ang camera"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Hindi available ang camera"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Hindi available ang pagkuha ng video"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Hindi mai-save ang media"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Hindi makakakuha ng larawan"</string>
-    <string name="back" msgid="1477626055115561645">"Bumalik"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Naka-archive"</string>
-    <string name="action_delete" msgid="4076795795307486019">"I-delete"</string>
-    <string name="action_archive" msgid="5437034800324083170">"I-archive"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Alisin sa archive"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"I-off ang mga notification"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"I-on ang mga notification"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Magdagdag ng contact"</string>
-    <string name="action_download" msgid="7786338136368564146">"I-download"</string>
-    <string name="action_send" msgid="377635240181672039">"Ipadala"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"I-delete"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"I-delete ang mensaheng ito?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Hindi maaaring bawiin ang pagkilos na ito."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"I-delete"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">I-delete ang mga pag-uusap na ito?</item>
-      <item quantity="other">I-delete ang mga pag-uusap na ito?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Tanggalin"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Kanselahin"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Para kay"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Pumili ng maramihang larawan"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Kumpirmahin ang pinili"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Hindi mai-record ang audio. Subukang muli."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Hindi mai-play ang audio. Subukang muli."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Hindi mai-save ang audio. Subukang muli."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Pindutin nang matagal"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Larawan"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audio clip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Contact card"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"I-download"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Tumugon sa pamamagitan ng SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Tumugon sa pamamagitan ng MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Tumugon"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> kalahok</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> na kalahok</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ako"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Na-block at na-archive ang contact"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Naka-unblock at hindi naka-archive ang contact"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> ang na-archive"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> ang inalis sa pagkaka-archive"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Naka-off ang mga notification"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Naka-on ang mga notification"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Handa na ang lahat. Pindutin muli ang Ipadala."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Matagumpay na naitakda ang Pagmemensahe bilang default na SMS app."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">I-discard ang mga attachment</item>
-      <item quantity="other">I-discard ang mga attachment</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Attachment na audio"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"I-play ang attachment na audio"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"I-pause"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Mensahe mula kay <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Hindi naipadalang mensahe mula kay <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Mensahe mula kay <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Hindi naipadalang mensahe kay <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Ipinapadala ang mensahe kay <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Hindi naipadalang mensahe kay <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Mensahe kay <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Hindi naipadalang mensahe mula kay <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Mensahe mula kay <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Hindi naipadalang mensahe sa <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Ipinapadala ang mensahe sa <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Hindi naipadalang mensahe sa <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Mensahe sa <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Oras: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Hindi naipadalang mensahe. Pindutin upang subukang muli."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Pag-uusap kasama sina <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"I-delete ang paksa"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Kumuha ng video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Kumuha ng still na larawan"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Kumuha ng larawan"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Simulan ang pag-record ng video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Lumipat sa camera na full screen"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Lumipat sa pagitan ng camera sa harap at likod"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Ihinto ang pagre-record at i-attach ang video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Itigil ang pagre-record ng video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Mga larawan sa pagmemensahe"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> larawan ang naka-save sa album na \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> na larawan ang naka-save sa album na \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> video ang naka-save sa album na \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> na video ang naka-save sa album na \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> attachment ang naka-save sa album na \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> na attachment ang naka-save sa album na \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> attachment ang naka-save sa \"Mga Download\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> na attachment ang naka-save sa \"Mga Download\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> attachment ang na-save</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> na attachment ang na-save</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Hindi ma-save ang <xliff:g id="QUANTITY_1">%d</xliff:g> attachment</item>
-      <item quantity="other">Hindi ma-save ang <xliff:g id="QUANTITY_1">%d</xliff:g> na attachment</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Na-save na MMS attachment"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Mga Setting"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Naka-archive"</string>
-    <string name="action_close" msgid="1840519376200478419">"Isara"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Advanced"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"I-debug"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Mga Notification"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Tunog"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Naka-silent"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Mag-vibrate"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Naka-block"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Mga ulat sa pagpapadala ng SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Humiling ng ulat sa paghahatid para sa bawat SMS na iyong ipinapadala"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"I-auto-retrieve"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Awtomatikong kunin ang mga mensaheng MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Awtomatikong pagkuha sa roaming"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Awtomatikong kunin ang MMS kapag naka-roaming"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Panggrupong pagpapadala ng mensahe"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Gamitin ang MMS upang magpadala ng iisang mensahe kapag may maraming recipient"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Default na SMS app"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Default na SMS app"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Numero ng iyong telepono"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Hindi kilala"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Mga tunog ng papalabas na mensahe"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Itapon ang SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Itapon ang raw data ng natanggap na SMS sa file ng external storage"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Itapon ang MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Itapon ang raw data ng natanggap na MMS sa file ng external storage"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Mga wireless na alerto"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Mga opsyon sa mensahe"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopyahin ang text"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Tingnan ang mga detalye"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"I-delete"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Ipasa"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Mga detalye ng mensahe"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Uri: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Text message"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimedia message"</string>
-    <string name="from_label" msgid="1947831848146564875">"Mula kay: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Para kay: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Ipinadala: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Natanggap: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Paksa: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Laki: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Priyoridad: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Mataas"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Mababa"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Nakatago ang address ng nagpadala"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Hindi maaaring magpadala ng mensahe habang naglo-load ng mga attachment."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Hindi mai-load ang attachment. Subukang muli."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Hindi pa handa ang network. Subukang muli."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"I-delete ang text"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Lumipat sa pagitan ng paglagay ng text at mga numero"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Magdagdag ng higit pang mga kalahok"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Kumpirmahin ang mga kalahok"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Magsimula ng bagong pag-uusap"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Piliin ang item na ito"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"I-play ang video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Mga tao at opsyon"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"I-debug"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Mga tao at opsyon"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Pangkalahatan"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Mga tao sa pag-uusap na ito"</string>
-    <string name="action_call" msgid="6596167921517350362">"Tumawag"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Magpadala ng mensahe"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Magpadala ng mensahe&lt;br/&gt;&lt;small&gt;mula sa <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Ipadala ang mga larawan</item>
-      <item quantity="other">Ipadala ang mga larawan</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Ipadala ang mga audio</item>
-      <item quantity="other">Ipadala ang mga audio</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Ipadala ang mga video</item>
-      <item quantity="other">Ipadala ang mga video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Ipadala ang mga contact card</item>
-      <item quantity="other">Ipadala ang mga contact card</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Ipadala ang mga attachment</item>
-      <item quantity="other">Ipadala ang mga attachment</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> attachment ang handa nang ipadala</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> na attachment ang handa nang ipadala</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Magpadala ng feedback"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Tingnan sa Google Play Store"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Impormasyon sa bersyon"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Bersyon %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Mga open source na lisensya"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Mga Notification"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Naabot na ang limitasyon ng attachment"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Hindi na-load ang attachment."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Idagdag sa Mga Contact?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Magdagdag ng Contact"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Subject"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Subject: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Nilo-load ang contact card"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Hindi mai-load ang contact card"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Tingnan ang contact card"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> contact</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> na contact</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Mga contact card"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Kaarawan"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Mga Tala"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Ipasa ang mensahe"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Tumugon"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Naka-disable ang SMS"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Upang ipadala, itakda ang Pagmemensahe bilang default na SMS app"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Itakda ang Pagmemensahe bilang default na SMS app"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Baguhin"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Upang makatanggap ng mga mensahe, itakda ang Pagmemensahe bilang default na SMS app"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Walang piniling gustong SIM para sa pagpapadala ng mga mensaheng SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Hindi pinapayagan ang app na ito ng may-ari ng device."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Masyadong maraming kalahok sa isang pag-uusap"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Mga di-wastong contact</item>
-      <item quantity="other">Mga di-wastong contact</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Hindi mai-load ang larawan ng camera"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Ikaw: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Draft"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Sa sandaling magsimula ka ng bagong pag-uusap, makikita mo ito na nakalista rito"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Lumalabas dito ang mga naka-archive na pag-uusap"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Nilo-load ang mga pag-uusap…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Larawan"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audio clip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Card sa pakikipag-ugnayan"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"I-undo"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Subukang muli"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Maglagay ng pangalan ng contact o numero ng telepono upang magsimula ng isang bagong mensahe"</string>
-    <string name="action_block" msgid="9032076625645190136">"I-block"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"I-block ang <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Alisin sa pagkaka-block ang <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"I-block ang <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Patuloy kang makakatanggap ng mga mensahe mula sa numerong ito ngunit hindi ka na aabisuhan. Maa-archive ang pag-uusap na ito."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Mga na-block na contact"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ALISIN SA PAGKAKA-BLOCK"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Mga na-block na contact"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Pumili ng larawan mula sa library ng dokumento"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Ipinapadala ang mensahe"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Naipadala na ang mensahe"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Naka-off ang cellular data. Suriin ang iyong mga setting."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Hindi maaaring magpadala ng mga mensahe sa Airplane mode"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Hindi maipadala ang mensahe"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Na-download na ang mensahe"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Naka-off ang cellular data. Tingnan ang iyong mga setting."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Hindi maaaring mag-download ng mga mensahe sa Airplane mode"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Hindi ma-download ang mensahe"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Zero"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Isa"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Dalawa"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Tatlo"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Apat"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Lima"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Anim"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Pito"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Walo"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Siyam"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Hindi maipadala ang mensahe gamit ang <xliff:g id="CARRIERNAME">%1$s</xliff:g>, error na <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Hindi maipadala ang mensahe gamit ang hindi nakikilalang carrier, error na <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Hindi napadala ang mensahe: hindi naka-activate sa network ang serbisyo"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Hindi naipadala ang mensahe: di-wastong patutunguhang address"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Hindi naipadala ang mensahe: di-wastong mensahe"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Hindi naipadala ang mensahe: hindi sinusuportahang content"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Hindi naipadala ang mensahe: hindi sinusuportahang mensahe"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Hindi napadala ang mensahe: masyadong malaki"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Bagong mensahe"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Tingnan"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Larawan"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Hindi makahanap ng naaangkop na application"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Alisin ang tatanggap"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Bagong mensahe"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Kanselahin"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"I-edit ang access point"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Hindi nakatakda"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Pangalan"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy ng MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Port ng MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Uri ng APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"I-delete ang APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Bagong APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"I-save"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"I-discard"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Hindi maaaring walang laman ang field ng Pangalan."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Hindi maaaring walang laman ang APN."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Dapat na 3 digit ang field na MCC."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Dapat na 2 o 3 digit ang field ng MNC."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Nire-restore ang default na mga setting ng APN"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"I-reset sa default"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Nakumpleto na ang pag-reset sa default na mga setting ng APN."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Walang pamagat"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Mga Access Point Name"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Mga APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Bagong APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Hindi available ang mga setting ng Access Point Name para sa user na ito"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Kopyahin sa clipboard?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopyahin"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"sa <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Pangkalahatan"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Advanced"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Mga pangkalahatang setting"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Mga advanced na setting"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Magpadala ng mga indibidwal na mensaheng SMS sa lahat ng tatanggap. Ikaw lang ang makakatanggap ng anumang mga tugon"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Magpadala ng iisang MMS sa lahat ng tatanggap"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Hindi kilalang numero"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Bagong mensahe"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Bagong mensahe."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM selector"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Pinili ang <xliff:g id="SIM_0">%1$s</xliff:g>, selector ng SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"I-edit ang paksa"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Pumili ng SIM o i-edit ang paksa"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Pindutin nang matagal upang i-record ang audio"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Magsimula ng bagong pag-uusap"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Pagmemensahe"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Listahan ng Pagmemensahe"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Pagmemensahe"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Bagong mensahe"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Listahan ng pag-uusap"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Nilo-load ang mga pag-uusap"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Nilo-load ang mga mensahe"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Tumingin ng higit pang pag-uusap"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Tingnan ang higit pang mga mensahe"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Na-delete na ang pag-uusap"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Na-delete na ang pag-uusap. Pindutin upang magpakita ng iba\'t ibang pag-uusap sa Pagmemensahe"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Na-block"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Na-unblock"</string>
-    <string name="db_full" msgid="8459265782521418031">"Kaunti na lang ang espasyo sa storage. Maaaring mawala ang ilang data."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Pumili ng mga attachment"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Kumpirmahin ang napili"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ang napili"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Mangyaring mag-alis ng isa o higit pang mga attachment at subukang muli."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Maaari mong subukang ipadala ang iyong mensahe, ngunit maaaring hindi ito maipadala maliban kung mag-aalis ka ng isa o higit pang mga attachment."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Maaari ka lang magpadala ng isang video sa bawat mensahe. Mangyaring alisin ang mga karagdagang video at subukang muli."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Hindi na-load ng pagmemensahe ang attachment."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Ipadala pa rin"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Hindi makapagsimula ng pag-uusap"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> ang napili"</string>
-</resources>
diff --git a/res/values-tr/arrays.xml b/res/values-tr/arrays.xml
deleted file mode 100644
index d0b4e84..0000000
--- a/res/values-tr/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"konu yok"</item>
-    <item msgid="272485471009191934">"konu yok"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Evet"</item>
-    <item msgid="6049132459802288033">"Hayır"</item>
-    <item msgid="3084376867445867895">"Tamam"</item>
-    <item msgid="3155097332660174689">"Olur"</item>
-    <item msgid="2611328818571146775">"Teşekkürler"</item>
-    <item msgid="4881335087096496747">"Kabul ediyorum"</item>
-    <item msgid="2422296858597420738">"Güzel"</item>
-    <item msgid="4805581752819452687">"Yoldayım"</item>
-    <item msgid="4746700499431366214">"Tamam, sana sonra dönerim"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
deleted file mode 100644
index 7d7fefb..0000000
--- a/res/values-tr/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Mesajlaşma"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Mesajlaşma"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"İleti dizisini seç"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Ayarlar"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"İleti Gönder"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Dosya ekle"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Yardım"</string>
-    <string name="welcome" msgid="2857560951820802321">"Hoş geldiniz"</string>
-    <string name="skip" msgid="7238879696319945853">"Atla"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Sonraki &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Sonraki"</string>
-    <string name="exit" msgid="1905187380359981199">"Çık"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Ayarlar &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Ayarlar"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Mesajlaşma\'nın SMS, Telefon ve Kişiler için izninize ihtiyacı var."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"İzinleri; Ayarlar &gt; Uygulamalar &gt; Mesajlaşma &gt; İzinler\'de değiştirebilirsiniz."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"İzinleri; Ayarlar, Uygulamalar, Mesajlaşma, İzinler\'de değiştirebilirsiniz."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Sık kullanılanlar"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Tüm kişiler"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Şuraya gönder: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Fotoğraf veya video çekin"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Bu cihazdan resim seç"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Ses kaydedin"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Fotoğraf seç"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Medya seçildi."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Medya seçilmedi."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> öğe seçildi"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"resim <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"resim"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Ses kaydedin"</string>
-    <string name="action_share" msgid="2143483844803153871">"Paylaş"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Şimdi"</string>
-    <string name="posted_now" msgid="867560789350406701">"Şimdi"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> dk.</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> dk.</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> saat</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> saat</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> gün</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> gün</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> hafta</item>
-      <item quantity="one">bir hafta</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ay</item>
-      <item quantity="one">bir ay</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> yıl</item>
-      <item quantity="one">bir yıl</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Sınıf 0 iletisi"</string>
-    <string name="save" msgid="5081141452059463572">"Kaydet"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Cihazınızda boş alan az. Mesajlaşma boş alan açmak için daha eski iletileri otomatik olarak silecektir."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Depolama alanı bitiyor"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Mesajlaşma, cihazınızda daha fazla yer açılana kadar ileti gönderip almayabilir."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS depolama alanı azaldı. İletileri silmeniz gerekebilir."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Telefon numaranızı doğrulayın"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Bu bir kerelik adım, Mesajlaşma\'nın, grup iletilerini düzgün olarak teslim etmesini sağlayacaktır."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefon numarası"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Medya içeren tüm iletileri sil"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Şundan eski iletileri sil: <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Şundan daha eski iletileri otomatik olarak sil: <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Yoksay"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Medya içeren tüm iletiler silinsin mi?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Şundan daha eski iletiler silinsin mi: <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Şundan daha eski iletiler silinip otomatik silme etkinleştirilsin mi: <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> şunu dedi:"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Şunu dediniz:"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> adlı kişiden ileti"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Bir ileti gönderdiniz"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Gönderiliyor..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Gönderilmedi. Tekrar denemek için dokunun."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Gönderilmedi. Tekrar deniyor…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Yeniden gönderin veya silin"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Lütfen acil durum servislerine telefon edin. Kısa mesajınız şu anda teslim edilemedi."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Başarısız oldu"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"İndirilecek yeni MMS iletisi"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Yeni MMS iletisi"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"İndirilemedi"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Tekrar denemek için dokunun"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"İndirmek için dokunun"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"İndirin veya silin"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"İndiriliyor..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"İletinin süresi doldu veya kullanılamıyor"</string>
-    <string name="mms_info" msgid="3402311750134118165">"boyut: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, süre sonu: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Gönderilemiyor. Alıcı geçersiz."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Hizmet, ağda etkinleştirilmemiş"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Ağ sorunu nedeniyle gönderilemedi"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"İletinin süresi doldu veya kullanılamıyor"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Konu yok)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Bilinmeyen gönderen"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Teslim edildi"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"<xliff:g id="FROM">%2$s</xliff:g> tarafından gönderilen <xliff:g id="SUBJECT">%1$s</xliff:g> konulu ileti indirilemedi."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Yetersiz bellek nedeniyle veritabanı işlemi tamamlanamadı"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"İleti gönderilmedi"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Bazı iletiler Mesajlaşma\'da gönderilmedi"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> ileti dizisinde <xliff:g id="CONVERSATIONS">%d</xliff:g> ileti</item>
-      <item quantity="one">Bir ileti dizisinde <xliff:g id="MESSAGES_0">%d</xliff:g> ileti</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"İleti indirilmedi"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Bazı iletiler Mesajlaşma\'dan indirilmedi"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> ileti dizisinde <xliff:g id="CONVERSATIONS">%d</xliff:g> ileti</item>
-      <item quantity="one">Bir ileti dizisinde <xliff:g id="MESSAGES_0">%d</xliff:g> ileti</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> numaralı telefona ileti gönderilemedi"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Lütfen acil durum servislerine telefon edin. <xliff:g id="NUMBER">%1$s</xliff:g> numaralı telefona gönderdiğiniz kısa mesajınız şu anda teslim edilemedi."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> yeni ileti</item>
-      <item quantity="one">Yeni ileti</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Başlat"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera kullanılamıyor"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera kullanılamıyor"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Video çekimi kullanılamıyor"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Medya kaydedilemiyor"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Resim çekilemiyor"</string>
-    <string name="back" msgid="1477626055115561645">"Geri"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arşivlenen"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Sil"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arşivle"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Arşivden kaldır"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Bildirimleri devre dışı bırak"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Bildirimleri aç"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Kişi ekle"</string>
-    <string name="action_download" msgid="7786338136368564146">"İndir"</string>
-    <string name="action_send" msgid="377635240181672039">"Gönder"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Sil"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Bu ileti silinsin mi?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Bu işlem geri alınamaz."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Sil"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Bu ileti dizileri silinsin mi?</item>
-      <item quantity="one">Bu ileti dizisi silinsin mi?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Sil"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"İptal"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Alıcı:"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Birden fazla resim seç"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Seçimi onayla"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Ses kaydedilemiyor. Tekrar deneyin."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Ses çalınamıyor. Tekrar deneyin."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Ses kaydedilemedi. Tekrar deneyin."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Dokunup basılı tutun"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Resim"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Ses klibi"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kişi kartı"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"İndir"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS ile yanıtla"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS ile yanıtla"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Yanıtla"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> katılımcı</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> katılımcı</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Ben"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kişi engellendi ve arşivlendi"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kişinin engellemesi kaldırıldı ve kişi arşivden geri alındı"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> ileti dizisi arşivlendi"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> ileti dizisi arşivden kaldırıldı"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Bildirimler kapalı"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Bildirimler açık"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Tümü ayarlandı. Gönder\'e tekrar dokunun."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Mesajlaşma, başarılı bir şekilde varsayılan SMS uygulaması olarak ayarlandı."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Ekleri sil</item>
-      <item quantity="one">Eki sil</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Ses dosyası eki"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Ekli ses dosyasını çal"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Duraklat"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> adlı kişiden ileti: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Şu ileti <xliff:g id="SENDER">%1$s</xliff:g> tarafından gönderilemedi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Şu ileti <xliff:g id="SENDER">%1$s</xliff:g> tarafından gönderildi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Şu ileti <xliff:g id="CONTACT">%1$s</xliff:g> adlı kişiye gönderilmedi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Şu ileti <xliff:g id="CONTACT">%1$s</xliff:g> adlı kişiye gönderiliyor: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Şu ileti <xliff:g id="CONTACT">%1$s</xliff:g> adlı kişiye gönderilemedi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Şu ileti <xliff:g id="CONTACT">%1$s</xliff:g> adlı kişiye gönderildi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Şu ileti <xliff:g id="SENDER">%1$s</xliff:g> tarafından gönderilemedi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Şu ileti <xliff:g id="SENDER">%1$s</xliff:g> tarafından gönderildi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Şu ileti <xliff:g id="GROUP">%1$s</xliff:g> adlı gruba gönderilmedi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Şu ileti <xliff:g id="GROUP">%1$s</xliff:g> adlı gruba gönderiliyor: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Şu ileti <xliff:g id="GROUP">%1$s</xliff:g> adlı gruba gönderilemedi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Şu ileti <xliff:g id="GROUP">%1$s</xliff:g> adlı gruba gönderildi: <xliff:g id="MESSAGE">%2$s</xliff:g>. Saat: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"İleti başarısız oldu. Yeniden denemek için dokunun."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> ile ileti dizisi"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Konuyu sil"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Video çek"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Fotoğraf çek"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Fotoğraf çek"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Video kaydetmeye başla"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Tam ekran kameraya geç"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Ön ve arka kamera arasında geçiş yap"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Kaydı durdur ve video ekle"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Video kaydını durdur"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Mesajlaşma fotoğrafları"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> fotoğraf, \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" albümüne kaydedildi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> fotoğraf, \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" albümüne kaydedildi</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> video, \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" albümüne kaydedildi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video, \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" albümüne kaydedildi</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other">Ekli <xliff:g id="QUANTITY_2">%d</xliff:g> dosya, \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" albümüne kaydedildi</item>
-      <item quantity="one">Ekli <xliff:g id="QUANTITY_0">%d</xliff:g> dosya, \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" albümüne kaydedildi</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other">Ekli <xliff:g id="QUANTITY_1">%d</xliff:g> dosya, \"İndirilenler\"e kaydedildi</item>
-      <item quantity="one">Ekli <xliff:g id="QUANTITY_0">%d</xliff:g> dosya, \"İndirilenler\"e kaydedildi</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ek kaydedildi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ek kaydedildi</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ek kaydedilemedi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ek kaydedilemedi</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS eki kaydedildi"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Ayarlar"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arşivlenen"</string>
-    <string name="action_close" msgid="1840519376200478419">"Kapat"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Gelişmiş"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Hata Ayıklama"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Bildirimler"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Ses"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Sessiz"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Titreşim"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Engellendi"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS iletim raporları"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Gönderilen her SMS için bir iletim raporu iste"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Otomatik al"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS iletilerini otomatik olarak al"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Dolaşımda otomatik al"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Dolaşımdayken MMS\'leri otomatik olarak al"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Grup mesajları"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Birden fazla alıcıya tek bir ileti göndermek için MMS kullanın"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Varsayılan SMS uygulaması"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Varsayılan SMS uygulaması"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Telefon numaranız"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Bilinmiyor"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Giden ileti sesleri"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS verilerini aktar"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Alınan ham SMS verilerini harici bir depolama dosyasına aktarın"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS verilerini aktar"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Alınan ham MMS verilerini harici bir depolama dosyasına aktarın"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Kablosuz uyarıları"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"İleti seçenekleri"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Metni kopyala"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Ayrıntıları görüntüle"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Sil"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Yönlendir"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"İleti ayrıntıları"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Tür: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Kısa mesaj"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimedya iletisi"</string>
-    <string name="from_label" msgid="1947831848146564875">"Gönderen: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Alıcı: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Gönderilme tarihi: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Alınma tarihi: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Konu: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Boyut: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Öncelik: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Yüksek"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Normal"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Düşük"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Gizli gönderen adresi"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Ekler yüklenirken ileti gönderilemez."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Ek yüklenemiyor. Tekrar deneyin."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Ağ hazır değil. Tekrar deneyin."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Metni sil"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Metin ve sayı girişi arasında geçiş yap"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Daha fazla katılımcı ekle"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Katılımcıları onayla"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Yeni ileti dizisi başlat"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Bu öğeyi seçin"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Videoyu oynat"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Kişiler ve seçenekler"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Hata ayıkla"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Kişiler ve seçenekler"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Genel"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Bu görüşmedeki kişiler"</string>
-    <string name="action_call" msgid="6596167921517350362">"Çağrı yap"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"İleti gönder"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Mesajı şu karttan gönder:&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Fotoğrafları gönder</item>
-      <item quantity="one">Fotoğrafı gönder</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Ses dosyalarını gönder</item>
-      <item quantity="one">Ses dosyasını gönder</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Videoları gönder</item>
-      <item quantity="one">Videoyu gönder</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Kişi kartlarını gönder</item>
-      <item quantity="one">Kişi kartını gönder</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Ekleri gönder</item>
-      <item quantity="one">Eki gönder</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ek gönderilmeye hazır</item>
-      <item quantity="one">Bir ek gönderilmeye hazır</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Geri bildirim gönder"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Google Play Store\'da görüntüle"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Sürüm bilgisi"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Sürüm %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Açık kaynak lisansları"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Bildirimler"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Ek sınırına ulaşıldı"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Ek yüklenemedi."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Kişilere eklensin mi?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Kişi Ekle"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Konu"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Konu: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Kişi kartı yükleniyor"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kişi kartı yüklenemedi"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Kişi kartını görüntüle"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kişi</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kişi</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kişi kartları"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Doğum günü"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Notlar"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"İletiyi yönlendir"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Yanıtla"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS devre dışı bırakıldı"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Göndermek için Mesajlaşma\'yı varsayılan SMS uygulamanız olarak ayarlayın"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Mesajlaşma\'yı varsayılan SMS uygulamanız olarak ayarlayın"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Değiştir"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"İletileri almak için Mesajlaşma\'yı varsayılan SMS uygulamanız olarak ayarlayın"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS iletilerini göndermek için SIM tercihi yapılmadı"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Cihaz sahibi bu uygulamaya izin vermiyor."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"Tamam"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Bir görüşmede çok fazla katılımcı var"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Geçersiz kişiler</item>
-      <item quantity="one">Geçersiz kişi</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Kamera görüntüsü yüklenemedi"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Siz: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Taslak"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Yeni bir görüşme başlattığınızda burada listelendiğini göreceksiniz"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Arşivlenmiş ileti dizileri burada görünür"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"İleti dizileri yükleniyor..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Resim"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Ses klibi"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kişi kartı"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Geri al"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Yeniden dene"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Yeni bir iletiye başlamak için bir kişi adı veya telefon numarası girin"</string>
-    <string name="action_block" msgid="9032076625645190136">"Engelle"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> hedefini engelle"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> adlı kişinin engellemesini kaldır"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> engellensin mi?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Bu numaradan gelen iletileri almaya devam edecek ancak artık bildirim almayacaksınız. Bu ileti dizisi arşivlenecektir."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Engellenen kişiler"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"ENGELLEMEYİ KALDIR"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Engellenen kişiler"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Doküman kitaplığından resim seç"</string>
-    <string name="sending_message" msgid="6363584950085384929">"İleti gönderiliyor"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"İleti gönderildi"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Hücresel veri özelliği kapalı. Ayarlarınızı kontrol edin."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Uçak modunda iletiler gönderilemiyor"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"İleti gönderilemedi"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"İleti indirildi"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Hücresel veri özelliği kapalı. Ayarlarınızı kontrol edin."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Uçak modundayken iletiler indirilemez"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"İleti indirilemedi"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Sıfır"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Bir"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"İki"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Üç"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Dört"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Beş"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Altı"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Yedi"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Sekiz"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Dokuz"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> ile ileti gönderilemiyor. Hata kodu: <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Bilinmeyen operatör ile ileti gönderilemiyor. Hata kodu: <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Yön: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"İleti gönderilmedi: Hizmet, ağ üzerinde etkin değil"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"İleti gönderilmedi: Geçersiz gönderim adresi"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"İleti gönderilmedi: Geçersiz ileti"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"İleti gönderilmedi: Desteklenmeyen içerik"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"İleti gönderilmedi: Desteklenmeyen ileti"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"İleti gönderilmedi: Çok büyük"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Yeni ileti"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Görüntüle"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Resim"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Uygun bir uygulama bulunamadı"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Alıcıyı kaldır"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Yeni ileti"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"İptal"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Erişim noktasını düzenle"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Ayarlanmadı"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Ad"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS proxy\'si"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS bağlantı noktası"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN türü"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APN\'yi sil"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Yeni APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Kaydet"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Yoksay"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Ad alanı boş olamaz."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN boş olamaz."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC alanındaki değer 3 rakamdan oluşmalıdır."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC alanındaki değer 2 veya 3 rakamdan oluşmalıdır."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Varsayılan APN ayarları geri yükleniyor."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Varsayılana sıfırla"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Varsayılan APN ayarlarına sıfırlama tamamlandı."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Başlıksız"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Erişim Noktası Adları (APN)"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN\'ler"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Yeni APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Erişim Noktası Adı (APN) ayarları bu kullanıcı için kullanılamıyor"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Panoya kopyalansın mı?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopyala"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"Mesajın alınacağı kart: <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Genel"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Gelişmiş"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Genel ayarlar"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Gelişmiş ayarlar"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Tüm alıcılara tek tek SMS iletisi gönder. Sadece size yanıt gönderilir."</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Tüm alıcılara tek bir MMS iletisi gönder"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Bilinmeyen numara"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Yeni ileti"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Yeni ileti."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM seçici"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> seçildi, SIM seçici"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Konuyu düzenle"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM seçin veya konuyu düzenleyin"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Ses kaydetmek için dokunun ve basılı tutun"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Yeni ileti dizisi başlat"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Mesajlaşma"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Mesajlaşma Listesi"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Mesajlaşma"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Yeni ileti"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"İleti dizisi listesi"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"İleti dizileri yükleniyor"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"İletiler yükleniyor"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Diğer ileti dizilerini görüntüle"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Daha fazla ileti görüntüle"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"İleti dizisi silindi"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"İleti dizisi silindi. Farklı bir Mesajlaşma ileti dizisini görüntülemek için dokunun"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Engellendi"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Engellemesi kaldırıldı"</string>
-    <string name="db_full" msgid="8459265782521418031">"Depolama alanı az. Bazı veriler kaybolabilir."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Ekleri seçin"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Seçimi onayla"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> öğe seçildi"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Lütfen bir veya daha fazla eki kaldırın ve tekrar deneyin."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"İletinizi göndermeyi deneyebilirsiniz, ancak bir veya daha fazla eki kaldırmadığınız sürece ileti teslim edilmeyebilir."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Her iletide yalnızca bir tane video gönderebilirsiniz. Lütfen ek videoları kaldırın ve tekrar deneyin."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Mesajlaşma, eki yükleyemedi."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Yine de gönder"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Sohbet başlatılamadı"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> seçildi"</string>
-</resources>
diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml
deleted file mode 100644
index fc47a64..0000000
--- a/res/values-uk/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"без теми"</item>
-    <item msgid="272485471009191934">"без теми"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Так"</item>
-    <item msgid="6049132459802288033">"Ні"</item>
-    <item msgid="3084376867445867895">"ОК"</item>
-    <item msgid="3155097332660174689">"Ха-ха-ха"</item>
-    <item msgid="2611328818571146775">"Дякую"</item>
-    <item msgid="4881335087096496747">"Погоджуюсь"</item>
-    <item msgid="2422296858597420738">"Чудово"</item>
-    <item msgid="4805581752819452687">"У дорозі"</item>
-    <item msgid="4746700499431366214">"Добре, я зателефоную пізніше"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
deleted file mode 100644
index 1fa8a2e..0000000
--- a/res/values-uk/strings.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Повідомлення"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Повідомлення"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Виберіть ланцюжок повідомлень"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Налаштування"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Надіслати повідомлення"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Вкласти файл"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Довідка"</string>
-    <string name="welcome" msgid="2857560951820802321">"Вітаємо"</string>
-    <string name="skip" msgid="7238879696319945853">"Пропустити"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Далі &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Далі"</string>
-    <string name="exit" msgid="1905187380359981199">"Вийти"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Налаштування &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Налаштування"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Додатку Повідомлення потрібен доступ до SMS, телефона й контактів."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Щоб змінити дозволи, виберіть \"Налаштування\" &gt; \"Додатки\" &gt; \"Повідомлення\" &gt; \"Дозволи\"."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Щоб змінити дозволи, виберіть \"Налаштування\" &gt; \"Додатки\" &gt; \"Повідомлення\" &gt; \"Дозволи\"."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Найчастіше на зв’язку"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Усі контакти"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Надіслати на номер <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Зняти фото або відео"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Вибрати зображення на цьому пристрої"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Записати аудіо"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Вибрати фотографію"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Медіафайл вибрано."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Медіафайл не вибрано."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Вибрано <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"зображення: <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"зображення"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Записати аудіо"</string>
-    <string name="action_share" msgid="2143483844803153871">"Поділитися"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Щойно"</string>
-    <string name="posted_now" msgid="867560789350406701">"Зараз"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> хвилина</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> хвилини</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> хвилин</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> хвилини</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> година</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> години</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> годин</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> години</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> день</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> дні</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> днів</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> дня</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> тиждень</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> тижні</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> тижнів</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> тижня</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> місяць</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> місяці</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> місяців</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> місяця</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> рік</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> роки</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> років</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> року</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Повідомлення класу 0"</string>
-    <string name="save" msgid="5081141452059463572">"Зберегти"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"На пристрої замало місця. З додатка Повідомлення буде автоматично видалено старіші SMS, щоб звільнити місце."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Закінчується пам’ять"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Додаток Повідомлення не зможе надсилати й отримувати SMS, доки не звільниться місце на пристрої."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Недостатньо місця для SMS. Видаліть старі повідомлення."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Підтвердьте свій номер телефону"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Номер потрібен, щоб надсилати групові повідомлення. Його потрібно ввести лише один раз."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Номер телефону"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Видалити всі повідомлення з медіафайлами"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Видалити повідомлення, отримані понад <xliff:g id="DURATION">%s</xliff:g> тому"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Автоматично видаляти повідомлення, отримані понад <xliff:g id="DURATION">%s</xliff:g> тому"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ігнорувати"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Видалити всі повідомлення з медіафайлами?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Видалити повідомлення, отримані понад <xliff:g id="DURATION">%s</xliff:g> тому?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Видаляти повідомлення, отримані понад <xliff:g id="DURATION">%s</xliff:g> тому й увімкнути автоматичне видалення?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"Повідомлення від користувача <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Ваше повідомлення"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Повідомлення від користувача <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Ви надіслали повідомлення"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Надсилання…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Не надіслано. Торкніться, щоб повторити спробу."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Не надіслано. Повторна спроба…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Надіслати повторно або видалити"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Не вдалося надіслати текстове повідомлення в екстрену службу. Спробуйте зателефонувати."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Помилка"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Доступне нове MMS-повідомлення"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Нове MMS-повідомлення"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Не вдалося завантажити"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Торкніться, щоб повторити спробу"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Торкніться, щоб завантажити"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Завантажити або видалити"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Завантаження…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Повідомлення прострочене або недоступне"</string>
-    <string name="mms_info" msgid="3402311750134118165">"розмір: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, дійсне до: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Не вдається надіслати. Недійсний отримувач."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Послугу не активовано в мережі"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Не вдалося надіслати через проблему з мережею"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Повідомлення прострочене або недоступне"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Без теми)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Невідомий відправник"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Доставлено"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Не вдалося завантажити повідомлення з темою \"<xliff:g id="SUBJECT">%1$s</xliff:g>\" від користувача <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Не вдалося завершити дію з базою даних. Недостатньо пам’яті"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Повідомлення не надіслано"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Деякі повідомлення не надіслано"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> повідомлення в ланцюжках (<xliff:g id="CONVERSATIONS">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> повідомлення в ланцюжках (<xliff:g id="CONVERSATIONS">%d</xliff:g>)</item>
-      <item quantity="many"><xliff:g id="MESSAGES_1">%d</xliff:g> повідомлень у ланцюжках (<xliff:g id="CONVERSATIONS">%d</xliff:g>)</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> повідомлення в ланцюжках (<xliff:g id="CONVERSATIONS">%d</xliff:g>)</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Повідомлення не завантажено"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Деякі повідомлення не завантажено"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> повідомлення в ланцюжках (<xliff:g id="CONVERSATIONS">%d</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="MESSAGES_1">%d</xliff:g> повідомлення в ланцюжках (<xliff:g id="CONVERSATIONS">%d</xliff:g>)</item>
-      <item quantity="many"><xliff:g id="MESSAGES_1">%d</xliff:g> повідомлень у ланцюжках (<xliff:g id="CONVERSATIONS">%d</xliff:g>)</item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> повідомлення в ланцюжках (<xliff:g id="CONVERSATIONS">%d</xliff:g>)</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Повідомлення на номер <xliff:g id="NUMBER">%1$s</xliff:g> не надіслано"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Не вдалося надіслати текстове повідомлення на номер екстреної служби <xliff:g id="NUMBER">%1$s</xliff:g>. Спробуйте зателефонувати."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> нове повідомлення</item>
-      <item quantity="few"><xliff:g id="MESSAGES">%d</xliff:g> нові повідомлення</item>
-      <item quantity="many"><xliff:g id="MESSAGES">%d</xliff:g> нових повідомлень</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> нового повідомлення</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Почати"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Камера недоступна"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Камера недоступна"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Відеозйомка недоступна"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Не вдається зберегти медіафайли"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Не вдається сфотографувати"</string>
-    <string name="back" msgid="1477626055115561645">"Назад"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Архів"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Видалити"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Архів"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Розархівувати"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Вимкнути сповіщення"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Увімкнути сповіщення"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Додати контакт"</string>
-    <string name="action_download" msgid="7786338136368564146">"Завантажити"</string>
-    <string name="action_send" msgid="377635240181672039">"Надіслати"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Видалити"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Видалити це повідомлення?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Цю дію не можна скасувати."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Видалити"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Видалити ці ланцюжки повідомлень?</item>
-      <item quantity="few">Видалити ці ланцюжки повідомлень?</item>
-      <item quantity="many">Видалити ці ланцюжки повідомлень?</item>
-      <item quantity="other">Видалити ці ланцюжки повідомлень?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Видалити"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Скасувати"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Кому:"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Вибрати кілька зображень"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Підтвердити вибір"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Не вдається записати аудіо. Повторіть спробу."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Не вдається відтворити аудіо. Повторіть спробу."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Не вдалося зберегти аудіо. Повторіть спробу."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Натисніть і утримуйте"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Зображення"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Аудіокліп"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Відео"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Картка контакта"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Завантажити"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Відповісти за допомогою SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Надіслати MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Відповісти"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> учасник</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> учасники</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> учасників</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> учасника</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Я"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Користувача заблоковано та заархівовано"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Контакт розблоковано та розархівовано"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Заархівовано: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Розархівовано: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Сповіщення вимкнено"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Сповіщення ввімкнено"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Готово. Торкніться опції \"Надіслати\" знову."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Повідомлення тепер є додатком для SMS за умовчанням."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Видалити вкладені файли</item>
-      <item quantity="few">Видалити вкладені файли</item>
-      <item quantity="many">Видалити вкладені файли</item>
-      <item quantity="other">Видалити вкладені файли</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Вкладений аудіофайл"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Відтворити аудіовкладення"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Пауза"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Повідомлення від користувача <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Не вдалося надіслати повідомлення від користувача <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Повідомлення від користувача <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Ненадіслане повідомлення групі <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Надсилається повідомлення групі <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Не вдалося надіслати повідомлення групі <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Повідомлення групі <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Не вдалося надіслати повідомлення від користувача <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Повідомлення від користувача <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Ненадіслане повідомлення групі <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Надсилається повідомлення групі <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Не вдалося надіслати повідомлення групі <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Повідомлення групі <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Час: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Не вдалося надіслати повідомлення. Торкніться, щоб повторити спробу."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Учасники бесіди: <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Видалити тему"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Зняти відео"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Зняти статичне зображення"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Зробити знімок"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Почати запис відео"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Показувати зображення з камери на весь екран"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Переключатися між камерами на передній і задній панелях"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Зупинити запис і долучити відео"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Зупинити запис відео"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Фото з повідомлень"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> фотографію збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> фотографії збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> фотографій збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> фотографії збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> відео збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> відео збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> відео збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> відео збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> вкладений файл збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_2">%d</xliff:g> вкладені файли збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_2">%d</xliff:g> вкладених файлів збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> вкладеного файлу збережено в альбом \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> вкладений файл збережено в папку \"Завантаження\"</item>
-      <item quantity="few"><xliff:g id="QUANTITY_1">%d</xliff:g> вкладені файли збережено в папку \"Завантаження\"</item>
-      <item quantity="many"><xliff:g id="QUANTITY_1">%d</xliff:g> вкладених файлів збережено в папку \"Завантаження\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> вкладеного файлу збережено в папку \"Завантаження\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one">Збережено <xliff:g id="QUANTITY_1">%d</xliff:g> вкладений файл</item>
-      <item quantity="few">Збережено <xliff:g id="QUANTITY_1">%d</xliff:g> вкладені файли</item>
-      <item quantity="many">Збережено <xliff:g id="QUANTITY_1">%d</xliff:g> вкладених файлів</item>
-      <item quantity="other">Збережено <xliff:g id="QUANTITY_1">%d</xliff:g> вкладеного файлу</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Не вдалося зберегти <xliff:g id="QUANTITY_1">%d</xliff:g> вкладений файл</item>
-      <item quantity="few">Не вдалося зберегти <xliff:g id="QUANTITY_1">%d</xliff:g> вкладені файли</item>
-      <item quantity="many">Не вдалося зберегти <xliff:g id="QUANTITY_1">%d</xliff:g> вкладених файлів</item>
-      <item quantity="other">Не вдалося зберегти <xliff:g id="QUANTITY_1">%d</xliff:g> вкладеного файлу</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Вкладення з MMS збережено"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Налаштування"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Архів"</string>
-    <string name="action_close" msgid="1840519376200478419">"Закрити"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Додатково"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Налагодження"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Сповіщення"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Сигнал"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Без звуку"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Вібросигнал"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Заблоковано"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Звіти про доставку SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Запитувати звіт про доставку для кожного надісланого SMS"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Автоматичне отримання"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Автоматично отримувати MMS-повідомлення"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Автоотримання в роумінгу"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Автоматично отримувати MMS у роумінгу"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Групові повідомлення"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Використовуйте опцію MMS, щоб надсилати одне повідомлення декільком одержувачам"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Додаток для SMS за умовчанням"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Додаток для SMS за умовчанням"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Ваш номер телефону"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Невідомий"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Сигнали для вихідних повідомлень"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Записати дані SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Записати отримані вихідні дані SMS у файл зовнішньої пам’яті"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Записати дані MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Записати отримані вихідні дані MMS у файл зовнішньої пам’яті"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Сповіщення через бездротові мережі"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Параметри повідомлення"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Копіювати текст"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Переглянути деталі"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Видалити"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Переслати"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Деталі повідомлення"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Тип: "</string>
-    <string name="text_message" msgid="7415419755252205721">"SMS"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Мультимедійне повідомлення"</string>
-    <string name="from_label" msgid="1947831848146564875">"Від: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Кому: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Надіслано: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Отримано: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Тема: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Розмір: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Пріоритет: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM-карта: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Високий"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Звичайний"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Низький"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM-карта <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Прихована адреса відправника"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Неможливо надіслати повідомлення під час завантаження вкладених файлів."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Не вдається завантажити вкладений файл. Повторіть спробу."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Мережа не готова. Повторіть спробу."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Видалити текст"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Переключення між введенням тексту та числами"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Додати більше учасників"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Підтвердити учасників"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Почати нову бесіду"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Вибрати цей елемент"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Відтворити відео"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Учасники й опції"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Налагодження"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Учасники й опції"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Загальні"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Учасники цієї бесіди"</string>
-    <string name="action_call" msgid="6596167921517350362">"Телефонувати"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Надіслати повідомлення"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Надіслати повідомлення&lt;br/&gt;&lt;small&gt;із SIM-карти <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Надіслати фото</item>
-      <item quantity="few">Надіслати фото</item>
-      <item quantity="many">Надіслати фото</item>
-      <item quantity="other">Надіслати фото</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Надіслати аудіозаписи</item>
-      <item quantity="few">Надіслати аудіозаписи</item>
-      <item quantity="many">Надіслати аудіозаписи</item>
-      <item quantity="other">Надіслати аудіозаписи</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Надіслати відео</item>
-      <item quantity="few">Надіслати відео</item>
-      <item quantity="many">Надіслати відео</item>
-      <item quantity="other">Надіслати відео</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Надіслати картки контактів</item>
-      <item quantity="few">Надіслати картки контактів</item>
-      <item quantity="many">Надіслати картки контактів</item>
-      <item quantity="other">Надіслати картки контактів</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Надіслати вкладені файли</item>
-      <item quantity="few">Надіслати вкладені файли</item>
-      <item quantity="many">Надіслати вкладені файли</item>
-      <item quantity="other">Надіслати вкладені файли</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one">Можна надсилати <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> вкладений файл</item>
-      <item quantity="few">Можна надсилати <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> вкладені файли</item>
-      <item quantity="many">Можна надсилати <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> вкладених файлів</item>
-      <item quantity="other">Можна надсилати <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> вкладеного файлу</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Надіслати відгук"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Переглянути в магазині Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Інформація про версію"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Версія %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Ліцензії відкритого коду"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Сповіщення"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Ви вклали максимальну кількість файлів"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Не вдалося завантажити вкладений файл."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Додати в контакти?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Додати контакт"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Тема"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Тема: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g>. <xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Завантаження картки контакта"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Не вдалося завантажити картку контакта"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Переглянути картку контакта"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> контакт</item>
-      <item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> контакти</item>
-      <item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> контактів</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Картки контактів"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"День народження"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Нотатки"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Переслати повідомлення"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Відповісти"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS вимкнено"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Щоб надсилати SMS, зробіть Повідомлення додатком для SMS за умовчанням"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Зробіть Повідомлення додатком для SMS за умовчанням"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Змінити"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Щоб отримувати повідомлення, зробіть Повідомлення додатком для SMS за умовчанням"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Не вибрано основної SIM-карти для надсилання SMS-повідомлень"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Власник пристрою не надав дозволів для цього додатка."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ОК"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Забагато учасників у бесіді"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Недійсні контакти</item>
-      <item quantity="few">Недійсні контакти</item>
-      <item quantity="many">Недійсні контакти</item>
-      <item quantity="other">Недійсні контакти</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Не вдалося завантажити зображення з камери"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Ви: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Чернетка"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Коли ви почнете переписку, вона з’явиться тут"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Тут відображаються заархівовані бесіди"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Завантаження бесід…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Зображення"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Аудіокліп"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Відео"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Картка контакта"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Скасувати"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Повторити"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Щоб створити нове повідомлення, введіть ім’я контакта або номер телефону"</string>
-    <string name="action_block" msgid="9032076625645190136">"Заблокувати"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Блокувати користувача <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Розблокувати користувача <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Заблокувати номер <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Ви надалі отримуватимете повідомлення з цього номера, але не отримуватимете сповіщення. Цю бесіду буде заархівовано."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Заблоковані контакти"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"РОЗБЛОКУВАТИ"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Заблоковані контакти"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Вибрати зображення з бібліотеки документів"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Повідомлення надсилається"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Повідомлення надіслано"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Мобільне передавання даних вимкнено. Перевірте налаштування."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Не вдається надіслати повідомлення в режимі польоту"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Не вдалося надіслати повідомлення"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Повідомлення завантажено"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Мобільний Інтернет вимкнено. Перевірте налаштування."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Неможливо завантажити повідомлення в режимі польоту"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Не вдалося завантажити повідомлення"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Нуль"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Один"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Два"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Три"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Чотири"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"П’ять"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Шість"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Сім"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Вісім"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Дев’ять"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Не вдається надіслати повідомлення. Помилка <xliff:g id="ERRORCODE">%2$d</xliff:g>, оператор <xliff:g id="CARRIERNAME">%1$s</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Не вдається надіслати повідомлення. Помилка <xliff:g id="ERRORCODE">%1$d</xliff:g>, невідомий оператор"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Пересилання: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Повідомлення не надіслано: послугу не активовано в мережі"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Повідомлення не надіслано. Недійсна адреса одержувача"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Повідомлення не надіслано. Повідомлення недійсне"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Повідомлення не надіслано. Вміст не підтримується"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Повідомлення не надіслано. Повідомлення не підтримується"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Повідомлення не надіслано: текст задовгий"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Нове повідомлення"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Переглянути"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Зображення"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Не вдалося знайти відповідний додаток"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Видалити отримувача"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Нове повідомлення"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Скасувати"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Редагування точки доступу"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Не вказано"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Назва"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"Назва точки доступу"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Проксі MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Порт MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Тип назви точки доступу"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Видалити назву точки доступу"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Нова назва точки доступу"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Зберегти"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Відхилити"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Поле \"Назва\" не може бути порожнім."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Поле назви точки доступу не може бути порожнім."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Поле MCC має містити 3 цифри."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Поле MNC має містити 2 або 3 цифри."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Відновлення налаштувань назви точки доступу за умовчанням."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Відновити налаштування за умовчанням"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Налаштування назви точки доступу за умовчанням відновлено."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Без назви"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Назви точок доступу"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Назви точок доступу"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Нова назва точки доступу"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Цей користувач не може вказувати назву точки доступу"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Копіювати в буфер обміну?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Копіювати"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"на SIM-карту <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Загальні"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Розширені"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Загальні налаштування"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Додаткові налаштування"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM-карта \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Надсилати окремі SMS усім отримувачам. Відповіді надходитимуть лише вам"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Надсилати одне MMS усім отримувачам"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Невідомий номер"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Нове повідомлення"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Нове повідомлення."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Вибір SIM-карти"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Вибір SIM-карти: вибрано <xliff:g id="SIM_0">%1$s</xliff:g>"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Змінити тему"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Вибрати SIM-карту або змінити тему"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Торкніться й утримуйте, щоб записати аудіо"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Почати нову бесіду"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Повідомлення"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Список у додатку Повідомлення"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Повідомлення"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Нове повідомлення"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Список бесід"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Завантаження бесід"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Завантаження повідомлень"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Переглянути інші бесіди"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Переглянути більше повідомлень"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Бесіду видалено"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Бесіду видалено. Торкніться, щоб переглянути іншу бесіду в додатку Повідомлення"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Заблоковано"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Розблоковано"</string>
-    <string name="db_full" msgid="8459265782521418031">"Замало пам’яті. Деякі дані можуть не зберегтись."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Вибрати вкладені файли"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Підтвердити вибір"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Вибрано <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Видаліть один або декілька вкладених файлів і повторіть спробу."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Спробуйте надіслати повідомлення, але адресат може його не отримати, якщо ви не видалите один або декілька вкладених файлів."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"У повідомленні можна надіслати лише одне відео. Видаліть зайві відео та спробуйте знову."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Не вдалося завантажити вкладенні файли."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Усе одно надіслати"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Не вдалося почати бесіду"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Вибрано <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-ur/arrays.xml b/res/values-ur/arrays.xml
deleted file mode 100644
index fa4e5da..0000000
--- a/res/values-ur/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"بلا عنوان"</item>
-    <item msgid="272485471009191934">"بلا عنوان"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"ہاں"</item>
-    <item msgid="6049132459802288033">"نہیں"</item>
-    <item msgid="3084376867445867895">"ٹھیک ہے"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"شکریہ"</item>
-    <item msgid="4881335087096496747">"میں متفق ہوں"</item>
-    <item msgid="2422296858597420738">"اچھا"</item>
-    <item msgid="4805581752819452687">"راستے میں ہوں"</item>
-    <item msgid="4746700499431366214">"ٹھیک ہے، میں بعد میں آپ سے رابطہ کرتا ہوں"</item>
-    <item msgid="4342041517788201970">"‎:)‎"</item>
-    <item msgid="7439437911747961187">"‎:(‎"</item>
-  </string-array>
-</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
deleted file mode 100644
index 68217ca..0000000
--- a/res/values-ur/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"پیغام رسانی"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"پیغام رسانی"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"گفتگو منتخب کریں"</string>
-    <string name="action_settings" msgid="1329008122345201684">"ترتیبات"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"پیغام بھیجیں"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"ایک منسلکہ شامل کریں"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"مدد"</string>
-    <string name="welcome" msgid="2857560951820802321">"خوش آمدید"</string>
-    <string name="skip" msgid="7238879696319945853">"نظر انداز کریں"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"اگلا &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"آگے"</string>
-    <string name="exit" msgid="1905187380359981199">"باہر نکلیں"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"ترتیبات &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"ترتیبات"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"‏پیغام رسانی کو SMS، فون اور رابطوں کیلئے اجازت درکار ہے۔"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"آپ ترتیبات &gt; ایپس &gt; پیغام رسانی &gt; اجازتوں میں جا کر اجازتیں تبدیل کر سکتے ہیں۔"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"آپ ترتیبات، ایپس، پیغام رسانی، اجازتوں میں جا کر اجازتیں تبدیل کر سکتے ہیں۔"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"اکثر و بیشتر"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"سبھی رابطے"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"<xliff:g id="DESTINATION">%s</xliff:g> پر بھیجیں"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"تصاویر یا ویڈیو کیپچر کریں"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"اس آلہ سے تصاویر منتخب کریں"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"آڈیو ریکارڈ کریں"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"تصویر منتخب کریں"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"میڈیا منتخب کردہ ہے۔"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"میڈیا غیر منتخب کردہ ہے۔"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> کو منتخب کیا گیا"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"تصویر <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"تصویر"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"آڈیو ریکارڈ کریں"</string>
-    <string name="action_share" msgid="2143483844803153871">"اشتراک کریں"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"ابھی ابھی"</string>
-    <string name="posted_now" msgid="867560789350406701">"ابھی"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> منٹ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> منٹ</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> گھنٹے</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> گھنٹہ</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> دن</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> دن</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ہفتے</item>
-      <item quantity="one">ایک ہفتہ</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مہینے</item>
-      <item quantity="one">ایک ماہ</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> سال</item>
-      <item quantity="one">ایک سال</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"کلاس 0 پیغام"</string>
-    <string name="save" msgid="5081141452059463572">"محفوظ کریں"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"آلہ میں جگہ کم ہے۔ پیغام رسانی جگہ خالی کرنے کیلئے خودکار طریقے سے پرانے پیغامات حذف کر دے گی۔"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"اسٹوریج کی جگہ ختم ہو رہی ہے"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"جب تک آپ کے آلہ پر مزید جگہ دستیاب نہ ہو، ممکن ہے اس وقت تک پیغام رسانی نہ پیغامات بھیجے یا نہ موصول کرے۔"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"‏SMS کا کم اسٹوریج۔ آپ کو کچھ پیغامات کو حذف کرنے کی ضرورت پڑ سکتی ہے۔"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"اپنے فون نمبر کی توثیق کریں"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"یہ یک وقتی مرحلہ اس بات کو یقینی بنائے گا کہ پیغام رسانی آپ کے گروپ پیغامات کو مناسب طریقے سے ڈیلیور کرے گی۔"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"فون نمبر"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"میڈیا والے سبھی پیغامات کو حذف کریں"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g> سے پرانے پیغامات کو حذف کر دیں"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g> سے پہلے کے پیغامات کو خودکار طور پر حذف کریں"</string>
-    <string name="ignore" msgid="7063392681130898793">"نظر انداز کریں"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"میڈیا کے ساتھ سبھی پیغامات کو حذف کریں؟"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> سے پہلے کے پیغامات کو حذف کریں؟"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g> سے پہلے کے پیغامات کو حذف کریں اور خودکار طور پر حذف کرنے کو آن کریں؟"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> نے کہا"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"آپ نے کہا"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"پیغام منجانب <xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"آپ نے ایک پیغام بھیجا"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"بھیجا جا رہا ہے…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"بھیجا نہیں گیا۔ دوبارہ کوشش کرنے کیلئے ٹچ کریں۔"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"بھیجا نہیں گیا۔ دوبارہ کوشش کی جا رہی ہے…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"دوبارہ بھیجیں یا حذف کریں"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"براہ کرم ہنگامی سروسز کیلئے ایک صوتی کال کریں۔ آپ کا متنی پیغام اس وقت ڈیلیور نہیں کیا جا سکا۔"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"ناکام"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"‏ڈاؤن لوڈ کرنے کیلئے نیا MMS پیغام"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"‏نیا MMS پیغام"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"ڈاؤن لوڈ نہیں کیا جا سکا"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"دوبارہ کوشش کرنے کیلئے ٹچ کریں"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"ڈاؤن لوڈ کرنے کیلئے ٹچ کریں"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"ڈاؤن لوڈ کریں یا حذف کریں"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"ڈاؤن لوڈ ہو رہا ہے…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"پیغام کی میعاد ختم ہو گئی یا دستیاب نہیں ہے"</string>
-    <string name="mms_info" msgid="3402311750134118165">"سائز: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>، اختتامی میعاد: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"بھیجا نہیں جا سکتا۔ وصول کنندہ درست نہیں ہے۔"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"نیٹ ورک پر سروس فعال نہیں ہے"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"نیٹ ورک کے مسئلہ کی وجہ سے نہیں بھیجا جا سکا"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"پیغام کی میعاد ختم ہو گئی یا دستیاب نہیں ہے"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(بلا عنوان)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"نامعلوم ارسال کنندہ"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"ڈیلیور ہو گیا"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"پیغام <xliff:g id="SUBJECT">%1$s</xliff:g> کو <xliff:g id="FROM">%2$s</xliff:g> سے ڈاؤن لوڈ نہیں کیا جا سکا۔"</string>
-    <string name="low_memory" msgid="5300743415198486619">"کم میموری کی وجہ سے ڈیٹا بیس کی کارروائی مکمل نہیں ہو سکی"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"پیغام نہیں بھیجا گیا"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"پیغام رسانی میں کچھ پیغامات کو نہیں بھیجا گیا"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"> <xliff:g id="CONVERSATIONS">%d</xliff:g> گفتگوؤں میں <xliff:g id="MESSAGES_1">%d</xliff:g> پیغامات</item>
-      <item quantity="one">ایک گفتگو میں <xliff:g id="MESSAGES_0">%d</xliff:g> پیغامات</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"پیغام ڈاؤن لوڈ نہیں ہوا"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"پیغام رسانی میں کچھ پیغامات ڈاؤن لوڈ نہیں ہوئے"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"> <xliff:g id="CONVERSATIONS">%d</xliff:g> گفتگوؤں میں <xliff:g id="MESSAGES_1">%d</xliff:g> پیغامات</item>
-      <item quantity="one"> ایک گفتگو میں <xliff:g id="MESSAGES_0">%d</xliff:g> یغامات</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> پر پیغام نہیں بھیجا گیا"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"براہ کرم ہنگامی سروسز کیلئے ایک صوتی کال کریں۔ <xliff:g id="NUMBER">%1$s</xliff:g> پر آپ کا متنی پیغام اس وقت ڈیلیور نہیں کیا جا سکا۔"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> نئے پیغامات</item>
-      <item quantity="one">نیا پیغام</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"شروع کریں"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"کیمرہ دستیاب نہیں ہے"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"کیمرہ دستیاب نہیں ہے"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"ویڈیو کیپچر دستیاب نہیں ہے"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"میڈیا کو محفوظ نہیں کیا جا سکتا ہے"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"تصویر نہیں لی جا سکتی"</string>
-    <string name="back" msgid="1477626055115561645">"واپس جائیں"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"آرکائیو کردہ"</string>
-    <string name="action_delete" msgid="4076795795307486019">"حذف کریں"</string>
-    <string name="action_archive" msgid="5437034800324083170">"آرکائیو کریں"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"آرکائیو سے نکالیں"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"اطلاعات آف کریں"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"اطلاعات آن کریں"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"رابطہ شامل کریں"</string>
-    <string name="action_download" msgid="7786338136368564146">"ڈاؤن لوڈ کریں"</string>
-    <string name="action_send" msgid="377635240181672039">"بھیجیں"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"حذف کریں"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"یہ پیغام حذف کریں؟"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"اس عمل کو کالعدم نہیں کیا جاسکتا۔"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"حذف کریں"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">ان گفتگوؤں کو حذف کریں؟</item>
-      <item quantity="one">اس گفتگو کو حذف کریں؟</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"حذف کریں"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"منسوخ کریں"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"بنام"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"متعدد تصاویر منتخب کریں"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"انتخاب کی توثیق کریں"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"‎+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"آڈیو کو ریکارڈ نہیں کیا جا سکتا ہے۔ دوبارہ کوشش کریں۔"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"آڈیو کو چلایا نہیں جا سکتا ہے۔ دوبارہ کوشش کریں۔"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"آڈیو کو محفوظ نہیں کیا جا سکا۔ دوبارہ کوشش کریں۔"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"ٹچ کریں اور دبائے رکھیں"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">"، "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"تصویر"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"آڈیو کلپ"</string>
-    <string name="notification_video" msgid="4331423498662606204">"ویڈیو"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"رابطہ کارڈ"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"ڈاؤن لوڈ کریں"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"‏SMS کے ذریعے جواب دیں"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"‏MMS کے ذریعے جواب دیں"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"جواب دیں"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> شرکت کنندگان</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> شرکت کنندہ</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"میں"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"رابطہ کو مسدود اور آرکائیو کر دیا گیا"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"رابطہ کو غیر مسدود کر دیا گیا اور آرکائیو سے نکال دیا گیا"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> کو آرکائیو کر دیا گیا"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> کو آرکائیو سے نکال دیا گیا"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"اطلاعات آف کر دی گئیں"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"اطلاعات آن کر دی گئیں"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"سب ٹھیک ہے۔ بھیجیں کو دوبارہ ٹچ کریں۔"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"‏پیغام رسانی کامیابی سے بطور ڈیفالٹ SMS ایپ سیٹ ہو گئی۔"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">منسلکہ جات کو مسترد کریں</item>
-      <item quantity="one">منسلکہ کو مسترد کریں</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"آڈیو منسلکہ"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"آڈیو منسلکہ چلائیں"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"موقوف کریں"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"پیغام منجانب <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"ناکام پیغام منجانب <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"پیغام منجانب <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"غیر ارسال کردہ پیغام بنام <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"پیغام بھیجا جا رہا ہے بنام <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"ناکام پیغام بنام <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"پیغام بنام <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"ناکام پیغام منجانب <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔ <xliff:g id="GROUPINFO">%4$s</xliff:g>۔"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"پیغام منجانب <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔ <xliff:g id="GROUPINFO">%4$s</xliff:g>۔"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"غیر ارسال کردہ پیغام بنام <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"پیغام بھیجا جا رہا ہے بنام <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"ناکام پیغام بنام <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"پیغام بنام <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>۔ وقت: <xliff:g id="TIME">%3$s</xliff:g>۔"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"ناکام پیغام۔ دوبارہ کوشش کرنے کیلئے ٹچ کریں۔"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> کے ساتھ گفتگو"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"موضوع حذف کریں"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"ویڈیو کیپچر کریں"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"ایک ساکت تصویر کیپچر کریں"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"تصویر لیں"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"ویڈیو ریکارڈ کرنا شروع کریں"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"پوری اسکرین کے کیمرہ پر سوئچ کریں"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"سامنے اور پیچھے کے کیمرے کے درمیان سوئچ کریں"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"ریکارڈنگ بند کریں اور ویڈیو منسلک کریں"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"ویڈیو ریکارڈ کرنے کو روکیں"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"پیغام رسانی تصاویر"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> تصاویر \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" البم میں محفوظ ہو گئیں</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> تصویر \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" البم میں محفوظ ہو گئی</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ویڈیوز \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" البم میں محفوظ ہو گئیں</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ویڈیو \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" البم میں محفوظ ہو گئی</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> منسلکہ جات \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\" البم میں محفوظ ہو گئیں</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> منسلکہ \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\" البم میں محفوظ ہو گئی</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> منسلکہ جات \'ڈاؤن لوڈز\' میں محفوظ ہو گئیں</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> منسلکہ \'ڈاؤن لوڈز\' میں محفوظ ہو گئی</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> منسلکہ جات کو محفوظ کر دیا گیا</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> منسلکہ کو محفوظ کر دیا گیا</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"> <xliff:g id="QUANTITY_1">%d</xliff:g> منسلکہ جات کو محفوظ نہیں کیا جا سکا</item>
-      <item quantity="one"> <xliff:g id="QUANTITY_0">%d</xliff:g> منسلکہ کو محفوظ نہیں کیا جا سکا</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"‏MMS منسلکہ کو محفوظ کر دیا گیا"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"ترتیبات"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"آرکائیو کردہ"</string>
-    <string name="action_close" msgid="1840519376200478419">"بند کریں"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"جدید ترین"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"ڈیبگ کریں"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"اطلاعات"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"آواز"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"خاموش"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"وائبریٹ"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"مسدود"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"‏SMS ڈیلیوری کی رپورٹس"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"‏اپنے ذریعہ بھیجے جانے والے ہر SMS کی ایک ڈیلیوری رپورٹ کی درخواست کریں"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"خودکار طور پر بازیافت کریں"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"‏خود کار طور پر MMS پیغامات کی بازیابی کریں"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"رومنگ کے وقت خود کار بازیابی"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"‏رومنگ میں رہتے ہوئے MMS کی خود کار طور پر بازيابی کریں"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"گروپ پیغام رسانی"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"‏متعدد وصول کنندگان ہونے کی صورت میں ایک پیغام بھیجنے کیلئے MMS استعمال کریں"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"‏ڈیفالٹ SMS ایپ"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"‏ڈیفالٹ SMS ایپ"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"آپ کا فون نمبر"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"نامعلوم"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"آؤٹ گوئنگ پیغامات کی آوازیں"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"‏SMS کو ڈمپ کریں"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"‏وصول کردہ SMS خام ڈیٹا کو خارجی اسٹوریج فائل میں ڈمپ کریں"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"‏MMS کو ڈمپ کریں"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"‏وصول کردہ MMS خام ڈیٹا کو خارجی اسٹوریج فائل میں ڈمپ کریں"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"وائرلیس الرٹس"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"پیغام کے اختیارات"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"متن کاپی کریں"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"تفصیلات دیکھیں"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"حذف کریں"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"فارورڈ کریں"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"پیغام کی تفصیلات"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"قسم: "</string>
-    <string name="text_message" msgid="7415419755252205721">"متنی پیغام"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"ملٹی میڈیا پیغام"</string>
-    <string name="from_label" msgid="1947831848146564875">"منجانب: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"بنام: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"ارسال کردہ: "</string>
-    <string name="received_label" msgid="4442494712757995203">"موصول کردہ: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"موضوع: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"سائز: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"ترجیح: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM:‎ "</string>
-    <string name="priority_high" msgid="728836357310908368">"اعلی"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"عام"</string>
-    <string name="priority_low" msgid="7398724779026801851">"کم"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>‎"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"ارسال کنندہ کا پتہ مخفی کر دیا گیا"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"منسلکات کو لوڈ کرتے وقت پیغام نہیں بھیجا جا سکتا۔"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"منسلکہ کو لوڈ نہیں کیا جا سکتا۔ دوبارہ کوشش کریں۔"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"نیٹ ورک تیار نہیں ہے۔ دوبارہ کوشش کریں۔"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"متن کو حذف کریں"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"متن اور اعداد درج کرنے کے بیچ سوئچ کریں"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"مزید شرکاء کو شامل کریں"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"شرکاء کی توثیق کریں"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"نئی گفتگو شروع کریں"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"اس آئٹم کو منتخب کریں"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"ویڈیو چلائیں"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"لوگ اور اختیارات"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"ڈیبگ کریں"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"لوگ اور اختیارات"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"عام"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"اس گفتگو میں موجود لوگ"</string>
-    <string name="action_call" msgid="6596167921517350362">"ایک کال کریں"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"پیغام بھیجیں"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"‏پیغام بھیجیں‎&lt;br/&gt;&lt;small&gt;‎از <xliff:g id="SIM_NAME">%s</xliff:g>‎&lt;/small&gt;‎"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">تصاویر بھیجیں</item>
-      <item quantity="one">تصویر بھیجیں</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">آڈیوز بھیجیں</item>
-      <item quantity="one">آڈیو بھیجیں</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">ویڈیوز بھیجیں</item>
-      <item quantity="one">ویڈیو بھیجیں</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">رابطہ کارڈز بھیجیں</item>
-      <item quantity="one">رابطہ کارڈ بھیجیں</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">منسلکہ جات بھیجیں</item>
-      <item quantity="one">منسلکہ بھیجیں</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> منسلکہ جات بھیجنے کیلئے تیار</item>
-      <item quantity="one">ایک منسلکہ بھیجنے کیلئے تیار</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"تاثرات بھیجیں"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"‏Google Play اسٹور میں دیکھیں"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"ورژن کی معلومات"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"‏ورژن ‎%1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"اوپن سورس لائسنسز"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"اطلاعات"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"منسلکہ کی حد تک پہنچ گئے"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"منسلکہ لوڈ کرنے میں ناکام۔"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"رابطوں میں شامل کریں؟"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"رابطہ شامل کریں"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"موضوع"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"موضوع: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"‎<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>‎"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"رابطہ کارڈ لوڈ کر رہا ہے"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"رابطہ کارڈ کو لوڈ نہیں کیا جا سکا"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"رابطہ کارڈ دیکھیں"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> رابطے</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> رابطہ</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"رابطہ کارڈز"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"سالگرہ"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"نوٹس"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"پیغام فارورڈ کریں"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"جواب دیں"</string>
-    <string name="plus_one" msgid="9010288417554932581">"‎+1‎"</string>
-    <string name="plus_n" msgid="8961547034116059566">"‎+%d‎"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"‏SMS غیر فعال ہے"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"‏بھیجنے کیلئے پیغام رسانی کو بطور ڈیفالٹ SMS ایپ سیٹ کریں"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"‏پیغام رسانی کو بطور ڈیفالٹ SMS ایپ سیٹ کریں"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"تبدیل کریں"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"‏پیغامات موصول کرنے کیلئے پیغام رسانی کو بطور ڈیفالٹ SMS ایپ سیٹ کریں"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"‏SMS پیغامات بھیجنے کیلئے کوئی ترجیحی SIM منتخب نہیں کیا گیا"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"آلہ کے مالک نے اس ایپ کی اجازت نہیں دی ہے۔"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"ٹھیک ہے"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"ایک گفتگو میں بہت زیادہ شرکاء"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">غلط رابطے</item>
-      <item quantity="one">غلط رابطہ</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"کیمرے کی تصویر کو لوڈ نہیں کیا جا سکا"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"آپ: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"‎<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>:‎ "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"مسودہ"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"کوئی نئی گفتگو شروع کرنے پر، آپ اسے یہاں مندرج دیکھیں گے"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"آرکائیو کردہ گفتگوئیں یہاں ظاہر ہوتی ہیں"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"گفتگوئیں لوڈ ہو رہی ہیں…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"تصویر"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"آڈیو کلپ"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"ویڈیو"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"رابطہ کارڈ"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"کالعدم کریں"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"دوبارہ کوشش کریں"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"ایک نیا پیغام شروع کرنے کیلئے رابطہ کا ایک نام یا فون نمبر درج کریں"</string>
-    <string name="action_block" msgid="9032076625645190136">"مسدود کریں"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"<xliff:g id="DESTINATION">%s</xliff:g> کو مسدود کریں"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"<xliff:g id="DESTINATION">%s</xliff:g> کو غیر مسدود کریں"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> کو مسدود کریں؟"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"آپ کو اس نمبر سے پیغامات موصول ہوتے رہیں گے لیکن مزید مطلع نہیں کیا جائے گا۔ اس گفتگو کو آرکائیو کر دیا جائے گا۔"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"مسدود رابطے"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"غیر مسدود کریں"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"مسدود رابطے"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"دستاویز لائبریری سے تصویر منتخب کریں"</string>
-    <string name="sending_message" msgid="6363584950085384929">"پیغام بھیجا جا رہا ہے"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"پیغام بھیج دیا گیا"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"سیلولر ڈیٹا آف ہے۔ اپنی ترتیبات چیک کریں۔"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"پیغامات کو ہوائی جہاز وضع میں نہیں بھیجا جا سکتا ہے"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"پیغام بھیجا نہیں جا سکا"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"پیغام ڈاؤن لوڈ ہو گیا"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"سیلولر ڈیٹا آف ہے۔ اپنی ترتیبات چیک کریں۔"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"ہوائی جہاز وضع میں پیغامات ڈاؤن لوڈ نہیں کیے جا سکتے ہیں"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"پیغام ڈاؤن لوڈ نہیں کیا جا سکا"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"صفر"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"ایک"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"دو"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"تین"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"چار"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"پانچ"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"چھ"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"سات"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"آٹھ"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"نو"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> کے ساتھ پیغام نہیں بھیجا جا سکتا، خرابی <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"نامعلوم کیرئیر کے ساتھ پیغام نہیں بھیجا جا سکتا، خرابی <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"آگے منتقل کریں: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"پیغام نہیں بھیجا گیا: سروس نیٹ ورک پر فعال نہیں ہے"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"پیغام نہیں بھیجا گیا: منزل مقصول کا غلط پتہ"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"پیغام نہیں بھیجا گیا: غلط پیغام"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"پیغام نہیں بھیجا گیا: غیر تعاون یافتہ مواد"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"پیغام کو نہیں بھیجا گیا: غیر تعاون یافتہ پیغام"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"پیغام نہیں بھیجا گیا: کافی بڑا ہے"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"نیا پیغام"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"دیکھیں"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"تصویر"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"ایک مناسب ایپلیکیشن تلاش نہیں کی جا سکی"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"وصول کنندہ کو ہٹائیں"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"نیا پیغام"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"منسوخ کریں"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"رسائی کی جگہ میں ترمیم کریں"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"سیٹ نہیں ہے"</string>
-    <string name="apn_name" msgid="1572691851070894985">"نام"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"‏MMS پراکسی"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"‏MMS پورٹ"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"‏APN قسم"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"‏APN کو حذف کریں"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"‏نیا APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"محفوظ کریں"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"مسترد کریں"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"نام کی فیلڈ خالی نہیں رہ سکتی-"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"‏APN خالی نہيں رہ سکتا۔"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"‏MCC فیلڈ میں 3 ہندسے ہونا ضروری ہے۔"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"‏MNC فیلڈ میں 2 یا 3 ہندسے ہونا ضروری ہے-"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"‏ڈیفالٹ APN ترتیبات بحال ہو رہی ہیں-"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"ڈیفالٹ پر دوبارہ ترتیب دیں"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"‏ڈیفالٹ APN ترتیبات کو دوبارہ ترتیب دینے کا عمل مکمل ہو گیا-"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"بلا عنوان"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"رسائی کی جگہ کے نام"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APNs"</string>
-    <string name="menu_new" msgid="8286285392706532511">"‏نیا APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"رسائی کی جگہ کے نام کی ترتیبات اس صارف کیلئے دستیاب نہیں ہیں"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"کلپ بورڈ پر کاپی کریں؟"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"کاپی کریں"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"<xliff:g id="SIM_NAME">%s</xliff:g> پر"</string>
-    <string name="general_settings" msgid="5409336577057897710">"عام"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"جدید ترین"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"عام ترتیبات"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"جدید ترین ترتیبات"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"‎\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM‎"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"‏سبھی وصول کنندگان کو انفرادی SMS پیغامات بھیجیں۔ صرف آپ کو کوئی جوابات موصول ہوں گے"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"‏سبھی وصول کنندگان کو ایک MMS بھیجیں"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"نامعلوم نمبر"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"نیا پیغام"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"نیا پیغام۔"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"‏SIM کا انتخاب کنندہ"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"‏منتخب شدہ <xliff:g id="SIM_0">%1$s</xliff:g>، SIM کا انتخاب کنندہ"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"موضوع میں ترمیم کریں"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"‏SIM منتخب کریں یا موضوع میں ترمیم کریں"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"آڈیو ریکارڈ کرنے کیلئے ٹچ کریں اور پکڑ کر رکھیں"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"نئی گفتگو شروع کریں"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"پیغام رسانی"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"پیغام رسانی کی فہرست"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"پیغام رسانی"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"نیا پیغام"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"گفتگو کی فہرست"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"گفتگوئیں لوڈ ہو رہی ہیں"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"پیغامات لوڈ ہو رہے ہیں"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"مزید گفتگوئیں دیکھیں"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"مزید پیغامات دیکھیں"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"گفتگو کو حذف کر دیا گیا"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"گفتگو حذف ہوگئی۔ پیغام رسانی کی ایک دوسری گفتگو دکھانے کیلئے ٹچ کریں"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"مسدود"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"غیر مسدود"</string>
-    <string name="db_full" msgid="8459265782521418031">"اسٹوریج کی جگہ کم ہے۔ کچھ ڈیٹا ضائع ہو سکتا ہے۔"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"منسلکات منتخب کریں"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"انتخاب کی توثیق کریں"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> کو منتخب کیا گیا"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"براہ کرم ایک یا مزید منسلکات ہٹائیں اور دوبارہ کوشش کریں۔"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"آپ اپنا پیغام بھیجنے کی کوشش کر سکتے ہیں، لیکن ہو سکتا ہے وہ تب تک ڈیلیور نہ ہو جب تک کہ آپ ایک یا مزيد منسلکات نہیں ہٹا دیتے۔"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"آپ فی پیغام صرف ایک ویڈیو بھیج سکتے ہیں۔ براہ کرم اضافی ویڈیوز ہٹائیں اور دوبارہ کوشش کریں۔"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"پیغام رسانی منسلکہ کو لوڈ کرنے میں ناکام رہی۔"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"بہر صورت بھیجیں"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"گفتگو شروع نہیں کی جا سکی"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> منتخب کردہ"</string>
-</resources>
diff --git a/res/values-uz/arrays.xml b/res/values-uz/arrays.xml
deleted file mode 100644
index 79b4c47..0000000
--- a/res/values-uz/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"mavzu yo‘q"</item>
-    <item msgid="272485471009191934">"mavzu yo‘q"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Ha"</item>
-    <item msgid="6049132459802288033">"Yo‘q"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Ha-ha"</item>
-    <item msgid="2611328818571146775">"Rahmat"</item>
-    <item msgid="4881335087096496747">"Yaxshi"</item>
-    <item msgid="2422296858597420738">"Ajoyib"</item>
-    <item msgid="4805581752819452687">"Yo‘ldaman"</item>
-    <item msgid="4746700499431366214">"OK, keyinroq telefon qilaman"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
deleted file mode 100644
index 4d84ca1..0000000
--- a/res/values-uz/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Xabarlar"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Xabarlar"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Suhbatni tanlang"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Sozlamalar"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Xabar yuborish"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Fayl biriktiring"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Yordam"</string>
-    <string name="welcome" msgid="2857560951820802321">"Xush kelibsiz"</string>
-    <string name="skip" msgid="7238879696319945853">"O’tkazib yuborish"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Keyingi &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Keyingi"</string>
-    <string name="exit" msgid="1905187380359981199">"Chiqish"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Sozlamalar &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Sozlamalar"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"SMS/MMS xizmatiga SMS, Telefon va Kontaktlardan foydalanish uchun ruxsat zarur."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Ruxsatnomalarni bu yerdan o‘zgartiring: Sozlamalar &gt; Ilovalar &gt; SMS/MMS &gt; Ruxsatnomalar"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Ruxsatnomalarni bu yerdan o‘zgartiring: Sozlamalar &gt; Ilovalar &gt; SMS/MMS &gt; Ruxsatnomalar"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Tez-tez"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Barcha kontaktlar"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Yuborish: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Rasm yoki video tasvirga olish"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Ushbu qurilmadan rasmlarni tanlang"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Audio yozish"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Rasmni tanlang"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Media tanlandi."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Mediani tanlash bekor qilindi."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> ta tanlandi"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"tasvir <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"tasvir"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Audio yozish"</string>
-    <string name="action_share" msgid="2143483844803153871">"Ulashish"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Hozir"</string>
-    <string name="posted_now" msgid="867560789350406701">"Hozir"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> daqiqa</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> daqiqa</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> soat</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> soat</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kun</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kun</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> hafta</item>
-      <item quantity="one">bir hafta</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> oy</item>
-      <item quantity="one">bir oy</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> yil</item>
-      <item quantity="one">bir yil</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"0-toifa xabari"</string>
-    <string name="save" msgid="5081141452059463572">"Saqlash"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Qurilma xotirasidagi bo‘sh joy kam qolmoqda. Joy bo‘shatish uchun eskiroq xabarlar avtomatik o‘chirib tashlanadi."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Xotirada bo‘sh joy tugamoqda"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Qurilmangizda bo‘sh joy kam qolsa, SMS/MMS xizmati xabarlarni yubora yoki qabul qila olmay qolishi mumkin."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"SMS uchun xotirada joy kam. Sizdan ba’zi xabarlarni o‘chirish talab qilinishi mumkin."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Telefon raqamingizni tasdiqlang"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Bu bir martalik bosqich bajarilsa, SMS/MMS xizmati guruh xabarlarini to‘g‘ri yuboradigan bo‘ladi."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Telefon raqami"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Barcha multimediali xabarlarni o‘chirish"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"<xliff:g id="DURATION">%s</xliff:g>dan eski xabarlar o‘chirilsin"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"<xliff:g id="DURATION">%s</xliff:g>dan oldingi xabarlar avtomatik o‘chirilsin"</string>
-    <string name="ignore" msgid="7063392681130898793">"E’tiborsiz qoldirish"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Media faylli barcha xabarlar o‘chirib tashlansinmi?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"<xliff:g id="DURATION">%s</xliff:g> dan oldingi barcha xabarlar o‘chirib tashlansinmi?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"<xliff:g id="DURATION">%s</xliff:g>dan oldingi xabarlar o‘chirilib, avtomatik o‘chirish funksiyasi yoqilsinmi?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> dedi"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Siz dedingiz"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"<xliff:g id="SENDER">%s</xliff:g> yuborgan xabar"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Siz xabar yubordingiz"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Yuborilmoqda…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Yuborilmadi. Qayta urinish uchun bosing."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Yuborilmadi. Qayta urinilmoqda…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Qayta yuboring yoki o‘chirib tashlang"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Favqulodda xizmatlarga ovozli qo‘ng‘iroq qiling. Favqulodda xizmat raqamlariga yuborilgan SMS xabarlarni hozirda yetkazib bo‘lmaydi."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Xabar yuborilmadi"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Yuklab olish uchun yangi MMS xabari"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Yangi MMS xabari"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Yuklab olinmadi"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Qayta urinish uchun bosing"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Yuklab olish uchun bosing"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Yuklab oling yoki o‘chirib tashlang"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Yuklab olinmoqda…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Xabar eskirgan yoki mavjud emas"</string>
-    <string name="mms_info" msgid="3402311750134118165">"hajmi: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, tugash muddati: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Yuborib bo‘lmadi. Qabul qiluvchi noto‘g‘ri ko‘rsatilgan."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Xizmat tarmoqda faollashtirilmagan"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Tarmoqdagi muammo tufayli yuborib bo‘lmadi"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Xabar eskirgan yoki mavjud emas"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Mavzu yo‘q)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Noma’lum yuboruvchi"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Yetkazildi"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"“<xliff:g id="SUBJECT">%1$s</xliff:g>” to‘g‘risidagi xabarni (yuboruvchi: <xliff:g id="FROM">%2$s</xliff:g>) yuklab bo‘lmadi."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Xotirada kam joy qolganligi sababli ma’lumotlar bazasi amalini bajarib bo‘lmaydi"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Xabar yuborilmadi"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"SMS/MMS xizmatidagi ayrim xabarlar yuborilmadi"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other">Suhbatlar: <xliff:g id="CONVERSATIONS">%d</xliff:g>, xabarlar: <xliff:g id="MESSAGES_1">%d</xliff:g></item>
-      <item quantity="one">Suhbatdagi xabarlar soni: <xliff:g id="MESSAGES_0">%d</xliff:g></item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Xabar yuklab olinmadi"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"SMS/MMS xizmatidagi ayrim xabarlar yuklab olinmadi"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other">Suhbatlar: <xliff:g id="CONVERSATIONS">%d</xliff:g>, xabarlar: <xliff:g id="MESSAGES_1">%d</xliff:g></item>
-      <item quantity="one">Suhbatdagi xabarlar soni: <xliff:g id="MESSAGES_0">%d</xliff:g></item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"<xliff:g id="NUMBER">%1$s</xliff:g> raqamiga xabar yuborilmadi"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Favqulodda xizmatlarga ovozli qo‘ng‘iroq qiling. <xliff:g id="NUMBER">%1$s</xliff:g> raqamiga yuborgan SMS xabaringizni hozir yetkazib bo‘lmaydi."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> ta yangi xabar</item>
-      <item quantity="one">Yangi xabar</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Boshlash"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Kamera tayyor emas"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Kamera tayyor emas"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Videoga olib bo‘lmaydi"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Media faylni saqlab bo‘lmadi"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Rasmga olib bo‘lmadi"</string>
-    <string name="back" msgid="1477626055115561645">"Orqaga"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Arxivlangan"</string>
-    <string name="action_delete" msgid="4076795795307486019">"O‘chirish"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Arxivlash"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Arxivdan chiqarish"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Bildirishnomalarni o‘chirib qo‘yish"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Bildirishnomalarni yoqish"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Kontakt qo‘shish"</string>
-    <string name="action_download" msgid="7786338136368564146">"Yuklab olish"</string>
-    <string name="action_send" msgid="377635240181672039">"Yuborish"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"O‘chirish"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Ushbu xabar o‘chirilsinmi?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Ushbu amalni bekor qilib bo‘lmaydi."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"O‘chirish"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Bu suhbatlar o’chirib tashlansinmi?</item>
-      <item quantity="one">Bu suhbat o’chirib tashlansinmi?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"O‘chirish"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Bekor qilish"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Kimga:"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Bir nechta rasm tanlash"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Tanlovni tasdiqlash"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g> ta"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Audioni yozib bo‘lmadi. Qaytadan urining."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Audioni ijro qilib bo‘lmadi. Qaytadan urining."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Audioni saqlab bo‘lmadi. Qaytadan urining."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Bosib turing"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Rasm"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Audio-klip"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Kontaktlar kartasi"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Yuklab olish"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"SMS orqali javob berish"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"MMS orqali javob"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Javob berish"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ta ishtirokchi</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ta ishtirokchi</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Men"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Kontakt bloklandi va arxivlandi"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Kontakt blokdan va arxivdan chiqarildi"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> ta qayd arxivlandi"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> ta qayd arxivdan chiqarildi"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Bildirishnomalar o‘chirib qo‘yildi"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Bildirishnomalar yoqildi"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Hammasi tayyor. Endi “Yuborish” tugmasini bosing."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"SMS/MMS xizmati birlamchi SMS ilovasi sifatida o‘rnatildi."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Biriktirmalarni olib tashlash</item>
-      <item quantity="one">Biriktirmani olib tashlash</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Ovozli biriktirma"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Audio biriktirmani ijro qilish"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"To‘xtatib turish"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g> yuborgan xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g> yuborgan muvaffaqiyatsiz xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g> yuborgan xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"<xliff:g id="CONTACT">%1$s</xliff:g>ga yuborilmay qolgan xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"<xliff:g id="CONTACT">%1$s</xliff:g>ga xabar yuborilmoqda: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"<xliff:g id="CONTACT">%1$s</xliff:g>ga yuborilgan muvaffaqiyatsiz xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"<xliff:g id="CONTACT">%1$s</xliff:g>ga xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g> yuborgan muvaffaqiyatsiz xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g> yuborgan xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"<xliff:g id="GROUP">%1$s</xliff:g> guruhiga yuborilmay qolgan xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"<xliff:g id="GROUP">%1$s</xliff:g> guruhiga xabar yuborilmoqda: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"<xliff:g id="GROUP">%1$s</xliff:g> guruhiga yuborilgan muvaffaqiyatsiz xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"<xliff:g id="GROUP">%1$s</xliff:g> guruhiga xabar: <xliff:g id="MESSAGE">%2$s</xliff:g>. Vaqt: <xliff:g id="TIME">%3$s</xliff:g>"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Muvaffaqiyatsiz xabar. Qayta urinish uchun bosing."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"<xliff:g id="PARTICIPANTS">%s</xliff:g> bilan suhbat"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Mavzuni o‘chirish"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Video tasvirga olish"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Harakatsiz rasmni suratga olish"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Rasmga olish"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Video tasvirga olishni boshlash"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"To‘liq ekranli kameraga o‘tish"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Old va orqa kamera o‘rtasida almashish"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Tasvirga olishni to‘xtatish va faylni biriktirish"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Videoga olishni to‘xtatish"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"SMS/MMS rasmlari"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ta rasm “<xliff:g id="ALBUMNAME_3">%s</xliff:g>” albomiga saqlandi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ta rasm “<xliff:g id="ALBUMNAME_1">%s</xliff:g>” albomiga saqlandi</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ta video “<xliff:g id="ALBUMNAME_3">%s</xliff:g>” albomiga saqlandi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ta video “<xliff:g id="ALBUMNAME_1">%s</xliff:g>” albomiga saqlandi</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ta biriktirma “<xliff:g id="ALBUMNAME_3">%s</xliff:g>” albomiga saqlandi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ta biriktirma “<xliff:g id="ALBUMNAME_1">%s</xliff:g>” albomiga saqlandi</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ta biriktirma “Yuklanishlar” jildiga saqlandi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ta biriktirma “Yuklanishlar” jildiga saqlandi</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ta biriktirma saqlandi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ta biriktirma saqlandi</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> ta biriktirmani saqlab bo’lmadi</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ta biriktirmani saqlab bo’lmadi</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"MMS fayli saqlandi"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Sozlamalar"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Arxivlangan"</string>
-    <string name="action_close" msgid="1840519376200478419">"Yopish"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Qo‘shimcha"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Tuzatish"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Bildirishnomalar"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Ovoz"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Ovozsiz"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Tebranish"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Bloklandi"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"SMS xabarlarning yetkazilganlik hisobotlari"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Yuborilgan har bir SMS uchun yetkazilganlik hisobotini talab qilish"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Avtomatik yuklanish"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"MMS xabarlarni avtomatik yuklab olish"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Rouming vaqtida avtomatik yuklab olish"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Rouming vaqtida MMS xabarlarni avtomatik yuklab olish"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Guruh xabarlari"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Bitta xabarni bir nechta qabul qiluvchiga yuborish uchun MMS xabardan foydalanilsin"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Birlamchi SMS ilovasi"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Birlamchi SMS ilovasi"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Telefon raqamingiz"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Noma’lum"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Chiquvchi xabar ovozlari"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"SMS xabarni o‘tkazish"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"SMS orqali olingan qayta ishlanmagan ma’lumotlarni tashqi xotiraga o‘tkazish"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"MMS xabarni o‘tkazish"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"MMS orqali olingan qayta ishlanmagan ma’lumotlarni tashqi xotiraga o‘tkazish"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Aholini ogohlantirish"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Xabar sozlamalari"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Matndan nusxa olish"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Tafsilotlarni ko‘rish"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"O‘chirish"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Qayta yo‘naltirish"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Xabar tafsilotlari"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Turi: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Matnli xabar"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Multimediali xabar"</string>
-    <string name="from_label" msgid="1947831848146564875">"Kimdan: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Kimga: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Yuborildi: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Qabul qilindi: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Mavzu: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Hajmi: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Ustivorlik: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM-karta: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Yuqori"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"O‘rtacha"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Past"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"<xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>-SIM karta"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Yuboruvchining manzili yashirilgan"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Biriktirilgan fayllarni yuklab olayotganda xabar yuborib bo‘lmaydi."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Biriktirma faylini yuklab bo‘lmadi. Qaytadan urining."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Tarmoq hali tayyor emas. Qaytadan urining."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Matnni o‘chirish"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Harf va raqam kiritish o‘rtasida almashish"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Yana ishtirokchi qo‘shish"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Ishtirokchilarni tasdiqlang"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Yangi suhbat boshlash"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Ushbu variantni tanlash"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Videoni ijro qilish"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Odamlar va tanlamalar"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Tuzatish"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Odamlar va tanlamalar"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Umumiy"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Ushbu suhbat ishtirokchilari"</string>
-    <string name="action_call" msgid="6596167921517350362">"Qo‘ng‘iroq qilish"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Xabar yuborish"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;br/&gt;&lt;small&gt;<xliff:g id="SIM_NAME">%s</xliff:g> orqali&lt;/small&gt; xabar yuboring"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Rasmlarni yuborish</item>
-      <item quantity="one">Rasmni yuborish</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Audio faylni yuborish</item>
-      <item quantity="one">Audio faylni yuborish</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Videolarni yuborish</item>
-      <item quantity="one">Videoni yuborish</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Kontaktlar kartasini yuborish</item>
-      <item quantity="one">Kontaktlar kartasini yuborish</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Biriktirmani yuborish</item>
-      <item quantity="one">Biriktirmani yuborish</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> ta biriktirma yuborishga tayyor</item>
-      <item quantity="one">Biriktirma yuborishga tayyor</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Fikr va mulohaza yuborish"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Play Marketdan qidirish"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Versiyasi"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"%1$s versiya"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Ochiq kodli DT litsenziyalari"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Bildirishnomalar"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Biriktirma chekloviga yetdi"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Biriktirmani yuklab bo‘lmadi."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Kontaktlarga qo‘shilsinmi?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Kontakt qo‘shish"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Mavzu"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Mavzu: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Kontaktlar kartasi yuklanmoqda"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Kontaktlar kartasini yuklab bo‘lmadi"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Kontaktlar kartasini ko‘rish"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ta kontakt</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ta kontakt</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Kontakt kartalari"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Tug‘ilgan kun"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Qaydlar"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Xabarni qayta yo‘naltirish"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Javob berish"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"SMS o‘chirib qo‘yilgan"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Yuborish uchun SMS/MMS xizmatini birlamchi SMS ilovasi sifatida o‘rnating"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"SMS/MMS xizmatini birlamchi SMS ilovasi sifatida o‘rnating"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"O‘zgartirish"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Xabarlarni qabul qilish uchun SMS/MMS xizmatini birlamchi SMS ilovasi sifatida o‘rnating"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"SMS xabarlarni yuborish uchun ma’qul SIM-karta tanlanmagan"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Qurilma egasi ushbu ilovadan foydalanishga ruxsat bermagan."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Suhbatdagi ishtirokchilar soni juda ko‘p"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Kontaktlar topilmadi</item>
-      <item quantity="one">Kontakt topilmadi</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Kameradagi rasmni yuklab bo‘lmadi"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Siz: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Qoralama"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Yangi suhbat boshlasangiz, u bu yerda ko‘rinadi"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Arxivlangan suhbatlar bu yerda ko‘rinadi"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Suhbatlar yuklanmoqda…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Rasm"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Audio-klip"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Kontaktlar kartasi"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Bekor qilish"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Qayta urinish"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Yangi xabar yozish uchun kontaktning ismi yoki telefon raqamini kiriting"</string>
-    <string name="action_block" msgid="9032076625645190136">"Bloklash"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Bloklash:<xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Blokdan chiqarish: <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"<xliff:g id="DESTINATION">%s</xliff:g> bloklansinmi?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Sizga ushbu raqamdan xabarlar kelishi mumkin, biroq bu haqda siz xabardor qilinmaysiz. Ushbu suhbat esa arxivlanadi."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Bloklangan kontaktlar"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"BLOKDAN CHIQARISH"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Bloklangan kontaktlar"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Hujjatlar kutubxonasidan rasm tanlang"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Xabar yuborilmoqda"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Xabar yuborildi"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Mobil internet o‘chirilgan. Sozlamalarni tekshiring."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Parvoz rejimida xabarlarni yuborib bo‘lmaydi"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Xabar yuborilmadi"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Xabar yuklab olindi"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Mobil internet o‘chirilgan. Sozlamalarni tekshiring."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Parvoz rejimida xabarlarni yuklab olib bo‘lmaydi"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Xabarni yuklab olib bo‘lmadi"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Nol"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Bir"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Ikki"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Uch"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"To‘rt"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Besh"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Olti"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Yetti"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Sakkiz"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"To‘qqiz"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"<xliff:g id="CARRIERNAME">%1$s</xliff:g> orqali xabar yuborib bo‘lmadi, xatolik kodi: <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Noma’lum aloqa operatori orqali xabar yuborib bo‘lmadi, xatolik kodi: <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Fwd: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Xabar yuborilmadi: xizmat tarmoqda faollashtirilmagan"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Xabar yuborilmadi: qabul qiluvchining manzili noto‘g‘ri"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Xabar yuborilmadi: xabar noto‘g‘ri"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Xabar yuborilmadi: kontent turi qo‘llab-quvvatlanmaydi"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Xabar yuborilmadi: xabar turi qo‘llab-quvvatlanmaydi"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Xabar yuborilmadi: juda katta"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Yangi xabar"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Ko‘rish"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Rasm"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Mos ilovani topib bo‘lmadi"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Qabul qiluvchini o‘chirish"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Yangi xabar"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Bekor qilish"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Ulanish nuqtasi sozlamalari"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Sozlanmagan"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Nomi"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS proksi-serveri"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS porti"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN turi"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"APNni o‘chirish"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"Yangi APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Saqlash"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Bekor qilish"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"APN nomi maydonchasini to‘ldirish shart."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN maydonchasini to‘ldirish shart."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC 3 ta raqamdan iborat bo‘lishi shart."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC 2 yoki 3 ta raqamdan iborat bo‘lishi shart."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Standart APN sozlamalari qayta tiklanmoqda."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Standart sozlamalarni tiklash"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Standart sozlamalar tiklandi."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Nomsiz"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Ulanish nuqtalari"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"Yangi APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Ushbu foydalanuvchi uchun Ulanish nuqtasi nomi (APN) sozlamalari mavjud emas"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Vaqtinchalik xotiraga nusxa olinsinmi?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Nusxa olish"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"ushbu SIM-kartaga: <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Umumiy"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Qo‘shimcha"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Umumiy sozlamalar"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Qo‘shimcha sozlamalar"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"“<xliff:g id="SIM_NAME">%s</xliff:g>” SIM kartasi"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Har bir qabul qiluvchiga alohida SMS xabar yuboring. Faqat siz barcha javoblarni olishingiz mumkin"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Barcha qabul qiluvchilarga bir xil MMS xabar yuboring"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Noma’lum raqam"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Yangi xabar"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Yangi xabar."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM kartani tanlash"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> SIM-kartasi tanlangan"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Mavzuni tahrirlash"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"SIM kartani tanlang yoki mavzuni tahrirlang"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Audio yozib olish uchun bosib turing"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Yangi suhbat boshlash"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"SMS/MMS"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"SMS/MMS chatlari"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"SMS/MMS"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Yangi xabar"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Suhbatlar ro‘yxati"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Suhbatlar yuklanmoqda"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Xabarlar yuklanmoqda"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Ko‘proq suhbatlarni ko‘rish"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Boshqa xabarlarni ko‘rish"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Suhbat o‘chirib tashlandi"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Suhbat o‘chirib tashlandi. SMS/MMS xizmatidagi boshqa suhbatni ko‘rish uchun bosing."</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Bloklandi"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Blokdan chiqarildi"</string>
-    <string name="db_full" msgid="8459265782521418031">"Xotirada joy kam qoldi. Ba’zi ma’lumotlar saqlanmasligi mumkin."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Biriktirmalarni tanlash"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Tanlovni tasdiqlash"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> ta tanlandi"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Bir yoki bir nechta biriktirmani olib tashlab, keyin qayta urinib ko‘ring."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Xabarni yuborib ko‘rishingiz mumkin, lekin undagi bir yoki bir nechta biriktirma olib tashlanmaguncha qabul qiluvchiga yetib bormasligi mumkin."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Siz bitta xabarda faqat bitta video jo‘nata olasiz. Ortiqcha videolarni olib tashlang va qaytadan urinib ko‘ring."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Biriktirmani yuklab bo‘lmadi."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Baribir yuborilsin"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Suhbatni boshlab bo‘lmadi"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"<xliff:g id="SELECTED_SIM">%s</xliff:g> tanlandi"</string>
-</resources>
diff --git a/res/values-v17/styles.xml b/res/values-v17/styles.xml
deleted file mode 100644
index 01cec58..0000000
--- a/res/values-v17/styles.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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>
-    <style name="GalleryGridItemViewCheckBoxStyle">
-        <item name="android:paddingEnd">4dp</item>
-    </style>
-
-    <style name="AttachmentGridItemViewCheckBoxStyle">
-        <item name="android:paddingEnd">4dp</item>
-    </style>
-
-    <style name="PeopleAndOptionsItemStyle">
-        <item name="android:paddingStart">16dp</item>
-        <item name="android:paddingEnd">16dp</item>
-    </style>
-
-    <style name="AudioAttachmentViewStyle">
-        <item name="android:paddingStart">16dp</item>
-        <item name="android:paddingEnd">16dp</item>
-    </style>
-
-    <style name="VcardAttachmentSingleStyle">
-        <item name="android:paddingStart">@dimen/message_text_left_right_padding</item>
-        <item name="android:paddingEnd">@dimen/message_text_left_right_padding</item>
-    </style>
-
-    <style name="PeopleListItemViewStyle">
-        <item name="android:paddingStart">16dp</item>
-    </style>
-
-    <style name="MessageVcardAttachmentStyle">
-        <item name="android:paddingStart">@dimen/message_text_left_right_padding</item>
-        <item name="android:paddingEnd">@dimen/message_text_left_right_padding</item>
-    </style>
-
-    <style name="CameraChooserFrameStyle">
-        <item name="android:paddingStart">16dp</item>
-    </style>
-
-    <style name="AddContactConfirmationTextStyle">
-        <item name="android:paddingStart">12dp</item>
-        <item name="android:paddingEnd">24dp</item>
-    </style>
-
-    <style name="ContactListItemDetailType">
-        <item name="android:paddingStart">12dp</item>
-    </style>
-
-    <style name="DebugMmsConfigItemStyle">
-        <item name="android:paddingStart">16dp</item>
-        <item name="android:paddingEnd">16dp</item>
-    </style>
-
-    <style name="ApnPreferenceLayoutStyle">
-        <item name="android:paddingStart">?android:attr/listPreferredItemPaddingStart</item>
-        <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingEnd</item>
-    </style>
-
-    <style name="CopyContactDialogTextStyle">
-        <item name="android:paddingStart">@dimen/copy_contact_dialog_left_padding</item>
-        <item name="android:paddingEnd">@dimen/copy_contact_dialog_right_padding</item>
-    </style>
-</resources>
diff --git a/res/values-v21/colors.xml b/res/values-v21/colors.xml
deleted file mode 100644
index d51ad04..0000000
--- a/res/values-v21/colors.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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="notification_sender_text">#DE000000</color>
-    <color name="notification_secondary_text">#8A000000</color>
-    <color name="notification_tertiary_text">#8A000000</color>
-    <color name="notification_subject_color">#DE000000</color>
-</resources>
diff --git a/res/values-v21/dimens.xml b/res/values-v21/dimens.xml
deleted file mode 100644
index 466d2c8..0000000
--- a/res/values-v21/dimens.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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>
-    <dimen name="fab_bottom_margin">16dp</dimen>
-    <dimen name="fab_left_right_margin">16dp</dimen>
-    <dimen name="fab_size">56dp</dimen>
-    <dimen name="fab_padding_bottom">0dp</dimen>
-</resources>
diff --git a/res/values-v21/styles.xml b/res/values-v21/styles.xml
deleted file mode 100644
index aef5d1c..0000000
--- a/res/values-v21/styles.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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>
-    <style name="BugleTheme.ConversationActivity"
-        parent="@style/BugleTheme.ConversationActivityBase">
-        <item name="android:colorEdgeEffect">@color/conversation_edge_effect</item>
-    </style>
-
-    <style name="BugleTheme.DialogActivity" parent="@style/Theme.AppCompat.Light.Dialog">
-        <item name="android:windowNoTitle">false</item>
-        <item name="android:background">@android:color/white</item>
-    </style>
-
-    <style name="ContactListItemDrawableIndicator">
-        <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
-    </style>
-
-    <style name="ConversationActionBarTitleTextStyle" parent="BugleActionBarTitleTextStyle">
-      <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
-    </style>
-
-    <style name="WidgetConversationListItemStyle">
-        <item name="android:background">@drawable/widget_item_background</item>
-        <item name="android:layout_height">72dp</item>
-    </style>
-
-</resources>
diff --git a/res/values-vi/arrays.xml b/res/values-vi/arrays.xml
deleted file mode 100644
index b16f18b..0000000
--- a/res/values-vi/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"không có chủ đề"</item>
-    <item msgid="272485471009191934">"không có chủ đề"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Có"</item>
-    <item msgid="6049132459802288033">"Không"</item>
-    <item msgid="3084376867445867895">"OK"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Xin cảm ơn"</item>
-    <item msgid="4881335087096496747">"Tôi đồng ý"</item>
-    <item msgid="2422296858597420738">"Tuyệt vời"</item>
-    <item msgid="4805581752819452687">"Đang trên đường"</item>
-    <item msgid="4746700499431366214">"OK, tôi sẽ liên hệ lại với bạn sau"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
deleted file mode 100644
index 4923847..0000000
--- a/res/values-vi/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Nhắn tin"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Nhắn tin"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Chọn cuộc hội thoại"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Cài đặt"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Gửi tin nhắn"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Thêm tệp đính kèm"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Trợ giúp"</string>
-    <string name="welcome" msgid="2857560951820802321">"Chào mừng"</string>
-    <string name="skip" msgid="7238879696319945853">"Bỏ qua"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Tiếp theo &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Tiếp theo"</string>
-    <string name="exit" msgid="1905187380359981199">"Thoát"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Cài đặt &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Cài đặt"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Nhắn tin cần quyền truy cập vào SMS, Điện thoại và Danh bạ."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Bạn có thể thay đổi các quyền trong Cài đặt &gt; Ứng dụng &gt; Nhắn tin &gt; Quyền."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Bạn có thể thay đổi các quyền trong Cài đặt, Ứng dụng, Nhắn tin, Quyền."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Liên hệ thường xuyên"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Tất cả liên hệ"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Gửi đến <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Chụp ảnh hoặc quay video"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Chọn hình ảnh từ thiết bị này"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Ghi âm"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Chọn ảnh"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Phương tiện được chọn."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Phương tiện không được chọn."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"Đã chọn <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"hình ảnh <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"hình ảnh"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Ghi âm"</string>
-    <string name="action_share" msgid="2143483844803153871">"Chia sẻ"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Vừa đăng"</string>
-    <string name="posted_now" msgid="867560789350406701">"Hiện tại"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> phút</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> phút</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> giờ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> giờ</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ngày</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ngày</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tuần</item>
-      <item quantity="one">một tuần</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tháng</item>
-      <item quantity="one">một tháng</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> năm</item>
-      <item quantity="one">một năm</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Thông báo hạng 0"</string>
-    <string name="save" msgid="5081141452059463572">"Lưu"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Thiết bị sắp hết bộ nhớ. Nhắn tin sẽ tự động xóa các tin nhắn cũ để giải phóng dung lượng."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Sắp hết dung lượng lưu trữ"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Nhắn tin không thể gửi hoặc nhận tin nhắn cho tới khi có thêm bộ nhớ trên thiết bị của bạn."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Sắp hết dung lượng SMS. Bạn có thể cần xóa tin nhắn."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Xác nhận số điện thoại của bạn"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Bước thực hiện một lần này sẽ đảm bảo ứng dụng Nhắn tin gửi tin nhắn nhóm của bạn đúng cách."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Số điện thoại"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Xóa tất cả tin nhắn có phương tiện"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Xóa tin nhắn cũ hơn <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Tự động xóa tin nhắn cũ hơn <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Bỏ qua"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Xóa tất cả tin nhắn có phương tiện?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Xóa tin nhắn cũ hơn <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Xóa tin nhắn cũ hơn <xliff:g id="DURATION">%s</xliff:g> và bật tự động xóa?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> đã nói"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Bạn đã nói"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Tin nhắn từ <xliff:g id="SENDER">%s</xliff:g>:"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Bạn đã gửi tin nhắn"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Đang gửi…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Không gửi được. Hãy chạm để thử lại."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Không gửi được. Đang thử lại…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Gửi lại hoặc xóa"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Vui lòng thực hiện cuộc gọi thoại tới các dịch vụ khẩn cấp. Chúng tôi hiện không thể gửi tin nhắn văn bản của bạn."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Không thành công"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Tin nhắn MMS mới cần tải xuống"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Tin nhắn MMS mới"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Không thể tải xuống"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Chạm để thử lại"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Chạm để tải xuống"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Tải xuống hoặc xóa"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Đang tải xuống..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Tin nhắn đã hết hạn hoặc không khả dụng"</string>
-    <string name="mms_info" msgid="3402311750134118165">"kích thước: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, hết hạn: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Không thể gửi. Người nhận không hợp lệ."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Dịch vụ không được kích hoạt trên mạng"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Không thể gửi do sự cố mạng"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Tin nhắn đã hết hạn hoặc không khả dụng"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Không có chủ đề)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Người gửi không xác định"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Đã gửi"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Không thể tải xuống tin nhắn <xliff:g id="SUBJECT">%1$s</xliff:g> từ <xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Không thể hoàn tất thao tác liên quan đến cơ sở dữ liệu do sắp hết bộ nhớ"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Không gửi được tin nhắn"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Không gửi được một số tin nhắn trong Nhắn tin"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> tin nhắn trong <xliff:g id="CONVERSATIONS">%d</xliff:g> cuộc trò chuyện</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> tin nhắn trong một cuộc trò chuyện</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Không tải xuống được tin nhắn"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Không tải xuống được một số tin nhắn trong Nhắn tin"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> tin nhắn trong <xliff:g id="CONVERSATIONS">%d</xliff:g> cuộc trò chuyện</item>
-      <item quantity="one"><xliff:g id="MESSAGES_0">%d</xliff:g> tin nhắn trong một cuộc trò chuyện</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Tin nhắn tới <xliff:g id="NUMBER">%1$s</xliff:g> chưa được gửi"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Vui lòng thực hiện cuộc gọi thoại tới các dịch vụ khẩn cấp. Chúng tôi hiện không thể gửi tin nhắn văn bản của bạn tới <xliff:g id="NUMBER">%1$s</xliff:g>."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> tin nhắn mới</item>
-      <item quantity="one">Tin nhắn mới</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Bắt đầu"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Máy ảnh không khả dụng"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Máy ảnh không khả dụng"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Quay video không khả dụng"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Không thể lưu phương tiện"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Không thể chụp ảnh"</string>
-    <string name="back" msgid="1477626055115561645">"Quay lại"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Đã lưu trữ"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Xóa"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Lưu trữ"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Hủy lưu trữ"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Tắt thông báo"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Bật thông báo"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Thêm liên hệ"</string>
-    <string name="action_download" msgid="7786338136368564146">"Tải xuống"</string>
-    <string name="action_send" msgid="377635240181672039">"Gửi"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Xóa"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Xóa tin nhắn này?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Không thể hoàn tác tác vụ này."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Xóa"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">Xóa những cuộc trò chuyện này?</item>
-      <item quantity="one">Xóa cuộc trò chuyện này?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Xóa"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Hủy"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Đến"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Chọn nhiều hình ảnh"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Xác nhận lựa chọn"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Không thể ghi âm thanh. Hãy thử lại."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Không thể phát âm thanh. Hãy thử lại."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Không thể lưu âm thanh. Hãy thử lại."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Chạm và giữ"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Hình ảnh"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Clip âm thanh"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Video"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Thẻ liên hệ"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Tải xuống"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Trả lời qua SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Trả lời qua MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Trả lời"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> người tham gia</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> người tham gia</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Tôi"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Đã chặn và lưu trữ địa chỉ liên hệ"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Đã bỏ chặn và hủy lưu trữ liên hệ"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"Đã lưu trữ <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"Đã hủy lưu trữ <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Đã tắt thông báo"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Đã bật thông báo"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Đã hoàn tất. Hãy chạm vào Gửi lần nữa."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Đã đặt thành công Nhắn tin là ứng dụng SMS mặc định."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">Hủy tệp đính kèm</item>
-      <item quantity="one">Hủy tệp đính kèm</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Tệp âm thanh đính kèm"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Phát tệp âm thanh đính kèm"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Tạm dừng"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Tin nhắn từ <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Không gửi được tin nhắn từ  <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Tin nhắn từ <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Chưa gửi được tin nhắn tới  <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Đang gửi tin nhắn tới <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Không gửi được tin nhắn tới  <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Tin nhắn tới  <xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Không gửi được tin nhắn từ <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Tin nhắn từ <xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Chưa gửi được tin nhắn tới <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Đang gửi tin nhắn tới <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Không gửi được tin nhắn tới  <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Tin nhắn tới <xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Thời gian: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Không gửi được tin nhắn. Hãy chạm để thử lại."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Cuộc trò chuyện với <xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Xóa chủ đề"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Quay video"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Chụp ảnh tĩnh"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Chụp ảnh"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Bắt đầu quay video"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Chuyển sang máy ảnh toàn màn hình"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Chuyển đổi giữa máy ảnh trước và sau"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Dừng quay và đính kèm video"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Dừng ghi video"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Ảnh trong Nhắn tin"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> ảnh đã được lưu vào album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> ảnh đã được lưu vào album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> video đã được lưu vào album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> video đã được lưu vào album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> tệp đính kèm đã được lưu vào album \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> tệp đính kèm đã được lưu vào album \"<xliff:g id="ALBUMNAME_1">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> tệp đính kèm đã được lưu vào \"Nội dung tải xuống\"</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> tệp đính kèm đã được lưu vào \"Nội dung tải xuống\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">Đã lưu <xliff:g id="QUANTITY_1">%d</xliff:g> tệp đính kèm</item>
-      <item quantity="one">Đã lưu <xliff:g id="QUANTITY_0">%d</xliff:g> tệp đính kèm</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">Không thể lưu <xliff:g id="QUANTITY_1">%d</xliff:g> tệp đính kèm</item>
-      <item quantity="one">Không thể lưu <xliff:g id="QUANTITY_0">%d</xliff:g> tệp đính kèm</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Đã lưu tệp đính kèm MMS"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Cài đặt"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Đã lưu trữ"</string>
-    <string name="action_close" msgid="1840519376200478419">"Đóng"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Nâng cao"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Gỡ lỗi"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Thông báo"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Âm thanh"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Im lặng"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Rung"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Đã chặn"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Báo cáo gửi SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Yêu cầu báo cáo gửi cho mỗi SMS bạn gửi"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Tự động truy xuất"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Tự động truy xuất tin nhắn MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Tự động truy xuất khi chuyển vùng"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Tự động truy xuất MMS khi chuyển vùng"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Nhắn tin theo nhóm"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Sử dụng MMS để gửi một tin nhắn duy nhất khi có nhiều người nhận"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Ứng dụng SMS mặc định"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Ứng dụng SMS mặc định"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Số điện thoại của bạn"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Không xác định"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Âm thanh tin nhắn đi"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Kết xuất SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Kết xuất dữ liệu thô SMS đã nhận vào tệp bộ nhớ ngoài"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Kết xuất MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Kết xuất dữ liệu thô MMS đã nhận vào tệp bộ nhớ ngoài"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Cảnh báo không dây"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Tùy chọn tin nhắn"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Sao chép văn bản"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Xem chi tiết"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Xóa"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Chuyển tiếp"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Chi tiết tin nhắn"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Loại: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Tin nhắn văn bản"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Tin nhắn đa phương tiện"</string>
-    <string name="from_label" msgid="1947831848146564875">"Người gửi: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Người nhận: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Đã gửi: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Đã nhận: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Chủ đề: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Kích cỡ: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Mức độ ưu tiên: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Cao"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Bình thường"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Thấp"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Địa chỉ người gửi bị ẩn"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Không thể gửi tin nhắn trong khi tải tệp đính kèm."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Không thể tải tệp đính kèm. Hãy thử lại."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Mạng chưa sẵn sàng. Hãy thử lại."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Xóa văn bản"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Chuyển đổi giữa nhập văn bản và số"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Thêm người tham gia khác"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Xác nhận người tham gia"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Bắt đầu cuộc trò chuyện mới"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Chọn mục này"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Phát video"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Danh bạ và tùy chọn"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Gỡ lỗi"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Danh bạ và tùy chọn"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Chung"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Mọi người trong cuộc hội thoại này"</string>
-    <string name="action_call" msgid="6596167921517350362">"Gọi điện"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Gửi tin nhắn"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Gửi tin nhắn&lt;br/&gt;&lt;nhỏ&gt;từ <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/nhỏ&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">Gửi ảnh</item>
-      <item quantity="one">Gửi ảnh</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">Gửi âm thanh</item>
-      <item quantity="one">Gửi âm thanh</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">Gửi video</item>
-      <item quantity="one">Gửi video</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">Gửi danh thiếp</item>
-      <item quantity="one">Gửi danh thiếp</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">Gửi tệp đính kèm</item>
-      <item quantity="one">Gửi tệp đính kèm</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> tệp đính kèm đã sẵn sàng gửi</item>
-      <item quantity="one">Một tệp đính kèm đã sẵn sàng gửi</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Gửi phản hồi"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Xem trong Cửa hàng Google Play"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Thông tin phiên bản"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Phiên bản %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Giấy phép nguồn mở"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Thông báo"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Đã đạt đến giới hạn tệp đính kèm"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Không tải được tệp đính kèm."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Thêm vào Danh bạ?"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Thêm liên hệ"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Chủ đề"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Chủ đề: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Đang tải thẻ liên hệ"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Không thể tải danh thiếp"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Xem thẻ liên hệ"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> liên hệ</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> liên hệ</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Danh thiếp"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Ngày sinh"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Ghi chú"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Chuyển tiếp thư"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Trả lời"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"Đã tắt tính năng nhắn tin SMS"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Để gửi, hãy đặt Nhắn tin là ứng dụng SMS mặc định"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Đặt Nhắn tin là ứng dụng SMS mặc định"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Thay đổi"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Để nhận tin nhắn, hãy đặt Nhắn tin là ứng dụng SMS mặc định"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Không có SIM ưu tiên nào được chọn để gửi tin nhắn SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Ứng dụng này không được chủ sở hữu thiết bị cho phép."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"OK"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Có quá nhiều người tham gia trong một cuộc trò chuyện"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">Liên hệ không hợp lệ</item>
-      <item quantity="one">Liên hệ không hợp lệ</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Không thể tải hình ảnh trong máy ảnh"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Bạn: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Thư nháp"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Sau khi bạn bắt đầu một cuộc trò chuyện mới, bạn sẽ thấy cuộc trò chuyện đó được liệt kê ở đây"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Các cuộc trò chuyện đã lưu trữ xuất hiện ở đây"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Đang tải cuộc trò chuyện..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Hình ảnh"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Clip âm thanh"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Video"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Thẻ liên hệ"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Hoàn tác"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Thử lại"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Nhập tên liên hệ hoặc số điện thoại để bắt đầu tin nhắn mới"</string>
-    <string name="action_block" msgid="9032076625645190136">"Chặn"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Chặn <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Bỏ chặn <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Chặn <xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Bạn sẽ tiếp tục nhận tin nhắn từ số này nhưng bạn sẽ không được thông báo nữa. Cuộc trò chuyện này sẽ được lưu trữ."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Địa chỉ liên hệ bị chặn"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"BỎ CHẶN"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Địa chỉ liên hệ bị chặn"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Chọn hình ảnh từ thư viện tài liệu"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Đang gửi tin nhắn"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Đã gửi tin nhắn"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Dữ liệu di động đã bị tắt. Hãy kiểm tra cài đặt của bạn."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Không thể gửi tin nhắn ở Chế độ trên máy bay"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Không thể gửi thư"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Đã tải tin nhắn xuống"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Dữ liệu di động đã bị tắt. Hãy kiểm tra cài đặt của bạn."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Không thể tải xuống tin nhắn ở Chế độ trên máy bay"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Không thể tải xuống tin nhắn"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Không"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Một"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Hai"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Ba"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Bốn"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Năm"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Sáu"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Bảy"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Tám"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Chín"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Không thể gửi tin nhắn bằng <xliff:g id="CARRIERNAME">%1$s</xliff:g>, lỗi <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Không thể gửi tin nhắn bằng nhà cung cấp dịch vụ không xác định, lỗi <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Chuyển tiếp: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Không gửi được tin nhắn: dịch vụ chưa được kích hoạt trên mạng"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Không gửi được tin nhắn: địa chỉ đích không hợp lệ"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Không gửi được tin nhắn: tin nhắn không hợp lệ"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Không gửi được tin nhắn: nội dung không được hỗ trợ"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Không gửi được tin nhắn: tin nhắn không được hỗ trợ"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Không gửi được tin nhắn: quá lớn"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Tin nhắn mới"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Xem"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Hình ảnh"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Không thể tìm thấy ứng dụng thích hợp"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Xóa người nhận"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Tin nhắn mới"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Hủy"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Chỉnh sửa điểm truy cập"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Chưa đặt"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Tên"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Proxy của MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Cổng MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Loại APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Xóa APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"APN mới"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Lưu"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Hủy"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Không được để trống trường Tên."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"Không được để trống APN."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Trường MCC phải có 3 chữ số."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Trường MNC phải có 2 hoặc 3 chữ số."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Đang khôi phục cài đặt APN mặc định."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Đặt lại về mặc định"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Đặt lại cài đặt APN mặc định đã hoàn tất."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Không có tiêu đề"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Tên điểm truy cập"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"APN mới"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Cài đặt Tên điểm truy cập không khả dụng cho người dùng này"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Sao chép vào khay nhớ tạm?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Sao chép"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"tới <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Chung"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Nâng cao"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Cài đặt chung"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Cài đặt nâng cao"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM \"<xliff:g id="SIM_NAME">%s</xliff:g>\""</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Gửi từng tin nhắn SMS cho tất cả người nhận. Chỉ bạn mới nhận được mọi tin nhắn trả lời"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Gửi một MMS cho tất cả người nhận"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Số điện thoại không xác định"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Tin nhắn mới"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Tin nhắn mới."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Bộ chọn SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"Đã chọn <xliff:g id="SIM_0">%1$s</xliff:g>, bộ chọn SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Chỉnh sửa chủ đề"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Chọn SIM hoặc chỉnh sửa chủ đề"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Chạm và giữ để ghi âm"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Bắt đầu cuộc trò chuyện mới"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Nhắn tin"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Danh sách Nhắn tin"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Nhắn tin"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Tin nhắn mới"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Danh sách cuộc hội thoại"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Đang tải cuộc trò chuyện..."</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Đang tải thư"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Xem các cuộc hội thoại khác"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Xem thêm tin nhắn"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Đã xóa cuộc hội thoại"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Đã xóa cuộc trò chuyện. Chạm để hiển thị cuộc trò chuyện khác trong Nhắn tin"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Đã chặn"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Đã bỏ chặn"</string>
-    <string name="db_full" msgid="8459265782521418031">"Dung lượng bộ nhớ thấp. Một số dữ liệu có thể bị mất."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Chọn tài liệu đính kèm"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Xác nhận lựa chọn"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"Đã chọn <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Vui lòng xóa một hoặc nhiều tệp đính kèm và thử lại."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Bạn có thể thử gửi tin nhắn của mình nhưng tin nhắn có thể không gửi được trừ khi bạn xóa một hoặc nhiều tệp đính kèm."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Bạn chỉ có thể gửi một video cho mỗi tin nhắn. Hãy xóa các video khác rồi thử lại."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Ứng dụng Nhắn tin không tải được tệp đính kèm."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Vẫn gửi"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Không thể bắt đầu cuộc trò chuyện"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"Đã chọn <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml
deleted file mode 100644
index 9512884..0000000
--- a/res/values-zh-rCN/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"无主题"</item>
-    <item msgid="272485471009191934">"无主题"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"是的"</item>
-    <item msgid="6049132459802288033">"不"</item>
-    <item msgid="3084376867445867895">"好"</item>
-    <item msgid="3155097332660174689">"呵呵"</item>
-    <item msgid="2611328818571146775">"谢谢"</item>
-    <item msgid="4881335087096496747">"同意"</item>
-    <item msgid="2422296858597420738">"不错"</item>
-    <item msgid="4805581752819452687">"在路上"</item>
-    <item msgid="4746700499431366214">"稍后再回复你"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 77dbfae..0000000
--- a/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"短信"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"短信"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"选择对话"</string>
-    <string name="action_settings" msgid="1329008122345201684">"设置"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"发送信息"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"添加附件"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"帮助"</string>
-    <string name="welcome" msgid="2857560951820802321">"欢迎使用"</string>
-    <string name="skip" msgid="7238879696319945853">"跳过"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"下一步 &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"下一步"</string>
-    <string name="exit" msgid="1905187380359981199">"退出"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"设置 &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"设置"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"“短信”应用需要获得“短信”、“电话”和“通讯录”的访问权限。"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"您可以在“设置”&gt;“应用”&gt;“短信”&gt;“权限”中更改权限。"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"您可以依次触摸“设置”、“应用”、“短信”和“权限”来更改权限。"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"常用联系人"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"所有联系人"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"发送到<xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"拍照或录像"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"选择此设备上的图片"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"录制语音"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"选择照片"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"已选择此媒体。"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"已取消选择此媒体。"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"已选择<xliff:g id="COUNT">%d</xliff:g>项"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"图片（<xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>）"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"图片"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"录制语音"</string>
-    <string name="action_share" msgid="2143483844803153871">"分享"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"刚刚"</string>
-    <string name="posted_now" msgid="867560789350406701">"刚刚"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 分钟</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 分钟</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 小时</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 小时</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 天</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 天</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 周</item>
-      <item quantity="one">1 周</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 个月</item>
-      <item quantity="one">1 个月</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 年</item>
-      <item quantity="one">1 年</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"0级信息"</string>
-    <string name="save" msgid="5081141452059463572">"保存"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"设备存储空间不足。“短信”将自动删除较早的信息，以便腾出存储空间。"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"存储空间不足"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"除非您的设备上腾出更多可用空间，否则“短信”可能无法收发信息。"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"短信存储空间不足，建议您删除部分信息。"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"确认您的电话号码"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"执行这个一次性步骤可确保“短信”正确地传送您的群发信息。"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"电话号码"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"删除所有含媒体内容的信息"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"删除<xliff:g id="DURATION">%s</xliff:g>以前的信息"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"自动删除超过 <xliff:g id="DURATION">%s</xliff:g>以前的信息"</string>
-    <string name="ignore" msgid="7063392681130898793">"忽略"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"要删除所有含媒体内容的信息吗？"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"要删除超过 <xliff:g id="DURATION">%s</xliff:g>以前的信息吗？"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"要删除超过 <xliff:g id="DURATION">%s</xliff:g>以前的信息并开启自动删除功能吗？"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g>说"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"您说"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"来自<xliff:g id="SENDER">%s</xliff:g>的信息"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"您发送了一条信息"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"正在发送…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"发送失败。触摸即可重试。"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"发送失败。正在重试…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"重新发送或删除"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"请拨打语音电话寻求紧急服务。目前您的信息无法成功发送。"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"失败"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"待下载的新彩信"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"新彩信"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"无法下载"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"触摸即可重试"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"触摸即可下载"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"下载或删除"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"正在下载…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"信息已过期或无法查看"</string>
-    <string name="mms_info" msgid="3402311750134118165">"信息大小：<xliff:g id="MESSAGESIZE">%1$s</xliff:g>，过期时间：<xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"无法发送。收件人无效。"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"您尚未在网络上启用该服务。"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"遇到网络问题，发送失败"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"信息已过期或无法查看"</string>
-    <string name="no_subject" msgid="5587715902648568767">"（无主题）"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"未知发件人"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"已送达"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"无法下载来自<xliff:g id="FROM">%2$s</xliff:g>的信息“<xliff:g id="SUBJECT">%1$s</xliff:g>”。"</string>
-    <string name="low_memory" msgid="5300743415198486619">"内存不足，无法完成数据库操作"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"信息发送失败"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"“短信”未发送部分信息"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> 个对话中的 <xliff:g id="MESSAGES_1">%d</xliff:g> 条信息</item>
-      <item quantity="one">1 个对话中的 <xliff:g id="MESSAGES_0">%d</xliff:g> 条信息</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"信息下载失败"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"“短信”未下载部分信息"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> 个对话中的 <xliff:g id="MESSAGES_1">%d</xliff:g> 条信息</item>
-      <item quantity="one">1 个对话中的 <xliff:g id="MESSAGES_0">%d</xliff:g> 条信息</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"未能将信息发送至 <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"请拨打语音电话寻求紧急服务。目前您的信息无法发送至 <xliff:g id="NUMBER">%1$s</xliff:g>。"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> 条新信息</item>
-      <item quantity="one">新信息</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"发起"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"无法使用相机"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"无法使用相机"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"无法使用视频拍摄功能"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"无法保存媒体"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"无法拍照"</string>
-    <string name="back" msgid="1477626055115561645">"返回"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"已归档的对话"</string>
-    <string name="action_delete" msgid="4076795795307486019">"删除"</string>
-    <string name="action_archive" msgid="5437034800324083170">"归档"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"取消归档"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"关闭通知"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"开启通知"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"添加到通讯录"</string>
-    <string name="action_download" msgid="7786338136368564146">"下载"</string>
-    <string name="action_send" msgid="377635240181672039">"发送"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"删除"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"要删除此信息吗？"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"该操作无法撤消。"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"删除"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">要删除这些对话吗？</item>
-      <item quantity="one">要删除此对话吗？</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"删除"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"取消"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"收件人"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"选择多张图片"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"确认选择"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"无法录制语音，请重试。"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"无法播放语音，请重试。"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"无法保存语音，请重试。"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"触摸并按住"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">"、 "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">"： "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"图片"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"语音"</string>
-    <string name="notification_video" msgid="4331423498662606204">"视频"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"名片"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"下载"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"通过短信回复"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"通过彩信回复"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"回复"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 位参与者</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位参与者</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"我"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"联系人已被屏蔽且已归档"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"已取消屏蔽并取消归档联系人"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"已归档 <xliff:g id="COUNT">%d</xliff:g> 个"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"已取消归档 <xliff:g id="COUNT">%d</xliff:g> 个"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"通知已关闭"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"通知已开启"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"设置已完成。请再次触摸“发送”。"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"已成功地将“短信”设为默认短信应用。"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">舍弃附件</item>
-      <item quantity="one">舍弃附件</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"语音附件"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"播放语音附件"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"暂停"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"<xliff:g id="SENDER">%1$s</xliff:g>发来了消息：<xliff:g id="MESSAGE">%2$s</xliff:g>。"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g>未能成功发送的信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g>发来的信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"要发送给<xliff:g id="CONTACT">%1$s</xliff:g>的草稿信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"正在向<xliff:g id="CONTACT">%1$s</xliff:g>发送的信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"未能成功发送给<xliff:g id="CONTACT">%1$s</xliff:g>的信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"发送给<xliff:g id="CONTACT">%1$s</xliff:g>的信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g>未能成功发送的信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。<xliff:g id="GROUPINFO">%4$s</xliff:g>。"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g>发来的信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。<xliff:g id="GROUPINFO">%4$s</xliff:g>。"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"要发送给<xliff:g id="GROUP">%1$s</xliff:g>的草稿信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"正在向<xliff:g id="GROUP">%1$s</xliff:g>发送的信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"未能成功发送给<xliff:g id="GROUP">%1$s</xliff:g>的信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"发送给<xliff:g id="GROUP">%1$s</xliff:g>的信息，内容为：<xliff:g id="MESSAGE">%2$s</xliff:g>。时间为：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"信息发送失败。触摸即可重试。"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"与<xliff:g id="PARTICIPANTS">%s</xliff:g>的对话"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"删除主题"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"拍摄视频"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"拍摄静态照片"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"拍照"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"开始录制视频"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"切换到全屏相机模式"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"在前置和后置相机之间切换"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"停止拍摄并添加视频附件"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"停止录制视频"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"“短信”中的照片"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> 张照片已保存至“<xliff:g id="ALBUMNAME_3">%s</xliff:g>”相册</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 张照片已保存至“<xliff:g id="ALBUMNAME_1">%s</xliff:g>”相册</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> 个视频已保存至“<xliff:g id="ALBUMNAME_3">%s</xliff:g>”相册</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 个视频已保存至“<xliff:g id="ALBUMNAME_1">%s</xliff:g>”相册</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> 个附件已保存至“<xliff:g id="ALBUMNAME_3">%s</xliff:g>”相册</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 个附件已保存至“<xliff:g id="ALBUMNAME_1">%s</xliff:g>”相册</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> 个附件已保存至“下载内容”</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 个附件已保存至“下载内容”</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">已保存 <xliff:g id="QUANTITY_1">%d</xliff:g> 个附件</item>
-      <item quantity="one">已保存 <xliff:g id="QUANTITY_0">%d</xliff:g> 个附件</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">无法保存 <xliff:g id="QUANTITY_1">%d</xliff:g> 个附件</item>
-      <item quantity="one">无法保存 <xliff:g id="QUANTITY_0">%d</xliff:g> 个附件</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"保存的彩信附件"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"设置"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"已归档的对话"</string>
-    <string name="action_close" msgid="1840519376200478419">"关闭"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"彩信"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"高级"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"调试"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"通知"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"提示音"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"静音"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"振动"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"已屏蔽"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"短信送达情况报告"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"了解您发的每条短信的送达情况"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"自动检索"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"自动检索彩信"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"漫游时自动检索"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"漫游时自动检索彩信"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"群发彩信"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"有多个收件人时，也使用彩信发送信息"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"默认短信应用"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"默认短信应用"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"您的手机号码"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"未知"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"信息发送提示音"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"转储短信"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"将收到的短信原始数据转储到外部存储文件中"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"转储彩信"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"将收到的彩信原始数据转储到外部存储文件中"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"无线警报"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"信息选项"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"复制文字"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"查看详情"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"删除"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"转发"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"信息详情"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"类型： "</string>
-    <string name="text_message" msgid="7415419755252205721">"文字信息"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"多媒体信息"</string>
-    <string name="from_label" msgid="1947831848146564875">"发件人： "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"收件人： "</string>
-    <string name="sent_label" msgid="5186286057597137301">"发送时间： "</string>
-    <string name="received_label" msgid="4442494712757995203">"接收时间： "</string>
-    <string name="subject_label" msgid="1887378451808609152">"主题： "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"大小： "</string>
-    <string name="priority_label" msgid="5029073794896222902">"优先级： "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM 卡： "</string>
-    <string name="priority_high" msgid="728836357310908368">"高"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"中"</string>
-    <string name="priority_low" msgid="7398724779026801851">"低"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM 卡 <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"隐藏的发件人地址"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"附件尚未加载完毕，无法发送信息。"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"无法加载附件，请重试。"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"网络尚未就绪，请重试。"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"删除文字"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"在文字和数字输入模式间切换"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"添加更多参与者"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"确认参与者"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"发起新的对话"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"选择此项内容"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"播放视频"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"参与者名单和选项"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"调试"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"参与者名单和选项"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"常规"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"此对话的参与者"</string>
-    <string name="action_call" msgid="6596167921517350362">"拨打电话"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"发送信息"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"发送信息&lt;br/&gt;&lt;small&gt;（通过<xliff:g id="SIM_NAME">%s</xliff:g>）&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">发送照片</item>
-      <item quantity="one">发送照片</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">发送语音</item>
-      <item quantity="one">发送语音</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">发送视频</item>
-      <item quantity="one">发送视频</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">发送名片</item>
-      <item quantity="one">发送名片</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">发送附件</item>
-      <item quantity="one">发送附件</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> 个附件待发送</item>
-      <item quantity="one">1 个附件待发送</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"发送反馈"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"在 Google Play 商店中查看"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"版本信息"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"版本%1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"开放源代码许可"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"通知"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"已达到附件上限"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"加载附件失败。"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"要添加到通讯录吗？"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"添加到通讯录"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"主题"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"主题： "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"正在加载名片"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"无法加载名片"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"查看名片"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 位联系人</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位联系人</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"名片"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"生日"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"备注"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"转发信息"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"回复"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"短信功能已停用"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"要发送信息，请将“短信”设为默认短信应用"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"将“短信”设为默认短信应用"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"更改"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"要接收信息，请将“短信”设为默认短信应用"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"未选择用于发送短信的首选 SIM 卡"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"此应用未获得设备机主授权。"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"确定"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"对话中的参与者过多"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">联系人无效</item>
-      <item quantity="one">联系人无效</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"无法加载相机图像"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"你： "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>： "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"草稿"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"您的短信对话将列在此处"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"已归档的对话会显示在此处"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"正在加载对话…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"照片"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"语音"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"视频"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"名片"</string>
-    <string name="mms_text" msgid="1528791558806015806">"彩信"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"撤消"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"重试"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"要发送新信息，请输入联系人姓名或电话号码"</string>
-    <string name="action_block" msgid="9032076625645190136">"屏蔽"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"屏蔽<xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"取消屏蔽<xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"要屏蔽<xliff:g id="DESTINATION">%s</xliff:g>吗？"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"您将继续接收来自此号码的信息，但不会再收到相关通知。此对话将被归档。"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"屏蔽的联系人"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"取消屏蔽"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"屏蔽的联系人"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"从文档库中选择图片"</string>
-    <string name="sending_message" msgid="6363584950085384929">"正在发送消息"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"消息已发送"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"移动数据网络已关闭。请检查您的设置。"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"在飞行模式下无法发送信息"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"无法发送信息"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"彩信已下载"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"移动数据网络已关闭。请检查您的设置。"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"在飞行模式下无法下载信息"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"无法下载信息"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"0"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"1"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"2"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"3"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"4"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"5"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"6"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"7"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"8"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"9"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"无法发送消息（运营商：<xliff:g id="CARRIERNAME">%1$s</xliff:g>，错误代码：<xliff:g id="ERRORCODE">%2$d</xliff:g>）"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"无法发送消息（运营商：未知，错误代码：<xliff:g id="ERRORCODE">%1$d</xliff:g>）"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"转发：<xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"信息发送失败：服务未在网络上激活"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"信息发送失败：目标地址无效"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"信息发送失败：信息无效"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"信息发送失败：内容不受支持"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"信息发送失败：信息不受支持"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"信息发送失败：信息过长"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"新信息"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"查看"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"图片"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"找不到合适的应用"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"移除收件人"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"新消息"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"取消"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"修改接入点"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"未设置"</string>
-    <string name="apn_name" msgid="1572691851070894985">"名称"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"彩信代理"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"彩信端口"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN 类型"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"删除 APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"新建 APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"保存"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"舍弃"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"“名称”字段不能为空。"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN 不能为空。"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC 字段必须为 3 位数。"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC 字段必须为 2 位数或 3 位数。"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"正在恢复默认 APN 设置。"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"重置为默认值"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"已重置默认 APN 设置。"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"未命名"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"接入点名称"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"新建 APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"此用户无权修改接入点名称设置"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"要复制到剪贴板吗？"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"复制"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"发至<xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"常规"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"高级"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"常规设置"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"高级设置"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"SIM 卡 “<xliff:g id="SIM_NAME">%s</xliff:g>”"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"将单条短信发送给所有收件人。只有您能收到相应回复"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"将单条彩信发送给所有收件人"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"未知号码"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"新信息"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"新信息。"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM 卡选择器"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"已选择<xliff:g id="SIM_0">%1$s</xliff:g>，SIM 卡选择器"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"修改主题"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"选择 SIM 卡或修改主题"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"触摸并按住即可录制语音"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"发起新的对话"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"短信"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"短信列表"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"短信"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"新信息"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"对话列表"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"正在加载对话"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"正在加载信息"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"查看更多对话"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"查看更多信息"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"对话已删除"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"对话已删除。触摸可显示其他“短信”对话"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"已屏蔽"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"已取消屏蔽"</string>
-    <string name="db_full" msgid="8459265782521418031">"存储空间不足，部分数据可能会丢失。"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"选择附件"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"确认选择"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"已选择 <xliff:g id="COUNT">%d</xliff:g> 个附件"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"请移除一个或多个附件，然后重试。"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"您可以尝试发送信息，但您可能需要移除一个或多个附件才能成功发送。"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"您在每条消息中只能发送一个视频。请移除多余的视频，然后重试。"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"“短信”无法加载附件。"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"仍然发送"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"无法发起对话"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"已选择<xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-zh-rHK/arrays.xml b/res/values-zh-rHK/arrays.xml
deleted file mode 100644
index ab1cad4..0000000
--- a/res/values-zh-rHK/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"沒有主旨"</item>
-    <item msgid="272485471009191934">"無主旨"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"是"</item>
-    <item msgid="6049132459802288033">"否"</item>
-    <item msgid="3084376867445867895">"確定"</item>
-    <item msgid="3155097332660174689">"呵呵"</item>
-    <item msgid="2611328818571146775">"謝謝"</item>
-    <item msgid="4881335087096496747">"我同意"</item>
-    <item msgid="2422296858597420738">"很好"</item>
-    <item msgid="4805581752819452687">"我正在路上"</item>
-    <item msgid="4746700499431366214">"好，我稍後再回覆您"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
deleted file mode 100644
index a5c690f..0000000
--- a/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"訊息"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"訊息"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"選取對話群組"</string>
-    <string name="action_settings" msgid="1329008122345201684">"設定"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"傳送訊息"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"新增附件"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"說明"</string>
-    <string name="welcome" msgid="2857560951820802321">"歡迎"</string>
-    <string name="skip" msgid="7238879696319945853">"略過"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"繼續 &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"下一步"</string>
-    <string name="exit" msgid="1905187380359981199">"結束"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"設定 &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"設定"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"「短訊」需要存取短訊、手機和聯絡人的權限。"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"您可以前往 [設定] &gt; [應用程式] &gt; [短訊] &gt; [權限] 變更權限。"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"您可以前往 [設定]、[應用程式]、[短訊]、[權限] 變更權限。"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"常用聯絡人"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"所有聯絡人"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"傳送至 <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"拍照或錄影"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"從這部裝置選擇圖片"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"錄音"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"選擇相片"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"已選取媒體。"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"已取消選取媒體。"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"已選取 <xliff:g id="COUNT">%d</xliff:g> 個項目"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"<xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>的圖片"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"圖片"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"錄音"</string>
-    <string name="action_share" msgid="2143483844803153871">"分享"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"剛剛"</string>
-    <string name="posted_now" msgid="867560789350406701">"現在"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>分鐘</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>分鐘</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>小時</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>小時</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>天</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>天</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>個星期</item>
-      <item quantity="one">一個星期</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>個月</item>
-      <item quantity="one">一個月</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>年</item>
-      <item quantity="one">一年</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"等級 0 訊息"</string>
-    <string name="save" msgid="5081141452059463572">"儲存"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"裝置儲存空間不足。「短訊」會自動刪除較舊的訊息以騰出空間。"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"儲存空間即將用盡"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"「短訊」需要更多裝置空間方可發送或接收訊息。"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"短訊儲存空間即將用完，建議您刪除部分訊息。"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"確認您的電話號碼"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"這個單一步驟能確保「短訊」正確發送群組訊息。"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"電話號碼"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"刪除所有附有媒體的訊息"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"刪除超過 <xliff:g id="DURATION">%s</xliff:g>的訊息"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"自動刪除超過 <xliff:g id="DURATION">%s</xliff:g>的訊息"</string>
-    <string name="ignore" msgid="7063392681130898793">"略過"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"要刪除所有附有媒體檔案的訊息嗎？"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"要刪除超過 <xliff:g id="DURATION">%s</xliff:g>的訊息嗎？"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"要刪除超過 <xliff:g id="DURATION">%s</xliff:g>的訊息並開啟自動刪除嗎？"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"傳送者：<xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"您說"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"來自<xliff:g id="SENDER">%s</xliff:g>的訊息"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"您傳送了訊息"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"正在傳送…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"訊息傳送失敗，輕觸即可再試一次。"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"訊息傳送失敗，正在重試…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"重新傳送或刪除"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"請致電緊急服務。目前，您的短訊無法送達。"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"失敗"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"下載新的多媒體訊息"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"新的多媒體訊息"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"無法下載"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"輕觸即可再試一次"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"輕觸即可下載"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"下載或刪除"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"正在下載…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"訊息已過期或無法取得"</string>
-    <string name="mms_info" msgid="3402311750134118165">"大小：<xliff:g id="MESSAGESIZE">%1$s</xliff:g>，期限：<xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"收件者無效，因此無法傳送訊息。"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"您還未在網絡上啟用這項服務"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"網絡發生問題，因此無法傳送"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"訊息已過期或無法取得"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(沒有主旨)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"未知的寄件者"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"已傳送"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"無法下載 <xliff:g id="FROM">%2$s</xliff:g> 傳送的這則訊息「<xliff:g id="SUBJECT">%1$s</xliff:g>」。"</string>
-    <string name="low_memory" msgid="5300743415198486619">"記憶體不足，因此無法完成資料庫操作"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"無法傳送訊息"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"部分訊息未能在「短訊」中發送"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g>個對話中的<xliff:g id="MESSAGES_1">%d</xliff:g>則訊息</item>
-      <item quantity="one">一個對話中的<xliff:g id="MESSAGES_0">%d</xliff:g>則訊息</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"仍未下載訊息"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"部分訊息未能在「短訊」中下載"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g>個對話中的<xliff:g id="MESSAGES_1">%d</xliff:g>則訊息</item>
-      <item quantity="one">一個對話中的<xliff:g id="MESSAGES_0">%d</xliff:g>則訊息</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"未能傳送訊息至 <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"請致電緊急服務。目前，您的短訊無法送達至 <xliff:g id="NUMBER">%1$s</xliff:g>。"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> 則新訊息</item>
-      <item quantity="one">新訊息</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"開始"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"無法使用相機"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"無法使用相機"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"無法錄製影片"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"無法儲存媒體檔案"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"無法拍照"</string>
-    <string name="back" msgid="1477626055115561645">"返回"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"已封存"</string>
-    <string name="action_delete" msgid="4076795795307486019">"刪除"</string>
-    <string name="action_archive" msgid="5437034800324083170">"封存"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"取消封存"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"關閉通知"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"開啟通知"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"新增聯絡人"</string>
-    <string name="action_download" msgid="7786338136368564146">"下載"</string>
-    <string name="action_send" msgid="377635240181672039">"傳送"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"刪除"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"要刪除這個訊息嗎？"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"此操作將無法復原。"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"刪除"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">要刪除這些對話嗎？</item>
-      <item quantity="one">要刪除這個對話嗎？</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"刪除"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"取消"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"收件者︰"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"選取多個圖片"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"確認選取"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"超過 <xliff:g id="COUNT">%d</xliff:g> 個項目"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"無法錄製語音，請再試一次。"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"無法播放語音，請再試一次。"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"無法儲存語音，請再試一次。"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"輕觸並按住"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">"、 "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">"： "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"圖片"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"錄音片段"</string>
-    <string name="notification_video" msgid="4331423498662606204">"影片"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"聯絡人卡"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"下載"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"透過短訊回覆"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"透過 MMS 回覆"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"回覆"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>位參加者</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>位參加者</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"我"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"已封鎖並封存聯絡人"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"已解除封鎖並取消封存聯絡人"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"已封存 <xliff:g id="COUNT">%d</xliff:g> 個對話記錄"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"已取消封存 <xliff:g id="COUNT">%d</xliff:g> 個項目"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"已關閉通知"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"已開啟通知"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"準備就緒，輕觸 [重新傳送]。"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"已成功將「短訊」設定為預設短訊應用程式。"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">捨棄附件</item>
-      <item quantity="one">捨棄附件</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"音效檔案附件"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"播放音效檔案附件"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"暫停"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"來自<xliff:g id="SENDER">%1$s</xliff:g>的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g>未能成功傳送的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g>傳送的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"尚未傳送給<xliff:g id="CONTACT">%1$s</xliff:g>的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"正在傳送給<xliff:g id="CONTACT">%1$s</xliff:g>的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"未能成功傳送給<xliff:g id="CONTACT">%1$s</xliff:g>的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"傳送給<xliff:g id="CONTACT">%1$s</xliff:g>的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g>未能成功傳送的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。<xliff:g id="GROUPINFO">%4$s</xliff:g>。"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g>傳送的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。<xliff:g id="GROUPINFO">%4$s</xliff:g>。"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"尚未傳送給<xliff:g id="GROUP">%1$s</xliff:g>的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"正在傳送給<xliff:g id="GROUP">%1$s</xliff:g>的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"未能成功傳送給<xliff:g id="GROUP">%1$s</xliff:g>的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"傳送給<xliff:g id="GROUP">%1$s</xliff:g>的訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"未能成功傳送的訊息。輕觸即可重試。"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"與<xliff:g id="PARTICIPANTS">%s</xliff:g>的對話"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"刪除主旨"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"拍攝影片"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"拍攝靜態圖像"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"拍照"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"開始錄製影片"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"切換至全屏攝像"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"切換前置和後置鏡頭"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"停止錄製並附加影片"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"停止錄製影片"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"「短訊」相片"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> 張相片已儲存至「<xliff:g id="ALBUMNAME_3">%s</xliff:g>」相簿</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 張相片已儲存至「<xliff:g id="ALBUMNAME_1">%s</xliff:g>」相簿</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> 部影片已儲存至「<xliff:g id="ALBUMNAME_3">%s</xliff:g>」相簿</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 部影片已儲存至「<xliff:g id="ALBUMNAME_1">%s</xliff:g>」相簿</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> 個附件已儲存至「<xliff:g id="ALBUMNAME_3">%s</xliff:g>」相簿</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 個附件已儲存至「<xliff:g id="ALBUMNAME_1">%s</xliff:g>」相簿</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> 個附件已儲存至「下載」</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 個附件已儲存至「下載」</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">已儲存<xliff:g id="QUANTITY_1">%d</xliff:g>個附件</item>
-      <item quantity="one">已儲存<xliff:g id="QUANTITY_0">%d</xliff:g>個附件</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">無法儲存<xliff:g id="QUANTITY_1">%d</xliff:g>個附件</item>
-      <item quantity="one">無法儲存<xliff:g id="QUANTITY_0">%d</xliff:g>個附件</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"已儲存的 MMS 附件"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"設定"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"已封存"</string>
-    <string name="action_close" msgid="1840519376200478419">"關閉"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"進階"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"除錯"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"通知"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"音效"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"靜音"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"震動"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"已封鎖"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"短訊傳送報告"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"每次發送短訊後要求發送報告"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"自動擷取"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"自動擷取 MMS 訊息"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"漫遊時自動擷取"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"漫遊時自動擷取 MMS 訊息"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"群組短訊"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"有多位收件者時只發送一則 MMS 訊息"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"預設短訊應用程式"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"預設短訊應用程式"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"您的電話號碼"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"不明"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"傳送訊息音效"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"傾印短訊"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"將收到的短訊原始資料傾印到外部儲存檔案"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"傾印 MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"將收到的 MMS 原始資料傾印到外部儲存檔案"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"無線警示"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"訊息選項"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"複製文字"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"查看詳情"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"刪除"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"轉寄"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"訊息詳情"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"類型： "</string>
-    <string name="text_message" msgid="7415419755252205721">"短訊"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"多媒體訊息"</string>
-    <string name="from_label" msgid="1947831848146564875">"寄件者： "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"收件者： "</string>
-    <string name="sent_label" msgid="5186286057597137301">"傳送時間： "</string>
-    <string name="received_label" msgid="4442494712757995203">"接收時間： "</string>
-    <string name="subject_label" msgid="1887378451808609152">"主旨： "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"大小： "</string>
-    <string name="priority_label" msgid="5029073794896222902">"重要： "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM 卡： "</string>
-    <string name="priority_high" msgid="728836357310908368">"高"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"正常"</string>
-    <string name="priority_low" msgid="7398724779026801851">"低"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM 卡 <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"隱藏的寄件者地址"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"載入附件時無法傳送訊息。"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"無法載入附件，請再試一次。"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"網絡尚未準備好，請再試一次。"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"刪除文本"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"切換文字和數字輸入"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"新增更多參與者"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"確認參與者"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"開始新的對話"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"選取這個項目"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"播放影片"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"參與者和選項"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"除錯"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"參與者和選項"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"一般"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"這個對話的參與者"</string>
-    <string name="action_call" msgid="6596167921517350362">"進行通話"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"傳送訊息"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;br/&gt;&lt;small&gt;從 <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt; 發送短訊"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">傳送相片</item>
-      <item quantity="one">傳送相片</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">傳送音效檔案</item>
-      <item quantity="one">傳送音效檔案</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">傳送影片</item>
-      <item quantity="one">傳送影片</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">傳送聯絡資料</item>
-      <item quantity="one">傳送聯絡資料</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">傳送附件</item>
-      <item quantity="one">傳送附件</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g>個附件正等待傳送</item>
-      <item quantity="one">一個附件正等待傳送</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"傳送意見"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"前往 Google Play 商店查看"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"版本資料"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"%1$s 版"</string>
-    <string name="menu_license" msgid="1157954180701135202">"開放原始碼授權"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"通知"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"已達到附件限制"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"未能成功載入附件。"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"新增至聯絡人？"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"新增聯絡人"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"主旨"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"主旨： "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g>：<xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"正在載入聯絡人卡片"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"無法載入聯絡人資訊卡"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"查看聯絡人卡片"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 個聯絡人</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 個聯絡人</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"聯絡人資訊卡"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"生日"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"附註"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"轉寄郵件"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"回覆"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"短訊功能已停用"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"將「短訊」設定為預設短訊應用程式，即可發送訊息"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"將「短訊」設定為預設短訊應用程式"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"變更"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"將「短訊」設定為預設短訊應用程式，即可接收訊息"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"尚未選取傳送短訊的首選 SIM"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"裝置擁有者不允許使用該應用程式。"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"確定"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"參與對話的人過多"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">無效的聯絡人</item>
-      <item quantity="one">無效的聯絡人</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"無法載入相機圖片"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"您： "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>： "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"草稿"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"只要有新對話，便會在此列出"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"封存的對話顯示在這裏"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"正在載入對話…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"圖片"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"錄音片段"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"影片"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"聯絡人卡"</string>
-    <string name="mms_text" msgid="1528791558806015806">"MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"復原"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"重試"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"如要傳送新訊息，請輸入聯絡人姓名或電話號碼"</string>
-    <string name="action_block" msgid="9032076625645190136">"封鎖"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"封鎖<xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"解除封鎖<xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"要封鎖 <xliff:g id="DESTINATION">%s</xliff:g>？"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"您將繼續接收這個電話號碼傳來的訊息，但不會再收到通知。這個對話將被封存。"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"已封鎖的聯絡人"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"解除封鎖"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"已封鎖的聯絡人"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"從文件庫選擇圖片"</string>
-    <string name="sending_message" msgid="6363584950085384929">"正在傳送訊息"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"已傳送訊息"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"流動數據已關閉，請檢查您的設定。"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"無法在飛行模式下傳送訊息"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"無法傳送訊息"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"已下載訊息"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"流動數據已關閉，請檢查您的設定。"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"在飛行模式下無法下載訊息"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"無法下載訊息"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"0"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"1"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"2"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"3"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"4"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"5"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"6"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"7"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"8"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"9"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"無法經<xliff:g id="CARRIERNAME">%1$s</xliff:g>傳送訊息，錯誤：<xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"無法經不明流動網絡供應商傳送訊息，錯誤：<xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"轉寄：<xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"無法傳送訊息：未在網絡上啟用服務"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"無法傳送訊息：目的地位址無效"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"無法傳送訊息：訊息無效"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"無法傳送訊息：不支援的內容"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"無法傳送訊息：不支援的訊息"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"無法傳送訊息：太大"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"新訊息"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"檢視"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"圖片"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"找不到合適的應用程式"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"移除收件者"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"新訊息"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"取消"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"編輯接入點"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"未設定"</string>
-    <string name="apn_name" msgid="1572691851070894985">"名稱"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"MMS 代理"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"MMS 通訊埠"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN 類型"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"刪除 APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"新增 APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"儲存"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"捨棄"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"[名稱] 欄位不可留空。"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN 不可留空。"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC 欄位必須為 3 位數。"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC 欄位必須要有 2 或 3 位數。"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"正在還原預設 APN 設定。"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"重設回預設值"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"重設預設 APN 設定已完成。"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"未命名"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"接入點名稱"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"新增 APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"這位使用者無法修改存取點名稱設定"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"要複製到剪貼簿嗎？"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"複製"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"至 <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"一般"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"進階"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"一般設定"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"進階設定"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"「<xliff:g id="SIM_NAME">%s</xliff:g>」SIM 卡"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"向所有收件者逐一傳送短訊。只有您會收到回覆"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"向所有收件者傳送一封 MMS"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"電話號碼不明"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"新訊息"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"新訊息。"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM 選取器"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"已選擇<xliff:g id="SIM_0">%1$s</xliff:g>，SIM 選取器"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"編輯主旨"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"選取 SIM 或編輯主旨"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"輕觸並按住即可錄製音效檔案"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"開始新的對話"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"短訊"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"「短訊」清單"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"短訊"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"新訊息"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"對話群組清單"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"正在載入對話"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"正在載入訊息"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"查看更多對話"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"查看更多訊息"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"對話群組已刪除"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"已刪除對話，輕觸即可查看其他「短訊」對話"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"已封鎖"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"已解除封鎖"</string>
-    <string name="db_full" msgid="8459265782521418031">"儲存空間不足。部分資料可能會遺失。"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"選取附件"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"確認選取"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"已選取 <xliff:g id="COUNT">%d</xliff:g> 個附件"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"請移除一個或多個附件，然後再試一次。"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"您可以嘗試傳送訊息，但可能要移除一個或多個附件才可送達。"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"每封郵件只可傳送一部影片。請移除額外的影片，然後再試一次。"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"「短訊」無法載入附件。"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"直接傳送"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"無法開始對話"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"已選取 <xliff:g id="SELECTED_SIM">%s</xliff:g>"</string>
-</resources>
diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml
deleted file mode 100644
index 3226b70..0000000
--- a/res/values-zh-rTW/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"無主旨"</item>
-    <item msgid="272485471009191934">"無主旨"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"是"</item>
-    <item msgid="6049132459802288033">"否"</item>
-    <item msgid="3084376867445867895">"確定"</item>
-    <item msgid="3155097332660174689">"呵呵"</item>
-    <item msgid="2611328818571146775">"謝謝"</item>
-    <item msgid="4881335087096496747">"我同意"</item>
-    <item msgid="2422296858597420738">"很好"</item>
-    <item msgid="4805581752819452687">"我正在路上"</item>
-    <item msgid="4746700499431366214">"好，我稍後再回覆您"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
deleted file mode 100644
index c911ea7..0000000
--- a/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"簡訊"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"簡訊"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"選取對話"</string>
-    <string name="action_settings" msgid="1329008122345201684">"設定"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"傳送訊息"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"新增附件"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"説明"</string>
-    <string name="welcome" msgid="2857560951820802321">"歡迎使用"</string>
-    <string name="skip" msgid="7238879696319945853">"略過"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"繼續 &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"繼續"</string>
-    <string name="exit" msgid="1905187380359981199">"結束"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"設定 &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"設定"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"「簡訊」需要取得簡訊、電話和聯絡人應用程式的存取權限。"</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"如要變更權限，請依序前往 [設定] &gt; [應用程式] &gt; [簡訊] &gt; [權限]。"</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"如要變更權限，請依序前往 [設定]、[應用程式]、[簡訊] 及 [權限]。"</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"常用聯絡人"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"所有聯絡人"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"傳送至 <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"拍照或錄影"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"選擇這個裝置上的圖片"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"錄音"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"選擇相片"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"已選取媒體。"</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"已取消選取媒體。"</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"已選取 <xliff:g id="COUNT">%d</xliff:g> 個項目"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"圖片 (<xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>)"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"圖片"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"錄音"</string>
-    <string name="action_share" msgid="2143483844803153871">"分享"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"剛剛"</string>
-    <string name="posted_now" msgid="867560789350406701">"最新"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 分鐘</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 分鐘</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 小時</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 小時</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 天</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 天</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 週</item>
-      <item quantity="one">1 週</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 個月</item>
-      <item quantity="one">1 個月</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 年</item>
-      <item quantity="one">1 年</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"等級 0 訊息"</string>
-    <string name="save" msgid="5081141452059463572">"儲存"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"裝置儲存空間不足，「簡訊」會自動刪除較舊簡訊以釋出空間。"</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"儲存空間不足"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"在裝置可用空間增加前，「簡訊」可能無法收發訊息。"</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"簡訊儲存空間即將用完，建議您刪除部分訊息。"</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"驗證您的手機號碼"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"這個一次性步驟可確保「簡訊」正確傳送群組訊息。"</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"手機號碼"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"刪除所有內含媒體的訊息"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"刪除超過 <xliff:g id="DURATION">%s</xliff:g>的訊息"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"自動刪除超過 <xliff:g id="DURATION">%s</xliff:g>的訊息"</string>
-    <string name="ignore" msgid="7063392681130898793">"忽略"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"刪除所有內含媒體的訊息？"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"刪除超過 <xliff:g id="DURATION">%s</xliff:g>的訊息？"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"刪除超過 <xliff:g id="DURATION">%s</xliff:g>的訊息並開啟自動刪除設定？"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g>說了"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"您說了"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"來自<xliff:g id="SENDER">%s</xliff:g>的訊息"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"您傳送了訊息"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"傳送中…"</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"傳送失敗，輕觸即可再試一次。"</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"傳送失敗，正在嘗試重新傳送…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"重新傳送或刪除"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"目前無法傳送您的簡訊，請撥打語音電話聯絡緊急服務。"</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"失敗"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"可下載新的多媒體訊息"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"新的多媒體訊息"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"無法下載"</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"輕觸即可再試一次"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"輕觸即可下載"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"下載或刪除"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"下載中…"</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"訊息已過期或無法存取"</string>
-    <string name="mms_info" msgid="3402311750134118165">"大小：<xliff:g id="MESSAGESIZE">%1$s</xliff:g>，期限：<xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"收件者無效，因此無法傳送訊息。"</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"尚未透過網路啟用服務"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"網路發生問題，因此無法傳送"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"訊息已過期或無法存取"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(無主旨)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"寄件者不明"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"已傳送"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"無法下載來自 <xliff:g id="FROM">%2$s</xliff:g> 的這則訊息：<xliff:g id="SUBJECT">%1$s</xliff:g>。"</string>
-    <string name="low_memory" msgid="5300743415198486619">"記憶體不足，因此無法完成資料庫作業"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"訊息未傳送"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"「簡訊」未傳送部分訊息"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> 個對話中的 <xliff:g id="MESSAGES_1">%d</xliff:g> 則訊息</item>
-      <item quantity="one">1 個對話中的 <xliff:g id="MESSAGES_0">%d</xliff:g> 則訊息</item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"訊息未順利下載"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"「簡訊」未下載部分訊息"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="other"><xliff:g id="CONVERSATIONS">%d</xliff:g> 個對話中的 <xliff:g id="MESSAGES_1">%d</xliff:g> 則訊息</item>
-      <item quantity="one">1 個對話中的 <xliff:g id="MESSAGES_0">%d</xliff:g> 則訊息</item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"無法傳送訊息給 <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"目前無法將您的簡訊傳送至 <xliff:g id="NUMBER">%1$s</xliff:g>，請撥打語音電話聯絡緊急服務。"</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> 則新訊息</item>
-      <item quantity="one">新訊息</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"發起"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"無法使用相機"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"無法使用相機"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"無法錄影"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"無法儲存媒體"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"無法拍照"</string>
-    <string name="back" msgid="1477626055115561645">"返回"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"已封存"</string>
-    <string name="action_delete" msgid="4076795795307486019">"刪除"</string>
-    <string name="action_archive" msgid="5437034800324083170">"封存"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"取消封存"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"關閉通知"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"開啟通知"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"新增聯絡人"</string>
-    <string name="action_download" msgid="7786338136368564146">"下載"</string>
-    <string name="action_send" msgid="377635240181672039">"傳送"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"刪除"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"刪除這則訊息？"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"這項操作無法復原。"</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"刪除"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="other">要刪除這些對話嗎？</item>
-      <item quantity="one">要刪除這個對話嗎？</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"刪除"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"取消"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"收件者"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"選取多張圖片"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"確認選取"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"超過 <xliff:g id="COUNT">%d</xliff:g> 個項目"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"無法錄製音訊，請再試一次。"</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"無法播放音訊，請再試一次。"</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"無法儲存音訊，請再試一次。"</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"輕觸並按住"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">"、 "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">"： "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"圖片"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"音訊剪輯"</string>
-    <string name="notification_video" msgid="4331423498662606204">"影片"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"聯絡人卡片"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"下載"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"透過簡訊回覆"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"透過多媒體訊息回覆"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"回覆"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 位參與者</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位參與者</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"我"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"已封鎖並封存聯絡人"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"已解除封鎖及解除封存聯絡人"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"已封存 <xliff:g id="COUNT">%d</xliff:g> 個"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"已解除封存 <xliff:g id="COUNT">%d</xliff:g> 個"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"已關閉通知功能"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"已開啟通知功能"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"設定程序已完成，請再次輕觸 [傳送]。"</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"已成功將「簡訊」設為預設的簡訊應用程式。"</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="other">捨棄附件</item>
-      <item quantity="one">捨棄附件</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"音訊附件"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"播放音訊附件"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"暫停"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"收到<xliff:g id="SENDER">%1$s</xliff:g>傳送的訊息，內容如下：<xliff:g id="MESSAGE">%2$s</xliff:g>。"</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"<xliff:g id="SENDER">%1$s</xliff:g>嘗試傳送訊息但未成功：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"<xliff:g id="SENDER">%1$s</xliff:g>傳送了訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"給<xliff:g id="CONTACT">%1$s</xliff:g>的訊息尚未送出：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"正在傳送訊息給<xliff:g id="CONTACT">%1$s</xliff:g>：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"無法傳送訊息給<xliff:g id="CONTACT">%1$s</xliff:g>：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"已傳送訊息給<xliff:g id="CONTACT">%1$s</xliff:g>：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"<xliff:g id="SENDER">%1$s</xliff:g>嘗試傳送訊息但未成功：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。<xliff:g id="GROUPINFO">%4$s</xliff:g>。"</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"<xliff:g id="SENDER">%1$s</xliff:g>傳送了訊息：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。<xliff:g id="GROUPINFO">%4$s</xliff:g>。"</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"給<xliff:g id="GROUP">%1$s</xliff:g>的訊息尚未送出：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"正在傳送訊息給<xliff:g id="GROUP">%1$s</xliff:g>：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"無法傳送訊息給<xliff:g id="GROUP">%1$s</xliff:g>：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"已傳送訊息給<xliff:g id="GROUP">%1$s</xliff:g>：<xliff:g id="MESSAGE">%2$s</xliff:g>。時間：<xliff:g id="TIME">%3$s</xliff:g>。"</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"訊息傳送失敗，輕觸即可重試。"</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"與<xliff:g id="PARTICIPANTS">%s</xliff:g>的對話"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"刪除主旨"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"錄影"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"拍攝靜態影像"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"拍照"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"開始錄影"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"切換至全螢幕相機"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"切換使用前置與後置鏡頭"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"停止錄影並附加影片"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"停止錄影"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"簡訊相片"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> 張相片已儲存到「<xliff:g id="ALBUMNAME_3">%s</xliff:g>」相簿</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 張相片已儲存到「<xliff:g id="ALBUMNAME_1">%s</xliff:g>」相簿</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> 段影片已儲存到「<xliff:g id="ALBUMNAME_3">%s</xliff:g>」相簿</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 段影片已儲存到「<xliff:g id="ALBUMNAME_1">%s</xliff:g>」相簿</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> 份附件已儲存到「<xliff:g id="ALBUMNAME_3">%s</xliff:g>」相簿</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 份附件已儲存到「<xliff:g id="ALBUMNAME_1">%s</xliff:g>」相簿</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> 份附件已儲存到「下載內容」</item>
-      <item quantity="one"><xliff:g id="QUANTITY_0">%d</xliff:g> 份附件已儲存到「下載內容」</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="other">已儲存 <xliff:g id="QUANTITY_1">%d</xliff:g> 個附件</item>
-      <item quantity="one">已儲存 <xliff:g id="QUANTITY_0">%d</xliff:g> 個附件</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="other">無法儲存 <xliff:g id="QUANTITY_1">%d</xliff:g> 個附件</item>
-      <item quantity="one">無法儲存 <xliff:g id="QUANTITY_0">%d</xliff:g> 個附件</item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"已儲存的多媒體訊息附件"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"設定"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"已封存"</string>
-    <string name="action_close" msgid="1840519376200478419">"關閉"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"多媒體訊息"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"進階"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"偵錯"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"通知"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"音效"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"靜音"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"震動"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"已封鎖"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"簡訊傳送報告"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"傳送簡訊後要求傳送回條"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"自動擷取"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"自動擷取多媒體訊息"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"漫遊時自動擷取"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"漫遊時自動擷取多媒體訊息"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"群組簡訊"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"有多位收件者時，也使用多媒體訊息傳送訊息"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"預設簡訊應用程式"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"預設簡訊應用程式"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"您的電話號碼"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"不明"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"訊息傳送音效"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"傾印簡訊"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"將收到的簡訊原始資料傾印到外部儲存空間檔案"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"傾印多媒體訊息"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"將收到的多媒體訊息原始資料傾印到外部儲存空間檔案"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"無線災害示警"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"訊息選項"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"複製文字"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"查看詳細資料"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"刪除"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"轉寄"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"訊息詳細資料"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"類型： "</string>
-    <string name="text_message" msgid="7415419755252205721">"簡訊"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"多媒體訊息"</string>
-    <string name="from_label" msgid="1947831848146564875">"寄件者： "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"收件者： "</string>
-    <string name="sent_label" msgid="5186286057597137301">"傳送時間： "</string>
-    <string name="received_label" msgid="4442494712757995203">"接收時間： "</string>
-    <string name="subject_label" msgid="1887378451808609152">"主旨： "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"大小： "</string>
-    <string name="priority_label" msgid="5029073794896222902">"優先順序： "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM 卡： "</string>
-    <string name="priority_high" msgid="728836357310908368">"高"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"一般"</string>
-    <string name="priority_low" msgid="7398724779026801851">"低"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM 卡 <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"隱藏的寄件者地址"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"載入附件時無法傳送訊息。"</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"無法載入附件，請再試一次。"</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"網路尚未就緒，請再試一次。"</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"刪除文字"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"切換輸入的文字和數字"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"新增更多參與者"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"確認參與者"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"發起新對話"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"選取此項目"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"播放影片"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"參與者和選項"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"偵錯"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"參與者和選項"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"一般"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"這個對話的參與者"</string>
-    <string name="action_call" msgid="6596167921517350362">"進行通話"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"傳送簡訊"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"&lt;small&gt;透過 <xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;&lt;br&gt; 傳送訊息"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="other">傳送相片</item>
-      <item quantity="one">傳送相片</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="other">傳送音訊</item>
-      <item quantity="one">傳送音訊</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="other">傳送影片</item>
-      <item quantity="one">傳送影片</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="other">傳送聯絡人卡片</item>
-      <item quantity="one">傳送聯絡人卡片</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="other">傳送附件</item>
-      <item quantity="one">傳送附件</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="other">有 <xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> 個附件可隨郵件傳送</item>
-      <item quantity="one">有 1 個附件可隨郵件傳送</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"提供意見"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"前往 Google Play 商店查看"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"版本資訊"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"版本 %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"開放原始碼授權"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"通知"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"已達附件數量上限"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"無法載入附件。"</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"加到聯絡人？"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"新增聯絡人"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"主旨"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"主旨： "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g>：<xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"正在載入聯絡人卡片"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"無法載入聯絡人卡片"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"查看聯絡人卡片"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> 位聯絡人</item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位聯絡人</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"聯絡人卡片"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"生日"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"附註"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"轉寄郵件"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"回覆"</string>
-    <string name="plus_one" msgid="9010288417554932581">"還有 1 位參與者"</string>
-    <string name="plus_n" msgid="8961547034116059566">"還有 %d 位參與者"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"簡訊功能已停用"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"如要傳送訊息，請將「簡訊」設為預設的簡訊應用程式"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"將「簡訊」設為預設的簡訊應用程式"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"變更"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"如要接收訊息，請將「簡訊」設為預設的簡訊應用程式"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"尚未選取傳送簡訊時慣用的 SIM 卡"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"裝置擁有者不允許這個應用程式的要求。"</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"確定"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"對話參與者人數過多"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="other">聯絡人無效</item>
-      <item quantity="one">聯絡人無效</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"無法載入相機圖片"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"您： "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>： "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"草稿"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"這裡會列出您發起的新對話"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"封存的對話會顯示在這裡"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"正在載入對話…"</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"圖片"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"音訊剪輯"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"影片"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"聯絡人卡片"</string>
-    <string name="mms_text" msgid="1528791558806015806">"多媒體訊息"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"復原"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"重試"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"輸入聯絡人名稱或電話號碼，即可開始傳送新訊息"</string>
-    <string name="action_block" msgid="9032076625645190136">"封鎖"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"封鎖 <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"解除封鎖 <xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"封鎖 <xliff:g id="DESTINATION">%s</xliff:g>？"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"您將持續接收來自這個號碼的訊息，但不會再收到通知。此對話將由系統封存。"</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"封鎖的聯絡人"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"解除封鎖"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"封鎖的聯絡人"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"選擇文件庫中的圖片"</string>
-    <string name="sending_message" msgid="6363584950085384929">"正在傳送訊息"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"訊息成功送出"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"行動數據已關閉。請檢查您的設定。"</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"飛航模式下無法傳送訊息"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"無法傳送訊息"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"訊息下載完成"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"行動數據已關閉。請檢查您的設定。"</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"在飛航模式下無法下載訊息"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"無法下載訊息"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"0"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"1"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"2"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"3"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"4"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"5"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"6"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"7"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"8"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"9"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"無法透過<xliff:g id="CARRIERNAME">%1$s</xliff:g>傳送訊息 (錯誤代碼：<xliff:g id="ERRORCODE">%2$d</xliff:g>)"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"無法透過不明行動通訊業者傳送訊息 (錯誤代碼：<xliff:g id="ERRORCODE">%1$d</xliff:g>)"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"轉寄：<xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"訊息未傳送：未在網路上啟用服務"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"無法傳送訊息：目的地位址無效"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"無法傳送訊息：訊息無效"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"無法傳送訊息：不支援的內容"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"無法傳送訊息：不支援的訊息"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"訊息未傳送：內容過大"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"新訊息"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"查看"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"圖片"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"找不到適用的應用程式"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"移除收件者"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"新訊息"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"取消"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"編輯存取點"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"未設定"</string>
-    <string name="apn_name" msgid="1572691851070894985">"名稱"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"多媒體訊息 Proxy"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"多媒體訊息通訊埠"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"APN 類型"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"刪除 APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"新增 APN"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"儲存"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"捨棄"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"名稱欄位不可留空。"</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"APN 不可留空。"</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"MCC 欄位的值必須為 3 碼。"</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"MNC 欄位的值必須為 2 或 3 碼。"</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"正在還原預設 APN 設定。"</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"重設為預設值"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"預設 APN 設定的重設程序已完成。"</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"未命名"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"存取點名稱"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"新增 APN"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"這位使用者無法修改存取點名稱設定"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"複製到剪貼簿？"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"複製"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"傳送至 <xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"一般"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"進階"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"一般設定"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"進階設定"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"「<xliff:g id="SIM_NAME">%s</xliff:g>」SIM 卡"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"分別傳送簡訊給所有收件者 (如有任何回覆，只有您會收到)"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"傳送一則多媒體訊息給所有收件者"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"不明號碼"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"新訊息"</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"新訊息。"</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"SIM 卡選取器"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"已選取「<xliff:g id="SIM_0">%1$s</xliff:g>」，SIM 卡選取器"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"編輯主旨"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"選取 SIM 卡或編輯主旨"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"輕觸並按住即可錄製音訊"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"發起新對話"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"簡訊"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"訊息清單"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"簡訊"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"新訊息"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"會話群組清單"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"正在載入對話"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"正在載入訊息"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"查看更多對話"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"查看更多訊息"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"對話已刪除"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"已刪除對話。輕觸即可顯示其他「簡訊」對話"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"已封鎖"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"已解除封鎖"</string>
-    <string name="db_full" msgid="8459265782521418031">"儲存空間即將用盡，部分資料可能會遺失。"</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"選取附件"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"確認選取項目"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"選取了 <xliff:g id="COUNT">%d</xliff:g> 個附件"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"請移除一或多個附件，然後再試一次。"</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"您可以嘗試傳送訊息，但可能必須移除一或多個附件才能順利傳送。"</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"每則訊息只能傳送一部影片。請移除額外的影片，然後再試一次。"</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"「簡訊」無法載入附件。"</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"確定傳送"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"無法發起對話"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"已選取「<xliff:g id="SELECTED_SIM">%s</xliff:g>」"</string>
-</resources>
diff --git a/res/values-zu/arrays.xml b/res/values-zu/arrays.xml
deleted file mode 100644
index 50eafe1..0000000
--- a/res/values-zu/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string-array name="empty_subject_strings">
-    <item msgid="8900116186849071724">"asikho isihloko"</item>
-    <item msgid="272485471009191934">"asikho isihloko"</item>
-  </string-array>
-  <string-array name="notification_reply_choices">
-    <item msgid="1875991048685328264">"Yebo"</item>
-    <item msgid="6049132459802288033">"Cha"</item>
-    <item msgid="3084376867445867895">"KULUNGILE"</item>
-    <item msgid="3155097332660174689">"Hehe"</item>
-    <item msgid="2611328818571146775">"Siyabonga"</item>
-    <item msgid="4881335087096496747">"Ngiyavuma"</item>
-    <item msgid="2422296858597420738">"I-Nice"</item>
-    <item msgid="4805581752819452687">"Ngisendleleni"</item>
-    <item msgid="4746700499431366214">"KULUNGILE, mangibuye kuwe emuva kwesikhathi"</item>
-    <item msgid="4342041517788201970">":)"</item>
-    <item msgid="7439437911747961187">":("</item>
-  </string-array>
-</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
deleted file mode 100644
index 0221bcd..0000000
--- a/res/values-zu/strings.xml
+++ /dev/null
@@ -1,519 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3062916848713424329">"Imilayezo"</string>
-    <string name="share_intent_label" msgid="6920483598866144717">"Imilayezo"</string>
-    <string name="share_intent_activity_label" msgid="2939454246983196756">"Khetha ingxoxo"</string>
-    <string name="action_settings" msgid="1329008122345201684">"Izilungiselelo"</string>
-    <string name="sendButtonContentDescription" msgid="8422114979691093956">"Thumela umlayezo"</string>
-    <string name="attachMediaButtonContentDescription" msgid="2758624209216276682">"Engeza okunamathiselwe kwi-imeyili"</string>
-    <string name="help_and_feedback_activity_label" msgid="8070710971014835182">"Usizo"</string>
-    <string name="welcome" msgid="2857560951820802321">"Siyakwamukela"</string>
-    <string name="skip" msgid="7238879696319945853">"Yeqa"</string>
-    <string name="next_with_arrow" msgid="2840729397885031655">"Okulandelayo &gt;"</string>
-    <string name="next" msgid="4496962051601713843">"Okulandelayo"</string>
-    <string name="exit" msgid="1905187380359981199">"Phuma"</string>
-    <string name="settings_with_arrow" msgid="8534633224579301342">"Izilungiselelo &gt;"</string>
-    <string name="settings" msgid="1045695083932447399">"Izilungiselelo"</string>
-    <string name="required_permissions_promo" msgid="3898014894175251590">"Ukulayeza kudinga imvume ku-SMS, ifoni noxhumana nabo."</string>
-    <string name="enable_permission_procedure" msgid="2778471831376319587">"Ungaguqula izimvume ku-Izilungiselelo &gt; Izinhlelo zokusebenza &gt; Isilayezi &gt; Izimvume."</string>
-    <string name="enable_permission_procedure_description" msgid="8672121020793945630">"Ungaguqula izimvume ku-Izilungiselelo, Izinhlelo zokusebenza, Isilayezi, Izimvume."</string>
-    <string name="contact_picker_frequents_tab_title" msgid="7157326165824706883">"Imvamisa"</string>
-    <string name="contact_picker_all_contacts_tab_title" msgid="1424746082040243161">"Bonke oxhumana nabo"</string>
-    <string name="contact_list_send_to_text" msgid="3167455944684758290">"Thumela ku-<xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="mediapicker_cameraChooserDescription" msgid="8498255650058981250">"Thwebula izithombe noma ividiyo"</string>
-    <string name="mediapicker_galleryChooserDescription" msgid="1227741581156455777">"Khetha izithombe kusuka kule divayisi"</string>
-    <string name="mediapicker_audioChooserDescription" msgid="3660616501040372452">"Rekhoda umsindo"</string>
-    <string name="mediapicker_gallery_title" msgid="3169528536727885763">"Khetha isithombe"</string>
-    <string name="mediapicker_gallery_item_selected_content_description" msgid="2569545441879514283">"Imidiya ikhethiwe."</string>
-    <string name="mediapicker_gallery_item_unselected_content_description" msgid="40021674722525910">"Imidiya isuswe ukukhetha."</string>
-    <string name="mediapicker_gallery_title_selection" msgid="3621616141966436510">"<xliff:g id="COUNT">%d</xliff:g> okukhethiwe"</string>
-    <string name="mediapicker_gallery_image_item_description" msgid="8812237405495409901">"isithombe <xliff:g id="DATE">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g>"</string>
-    <string name="mediapicker_gallery_image_item_description_no_date" msgid="8142175029053370662">"Isithombe"</string>
-    <string name="mediapicker_audio_title" msgid="5455016591560739789">"Rekhoda umsindo"</string>
-    <string name="action_share" msgid="2143483844803153871">"Yaba"</string>
-    <string name="posted_just_now" msgid="6632467048088811568">"Khona manje"</string>
-    <string name="posted_now" msgid="867560789350406701">"Manje"</string>
-    <plurals name="num_minutes_ago" formatted="false" msgid="4085627474543076735">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> amaminithi</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> amaminithi</item>
-    </plurals>
-    <plurals name="num_hours_ago" formatted="false" msgid="8010868301590914325">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> amahora</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> amahora</item>
-    </plurals>
-    <plurals name="num_days_ago" formatted="false" msgid="8753803762044567843">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> izinsuku</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> izinsuku</item>
-    </plurals>
-    <plurals name="week_count" formatted="false" msgid="1301973226125551953">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> amaviki</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> amaviki</item>
-    </plurals>
-    <plurals name="month_count" formatted="false" msgid="4858515363324110232">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>izinyanga</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>izinyanga</item>
-    </plurals>
-    <plurals name="year_count" formatted="false" msgid="4522546496183798317">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> iminyaka</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> iminyaka</item>
-    </plurals>
-    <string name="class_0_message_activity" msgid="4603850264073169854">"Umlayezo wesigaba esingu-0"</string>
-    <string name="save" msgid="5081141452059463572">"Londoloza"</string>
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text" msgid="8836401937872068406">"Idivayisi manje inesikhala esincane. Imilayezo izosusa ngokuzenzakalelayo imilayezo emidala ukukhulula isikhala."</string>
-    <string name="sms_storage_low_title" msgid="7985379565293259177">"Isikhala sesitoreji siyaphela"</string>
-    <string name="sms_storage_low_text" msgid="7036247475855447830">"Ukulayeza kungenzeka kungathumeli noma kungamukeli imilayezo kuze kube ukuthi isikhala esiningi sitholakala kudivayisi yakho."</string>
-    <string name="sms_storage_low_notification_ticker" msgid="2393739822170029830">"Isitoreji se-SMS esiphansi. Kungahle kudingeke ukuba ususe imilayezo."</string>
-    <string name="enter_phone_number_title" msgid="7263355879949248448">"Qinisekisa inombolo yakho yefoni"</string>
-    <string name="enter_phone_number_text" msgid="4539767473801195966">"Lesi sinyathelo sesikhathi esisodwa sizoqinisekisa ukuthi Ukulayeza kuzothumela imilayezo yakho yeqembu ngokufanelekile."</string>
-    <string name="enter_phone_number_hint" msgid="6242965213882272822">"Inombolo yefoni"</string>
-    <string name="delete_all_media" msgid="5549693176734564386">"Susa yonke imilayezo ngemidiya"</string>
-    <string name="delete_oldest_messages" msgid="9204277306804390707">"Susa imilayezo emidala kuno-<xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="auto_delete_oldest_messages" msgid="7766679943833404968">"Susa ngokuzenzakalelayo imilayezo emidala kuno-<xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="ignore" msgid="7063392681130898793">"Ziba"</string>
-    <string name="delete_all_media_confirmation" msgid="4601960420953525559">"Susa yonke imilayezo ngemidiya?"</string>
-    <string name="delete_oldest_messages_confirmation" msgid="6172297718425265784">"Sula imilayezo emidala kuno-<xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="auto_delete_oldest_messages_confirmation" msgid="9071499976729145269">"Susa imilayezo emidala kuno-<xliff:g id="DURATION">%s</xliff:g> bese uvule ukususa ngokuzenzakalelayo?"</string>
-    <string name="incoming_text_sender_content_description" msgid="2481078288502342745">"<xliff:g id="SENDER">%s</xliff:g> uthe"</string>
-    <string name="outgoing_text_sender_content_description" msgid="3492116976256510272">"Wena uthe"</string>
-    <string name="incoming_sender_content_description" msgid="7512757244515303701">"Umlayezo ovela ku-<xliff:g id="SENDER">%s</xliff:g>"</string>
-    <string name="outgoing_sender_content_description" msgid="5983163141994434778">"Uthumele umlayezo"</string>
-    <string name="message_status_sending" msgid="3306260780518886107">"Iyathumela..."</string>
-    <string name="message_status_send_failed" msgid="5443627648028194631">"Akuthunyelwe. Thinta ukuze uzame futhi."</string>
-    <string name="message_status_send_retrying" msgid="650840088043267981">"Akuthunyelwe. Iyazama futhi…"</string>
-    <string name="message_status_resend" msgid="7718458416521355708">"Thumela kabusha noma susa"</string>
-    <string name="message_status_send_failed_emergency_number" msgid="1738854184297159948">"Sicela wenze ikholi yezwi kumasevisi wesimo esiphuthumayo. Umlayezo wakho wombhalo awukwazanga ukulethwa ngalesi sikhathi."</string>
-    <string name="message_status_failed" msgid="8009695010381848311">"Yehlulekile"</string>
-    <string name="message_title_manual_download" msgid="2761223322277801061">"Umlayezo we-MMS omusha ongalandwa"</string>
-    <string name="message_title_downloading" msgid="6418481644146460124">"Umlayezo we-MMS omusha"</string>
-    <string name="message_title_download_failed" msgid="3867223594671090459">"Ayikwazanga ukulanda."</string>
-    <string name="message_status_download_failed" msgid="7298035414448355842">"Thinta ukuze uzame futhi"</string>
-    <string name="message_status_download" msgid="6527275493954932656">"Thinta ukuze ulande"</string>
-    <string name="message_status_download_action" msgid="285219832844160">"Landa noma susa"</string>
-    <string name="message_status_downloading" msgid="7159807805159805428">"Iyalanda..."</string>
-    <string name="message_status_download_error" msgid="6957738686287397519">"Umlayezo uphelelwe yisikhathi noma awutholakali"</string>
-    <string name="mms_info" msgid="3402311750134118165">"usayizi: <xliff:g id="MESSAGESIZE">%1$s</xliff:g>, ukuphela kwesikhathi: <xliff:g id="MESSAGEEXPIRE">%2$s</xliff:g>"</string>
-    <string name="invalid_destination" msgid="8214889988397524630">"Ayikwazi ukuthumela. Umamukeli awuvumelekile."</string>
-    <string name="service_not_activated" msgid="5512558652052977817">"Isevisi ayisebenzi kunethiwekhi"</string>
-    <string name="service_network_problem" msgid="3765738916704013318">"Ayikwazanga ukuthumela ngenxa yenkinga yenethiwekhi"</string>
-    <string name="service_message_not_found" msgid="8350935323904134751">"Umlayezo uphelelwe yisikhathi noma awutholakali"</string>
-    <string name="no_subject" msgid="5587715902648568767">"(Asikho isihloko)"</string>
-    <string name="unknown_sender" msgid="504272434917395677">"Umthumeli ongaziwa"</string>
-    <string name="delivered_status_content_description" msgid="3433965196058436991">"Kuthunyelwe"</string>
-    <string name="dl_failure_notification" msgid="8744588243554006189">"Ayikwazanga ukulanda umlayezo we-<xliff:g id="SUBJECT">%1$s</xliff:g> kusuka ku-<xliff:g id="FROM">%2$s</xliff:g>."</string>
-    <string name="low_memory" msgid="5300743415198486619">"Ayikwazanga ukuqedela umsebenzi wemininingo egciniwe ngenxa yememori ephansi"</string>
-    <string name="notification_send_failures_line1_singular" msgid="6783835440207655217">"Umlayezo awuthunyelwanga"</string>
-    <string name="notification_send_failures_line1_plural" msgid="7228944748028969272">"Eminye imilayezo ayithunyelwe Ekulayezeni"</string>
-    <plurals name="notification_send_failures" formatted="false" msgid="6938919932879650691">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> imilayezo kwizingxoxo ezingu-<xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> imilayezo kwizingxoxo ezingu-<xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-    </plurals>
-    <string name="notification_download_failures_line1_singular" msgid="4424772073720626885">"Umlayezo awuzange ulandwe"</string>
-    <string name="notification_download_failures_line1_plural" msgid="1697982467160426345">"Eminye imilayezo ayilandiwe Ekulayezeni"</string>
-    <plurals name="notification_download_failures" formatted="false" msgid="5341490525457911398">
-      <item quantity="one"><xliff:g id="MESSAGES_1">%d</xliff:g> imilayezo kwizingxoxo ezingu-<xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-      <item quantity="other"><xliff:g id="MESSAGES_1">%d</xliff:g> imilayezo kwizingxoxo ezingu-<xliff:g id="CONVERSATIONS">%d</xliff:g></item>
-    </plurals>
-    <string name="notification_emergency_send_failure_line1" msgid="6311715277789488996">"Umlayezo oya ku-<xliff:g id="NUMBER">%1$s</xliff:g> awuthunyelwanga"</string>
-    <string name="notification_emergency_send_failure_line2" msgid="6461481033351036996">"Sicela uwenze ikholi yezwi kumasevisi wesimo esiphuthumayo. Umlayezo wakho wobhalo ku-<xliff:g id="NUMBER">%1$s</xliff:g> awukwazanga ukulethwa ngalesi sikhathi."</string>
-    <plurals name="notification_new_messages" formatted="false" msgid="610594317958128842">
-      <item quantity="one"><xliff:g id="MESSAGES">%d</xliff:g> imilayezo emisha</item>
-      <item quantity="other"><xliff:g id="MESSAGES">%d</xliff:g> imilayezo emisha</item>
-    </plurals>
-    <string name="start_conversation" msgid="7984539515326392793">"Qala"</string>
-    <string name="camera_error_opening" msgid="2739332294400420426">"Ikhamera ayitholakali"</string>
-    <string name="camera_error_unknown" msgid="4283956364220459608">"Ikhamera ayitholakali"</string>
-    <string name="camera_error_video_init_fail" msgid="994632067015578879">"Ukuthwebula kwevidiyo akutholakali"</string>
-    <string name="camera_error_storage_fail" msgid="5536300789483863989">"Ayikwazi ukulondoloza imidiya"</string>
-    <string name="camera_error_failure_taking_picture" msgid="4894133709734862250">"Ayikwazi ukuthatha isithombe"</string>
-    <string name="back" msgid="1477626055115561645">"Phindela emuva"</string>
-    <string name="action_menu_show_archived" msgid="1628518043533374868">"Okufakwe kungobo yomlando"</string>
-    <string name="action_delete" msgid="4076795795307486019">"Susa"</string>
-    <string name="action_archive" msgid="5437034800324083170">"Faka kungobo yomlando"</string>
-    <string name="action_unarchive" msgid="139681611159869493">"Ungafaki kungobo yomlando"</string>
-    <string name="action_notification_off" msgid="4823658797441716246">"Vala izaziso"</string>
-    <string name="action_notification_on" msgid="8244389452685364211">"Vula isaziso"</string>
-    <string name="action_add_contact" msgid="8248615862739848672">"Engeza oxhumana naye"</string>
-    <string name="action_download" msgid="7786338136368564146">"Landa"</string>
-    <string name="action_send" msgid="377635240181672039">"Thumela"</string>
-    <string name="action_delete_message" msgid="2728883749416365507">"Susa"</string>
-    <string name="delete_message_confirmation_dialog_title" msgid="4723834210275712001">"Susa lo mlayezo?"</string>
-    <string name="delete_message_confirmation_dialog_text" msgid="3952533622691031375">"Lesi senzo asikwazi ukuhlehliswa."</string>
-    <string name="delete_message_confirmation_button" msgid="3888584614972573382">"Susa"</string>
-    <plurals name="delete_conversations_confirmation_dialog_title" formatted="false" msgid="2285567882353326800">
-      <item quantity="one">Susa lezi zingxoxo?</item>
-      <item quantity="other">Susa lezi zingxoxo?</item>
-    </plurals>
-    <string name="delete_conversation_confirmation_button" msgid="744574085809600863">"Susa"</string>
-    <string name="delete_conversation_decline_button" msgid="5470021965641900456">"Khansela"</string>
-    <string name="recipient_hint" msgid="1819710673158265515">"Ku-"</string>
-    <string name="action_multiselect" msgid="1219683118692013380">"Khetha izithombe eziningi"</string>
-    <string name="action_confirm_multiselect" msgid="8283370294120913166">"Qinisekisa ukukhetha"</string>
-    <string name="attachment_more_items" msgid="2861573099241369958">"+<xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="audio_recording_start_failed" msgid="4442450764642560851">"Ayikwazi ukurekhoda umsindo. Zama futhi."</string>
-    <string name="audio_recording_replay_failed" msgid="3585760856463273828">"Ayikwazi ukudlala umsindo. Zama futhi."</string>
-    <string name="audio_recording_error" msgid="7762310055059024872">"Ayikwazanga ukulondoloza umsindo. Zama futhi."</string>
-    <string name="audio_picker_hint_text" msgid="6986250080467111491">"Thinta bese ubambe"</string>
-    <string name="enumeration_comma" msgid="7032804261692931808">", "</string>
-    <string name="notification_separator" msgid="3472521786709813414">"  "</string>
-    <string name="notification_ticker_separator" msgid="2027929074008933906">": "</string>
-    <string name="notification_space_separator" msgid="9007689386066977972">"  "</string>
-    <string name="notification_picture" msgid="1176665337098921822">"Isithombe"</string>
-    <string name="notification_audio" msgid="5926581589398218150">"Isiqeshana somsindo"</string>
-    <string name="notification_video" msgid="4331423498662606204">"Ividiyo"</string>
-    <string name="notification_vcard" msgid="7658061674440552878">"Ikhadi loxhumana naye"</string>
-    <string name="notification_download_mms" msgid="6206807985355359528">"Landa"</string>
-    <string name="notification_reply_via_sms" msgid="6990127304684161722">"Phendula nge-SMS"</string>
-    <string name="notification_reply_via_mms" msgid="6706012871186064035">"Phendula nge-MMS"</string>
-    <string name="notification_reply_prompt" msgid="1836023392294480241">"Phendula"</string>
-    <plurals name="wearable_participant_count" formatted="false" msgid="3037889420270036143">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ababambiqhaza</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ababambiqhaza</item>
-    </plurals>
-    <string name="unknown_self_participant" msgid="3186565052350548852">"Mina"</string>
-    <string name="blocked_toast_message" msgid="7903364256385612569">"Oxhumana naye uvinjiwe futhi wafakwa kungobo yomlando"</string>
-    <string name="unblocked_toast_message" msgid="4927617874263586622">"Oxhumana naye uvulelwe futhi wakhishwa kungobo yomlando"</string>
-    <string name="archived_toast_message" msgid="8109348891515322512">"<xliff:g id="COUNT">%d</xliff:g> kufakwe kungobo yomlando"</string>
-    <string name="unarchived_toast_message" msgid="5010777423084203833">"<xliff:g id="COUNT">%d</xliff:g> kukhishwe kungobo yomlando"</string>
-    <string name="notification_off_toast_message" msgid="5203458459139408265">"Izaziso zivaliwe"</string>
-    <string name="notification_on_toast_message" msgid="1240626023754746310">"Izaziso zivuliwe"</string>
-    <string name="toast_after_setting_default_sms_app_for_message_send" msgid="2767997591700713113">"Konke kusethiwe. Thinta u-Thumela futhi."</string>
-    <string name="toast_after_setting_default_sms_app" msgid="2923745971897322476">"Ukulayeza kusethwe ngempumelelo njengohlelo lokusebenza oluzenzakalelayo lwe-SMS."</string>
-    <plurals name="attachment_preview_close_content_description" formatted="false" msgid="5631719319690969981">
-      <item quantity="one">Lahla okunamathiselwe</item>
-      <item quantity="other">Lahla okunamathiselwe</item>
-    </plurals>
-    <string name="audio_attachment_content_description" msgid="499334244765270108">"Ukunamathiselwa komsindo"</string>
-    <string name="audio_play_content_description" msgid="4932509227281251607">"Dala okunamathiselwe komsindo"</string>
-    <string name="audio_pause_content_description" msgid="7578169887065513701">"Misa isikhashana"</string>
-    <string name="incoming_message_announcement" msgid="6369259405539452011">"Umlayezo kusukela ku-<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_failed_message_prefix" msgid="6985644411445605747">"Umlayezo ohlulekile ophuma ku-<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_incoming_successful_message_prefix" msgid="6190814597935995703">"Umlayezo ophuma ku-<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_draft_message_prefix" msgid="8721053088385740646">"Umlayezo ongathunyelwe ku-<xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_sending_message_prefix" msgid="3929653530203574220">"Ithumela umlayezo ku-<xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_failed_message_prefix" msgid="7194065651879454314">"Umlayezo ohlulekile oya ku-<xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="one_on_one_outgoing_successful_message_prefix" msgid="7128492863867327814">"Umlayezo oya ku-<xliff:g id="CONTACT">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_incoming_failed_message_prefix" msgid="7085805237707481779">"Umlayezo ohlulekile kusukela ku-<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_incoming_successful_message_prefix" msgid="7248506967059447054">"Umlayezo ophuma ku-<xliff:g id="SENDER">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>. <xliff:g id="GROUPINFO">%4$s</xliff:g>."</string>
-    <string name="group_outgoing_draft_message_prefix" msgid="1655013812805454648">"Umlayezo ongathunyelwe ku-<xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_sending_message_prefix" msgid="7636874745414695556">"Ithumela umlayezo ku-<xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_failed_message_prefix" msgid="5059983340377901592">"Umlayezo ohlulekile oya ku-<xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="group_outgoing_successful_message_prefix" msgid="1593702642852987920">"Umlayezo oya ku-<xliff:g id="GROUP">%1$s</xliff:g>: <xliff:g id="MESSAGE">%2$s</xliff:g>. Isikhathi: <xliff:g id="TIME">%3$s</xliff:g>."</string>
-    <string name="failed_message_content_description" msgid="7047161648867054936">"Umlayezo ohlulekile. Thinta ukuze uphinde uzame."</string>
-    <string name="group_conversation_description" msgid="2339270924401184182">"Ingxoxo no-<xliff:g id="PARTICIPANTS">%s</xliff:g>"</string>
-    <string name="delete_subject_content_description" msgid="8910749398836396698">"Sula isihloko"</string>
-    <string name="camera_switch_to_video_mode" msgid="2926868205952641428">"Thwebula ividiyo"</string>
-    <string name="camera_switch_to_still_mode" msgid="4419617715199157958">"Thwebula isithombe esimile"</string>
-    <string name="camera_take_picture" msgid="2573317952200799489">"Thatha isithombe"</string>
-    <string name="camera_start_recording" msgid="1736478301191221786">"Qala ukuqopha ividiyo"</string>
-    <string name="camera_switch_full_screen" msgid="6156039742035097276">"Shintshela kukhamela yesikrini esigcwele"</string>
-    <string name="camera_switch_camera_facing" msgid="1566112129296559159">"Shintsha phakathi kwekhamera yaphambilini neyasemuva"</string>
-    <string name="camera_stop_recording" msgid="5331592576107271152">"Misa ukurekhoda uphinde ushumeke ividiyo"</string>
-    <string name="camera_cancel_recording" msgid="6431544304743145818">"Misa ukurekhoda amavidiyo"</string>
-    <string name="photo_view_activity_title" msgid="6556006393051918135">"Ilayeza izithombe"</string>
-    <plurals name="photos_saved_to_album" formatted="false" msgid="7529478299745446838">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> izithombe zilondolozwe ku-albhamu \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> izithombe zilondolozwe ku-albhamu \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="videos_saved_to_album" formatted="false" msgid="6821121808257576788">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> amavidiyo alondolozwe ku-albhamu \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> amavidiyo alondolozwe ku-albhamu \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album" formatted="false" msgid="8407480699515308929">
-      <item quantity="one"><xliff:g id="QUANTITY_2">%d</xliff:g> okunamathiselwe kulondolozwe ku-albhamu \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_2">%d</xliff:g> okunamathiselwe kulondolozwe ku-albhamu \"<xliff:g id="ALBUMNAME_3">%s</xliff:g>\"</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads" formatted="false" msgid="1886864019411801995">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> Okunamathiselwe kulondolozwe kokuthi \"Okulandiwe\"</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> Okunamathiselwe kulondolozwe kokuthi \"Okulandiwe\"</item>
-    </plurals>
-    <plurals name="attachments_saved" formatted="false" msgid="6925000482183379648">
-      <item quantity="one"><xliff:g id="QUANTITY_1">%d</xliff:g> okunamathiselwe kulondoloziwe</item>
-      <item quantity="other"><xliff:g id="QUANTITY_1">%d</xliff:g> okunamathiselwe kulondoloziwe</item>
-    </plurals>
-    <plurals name="attachment_save_error" formatted="false" msgid="2068837227090109833">
-      <item quantity="one">Ayikwazanga ukulondoloza okunamathiselwe okungu-<xliff:g id="QUANTITY_1">%d</xliff:g></item>
-      <item quantity="other">Ayikwazanga ukulondoloza okunamathiselwe okungu-<xliff:g id="QUANTITY_1">%d</xliff:g></item>
-    </plurals>
-    <string name="attachment_file_description" msgid="3056972820372291694">"Ilondoloze okunamathiselwa kwe-MMS"</string>
-    <string name="settings_activity_title" msgid="3380813834835334258">"Izilungiselelo"</string>
-    <string name="archived_activity_title" msgid="4738212324460451188">"Okufakwe kungobo yomlando"</string>
-    <string name="action_close" msgid="1840519376200478419">"Vala"</string>
-    <string name="mms_messaging_category_pref_title" msgid="4816815152658525660">"I-MMS"</string>
-    <string name="advanced_category_pref_title" msgid="6411454224069259687">"Okuthuthukisiwe"</string>
-    <string name="debug_category_pref_title" msgid="8765138968242505061">"Lungisa iphutha"</string>
-    <string name="notifications_enabled_pref_title" msgid="4127288731844373795">"Izaziso"</string>
-    <string name="notification_sound_pref_title" msgid="3685506528957337849">"Umsindo"</string>
-    <string name="silent_ringtone" msgid="8073534180322059814">"Thulile"</string>
-    <string name="notification_vibrate_pref_title" msgid="6668564570045187390">"Dlidlizela"</string>
-    <string name="blocked_pref_title" msgid="2560554234438548817">"Ivinjelwe"</string>
-    <string name="delivery_reports_pref_title" msgid="5115727259825309087">"Imibiko yokulethwa kwe-SMS"</string>
-    <string name="delivery_reports_pref_summary" msgid="4272502420621500421">"Cela umbiko wokuthumela we-SMS ngayinye oyithumelayo"</string>
-    <string name="auto_retrieve_mms_pref_title" msgid="1316094876978218980">"Thola ngokuzenzakalekayo"</string>
-    <string name="auto_retrieve_mms_pref_summary" msgid="2253902455786205335">"Thola ngokuzenzakalela imilayezo ye-MMS"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_title" msgid="2918775628609759349">"Ukuthola okuzenzakalelayo kokuzula"</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary" msgid="7347177867673486983">"Thola ngokuzenzakalela i-MMS uma uzula"</string>
-    <string name="group_mms_pref_title" msgid="6553612309209383106">"Imilayezo yeqembu"</string>
-    <string name="group_mms_pref_summary" msgid="3758710015912690629">"Sebenzisa i-MMS ukuthumela umlayezo owodwa uma kunabamukeli abaningi"</string>
-    <string name="sms_disabled_pref_title" msgid="6352764741524717132">"Uhlelo lokusebenza oluzenzakalelayo le-SMS"</string>
-    <string name="sms_enabled_pref_title" msgid="2961457081888153323">"Uhlelo lokusebenza oluzenzakalelayo le-SMS"</string>
-    <!-- no translation found for default_sms_app (3907546126124760465) -->
-    <skip />
-    <string name="mms_phone_number_pref_title" msgid="5445275222817760638">"Inombolo yakho yefoni"</string>
-    <string name="unknown_phone_number_pref_display_value" msgid="5191326096424554297">"Akwaziwa"</string>
-    <string name="send_sound_pref_title" msgid="6284747469983942370">"Imisindo yemilayezo ephumayo"</string>
-    <string name="dump_sms_pref_title" msgid="4057657151746557281">"Lahla i-SMS"</string>
-    <string name="dump_sms_pref_summary" msgid="3694039770323225329">"Lahla idatha engahluziwe ye-SMS etholiwe kufayela lesitoreji sangaphandle"</string>
-    <string name="dump_mms_pref_title" msgid="6699074152055891680">"Lahla i-MMS"</string>
-    <string name="dump_mms_pref_summary" msgid="7901698352188687659">"Lahla idatha engahluziwe ye-MMS etholiwe kufayela lesitoreji sangaphandle"</string>
-    <string name="wireless_alerts_title" msgid="8218925605166939654">"Izexwayiso ezingenantambo"</string>
-    <string name="message_context_menu_title" msgid="5036023289586457642">"Izinketho zomlayezo"</string>
-    <string name="message_context_menu_copy_text" msgid="8241684826917957666">"Kopisha umbhalo"</string>
-    <string name="message_context_menu_view_details" msgid="2077089491219912840">"Buka imininingwane"</string>
-    <string name="message_context_menu_delete_message" msgid="4924354182554857475">"Susa"</string>
-    <string name="message_context_menu_forward_message" msgid="4848326950037554575">"Dlulisela phambili"</string>
-    <string name="message_details_title" msgid="8451487656255395372">"Imininingwane yomlayezo"</string>
-    <string name="message_type_label" msgid="6442873901113487978">"Uhlobo: "</string>
-    <string name="text_message" msgid="7415419755252205721">"Umlayezo wombhalo"</string>
-    <string name="multimedia_message" msgid="2199989099980111684">"Umlayezo wokuxhumana okuxubile"</string>
-    <string name="from_label" msgid="1947831848146564875">"Kusuka ku: "</string>
-    <string name="to_address_label" msgid="1816631887533235762">"Ku: "</string>
-    <string name="sent_label" msgid="5186286057597137301">"Okuthunyelwe: "</string>
-    <string name="received_label" msgid="4442494712757995203">"Okutholiwe: "</string>
-    <string name="subject_label" msgid="1887378451808609152">"Isihloko: "</string>
-    <string name="message_size_label" msgid="8840394477993741203">"Usayizi: "</string>
-    <string name="priority_label" msgid="5029073794896222902">"Okubalulekile: "</string>
-    <string name="sim_label" msgid="2706003016582772108">"SIM: "</string>
-    <string name="priority_high" msgid="728836357310908368">"Okuphezulu"</string>
-    <string name="priority_normal" msgid="8918221917628753075">"Okuvamile"</string>
-    <string name="priority_low" msgid="7398724779026801851">"Okuphansi"</string>
-    <string name="sim_slot_identifier" msgid="5934005977415016295">"SIM <xliff:g id="SIM_SLOT_NUMBER">%s</xliff:g>"</string>
-    <string name="hidden_sender_address" msgid="5054789216911282696">"Ikheli lomthumeli lifihliwe"</string>
-    <string name="cant_send_message_while_loading_attachments" msgid="4301887223941009907">"Ayikwazi ukuthumela umlayezo ngenkathi ilayisha izinamathiseli."</string>
-    <string name="fail_to_load_attachment" msgid="412233184776827353">"Ayikwazi ukulayisha okunamathiselwe. Zama futhi."</string>
-    <string name="cant_send_message_without_active_subscription" msgid="7130532514190813716">"Inethiwekhi ayilungile. Zama futhi."</string>
-    <string name="chips_text_delete_button_content_description" msgid="123760854728616068">"Susa umbhalo"</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description" msgid="1403198418131594073">"Shintsha phakathi kokufaka umbhalo nezinombolo"</string>
-    <string name="add_more_participants_button_content_description" msgid="12460574490350327">"Engeza ababambiqhaza abaningi"</string>
-    <string name="confrim_participants_button_content_description" msgid="7473740533133798616">"Qinisekisa ababambiqhazi"</string>
-    <string name="start_new_conversation" msgid="3924471215595992758">"Qala ingxoxo entsha"</string>
-    <string name="gallery_checkbox_content_description" msgid="2503122727700475428">"Khetha into"</string>
-    <string name="video_thumbnail_view_play_button_content_description" msgid="3506938388391260811">"Dlala ividiyo"</string>
-    <string name="action_people_and_options" msgid="2748020184252106661">"Abantu nezinketho"</string>
-    <string name="action_debug_options" msgid="2440658410677323714">"Lungisa iphutha"</string>
-    <string name="people_and_options_activity_title" msgid="5443749025829291736">"Abantu nezinketho"</string>
-    <string name="general_settings_title" msgid="4465312111301728995">"Okuvamile"</string>
-    <string name="participant_list_title" msgid="8624855187574757110">"Abantu kule ngxoxo"</string>
-    <string name="action_call" msgid="6596167921517350362">"Yenza ikholi"</string>
-    <string name="compose_message_view_hint_text" msgid="5214836453231753054">"Thumela umlayezo"</string>
-    <string name="compose_message_view_hint_text_multi_sim" msgid="2829154383848677160">"Thumela umlayezo&lt;br/&gt;&lt;small&gt;kusukela ku-<xliff:g id="SIM_NAME">%s</xliff:g>&lt;/small&gt;"</string>
-    <plurals name="compose_message_view_hint_text_photo" formatted="false" msgid="8937589900456604618">
-      <item quantity="one">Thumela izithombe</item>
-      <item quantity="other">Thumela izithombe</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_audio" formatted="false" msgid="5934090345811195170">
-      <item quantity="one">Thumela imisindo</item>
-      <item quantity="other">Thumela imisindo</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_video" formatted="false" msgid="9188048653766960507">
-      <item quantity="one">Thumela amavidiyo</item>
-      <item quantity="other">Thumela amavidiyo</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_vcard" formatted="false" msgid="933064969858631242">
-      <item quantity="one">Thumela amakhadi oxhumana nabo</item>
-      <item quantity="other">Thumela amakhadi oxhumana nabo</item>
-    </plurals>
-    <plurals name="compose_message_view_hint_text_attachments" formatted="false" msgid="1778518334602418000">
-      <item quantity="one">Thumela okunamathiselwe</item>
-      <item quantity="other">Thumela okunamathiselwe</item>
-    </plurals>
-    <plurals name="attachment_changed_accessibility_announcement" formatted="false" msgid="5592871135747616108">
-      <item quantity="one"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> okunamathiselwe  kukulungele ukuthunyelwa</item>
-      <item quantity="other"><xliff:g id="ATTACHMENT_COUNT">%d</xliff:g> okunamathiselwe  kukulungele ukuthunyelwa</item>
-    </plurals>
-    <string name="menu_send_feedback" msgid="479412726781330278">"Thumela impendulo"</string>
-    <string name="menu_view_in_store" msgid="3792488955421628684">"Buka ku-Google Play Isitolo"</string>
-    <string name="menu_version_info" msgid="6122616816253404821">"Ulwazi lwenguqulo"</string>
-    <string name="subtitle_format_for_version_number" msgid="446082111129170749">"Inguqulo %1$s"</string>
-    <string name="menu_license" msgid="1157954180701135202">"Amalayisense womthombo ovulekile"</string>
-    <string name="notifications_enabled_conversation_pref_title" msgid="1492686092760478206">"Izaziso"</string>
-    <string name="mms_attachment_limit_reached" msgid="8303890455085643301">"Kufinyelelwe kumkhawulo wokunamathiselwe kwi-imeyili"</string>
-    <string name="mms_attachment_load_failed" msgid="5697191348996648727">"Ihlulekile ukulayisha okunamathiselwe kwi-imeyili."</string>
-    <string name="add_contact_confirmation_dialog_title" msgid="1898307408816625598">"Engeza oxhumana nabo"</string>
-    <string name="add_contact_confirmation" msgid="1479380805406328264">"Engeza oxhumana naye"</string>
-    <string name="compose_message_view_subject_hint_text" msgid="6076616675845705660">"Isihloko"</string>
-    <string name="conversation_message_view_subject_text" msgid="5634274498769555505">"Isihloko: "</string>
-    <string name="notification_subject" msgid="5229975483160300625">"<xliff:g id="SUBJECT_LABEL">%1$s</xliff:g><xliff:g id="MESSAGETEXT">%2$s</xliff:g>"</string>
-    <string name="loading_vcard" msgid="3961520941271265083">"Ilayisha ikhadi loxhumana naye"</string>
-    <string name="failed_loading_vcard" msgid="7711070643740368402">"Ayikwazi ukulayisha ikhadi loxhumana naye"</string>
-    <string name="vcard_tap_hint" msgid="4940284329175200952">"Buka ikhadi lokuxhumana"</string>
-    <plurals name="vcard_multiple_display_name" formatted="false" msgid="2884224435488996028">
-      <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> oxhumana nabo</item>
-      <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> oxhumana nabo</item>
-    </plurals>
-    <string name="vcard_detail_activity_title" msgid="591540798943754991">"Amakhadi wokuxhumana"</string>
-    <string name="vcard_detail_birthday_label" msgid="7196021537629120021">"Usuku lokuzalwa"</string>
-    <string name="vcard_detail_notes_label" msgid="6104179009509800126">"Amanothi"</string>
-    <string name="forward_message_activity_title" msgid="4689730643900226699">"Dlulisa umlayezo"</string>
-    <string name="reply_activity_title" msgid="2967630094609648609">"Phendula"</string>
-    <string name="plus_one" msgid="9010288417554932581">"+1"</string>
-    <string name="plus_n" msgid="8961547034116059566">"+%d"</string>
-    <string name="sms_disabled" msgid="4988773371061820432">"I-SMS ikhutshaziwe"</string>
-    <string name="requires_default_sms_app_to_send" msgid="171048611973157166">"Ukuze uthumele, setha Ukulayeza njengohlelo lwakho lokusebenza oluzenzakalelayo lwe-SMS"</string>
-    <string name="requires_default_sms_app" msgid="7477365167876194810">"Setha Ukulayeza njengohlelo lokusebenza oluzenzakalelayo lwe-SMS"</string>
-    <string name="requires_default_sms_change_button" msgid="6717443481161057941">"Guqula"</string>
-    <string name="recommend_set_default_sms_app" msgid="7769636305626277844">"Ukuze uthole imilayezo, setha Ukulayeza njengohlelo lokusebenza oluzenzakalelayo lwe-SMS"</string>
-    <string name="no_preferred_sim_selected" msgid="8583927728936521140">"Ayikho i-SIM ethandwayo ekhethiwe yokuthumela imilayezo ye-SMS"</string>
-    <string name="requires_sms_permissions_message" msgid="2179684358095980506">"Lolu hlelo lokusebenza aluvumelekile umnikazi wedivayisi."</string>
-    <string name="requires_sms_permissions_close_button" msgid="8601569832171759435">"KULUNGILE"</string>
-    <string name="too_many_participants" msgid="5857516461210932810">"Ababambiqhaza abaningi kakhulu engxoxweni"</string>
-    <plurals name="add_invalid_contact_error" formatted="false" msgid="782438833843363189">
-      <item quantity="one">Oxhumana nabo abangavumelekile</item>
-      <item quantity="other">Oxhumana nabo abangavumelekile</item>
-    </plurals>
-    <string name="camera_media_failure" msgid="6532763214546593687">"Ayikwazanga ukulayisha isithombe sekhamera"</string>
-    <string name="conversation_list_item_view_sent_from_you_prefix" msgid="1735457801737604211">"Wena: "</string>
-    <string name="conversation_list_item_view_sent_from_other_prefix" msgid="9202622757034736175">"<xliff:g id="FIRSTNAMEOFSENDER">%s</xliff:g>: "</string>
-    <string name="conversation_list_item_view_draft_message" msgid="3592923997082845035">"Okusalungiswa"</string>
-    <string name="conversation_list_empty_text" msgid="7505706551294769667">"Uma uqala ingxoxo entsha, uzoyibona kuhlu lapha"</string>
-    <string name="archived_conversation_list_empty_text" msgid="6109126963298874571">"Izingxoxo ezifakwe kungobo yomlando zivela lapha"</string>
-    <string name="conversation_list_first_sync_text" msgid="3749751291444609993">"Ilayisha izingxoxo..."</string>
-    <string name="conversation_list_snippet_picture" msgid="5326960910088541826">"Isithombe"</string>
-    <string name="conversation_list_snippet_audio_clip" msgid="7894183429890407387">"Isiqeshana somsindo"</string>
-    <string name="conversation_list_snippet_video" msgid="7101059507173671233">"Ividiyo"</string>
-    <string name="conversation_list_snippet_vcard" msgid="5004837959112452394">"Ikhadi loxhumana naye"</string>
-    <string name="mms_text" msgid="1528791558806015806">"i-MMS"</string>
-    <string name="snack_bar_undo" msgid="4523395751563700308">"Hlehlisa"</string>
-    <string name="snack_bar_retry" msgid="7140970704902570020">"Zama futhi"</string>
-    <string name="contact_list_empty_text" msgid="1036353827229041942">"Faka igama loxhumana naye noma inombolo eyefoni ukuze uqale umlayezo omusha"</string>
-    <string name="action_block" msgid="9032076625645190136">"Vimba"</string>
-    <string name="block_contact_title" msgid="6968382557194643329">"Vimbela u-<xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="unblock_contact_title" msgid="4719854710980066596">"Susa ukuvimbela u-<xliff:g id="DESTINATION">%s</xliff:g>"</string>
-    <string name="block_confirmation_title" msgid="8288283455512985682">"Vumba e-<xliff:g id="DESTINATION">%s</xliff:g>?"</string>
-    <string name="block_confirmation_message" msgid="185429978461824228">"Uzoqhubeka nokuthola imilayezo kusuka kule nombolo kodwa ngeke usaziswa. Le ngxoxo izofakwa kungobo yomlando."</string>
-    <string name="blocked_contacts_title" msgid="7709164518967312281">"Oxhumana nabo abavinjiwe"</string>
-    <string name="tap_to_unblock_message" msgid="1284284144816901647">"VULELA"</string>
-    <string name="view_blocked_contacts_title" msgid="7417596291306885403">"Oxhumana nabo abavinjiwe"</string>
-    <string name="pick_image_from_document_library_content_description" msgid="132845956503874378">"Khetha isithombe kusuka kulabhulali yedokhumenti"</string>
-    <string name="sending_message" msgid="6363584950085384929">"Ithumela umlayezo"</string>
-    <string name="send_message_success" msgid="4088006261869323324">"Umyalezo uthunyelwe"</string>
-    <string name="send_message_failure_no_data" msgid="7404080465234559802">"Idatha yeselula ivaliwe. Hlola izilungiselelo zakho."</string>
-    <string name="send_message_failure_airplane_mode" msgid="3966519541237053840">"Ayikwazi ukuthumela imilayezo kumodi yendiza"</string>
-    <string name="send_message_failure" msgid="5273892629851390023">"Umlayezo awukwazanga ukuthunyelwa"</string>
-    <string name="download_message_success" msgid="3514921076616367225">"Umlayezo ulandiwe"</string>
-    <string name="download_message_failure_no_data" msgid="6830055949399088532">"Idatha yeselula ivaliwe. Hlola izilungiselelo zakho."</string>
-    <string name="download_message_failure_airplane_mode" msgid="6752478540984118382">"Ayikwazi ukulanda imilayezo kumodi ye-Ndiza"</string>
-    <string name="download_message_failure" msgid="635370887537738004">"Umlayezo awukwazanga ukulandwa"</string>
-    <string name="content_description_for_number_zero" msgid="7992301592202897868">"Iqanda"</string>
-    <string name="content_description_for_number_one" msgid="3886554185135150473">"Kunye"</string>
-    <string name="content_description_for_number_two" msgid="1562486479385891146">"Kubili"</string>
-    <string name="content_description_for_number_three" msgid="8471442614073144385">"Kuthathu"</string>
-    <string name="content_description_for_number_four" msgid="7515917522043407213">"Kune"</string>
-    <string name="content_description_for_number_five" msgid="8078774905490022978">"Kuhlanu"</string>
-    <string name="content_description_for_number_six" msgid="9192012772645396654">"Isithupha"</string>
-    <string name="content_description_for_number_seven" msgid="5870011338757220060">"Yisikhombisa"</string>
-    <string name="content_description_for_number_eight" msgid="7078061834874737466">"Isishiyagalombili"</string>
-    <string name="content_description_for_number_nine" msgid="4276787959475295232">"Isishiyagalolunye"</string>
-    <string name="carrier_send_error" msgid="3796492439123251453">"Ayikwazi ukuthumela umlayezo nge-<xliff:g id="CARRIERNAME">%1$s</xliff:g>, iphutha <xliff:g id="ERRORCODE">%2$d</xliff:g>"</string>
-    <string name="carrier_send_error_unknown_carrier" msgid="1210665032244425938">"Ayikwazi ukuthumela umlayezo ngenkampani yenethiwekhi engaziwa, iphutha <xliff:g id="ERRORCODE">%1$d</xliff:g>"</string>
-    <string name="message_fwd" msgid="2144370964507743673">"Dlulisa: <xliff:g id="SUBJECT">%s</xliff:g>"</string>
-    <string name="mms_failure_outgoing_service" msgid="4662217039143124592">"Umlayezo awuthunyelwe: isevisi ayisebenzi kunethiwekhi"</string>
-    <string name="mms_failure_outgoing_address" msgid="6212773250215580849">"Umlayezo awuthunyelwe: ikheli lendawo okuya kulo alivumelekile"</string>
-    <string name="mms_failure_outgoing_corrupt" msgid="6132734324976690436">"Umlayezo awuthunyelwe: umlayezo ongavumelekile"</string>
-    <string name="mms_failure_outgoing_content" msgid="919220273446626565">"Umlayezo awuthunyelwe: okuqukethwe okungasekelwe"</string>
-    <string name="mms_failure_outgoing_unsupported" msgid="2614377585077448979">"Umlayezo awuthunyelwe: umlayezo ongasekelwe"</string>
-    <string name="mms_failure_outgoing_too_large" msgid="3917966922000717407">"Umlayezo awuthunyelwe: mkhulu kakhulu"</string>
-    <string name="in_conversation_notify_new_message_text" msgid="8207541514656839042">"Umlayezo omusha"</string>
-    <string name="in_conversation_notify_new_message_action" msgid="7311780674392006753">"Buka"</string>
-    <string name="message_image_content_description" msgid="621604138442762130">"Isithombe"</string>
-    <string name="activity_not_found_message" msgid="2355153262520375529">"Ayikwazanga ukuthola uhlelo lokusebenza olufanelekile"</string>
-    <string name="chips_delete_content_description" msgid="4655699207140895492">"Susa umamukeli"</string>
-    <string name="share_new_message" msgid="2135955613694195483">"Umlayezo omusha"</string>
-    <string name="share_cancel" msgid="6666929391961668469">"Khansela"</string>
-    <string name="apn_edit" msgid="2134993966166435648">"Hlela iphoyinti lokufinyelela"</string>
-    <string name="apn_not_set" msgid="463728018542184151">"Ayisethiwe"</string>
-    <string name="apn_name" msgid="1572691851070894985">"Igama"</string>
-    <string name="apn_apn" msgid="1197541953189716999">"I-APN"</string>
-    <string name="apn_mmsc" msgid="2584154739440281747">"I-MMSC"</string>
-    <string name="apn_mms_proxy" msgid="4343743931563107100">"Ummeleli we-MMS"</string>
-    <string name="apn_mms_port" msgid="6181253508404620479">"Imbobo ye-MMS"</string>
-    <string name="apn_mcc" msgid="8102023058623950736">"I-MCC"</string>
-    <string name="apn_mnc" msgid="1372437523197012866">"I-MNC"</string>
-    <string name="apn_type" msgid="8409755622399386584">"Uhlobo lwe-APN"</string>
-    <string name="menu_delete_apn" msgid="4947391038600888284">"Susa i-APN"</string>
-    <string name="menu_new_apn" msgid="1564461309350814037">"I-APN Entsha"</string>
-    <string name="menu_save_apn" msgid="5445335896951613691">"Londoloza"</string>
-    <string name="menu_discard_apn_change" msgid="310569150407968648">"Lahla"</string>
-    <string name="error_apn_name_empty" msgid="7770363665690646716">"Igama lenkambu akumele lingabi nalutho."</string>
-    <string name="error_apn_empty" msgid="6799644880052534839">"I-APN akumele ingabi nalutho."</string>
-    <string name="error_mcc_not3" msgid="3693788817630985838">"Inkundla ye-MCC kumele ibe namadijithi angu-3."</string>
-    <string name="error_mnc_not23" msgid="3726130455168743554">"Inkambu ye-MNC kumelwe ibe amadijithi angu-2 noma angu-3."</string>
-    <string name="restore_default_apn" msgid="7180447255249638396">"Ibuyisela izilungiselelo ze-APN zokuzenzakalelayo."</string>
-    <string name="menu_restore_default_apn" msgid="6342935229867973523">"Setha kabusha kube ngokuzenzakalelayo"</string>
-    <string name="restore_default_apn_completed" msgid="7421687541468349715">"Izilungiselelo ze-APN zokusethwa kabusha okuzenzakalelayo ziqediwe."</string>
-    <string name="untitled_apn" msgid="3110576506102839465">"Akunasihloko"</string>
-    <string name="sms_apns_title" msgid="1351513141821300879">"Amagama wephoyinti lokufinyelela"</string>
-    <string name="apn_settings" msgid="3179955111000379490">"Ama-APN"</string>
-    <string name="menu_new" msgid="8286285392706532511">"I-APN Entsha"</string>
-    <string name="apn_settings_not_available" msgid="5136389328322585717">"Izilungiselelo zegama le-Phoyinti Lokufinyelela azitholakali kulo msebenzisi"</string>
-    <string name="copy_to_clipboard_dialog_title" msgid="494269163973708182">"Kopisha kubhodi lokunamathisela?"</string>
-    <string name="copy_to_clipboard" msgid="1977083934277981786">"Kopisha"</string>
-    <string name="incoming_sim_name_text" msgid="4244076415705614525">"ukuya ku-<xliff:g id="SIM_NAME">%s</xliff:g>"</string>
-    <string name="general_settings" msgid="5409336577057897710">"Okuvamile"</string>
-    <string name="advanced_settings" msgid="5870459931510000742">"Okuthuthukisiwe"</string>
-    <string name="general_settings_activity_title" msgid="3012187932521771578">"Izilungiselelo ezijwayelekile"</string>
-    <string name="advanced_settings_activity_title" msgid="7397017836928206201">"Izilungiselelo ezithuthukisiwe"</string>
-    <string name="sim_specific_settings" msgid="948779178668552448">"\"<xliff:g id="SIM_NAME">%s</xliff:g>\" SIM"</string>
-    <string name="disable_group_mms" msgid="1016285369211000297">"Thumela imilayezo ye-SIM ngamunye kubo bonke abamukeli. Uwena kuphela ozothla izimpendulo"</string>
-    <string name="enable_group_mms" msgid="4311733160940564593">"Thumela i-SMS eyodwa kubo bonke abamukeli"</string>
-    <string name="sim_settings_unknown_number" msgid="1885996389432991383">"Inombolo engaziwa"</string>
-    <string name="secondary_user_new_message_title" msgid="201938947573987596">"Umlayezo omusha."</string>
-    <string name="secondary_user_new_message_ticker" msgid="2386669280323553032">"Umlayezo omusha."</string>
-    <string name="sim_selector_button_content_description" msgid="2407660715957787727">"Iskhethi se-SIM"</string>
-    <string name="sim_selector_button_content_description_with_selection" msgid="4042539046779910617">"<xliff:g id="SIM_0">%1$s</xliff:g> okukhethiwe, isikhethi se-SIM"</string>
-    <string name="send_button_long_click_description_no_sim_selector" msgid="979624100711380593">"Hlela isihloko"</string>
-    <string name="send_button_long_click_description_with_sim_selector" msgid="7670274457707760465">"Khetha i-SIM noma hlela isihloko"</string>
-    <string name="audio_record_view_content_description" msgid="29401157183728655">"Thinta futhi ubambe ukuze urekhode umsindo"</string>
-    <string name="widget_new_conversation_content_description" msgid="4214201569175733579">"Qala ingxoxo entsha"</string>
-    <string name="widget_title_content_description" msgid="5802836840910466231">"Imilayezo"</string>
-    <string name="widget_conversation_list_name" msgid="4005037639000611925">"Uhlu lokulayeza"</string>
-    <string name="widget_conversation_name" msgid="3900606239571892871">"Imilayezo"</string>
-    <string name="widget_new_message_content_description" msgid="2706347689522691188">"Umlayezo omusha"</string>
-    <string name="widget_conversation_list_content_description" msgid="4137121313374868821">"Uhlu lwengxoxo"</string>
-    <string name="loading_conversations" msgid="2890879017729068514">"Ilayisha izingxoxo"</string>
-    <string name="loading_messages" msgid="3894765818932489665">"Ilayisha"</string>
-    <string name="view_more_conversations" msgid="2430542054023217740">"Buka izingxoxo ezengeziwe"</string>
-    <string name="view_more_messages" msgid="6463224009407336178">"Buka eminye imilayezo"</string>
-    <string name="conversation_deleted" msgid="6088388615460305424">"Ingxoxo isusiwe"</string>
-    <string name="tap_to_configure" msgid="7591682335533041774">"Ingxoxo isusiwe. Thinta ukuze ubonise ingxoxo ehlukile yokulayeza"</string>
-    <string name="update_destination_blocked" msgid="4577227174205233981">"Uvinjelwe"</string>
-    <string name="update_destination_unblocked" msgid="5369499874676600478">"Uvulelwe"</string>
-    <string name="db_full" msgid="8459265782521418031">"Isikhala sesitoreji siphansi. Enye idatha ingalahleka."</string>
-    <string name="attachment_chooser_activity_title" msgid="4049093653421684774">"Khetha okunamathiselwe"</string>
-    <string name="action_confirm_selection" msgid="3787494008738625806">"Qinisekisa ukukhetha"</string>
-    <string name="attachment_chooser_selection" msgid="3616821885478549778">"<xliff:g id="COUNT">%d</xliff:g> okukhethiwe"</string>
-    <string name="attachment_limit_reached_dialog_message_when_composing" msgid="2983376679583030373">"Sicela ususe okunamathiselwe  kwi-imeyili okukodwa noma okuningi uphinde uzame futhi."</string>
-    <string name="attachment_limit_reached_dialog_message_when_sending" msgid="3917529855170816197">"Ungazama ukuthumela umlayezo wakho, kodwa kungenzeka ungathunyelwa ngaphandle kokuthi ususe okunamathiselwe kwi-imeyili okukodwa noma okuningi."</string>
-    <string name="video_attachment_limit_exceeded_when_sending" msgid="8545536951461996462">"Ungathumela ividiyo eyodwa kuphela ngomlayezo. Sicela ususe amavidiyo angeziwe uphinde uzame futhi."</string>
-    <string name="attachment_load_failed_dialog_message" msgid="4917927407363303333">"Ukulayeza kuhlulekile ukulayisha okunamathiselwe kwi-imeyili."</string>
-    <string name="attachment_limit_reached_send_anyway" msgid="2348790618093735551">"Thumela noma kunjalo"</string>
-    <string name="conversation_creation_failure" msgid="8597624563218724441">"Ayikwazanga ukuqala ingxoxo"</string>
-    <string name="link_display_format" msgid="8700344957248709584">"<xliff:g id="TEXT">%1$s</xliff:g> (<xliff:g id="URL">%2$s</xliff:g>)"</string>
-    <string name="selected_sim_content_message" msgid="4504796674843354505">"I-<xliff:g id="SELECTED_SIM">%s</xliff:g> ikhethiwe"</string>
-</resources>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
deleted file mode 100644
index 59e3206..0000000
--- a/res/values/arrays.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- String to match as no subject and filter out as a subject. For example, if the
-         subject string is "no subject", we won't display that. We'll pretend
-         no subject string was delivered. -->
-    <string-array name="empty_subject_strings">
-        <item>no subject</item>
-        <item>nosubject</item>
-    </string-array>
-
-    <!-- Choices for quick-reply to message notification. Users with an Android
-    Wear device (e.g. smartwatch) can reply to messages either by speaking their
-    response, or choosing one of these predefined options. -->
-    <string-array name="notification_reply_choices">
-        <item>Yes</item>
-        <item>No</item>
-        <item>OK</item>
-        <item>Hehe</item>
-        <item>Thanks</item>
-        <item>I agree</item>
-        <item>Nice</item>
-        <item>On my way</item>
-        <item>OK, let me get back to you later</item>
-        <item>:)</item>
-        <item>:(</item>
-    </string-array>
-</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
deleted file mode 100644
index 233cf9c..0000000
--- a/res/values/attrs.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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>
-    <declare-styleable name="ContactIconView">
-        <attr name="iconSize">
-            <enum name="normal" value="0" />
-            <enum name="large" value="1" />
-            <enum name="small" value="2" />
-        </attr>
-    </declare-styleable>
-    <declare-styleable name="SoundLevels">
-        <attr name="maxLevelRadius" format="dimension|reference" />
-        <attr name="minLevelRadius" format="dimension|reference" />
-        <attr name="primaryColor" format="color" />
-    </declare-styleable>
-    <declare-styleable name="AsyncImageView">
-        <attr name="fadeIn" format="boolean" />
-        <attr name="placeholderDrawable" format="reference" />
-        <attr name="cornerRadius" format="dimension|reference" />
-        <attr name="reveal" format="boolean" />
-    </declare-styleable>
-    <declare-styleable name="VideoThumbnailView">
-        <attr name="mode" format="integer">
-            <enum name="imageThumbnail" value="0" />
-            <enum name="playableVideo" value="1" />
-        </attr>
-        <attr name="playOnLoad" format="boolean" />
-        <attr name="loop" format="boolean" />
-        <attr name="allowCrop" format="boolean" />
-        <attr name="android:maxHeight" />
-    </declare-styleable>
-    <declare-styleable name="MaxHeightScrollView">
-        <attr name="android:maxHeight" />
-    </declare-styleable>
-    <declare-styleable name="ConversationNameView">
-        <attr name="textSize" format="dimension|reference" />
-        <attr name="textColor" format="color" />
-    </declare-styleable>
-    <declare-styleable name="AudioAttachmentView">
-        <attr name="layoutMode" format="integer">
-            <enum name="normal" value="0" />
-            <enum name="compact" value="1" />
-            <enum name="subcompact" value="2" />
-        </attr>
-    </declare-styleable>
-    <attr name="apnPreferenceStyle" format="reference" />
-</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
deleted file mode 100644
index 0ecd2c2..0000000
--- a/res/values/colors.xml
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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="primary_color">#689F38</color>
-    <color name="permission_check_activity_background">@color/primary_color</color>
-
-    <!--  Action bar -->
-    <color name="action_bar_title_text_color">#ffffff</color>
-    <color name="action_bar_background_color">@color/primary_color</color>
-    <color name="action_bar_background_color_dark">#537F2D</color>
-    <color name="contextual_action_bar_background_color">#ffffff</color>
-    <color name="archived_conversation_action_bar_background_color">#9D9D9D</color>
-    <color name="archived_conversation_action_bar_background_color_dark">#838383</color>
-
-    <!-- Conversation list -->
-    <color name="conversation_list_item_read">#636363</color>
-    <color name="conversation_list_item_unread">#323232</color>
-    <color name="conversation_list_error">#F05A24</color>
-    <color name="conversation_list_name">#DE000000</color>
-    <color name="conversation_list_details">#8A000000</color>
-
-    <color name="conversation_compose_divider_start">#44000000</color>
-
-    <color name="message_text">#000000</color>
-    <color name="timestamp_text_outgoing">#99323232</color>
-    <color name="timestamp_text_incoming">#99ffffff</color>
-    <color name="timestamp_text_failed">#99ff0000</color>
-    <color name="compose_send_text_color">#000000</color>
-
-    <color name="message_title_text">#ff323232</color>
-    <color name="message_download_failed_status_text">#000000</color>
-    <color name="message_info_text">#99ffffff</color>
-    <color name="message_info_text_incoming_download_failed">#6a6a6a</color>
-    <color name="message_download_failed_timestamp_text">#007fce</color>
-    <color name="message_failed_timestamp_text">#99ff0000</color>
-    <color name="message_action_status_text">#ffffffff</color>
-    <color name="message_action_info_text">#99ffffff</color>
-    <color name="message_action_timestamp_text">#ffffffff</color>
-
-    <color name="background_item_transparent">@android:color/transparent</color>
-    <color name="background_item_activated">#670099cc</color>
-    <color name="background_item_selected">#cc0099cc</color>
-    <color name="background_item_pressed">#6733b5e5</color>
-
-    <color name="subject_editor_bubble">#ffffffff</color>
-    <color name="message_text_color_incoming">#ffffffff</color>
-    <color name="message_text_color_incoming_download_failed">#6a6a6a</color>
-    <color name="message_text_color_outgoing">#ff323232</color>
-    <color name="conversation_background">#eeeeee</color>
-    <color name="conversation_edge_effect">#9d9d9d</color>
-    <color name="compose_message_send_color">@color/primary_color</color>
-    <color name="compose_message_send_color_pressed">#999999</color>
-    <color name="message_bubble_color_outgoing">#ffffffff</color>
-    <color name="message_error_bubble_color_incoming">#e2e2e2</color>
-    <color name="message_audio_button_color_incoming">#ffffffff</color>
-    <color name="message_bubble_color_selected">#8BC34A</color>
-    <color name="message_image_selected_tint">#80689F38</color>
-    <color name="generic_video_icon">#ff808080</color>
-
-    <!-- Base color used for color filtering. -->
-    <color name="color_filter_base_color">#ff0000</color>
-
-    <!-- Activity background color -->
-    <drawable name="class_zero_background">#7f040000</drawable>
-
-    <color name="contact_avatar_default_background">#d2d2d2</color>
-    <color name="contact_avatar_pressed_color">#40000000</color>
-    <color name="contact_list_text_primary">#4d4d4d</color>
-    <color name="contact_list_text_secondary">#999999</color>
-
-    <color name="compose_contact_text">@android:color/white</color>
-    <color name="compose_contact_faint_text">#a0ffffff</color>
-    <color name="compose_contact_divider">#44000000</color>
-    <color name="contact_picker_tab_pressed">#ddffffff</color>
-    <color name="contact_picker_tab_underline">@android:color/white</color>
-    <color name="contact_list_alphabet_header">@color/primary_color</color>
-    <color name="contact_picker_background">#ffffff</color>
-    <color name="chips_dropdown_background_activated">#4285f4</color>
-    <color name="chips_dropdown_background_pressed">#ededed</color>
-    <color name="chips_background_color">#33000000</color>
-    <color name="chips_text_color">@android:color/white</color>
-
-    <color name="camera_button_container_background">#80000000</color>
-
-    <color name="translucent_white">#80ffffff</color>
-
-    <color name="gallery_image_default_background">#eeeeee</color>
-    <color name="gallery_image_pressed">#6733b5e5</color>
-    <color name="attachment_preview_more_items_text_background">#44000000</color>
-
-    <color name="letter_tile_font_color">#ffffff</color>
-
-    <color name="audio_picker_level_primary_color">#29000000</color>
-    <color name="audio_record_control_button_stroke">#30000000</color>
-    <color name="audio_picker_hint_text_color">#40000000</color>
-    <color name="audio_picker_timer_text_color">#323232</color>
-    <color name="audio_attachment_timer_text_color">#323232</color>
-    <color name="audio_progress_bar_color">@color/primary_color</color>
-
-    <color name="contact_picker_hint_text_color">#40000000</color>
-
-    <color name="notification_sender_text">#9A9A9A</color>
-    <color name="notification_secondary_text">#FFFFFF</color>
-    <color name="notification_tertiary_text">#FFFFFF</color>
-    <color name="wearable_notification_participants_count">#a2a2a2</color>
-    <color name="notification_accent_color">@color/primary_color</color>
-    <color name="notification_warning_color">#ff0000</color>
-    <color name="notification_subject_color">#99aaaaaa</color>
-
-    <color name="participant_list_text_primary">#4d4d4d</color>
-    <color name="participant_list_text_secondary">#6d6d6d</color>
-    <color name="people_and_options_header_text">#6d6d6d</color>
-    <color name="people_and_options_list_divider">#cccccc</color>
-
-    <color name="fab_color">@color/primary_color</color>
-    <color name="fab_pressed_color">#3ea4dc</color>
-    <color name="fab_ripple">#40ffffff</color>
-
-    <color name="message_body_size_text_color">#555555</color>
-    <color name="mms_indicator_color">#8BC34A</color>
-    <color name="list_empty_text">#6d6d6d</color>
-    <color name="low_storage_action_item_color">#ff000000</color>
-    <color name="unblock_item_text_color">@color/primary_color</color>
-    <color name="open_conversation_animation_background_shadow">#40000000</color>
-    <color name="compose_notification_bar_background">@color/primary_color</color>
-
-    <color name="sim_selector_text_primary">#4d4d4d</color>
-    <color name="sim_selector_text_secondary">#999999</color>
-    <color name="sim_selector_background_end">#cceeeeee</color>
-    <color name="sim_selector_background_start">#ffeeeeee</color>
-    <color name="sim_indicator_color_light">#ffffff</color>
-    <color name="sim_indicator_color_dark">#323232</color>
-
-    <color name="text_highlight_color">#80689F38</color>
-    <color name="search_view_text_cursor">#b0dddddd</color>
-
-    <color name="button_bar_action_button_text_color">#03a9f4</color>
-    <color name="button_bar_cancel_button_text_color">#4d4d4d</color>
-
-    <color name="settings_list_text_primary">#4d4d4d</color>
-    <color name="settings_list_text_secondary">#6d6d6d</color>
-    <color name="group_mms_setting_text_color">#333333</color>
-    <color name="settings_item_title_text_primary">#000000</color>
-
-    <color name="contact_picker_button_text_color">@color/primary_color</color>
-
-    <color name="widget_text_color">#424242</color>
-    <color name="widget_incoming_text_color">@android:color/white</color>
-    <color name="widget_outgoing_text_color">#424242</color>
-    <color name="widget_background_color">#ffffff</color>
-    <color name="ripple_material_light">#40000000</color>
-    <color name="widget_conversation_title_color">#FFFFFF</color>
-
-    <color name="attachment_chooser_audio_background">#eeeeee</color>
-    <color name="attachment_chooser_vcard_background">#eeeeee</color>
-
-    <color name="fastscroll_track_color">#1e000000</color>
-    <color name="fastscroll_thumb_color">#42000000</color>
-    <color name="fastscroll_preview_text_color">#ffffff</color>
-
-    <color name="google_gray">#F1F1F1</color>
-</resources>
diff --git a/res/values/config.xml b/res/values/config.xml
deleted file mode 100644
index 954f5ed..0000000
--- a/res/values/config.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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>
-    <!-- The packaged version of APNs and MMS configurations -->
-    <integer name="apnsAndMmsConfigsVersion">0</integer>
-</resources>
diff --git a/res/values/constants.xml b/res/values/constants.xml
deleted file mode 100644
index e494e95..0000000
--- a/res/values/constants.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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>
-
-    <!-- Preference keys for user-visible settings -->
-    <!-- Application-wide settings -->
-    <string name="notifications_category_pref_key" translatable="false">notifications_category</string>
-    <string name="mms_messaging_category_pref_key" translatable="false">mms_messaging_category</string>
-    <string name="advanced_category_pref_key" translatable="false">advanced_category</string>
-    <string name="notifications_enabled_pref_key" translatable="false">notifications_enabled</string>
-    <bool name="notifications_enabled_pref_default" translatable="false">true</bool>
-    <string name="notification_sound_pref_key" translatable="false">notification_sound</string>
-    <string name="notification_vibration_pref_key" translatable="false">notification_vibration</string>
-    <bool name="notification_vibration_pref_default" translatable="false">true</bool>
-    <string name="sms_disabled_pref_key" translatable="false">sms_disabled</string>
-    <string name="sms_enabled_pref_key" translatable="false">sms_enabled</string>
-    <string name="send_sound_pref_key" translatable="false">send_sound</string>
-    <bool name="send_sound_pref_default" translatable="false">true</bool>
-    <string name="advanced_pref_key" translatable="false">advanced_prefs</string>
-
-    <!-- Subscription-specific settings. The values of these pref keys must be prefixed with
-         "buglesub_" to allow for runtime checks -->
-    <string name="delivery_reports_pref_key" translatable="false">buglesub_delivery_reports</string>
-    <bool name="delivery_reports_pref_default" translatable="false">false</bool>
-    <string name="auto_retrieve_mms_pref_key" translatable="false">buglesub_auto_retrieve_mms</string>
-    <bool name="auto_retrieve_mms_pref_default" translatable="false">true</bool>
-    <string name="auto_retrieve_mms_when_roaming_pref_key" translatable="false">buglesub_auto_retrieve_mms_when_roaming</string>
-    <bool name="auto_retrieve_mms_when_roaming_pref_default" translatable="false">false</bool>
-    <string name="group_mms_pref_key" translatable="false">buglesub_group_messaging</string>
-    <bool name="group_mms_pref_default" translatable="false">true</bool>
-    <string name="mms_phone_number_pref_key" translatable="false">buglesub_mms_phone_number</string>
-    <string name="wireless_alerts_key" translatable="false">buglesub_wireless_alerts_key</string>
-    <string name="apn_list_pref_key" translatable="false">buglesub_apn_list</string>
-
-    <!-- Debug preferences -->
-    <string name="debug_pref_key" translatable="false">debug_category</string>
-    <string name="dump_sms_pref_key" translatable="false">dump_sms</string>
-    <bool name="dump_sms_pref_default" translatable="false">false</bool>
-    <string name="dump_mms_pref_key" translatable="false">dump_mms</string>
-    <bool name="dump_mms_pref_default" translatable="false">false</bool>
-
-
-    <!-- SMS/MMS settings keys -->
-    <!--
-    TODO: Several of these are currently unused but are expected to be needed to
-    implement SMS/MMS delivery and basic settings. Once we have the core functionality in place
-    we should do a pass to remove any unused values here.
-    -->
-    <string name="sms_apns_key" translatable="false">sms_apns_key</string>
-    <string name="use_local_apn_pref_key" translatable="false">use_local_apn_pref_key</string>
-    <bool name="use_local_apn_pref_default" translatable="false">false</bool>
-
-    <integer name="mediapicker_transition_duration">600</integer><!-- ms -->
-    <integer name="asyncimage_transition_duration">300</integer><!-- ms -->
-    <integer name="compose_transition_duration">300</integer><!-- ms -->
-    <integer name="camera_shutter_duration">200</integer><!-- ms -->
-    <fraction name="camera_shutter_max_alpha">70%</fraction>
-
-    <integer name="snackbar_translation_duration_ms">300</integer>
-
-    <!-- Notification preferences -->
-    <string name="notifications_group_children_key" translatable="false">notifications_group_children</string>
-
-    <!-- format string for creating new image files. Passed to java.text.SimpleDateFormat. -->
-    <string name="new_image_file_name_format" translatable="false">"'IMG'_yyyyMMdd_HHmmss"</string>
-    <!-- format string for creating new files of unknown type. Passed to java.text.SimpleDateFormat. -->
-    <string name="new_file_name_format" translatable="false">"yyyyMMdd_HHmmss"</string>
-
-    <!-- Swipe to Archive consts -->
-    <integer name="swipe_duration_ms">300</integer>
-    <integer name="swipe_max_fling_velocity_px_per_s">4000</integer>
-
-    <!-- Fab animation const -->
-    <integer name="fab_animation_duration_ms">300</integer>
-
-    <!-- Conversation list -> conversation animation const -->
-    <integer name="list_to_conversation_animation_duration_ms">300</integer>
-
-    <!-- Generic reveal view animation duration -->
-    <integer name="reveal_view_animation_duration">300</integer>
-</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
deleted file mode 100644
index 0795ebc..0000000
--- a/res/values/dimens.xml
+++ /dev/null
@@ -1,201 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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>
-
-    <dimen name="action_bar_height">56dp</dimen>
-    <dimen name="action_bar_elevation">8dp</dimen>
-    <dimen name="action_bar_text_size">20sp</dimen>
-    <dimen name="conversation_message_text_size">16sp</dimen>
-    <dimen name="conversation_status_text_size">12sp</dimen>
-    <dimen name="conversation_title_text_size">12sp</dimen>
-    <dimen name="conversation_info_text_size">12sp</dimen>
-    <dimen name="conversation_compose_send_text_size">16sp</dimen>
-    <dimen name="contact_icon_view_normal_size">42dp</dimen>
-    <dimen name="contact_icon_view_large_size">56dp</dimen>
-    <dimen name="contact_icon_view_small_size">12dp</dimen>
-    <dimen name="conversation_list_item_view_padding">16dp</dimen>
-    <dimen name="conversation_list_first_item_extra_padding">8dp</dimen>
-    <dimen name="conversation_list_image_preview_corner_radius">3dp</dimen>
-    <dimen name="conversation_list_image_preview_size">56dp</dimen>
-    <dimen name="conversation_list_contact_icon_size">56dp</dimen>
-    <dimen name="conversation_message_contact_icon_size">42dp</dimen>
-    <dimen name="conversation_message_photo_min_size">96dp</dimen>
-    <dimen name="conversation_list_notification_bell_padding">4dp</dimen>
-    <dimen name="conversation_list_empty_text_bottom_margin">30dp</dimen>
-    <dimen name="blocked_participant_list_item_view_padding">16dp</dimen>
-
-    <dimen name="message_bubble_arrow_width">9dp</dimen>
-    <dimen name="message_text_bottom_padding">12dp</dimen>
-    <dimen name="message_text_top_padding">10dp</dimen>
-    <dimen name="message_text_left_right_padding">14dp</dimen>
-    <dimen name="message_padding_default">18dp</dimen>
-    <dimen name="message_padding_same_author">2dp</dimen>
-    <dimen name="message_metadata_top_padding">4dp</dimen>
-    <dimen name="message_audio_attachment_padding">12dp</dimen>
-
-    <dimen name="mediapicker_default_chooser_height">215dp</dimen>
-    <dimen name="compose_message_contacts_container_margin">4dp</dimen>
-    <dimen name="compose_message_contacts_height">42dp</dimen>
-    <dimen name="compose_message_chip_height">36dp</dimen>
-    <dimen name="compose_message_chip_padding">3dp</dimen>
-    <dimen name="compose_message_fields_horizontal_margin">16dp</dimen>
-    <dimen name="compose_message_font_size">16sp</dimen>
-    <dimen name="compose_message_attachment_padding_sides">20dp</dimen>
-    <dimen name="compose_message_attachment_padding_topBottom">10dp</dimen>
-    <dimen name="compose_message_chips_view_max_height">133dp</dimen>
-    <dimen name="compose_message_subject_left_padding">52dp</dimen>
-    <dimen name="compose_message_subject_right_padding">64dp</dimen>
-    <dimen name="compose_message_subject_top_padding">4dp</dimen>
-    <dimen name="compose_message_subject_bottom_padding">6dp</dimen>
-    <dimen name="compose_message_subject_cancel_top_offset">-12dp</dimen>
-    <dimen name="compose_message_subject_cancel_left_margin">12dp</dimen>
-    <dimen name="compose_message_mms_indicator_padding_top">2dp</dimen>
-    <dimen name="compose_message_send_button_padding_right">12dp</dimen>
-    <dimen name="compose_message_text_box_padding_side">8dp</dimen>
-
-    <!-- Notification related dimensions. -->
-    <dimen name="notification_wearable_image_height">240dp</dimen>
-    <dimen name="notification_wearable_image_width">240dp</dimen>
-
-    <!-- Contact Picker related dimensions. -->
-    <dimen name="contact_list_text_size">16sp</dimen>
-    <dimen name="contact_list_detail_text_size">14sp</dimen>
-    <dimen name="contact_list_icon_size">42dp</dimen>
-    <dimen name="recipient_edit_text_size">20sp</dimen>
-    <dimen name="pager_tab_header_text_size">14sp</dimen>
-    <dimen name="pager_tab_underline_selected">2dp</dimen>
-    <dimen name="contact_list_alphabet_header_text_size">26dp</dimen>
-
-    <!-- Flings slower than this length / sec will be ignored -->
-    <dimen name="mediapicker_fling_threshold">150dp</dimen>
-    <!-- Flings faster than this length / sec will go from fullscreen straight to closed -->
-    <dimen name="mediapicker_big_fling_threshold">1000dp</dimen>
-    <dimen name="gallery_image_cell_size">110dp</dimen>
-    <dimen name="gallery_icon_size">40dp</dimen>
-    <dimen name="single_attachment_min_dimen">50dp</dimen>
-    <dimen name="single_attachment_max_height">150dp</dimen>
-    <dimen name="multiple_attachment_preview_height">130dp</dimen>
-    <dimen name="multiple_attachment_preview_width">260dp</dimen>
-    <dimen name="multiple_attachment_preview_padding">1dp</dimen>
-    <dimen name="attachment_preview_more_items_text_size">22sp</dimen>
-
-    <item name="letter_to_tile_ratio" type="dimen">67%</item>
-    <item name="sim_identifier_to_tile_ratio" type="dimen">28%</item>
-    <item name="small_sim_identifier_to_tile_ratio" type="dimen">75%</item>
-
-    <dimen name="audio_picker_text_size">16sp</dimen>
-    <dimen name="audio_attachment_text_size">14sp</dimen>
-    <dimen name="audio_progress_bar_height">6dp</dimen>
-
-    <dimen name="contact_picker_text_size">16sp</dimen>
-
-    <!-- Videos in the message list view should at least be this big in the smallest dimension -->
-    <dimen name="video_message_min_size">320dp</dimen>
-    <dimen name="attachment_rounded_corner_radius">3dp</dimen>
-    <dimen name="progress_indicator_default_stroke_width">2dp</dimen>
-    <dimen name="progress_indicator_default_radius">12dp</dimen>
-    <dimen name="participant_list_text_size">18sp</dimen>
-    <dimen name="participant_list_detail_text_size">14sp</dimen>
-    <dimen name="people_and_options_header_text_size">16sp</dimen>
-    <dimen name="image_attachment_fallback_width">240dp</dimen>
-    <dimen name="image_attachment_fallback_height">240dp</dimen>
-
-    <dimen name="fab_size">60dp</dimen>
-    <dimen name="fab_padding_bottom">4dp</dimen>
-    <dimen name="fab_elevation">2dp</dimen>
-    <dimen name="fab_elevation_pressed">6dp</dimen>
-    <dimen name="fab_bottom_margin">12dp</dimen>
-    <dimen name="fab_left_right_margin">14dp</dimen>
-    <dimen name="message_body_size_text_size">12sp</dimen>
-
-    <dimen name="vcard_detail_group_indicator_width">40dp</dimen>
-    <dimen name="mms_indicator_size">12sp</dimen>
-    <dimen name="conversation_fast_fling_threshold">10dp</dimen>
-    <dimen name="list_empty_text_size">14sp</dimen>
-    <dimen name="list_empty_text_top_margin">20dp</dimen>
-    <dimen name="list_empty_text_left_right_margin">60dp</dimen>
-    <dimen name="low_storage_action_item_text_size">16sp</dimen>
-
-    <dimen name="snack_bar_left_right_margin">24dp</dimen>
-    <dimen name="snack_bar_top_bottom_margin">18dp</dimen>
-
-    <dimen name="version_dialog_large_padding">24dp</dimen>
-    <dimen name="version_dialog_bottom_padding">20dp</dimen>
-    <dimen name="version_dialog_info_left_padding">14dp</dimen>
-    <dimen name="version_dialog_copyright_top_margin">20dp</dimen>
-
-    <dimen name="explode_animation_highlight_elevation">6dp</dimen>
-
-    <dimen name="sim_selector_text_size">14sp</dimen>
-    <dimen name="sim_selector_detail_text_size">14sp</dimen>
-    <dimen name="sim_selector_icon_size">42dp</dimen>
-
-    <dimen name="copy_contact_dialog_left_padding">25dp</dimen>
-    <dimen name="copy_contact_dialog_right_padding">10dp</dimen>
-    <dimen name="copy_contact_dialog_top_padding">5dp</dimen>
-
-    <dimen name="settings_list_text_size">16sp</dimen>
-    <dimen name="settings_list_detail_text_size">14sp</dimen>
-    <dimen name="settings_list_item_height">60dp</dimen>
-    <dimen name="group_mms_setting_text_size">14sp</dimen>
-
-    <!-- Camera focus indicator values -->
-    <dimen name="pie_radius_start">40dp</dimen>
-    <dimen name="pie_radius_increment">30dp</dimen>
-    <dimen name="pie_touch_offset">20dp</dimen>
-    <dimen name="focus_radius_offset">8dp</dimen>
-    <dimen name="focus_inner_offset">12dp</dimen>
-    <dimen name="focus_outer_stroke">3dp</dimen>
-    <dimen name="focus_inner_stroke">2dp</dimen>
-
-    <dimen name="conversation_bubble_width_snap">20dp</dimen>
-
-    <!-- Widget -->
-    <dimen name="widget_margin">8dp</dimen>
-    <dimen name="widget_subtitle_margin">0dp</dimen>
-    <dimen name="widget_avatar_padding">2dp</dimen>
-    <dimen name="widget_header_height">48dp</dimen>
-    <dimen name="widget_header_new_conv_button_width">48dp</dimen>
-    <dimen name="widget_conversation_title_size">18sp</dimen>
-    <dimen name="widget_compose_top_padding">12dp</dimen>
-    <dimen name="widget_compose_top_padding_compressed">16dp</dimen>
-
-    <dimen name="attachment_grid_image_cell_size">110dp</dimen>
-    <dimen name="attachment_grid_checkbox_area_increase">15dp</dimen>
-
-    <!-- The default size of a pending attachment while its size is unknown -->
-    <dimen name="pending_attachment_size">120dp</dimen>
-
-    <!-- Conversation fast-scroller -->
-    <dimen name="fastscroll_touch_slop">8dp</dimen>
-    <dimen name="fastscroll_track_width">8dp</dimen>
-    <dimen name="fastscroll_thumb_height">48dp</dimen>
-    <dimen name="fastscroll_preview_min_width">88dp</dimen>
-    <dimen name="fastscroll_preview_height">88dp</dimen>
-    <dimen name="fastscroll_preview_corner_radius">44dp</dimen>
-    <dimen name="fastscroll_preview_padding">24dp</dimen>
-    <dimen name="fastscroll_preview_margin_top">8dp</dimen>
-    <dimen name="fastscroll_preview_margin_left_right">8dp</dimen>
-    <dimen name="fastscroll_preview_text_size">24sp</dimen>
-
-    <dimen name="directory_header_padding_start">16dp</dimen>
-    <dimen name="directory_header_padding_end">32dp</dimen>
-    <dimen name="directory_header_padding_top">18dp</dimen>
-    <dimen name="directory_header_padding_bottom">8dp</dimen>
-    <dimen name="directory_header_text_size">14sp</dimen>
-
-</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
deleted file mode 100644
index e5c442d..0000000
--- a/res/values/strings.xml
+++ /dev/null
@@ -1,985 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- The name of the application as it appears under the main Launcher icon and in various activity titles -->
-    <string name="app_name">Messaging</string>
-
-    <!-- The name of the application as it appears in external share intent dialogs -->
-    <string name="share_intent_label">Messaging</string>
-    <!-- The title when selecting a conversation to share to -->
-    <string name="share_intent_activity_label">Select conversation</string>
-
-    <string name="action_settings">Settings</string>
-    <string name="sendButtonContentDescription">Send Message</string>
-    <string name="attachMediaButtonContentDescription">Add an attachment</string>
-    <string name="help_and_feedback_activity_label">Help</string>
-
-    <string name="welcome">Welcome</string>
-    <string name="skip">Skip</string>
-    <string name="next_with_arrow">Next &gt;</string>
-    <string name="next">Next</string>
-    <string name="exit">Exit</string>
-    <string name="settings_with_arrow">Settings &gt;</string>
-    <string name="settings">Settings</string>
-    <!-- Inform user of the names of permissions that are required to use the app -->
-    <string name="required_permissions_promo">Messaging needs permission to SMS, Phone and Contacts.</string>
-    <string name="enable_permission_procedure">You can change permissions in Settings > Apps > Messaging > Permissions.</string>
-    <string name="enable_permission_procedure_description">You can change permissions in Settings, Apps, Messaging, Permissions.</string>
-
-    <!-- The tab header for the frequently used contacts list -->
-    <string name="contact_picker_frequents_tab_title">Frequents</string>
-
-    <!-- The tab header for all contacts list -->
-    <string name="contact_picker_all_contacts_tab_title">All contacts</string>
-
-    <!-- The text on the list item in the contact picker that allows a user to send an SMS directly
-         to a number that he/she typed. eg. "Send to 650-555-1234" -->
-    <string name="contact_list_send_to_text">Send to <xliff:g id="destination">%s</xliff:g></string>
-
-    <string name="mediapicker_cameraChooserDescription">Capture pictures or video</string>
-    <string name="mediapicker_galleryChooserDescription">Choose images from this device</string>
-    <string name="mediapicker_audioChooserDescription">Record audio</string>
-    <string name="mediapicker_contactChooserDescription">Choose a contact from this device</string>
-    <string name="mediapicker_gallery_title">Choose media</string>
-    <string name="mediapicker_gallery_item_selected_content_description">The media is selected.</string>
-    <string name="mediapicker_gallery_item_unselected_content_description">The media is unselected.</string>
-    <string name="mediapicker_gallery_title_selection"><xliff:g id="count">%d</xliff:g> selected</string>
-    <!-- example: "image January 17 2015 1 59 pm" -->
-    <string name="mediapicker_gallery_image_item_description">image <xliff:g id="date">%1$tB %1$te %1$tY %1$tl %1$tM %1$tp</xliff:g></string>
-    <string name="mediapicker_gallery_image_item_description_no_date">image</string>
-    <string name="mediapicker_audio_title">Record audio</string>
-    <string name="mediapicker_contact_title">Choose a contact</string>
-    <!-- Hint text on the contact picker -->
-    <string name="contact_picker_hint_text">Click to open contacts list on this device</string>
-
-    <string name="action_share">Share</string>
-
-    <string name="posted_just_now">"Just now"</string>
-    <string name="posted_now">"Now"</string>
-
-    <!-- Abbreviated message to express that something occurred some number of minutes in the past (e.g., 5 minutes ago). -->
-    <plurals name="num_minutes_ago">
-        <item quantity="one"><xliff:g id="count">%d</xliff:g> min</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> mins</item>
-    </plurals>
-
-    <!-- Abbreviated message to express that something occurred some number of hours in the past (e.g., 5 hours ago). -->
-    <plurals name="num_hours_ago">
-        <item quantity="one"><xliff:g id="count">%d</xliff:g> hour</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> hours</item>
-    </plurals>
-
-    <!-- Abbreviated message to express that something occurred some number of days in the past (e.g., 5 days ago). -->
-    <plurals name="num_days_ago">
-        <item quantity="one"><xliff:g id="count">%d</xliff:g> day</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> days</item>
-    </plurals>
-
-    <!--
-        Plurals used for the duration in free sms storage action and confirm strings above
-        Example: "Delete messages older than a week"
-    -->
-    <plurals name="week_count">
-        <!-- Singular case -->
-        <item quantity="one">a week</item>
-        <!-- Plural case -->
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> weeks</item>
-    </plurals>
-    <plurals name="month_count">
-        <!-- Singular case -->
-        <item quantity="one">a month</item>
-        <!-- Plural case -->
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> months</item>
-    </plurals>
-    <plurals name="year_count">
-        <!-- Singular case -->
-        <item quantity="one">a year</item>
-        <!-- Plural case -->
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> years</item>
-    </plurals>
-
-    <!-- Title of the class-0 message activity. -->
-    <string name="class_0_message_activity">Class 0 message</string>
-    <string name="save">Save</string>
-
-    <!-- Text for SMS storage low text, when auto delete is enabled -->
-    <string name="sms_storage_low_auto_delete_enabled_dialog_text">Device is low on space. Messaging will automatically delete older messages to free up space.</string>
-    <!-- Title for SMS storage low notification and dialog. Must match the framework's notification title, i.e. //frameworks/base/core/res/res/values/strings.xml#low_internal_storage_view_title -->
-    <string name="sms_storage_low_title">Storage space running out</string>
-    <!-- Text for SMS storage low notification and dialog -->
-    <string name="sms_storage_low_text">Messaging might not send or receive messages until more space is available on your device.</string>
-    <!-- Ticker for SMS storage low notification -->
-    <string name="sms_storage_low_notification_ticker">Low SMS storage. You may need to delete messages.</string>
-
-    <!-- Title for asking the user to enter their phone number -->
-    <string name="enter_phone_number_title">Confirm your phone number</string>
-    <!-- Text for asking the user to enter their phone number -->
-    <string name="enter_phone_number_text">This one-time step will ensure Messaging will deliver your group messages properly.</string>
-    <!-- EditText hint for asking the user to enter their phone number -->
-    <string name="enter_phone_number_hint">Phone number</string>
-
-    <!-- Free SMS storage actions -->
-    <string name="delete_all_media">Delete all messages with media</string>
-    <string name="delete_oldest_messages">Delete messages older than <xliff:g id="duration">%s</xliff:g></string>
-    <string name="auto_delete_oldest_messages">Auto-delete messages older than <xliff:g id="duration">%s</xliff:g></string>
-    <string name="ignore">Ignore</string>
-
-    <!-- Free SMS storage action confirm dialog message -->
-    <string name="delete_all_media_confirmation">Delete all messages with media?</string>
-    <string name="delete_oldest_messages_confirmation">Delete messages older than <xliff:g id="duration">%s</xliff:g>?</string>
-    <string name="auto_delete_oldest_messages_confirmation">Delete messages older than <xliff:g id="duration">%s</xliff:g> and turn on auto-delete?</string>
-
-    <!-- ####### Strings to support the mms/sms service ####### -->
-
-    <!-- Prefix for accessibility to indicate who the sender of a plain text message is. -->
-    <string name="incoming_text_sender_content_description"><xliff:g id="sender">%s</xliff:g> said</string>
-    <string name="outgoing_text_sender_content_description">You said</string>
-
-    <!-- Prefix for accessibility to indicate who the sender of text with hyperlinks, an attachment, or yet-to-be-downloaded message is. -->
-    <string name="incoming_sender_content_description">Message from <xliff:g id="sender">%s</xliff:g></string>
-    <string name="outgoing_sender_content_description">You sent a message</string>
-
-    <!-- While sending a message display this message. -->
-    <string name="message_status_sending">Sending&#8230;</string>
-    <!-- When sending a message failed display this message. -->
-    <string name="message_status_send_failed">Not sent. Tap to try again.</string>
-    <!-- When retrying sending for a message. -->
-    <string name="message_status_send_retrying">Not sent. Trying again&#8230;</string>
-    <!-- When showing resend action display this message. -->
-    <string name="message_status_resend">Resend or delete</string>
-
-    <!-- When sending a message to an emergency number failed display this message in the conversation. -->
-    <string name="message_status_send_failed_emergency_number">Please make a voice call to emergency services. Your text message could not be delivered at this time.</string>
-
-    <!-- When showing resend action, display this message. -->
-    <string name="message_status_failed">Failed</string>
-
-    <!-- Title line for an MMS requiring manual download. -->
-    <string name="message_title_manual_download">New MMS message to download</string>
-    <!-- Title line for an MMS auto-downloading. -->
-    <string name="message_title_downloading">New MMS message</string>
-    <!-- Title line for MMS which failed to download. -->
-    <string name="message_title_download_failed">Couldn\'t download</string>
-    <!-- Timestamp line for MMS which failed to download. -->
-    <string name="message_status_download_failed">Tap to try again</string>
-    <!-- Timestamp line for MMS which failed to download. -->
-    <string name="message_status_download">Tap to download</string>
-    <!-- Timestamp line for MMS which is selected. -->
-    <string name="message_status_download_action">Download or delete</string>
-    <!-- Timestamp line to display while downloading a message. -->
-    <string name="message_status_downloading">Downloading&#8230;</string>
-    <!-- Timestamp line for MMS for expired or invalid message. -->
-    <string name="message_status_download_error">Message expired or not available</string>
-    <!-- Display this info line with an MMS notification -->
-    <string name="mms_info">size: <xliff:g id="messageSize">%1$s</xliff:g>, expiration: <xliff:g id="messageExpire">%2$s</xliff:g></string>
-    <!-- While sending a message, if it has invalid recipient, display this message. -->
-    <string name="invalid_destination">Can\'t send. Recipient not valid.</string>
-    <!-- While sending a message, this error is expected to be generated when user does not have
-         MMS enabled on his account. [CHAR LIMIT=NONE] -->
-    <string name="service_not_activated">Service not activated on network</string>
-    <!-- If a message can't be sent because of a MMSC network problem, show this toast. [CHAR LIMIT=NONE] -->
-    <string name="service_network_problem">Couldn\'t send due to network problem</string>
-    <!-- If a message has expired and is no longer available on MMSC, show this toast. [CHAR LIMIT=NONE] -->
-    <string name="service_message_not_found">Message expired or not available</string>
-    <!-- Download Manager -->
-    <!-- When an error occurs downloading a new message and a subject isn't available, substitute
-         this default subject. -->
-    <string name="no_subject">(No subject)</string>
-    <!-- When an error occurs downloading a new message and the sender is unknown, substitute
-         this default text. -->
-    <string name="unknown_sender">Unknown sender</string>
-    <string name="delivered_status_content_description">Delivered</string>
-    <!-- When an error occurs downloading a new message, display this message.
-         An example: Download of message Wanna get pizza from dorkman was unsuccessful. -->
-    <string name="dl_failure_notification">Couldn\'t download message <xliff:g id="subject">%1$s</xliff:g> from <xliff:g id="from">%2$s</xliff:g>.</string>
-    <!-- When a database error occurs due to low memory this toast is shown. -->
-    <string name="low_memory">Couldn\'t complete database operation due to low memory</string>
-    <!-- notification line 1 for "there are some failed messages" -->
-    <string name="notification_send_failures_line1_singular">Message not sent</string>
-    <!-- notification line 1 for "there are some failed messages" -->
-    <string name="notification_send_failures_line1_plural">Some messages not sent in Messaging</string>
-    <plurals name="notification_send_failures">
-        <item quantity="one"><xliff:g id="messages">%d</xliff:g> messages in one conversation</item>
-        <item quantity="other"><xliff:g id="messages">%d</xliff:g> messages in <xliff:g id="conversations">%d</xliff:g> conversations</item>
-    </plurals>
-    <!-- notification line 1 for download failed -->
-    <string name="notification_download_failures_line1_singular">Message not downloaded</string>
-    <!-- notification line 1 for multiple downloads failed -->
-    <string name="notification_download_failures_line1_plural">Some messages not downloaded in Messaging</string>
-    <plurals name="notification_download_failures">
-        <item quantity="one"><xliff:g id="messages">%d</xliff:g> messages in one conversation</item>
-        <item quantity="other"><xliff:g id="messages">%d</xliff:g> messages in <xliff:g id="conversations">%d</xliff:g> conversations</item>
-    </plurals>
-    <!-- Notification title when emergency SMS (e.g. to 911) fails to send -->
-    <string name="notification_emergency_send_failure_line1">Message to <xliff:g id="number">%1$s</xliff:g> not sent</string>
-    <!-- Notification content when emergency SMS fails to send -->
-    <string name="notification_emergency_send_failure_line2">
-        Please make a voice call to emergency services. Your text message to
-        <xliff:g id="number">%1$s</xliff:g> could not be delivered at this time.
-    </string>
-    <!-- notification line 1 for new message notification on the lock screen -->
-    <plurals name="notification_new_messages">
-        <item quantity="one">New message</item>
-        <item quantity="other"><xliff:g id="messages">%d</xliff:g> new messages</item>
-    </plurals>
-
-    <!-- Text for starting a new conversation button in the compose UI -->
-    <string name="start_conversation">Start</string>
-
-    <string name="camera_error_opening">Camera not available</string>
-    <string name="camera_error_unknown">Camera not available</string>
-    <string name="camera_error_video_init_fail">Video capture not available</string>
-    <!-- Error message when we are unable to write a picture or video file because of an error writing to storage (usually because insufficient space) -->
-    <string name="camera_error_storage_fail">Can\'t save media</string>
-    <string name="camera_error_failure_taking_picture">Can\'t take picture</string>
-
-    <!-- Content description text for Back button on the action bar -->
-    <string name="back">Back</string>
-    <!-- Action menu title for showing archived conversations -->
-    <string name="action_menu_show_archived">Archived</string>
-    <!-- Action menu title for deleting selected conversations in conversation list -->
-    <string name="action_delete">Delete</string>
-    <!-- Action menu title for archiving selected conversations in conversation list -->
-    <string name="action_archive">Archive</string>
-    <!-- Action menu title for unarchiving selected conversations in conversation list -->
-    <string name="action_unarchive">Unarchive</string>
-    <!-- Action menu title for turning off notification for the selected conversations in conversation list -->
-    <string name="action_notification_off">Turn off notifications</string>
-    <!-- Action menu title for turning on notification for the selected conversations in conversation list -->
-    <string name="action_notification_on">Turn on notifications</string>
-    <!-- Action menu title for adding the contacts for the selected conversations in conversation list -->
-    <string name="action_add_contact">Add contact</string>
-    <!-- Action menu title for downloading failed message selected in conversation -->
-    <string name="action_download">Download</string>
-    <!-- Action menu title for sending failed message selected in conversation -->
-    <string name="action_send">Send</string>
-    <!-- Action menu title for deleting failed message selected in conversation -->
-    <string name="action_delete_message">Delete</string>
-
-    <string name="delete_message_confirmation_dialog_title">Delete this message?</string>
-    <string name="delete_message_confirmation_dialog_text">This action cannot be undone.</string>
-    <string name="delete_message_confirmation_button">Delete</string>
-
-    <!-- Alert dialog title to accept or decline deleting conversation(s). -->
-    <plurals name="delete_conversations_confirmation_dialog_title">
-        <item quantity="one">Delete this conversation?</item>
-        <item quantity="other">Delete these conversations?</item>
-    </plurals>
-
-    <!-- Alert dialog accept deleting this conversation button. -->
-    <string name="delete_conversation_confirmation_button">Delete</string>
-    <!-- Alert dialog decline deleting this conversation button. -->
-    <string name="delete_conversation_decline_button">Cancel</string>
-
-    <!-- Hint text for the recipient chips text box when it's empty -->
-    <string name="recipient_hint">To</string>
-    <!-- Action menu title for multiple selection in gallery image picker -->
-    <string name="action_multiselect">Select multiple images</string>
-    <!-- Action menu title for confirming multiple selection in gallery image picker -->
-    <string name="action_confirm_multiselect">Confirm selection</string>
-    <!-- Text for showing there are more items in the attachments than is shown (e.g. "+2") -->
-    <string name="attachment_more_items">+<xliff:g id="count">%d</xliff:g></string>
-    <!-- Failed to start recording audio -->
-    <string name="audio_recording_start_failed">Can\'t record audio. Try again.</string>
-    <!-- Failed to replay recorded audio -->
-    <string name="audio_recording_replay_failed">Can\'t play audio. Try again.</string>
-    <!-- Error occurred while recording audio -->
-    <string name="audio_recording_error"> Couldn\'t save audio. Try again.</string>
-    <!-- Hint text on the audio recorder that instructs user how to start recording -->
-    <string name="audio_picker_hint_text">Tap &amp; hold</string>
-
-    <!-- An enumeration comma for separating multiple names in notifications. [CHAR LIMIT=2] -->
-    <string name="enumeration_comma">,\u0020</string>
-    <!-- Separator between parts of a notification in each line of an inboxStyle notification. [CHAR LIMIT=2] -->
-    <string name="notification_separator">\u0020\u0020</string>
-    <!-- Separator between title and content in notification ticker -->
-    <string name="notification_ticker_separator">:\u0020</string>
-    <!-- Separator between title and content in notifications -->
-    <string name="notification_space_separator">\u0020\u0020</string>
-    <!-- Shown in notifications when there's a picture. [CHAR LIMIT=25] -->
-    <string name="notification_picture">Picture</string>
-    <!-- Shown in notifications when there's an audio clip. [CHAR LIMIT=25] -->
-    <string name="notification_audio">Audio clip</string>
-    <!-- Shown in notifications when there's a video. [CHAR LIMIT=25] -->
-    <string name="notification_video">Video</string>
-    <!-- Shown in notifications when there's a vcard. [CHAR LIMIT=25] -->
-    <string name="notification_vcard">Contact card</string>
-    <!-- Notification action label for download MMS when set to manual downloads. [CHAR LIMIT=15] -->
-    <string name="notification_download_mms">Download</string>
-    <!-- Notification action label for SMS reply (visible on wearable device only). [CHAR LIMIT=15] -->
-    <string name="notification_reply_via_sms">Reply via SMS</string>
-    <!-- Notification action label for MMS reply (visible on wearable device only). [CHAR LIMIT=15] -->
-    <string name="notification_reply_via_mms">Reply via MMS</string>
-    <!-- Notification voice reply prompt (visible on wearable device only). [CHAR LIMIT=15] -->
-    <string name="notification_reply_prompt">Reply</string>
-    <string name="ellipsis" translatable="false">...</string>
-    <!-- The bottom line on a wearable notification that shows how many participants in the conversation -->
-    <plurals name="wearable_participant_count">
-        <item quantity="one"><xliff:g id="count">%d</xliff:g> participant</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> participants</item>
-    </plurals>
-    <!-- Shown in the Android Wear conversation log as the sender for outgoing messages,
-         when we don't know the user's real name (e.g. no "Me" contact on the phone). -->
-    <string name="unknown_self_participant">Me</string>
-
-    <!-- The text of the toast/snack message shown when a contact is blocked -->
-    <string name="blocked_toast_message">Contact blocked &amp; archived</string>
-    <!-- The text of the toast/snack message shown when a contact is unblocked -->
-    <string name="unblocked_toast_message">Contact unblocked &amp; unarchived</string>
-    <!-- The text of the toast/snack message shown when the selected conversation(s) are archived.
-         Displays the number of converstions archived -->
-    <string name="archived_toast_message"><xliff:g id="count">%d</xliff:g> archived</string>
-    <!-- The text of the toast/snack message shown when the selected conversation(s) are unarchived.
-         Displays the number of conversations unarchived -->
-    <string name="unarchived_toast_message"><xliff:g id="count">%d</xliff:g> unarchived</string>
-    <!-- The text of the toast/snack message shown when a notifications turned off for selected conversations -->
-    <string name="notification_off_toast_message">Notifications turned off</string>
-    <!-- The text of the toast/snack message shown when a notifications turned on for selected conversations -->
-    <string name="notification_on_toast_message">Notifications turned on</string>
-
-    <!-- Toast shown when the user tries to send a message, and then sets Bugle as the default SMS app. -->
-    <string name="toast_after_setting_default_sms_app_for_message_send">All set. Tap Send again.</string>
-    <!-- Toast shown when the user successfully sets Bugle as the default SMS app. -->
-    <string name="toast_after_setting_default_sms_app">Messaging successfully set as the default SMS app.</string>
-
-    <!-- Accessibility : Content descriptinon for ImageButtons and ImageViews -->
-    <plurals name="attachment_preview_close_content_description">
-        <item quantity="one">Discard attachment</item>
-        <item quantity="other">Discard attachments</item>
-    </plurals>
-    <string name="audio_attachment_content_description">Audio attachment</string>
-    <string name="audio_play_content_description">Play audio attachment</string>
-    <string name="audio_pause_content_description">Pause</string>
-
-    <!-- Accessibility announcement for an incoming message -->
-    <string name="incoming_message_announcement">Message from <xliff:g id="sender">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>.</string>
-    <!-- Accessibility description for conversation list for 1:1 conversations -->
-    <string name="one_on_one_incoming_failed_message_prefix">Failed message from <xliff:g id="sender">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>.</string>
-    <string name="one_on_one_incoming_successful_message_prefix">Message from <xliff:g id="sender">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>.</string>
-    <string name="one_on_one_outgoing_draft_message_prefix">Unsent message to <xliff:g id="contact">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>.</string>
-    <string name="one_on_one_outgoing_sending_message_prefix">Sending message to <xliff:g id="contact">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>.</string>
-    <string name="one_on_one_outgoing_failed_message_prefix">Failed message to <xliff:g id="contact">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>.</string>
-    <string name="one_on_one_outgoing_successful_message_prefix">Message to <xliff:g id="contact">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>.</string>
-    <!-- Accessibility description for conversation list for group conversations -->
-    <string name="group_incoming_failed_message_prefix">Failed message from <xliff:g id="sender">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>. <xliff:g id="groupInfo">%4$s</xliff:g>.</string>
-    <string name="group_incoming_successful_message_prefix">Message from <xliff:g id="sender">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>. <xliff:g id="groupInfo">%4$s</xliff:g>.</string>
-    <string name="group_outgoing_draft_message_prefix">Unsent message to <xliff:g id="group">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>.</string>
-    <string name="group_outgoing_sending_message_prefix">Sending message to <xliff:g id="group">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>.</string>
-    <string name="group_outgoing_failed_message_prefix">Failed message to <xliff:g id="group">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>.</string>
-    <string name="group_outgoing_successful_message_prefix">Message to <xliff:g id="group">%1$s</xliff:g>: <xliff:g id="message">%2$s</xliff:g>. Time: <xliff:g id="time">%3$s</xliff:g>.</string>
-    <!-- Accessibility description for conversation list for failed messages -->
-    <string name="failed_message_content_description">Failed message. Tap to retry.</string>
-
-    <!-- Accessibility name for a group conversation -->
-    <string name="group_conversation_description">Conversation with <xliff:g id="participants">%s</xliff:g></string>
-
-    <!-- Accessibility : text read on the small X icon on the subject editor -->
-    <string name="delete_subject_content_description">Delete subject</string>
-
-    <string name="camera_switch_to_video_mode">Capture video</string>
-    <string name="camera_switch_to_still_mode">Capture a still image</string>
-    <string name="camera_take_picture">Take picture</string>
-    <string name="camera_start_recording">Start recording video</string>
-    <string name="camera_switch_full_screen">Switch to full screen camera</string>
-    <string name="camera_switch_camera_facing">Switch between front and back camera</string>
-    <string name="camera_stop_recording">Stop recording and attach video</string>
-    <string name="camera_cancel_recording">Stop recording video</string>
-
-    <string name="photo_view_activity_title">Messaging photos</string>
-    <plurals name="photos_saved_to_album">
-        <item quantity="one"><xliff:g id="quantity">%d</xliff:g> photo saved to \"<xliff:g id="albumName">%s</xliff:g>\" album</item>
-        <item quantity="other"><xliff:g id="quantity">%d</xliff:g> photos saved to \"<xliff:g id="albumName">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="videos_saved_to_album">
-        <item quantity="one"><xliff:g id="quantity">%d</xliff:g> video saved to \"<xliff:g id="albumName">%s</xliff:g>\" album</item>
-        <item quantity="other"><xliff:g id="quantity">%d</xliff:g> videos saved to \"<xliff:g id="albumName">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="attachments_saved_to_album">
-        <item quantity="one"><xliff:g id="quantity">%d</xliff:g> attachment saved to \"<xliff:g id="albumName">%s</xliff:g>\" album</item>
-        <item quantity="other"><xliff:g id="quantity">%d</xliff:g> attachments saved to \"<xliff:g id="albumName">%s</xliff:g>\" album</item>
-    </plurals>
-    <plurals name="attachments_saved_to_downloads">
-        <item quantity="one"><xliff:g id="quantity">%d</xliff:g> attachment saved to \"Downloads\"</item>
-        <item quantity="other"><xliff:g id="quantity">%d</xliff:g> attachments saved to \"Downloads\"</item>
-    </plurals>
-    <plurals name="attachments_saved">
-        <item quantity="one"><xliff:g id="quantity">%d</xliff:g> attachment saved</item>
-        <item quantity="other"><xliff:g id="quantity">%d</xliff:g> attachments saved</item>
-    </plurals>
-    <plurals name="attachment_save_error">
-        <item quantity="one">Couldn\'t save <xliff:g id="quantity">%d</xliff:g> attachment</item>
-        <item quantity="other">Couldn\'t save <xliff:g id="quantity">%d</xliff:g> attachments</item>
-    </plurals>
-    <!-- Description shown in the download manager for an attachment that the user manually saved -->
-    <string name="attachment_file_description">Saved MMS attachment</string>
-
-    <!-- Title for the preferences/settings activity -->
-    <string name="settings_activity_title">Settings</string>
-    <!-- Title for the archived conversations activity -->
-    <string name="archived_activity_title">Archived</string>
-    <!-- Action title: Close -->
-    <string name="action_close">Close</string>
-    <!-- Preference category: MMS messaging -->
-    <string name="mms_messaging_category_pref_title">MMS</string>
-    <!-- Preference category: Advanced -->
-    <string name="advanced_category_pref_title">Advanced</string>
-    <!-- Preference category: Debug -->
-    <string name="debug_category_pref_title">Debug</string>
-    <!-- Title for the preference for whether or to notify the user of new messages -->
-    <string name="notifications_enabled_pref_title">Notifications</string>
-    <!-- Title for the notification sound preference -->
-    <string name="notification_sound_pref_title">Sound</string>
-    <!-- What to display in the settings screen for Ringtone when the user chooses "silent" [CHAR LIMIT=100]-->
-    <string name="silent_ringtone">Silent</string>
-    <!-- Title for the preference for whether or not to vibrate with notifications -->
-    <string name="notification_vibrate_pref_title">Vibrate</string>
-    <string name="blocked_pref_title">Blocked</string>
-    <!-- Title for the preference for whether or not to request/show delivery reports for SMS -->
-    <string name="delivery_reports_pref_title">SMS delivery reports</string>
-    <string name="delivery_reports_pref_summary">Request a delivery report for each SMS you send</string>
-    <string name="auto_retrieve_mms_pref_title">Auto-retrieve</string>
-    <string name="auto_retrieve_mms_pref_summary">Automatically retrieve MMS messages</string>
-    <!-- Title for the preference for whether or not to auto-retrieve MMS when roaming -->
-    <string name="auto_retrieve_mms_when_roaming_pref_title">Roaming auto-retrieve</string>
-    <string name="auto_retrieve_mms_when_roaming_pref_summary">Automatically retrieve MMS when roaming</string>
-    <string name="group_mms_pref_title">Group messaging</string>
-    <string name="group_mms_pref_summary">Use MMS to send a single message when there are multiple recipients</string>
-    <!-- Preference title: SMS disabled (Messaging is not default SMS app) -->
-    <string name="sms_disabled_pref_title">Default SMS app</string>
-    <!-- Preference title: SMS enabled (Messaging is the default SMS app) -->
-    <string name="sms_enabled_pref_title">Default SMS app</string>
-    <!-- Preference summary: Current default SMS app -->
-    <string name="default_sms_app"><xliff:g id="app_name">%s</xliff:g></string>
-    <!-- Preference title: MMS phone number -->
-    <string name="mms_phone_number_pref_title">Your phone number</string>
-    <!-- Display text for phone number preference when the number is unknown -->
-    <string name="unknown_phone_number_pref_display_value">Unknown</string>
-    <!-- Title for the preference for playing a message send sound -->
-    <string name="send_sound_pref_title">Outgoing message sounds</string>
-
-    <string name="dump_sms_pref_title">Dump SMS</string>
-    <string name="dump_sms_pref_summary">Dump received SMS raw data into external storage file</string>
-    <string name="dump_mms_pref_title">Dump MMS</string>
-    <string name="dump_mms_pref_summary">Dump received MMS raw data into external storage file</string>
-    <!-- Strings for dump sms/mms dialog -->
-    <string name="email_sms_mms_dump_file_subject" translatable="false">SMS dump file</string>
-    <string name="email_sms_mms_dump_file_chooser_title" translatable="false">Email SMS dump</string>
-    <string name="load_sms_mms_from_dump_file_dialog_title" translatable="false">Load dump file</string>
-    <string name="email_sms_mms_from_dump_file_dialog_title" translatable="false">Email dump file</string>
-    <string name="wireless_alerts_title">Wireless alerts</string>
-
-    <!-- Title of long press menu on an individual message. -->
-    <string name="message_context_menu_title">Message options</string>
-    <!-- Menu item to copy message text -->
-    <string name="message_context_menu_copy_text">Copy text</string>
-    <!-- Title of long press menu for details about an individual message. -->
-    <string name="message_context_menu_view_details">View details</string>
-    <!-- Title of long press menu for deleting an individual message. -->
-    <string name="message_context_menu_delete_message">Delete</string>
-    <!-- Title of long press menu for forwarding an individual message. -->
-    <string name="message_context_menu_forward_message">Forward</string>
-    <!-- Title of "Message details" dialog -->
-    <string name="message_details_title">Message details</string>
-    <!-- Label in "Message details" dialog -->
-    <string name="message_type_label">Type:\u0020</string>
-    <!-- "Type" value in "Message details" dialog -->
-    <string name="text_message">Text message</string>
-    <!-- "Type" value in "Message details" dialog -->
-    <string name="multimedia_message">Multimedia message</string>
-    <!-- Label in "Message details" dialog showing who sent the message. -->
-    <string name="from_label">From:\u0020</string>
-    <!-- Label in "Message details" dialog -->
-    <string name="to_address_label">To:\u0020</string>
-    <!-- Label in "Message details" dialog -->
-    <string name="sent_label">Sent:\u0020</string>
-    <!-- Label in "Message details" dialog -->
-    <string name="received_label">Received:\u0020</string>
-    <!-- Label in "Message details" dialog -->
-    <string name="subject_label">Subject:\u0020</string>
-    <!-- Label in "Message details" dialog -->
-    <string name="message_size_label">Size:\u0020</string>
-    <!-- Label in "Message details" dialog -->
-    <string name="priority_label">Priority:\u0020</string>
-    <!-- Label in "Message details" dialog -->
-    <string name="sim_label">SIM:\u0020</string>
-    <!-- "Priority" value in "Message details" dialog -->
-    <string name="priority_high">High</string>
-    <!-- "Priority" value in "Message details" dialog -->
-    <string name="priority_normal">Normal</string>
-    <!-- "Priority" value in "Message details" dialog -->
-    <string name="priority_low">Low</string>
-    <!-- SIM identified using the slot number. e.g. SIM 1 -->
-    <string name="sim_slot_identifier">SIM <xliff:g id="sim_slot_number">%s</xliff:g></string>
-    <!-- Sender to be used if the sender address has been hidden -->
-    <string name="hidden_sender_address">Hidden sender address</string>
-    <!-- Shows when the user attempts to send message while some attachment(s) haven't finished loading -->
-    <string name="cant_send_message_while_loading_attachments">Can\'t send message while loading attachments.</string>
-    <!-- Notifies the user when an attachment fails to load -->
-    <string name="fail_to_load_attachment">Can\'t load attachment. Try again.</string>
-    <!-- Shows when the user attempts to send message when there is no active subscription -->
-    <string name="cant_send_message_without_active_subscription">Network is not ready. Try again.</string>
-
-    <string name="chips_text_delete_button_content_description">Delete text</string>
-    <string name="numeric_text_keyboard_toggle_button_content_description">Switch between entering text and numbers</string>
-    <string name="add_more_participants_button_content_description">Add more participants</string>
-    <string name="confrim_participants_button_content_description">Confirm participants</string>
-    <string name="start_new_conversation">Start new conversation</string>
-    <!-- Content description for the checkbox when selecting an item in the gallery -->
-    <string name="gallery_checkbox_content_description">Select this item</string>
-    <string name="video_thumbnail_view_play_button_content_description">Play video</string>
-    <!-- Option menu item in the conversation view that lets user view list of conversation participants and change options -->
-    <string name="action_people_and_options">People &amp; options</string>
-    <!-- Option menu item in the conversation list view and conversation view that shows debug menu -->
-    <string name="action_debug_options">Debug</string>
-    <!-- Title for the "People and Options" activity -->
-    <string name="people_and_options_activity_title">People &amp; options</string>
-    <!-- Title for the general settings section in the "People and options" activity -->
-    <string name="general_settings_title">General</string>
-    <!-- Title for the list of participants in the "People and options" activity -->
-    <string name="participant_list_title">People in this conversation</string>
-    <!-- Title for the phone call button in the action bar that lets the user call a participant in an SMS conversation -->
-    <string name="action_call">Make a call</string>
-    <!-- The hint text shown in the message compose input box prompting the user to send a message -->
-    <string name="compose_message_view_hint_text">Send message</string>
-    <!-- The hint text shown in the message compose input box prompting the user to send a message when there are multiple SIMs. -->
-    <string name="compose_message_view_hint_text_multi_sim">Send message&lt;br/&gt;&lt;small&gt;from <xliff:g id="sim_name">%s</xliff:g>&lt;/small&gt;</string>
-    <!-- The hint text shown in the message compose input box when photo(s) is attached -->
-    <plurals name="compose_message_view_hint_text_photo">
-        <item quantity="one">Send photo</item>
-        <item quantity="other">Send photos</item>
-    </plurals>
-    <!-- The hint text shown in the message compose input box when audio recording(s) is attached -->
-    <plurals name="compose_message_view_hint_text_audio">
-        <item quantity="one">Send audio</item>
-        <item quantity="other">Send audios</item>
-    </plurals>
-    <!-- The hint text shown in the message compose input box when video(s) is attached -->
-    <plurals name="compose_message_view_hint_text_video">
-        <item quantity="one">Send video</item>
-        <item quantity="other">Send videos</item>
-    </plurals>
-    <!-- The hint text shown in the message compose input box when vcard(s) is attached -->
-    <plurals name="compose_message_view_hint_text_vcard">
-        <item quantity="one">Send contact card</item>
-        <item quantity="other">Send contact cards</item>
-    </plurals>
-    <!-- The hint text shown in the message compose input box when a single unknown attachment, or multiple different attachments are attached -->
-    <plurals name="compose_message_view_hint_text_attachments">
-        <item quantity="one">Send attachment</item>
-        <item quantity="other">Send attachments</item>
-    </plurals>
-    <!-- Announcement after the user adds or removes an attachment -->
-    <plurals name="attachment_changed_accessibility_announcement">
-        <item quantity="zero">No attachments selected</item>
-        <item quantity="one">One attachment ready to send</item>
-        <item quantity="other"><xliff:g id="attachment_count">%d</xliff:g> attachments ready to send</item>
-    </plurals>
-    <!-- Action menu title in the HelpAndFeedbackFragment to let users send feedback -->
-    <string name="menu_send_feedback">Send feedback</string>
-    <!-- Action menu title in the HelpAndFeedbackFragment to let users view the app in the Google Play Store -->
-    <string name="menu_view_in_store">View in Google Play Store</string>
-    <!-- Action menu title in the HelpAndFeedbackFragment to let users view the version of Bugle -->
-    <string name="menu_version_info">Version info</string>
-    <!-- The format of the subtitle of the help activity. -->
-    <string name="subtitle_format_for_version_number">Version %1$s</string>
-
-    <!--  Action menu title to let users view open source license -->
-    <string name="menu_license">Open source licenses</string>
-    <!-- Title for the per-conversation preference for whether or to notify the user of new messages -->
-    <string name="notifications_enabled_conversation_pref_title">Notifications</string>
-    <!-- Reached MMS message attachment limit -->
-    <string name="mms_attachment_limit_reached">Attachment limit reached</string>
-    <!-- Message attachment load failed -->
-    <string name="mms_attachment_load_failed">Failed to load attachment.</string>
-    <!-- Alert dialog title to accept or decline adding the given phone number to your contacts. -->
-    <string name="add_contact_confirmation_dialog_title">Add to Contacts?</string>
-    <!-- Alert dialog accept adding the given phone number to your contacts button. -->
-    <string name="add_contact_confirmation">Add Contact</string>
-    <!-- The text shown as a label before the message subject input box -->
-    <string name="compose_message_view_subject_hint_text">Subject</string>
-    <!-- The text shown as a label before the message subject input box -->
-    <string name="conversation_message_view_subject_text">Subject:\u0020</string>
-    <!-- When there's a subject in an mms, the subject + message are shown in a notification -->
-    <string name="notification_subject"><xliff:g id="subject_label">%1$s</xliff:g><xliff:g id="messageText">%2$s</xliff:g></string>
-
-    <!-- Text shown on contact VCard when it's being loaded -->
-    <string name="loading_vcard">Loading contact card</string>
-    <!-- Text shown on contact VCard when it failed to load -->
-    <string name="failed_loading_vcard">Couldn\'t load contact card</string>
-    <!-- Text shown on contact VCard promping the user to tap to view the contact -->
-    <string name="vcard_tap_hint">View contact card</string>
-    <!-- VCard display name for when there's more than one contact, e.g. "2 contact cards" -->
-    <plurals name="vcard_multiple_display_name">
-        <!-- quantity="one" is not needed by the app, but it keeps the translation pipeline happy. -->
-        <item quantity="one"><xliff:g id="count">%d</xliff:g> contact</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> contacts</item>
-    </plurals>
-    <!-- Title for the activity that shows details of VCards -->
-    <string name="vcard_detail_activity_title">Contact cards</string>
-    <!-- VCard label for displaying birthdays -->
-    <string name="vcard_detail_birthday_label">Birthday</string>
-    <!-- VCard label for describing the Notes field of a contact. -->
-    <string name="vcard_detail_notes_label">Notes</string>
-    <!-- Title for the message forwarding dialog -->
-    <string name="forward_message_activity_title">Forward message</string>
-    <!-- Title for the message reply dialog -->
-    <string name="reply_activity_title">Reply</string>
-
-    <!-- String to show when eliding the number of participants in a conversation due to length (used when there is one extra) -->
-    <string name="plus_one">+1</string>
-
-    <!-- String to show when eliding the number of participants in a conversation due to length (used when there is more than one extra) -->
-    <string name="plus_n">+%d</string>
-
-    <!-- Toast error shown when SMS functionality is disabled -->
-    <string name="sms_disabled">SMS disabled</string>
-
-    <!-- Snackbar message that indicates users must set Messaging as their
-         default SMS application in order to send messages -->
-    <string name="requires_default_sms_app_to_send">To send, set Messaging as the default SMS app</string>
-
-    <!-- Snackbar message that indicates users must set Messaging as their default SMS application in order to perform the requested action. -->
-    <string name="requires_default_sms_app">Set Messaging as the default SMS app</string>
-
-    <!-- Snackbar button text to switch default SMS apps shown in snackbar. -->
-    <string name="requires_default_sms_change_button">Change</string>
-
-    <!-- Toast message that indicates uses must set Messaging as their
-         default SMS application in order to receive replies in the app. -->
-    <string name="recommend_set_default_sms_app">To receive messages, set Messaging as the default SMS app</string>
-
-    <!-- Toast message that indicates no preferred SIM was selected for sending the message -->
-    <string name="no_preferred_sim_selected">No preferred SIM selected for sending SMS messages</string>
-
-    <!-- Dialog message that indicates user must be granted permissions from the phone owner to
-         send SMS messages. -->
-    <string name="requires_sms_permissions_message">This app isn\'t allowed by the device owner.</string>
-    <!-- Dialog button text that closes the application. -->
-    <string name="requires_sms_permissions_close_button">OK</string>
-
-    <!-- Toast text when creating a conversation with more participants than MMS/SMS config permits -->
-    <string name="too_many_participants">Too many participants in a conversation</string>
-    <!-- Toast text when creating a conversation with an invalid participant -->
-    <plurals name="add_invalid_contact_error">
-        <item quantity="one">Invalid contact</item>
-        <item quantity="other">Invalid contacts</item>
-    </plurals>
-    <!-- Error toast message shown when a camera image failed to attach to the message -->
-    <string name="camera_media_failure">Couldn\'t load camera image</string>
-
-    <!-- A message prefix to indicate the message was sent by the user. -->
-    <string name="conversation_list_item_view_sent_from_you_prefix">You:\u0020</string>
-
-    <!-- A message prefix to indicate the message was sent by another user in a group conversation. -->
-    <string name="conversation_list_item_view_sent_from_other_prefix"><xliff:g id="firstNameOfSender">%s</xliff:g>:\u0020</string>
-
-    <!-- A message in conversation list view to indicate that the snipit text and preview is from an unsent draft. -->
-    <string name="conversation_list_item_view_draft_message">Draft</string>
-
-    <!-- String to show in the conversation list view when there are no messages. -->
-    <string name="conversation_list_empty_text">Once you start a new conversation, you’ll see it listed here</string>
-    <!-- String to show in the archived conversation list view when there are no messages. -->
-    <string name="archived_conversation_list_empty_text">Archived conversations appear here</string>
-    <!-- String to show in the conversation list view when we haven't synchronized the SMS database yet -->
-    <string name="conversation_list_first_sync_text">Loading conversations&#8230;</string>
-
-    <!-- Shown in conversation as the snippet when there is no text and an attached picture. [CHAR LIMIT=25] -->
-    <string name="conversation_list_snippet_picture">Picture</string>
-    <!-- Shown in conversation as the snippet when there is no text and an attached audio clip. [CHAR LIMIT=25] -->
-    <string name="conversation_list_snippet_audio_clip">Audio clip</string>
-    <!-- Shown in conversation as the snippet when there is no text and an attached video. [CHAR LIMIT=25] -->
-    <string name="conversation_list_snippet_video">Video</string>
-    <!-- Shown in conversation as the snippet when there is no text and an attached vcard. [CHAR LIMIT=25] -->
-    <string name="conversation_list_snippet_vcard">Contact card</string>
-
-    <!-- Indicates that the current message will be sent via MMS -->
-    <string name="mms_text">MMS</string>
-
-    <!-- The string we display with the snack bar notification (very similar to toast) to undo the action that the notification is about. -->
-    <string name="snack_bar_undo">Undo</string>
-    <string name="snack_bar_retry">Retry</string>
-
-    <!-- Hint text shown on the contact list when there's no contacts -->
-    <string name="contact_list_empty_text">Enter a contact name or phone number to start a new message</string>
-
-    <!-- Action menu title for blocking and archiving selected conversations in conversation list -->
-    <string name="action_block">Block</string>
-
-    <!-- Label of block contact item in People & Options for 1:1 conversation -->
-    <string name="block_contact_title">Block <xliff:g id="destination">%s</xliff:g></string>
-
-    <!-- Label of unblock contact item in People & Options for 1:1 conversation -->
-    <string name="unblock_contact_title">Unblock <xliff:g id="destination">%s</xliff:g></string>
-
-    <!-- Title of block confirmation dialog -->
-    <string name="block_confirmation_title">Block <xliff:g id="destination">%s</xliff:g>?</string>
-
-    <!-- Text describing what happens when user is blocked via the block actionbar action -->
-    <string name="block_confirmation_message">You\'ll continue to receive messages from this number but won\'t be notified anymore. This conversation will be archived.</string>
-
-    <!-- The title of the list of blocked contacts -->
-    <string name="blocked_contacts_title">Blocked contacts</string>
-
-    <!-- The message in a blocked contact item which indicates tapping will unblock -->
-    <string name="tap_to_unblock_message">UNBLOCK</string>
-
-    <!-- Action menu title for viewing the list of blocked contacts -->
-    <string name="view_blocked_contacts_title">Blocked contacts</string>
-
-    <!-- Content description for the button in gallery media picker to pick an image from the document library -->
-    <string name="pick_image_from_document_library_content_description">Choose image from document library</string>
-    <!-- Accessibility toast shown when a message is sending. -->
-    <string name="sending_message">Sending message</string>
-    <!-- Accessibility toast shown when a message is sent. -->
-    <string name="send_message_success">Message sent</string>
-    <!-- Error toast shown when an MMS could not be sent because mobile data was disabled. -->
-    <string name="send_message_failure_no_data">Cellular data is turned off. Check your settings.</string>
-    <!-- Error toast shown when a message could not be sent because of airplane mode. -->
-    <string name="send_message_failure_airplane_mode">Can\'t send messages in Airplane mode</string>
-    <!-- Error toast shown when a message could not be sent because of unspecified error. -->
-    <string name="send_message_failure">Message could not be sent</string>
-
-    <!-- Accessibility toast shown when an MMS is downloaded. -->
-    <string name="download_message_success">Message downloaded</string>
-    <!-- Error toast shown when an MMS could not be downloaded because mobile data was disabled. -->
-    <string name="download_message_failure_no_data">Cellular data is turned off. Check your settings.</string>
-    <!-- Error toast shown when a message could not be downloaded because of airplane mode. -->
-    <string name="download_message_failure_airplane_mode">Can\'t download messages in Airplane mode</string>
-    <!-- Error toast shown when a message could not be downloaded because of unspecified error. -->
-    <string name="download_message_failure">Message could not be downloaded</string>
-
-    <!-- Accessibility : content description for numbers -->
-    <string name="content_description_for_number_zero">Zero</string>
-    <string name="content_description_for_number_one">One</string>
-    <string name="content_description_for_number_two">Two</string>
-    <string name="content_description_for_number_three">Three</string>
-    <string name="content_description_for_number_four">Four</string>
-    <string name="content_description_for_number_five">Five</string>
-    <string name="content_description_for_number_six">Six</string>
-    <string name="content_description_for_number_seven">Seven</string>
-    <string name="content_description_for_number_eight">Eight</string>
-    <string name="content_description_for_number_nine">Nine</string>
-
-    <!-- Error message which shows the user a carrier specific error code such as "Unable to send message: xxxxx error 97" -->
-    <string name="carrier_send_error">Can\'t send message with <xliff:g id="carrierName">%1$s</xliff:g>, error <xliff:g id="errorCode">%2$d</xliff:g></string>
-    <string name="carrier_send_error_unknown_carrier">Can\'t send message with unknown carrier, error <xliff:g id="errorCode">%1$d</xliff:g></string>
-
-    <!-- Text prepended to the subject of a forwarded message -->
-    <string name="message_fwd">Fwd: <xliff:g id="subject">%s</xliff:g></string>
-
-    <!-- Detailed MMS failure strings, may need to be adjusted per carrier for TA -->
-    <string name="mms_failure_outgoing_service">Message not sent: service not activated on network</string>
-    <string name="mms_failure_outgoing_address">Message not sent: invalid destination address</string>
-    <string name="mms_failure_outgoing_corrupt">Message not sent: invalid message</string>
-    <string name="mms_failure_outgoing_content">Message not sent: unsupported content</string>
-    <string name="mms_failure_outgoing_unsupported">Message not sent: unsupported message</string>
-    <string name="mms_failure_outgoing_too_large">Message not sent: too large</string>
-
-    <!-- The notification toast text and action button label shown at bottom of screen, for when a new message comes in while the user
-         is in that conversation, but the message list is not scrolled to the bottom -->
-    <string name="in_conversation_notify_new_message_text">New message</string>
-    <string name="in_conversation_notify_new_message_action">View</string>
-
-    <!-- Content description for the message images in a conversation or for the image preview in the conversation list if the lastest message in that conversation contains an image-->
-    <string name="message_image_content_description">Image</string>
-
-    <!-- Text for a toast message notifying the user that we can't find an appropriate application to handle their request -->
-    <string name="activity_not_found_message">Could not find an appropriate application</string>
-
-    <string name="debug_sub_id_spinner_text" translatable="false">SUB Id</string>
-
-    <!-- Accessibility : Content description for deleting a recipient chip. -->
-    <string name="chips_delete_content_description">Remove recipient</string>
-
-    <!-- Label for new message button in share intent dialog -->
-    <string name="share_new_message">New message</string>
-
-    <!-- Label for new message button in share intent dialog -->
-    <string name="share_cancel">Cancel</string>
-
-    <!-- Screen title after user selects APNs setting option -->
-    <string name="apn_edit">Edit access point</string>
-    <!-- Edit access point label summary text when no value has been set -->
-    <string name="apn_not_set">Not set</string>
-    <!-- Edit access point labels: A label the user can give to the APN to allow him to differentiate it from the others -->
-    <string name="apn_name">Name</string>
-    <!-- Edit access point labels: The actual access point name-->
-    <string name="apn_apn">APN</string>
-    <!-- Edit access point labels: -->
-    <string name="apn_mmsc">MMSC</string>
-    <!-- Edit access point labels: The proxy to use for MMS (multimedia messages)-->
-    <string name="apn_mms_proxy">MMS proxy</string>
-    <!-- Edit access point labels: The port on the proxy used for MMS-->
-    <string name="apn_mms_port">MMS port</string>
-    <!-- Edit access point labels: -->
-    <string name="apn_mcc">MCC</string>
-    <!-- Edit access point labels: -->
-    <string name="apn_mnc">MNC</string>
-    <!-- Edit access point labels: The type of APN -->
-    <string name="apn_type">APN type</string>
-    <!-- Edit access point screen menu option to delete this APN -->
-    <string name="menu_delete_apn">Delete APN</string>
-    <!-- APNs screen menu option to create a brand spanking new APN -->
-    <string name="menu_new_apn">New APN</string>
-    <!-- Edit access point screen menu option to save the user's changes for this APN to the persistent storage -->
-    <string name="menu_save_apn">Save</string>
-    <!-- Edit access point screen menu option to discard the user's changes for this APN -->
-    <string name="menu_discard_apn_change">Discard</string>
-    <!-- APN error dialog messages: -->
-    <string name="error_apn_name_empty">The Name field can\'t be empty.</string>
-    <!-- APN error dialog messages: -->
-    <string name="error_apn_empty">The APN can\'t be empty.</string>
-    <!-- APN error dialog messages: -->
-    <string name="error_mcc_not3">MCC field must be 3 digits.</string>
-    <!-- APN error dialog messages: -->
-    <string name="error_mnc_not23">MNC field must be 2 or 3 digits.</string>
-    <!-- The message of dialog indicated restoring default APN settings in progress -->
-    <string name="restore_default_apn">Restoring default APN settings.</string>
-    <!-- APNs screen menu option to reset default APN settings -->
-    <string name="menu_restore_default_apn">Reset to default</string>
-    <!-- APNs screen toast message to inform reset default APN settings is completed -->
-    <string name="restore_default_apn_completed">Reset default APN settings completed.</string>
-    <!-- Name to assign to a Network Access Point that was saved without a name -->
-    <string name="untitled_apn">Untitled</string>
-    <!-- Title for Access Point Names settings -->
-    <string name="sms_apns_title">Access Point Names</string>
-    <!-- Title for Access Point Names settings activity -->
-    <string name="apn_settings">APNs</string>
-    <!-- APNs screen menu option to create a brand spanking new APN -->
-    <string name="menu_new">New APN</string>
-    <!-- Error message for users that aren't allowed to modify Access Point Names settings [CHAR LIMIT=none] -->
-    <string name="apn_settings_not_available">Access Point Name settings are not available for this user</string>
-    <!-- Alert dialog title to copy information displayed in dialog to system clipboard. -->
-    <string name="copy_to_clipboard_dialog_title">Copy to clipboard?</string>
-    <!-- Alert dialog accept to copy information displayed in dialog to system clipboard. -->
-    <string name="copy_to_clipboard">Copy</string>
-    <!-- SIM name incoming message bubbles indicating which SIM the message was delivered to -->
-    <string name="incoming_sim_name_text">to <xliff:g id="sim_name">%s</xliff:g></string>
-
-    <!-- The title for general settings section in the settings activity  -->
-    <string name="general_settings">General</string>
-
-    <!-- The title for advanced settings section in the settings activity  -->
-    <string name="advanced_settings">Advanced</string>
-
-    <!-- The title for general settings activity  -->
-    <string name="general_settings_activity_title">General settings</string>
-
-    <!-- The title for advanced settings activity  -->
-    <string name="advanced_settings_activity_title">Advanced settings</string>
-
-    <!-- The title for sim_specific settings  -->
-    <string name="sim_specific_settings">\"<xliff:g id="sim_name">%s</xliff:g>\" SIM</string>
-
-    <!-- The group MMS choices in settings -->
-    <string name="disable_group_mms">Send individual SMS messages to all recipients. Only you will get any replies</string>
-    <string name="enable_group_mms">Send a single MMS to all recipients</string>
-
-    <!-- SIM number shown in the settings when the number is not known -->
-    <string name="sim_settings_unknown_number">Unknown number</string>
-
-    <!-- Notification title for incoming sms/mms message for secondary user -->
-    <string name="secondary_user_new_message_title">New message</string>
-    <!-- Ticker for notification  for incoming sms/mms message for secondary user -->
-    <string name="secondary_user_new_message_ticker">New message.</string>
-
-    <!-- Content description for the SIM selector button in the conversation -->
-    <string name="sim_selector_button_content_description">SIM selector</string>
-    <!-- Content description for the SIM selector button with selected sim name -->
-    <string name="sim_selector_button_content_description_with_selection"><xliff:g id="sim">%1$s</xliff:g> selected, SIM selector</string>
-
-    <!-- Custom TalkBack description for send button long click event when there's no SIM selector, i.e. edit subject -->
-    <string name="send_button_long_click_description_no_sim_selector">Edit subject</string>
-
-    <!-- Custom TalkBack description for send button long click event when there is SIM selector -->
-    <string name="send_button_long_click_description_with_sim_selector">Select SIM or edit subject</string>
-
-    <!-- Content description for the audio record view -->
-    <string name="audio_record_view_content_description">Tap &amp; hold to record audio</string>
-
-    <!-- Content description for new conversation button in desktop widget -->
-    <string name="widget_new_conversation_content_description">Start new conversation</string>
-    <!-- Content description for widget title -->
-    <string name="widget_title_content_description">Messaging</string>
-    <!-- Displayed name of the desktop widget that shows the list of conversations-->
-    <string name="widget_conversation_list_name">Messaging List</string>
-    <!-- Displayed name of the desktop widget that shows a single conversation-->
-    <string name="widget_conversation_name">Messaging</string>
-    <!-- Content description for new message button in desktop widget -->
-    <string name="widget_new_message_content_description">New message</string>
-    <!-- Content description for conversation list button in desktop widget -->
-    <string name="widget_conversation_list_content_description">Conversation list</string>
-    <!-- Shown when loading conversations in the widget -->
-    <string name="loading_conversations">Loading conversations</string>
-    <!-- Shown when loading messages in the widget -->
-    <string name="loading_messages">Loading messages</string>
-    <!-- Displayed at the end of the conversation list in the widget. Tapping on this will open bugle home activity. [CHAR LIMIT=35] -->
-    <string name="view_more_conversations">View more conversations</string>
-    <!-- Displayed at the beginning of the message list in the widget. Tapping on this will open bugle home activity. [CHAR LIMIT=35] -->
-    <string name="view_more_messages">View more messages</string>
-    <!-- Toast message telling the user a conversation has been deleted -->
-    <string name="conversation_deleted">Conversation deleted</string>
-    <!-- Displayed when user adds a new conversation widget. Tapping on the widget in this
-          mode will bring user to the conversation selection screen -->
-    <string name="tap_to_configure">Conversation deleted. Tap to show a different Messaging conversation</string>
-
-    <!-- Toast message telling the user that someone was blocked -->
-    <string name="update_destination_blocked">Blocked</string>
-    <!-- Toast message telling the user that someone was unblocked -->
-    <string name="update_destination_unblocked">Unblocked</string>
-    <string name="db_full">Storage space is low. Some data may be lost.</string>
-
-    <!-- Title for attachment chooser activity -->
-    <string name="attachment_chooser_activity_title">Select attachments</string>
-
-    <!-- Action menu title for confirming attachment selection in the attachment chooser -->
-    <string name="action_confirm_selection">Confirm selection</string>
-
-    <!-- Shows the number of selected attachments in the attachment chooser activity -->
-    <string name="attachment_chooser_selection"><xliff:g id="count">%d</xliff:g> selected</string>
-
-    <!-- The dialog message content for when the message is over the attachment limit when composing the message -->
-    <string name="attachment_limit_reached_dialog_message_when_composing">Please remove one or more attachments and try again.</string>
-
-    <!-- The dialog message content for when the message is over the attachment limit when sending the message -->
-    <string name="attachment_limit_reached_dialog_message_when_sending">You can try sending your message, but it might not be delivered unless you remove one or more attachments.</string>
-
-    <!-- The dialog message content for when the message is over the attachment limit when sending the message -->
-    <string name="video_attachment_limit_exceeded_when_sending">You can only send one video per message.  Please remove additional videos and try again.</string>
-
-    <!-- The dialog message content for when the message load failed -->
-    <string name="attachment_load_failed_dialog_message">Messaging failed to load attachment.</string>
-
-    <!-- The option to send the message anyway when the user is presented with the warning that the attachment size might be over limit -->
-    <string name="attachment_limit_reached_send_anyway">Send anyway</string>
-
-    <!-- Toast message telling the user a conversation with a recipient could not be found or created -->
-    <string name="conversation_creation_failure">Could not start conversation</string>
-
-    <!-- When converting html to text link urls are inlined.  This specifies how the link should be
-    displayed.  For example, a link "click here" which navigates to "www.google.com" would have
-    text="click here" and url="www.google.com", using the below format to create "click here (www.google.com)" -->
-    <string name="link_display_format"><xliff:g id="text">%1$s</xliff:g> (<xliff:g id="url">%2$s</xliff:g>)</string>
-
-    <!-- The accessibility text read when the sim chooser pops up to read the current selected sim -->
-    <string name="selected_sim_content_message"><xliff:g id="selected_sim">%s</xliff:g> selected</string>
-
-    <string name="work_directory_display_name">Work Profile contacts</string>
-
-    <!-- When making a call to emergency numbers, show this toast -->
-    <string name="disallow_emergency_call">Can\'t make a voice call to emergency services here.</string>
-</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
deleted file mode 100644
index 6f9be47..0000000
--- a/res/values/styles.xml
+++ /dev/null
@@ -1,650 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<resources>
-    <!--
-        Base application theme, dependent on API level. This theme is replaced
-        by BugleBaseTheme from res/values-vXX/styles.xml on newer devices.
-    -->
-    <style name="BugleBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
-        <!--
-            Theme customizations available in newer API levels can go in
-            res/values-vXX/styles.xml, while customizations related to
-            backward-compatibility can go here.
-        -->
-    </style>
-
-
-    <!-- Application theme. -->
-    <style name="BugleTheme" parent="BugleBaseTheme">
-        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
-         <item name="android:dropDownListViewStyle">@style/DropDownListViewStyle</item>
-         <item name="colorPrimary">@color/action_bar_background_color</item>
-         <item name="colorPrimaryDark">@color/action_bar_background_color_dark</item>
-         <item name="colorAccent">@color/action_bar_background_color</item>
-         <item name="android:textColorHighlight">@color/text_highlight_color</item>
-         <item name="actionBarStyle">@style/BugleActionBar</item>
-         <item name="apnPreferenceStyle">@style/ApnPreference</item>
-    </style>
-
-    <style name="BugleTheme.ConversationActivity"
-        parent="@style/BugleTheme.ConversationActivityBase">
-    </style>
-
-    <style name="BugleTheme.ConversationActivityBase" parent="BugleTheme">
-        <item name="android:windowBackground">@color/conversation_background</item>
-        <item name="windowActionBarOverlay">true</item>
-        <item name="android:fastScrollPreviewBackgroundLeft">@drawable/contacts_fastscroll_label_left</item>
-        <item name="android:fastScrollPreviewBackgroundRight">@drawable/contacts_fastscroll_label_right</item>
-    </style>
-
-    <style name="BugleTheme.DialogActivity" parent="@style/Theme.AppCompat.Light.Dialog">
-    </style>
-
-    <style name="BugleTheme.ConversationListActivity" parent="BugleTheme">
-        <item name="android:windowBackground">@android:color/background_light</item>
-    </style>
-
-    <style name="BugleTheme.ArchivedConversationListActivity" parent="BugleTheme.ConversationListActivity">
-        <item name="colorPrimary">@color/archived_conversation_action_bar_background_color</item>
-        <item name="colorPrimaryDark">@color/archived_conversation_action_bar_background_color_dark</item>
-    </style>
-
-    <style name="BugleTheme.SettingsActivity" parent="BugleTheme">
-        <item name="android:textSize">@dimen/settings_list_text_size</item>
-    </style>
-
-    <style name="Invisible" parent="BugleBaseTheme">
-        <item name="android:windowBackground">@null</item>
-        <item name="android:windowContentOverlay">@null</item>
-        <item name="android:windowIsTranslucent">true</item>
-        <item name="android:windowAnimationStyle">@null</item>
-        <item name="android:windowDisablePreview">true</item>
-        <item name="android:windowNoDisplay">true</item>
-    </style>
-
-    <style name="Translucent" parent="BugleBaseTheme">
-        <item name="android:windowBackground">@android:color/transparent</item>
-        <item name="android:windowContentOverlay">@null</item>
-        <item name="android:windowIsTranslucent">true</item>
-        <item name="android:windowNoTitle">true</item>
-        <item name="android:windowAnimationStyle">@null</item>
-        <item name="android:windowDisablePreview">true</item>
-    </style>
-
-    <style name="BugleActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
-        <item name="height">@dimen/action_bar_height</item>
-        <item name="displayOptions">showTitle</item>
-        <item name="titleTextStyle">@style/BugleActionBarTitleTextStyle</item>
-    </style>
-
-    <style name="BugleActionBarTitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
-      <item name="android:textColor">@color/action_bar_title_text_color</item>
-      <item name="android:textSize">@dimen/action_bar_text_size</item>
-      <item name="android:lines">1</item>
-    </style>
-
-    <style name="ConversationActionBarTitleTextStyle" parent="BugleActionBarTitleTextStyle">
-      <item name="android:background">?android:attr/selectableItemBackground</item>
-    </style>
-
-    <style name="BuglePhotoViewTheme" parent="PhotoViewTheme.Translucent">
-        <item name="actionModeShareDrawable">@drawable/ic_share_light</item>
-    </style>
-
-    <style name="ConversationMessageText">
-        <item name="android:background">@null</item>
-    </style>
-
-    <style name="ConversationMessage" parent="ConversationMessageText">
-        <item name="android:textSize">@dimen/conversation_message_text_size</item>
-        <item name="android:textColor">@color/message_text</item>
-    </style>
-
-    <style name="ConversationMessageStatus" parent="ConversationMessageText">
-        <item name="android:textSize">@dimen/conversation_status_text_size</item>
-    </style>
-
-    <style name="ConversationMessageTitle" parent="ConversationMessageText">
-        <item name="android:textSize">@dimen/conversation_title_text_size</item>
-        <item name="android:background">@null</item>
-        <item name="android:textColor">@color/message_title_text</item>
-    </style>
-
-    <style name="ConversationMessageInfo" parent="ConversationMessageText">
-        <item name="android:textSize">@dimen/conversation_info_text_size</item>
-        <item name="android:textColor">@color/message_info_text</item>
-    </style>
-
-    <style name="ConversationComposeSendText">
-        <item name="android:textColor">@color/compose_send_text_color</item>
-        <item name="android:singleLine">false</item>
-        <item name="android:textSize">@dimen/conversation_compose_send_text_size</item>
-        <item name="android:gravity">center_vertical</item>
-        <item name="android:fontFamily">sans-serif</item>
-        <item name="android:paddingLeft">@dimen/compose_message_text_box_padding_side</item>
-        <item name="android:paddingRight">@dimen/compose_message_text_box_padding_side</item>
-        <item name="android:minHeight">@dimen/conversation_message_contact_icon_size</item>
-        <item name="android:maxLines">4</item>
-        <item name="android:background">@null</item>
-        <item name="android:scrollHorizontally">false</item>
-        <item name="android:textCursorDrawable">@null</item>
-        <item name="android:inputType">textShortMessage|textAutoCorrect|textCapSentences|textMultiLine</item>
-    </style>
-
-    <style name="ConversationComposeSubjectText" parent="ConversationComposeSendText">
-        <item name="android:paddingLeft">18dp</item>
-        <item name="android:layout_marginLeft">@dimen/compose_message_subject_cancel_left_margin</item>
-    </style>
-
-    <style name="ContactListItem">
-        <item name="android:textSize">@dimen/contact_list_text_size</item>
-        <item name="android:textColor">@color/contact_list_text_primary</item>
-        <item name="android:background">@null</item>
-    </style>
-
-    <style name="ContactListItemDetail">
-        <item name="android:textSize">@dimen/contact_list_detail_text_size</item>
-        <item name="android:textColor">@color/contact_list_text_secondary</item>
-        <item name="android:background">@null</item>
-    </style>
-
-    <style name="ContactListItemDetailType" parent="ContactListItemDetail">
-        <item name="android:paddingLeft">12dp</item>
-    </style>
-
-    <style name="ContactListItemDrawableIndicator">
-        <item name="android:background">?android:attr/selectableItemBackground</item>
-    </style>
-
-    <style name="RecipientEditTextView">
-        <item name="android:textSize">@dimen/recipient_edit_text_size</item>
-        <item name="android:textColor">@color/compose_contact_text</item>
-        <item name="android:textColorHint">@color/compose_contact_faint_text</item>
-        <item name="android:fontFamily">sans-serif</item>
-        <item name="android:paddingLeft">4dp</item>
-        <item name="android:paddingRight">4dp</item>
-    </style>
-
-    <style name="PagerTabHeader">
-        <item name="android:textColor">@color/tab_text_color</item>
-        <item name="android:textSize">@dimen/pager_tab_header_text_size</item>
-        <item name="android:background">@null</item>
-        <item name="android:textStyle">bold</item>
-    </style>
-
-    <style name="ContactListAlphabetHeader">
-        <item name="android:textSize">@dimen/contact_list_alphabet_header_text_size</item>
-        <item name="android:textColor">@color/contact_list_alphabet_header</item>
-    </style>
-
-    <style name="AttachmentPreviewMoreItemsText">
-        <item name="android:textSize">@dimen/attachment_preview_more_items_text_size</item>
-        <item name="android:textColor">@android:color/white</item>
-    </style>
-
-    <style name="AudioPickerHintText">
-        <item name="android:textSize">@dimen/audio_picker_text_size</item>
-        <item name="android:textColor">@color/audio_picker_hint_text_color</item>
-    </style>
-
-    <style name="AudioPickerTimerText">
-        <item name="android:textSize">@dimen/audio_picker_text_size</item>
-        <item name="android:textColor">@color/audio_picker_timer_text_color</item>
-    </style>
-
-    <style name="AudioAttachmentTimerText">
-        <item name="android:textSize">@dimen/audio_attachment_text_size</item>
-        <item name="android:textColor">@color/audio_attachment_timer_text_color</item>
-        <item name="android:layout_marginRight">16dp</item>
-    </style>
-
-    <style name="AudioAttachmentViewStyle">
-        <item name="android:paddingRight">16dp</item>
-        <item name="android:paddingLeft">16dp</item>
-    </style>
-
-    <style name="ContactPickerHintText">
-        <item name="android:textSize">@dimen/contact_picker_text_size</item>
-        <item name="android:textColor">@color/contact_picker_hint_text_color</item>
-    </style>
-
-    <style name="VcardAttachmentSingleStyle">
-        <item name="android:paddingRight">@dimen/message_text_left_right_padding</item>
-        <item name="android:paddingLeft">@dimen/message_text_left_right_padding</item>
-    </style>
-
-    <style name="MessageVcardAttachmentStyle">
-        <item name="android:paddingRight">@dimen/message_text_left_right_padding</item>
-        <item name="android:paddingLeft">@dimen/message_text_left_right_padding</item>
-    </style>
-
-    <style name="NotificationSenderText">
-        <item name="android:textColor">@color/notification_sender_text</item>
-    </style>
-
-    <style name="NotificationSecondaryText">
-        <item name="android:textColor">@color/notification_secondary_text</item>
-    </style>
-
-    <style name="NotificationTertiaryText">
-        <item name="android:textColor">@color/notification_tertiary_text</item>
-    </style>
-
-    <style name="NotificationSubjectText">
-        <item name="android:textColor">@color/notification_subject_color</item>
-    </style>
-
-    <!-- Styles to support RTL for pre API 17 -->
-    <style name="AttachmentPreviewCloseButtonStyle">
-        <item name="android:gravity">left</item>
-    </style>
-
-    <style name="CameraChooserFrameStyle">
-        <item name="android:paddingLeft">16dp</item>
-    </style>
-
-    <style name="ComposeMessageViewAttachMediaButtonStyle">
-        <item name="android:paddingLeft">@dimen/compose_message_attachment_padding_sides</item>
-        <item name="android:paddingRight">@dimen/compose_message_attachment_padding_sides</item>
-        <item name="android:background">?android:attr/selectableItemBackground</item>
-    </style>
-
-    <style name="ContactListItemViewStyle">
-        <item name="android:paddingLeft">16dp</item>
-    </style>
-
-    <style name="ContactListItemLinearLayoutStyle">
-        <item name="android:paddingLeft">12dp</item>
-        <item name="android:paddingRight">24dp</item>
-    </style>
-
-    <style name="ConversationListItemViewPaddingStyle">
-        <item name="android:paddingLeft">@dimen/conversation_list_item_view_padding</item>
-        <item name="android:paddingRight">@dimen/conversation_list_item_view_padding</item>
-    </style>
-
-    <style name="ConversationListItemViewTextStyle">
-        <item name="android:includeFontPadding">false</item>
-        <item name="android:textSize">14sp</item>
-        <item name="android:background">@null</item>
-        <item name="android:textColor">@color/conversation_list_details</item>
-    </style>
-
-    <style name="ConversationListItemViewConversationNameStyle" parent="ConversationListItemViewTextStyle">
-        <item name="android:textSize">16sp</item>
-        <item name="android:textColor">@color/conversation_list_name</item>
-    </style>
-
-    <style name="ConversationListNotificationBellPaddingStyle">
-        <item name="android:paddingRight">@dimen/conversation_list_notification_bell_padding</item>
-    </style>
-
-    <style name="ComposeMessageViewFrameLayoutStyle">
-        <item name="android:paddingRight">@dimen/compose_message_send_button_padding_right</item>
-    </style>
-
-    <style name="ConversationListFragmentStartNewButtonStyle">
-        <item name="android:layout_marginRight">@dimen/fab_left_right_margin</item>
-    </style>
-
-    <style name="GalleryGridItemViewCheckBoxStyle">
-        <item name="android:paddingRight">22dp</item>
-    </style>
-
-    <style name="AttachmentPreviewAttachmentStyle">
-        <item name="android:layout_marginLeft">10dp</item>
-    </style>
-
-    <style name="AudioAttachmentViewPlayPauseButtonStyle">
-        <item name="android:layout_marginRight">16dp</item>
-    </style>
-
-    <style name="ComposeMessageViewDraftViewStyle">
-        <item name="android:layout_marginLeft">53dp</item>
-        <item name="android:layout_marginRight">63dp</item>
-    </style>
-
-    <style name="ConversationMessageViewStyle">
-        <item name="android:paddingLeft">12dp</item>
-        <item name="android:paddingRight">12dp</item>
-    </style>
-
-    <style name="SubjectViewStyle">
-        <item name="android:paddingLeft">@dimen/compose_message_subject_left_padding</item>
-        <item name="android:paddingRight">@dimen/compose_message_subject_right_padding</item>
-    </style>
-
-    <style name="ParticipantListItem">
-        <item name="android:textSize">@dimen/participant_list_text_size</item>
-        <item name="android:textColor">@color/participant_list_text_primary</item>
-        <item name="android:background">@null</item>
-        <item name="android:layout_gravity">left|center_vertical</item>
-    </style>
-
-    <style name="AddContactConfirmationTextStyle" parent="ParticipantListItem">
-        <item name="android:paddingLeft">12dp</item>
-        <item name="android:paddingRight">24dp</item>
-    </style>
-
-    <style name="CopyContactDialogTextStyle" parent="ParticipantListItem">
-        <item name="android:paddingLeft">@dimen/copy_contact_dialog_left_padding</item>
-        <item name="android:paddingRight">@dimen/copy_contact_dialog_right_padding</item>
-    </style>
-
-    <style name="ParticipantListItemDetail">
-        <item name="android:textSize">@dimen/participant_list_detail_text_size</item>
-        <item name="android:textColor">@color/participant_list_text_secondary</item>
-        <item name="android:background">@null</item>
-    </style>
-
-    <style name="PeopleListItemViewStyle">
-        <item name="android:paddingLeft">16dp</item>
-    </style>
-
-    <style name="PeopleAndOptionsItemStyle">
-        <item name="android:paddingRight">16dp</item>
-        <item name="android:paddingLeft">16dp</item>
-    </style>
-
-    <style name="PeopleAndOptionsSectionHeader">
-        <item name="android:textSize">@dimen/people_and_options_header_text_size</item>
-        <item name="android:textColor">@color/people_and_options_header_text</item>
-        <item name="android:background">@null</item>
-    </style>
-
-    <style name="DropDownListViewStyle" parent="Widget.AppCompat.ListView.DropDown">
-      <item name="android:dividerHeight">0dp</item>
-    </style>
-
-    <style name="ComposeMessageViewMessageBodySizeStyle">
-        <item name="android:textColor">@color/message_body_size_text_color</item>
-        <item name="android:textSize">@dimen/message_body_size_text_size</item>
-        <item name="android:fontFamily">sans-serif</item>
-        <item name="android:layout_gravity">right|center_vertical</item>
-        <item name="android:paddingRight">@dimen/compose_message_text_box_padding_side</item>
-    </style>
-
-    <style name="MmsIndicatorStyle">
-        <item name="android:textColor">@color/mms_indicator_color</item>
-        <item name="android:textSize">@dimen/mms_indicator_size</item>
-        <item name="android:fontFamily">sans-serif</item>
-        <item name="android:background">@null</item>
-        <item name="android:paddingRight">@dimen/compose_message_send_button_padding_right</item>
-        <item name="android:paddingTop">@dimen/compose_message_mms_indicator_padding_top</item>
-        <item name="android:layout_gravity">center_horizontal</item>
-    </style>
-
-    <style name="ListEmptyText">
-        <item name="android:textSize">@dimen/list_empty_text_size</item>
-        <item name="android:textColor">@color/list_empty_text</item>
-    </style>
-
-    <style name="LowStorageActionItemStyle">
-        <item name="android:textColor">@color/low_storage_action_item_color</item>
-        <item name="android:textSize">@dimen/low_storage_action_item_text_size</item>
-        <item name="android:singleLine">false</item>
-    </style>
-
-    <style name="SnackBarMessageWrapper">
-        <item name="android:layout_marginLeft">@dimen/snack_bar_left_right_margin</item>
-        <item name="android:layout_marginRight">0dp</item>
-    </style>
-
-    <style name="SnackBarText">
-        <item name="android:textColor">@android:color/white</item>
-        <item name="android:textSize">14sp</item>
-        <item name="android:fontFamily">sans-serif</item>
-    </style>
-
-    <style name="SmsDeliverdBadge">
-        <item name="android:layout_marginLeft">4dp</item>
-    </style>
-
-    <style name="appTitleStyle">
-        <item name="android:textColor">@android:color/black</item>
-        <item name="android:textSize">20sp</item>
-        <item name="android:ellipsize">end</item>
-    </style>
-
-    <style name="appVersionStyle">
-        <item name="android:textColor">@android:color/black</item>
-        <item name="android:textSize">14sp</item>
-        <item name="android:ellipsize">end</item>
-    </style>
-
-    <style name="appCopyrightStyle">
-        <item name="android:textColor">@android:color/black</item>
-        <item name="android:textSize">12sp</item>
-        <item name="android:ellipsize">end</item>
-    </style>
-
-    <style name="ChipDeleteIconStyle">
-        <item name="android:paddingLeft">8dp</item>
-    </style>
-
-    <style name="ChipIconStyle">
-        <item name="android:layout_marginRight">12dp</item>
-    </style>
-
-    <style name="SimSelectorItem">
-        <item name="android:textSize">@dimen/sim_selector_text_size</item>
-        <item name="android:textColor">@color/sim_selector_text_primary</item>
-        <item name="android:background">@null</item>
-        <item name="android:layout_gravity">right</item>
-    </style>
-
-    <style name="SimSelectorItemDetail">
-        <item name="android:textSize">@dimen/sim_selector_detail_text_size</item>
-        <item name="android:textColor">@color/sim_selector_text_secondary</item>
-        <item name="android:background">@null</item>
-        <item name="android:layout_gravity">right</item>
-    </style>
-
-    <style name="SimSelectorItemLinearLayoutStyle">
-        <item name="android:paddingRight">12dp</item>
-    </style>
-
-    <style name="MessageSimIndicator">
-        <item name="android:textSize">@dimen/conversation_status_text_size</item>
-        <item name="android:layout_marginLeft">4dp</item>
-    </style>
-
-    <style name="ColorAccentBlueOverrideStyle">
-        <item name="colorAccent">@color/action_bar_background_color</item>
-    </style>
-
-    <style name="ColorAccentGrayOverrideStyle">
-        <item name="colorAccent">@color/search_view_text_cursor</item>
-    </style>
-
-    <style name="ApnPreference">
-        <item name="android:layout">@layout/apn_preference_layout</item>
-    </style>
-
-    <style name="ApnPreferenceLayoutStyle">
-        <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingStart</item>
-        <item name="android:paddingRight">?android:attr/listPreferredItemPaddingEnd</item>
-    </style>
-
-    <style name="SettingsListItem">
-        <item name="android:textSize">@dimen/settings_list_text_size</item>
-        <item name="android:textColor">@color/settings_list_text_primary</item>
-        <item name="android:background">@null</item>
-    </style>
-
-    <style name="SettingsListItemDetail">
-        <item name="android:textSize">@dimen/settings_list_detail_text_size</item>
-        <item name="android:textColor">@color/settings_list_text_secondary</item>
-        <item name="android:background">@null</item>
-    </style>
-
-    <style name="GroupMmsSettingItem">
-        <item name="android:textSize">@dimen/group_mms_setting_text_size</item>
-        <item name="android:textColor">@color/group_mms_setting_text_color</item>
-        <item name="android:layout_marginLeft">20dp</item>
-        <item name="android:layout_marginRight">20dp</item>
-        <item name="android:layout_marginTop">16dp</item>
-        <item name="android:paddingLeft">10dp</item>
-        <item name="android:paddingRight">10dp</item>
-        <item name="android:background">?android:attr/selectableItemBackground</item>
-    </style>
-
-    <style name="DebugMmsConfigItemStyle">
-        <item name="android:paddingLeft">16dp</item>
-        <item name="android:paddingRight">16dp</item>
-    </style>
-
-    <style name="WidgetTitle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
-        <item name="android:textColor">@color/action_bar_title_text_color</item>
-        <item name="android:singleLine">true</item>
-        <item name="android:layout_marginEnd">8dp</item>
-    </style>
-
-    <style name="WidgetConversationTitle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
-        <item name="android:textColor">@color/widget_conversation_title_color</item>
-        <item name="android:singleLine">true</item>
-        <item name="android:layout_marginRight">8dp</item>
-        <item name="android:textSize">@dimen/widget_conversation_title_size</item>
-        <item name="android:shadowColor">#000000</item>
-        <item name="android:shadowDx">0</item>
-        <item name="android:shadowDy">2</item>
-        <item name="android:shadowRadius">1</item>
-    </style>
-
-    <style name="WidgetHeaderImage">
-        <item name="android:paddingStart">4dip</item>
-    </style>
-
-    <style name="WidgetConversationListItemAvatar">
-        <item name="android:layout_marginEnd">12dp</item>
-        <item name="android:layout_marginStart">8dp</item>
-        <item name="android:layout_alignParentStart">true</item>
-    </style>
-
-    <style name="WidgetConversationItemAvatarIncoming">
-        <item name="android:layout_marginStart">8dp</item>
-        <item name="android:layout_alignParentStart">true</item>
-    </style>
-
-    <style name="WidgetConversationItemAvatarOutgoing">
-        <item name="android:layout_marginRight">8dp</item>
-        <item name="android:layout_alignParentRight">true</item>
-    </style>
-
-    <style name="WidgetConversationItemBodyIncoming">
-        <item name="android:layout_toRightOf">@id/avatarFrame</item>
-    </style>
-
-    <style name="WidgetConversationItemBodyOutgoing">
-        <item name="android:layout_toLeftOf">@id/avatarFrame</item>
-    </style>
-
-    <style name="WidgetConversationItemIncoming">
-        <item name="android:layout_marginRight">5dp</item>
-        <item name="android:layout_alignParentLeft">true</item>
-        <item name="android:layout_toLeftOf">@id/date</item>
-    </style>
-
-    <style name="WidgetConversationItemIncomingAvatarShadow">
-        <item name="android:layout_marginLeft">4dp</item>
-    </style>
-
-    <style name="WidgetConversationItemOutgoingAvatarShadow">
-        <item name="android:layout_marginLeft">-4dp</item>
-    </style>
-
-    <style name="WidgetConversationAppIcon" parent="WidgetHeaderImage">
-        <item name="android:layout_marginLeft">-20dp</item>
-    </style>
-
-    <style name="WidgetConversationItemDate">
-        <item name="android:layout_marginRight">8dp</item>
-        <item name="android:layout_marginLeft">5dp</item>
-        <item name="android:layout_alignParentLeft">true</item>
-    </style>
-
-    <style name="WidgetConversationItemFailed">
-        <item name="android:layout_gravity">bottom|right</item>
-    </style>
-
-    <style name="WidgetConversationItemAttachment">
-        <item name="android:layout_gravity">bottom|right</item>
-    </style>
-
-    <style name="WidgetConversationItemWidget">
-        <item name="android:layout_marginRight">8dp</item>
-        <item name="android:layout_marginLeft">5dp</item>
-        <item name="android:layout_alignParentLeft">true</item>
-    </style>
-
-    <style name="WidgetConversationListItemBody">
-        <item name="android:layout_toRightOf">@id/avatarFrame</item>
-    </style>
-
-    <style name="WidgetConversationListItemFrom">
-        <item name="android:layout_marginRight">5dp</item>
-        <item name="android:layout_alignParentLeft">true</item>
-    </style>
-
-    <style name="WidgetConversationListItemDate">
-        <item name="android:layout_marginRight">8dp</item>
-        <item name="android:layout_marginLeft">5dp</item>
-        <item name="android:layout_gravity">right</item>
-    </style>
-
-    <style name="WidgetLoading">
-        <item name="android:layout_marginLeft">16dp</item>
-    </style>
-
-    <style name="WidgetConversationListItemStyle">
-        <item name="android:layout_height">80dp</item>
-    </style>
-
-    <style name="AttachmentGridItemViewCheckBoxStyle">
-        <item name="android:paddingRight">4dp</item>
-    </style>
-
-    <style name="PromoScreenTextStyle">
-        <item name="android:paddingLeft">40dp</item>
-        <item name="android:paddingRight">40dp</item>
-        <item name="android:textSize">16sp</item>
-        <item name="android:textColor">@android:color/white</item>
-        <item name="android:fontFamily">roboto-regular</item>
-    </style>
-    <style name="PromoScreenTextStyle.CenterAligned">
-        <item name="android:textAlignment">center</item>
-    </style>
-    <style name="PromoScreenButtonStyle">
-        <item name="android:textSize">14sp</item>
-        <item name="android:fontFamily">roboto-medium</item>
-        <item name="android:textAllCaps">true</item>
-        <item name="android:textStyle">bold</item>
-        <item name="android:background">?android:attr/selectableItemBackground</item>
-        <item name="android:textColor">@android:color/white</item>
-        <item name="android:gravity">center</item>
-    </style>
-    <style name="DirectoryHeaderStyle">
-        <item name="android:paddingLeft">@dimen/directory_header_padding_start</item>
-        <item name="android:paddingStart">@dimen/directory_header_padding_start</item>
-        <item name="android:paddingRight">@dimen/directory_header_padding_end</item>
-        <item name="android:paddingEnd">@dimen/directory_header_padding_end</item>
-        <item name="android:paddingTop">@dimen/directory_header_padding_top</item>
-        <item name="android:paddingBottom">@dimen/directory_header_padding_bottom</item>
-        <item name="android:textSize">@dimen/directory_header_text_size</item>
-        <item name="android:textStyle">bold</item>
-    </style>
-</resources>
diff --git a/res/values/versions.xml b/res/values/versions.xml
deleted file mode 100644
index 14c6b47..0000000
--- a/res/values/versions.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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>
-    <!-- DB version -->
-    <string name="database_version" translatable="false">2</string>
-
-    <!-- Version for shared preferences. This is used for handling prefs migration when old pref
-         keys are moved or renamed. You don't need to bump up the version number if you are just
-         adding/removing preferences -->
-    <string name="pref_version" translatable="false">1</string>
-</resources>
diff --git a/res/xml-mcc204-mnc04/mms_config.xml b/res/xml-mcc204-mnc04/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc204-mnc04/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc208-mnc01/mms_config.xml b/res/xml-mcc208-mnc01/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc208-mnc01/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc208-mnc10/mms_config.xml b/res/xml-mcc208-mnc10/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc208-mnc10/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc208-mnc15/mms_config.xml b/res/xml-mcc208-mnc15/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc208-mnc15/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc208-mnc20/mms_config.xml b/res/xml-mcc208-mnc20/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc208-mnc20/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc208-mnc26/mms_config.xml b/res/xml-mcc208-mnc26/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc208-mnc26/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc214-mnc01/mms_config.xml b/res/xml-mcc214-mnc01/mms_config.xml
deleted file mode 100644
index d6fad05..0000000
--- a/res/xml-mcc214-mnc01/mms_config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - enable force 7 bit encoding
-        version 3 - removing v2 changes and move to correct location
--->
-
-<mms_config version="2">
-    <!-- Disable SMS to MMS conversion for multiple recipient SMS -->
-    <bool name="enableGroupMms">false</bool>
-</mms_config>
diff --git a/res/xml-mcc214-mnc03/mms_config.xml b/res/xml-mcc214-mnc03/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc214-mnc03/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc214-mnc07/mms_config.xml b/res/xml-mcc214-mnc07/mms_config.xml
deleted file mode 100644
index a90a26d..0000000
--- a/res/xml-mcc214-mnc07/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">512000</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc218-mnc05/mms_config.xml b/res/xml-mcc218-mnc05/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc218-mnc05/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc222-mnc01/mms_config.xml b/res/xml-mcc222-mnc01/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc222-mnc01/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc222-mnc08/mms_config.xml b/res/xml-mcc222-mnc08/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc222-mnc08/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc234-mnc10/mms_config.xml b/res/xml-mcc234-mnc10/mms_config.xml
deleted file mode 100755
index 9f89f96..0000000
--- a/res/xml-mcc234-mnc10/mms_config.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
--->
-
-<mms_config version="1">
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">10</int>
-</mms_config>
diff --git a/res/xml-mcc234-mnc11 b/res/xml-mcc234-mnc11
deleted file mode 120000
index e29c9d3..0000000
--- a/res/xml-mcc234-mnc11
+++ /dev/null
@@ -1 +0,0 @@
-xml-mcc234-mnc10
\ No newline at end of file
diff --git a/res/xml-mcc234-mnc15/mms_config.xml b/res/xml-mcc234-mnc15/mms_config.xml
deleted file mode 100755
index 9f89f96..0000000
--- a/res/xml-mcc234-mnc15/mms_config.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
--->
-
-<mms_config version="1">
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">10</int>
-</mms_config>
diff --git a/res/xml-mcc238-mnc02/mms_config.xml b/res/xml-mcc238-mnc02/mms_config.xml
deleted file mode 100644
index 6a27809..0000000
--- a/res/xml-mcc238-mnc02/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">2097152</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc240-mnc01/mms_config.xml b/res/xml-mcc240-mnc01/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc240-mnc01/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc240-mnc04/mms_config.xml b/res/xml-mcc240-mnc04/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc240-mnc04/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc240-mnc08/mms_config.xml b/res/xml-mcc240-mnc08/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc240-mnc08/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc240-mnc24/mms_config.xml b/res/xml-mcc240-mnc24/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc240-mnc24/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc242-mnc01/mms_config.xml b/res/xml-mcc242-mnc01/mms_config.xml
deleted file mode 100644
index 6a27809..0000000
--- a/res/xml-mcc242-mnc01/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">2097152</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc242-mnc02/mms_config.xml b/res/xml-mcc242-mnc02/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc242-mnc02/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc262-mnc07/mms_config.xml b/res/xml-mcc262-mnc07/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc262-mnc07/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc274-mnc02/mms_config.xml b/res/xml-mcc274-mnc02/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc274-mnc02/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc274-mnc03/mms_config.xml b/res/xml-mcc274-mnc03/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc274-mnc03/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc286-mnc01/mms_config.xml b/res/xml-mcc286-mnc01/mms_config.xml
deleted file mode 100644
index a90a26d..0000000
--- a/res/xml-mcc286-mnc01/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">512000</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc286-mnc03/mms_config.xml b/res/xml-mcc286-mnc03/mms_config.xml
deleted file mode 100644
index a90a26d..0000000
--- a/res/xml-mcc286-mnc03/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">512000</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc294-mnc01/mms_config.xml b/res/xml-mcc294-mnc01/mms_config.xml
deleted file mode 100644
index 03ff16c..0000000
--- a/res/xml-mcc294-mnc01/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">102400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc294-mnc02/mms_config.xml b/res/xml-mcc294-mnc02/mms_config.xml
deleted file mode 100644
index 51af512..0000000
--- a/res/xml-mcc294-mnc02/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">131072</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc294-mnc03/mms_config.xml b/res/xml-mcc294-mnc03/mms_config.xml
deleted file mode 100644
index 208a5a2..0000000
--- a/res/xml-mcc294-mnc03/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">256000</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc220/mms_config.xml b/res/xml-mcc302-mnc220/mms_config.xml
deleted file mode 100644
index 4267322..0000000
--- a/res/xml-mcc302-mnc220/mms_config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-    to indicate no limit. -->
-    <int name="recipientLimit">10</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-    will be converted into a single mms message. For example, if the mms_config.xml file
-    specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-    message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">5</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc221/mms_config.xml b/res/xml-mcc302-mnc221/mms_config.xml
deleted file mode 100644
index 4267322..0000000
--- a/res/xml-mcc302-mnc221/mms_config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-    to indicate no limit. -->
-    <int name="recipientLimit">10</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-    will be converted into a single mms message. For example, if the mms_config.xml file
-    specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-    message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">5</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc270/mms_config.xml b/res/xml-mcc302-mnc270/mms_config.xml
deleted file mode 100644
index 7f92daa..0000000
--- a/res/xml-mcc302-mnc270/mms_config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc290/mms_config.xml b/res/xml-mcc302-mnc290/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc302-mnc290/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc320/mms_config.xml b/res/xml-mcc302-mnc320/mms_config.xml
deleted file mode 100644
index 0dc7956..0000000
--- a/res/xml-mcc302-mnc320/mms_config.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="1">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc370/mms_config.xml b/res/xml-mcc302-mnc370/mms_config.xml
deleted file mode 100644
index 7f92daa..0000000
--- a/res/xml-mcc302-mnc370/mms_config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc490/mms_config.xml b/res/xml-mcc302-mnc490/mms_config.xml
deleted file mode 100644
index 7f92daa..0000000
--- a/res/xml-mcc302-mnc490/mms_config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc500/mms_config.xml b/res/xml-mcc302-mnc500/mms_config.xml
deleted file mode 100644
index 0216774..0000000
--- a/res/xml-mcc302-mnc500/mms_config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">3072000</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc510/mms_config.xml b/res/xml-mcc302-mnc510/mms_config.xml
deleted file mode 100644
index 0216774..0000000
--- a/res/xml-mcc302-mnc510/mms_config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">3072000</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc520/mms_config.xml b/res/xml-mcc302-mnc520/mms_config.xml
deleted file mode 100644
index 21b15bb..0000000
--- a/res/xml-mcc302-mnc520/mms_config.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="1">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">3072000</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc610/mms_config.xml b/res/xml-mcc302-mnc610/mms_config.xml
deleted file mode 100644
index 7c0183e..0000000
--- a/res/xml-mcc302-mnc610/mms_config.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">8</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- Email Gateway Number -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <!-- Disable SMS to MMS conversion for multiple recipient SMS -->
-    <bool name="enableGroupMms">false</bool>
-
-</mms_config>
diff --git a/res/xml-mcc302-mnc660/mms_config.xml b/res/xml-mcc302-mnc660/mms_config.xml
deleted file mode 100644
index 7f92daa..0000000
--- a/res/xml-mcc302-mnc660/mms_config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc720/mms_config.xml b/res/xml-mcc302-mnc720/mms_config.xml
deleted file mode 100644
index 7f92daa..0000000
--- a/res/xml-mcc302-mnc720/mms_config.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-</mms_config>
diff --git a/res/xml-mcc302-mnc780/mms_config.xml b/res/xml-mcc302-mnc780/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc302-mnc780/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc004/mms_config.xml b/res/xml-mcc310-mnc004/mms_config.xml
deleted file mode 100644
index 346218b..0000000
--- a/res/xml-mcc310-mnc004/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1258291</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">Profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <!-- enable alias -->
-    <bool name="aliasEnabled">true</bool>
-
-    <!-- alias rule: min chars -->
-    <int name="aliasMinChars">2</int>
-
-    <!-- alias rule: max chars -->
-    <int name="aliasMaxChars">48</int>
-
-    <!-- disable the option to attach an audio attachment to an Mms message. Currently Verizon
-         doesn't support OGG files and the only audio picker in the system allowed for picking
-         ringtones. All of our ringtones are OGG files so it doesn't make sense to allow a user
-         to select an audio file that eventually can't be handled. Therefore, the ability
-         to select a ringtone to send is disabled. -->
-    <bool name="allowAttachAudio">false</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">7</int>
-</mms_config>
-
diff --git a/res/xml-mcc310-mnc005/mms_config.xml b/res/xml-mcc310-mnc005/mms_config.xml
deleted file mode 100644
index 346218b..0000000
--- a/res/xml-mcc310-mnc005/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1258291</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">Profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <!-- enable alias -->
-    <bool name="aliasEnabled">true</bool>
-
-    <!-- alias rule: min chars -->
-    <int name="aliasMinChars">2</int>
-
-    <!-- alias rule: max chars -->
-    <int name="aliasMaxChars">48</int>
-
-    <!-- disable the option to attach an audio attachment to an Mms message. Currently Verizon
-         doesn't support OGG files and the only audio picker in the system allowed for picking
-         ringtones. All of our ringtones are OGG files so it doesn't make sense to allow a user
-         to select an audio file that eventually can't be handled. Therefore, the ability
-         to select a ringtone to send is disabled. -->
-    <bool name="allowAttachAudio">false</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">7</int>
-</mms_config>
-
diff --git a/res/xml-mcc310-mnc010/mms_config.xml b/res/xml-mcc310-mnc010/mms_config.xml
deleted file mode 100644
index 571bc07..0000000
--- a/res/xml-mcc310-mnc010/mms_config.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- If this is true, The text message over 160 characters will be sent in separate,
-         independent messages after split into 160 character parts -->
-    <bool name="sendMultipartSmsAsSeparateMessages">true</bool>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">false</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <bool name="enableMMSReadReports">false</bool>
-
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <bool name="enableMMSDeliveryReports">false</bool>
-
-    <!-- If true, need to read content_disposition field of an MMS part -->
-    <bool name="supportMmsContentDisposition">false</bool>
-</mms_config>
-
diff --git a/res/xml-mcc310-mnc026/mms_config.xml b/res/xml-mcc310-mnc026/mms_config.xml
deleted file mode 100644
index 91481f9..0000000
--- a/res/xml-mcc310-mnc026/mms_config.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
--->
-
-<!-- T-Mobile U.S. mcc=310, mnc=026 -->
-
-<mms_config version="3">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc040/mms_config.xml b/res/xml-mcc310-mnc040/mms_config.xml
deleted file mode 100644
index 9622857..0000000
--- a/res/xml-mcc310-mnc040/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc310-mnc070/mms_config.xml b/res/xml-mcc310-mnc070/mms_config.xml
deleted file mode 100755
index e9404e8..0000000
--- a/res/xml-mcc310-mnc070/mms_config.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<!-- AT&T U.S. mcc=310, mnc=070 -->
-
-<mms_config version="1">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-     to indicate no limit. -->
-    <int name="recipientLimit">10</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc090/mms_config.xml b/res/xml-mcc310-mnc090/mms_config.xml
deleted file mode 100755
index 0c8f8de..0000000
--- a/res/xml-mcc310-mnc090/mms_config.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
--->
-
-<!-- AT&T U.S. mcc=310, mnc=090 -->
-
-<mms_config version="3">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc120/mms_config.xml b/res/xml-mcc310-mnc120/mms_config.xml
deleted file mode 100644
index 8c1ae11..0000000
--- a/res/xml-mcc310-mnc120/mms_config.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">40</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">false</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- Email Gateway Number -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="enableMMSReadReports">false</bool>
-
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <bool name="enableMMSDeliveryReports">false</bool>
-
-    <!-- Reference for additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">X-MDN: ##LINE1##|Proxy-Authorization: Basic ##NAI##</string>
-
-    <!-- Suffix to the NAI header (encoded together with base64) -->
-    <string name="naiSuffix">:pcs</string>
-
-    <!-- If true, need to read content_disposition field of an MMS part -->
-    <bool name="supportMmsContentDisposition">false</bool>
-</mms_config>
diff --git a/res/xml-mcc310-mnc130/mms_config.xml b/res/xml-mcc310-mnc130/mms_config.xml
deleted file mode 100644
index 9622857..0000000
--- a/res/xml-mcc310-mnc130/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc310-mnc150/mms_config.xml b/res/xml-mcc310-mnc150/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc310-mnc150/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc170/mms_config.xml b/res/xml-mcc310-mnc170/mms_config.xml
deleted file mode 100644
index 6705cbc..0000000
--- a/res/xml-mcc310-mnc170/mms_config.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-
-<!-- T-Mobile U.S. mcc=310, mnc=170 -->
-
-<mms_config version="3">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-     to indicate no limit. -->
-    <int name="recipientLimit">10</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc260/mms_config.xml b/res/xml-mcc310-mnc260/mms_config.xml
deleted file mode 100644
index 9bf9d70..0000000
--- a/res/xml-mcc310-mnc260/mms_config.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
--->
-
-<!-- T-Mobile U.S. mcc=310, mnc=260 -->
-
-<mms_config version="3">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc360/mms_config.xml b/res/xml-mcc310-mnc360/mms_config.xml
deleted file mode 100644
index eb8da80..0000000
--- a/res/xml-mcc310-mnc360/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1228800</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc310-mnc380/mms_config.xml b/res/xml-mcc310-mnc380/mms_config.xml
deleted file mode 100755
index 0ea83d1..0000000
--- a/res/xml-mcc310-mnc380/mms_config.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
--->
-<!-- AT&T U.S. mcc=310, mnc=380 -->
-
-<mms_config version="3">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-     to indicate no limit. -->
-    <int name="recipientLimit">10</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc410/mms_config.xml b/res/xml-mcc310-mnc410/mms_config.xml
deleted file mode 100755
index 4e42f3a..0000000
--- a/res/xml-mcc310-mnc410/mms_config.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-
-<!-- AT&T U.S. mcc=310, mnc=410 -->
-
-<mms_config version="3">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-     to indicate no limit. -->
-    <int name="recipientLimit">10</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc420/mms_config.xml b/res/xml-mcc310-mnc420/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc310-mnc420/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc450/mms_config.xml b/res/xml-mcc310-mnc450/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc310-mnc450/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc490/mms_config.xml b/res/xml-mcc310-mnc490/mms_config.xml
deleted file mode 100644
index 06da531..0000000
--- a/res/xml-mcc310-mnc490/mms_config.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
--->
-
-<!-- T-Mobile U.S. mcc=310, mnc=490 -->
-
-<mms_config version="3">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc560/mms_config.xml b/res/xml-mcc310-mnc560/mms_config.xml
deleted file mode 100755
index a12d640..0000000
--- a/res/xml-mcc310-mnc560/mms_config.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-
-<!-- AT&T U.S. mcc=310, mnc=560 -->
-
-<mms_config version="3">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-     to indicate no limit. -->
-    <int name="recipientLimit">10</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc580/mms_config.xml b/res/xml-mcc310-mnc580/mms_config.xml
deleted file mode 100644
index eb8da80..0000000
--- a/res/xml-mcc310-mnc580/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1228800</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc310-mnc600/mms_config.xml b/res/xml-mcc310-mnc600/mms_config.xml
deleted file mode 100644
index f76c945..0000000
--- a/res/xml-mcc310-mnc600/mms_config.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-<!-- MCC:310 MNC:600 - New Cell Inc. dba Cellcom -->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">8388608</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Flag indicating whether MMS Delivery Reports UI option should be shown -->
-    <bool name="enableMMSDeliveryReports">false</bool>
-
-    <!-- Reference for additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc310-mnc680/mms_config.xml b/res/xml-mcc310-mnc680/mms_config.xml
deleted file mode 100755
index b42fa02..0000000
--- a/res/xml-mcc310-mnc680/mms_config.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
--->
-
-<!-- AT&T U.S. mcc=310, mnc=680 -->
-
-<mms_config version="3">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-     to indicate no limit. -->
-    <int name="recipientLimit">10</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc750/mms_config.xml b/res/xml-mcc310-mnc750/mms_config.xml
deleted file mode 100644
index eb8da80..0000000
--- a/res/xml-mcc310-mnc750/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1228800</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc310-mnc770/mms_config.xml b/res/xml-mcc310-mnc770/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc310-mnc770/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc310-mnc920/mms_config.xml b/res/xml-mcc310-mnc920/mms_config.xml
deleted file mode 100644
index 4319cb0..0000000
--- a/res/xml-mcc310-mnc920/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1258291</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc310-mnc980/mms_config.xml b/res/xml-mcc310-mnc980/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc310-mnc980/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc311-mnc012/mms_config.xml b/res/xml-mcc311-mnc012/mms_config.xml
deleted file mode 100644
index 346218b..0000000
--- a/res/xml-mcc311-mnc012/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1258291</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">Profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <!-- enable alias -->
-    <bool name="aliasEnabled">true</bool>
-
-    <!-- alias rule: min chars -->
-    <int name="aliasMinChars">2</int>
-
-    <!-- alias rule: max chars -->
-    <int name="aliasMaxChars">48</int>
-
-    <!-- disable the option to attach an audio attachment to an Mms message. Currently Verizon
-         doesn't support OGG files and the only audio picker in the system allowed for picking
-         ringtones. All of our ringtones are OGG files so it doesn't make sense to allow a user
-         to select an audio file that eventually can't be handled. Therefore, the ability
-         to select a ringtone to send is disabled. -->
-    <bool name="allowAttachAudio">false</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">7</int>
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc070/mms_config.xml b/res/xml-mcc311-mnc070/mms_config.xml
deleted file mode 100644
index 9622857..0000000
--- a/res/xml-mcc311-mnc070/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc311-mnc100/mms_config.xml b/res/xml-mcc311-mnc100/mms_config.xml
deleted file mode 100755
index dd671f6..0000000
--- a/res/xml-mcc311-mnc100/mms_config.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-<!--Nex-Tech Wireless configuration-->
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">10</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">-1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">false</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- Email Gateway Number -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Flag indicating whether SMS Delivery Reports UI option should be shown -->
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <!-- Flag indicating whether MMS Delivery Reports UI option should be shown -->
-    <bool name="enableMMSDeliveryReports">false</bool>
-
-    <!-- Reference for additional http parameters used in MMS http request.
-            Parameters are seperated by '|'. Optional.  -->
-    <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc311-mnc180/mms_config.xml b/res/xml-mcc311-mnc180/mms_config.xml
deleted file mode 100644
index 891618b..0000000
--- a/res/xml-mcc311-mnc180/mms_config.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-     to indicate no limit. -->
-    <int name="recipientLimit">10</int>
-</mms_config>
diff --git a/res/xml-mcc311-mnc220/mms_config.xml b/res/xml-mcc311-mnc220/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc220/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc221/mms_config.xml b/res/xml-mcc311-mnc221/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc221/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc222/mms_config.xml b/res/xml-mcc311-mnc222/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc222/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc223/mms_config.xml b/res/xml-mcc311-mnc223/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc223/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc224/mms_config.xml b/res/xml-mcc311-mnc224/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc224/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc225/mms_config.xml b/res/xml-mcc311-mnc225/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc225/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc226/mms_config.xml b/res/xml-mcc311-mnc226/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc226/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc227/mms_config.xml b/res/xml-mcc311-mnc227/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc227/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc228/mms_config.xml b/res/xml-mcc311-mnc228/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc228/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc229/mms_config.xml b/res/xml-mcc311-mnc229/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc229/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc230/mms_config.xml b/res/xml-mcc311-mnc230/mms_config.xml
deleted file mode 100755
index b82f1d6..0000000
--- a/res/xml-mcc311-mnc230/mms_config.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-<!--C Spire configuration-->
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">-1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">false</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- Email Gateway Number -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Flag indicating whether SMS Delivery Reports UI option should be shown -->
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <!-- Flag indicating whether MMS Delivery Reports UI option should be shown -->
-    <bool name="enableMMSDeliveryReports">false</bool>
-
-    <!-- Reference for additional http parameters used in MMS http request. -->
-    <string name="httpParams">X-CS3G-MDN: 1##LINE1NOCOUNTRYCODE##</string>
-
-</mms_config>
diff --git a/res/xml-mcc311-mnc340/mms_config.xml b/res/xml-mcc311-mnc340/mms_config.xml
deleted file mode 100644
index eb8da80..0000000
--- a/res/xml-mcc311-mnc340/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1228800</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc311-mnc370/mms_config.xml b/res/xml-mcc311-mnc370/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc311-mnc370/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc311-mnc410/mms_config.xml b/res/xml-mcc311-mnc410/mms_config.xml
deleted file mode 100644
index 9622857..0000000
--- a/res/xml-mcc311-mnc410/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc311-mnc430/mms_config.xml b/res/xml-mcc311-mnc430/mms_config.xml
deleted file mode 100644
index 9622857..0000000
--- a/res/xml-mcc311-mnc430/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc311-mnc440/mms_config.xml b/res/xml-mcc311-mnc440/mms_config.xml
deleted file mode 100644
index 0f26fab..0000000
--- a/res/xml-mcc311-mnc440/mms_config.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1228800</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Flag indicating whether MMS Delivery Reports UI option should be shown -->
-    <bool name="enableMMSDeliveryReports">false</bool>
-
-    <!-- Reference for additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc311-mnc480/mms_config.xml b/res/xml-mcc311-mnc480/mms_config.xml
deleted file mode 100644
index 1929b6a..0000000
--- a/res/xml-mcc311-mnc480/mms_config.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <!-- TODO: check if this is correct for Passion -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1258291</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">Profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-up-calling-line-id: 1##LINE1NOCOUNTRYCODE##|X-VzW-MDN: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <!-- enable alias -->
-    <bool name="aliasEnabled">true</bool>
-
-    <!-- alias rule: min chars -->
-    <int name="aliasMinChars">2</int>
-
-    <!-- alias rule: max chars -->
-    <int name="aliasMaxChars">48</int>
-
-    <!-- disable the option to attach an audio attachment to an Mms message. Currently Verizon
-         doesn't support OGG files and the only audio picker in the system allowed for picking
-         ringtones. All of our ringtones are OGG files so it doesn't make sense to allow a user
-         to select an audio file that eventually can't be handled. Therefore, the ability
-         to select a ringtone to send is disabled. -->
-    <bool name="allowAttachAudio">false</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">7</int>
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc490/mms_config.xml b/res/xml-mcc311-mnc490/mms_config.xml
deleted file mode 100644
index 8c1ae11..0000000
--- a/res/xml-mcc311-mnc490/mms_config.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">40</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">false</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- Email Gateway Number -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="enableMMSReadReports">false</bool>
-
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <bool name="enableMMSDeliveryReports">false</bool>
-
-    <!-- Reference for additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">X-MDN: ##LINE1##|Proxy-Authorization: Basic ##NAI##</string>
-
-    <!-- Suffix to the NAI header (encoded together with base64) -->
-    <string name="naiSuffix">:pcs</string>
-
-    <!-- If true, need to read content_disposition field of an MMS part -->
-    <bool name="supportMmsContentDisposition">false</bool>
-</mms_config>
diff --git a/res/xml-mcc311-mnc580/mms_config.xml b/res/xml-mcc311-mnc580/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc580/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc581/mms_config.xml b/res/xml-mcc311-mnc581/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc581/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc582/mms_config.xml b/res/xml-mcc311-mnc582/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc582/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc583/mms_config.xml b/res/xml-mcc311-mnc583/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc583/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc584/mms_config.xml b/res/xml-mcc311-mnc584/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc584/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc585/mms_config.xml b/res/xml-mcc311-mnc585/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc585/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc586/mms_config.xml b/res/xml-mcc311-mnc586/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc586/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc587/mms_config.xml b/res/xml-mcc311-mnc587/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc587/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc588/mms_config.xml b/res/xml-mcc311-mnc588/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc588/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc589/mms_config.xml b/res/xml-mcc311-mnc589/mms_config.xml
deleted file mode 100644
index 196d4f7..0000000
--- a/res/xml-mcc311-mnc589/mms_config.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="2">
-    <!-- In case of single segment M-Notification.ind, this indicates whether
-         TransactionID should be appended to URI or not. -->
-    <bool name="enabledTransID">true</bool>
-
-    <!-- Send M-Acknowledge.ind and M-NotifyResp.ind to the URL received by the
-         M-Notification.ind (WAP-PUSH). -->
-    <bool name="enabledNotifyWapMMSC">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- UAProf parameter tag name -->
-    <string name="uaProfTagName">x-wap-profile</string>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- Additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">x-vzw-mdn: 1##LINE1NOCOUNTRYCODE##</string>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message or separate, independent SMS messages,
-         dependent on sendMultipartSMSAsSeparateMessages value. -->
-    <bool name="enableMultipartSMS">false</bool>
-
-    <!-- Email Gateway Number -->
-    <!-- TODO: check if this is correct for Passion -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="allowAttachAudio">true</bool>
-
-    <!-- Hide the MMS read reports UI in settings -->
-    <bool name="enableMMSReadReports">false</bool>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-</mms_config>
-
diff --git a/res/xml-mcc311-mnc590/mms_config.xml b/res/xml-mcc311-mnc590/mms_config.xml
deleted file mode 100644
index 9622857..0000000
--- a/res/xml-mcc311-mnc590/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc311-mnc870/mms_config.xml b/res/xml-mcc311-mnc870/mms_config.xml
deleted file mode 100644
index 8c1ae11..0000000
--- a/res/xml-mcc311-mnc870/mms_config.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">40</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">false</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- Email Gateway Number -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="enableMMSReadReports">false</bool>
-
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <bool name="enableMMSDeliveryReports">false</bool>
-
-    <!-- Reference for additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">X-MDN: ##LINE1##|Proxy-Authorization: Basic ##NAI##</string>
-
-    <!-- Suffix to the NAI header (encoded together with base64) -->
-    <string name="naiSuffix">:pcs</string>
-
-    <!-- If true, need to read content_disposition field of an MMS part -->
-    <bool name="supportMmsContentDisposition">false</bool>
-</mms_config>
diff --git a/res/xml-mcc312-mnc160/mms_config.xml b/res/xml-mcc312-mnc160/mms_config.xml
deleted file mode 100644
index 9622857..0000000
--- a/res/xml-mcc312-mnc160/mms_config.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">2432</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">4320</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">500</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">50</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">20</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-     <!-- Reference for additional http parameters used in MMS http request.
-          Parameters are seperated by '|'. Optional.  -->
-     <string name="httpParams">X-MDN: ##LINE1##</string>
-</mms_config>
diff --git a/res/xml-mcc312-mnc530/mms_config.xml b/res/xml-mcc312-mnc530/mms_config.xml
deleted file mode 100755
index 7b1b093..0000000
--- a/res/xml-mcc312-mnc530/mms_config.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 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.
--->
-
-<mms_config version="1">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">40</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">6</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">false</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Maximum length in chars of mms subject field -->
-    <int name="maxSubjectLength">80</int>
-
-    <!-- Email Gateway Number -->
-    <string name="emailGatewayNumber">6245</string>
-
-    <bool name="enableMMSReadReports">false</bool>
-
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <bool name="enableMMSDeliveryReports">false</bool>
-
-    <!-- Reference for additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional. -->
-    <string name="httpParams">X-MDN: ##LINE1##|Proxy-Authorization: Basic ##NAI##</string>
-
-    <!-- Suffix to the NAI header (encoded together with base64) -->
-    <string name="naiSuffix">:pcs</string>
-
-    <!-- If true, need to read content_disposition field of an MMS part -->
-    <bool name="supportMmsContentDisposition">false</bool>
-</mms_config>
diff --git a/res/xml-mcc334-mnc020/mms_config.xml b/res/xml-mcc334-mnc020/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc334-mnc020/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc418-mnc05/mms_config.xml b/res/xml-mcc418-mnc05/mms_config.xml
deleted file mode 100644
index 03ff16c..0000000
--- a/res/xml-mcc418-mnc05/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">102400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc418-mnc20/mms_config.xml b/res/xml-mcc418-mnc20/mms_config.xml
deleted file mode 100644
index 9ef0dd8..0000000
--- a/res/xml-mcc418-mnc20/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">153600</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc418-mnc30/mms_config.xml b/res/xml-mcc418-mnc30/mms_config.xml
deleted file mode 100644
index 9ef0dd8..0000000
--- a/res/xml-mcc418-mnc30/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">153600</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc420-mnc04/mms_config.xml b/res/xml-mcc420-mnc04/mms_config.xml
deleted file mode 100644
index 614ba8e..0000000
--- a/res/xml-mcc420-mnc04/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">409600</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc440-mnc10/mms_config.xml b/res/xml-mcc440-mnc10/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc440-mnc10/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc440-mnc11/mms_config.xml b/res/xml-mcc440-mnc11/mms_config.xml
deleted file mode 100644
index 2464a13..0000000
--- a/res/xml-mcc440-mnc11/mms_config.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<!-- Rakuten Mobile J.P. mcc=440, mnc=11 -->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">2097152</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
\ No newline at end of file
diff --git a/res/xml-mcc440-mnc20/mms_config.xml b/res/xml-mcc440-mnc20/mms_config.xml
deleted file mode 100644
index 7f383c4..0000000
--- a/res/xml-mcc440-mnc20/mms_config.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<!-- Softbank J.P. mcc=440, mnc=020 -->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">307200</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Maximum number of SMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultSMSMessagesPerThread">10000</int>
-
-    <!-- Maximum number of MMS message to save per thread before auto-delete kicks in.
-         This is the default value. -->
-    <int name="defaultMMSMessagesPerThread">1000</int>
-
-    <!-- Minimum value for the number of messages kept per conversation. The user can never
-         set the limit below this value. -->
-    <int name="minMessageCountPerThread">10</int>
-
-    <!-- Maximum value for the number of messages kept per conversation. The user can never
-         set the limit above this value. -->
-    <int name="maxMessageCountPerThread">5000</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">-1</int>
-
-    <!-- If true, The mms support slide duration.
-         If false, The mms does not support slide duration and we have to
-         set duration value. -->
-    <bool name="enableSlideDuration">true</bool>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- Set to true to add links to Cell Broadcast app from Settings and MMS app. -->
-    <bool name="config_cellBroadcastAppLinks">false</bool>
-</mms_config>
diff --git a/res/xml-mcc450-mnc00/mms_config.xml b/res/xml-mcc450-mnc00/mms_config.xml
deleted file mode 100644
index 96e5b9d..0000000
--- a/res/xml-mcc450-mnc00/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc450-mnc02/mms_config.xml b/res/xml-mcc450-mnc02/mms_config.xml
deleted file mode 100644
index 2a7231c..0000000
--- a/res/xml-mcc450-mnc02/mms_config.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <bool name="enableMMSReadReports">false</bool>
-
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <bool name="enableMMSDeliveryReports">false</bool>
-</mms_config>
diff --git a/res/xml-mcc450-mnc05/mms_config.xml b/res/xml-mcc450-mnc05/mms_config.xml
deleted file mode 100644
index 2a7231c..0000000
--- a/res/xml-mcc450-mnc05/mms_config.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <bool name="enableMMSReadReports">false</bool>
-
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <bool name="enableMMSDeliveryReports">false</bool>
-</mms_config>
diff --git a/res/xml-mcc450-mnc06/mms_config.xml b/res/xml-mcc450-mnc06/mms_config.xml
deleted file mode 100644
index 5123984..0000000
--- a/res/xml-mcc450-mnc06/mms_config.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- SMS text length threshold (in bytes) to turn into MMS -->
-    <int name="smsToMmsTextLengthThreshold">80</int>
-
-    <bool name="enableMMSReadReports">false</bool>
-
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <bool name="enableMMSDeliveryReports">false</bool>
-</mms_config>
diff --git a/res/xml-mcc450-mnc08/mms_config.xml b/res/xml-mcc450-mnc08/mms_config.xml
deleted file mode 100644
index 2a7231c..0000000
--- a/res/xml-mcc450-mnc08/mms_config.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">1048576</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <bool name="enableMMSReadReports">false</bool>
-
-    <bool name="enableSMSDeliveryReports">false</bool>
-
-    <bool name="enableMMSDeliveryReports">false</bool>
-</mms_config>
diff --git a/res/xml-mcc505-mnc01/mms_config.xml b/res/xml-mcc505-mnc01/mms_config.xml
deleted file mode 100644
index 6a27809..0000000
--- a/res/xml-mcc505-mnc01/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">2097152</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc530-mnc05/mms_config.xml b/res/xml-mcc530-mnc05/mms_config.xml
deleted file mode 100644
index fabcf3c..0000000
--- a/res/xml-mcc530-mnc05/mms_config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-
-    <!-- Content-Disposition header is not supported -->
-    <bool name="supportMmsContentDisposition">false</bool>
-</mms_config>
diff --git a/res/xml-mcc604-mnc00/mms_config.xml b/res/xml-mcc604-mnc00/mms_config.xml
deleted file mode 100644
index 03ff16c..0000000
--- a/res/xml-mcc604-mnc00/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">102400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc604-mnc02/mms_config.xml b/res/xml-mcc604-mnc02/mms_config.xml
deleted file mode 100644
index 03ff16c..0000000
--- a/res/xml-mcc604-mnc02/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">102400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-mcc647-mnc10/mms_config.xml b/res/xml-mcc647-mnc10/mms_config.xml
deleted file mode 100644
index 486c468..0000000
--- a/res/xml-mcc647-mnc10/mms_config.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">614400</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">1944</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">2592</int>
-</mms_config>
diff --git a/res/xml-v21/preferences_application.xml b/res/xml-v21/preferences_application.xml
deleted file mode 100644
index 5d8ee4c..0000000
--- a/res/xml-v21/preferences_application.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<!-- Preference screen definition for Bugle's application-wide settings -->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <!--  KLP+ only -->
-    <PreferenceScreen
-        android:key="@string/sms_disabled_pref_key"
-        android:title="@string/sms_disabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.provider.Telephony.ACTION_CHANGE_DEFAULT">
-            <extra android:name="package" android:value="com.android.messaging" />
-        </intent>
-    </PreferenceScreen>
-    <PreferenceScreen
-        android:key="@string/sms_enabled_pref_key"
-        android:title="@string/sms_enabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.settings.WIRELESS_SETTINGS">
-        </intent>
-    </PreferenceScreen>
-
-    <SwitchPreference
-        android:key="@string/send_sound_pref_key"
-        android:title="@string/send_sound_pref_title"
-        android:defaultValue="@bool/send_sound_pref_default"
-        android:persistent="true" />
-
-    <SwitchPreference
-        android:key="@string/notifications_enabled_pref_key"
-        android:title="@string/notifications_enabled_pref_title"
-        android:defaultValue="@bool/notifications_enabled_pref_default"
-        android:persistent="true"
-        android:disableDependentsState="false" />
-
-    <RingtonePreference
-        android:key="@string/notification_sound_pref_key"
-        android:title="@string/notification_sound_pref_title"
-        android:ringtoneType="notification"
-        android:showSilent="true"
-        android:showDefault="true"
-        android:persistent="true"
-        android:defaultValue=""
-        android:dependency="@string/notifications_enabled_pref_key" />
-
-    <SwitchPreference
-        android:key="@string/notification_vibration_pref_key"
-        android:title="@string/notification_vibrate_pref_title"
-        android:defaultValue="@bool/notification_vibration_pref_default"
-        android:persistent="true"
-        android:dependency="@string/notifications_enabled_pref_key" />
-
-    <PreferenceScreen
-            android:key="@string/advanced_pref_key"
-            android:title="@string/advanced_settings" />
-
-    <PreferenceCategory
-        android:key="@string/debug_pref_key"
-        android:title="@string/debug_category_pref_title">
-
-        <SwitchPreference
-            android:key="@string/dump_sms_pref_key"
-            android:title="@string/dump_sms_pref_title"
-            android:summary="@string/dump_sms_pref_summary"
-            android:defaultValue="@bool/dump_sms_pref_default" />
-
-        <SwitchPreference
-            android:key="@string/dump_mms_pref_key"
-            android:title="@string/dump_mms_pref_title"
-            android:summary="@string/dump_mms_pref_summary"
-            android:defaultValue="@bool/dump_mms_pref_default" />
-
-    </PreferenceCategory>
-
-</PreferenceScreen>
diff --git a/res/xml-v21/preferences_per_subscription.xml b/res/xml-v21/preferences_per_subscription.xml
deleted file mode 100644
index d0ae3e6..0000000
--- a/res/xml-v21/preferences_per_subscription.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<!-- Preference screen definition for Bugle's subscription-specific settings -->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <PreferenceCategory
-        android:key="@string/mms_messaging_category_pref_key"
-        android:title="@string/mms_messaging_category_pref_title">
-
-        <Preference
-            android:title="@string/group_mms_pref_title"
-            android:key="@string/group_mms_pref_key"/>
-
-        <com.android.messaging.ui.appsettings.PhoneNumberPreference
-            android:key="@string/mms_phone_number_pref_key"
-            android:title="@string/mms_phone_number_pref_title" />
-
-        <SwitchPreference
-            android:key="@string/auto_retrieve_mms_pref_key"
-            android:title="@string/auto_retrieve_mms_pref_title"
-            android:summary="@string/auto_retrieve_mms_pref_summary"
-            android:defaultValue="@bool/auto_retrieve_mms_pref_default" />
-
-        <SwitchPreference
-            android:key="@string/auto_retrieve_mms_when_roaming_pref_key"
-            android:dependency="@string/auto_retrieve_mms_pref_key"
-            android:title="@string/auto_retrieve_mms_when_roaming_pref_title"
-            android:summary="@string/auto_retrieve_mms_when_roaming_pref_summary"
-            android:defaultValue="@bool/auto_retrieve_mms_when_roaming_pref_default" />
-
-    </PreferenceCategory>
-
-    <PreferenceCategory
-        android:key="@string/advanced_category_pref_key"
-        android:title="@string/advanced_category_pref_title">
-
-        <SwitchPreference
-            android:key="@string/delivery_reports_pref_key"
-            android:title="@string/delivery_reports_pref_title"
-            android:summary="@string/delivery_reports_pref_summary"
-            android:defaultValue="@bool/delivery_reports_pref_default" />
-
-        <Preference
-            android:key="@string/wireless_alerts_key"
-            android:title="@string/wireless_alerts_title"/>
-
-        <PreferenceScreen
-            android:key="@string/sms_apns_key"
-            android:title="@string/sms_apns_title" />
-
-    </PreferenceCategory>
-</PreferenceScreen>
diff --git a/res/xml-v23/preferences_application.xml b/res/xml-v23/preferences_application.xml
deleted file mode 100644
index 8fbadc4..0000000
--- a/res/xml-v23/preferences_application.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<!-- Preference screen definition for Bugle's application-wide settings -->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <!--  KLP+ only -->
-    <PreferenceScreen
-        android:key="@string/sms_disabled_pref_key"
-        android:title="@string/sms_disabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.provider.Telephony.ACTION_CHANGE_DEFAULT">
-            <extra android:name="package" android:value="com.android.messaging" />
-        </intent>
-    </PreferenceScreen>
-    <!--  MNC+ only -->
-    <PreferenceScreen
-        android:key="@string/sms_enabled_pref_key"
-        android:title="@string/sms_enabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.provider.Telephony.ACTION_CHANGE_DEFAULT">
-        </intent>
-    </PreferenceScreen>
-
-    <SwitchPreference
-        android:key="@string/send_sound_pref_key"
-        android:title="@string/send_sound_pref_title"
-        android:defaultValue="@bool/send_sound_pref_default"
-        android:persistent="true" />
-
-    <SwitchPreference
-        android:key="@string/notifications_enabled_pref_key"
-        android:title="@string/notifications_enabled_pref_title"
-        android:defaultValue="@bool/notifications_enabled_pref_default"
-        android:persistent="true"
-        android:disableDependentsState="false" />
-
-    <RingtonePreference
-        android:key="@string/notification_sound_pref_key"
-        android:title="@string/notification_sound_pref_title"
-        android:ringtoneType="notification"
-        android:showSilent="true"
-        android:showDefault="true"
-        android:persistent="true"
-        android:defaultValue=""
-        android:dependency="@string/notifications_enabled_pref_key" />
-
-    <SwitchPreference
-        android:key="@string/notification_vibration_pref_key"
-        android:title="@string/notification_vibrate_pref_title"
-        android:defaultValue="@bool/notification_vibration_pref_default"
-        android:persistent="true"
-        android:dependency="@string/notifications_enabled_pref_key" />
-
-    <PreferenceScreen
-            android:key="@string/advanced_pref_key"
-            android:title="@string/advanced_settings" />
-
-    <PreferenceCategory
-        android:key="@string/debug_pref_key"
-        android:title="@string/debug_category_pref_title">
-
-        <SwitchPreference
-            android:key="@string/dump_sms_pref_key"
-            android:title="@string/dump_sms_pref_title"
-            android:summary="@string/dump_sms_pref_summary"
-            android:defaultValue="@bool/dump_sms_pref_default" />
-
-        <SwitchPreference
-            android:key="@string/dump_mms_pref_key"
-            android:title="@string/dump_mms_pref_title"
-            android:summary="@string/dump_mms_pref_summary"
-            android:defaultValue="@bool/dump_mms_pref_default" />
-
-    </PreferenceCategory>
-
-</PreferenceScreen>
diff --git a/res/xml/apn_editor.xml b/res/xml/apn_editor.xml
deleted file mode 100644
index 5afaeb5..0000000
--- a/res/xml/apn_editor.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
-        android:title="@string/apn_edit">
-    <EditTextPreference
-        android:title="@string/apn_name"
-        android:dialogTitle="@string/apn_name"
-        android:key="apn_name"
-        android:singleLine="true"
-        android:inputType="text"
-        />
-    <EditTextPreference
-        android:title="@string/apn_mmsc"
-        android:dialogTitle="@string/apn_mmsc"
-        android:key="apn_mmsc"
-        android:singleLine="true"
-        android:inputType="textUri"
-        />
-    <EditTextPreference
-        android:title="@string/apn_mms_proxy"
-        android:dialogTitle="@string/apn_mms_proxy"
-        android:key="apn_mms_proxy"
-        android:singleLine="true"
-        android:inputType="textUri"
-        />
-    <EditTextPreference
-        android:title="@string/apn_mms_port"
-        android:dialogTitle="@string/apn_mms_port"
-        android:key="apn_mms_port"
-        android:singleLine="true"
-        android:inputType="number"
-        />
-    <EditTextPreference
-        android:title="@string/apn_mcc"
-        android:dialogTitle="@string/apn_mcc"
-        android:key="apn_mcc"
-        android:singleLine="true"
-        android:inputType="number"
-        />
-    <EditTextPreference
-        android:title="@string/apn_mnc"
-        android:dialogTitle="@string/apn_mnc"
-        android:key="apn_mnc"
-        android:singleLine="true"
-        android:inputType="number"
-        />
-</PreferenceScreen>
diff --git a/res/xml/apn_settings.xml b/res/xml/apn_settings.xml
deleted file mode 100644
index 61a8b5b..0000000
--- a/res/xml/apn_settings.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
-        android:title="@string/apn_settings" android:key="@string/apn_list_pref_key">
-</PreferenceScreen>
diff --git a/res/xml/apns.xml b/res/xml/apns.xml
deleted file mode 100644
index 20de298..0000000
--- a/res/xml/apns.xml
+++ /dev/null
@@ -1,3284 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-    Copyright (C) 2015 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.
--->
-  <apns version="9">
-      <apn mcc="001" mnc="01" carrier="AT&amp;T PHONE TEST SIM" apn="phone" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,mms,supl,hipri,fota,dun"></apn>
-      <apn mcc="001" mnc="01" carrier="EHRPD - Test CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="001" mnc="01" carrier="LTE - Test CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="001" mnc="01" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="001" mnc="01" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="001" mnc="01" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="001" mnc="01" carrier="U.S.Cellular TEST SIM" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,hipri,dun,fota" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="001" mnc="010" carrier="EHRPD - VZW Test CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="001" mnc="010" carrier="LTE - VZW Test CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="001" mnc="010" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="001" mnc="010" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="001" mnc="010" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="1" mnc="1" carrier="AT&amp;T US MMS TEST SIM" apn="phone" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="mms"></apn>
-      <apn mcc="1" mnc="1" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="1" mnc="1" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="1" mnc="1" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="1" mnc="10" carrier="VZW Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="1" mnc="10" carrier="VZW Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="1" mnc="10" carrier="VZW Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="202" mnc="01" carrier="Cosmote Mms" apn="mms" mmsc="http://mmsc.cosmote.gr:8002" mmsproxy="10.10.10.20" mmsport="8080" type="mms"></apn>
-      <apn mcc="202" mnc="1" carrier="Cosmote Internet MMS" apn="internet" mmsc="http://mmsc.cosmote.gr:8002" mmsproxy="10.10.10.20" mmsport="8080" type="default,mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="202" mnc="1" carrier="Cosmote Mms" apn="mms" mmsc="http://mmsc.cosmote.gr:8002" mmsproxy="10.10.10.20" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="202" mnc="05" carrier="Vf MMS" apn="mms.vodafone.net" mmsc="http://mms.vodafone.gr" mmsproxy="213.249.19.49" mmsport="5080" type="mms" user="user" password="pass" authtype="1"></apn>
-      <apn mcc="202" mnc="5" carrier="VF MMS" apn="mms.vodafone.net" mmsc="http://mms.vodafone.gr" mmsproxy="213.249.19.49" mmsport="5080" type="mms" user="user" password="pass" authtype="0"></apn>
-      <apn mcc="202" mnc="09" carrier="Q-Telecom MMS GPRS" apn="q-mms.myq.gr" mmsc="http://mms.myq.gr" mmsproxy="192.168.80.134" mmsport="8080" type="mms"></apn>
-      <apn mcc="202" mnc="10" carrier="WIND GR MMS" apn="mnet.b-online.gr" mmsc="http://192.168.200.95/servlets/mms" mmsproxy="192.168.200.11" mmsport="9401" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="202" mnc="10" carrier="Wind MMS" apn="mnet.b-online.gr" mmsc="http://192.168.200.95/servlets/mms" mmsproxy="192.168.200.11" mmsport="9401" type="mms"></apn>
-      <apn mcc="202" mnc="10" carrier="Wind MMS" apn="mnet.b-online.gr" mmsc="http://192.168.200.95/servlets/mms" mmsproxy="192.168.200.11" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="204" mnc="02" carrier="Tele2 GPRS" apn="internet.tele2.nl" mmsc="http://mmsc.tele2.nl" mmsproxy="193.12.40.64" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="204" mnc="2" carrier="Tele2 GPRS" apn="internet.tele2.nl" mmsc="http://mmsc.tele2.nl" mmsproxy="193.12.40.64" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="204" mnc="2" carrier="Tele2 MMS" apn="internet.tele2.nl" mmsc="http://mmsc.tele2.nl" mmsproxy="193.12.40.64" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="204" mnc="04" carrier="CSpire international" apn="admin.cs4glte.com" mmsc="http://pix.cspire.com" type="admin,fota,ota" mvno_match_data="C Spire" mvno_type="spn" protocol="IPV4V6" server="*"></apn>
-      <apn mcc="204" mnc="04" carrier="CSpire international" apn="internet.cs4glte.com" mmsc="http://pix.cspire.com" type="default,internet,mms" user="Uniroam@inet.cs.com" password="cs3g" authtype="3" mvno_match_data="C Spire" mvno_type="spn" protocol="IPV4V6" server="*"></apn>
-      <apn mcc="204" mnc="04" carrier="CSpire international" apn="tethering.cs4glte.com" mmsc="http://pix.cspire.com" type="dun,pam" mvno_match_data="C Spire" mvno_type="spn" protocol="IPV4V6" server="*"></apn>
-      <apn mcc="204" mnc="04" carrier="EHRPD - VZW Roaming CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="204" mnc="04" carrier="EHRPD - VZW Roaming CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" mvno_match_data="BAE0000000000000" mvno_type="gid" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="204" mnc="04" carrier="LTE - VZW Roaming CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="204" mnc="04" carrier="LTE - VZW Roaming CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" mvno_match_data="BAE0000000000000" mvno_type="gid" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="204" mnc="04" carrier="SaskTel" apn="pda.stm.sk.ca" mmsc="http://mms.sasktel.com/" mmsproxy="mig.sasktel.com" mmsport="80" type="default,mms,supl" mvno_match_data="5A" mvno_type="gid"></apn>
-      <apn mcc="204" mnc="04" carrier="SaskTel" apn="pda.stm.sk.ca" mmsc="http://mms.sasktel.com/" mmsproxy="mig.sasktel.com" mmsport="80" type="default,mms,supl,dun" mvno_match_data="5A" mvno_type="gid"></apn>
-      <apn mcc="204" mnc="04" carrier="Vodafone NL" apn="live.vodafone.com" mmsc="http://mmsc.mms.vodafone.nl" mmsproxy="192.168.251.150" mmsport="8799" type="default,supl,mms" user="vodafone" password="vodafone" authtype="1"></apn>
-      <apn mcc="204" mnc="4" carrier="Vodafone NL" apn="live.vodafone.com" mmsc="http://mmsc.mms.vodafone.nl" mmsproxy="192.168.251.150" mmsport="8799" type="default,mms" user="vodafone" password="vodafone" authtype="1" proxy="192.168.251.150" port="8799"></apn>
-      <apn mcc="204" mnc="08" carrier="KPN/Hi 4G LTE Mobiel internet" apn="KPN4G.nl" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" type="default,supl,mms"></apn>
-      <apn mcc="204" mnc="08" carrier="KPN/Hi Mobiel Internet" apn="portalmmm.nl" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" type="default,supl,mms"></apn>
-      <apn mcc="204" mnc="08" carrier="Rabo Mobiel MMS" apn="rabo" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.10" mmsport="5080" type="mms" mvno_match_data="Rabo Mobiel" mvno_type="spn"></apn>
-      <apn mcc="204" mnc="8" carrier="KPN" apn="portalmmm.nl" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" type="default,mms" authtype="0"></apn>
-      <apn mcc="204" mnc="8" carrier="KPN/Hi 4G LTE Mobiel internet" apn="KPN4G.nl" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="204" mnc="8" carrier="KPN/Hi Mobiel Internet" apn="portalmmm.nl" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="204" mnc="12" carrier="Telfort" apn="internet" mmsc="http://mms" mmsproxy="193.113.200.195" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="204" mnc="12" carrier="Telfort Internet" apn="internet" mmsc="http://mms" mmsproxy="193.113.200.195" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="204" mnc="12" carrier="Telfort Internet" apn="internet" mmsc="http://mms" mmsproxy="193.113.200.195" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="204" mnc="16" carrier="Ben MMS" apn="mms.ben" mmsc="http://benmms/" mmsproxy="10.10.10.11" mmsport="8080" type="mms" authtype="1" mvno_match_data="BEN NL" mvno_type="spn"></apn>
-      <apn mcc="204" mnc="16" carrier="T-Mobile MMS" apn="mms" mmsc="http://t-mobilemms" mmsproxy="10.10.10.11" mmsport="8080" type="mms" user="tmobilemms" password="tmobilemms" authtype="1"></apn>
-      <apn mcc="204" mnc="16" carrier="T-Mobile MMS" apn="mms" mmsc="http://t-mobilemms" mmsproxy="10.10.10.11" mmsport="8080" type="mms" user="tmobilemms" password="tmobilemms" authtype="1" protocol="IP"></apn>
-      <apn mcc="204" mnc="16" carrier="T-Mobile NL" apn="internet" mmsc="http://t-mobilemms" mmsproxy="010.010.010.011" mmsport="8080" type="default,supl"></apn>
-      <apn mcc="204" mnc="16" carrier="T-Mobile NL MMS" apn="mms" mmsc="http://t-mobilemms" mmsproxy="010.010.010.011" mmsport="8080" type="mms"></apn>
-      <apn mcc="204" mnc="20" carrier="Orange NL MMS" apn="mms" mmsc="http://mms.orange.nl:8002" mmsproxy="10.250.255.183" mmsport="5080" type="mms" authtype="0"></apn>
-      <apn mcc="204" mnc="20" carrier="T-Mobile MMS" apn="mms" mmsc="http://t-mobilemms" mmsproxy="10.10.10.11" mmsport="8080" type="mms" user="tmobilemms" password="tmobilemms" authtype="1"></apn>
-      <apn mcc="206" mnc="01" carrier="MMS" apn="mms.iusacellgsm.mx" mmsc="http://mms.iusacell3g.com/" type="mms" user="mmsiusacellgsm" password="mmsiusacellgsm" authtype="0" mvno_match_data="IUSACELL" mvno_type="spn"></apn>
-      <apn mcc="206" mnc="01" carrier="MMS" apn="mms.iusacellgsm.mx" mmsc="http://mms.iusacell3g.com/" type="mms" user="mmsiusacellgsm" password="mmsiusacellgsm" authtype="0" mvno_match_data="UNEFON" mvno_type="spn"></apn>
-      <apn mcc="206" mnc="01" carrier="MMS" apn="mms.mobi.eastlink.ca" mmsc="http://mmss.mobi.eastlink.ca" mmsproxy="10.232.12.49" mmsport="8080" type="mms" mvno_match_data="B6" mvno_type="gid"></apn>
-      <apn mcc="206" mnc="01" carrier="NRJMMS" apn="event.proximus.be" mmsc="http://mmsc.proximus.be/mms" mmsproxy="10.55.14.75" mmsport="8080" type="mms" user="mms" password="mms" authtype="0" mvno_match_data="NRJ Mobile" mvno_type="spn"></apn>
-      <apn mcc="206" mnc="01" carrier="Px MMS" apn="EVENT.PROXIMUS.BE" mmsc="http://mmsc.proximus.be/mms" mmsproxy="10.55.14.75" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="206" mnc="01" carrier="Telenet MMS" apn="mms.be" mmsc="http://mmsc.telenet.be" mmsproxy="195.130.149.100" mmsport="80" type="mms" mvno_match_data="2060188" mvno_type="imsi"></apn>
-      <apn mcc="206" mnc="01" carrier="VM MMS" apn="virgin-mobile.fr" mmsc="http://virginmms.fr" mmsproxy="10.6.10.1" mmsport="8080" type="mms" mvno_match_data="52" mvno_type="gid"></apn>
-      <apn mcc="206" mnc="1" carrier="Px MMS" apn="EVENT.PROXIMUS.BE" mmsc="http://mmsc.proximus.be/mms" mmsproxy="10.55.14.75" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="206" mnc="1" carrier="Px MMS" apn="event.proximus.be" mmsc="http://mmsc.proximus.be/mms" mmsproxy="10.55.14.75" mmsport="80" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="206" mnc="1" carrier="Telenet MMS" apn="mms.be" mmsc="http://mmsc.telenet.be" mmsproxy="195.130.149.100" mmsport="80" type="mms" authtype="0" mvno_match_data="2060188" mvno_type="imsi"></apn>
-      <apn mcc="206" mnc="1" carrier="Telenet Roam MMS" apn="mms.be" mmsc="http://mmsc.telenet.be" mmsproxy="195.130.149.100" mmsport="80" type="mms" authtype="0" mvno_match_data="Telenet" mvno_type="spn"></apn>
-      <apn mcc="206" mnc="05" carrier="Telenet MMS" apn="mms.be" mmsc="http://mmsc.telenet.be" mmsproxy="195.130.149.100" mmsport="80" type="mms"></apn>
-      <apn mcc="206" mnc="10" carrier="Mobistar MMS" apn="mms.be" mmsc="http://mmsc.mobistar.be" mmsproxy="212.65.63.143" mmsport="8080" type="mms"></apn>
-      <apn mcc="206" mnc="10" carrier="Mobistar MMS" apn="mms.be" mmsc="http://mmsc.mobistar.be" mmsproxy="212.65.63.143" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="206" mnc="10" carrier="Mobistar MMS" apn="mms.be" mmsc="http://mmsc.mobistar.be" mmsproxy="212.65.63.143" mmsport="8080" type="mms" user="mobistar" password="mobistar" authtype="0"></apn>
-      <apn mcc="206" mnc="20" carrier="BASE MMS" apn="mms.base.be" mmsc="http://mmsc.base.be" mmsproxy="217.72.235.1" mmsport="8080" type="mms" user="base" password="base" authtype="1"></apn>
-      <apn mcc="206" mnc="20" carrier="Base MMS" apn="mms.base.be" mmsc="http://mmsc.base.be" mmsproxy="217.72.235.1" mmsport="8080" type="mms" user="base" password="base" authtype="0"></apn>
-      <apn mcc="208" mnc="01" carrier="Carrefour MMS" apn="orange.acte" mmsc="http://mms.orange.fr" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="1" mvno_match_data="33" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="01" carrier="NRJMMS" apn="orange.acte" mmsc="http://mms.orange.fr" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="1" mvno_match_data="4E" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="01" carrier="Orange MMS" apn="orange.acte" mmsc="http://mms.orange.fr" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="1"></apn>
-      <apn mcc="208" mnc="01" carrier="Tele2 MMS" apn="orange.acte" mmsc="http://mms.orange.fr" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange"></apn>
-      <apn mcc="208" mnc="01" carrier="VM MMS" apn="orange.acte" mmsc="http://mms.orange.fr" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="1" mvno_match_data="52" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="1" carrier="Carrefour MMS" apn="orange.acte" mmsc="http://mms.orange.fr" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="1" mvno_match_data="33" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="1" carrier="MMS Carrefour" apn="orange.acte" mmsc="http://mms.orange.fr/" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="0" mvno_match_data="Carrefour Mobile" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="1" carrier="NRJMMS" apn="orange.acte" mmsc="http://mms.orange.fr/" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="0" mvno_match_data="NRJ Mobile" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="1" carrier="Orange MMS" apn="orange.acte" mmsc="http://mms.orange.fr" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="1"></apn>
-      <apn mcc="208" mnc="1" carrier="Orange MMS" apn="orange.acte" mmsc="http://mms.orange.fr/" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="0"></apn>
-      <apn mcc="208" mnc="1" carrier="Tele2 MMS" apn="orange.acte" mmsc="http://mms.orange.fr" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="3"></apn>
-      <apn mcc="208" mnc="1" carrier="VM MMS" apn="orange.acte" mmsc="http://mms.orange.fr" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="1" mvno_match_data="52" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="1" carrier="VM MMS FR" apn="orange.acte" mmsc="http://mms.orange.fr/" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange" authtype="0" mvno_match_data="Virgin Mobile" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="09" carrier="SFR webphone" apn="sl2sfr" mmsc="http://mms1" mmsproxy="10.151.0.1" mmsport="8080" type="default,mms,supl,agps,fota" protocol="IP"></apn>
-      <apn mcc="208" mnc="10" carrier="Auchan MMS" apn="mms65" mmsc="http://mms65" mmsproxy="10.143.156.8" mmsport="8080" type="mms" mvno_match_data="A MOBILE" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="Auchan MMS" apn="mms65" mmsc="http://mms65" mmsproxy="10.143.156.8" mmsport="8080" type="mms" authtype="0" mvno_match_data="A MOBILE" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="Coriolis MMS" apn="mmscoriolis" mmsc="http://mmscoriolis" mmsproxy="10.143.156.6" mmsport="8080" type="mms" mvno_match_data="12" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="10" carrier="Coriolis MMS" apn="mmscoriolis" mmsc="http://mmscoriolis" mmsproxy="10.143.156.6" mmsport="8080" type="mms" authtype="0" mvno_match_data="12" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="10" carrier="Coriolis MMS FR" apn="mmscoriolis" mmsc="http://mmscoriolis" mmsproxy="10.143.156.6" mmsport="8080" type="mms" authtype="0" mvno_match_data="Coriolis" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="DARTY MMS" apn="mms68" mmsc="http://mms68/" mmsproxy="10.143.156.11" mmsport="8080" type="mms" authtype="0" mvno_match_data="Darty" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="Darty MMS" apn="mms68" mmsc="http://mms68/" mmsproxy="10.143.156.11" mmsport="8080" type="mms" mvno_match_data="44" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="10" carrier="Darty MMS" apn="mms68" mmsc="http://mms68/" mmsproxy="10.143.156.11" mmsport="8080" type="mms" authtype="0" mvno_match_data="44" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="10" carrier="Internet Joe" apn="sl2sfr" mmsc="http://mms1" mmsproxy="10.151.0.1" mmsport="8080" type="default,mms,supl,agps,fota" authtype="0" mvno_match_data="53" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="10" carrier="Keyyo Mobile MMS" apn="mms68" mmsc="http://mms68" mmsproxy="10.143.156.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="208" mnc="10" carrier="Keyyo Mobile MMS" apn="mms68" mmsc="http://mms68" mmsproxy="10.143.156.11" mmsport="8080" type="mms" authtype="0" mvno_match_data="Keyyo Mobile" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="MMS" apn="sl2sfr" mmsc="http://mms1" mmsproxy="10.151.0.1" mmsport="8080" type="mms"></apn>
-      <apn mcc="208" mnc="10" carrier="MMS" apn="sl2sfr" mmsc="http://mms1" mmsproxy="10.151.0.1" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="208" mnc="10" carrier="MMS La Poste Mobile" apn="mmsdebitel" mmsc="http://mmsdebitel" mmsproxy="10.143.156.3" mmsport="8080" type="mms" mvno_match_data="4C" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="10" carrier="MMS La Poste Mobile" apn="mmsdebitel" mmsc="http://mmsdebitel" mmsproxy="10.143.156.3" mmsport="8080" type="mms" authtype="0" mvno_match_data="4C" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="10" carrier="MMS La Poste Mobile" apn="mmsdebitel" mmsc="http://mmsdebitel" mmsproxy="10.143.156.3" mmsport="8080" type="mms" authtype="0" mvno_match_data="La Poste Mobile" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="MMS Leclerc mobile" apn="mms66" mmsc="http://mms66" mmsproxy="10.143.156.9" mmsport="8080" type="mms" authtype="0" mvno_match_data="Leclerc Mobile" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="MMS LeclercMobile" apn="mms66" mmsc="http://mms66" mmsproxy="10.143.156.9" mmsport="8080" type="mms" mvno_match_data="LeclercMobile" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="MMS LeclercMobile" apn="mms66" mmsc="http://mms66" mmsproxy="10.143.156.9" mmsport="8080" type="mms" authtype="0" mvno_match_data="LeclercMobile" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="MMS RegloMobile" apn="mms66" mmsc="http://mms66" mmsproxy="10.143.156.9" mmsport="8080" type="mms" authtype="0" mvno_match_data="RegloMobile" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="MMS Simplicime" apn="mmsdebitel" mmsc="http://mmsdebitel" mmsproxy="10.143.156.3" mmsport="8080" type="mms"></apn>
-      <apn mcc="208" mnc="10" carrier="NRJMMS" apn="mmsnrj" mmsc="http://mmsnrj" mmsproxy="10.143.156.5" mmsport="8080" type="mms" mvno_match_data="4E" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="10" carrier="NRJMMS" apn="mmsnrj" mmsc="http://mmsnrj" mmsproxy="10.143.156.5" mmsport="8080" type="mms" authtype="0" mvno_match_data="4E" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="10" carrier="NRJMMS" apn="mmsnrj" mmsc="http://mmsnrj" mmsproxy="10.143.156.5" mmsport="8080" type="mms" authtype="0" mvno_match_data="NRJ Mobile" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="SFR MMS" apn="mmssfr" mmsc="http://mms1" mmsproxy="10.151.0.1" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="208" mnc="10" carrier="SFR webphone" apn="sl2sfr" mmsc="http://mms1" mmsproxy="10.151.0.1" mmsport="8080" type="default,mms,supl"></apn>
-      <apn mcc="208" mnc="10" carrier="SFR webphone" apn="sl2sfr" mmsc="http://mms1" mmsproxy="10.151.0.1" mmsport="8080" type="default,mms,supl,agps,fota" authtype="0"></apn>
-      <apn mcc="208" mnc="10" carrier="WEB La Poste Mobile" apn="sl2sfr" mmsc="http://mmsdebitel" mmsproxy="10.143.156.3" mmsport="8080" type="default,mms,supl" mvno_match_data="4C" mvno_type="gid" proxy="192.168.21.3" port="8080"></apn>
-      <apn mcc="208" mnc="10" carrier="Zero forfait MMS" apn="mms68" mmsc="http://mms68" mmsproxy="10.143.156.11" mmsport="8080" type="mms" authtype="0" mvno_match_data="ZERO FORFAIT" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="10" carrier="mms65 Amobile" apn="mms65" mmsc="http://mms65" mmsproxy="10.143.156.8" mmsport="8080" type="mms" authtype="0" mvno_match_data="A MOBILE" mvno_type="spn"></apn>
-      <apn mcc="208" mnc="15" carrier="Free MMS" apn="mmsfree" mmsc="http://mms.free.fr" type="mms"></apn>
-      <apn mcc="208" mnc="15" carrier="Free MMS" apn="mmsfree" mmsc="http://mms.free.fr" type="mms" authtype="0"></apn>
-      <apn mcc="208" mnc="15" carrier="Free Telecom MMS" apn="mmsfree" mmsc="http://mms.free.fr" type="mms" authtype="0"></apn>
-      <apn mcc="208" mnc="20" carrier="Bouygues" apn="mmsbouygtel.com" mmsc="http://mms.bouyguestelecom.fr/mms/wapenc" mmsproxy="62.201.129.226" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="208" mnc="20" carrier="Bouygues Telecom" apn="mmsbouygtel.com" mmsc="http://mms.bouyguestelecom.fr/mms/wapenc" mmsproxy="62.201.129.226" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="208" mnc="20" carrier="Bouygues Telecom" apn="mmsbouygtel.com" mmsc="http://mms.bouyguestelecom.fr/mms/wapenc" mmsproxy="62.201.129.226" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="208" mnc="23" carrier="VM MMS" apn="virgin-mobile.fr" mmsc="http://virginmms.fr" mmsproxy="10.6.10.1" mmsport="8080" type="mms" mvno_match_data="52" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="23" carrier="VM MMS" apn="virgin-mobile.fr" mmsc="http://virginmms.fr" mmsproxy="10.6.10.1" mmsport="8080" type="mms" authtype="0" mvno_match_data="52" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="23" carrier="Virgin mobile" apn="virgin-mobile.fr" mmsc="http://mmc.omeatelecom.fr/servlets/mms" mmsproxy="10.6.10.1" mmsport="8080" type="default,mms" authtype="0" mvno_match_data="Virgin" mvno_type="spn" proxy="10.6.10.1" port="8080"></apn>
-      <apn mcc="208" mnc="26" carrier="NRJ MMS" apn="mmsnrj" mmsc="http://mmsnrj" mmsproxy="10.143.156.5" mmsport="8080" type="mms" mvno_match_data="4E" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="26" carrier="NRJ MMS" apn="mmsnrj" mmsc="http://mmsnrj" mmsproxy="10.143.156.5" mmsport="8080" type="mms" authtype="0" mvno_match_data="4E" mvno_type="gid"></apn>
-      <apn mcc="208" mnc="26" carrier="NRJMMS" apn="mmsnrj" mmsc="http://mmsnrj" mmsproxy="10.143.156.5" mmsport="8080" type="mms" authtype="0" mvno_match_data="NRJ Mobile" mvno_type="spn"></apn>
-      <apn mcc="214" mnc="01" carrier="MMS VODAFONE" apn="mms.vodafone.net" mmsc="http://mmsc.vodafone.es/servlets/mms" mmsproxy="212.73.32.10" mmsport="80" type="mms" user="wap@wap" password="wap125" authtype="1"></apn>
-      <apn mcc="214" mnc="03" carrier="Carrefour MMS" apn="CARREFOURMMS" mmsc="http://mms.orange.es" mmsproxy="172.022.188.025" mmsport="8080" type="mms" user="CARREFOUR" password="CARREFOUR" authtype="1" mvno_match_data="2140352xxxxxxxx" mvno_type="imsi"></apn>
-      <apn mcc="214" mnc="03" carrier="Euskaltel MMS" apn="euskaltelmms.euskaltel.mobi" mmsc="http://mms.euskaltel.mobi" mmsproxy="172.16.18.74" mmsport="8080" type="mms" user="MMS" password="EUSKALTEL" authtype="1" mvno_match_data="2140359" mvno_type="imsi"></apn>
-      <apn mcc="214" mnc="03" carrier="Orange MMS" apn="orangemms" mmsc="http://mms.orange.es" mmsproxy="172.22.188.25" mmsport="8080" type="mms" user="orange" password="orange" authtype="1"></apn>
-      <apn mcc="214" mnc="3" carrier="Orange MMS" apn="orangemms" mmsc="http://mms.orange.es" mmsproxy="172.22.188.25" mmsport="8080" type="mms" user="orange" password="orange" authtype="0"></apn>
-      <apn mcc="214" mnc="04" carrier="Yoigo MMS" apn="mms" mmsc="http://mmss/" mmsproxy="193.209.134.141" mmsport="80" type="mms"></apn>
-      <apn mcc="214" mnc="4" carrier="Yoigo MMS" apn="mms" mmsc="http://mmss/" mmsproxy="193.209.134.141" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="214" mnc="4" carrier="Yoigo MMS" apn="mms" mmsc="http://mmss/" mmsproxy="193.209.134.141" mmsport="80" type="mms" authtype="1"></apn>
-      <apn mcc="214" mnc="05" carrier="Tuenti" apn="tuenti.com" mmsc="http://tuenti.com" mmsproxy="10.138.255.43" mmsport="8080" user="tuenti" password="tuenti" authtype="1"></apn>
-      <apn mcc="214" mnc="5" carrier="Tuenti" apn="tuenti.com" mmsc="http://tuenti.com" mmsproxy="10.138.255.43" mmsport="8080" user="tuenti" password="tuenti" authtype="1"></apn>
-      <apn mcc="214" mnc="06" carrier="Eroski Movil MMS" apn="mms.eroskimovil.es" mmsc="http://mms.eroskimovil.es/servlets/mms" mmsproxy="212.73.32.10" mmsport="80" type="mms" user="wap@wap" password="wap125" authtype="1" mvno_match_data="2140606" mvno_type="imsi"></apn>
-      <apn mcc="214" mnc="06" carrier="Euskaltel MMS" apn="euskaltelmms.euskaltel.mobi" mmsc="http://mms.euskaltel.mobi" mmsproxy="172.16.18.74" mmsport="8080" type="mms" user="MMS" password="EUSKALTEL" authtype="1" mvno_match_data="0008" mvno_type="gid"></apn>
-      <apn mcc="214" mnc="06" carrier="MMS" apn="mms.pepephone.com" mmsc="http://mms.pepephone.com/servlets/mms" mmsproxy="212.73.32.10" mmsport="80" type="mms" user="wap@wap" password="wap125" authtype="0" mvno_match_data="pepephone" mvno_type="spn"></apn>
-      <apn mcc="214" mnc="06" carrier="MMS R" apn="mms.mundo-r.com" mmsc="http://mms.mundo-r.com" mmsproxy="10.0.157.169" mmsport="8080" type="mms" authtype="1" mvno_match_data="2140612" mvno_type="imsi"></apn>
-      <apn mcc="214" mnc="06" carrier="MMS Vodafone" apn="mms.vodafone.net" mmsc="http://mmsc.vodafone.es/servlets/mms" mmsproxy="212.73.32.10" mmsport="80" type="mms" user="wap@wap" password="wap125"></apn>
-      <apn mcc="214" mnc="06" carrier="TeleCable MMS" apn="mms.telecable.es" mmsc="http://mms.telecable.es/mms/" mmsproxy="212.89.0.84" mmsport="8080" type="mms" user="telecable" password="telecable" authtype="1" mvno_match_data="2140613" mvno_type="imsi"></apn>
-      <apn mcc="214" mnc="6" carrier="Eroski Movil MMS" apn="mms.eroskimovil.es" mmsc="http://mms.eroskimovil.es/servlets/mms" mmsproxy="212.73.32.10" mmsport="80" type="mms" user="wap@wap" password="wap125" authtype="1" mvno_match_data="2140606" mvno_type="imsi"></apn>
-      <apn mcc="214" mnc="6" carrier="Eroski Movil MMS" apn="mms.eroskimovil.es" mmsc="http://mms.eroskimovil.es/servlets/mms" mmsproxy="212.73.32.10" mmsport="80" type="mms" user="wap@wap" password="wap125" authtype="1" mvno_match_data="Eroski Movil" mvno_type="spn"></apn>
-      <apn mcc="214" mnc="6" carrier="Euskaltel MMS" apn="euskaltelmms.euskaltel.mobi" mmsc="http://mms.euskaltel.mobi" mmsproxy="172.16.18.74" mmsport="8080" type="mms" user="MMS" password="EUSKALTEL" authtype="0" mvno_match_data="EUSKALTEL" mvno_type="spn"></apn>
-      <apn mcc="214" mnc="6" carrier="Euskaltel MMS" apn="euskaltelmms.euskaltel.mobi" mmsc="http://mms.euskaltel.mobi" mmsproxy="172.16.18.74" mmsport="8080" type="mms" user="MMS" password="EUSKALTEL" authtype="1" mvno_match_data="0008" mvno_type="gid"></apn>
-      <apn mcc="214" mnc="6" carrier="MMS R" apn="mms.mundo-r.com" mmsc="http://mms.mundo-r.com" mmsproxy="10.0.157.169" mmsport="8080" type="mms" authtype="1" mvno_match_data="2140612" mvno_type="imsi"></apn>
-      <apn mcc="214" mnc="6" carrier="R MMS" apn="mms.mundo-r.com" mmsc="http://mms.mundo-r.com" mmsproxy="10.0.157.169" mmsport="8080" type="mms" authtype="0" mvno_match_data="mobil R" mvno_type="spn"></apn>
-      <apn mcc="214" mnc="6" carrier="TeleCable MMS" apn="mms.telecable.es" mmsc="http://mms.telecable.es/mms/" mmsproxy="212.89.0.84" mmsport="8080" type="mms" user="telecable" password="telecable" authtype="1" mvno_match_data="2140613" mvno_type="imsi"></apn>
-      <apn mcc="214" mnc="6" carrier="telecable MMS" apn="mms.telecable.es" mmsc="http://mms.telecable.es/mms/" mmsproxy="212.89.0.84" mmsport="8080" type="mms" user="telecable" password="telecable" authtype="1" mvno_match_data="telecable" mvno_type="spn"></apn>
-      <apn mcc="214" mnc="07" carrier="Jazztel MMS" apn="jazzmms" mmsc="http://jazztelmms.com/servlets/mms" mmsproxy="37.132.0.10" mmsport="8080" type="mms" authtype="1" mvno_match_data="JAZZTEL" mvno_type="spn"></apn>
-      <apn mcc="214" mnc="07" carrier="Jazztel MMS" apn="jazzmms" mmsc="http://jazztelmms.com/servlets/mms/" mmsproxy="37.132.0.10" mmsport="8080" type="mms" authtype="1" mvno_match_data="JAZZTEL" mvno_type="spn"></apn>
-      <apn mcc="214" mnc="07" carrier="Movistar" apn="telefonica.es" mmsc="http://mms.movistar.com" mmsproxy="10.138.255.5" mmsport="8080" type="default,supl,mms" user="telefonica" password="telefonica" authtype="1" proxy="10.138.255.133" port="8080"></apn>
-      <apn mcc="214" mnc="07" carrier="T-2" apn="internet.t-2.net" mmsc="http://www.mms.t-2.net:8002" mmsproxy="172.20.18.137" mmsport="8080" type="default,ims,mms,supl" mvno_match_data="2140759577xxxxx" mvno_type="imsi"></apn>
-      <apn mcc="214" mnc="07" carrier="T-2" apn="internet.t-2.net" mmsc="http://www.mms.t-2.net:8002" mmsproxy="172.20.18.137" mmsport="8080" type="default,ims,mms,supl" mvno_match_data="2140796692xxxxx" mvno_type="imsi"></apn>
-      <apn mcc="214" mnc="7" carrier="Movistar" apn="telefonica.es" mmsc="http://mms.movistar.com" mmsproxy="10.138.255.5" mmsport="8080" type="default,mms,supl,agps,fota" user="telefonica" password="telefonica" authtype="1" proxy="10.138.255.133" port="8080"></apn>
-      <apn mcc="214" mnc="7" carrier="Movistar" apn="telefonica.es" mmsc="http://mms.movistar.com" mmsproxy="10.138.255.5" mmsport="8080" type="default,supl,mms" user="telefonica" password="telefonica" authtype="1" proxy="10.138.255.133" port="8080"></apn>
-      <apn mcc="214" mnc="08" carrier="Euskaltel MMS" apn="euskaltelmms.euskaltel.mobi" mmsc="http://mms.euskaltel.mobi" mmsproxy="172.16.18.74" mmsport="8080" type="mms" user="MMS" password="EUSKALTEL" authtype="1"></apn>
-      <apn mcc="214" mnc="8" carrier="Euskaltel MMS" apn="euskaltelmms.euskaltel.mobi" mmsc="http://mms.euskaltel.mobi" mmsproxy="172.16.18.74" mmsport="8080" type="mms" user="MMS" password="EUSKALTEL" authtype="1"></apn>
-      <apn mcc="214" mnc="8" carrier="MMS Euskaltel" apn="euskaltelmms.euskaltel.mobi" mmsc="http://mms.euskaltel.mobi" mmsproxy="172.16.18.74" mmsport="8080" type="mms" user="MMS" password="EUSKALTEL" authtype="0"></apn>
-      <apn mcc="214" mnc="16" carrier="TeleCable MMS" apn="mms.telecable.es" mmsc="http://mms.telecable.es/mms/" mmsproxy="212.89.0.84" mmsport="8080" type="mms" user="telecable" password="telecable"></apn>
-      <apn mcc="214" mnc="16" carrier="TeleCable MMS" apn="mms.telecable.es" mmsc="http://mms.telecable.es/mms/" mmsproxy="212.89.0.84" mmsport="8080" type="mms" user="telecable" password="telecable" authtype="3"></apn>
-      <apn mcc="214" mnc="16" carrier="Telecable MMS" apn="mms.telecable.es" mmsc="http://mms.telecable.es/mms/" mmsproxy="212.89.0.84" mmsport="8080" type="mms" user="telecable" password="telecable" authtype="0"></apn>
-      <apn mcc="214" mnc="18" carrier="ONO MMS" apn="mms.ono.com" mmsc="http://mms.ono.com" mmsproxy="10.126.0.50" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="214" mnc="18" carrier="ONO MMS" apn="mms.ono.com" mmsc="http://mms.ono.com/" mmsproxy="10.126.0.50" mmsport="8080" type="mms"></apn>
-      <apn mcc="214" mnc="18" carrier="ONO MMS" apn="mms.ono.com" mmsc="http://mms.ono.com/" mmsproxy="10.126.0.50" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="214" mnc="19" carrier="KPN" apn="gprs-service.com" mmsc="http://217.18.32.180:8080" mmsproxy="217.18.32.181" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="214" mnc="19" carrier="Simyo Internet" apn="gprs-service.com" mmsc="http://217.18.32.180:8080" mmsproxy="217.18.32.181" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="214" mnc="19" carrier="Simyo Internet" apn="gprs-service.com" mmsc="http://217.18.32.180:8080" mmsproxy="217.18.32.181" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="214" mnc="21" carrier="Jazztel MMS" apn="jazzmms" mmsc="http://jazztelmms.com/servlets/mms" mmsproxy="37.132.0.10" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="214" mnc="21" carrier="Jazztel MMS" apn="jazzmms" mmsc="http://jazztelmms.com/servlets/mms/" mmsproxy="37.132.0.10" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="214" mnc="21" carrier="MMS" apn="jazzmms" mmsc="http://jazztelmms.com:8081" mmsproxy="217.18.32.183" mmsport="8081" type="mms" authtype="0"></apn>
-      <apn mcc="216" mnc="01" carrier="Djuice MMS" apn="mms" mmsc="http://mmsc.pgsm.hu/" mmsproxy="84.225.255.1" mmsport="8080" type="mms" authtype="0" mvno_match_data="Djuice" mvno_type="spn"></apn>
-      <apn mcc="216" mnc="01" carrier="Telenor MMS" apn="mms" mmsc="http://mmsc.telenor.hu/" mmsproxy="84.225.255.1" mmsport="8080" type="mms"></apn>
-      <apn mcc="216" mnc="1" carrier="Telenor HU MMS" apn="mms" mmsc="http://mmsc.telenor.hu" mmsproxy="84.225.255.1" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="216" mnc="1" carrier="Telenor MMS" apn="mms" mmsc="http://mmsc.telenor.hu/" mmsproxy="84.225.255.1" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="216" mnc="30" carrier="T-Mobile H" apn="internet.telekom" mmsc="http://mms.t-mobile.hu/servlets/mms" mmsproxy="212.51.126.10" mmsport="8080" type="default,mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="216" mnc="30" carrier="T-Mobile H MMS" apn="internet.telekom" mmsc="http://mms.t-mobile.hu/servlets/mms" mmsproxy="212.51.126.10" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="216" mnc="30" carrier="T-Mobile MMS" apn="mms" mmsc="http://mms.t-mobile.hu/servlets/mms" mmsproxy="212.51.126.10" mmsport="8080" type="mms" user="mms" password="mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="216" mnc="70" carrier="Vodafone MMS" apn="mms.vodafone.net" mmsc="http://mms.vodafone.hu/servlets/mms" mmsproxy="80.244.97.2" mmsport="8080" type="mms" mvno_match_data="21670xx1xxx" mvno_type="imsi"></apn>
-      <apn mcc="216" mnc="70" carrier="Vodafone MMS" apn="mms.vodafone.net" mmsc="http://mms.vodafone.hu/servlets/mms" mmsproxy="80.244.97.2" mmsport="8080" type="mms" authtype="0" mvno_match_data="21670xx2xxx" mvno_type="imsi"></apn>
-      <apn mcc="218" mnc="03" carrier="Ht Eronet MMS" apn="mms.eronet.ba" mmsc="http://mms.gprs.eronet.ba/mms/wapenc" mmsproxy="10.12.3.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="218" mnc="3" carrier="Eronet BH MMS" apn="mms.eronet.ba" mmsc="http://mms.gprs.eronet.ba/mms/wapenc" mmsproxy="10.12.3.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="218" mnc="3" carrier="Ht Eronet MMS" apn="mms.eronet.ba" mmsc="http://mms.gprs.eronet.ba/mms/wapenc" mmsproxy="10.12.3.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="218" mnc="05" carrier="mtelmms" apn="mtelmms" mmsc="http://mmsc.mtel.ba/mms/wapenc" mmsproxy="192.168.61.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="218" mnc="5" carrier="mtel MMS" apn="mtelmms" mmsc="http://mmsc.mtel.ba/mms/wapenc" mmsproxy="192.168.61.11" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="218" mnc="5" carrier="mtelmms" apn="mtelmms" mmsc="http://mmsc.mtel.ba/mms/wapenc" mmsproxy="192.168.61.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="218" mnc="90" carrier="BH Mobile MMS" apn="mms.bhmobile.ba" mmsc="http://mms.bhmobile.ba/cmmsc/post" mmsproxy="195.222.56.41" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="218" mnc="90" carrier="BHMobileMMS" apn="mms.bhmobile.ba" mmsc="http://mms.bhmobile.ba/cmmsc/post" mmsproxy="195.222.56.41" mmsport="8080" type="mms"></apn>
-      <apn mcc="218" mnc="90" carrier="BHMobileMMS" apn="mms.bhmobile.ba" mmsc="http://mms.bhmobile.ba/cmmsc/post" mmsproxy="195.222.56.41" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="219" mnc="01" carrier="T-Mobile MMS" apn="mms.htgprs" mmsc="http://mms.t-mobile.hr/servlets/mms" mmsproxy="10.12.0.4" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="219" mnc="01" carrier="bonbon MMS" apn="mms.htgprs" mmsc="http://mms.bonbon.com.hr/servlets/mms" mmsproxy="10.12.0.4" mmsport="8080" type="mms" authtype="1" mvno_match_data="bonbon" mvno_type="spn"></apn>
-      <apn mcc="219" mnc="1" carrier="MMS" apn="mms.htgprs" mmsc="http://mms.t-mobile.hr/servlets/mms" mmsproxy="10.12.0.4" mmsport="8080" type="mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="219" mnc="1" carrier="T-Mobile MMS" apn="mms.htgprs" mmsc="http://mms.t-mobile.hr/servlets/mms" mmsproxy="10.12.0.4" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="219" mnc="02" carrier="Tele2" apn="internet.tele2.hr" mmsc="http://mmsc.tele2.hr" mmsproxy="193.12.40.66" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="219" mnc="2" carrier="TELE2" apn="internet.tele2.hr" mmsc="http://mmsc.tele2.hr" mmsproxy="193.12.40.66" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="219" mnc="2" carrier="Tele2" apn="internet.tele2.hr" mmsc="http://mmsc.tele2.hr" mmsproxy="193.12.40.66" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="219" mnc="10" carrier="HR VIP mms" apn="mms.vipnet.hr" mmsc="http://mms.vipnet.hr/servlets/mms" mmsproxy="212.91.99.91" mmsport="8080" type="mms" user="38591" password="38591" authtype="0"></apn>
-      <apn mcc="219" mnc="10" carrier="VIP.mms" apn="mms.vipnet.hr" mmsc="http://mms.vipnet.hr/servlets/mms" mmsproxy="212.91.99.91" mmsport="8080" type="mms"></apn>
-      <apn mcc="219" mnc="10" carrier="VIP.mms" apn="mms.vipnet.hr" mmsc="http://mms.vipnet.hr/servlets/mms" mmsproxy="212.91.99.91" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="220" mnc="01" carrier="Telenor MMS" apn="mms" mmsc="http://mms.telenor.rs/servlets/mms" mmsproxy="217.65.192.33" mmsport="8080" type="mms"></apn>
-      <apn mcc="220" mnc="1" carrier="Telenor MMS" apn="mms" mmsc="http://mms.telenor.rs/servlets/mms" mmsproxy="217.65.192.33" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="220" mnc="1" carrier="Telenor SRB MMS" apn="mms" mmsc="http://mms.telenor.rs/servlets/mms" mmsproxy="217.65.192.33" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="220" mnc="02" carrier="Telenor MNE mms" apn="mms" mmsc="http://mm.vor.telenor.me" mmsproxy="192.168.246.5" mmsport="8080" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="220" mnc="2" carrier="Telenor MNE mms" apn="mms" mmsc="http://mm.vor.telenor.me" mmsproxy="192.168.246.5" mmsport="8080" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="220" mnc="03" carrier="mt:s mms" apn="mms" mmsc="http://mms.mts064.telekom.rs/mms/wapenc" mmsproxy="172.17.85.131" mmsport="8080" type="mms" user="mts" password="064" authtype="1"></apn>
-      <apn mcc="220" mnc="3" carrier="MTS MMS RS" apn="mms" mmsc="http://mms.mts064.telekom.rs/mms/wapenc" mmsproxy="172.17.85.131" mmsport="8080" type="mms" user="mts" password="064" authtype="0"></apn>
-      <apn mcc="220" mnc="04" carrier="T-Mobile MMS" apn="mms" mmsc="http://192.168.180.100/servlets/mms" mmsproxy="10.0.5.19" mmsport="8080" type="mms" user="38267" password="38267"></apn>
-      <apn mcc="220" mnc="05" carrier="Vip MMS" apn="vipmobile.mms" mmsc="http://mmsc.vipmobile.rs" mmsproxy="212.15.182.82" mmsport="8080" type="mms" user="vipmobile" password="vipmobile" authtype="1"></apn>
-      <apn mcc="220" mnc="5" carrier="Vip SRB MMS" apn="vipmobile.mms" mmsc="http://mmsc.vipmobile.rs" mmsproxy="212.15.182.82" mmsport="8080" type="mms" user="vipmobile" password="vipmobile" authtype="0"></apn>
-      <apn mcc="222" mnc="01" carrier="MMS" apn="mms.iusacellgsm.mx" mmsc="http://mms.iusacell3g.com/" type="mms" user="mmsiusacellgsm" password="mmsiusacellgsm" authtype="0" mvno_match_data="IUSACELL" mvno_type="spn"></apn>
-      <apn mcc="222" mnc="01" carrier="MMS" apn="mms.iusacellgsm.mx" mmsc="http://mms.iusacell3g.com/" type="mms" user="mmsiusacellgsm" password="mmsiusacellgsm" authtype="0" mvno_match_data="UNEFON" mvno_type="spn"></apn>
-      <apn mcc="222" mnc="01" carrier="MMS" apn="mms.windmobile.ca" mmsc="http://mms.windmobile.ca" mmsproxy="74.115.197.70" mmsport="8080" type="mms" mvno_match_data="FFFFFF00" mvno_type="gid"></apn>
-      <apn mcc="222" mnc="01" carrier="NOVERCA MMS" apn="mms.noverca.it" mmsc="http://mms.noverca.it/" mmsproxy="213.230.130.89" mmsport="80" type="mms" authtype="0" mvno_match_data="Noverca" mvno_type="spn"></apn>
-      <apn mcc="222" mnc="01" carrier="TIM MMS" apn="unico.tim.it" mmsc="http://mms.tim.it/servlets/mms" mmsproxy="213.230.130.89" mmsport="80" type="mms"></apn>
-      <apn mcc="222" mnc="1" carrier="TIM MMS" apn="unico.tim.it" mmsc="http://mms.tim.it/servlets/mms" mmsproxy="213.230.130.89" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="222" mnc="10" carrier="MMS Vodafone" apn="mms.vodafone.it" mmsc="http://mms.vodafone.it/servlets/mms" mmsproxy="10.128.224.10" mmsport="80" type="mms"></apn>
-      <apn mcc="222" mnc="10" carrier="MMS Vodafone" apn="mms.vodafone.it" mmsc="http://mms.vodafone.it/servlets/mms" mmsproxy="10.128.224.10" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="222" mnc="10" carrier="PosteMobile MMS" apn="mms.postemobile.it" mmsc="http://mms.postemobile.it/servlets/mms" mmsproxy="10.128.224.10" mmsport="80" type="mms" authtype="0" mvno_match_data="PosteMobile" mvno_type="spn"></apn>
-      <apn mcc="222" mnc="88" carrier="MMS" apn="mms.windmobile.ca" mmsc="http://mms.windmobile.ca" mmsproxy="74.115.197.70" mmsport="8080" type="mms" mvno_match_data="FFFFFF00" mvno_type="gid"></apn>
-      <apn mcc="222" mnc="88" carrier="MMS WIND" apn="mms.wind" mmsc="http://mms.wind.it" mmsproxy="212.245.244.100" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="222" mnc="88" carrier="WIND MMS" apn="mms.wind" mmsc="http://mms.wind.it" mmsproxy="212.245.244.100" mmsport="8080" type="mms"></apn>
-      <apn mcc="222" mnc="88" carrier="WIND MMS" apn="mms.wind" mmsc="http://mms.wind.it" mmsproxy="212.245.244.100" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="222" mnc="99" carrier="3" apn="tre.it" mmsc="http://10.216.59.240:10021/mmsc" mmsproxy="62.13.171.3" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="222" mnc="99" carrier="3" apn="tre.it" mmsc="http://10.216.59.240:10021/mmsc" mmsproxy="62.13.171.3" mmsport="8799" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="222" mnc="99" carrier="3 ITA" apn="tre.it" mmsc="http://10.216.59.240:10021/mmsc" mmsproxy="62.13.171.3" mmsport="8799" type="default,mms" authtype="0" port="80"></apn>
-      <apn mcc="222" mnc="99" carrier="Fastweb" apn="apn.fastweb.it" mmsc="http://mms.fastweb.it/mms/wapenc" mmsproxy="10.0.65.9" mmsport="8080" type="default,mms" authtype="0" mvno_match_data="FASTWEB" mvno_type="spn" port="80"></apn>
-      <apn mcc="222" mnc="99" carrier="Fastweb WEB" apn="apn.fastweb.it" mmsc="http://mms.fastweb.it/mms/wapenc" mmsproxy="10.0.65.9" mmsport="8080" type="default,supl,mms" mvno_match_data="FASTWEB" mvno_type="spn"></apn>
-      <apn mcc="222" mnc="99" carrier="Fastweb WEB" apn="apn.fastweb.it" mmsc="http://mms.fastweb.it/mms/wapenc" mmsproxy="10.0.65.9" mmsport="8080" type="default,supl,mms" authtype="0" mvno_match_data="FASTWEB" mvno_type="spn"></apn>
-      <apn mcc="226" mnc="01" carrier="Vodafone MMS" apn="mms.vodafone.ro" mmsc="http://multimedia/servlets/mms" mmsproxy="193.230.161.231" mmsport="8080" type="mms" user="mms" password="vodafone" authtype="1"></apn>
-      <apn mcc="226" mnc="1" carrier="Vodafone MMS" apn="mms.vodafone.ro" mmsc="http://multimedia/servlets/mms" mmsproxy="193.230.161.231" mmsport="8080" type="mms" user="mms" password="vodafone" authtype="1"></apn>
-      <apn mcc="226" mnc="1" carrier="Vodafone RO MMS" apn="mms.vodafone.ro" mmsc="http://multimedia/servlets/mms" mmsproxy="193.230.161.231" mmsport="8080" type="mms" user="mms" password="vodafone" authtype="0"></apn>
-      <apn mcc="226" mnc="03" carrier="Cosmote MMS" apn="mms" mmsc="http://mmsc1.mms.cosmote.ro:8002" mmsproxy="10.252.1.62" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="226" mnc="3" carrier="Cosmote MMS" apn="mms" mmsc="http://mmsc1.mms.cosmote.ro:8002" mmsproxy="10.252.1.62" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="226" mnc="3" carrier="Cosmote MMS" apn="mms" mmsc="http://mmsc1.mms.cosmote.ro:8002" mmsproxy="10.252.1.62" mmsport="8080" type="mms" user="mms" password="mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="226" mnc="05" carrier="MMS" apn="mms" mmsc="http://10.10.3.133:8002" mmsproxy="10.10.3.130" mmsport="8080" type="mms"></apn>
-      <apn mcc="226" mnc="5" carrier="MMS" apn="mms" mmsc="http://10.10.3.133:8002" mmsproxy="10.10.3.130" mmsport="8080" type="mms"></apn>
-      <apn mcc="226" mnc="06" carrier="Cosmote MMS" apn="mms" mmsc="http://mmsc1.mms.cosmote.ro:8002" mmsproxy="10.252.1.62" mmsport="8080" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="226" mnc="6" carrier="Cosmote MMS" apn="mms" mmsc="http://mmsc1.mms.cosmote.ro:8002" mmsproxy="10.252.1.62" mmsport="8080" type="mms" user="mms" password="mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="226" mnc="6" carrier="Cosmote MMS" apn="mms" mmsc="http://mmsc1.mms.cosmote.ro:8002" mmsproxy="10.252.1.62" mmsport="8080" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="226" mnc="10" carrier="ORANGE RO MMS" apn="mms" mmsc="http://wap.mms.orange.ro:8002" mmsproxy="62.217.247.252" mmsport="8799" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="226" mnc="10" carrier="Orange MMS" apn="mms" mmsc="http://wap.mms.orange.ro:8002" mmsproxy="62.217.247.252" mmsport="8799" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="228" mnc="01" carrier="Swisscom MMS" apn="event.swisscom.ch" mmsc="http://mms.natel.ch:8079" mmsproxy="192.168.210.2" mmsport="8080" type="mms"></apn>
-      <apn mcc="228" mnc="1" carrier="Swisscom MMS" apn="event.swisscom.ch" mmsc="http://mms.natel.ch:8079" mmsproxy="192.168.210.2" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="228" mnc="1" carrier="Swisscom MMS (CH)" apn="event.swisscom.ch" mmsc="http://mms.natel.ch:8079" mmsproxy="192.168.210.2" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="228" mnc="02" carrier="Sunrise MMS" apn="mms.sunrise.ch" mmsc="http://mmsc.sunrise.ch" mmsproxy="212.35.34.75" mmsport="8080" type="mms"></apn>
-      <apn mcc="228" mnc="2" carrier="Sunrise MMS" apn="mms.sunrise.ch" mmsc="http://mmsc.sunrise.ch" mmsproxy="212.35.34.75" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="228" mnc="2" carrier="Sunrise MMS (CH)" apn="mms.sunrise.ch" mmsc="http://mmsc.sunrise.ch" mmsproxy="212.35.34.75" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="228" mnc="03" carrier="Orange MMS" apn="mms" mmsc="http://192.168.151.3:8002" mmsproxy="192.168.151.2" mmsport="8080" type="mms"></apn>
-      <apn mcc="228" mnc="3" carrier="Orange MMS" apn="mms" mmsc="http://192.168.151.3:8002" mmsproxy="192.168.151.2" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="228" mnc="3" carrier="Orange MMS (CH)" apn="mms" mmsc="http://192.168.151.3:8002" mmsproxy="192.168.151.2" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="230" mnc="01" carrier="T-Mobile CZ" apn="internet.t-mobile.cz" mmsc="http://mms" mmsproxy="010.000.000.010" mmsport="80" type="default,supl"></apn>
-      <apn mcc="230" mnc="01" carrier="T-Mobile CZ MMS" apn="mms.t-mobile.cz" mmsc="http://mms" mmsproxy="010.000.000.010" mmsport="80" type="mms"></apn>
-      <apn mcc="230" mnc="01" carrier="T-Mobile MMS" apn="mms.t-mobile.cz" mmsc="http://mms" mmsproxy="10.0.0.10" mmsport="80" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="230" mnc="1" carrier="T-Mobile MMS" apn="mms.t-mobile.cz" mmsc="http://mms" mmsproxy="10.0.0.10" mmsport="80" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="230" mnc="1" carrier="T-Mobile MMS" apn="mms.t-mobile.cz" mmsc="http://mms" mmsproxy="10.0.0.10" mmsport="80" type="mms" user="mms" password="mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="230" mnc="02" carrier="O2 MMS" apn="mms" mmsc="http://mms.o2active.cz:8002" mmsproxy="160.218.160.218" mmsport="8080" type="mms"></apn>
-      <apn mcc="230" mnc="2" carrier="O2 MMS" apn="mms" mmsc="http://mms.o2active.cz:8002" mmsproxy="160.218.160.218" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="230" mnc="03" carrier="MMS" apn="mms" mmsc="http://mms" mmsproxy="10.11.10.111" mmsport="80" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="230" mnc="03" carrier="Vodafone MMS" apn="mms" mmsc="http://mms" mmsproxy="10.11.10.111" mmsport="80" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="230" mnc="3" carrier="MMS" apn="mms" mmsc="http://mms" mmsproxy="10.11.10.111" mmsport="80" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="230" mnc="3" carrier="Vodafone CZ mms" apn="mms" mmsc="http://mms" mmsproxy="10.11.10.111" mmsport="80" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="231" mnc="01" carrier="Orange SK MMS" apn="mms" mmsc="http://imms.orange.sk" mmsproxy="213.151.208.145" mmsport="8799" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="231" mnc="1" carrier="Orange  MMS" apn="mms" mmsc="http://imms.orange.sk" mmsproxy="213.151.208.145" mmsport="8799" type="mms" user="wap" password="wap" authtype="0"></apn>
-      <apn mcc="231" mnc="1" carrier="Orange SK MMS" apn="mms" mmsc="http://imms.orange.sk" mmsproxy="213.151.208.145" mmsport="8799" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="231" mnc="02" carrier="T-Mobile MMS" apn="mms" mmsc="http://mms" mmsproxy="192.168.1.1" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="231" mnc="2" carrier="T-Mobile MMS" apn="mms" mmsc="http://mms" mmsproxy="192.168.1.1" mmsport="8080" type="mms" user="mms" password="mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="231" mnc="06" carrier="O2 MMS" apn="o2mms" mmsc="http://mms.o2world.sk:8002" mmsproxy="10.97.1.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="231" mnc="6" carrier="O2 MMS" apn="o2mms" mmsc="http://mms.o2world.sk:8002" mmsproxy="10.97.1.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="231" mnc="6" carrier="O2-SK mms" apn="o2mms" mmsc="http://mms.o2world.sk:8002" mmsproxy="10.97.1.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="232" mnc="01" carrier="A1 MMS" apn="free.a1.net" mmsc="http://mmsc.a1.net" mmsproxy="194.48.124.71" mmsport="8001" type="mms" user="ppp@a1plus.at" password="ppp" authtype="1"></apn>
-      <apn mcc="232" mnc="1" carrier="MMS Account" apn="free.A1.net" mmsc="http://mmsc.A1.net" mmsproxy="194.48.124.85" mmsport="8001" type="mms" user="ppp@A1plus.at" password="ppp" authtype="2" server="*"></apn>
-      <apn mcc="232" mnc="03" carrier="T-Mobile A" apn="gprsinternet" mmsc="http://mmsc.t-mobile.at/servlets/mms" mmsproxy="010.012.000.020" mmsport="80" type="default,supl"></apn>
-      <apn mcc="232" mnc="03" carrier="T-Mobile A MMS" apn="gprsmms" mmsc="http://mmsc.t-mobile.at/servlets/mms" mmsproxy="010.012.000.020" mmsport="80" type="mms"></apn>
-      <apn mcc="232" mnc="03" carrier="T-Mobile MMS" apn="gprsmms" mmsc="http://mmsc.t-mobile.at/servlets/mms" mmsproxy="10.12.0.20" mmsport="80" type="mms" user="t-mobile" password="tm" authtype="1"></apn>
-      <apn mcc="232" mnc="3" carrier="T-Mobile MMS" apn="gprsmms" mmsc="http://mmsc.t-mobile.at/servlets/mms" mmsproxy="10.12.0.20" mmsport="80" type="mms" user="t-mobile" password="tm" authtype="1"></apn>
-      <apn mcc="232" mnc="3" carrier="T-Mobile MMS" apn="gprsmms" mmsc="http://mmsc.t-mobile.at/servlets/mms" mmsproxy="10.12.0.20" mmsport="80" type="mms" user="t-mobile" password="tm" authtype="1" protocol="IP"></apn>
-      <apn mcc="232" mnc="05" carrier="Planet 3" apn="drei.at" mmsc="http://mmsc" mmsproxy="213.94.78.133" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="232" mnc="5" carrier="Orange MMS (AT)" apn="orange.mms" mmsc="http://mmsc.orange.at/mms/wapenc" mmsproxy="194.24.128.118" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="232" mnc="5" carrier="Planet 3" apn="drei.at" mmsc="http://mmsc" mmsproxy="213.94.78.133" mmsport="8799" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="232" mnc="07" carrier="tele.ring mms" apn="mms" mmsc="http://relay.mms.telering.at" mmsproxy="212.95.31.50" mmsport="80" type="mms" user="wap@telering.at" password="wap" authtype="1"></apn>
-      <apn mcc="232" mnc="7" carrier="telering mms" apn="mms" mmsc="http://relay.mms.telering.at" mmsproxy="212.95.31.50" mmsport="80" type="mms" user="wap@telering.at" password="wap" authtype="1" protocol="IP"></apn>
-      <apn mcc="232" mnc="10" carrier="3 AT" apn="drei.at" mmsc="http://mmsc" mmsproxy="213.94.78.133" mmsport="8799" type="default,mms" authtype="0"></apn>
-      <apn mcc="232" mnc="10" carrier="Planet3" apn="drei.at" mmsc="http://mmsc" mmsproxy="213.94.78.133" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="232" mnc="10" carrier="Planet3" apn="drei.at" mmsc="http://mmsc" mmsproxy="213.94.78.133" mmsport="8799" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="232" mnc="11" carrier="data.bob MMS" apn="mms.bob.at" mmsc="http://mmsc.bob.at" mmsproxy="194.48.124.7" mmsport="8001" type="mms" user="data@bob.at" password="ppp" authtype="1"></apn>
-      <apn mcc="232" mnc="11" carrier="data.bob mms" apn="mms.bob.at" mmsc="http://mmsc.bob.at" mmsproxy="194.48.124.7" mmsport="8001" type="mms" user="data@bob.at" password="ppp" authtype="0"></apn>
-      <apn mcc="234" mnc="02" carrier="O2 MMS Postpay" apn="wap.o2.co.uk" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="mms" user="o2wap" password="password"></apn>
-      <apn mcc="234" mnc="02" carrier="O2 MMS Prepay" apn="payandgo.o2.co.uk" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="mms" user="payandgo" password="password"></apn>
-      <apn mcc="234" mnc="08" carrier="BT One Phone MMS" apn="mms.btonephone.com" mmsc="http://MMSC/" mmsproxy="proxy.btonephone.com" mmsport="8080" type="mms" mvno_match_data="B2" mvno_type="gid"></apn>
-      <apn mcc="234" mnc="10" carrier="O2 MMS" apn="wap.o2.co.uk" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="mms" user="o2wap" password="password" authtype="0"></apn>
-      <apn mcc="234" mnc="10" carrier="O2 MMS" apn="wap.o2.co.uk" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="mms" user="o2wap" password="password" authtype="1"></apn>
-      <apn mcc="234" mnc="10" carrier="O2 Pay &amp; Go" apn="payandgo.o2.co.uk" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="default,mms" user="payandgo" password="password" authtype="0"></apn>
-      <apn mcc="234" mnc="10" carrier="O2 Pay &amp; Go" apn="payandgo.o2.co.uk" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="default,supl,mms" user="payandgo" password="password" proxy="82.132.254.1" port="8080"></apn>
-      <apn mcc="234" mnc="10" carrier="O2 Pay &amp; Go" apn="payandgo.o2.co.uk" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="default,supl,mms" user="payandgo" password="password" authtype="3" proxy="82.132.254.1" port="8080"></apn>
-      <apn mcc="234" mnc="10" carrier="TESCO" apn="prepay.tesco-mobile.com" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="default,supl,mms" user="tescowap" password="password" authtype="1" mvno_match_data="0A" mvno_type="gid" proxy="193.113.200.195" port="8080"></apn>
-      <apn mcc="234" mnc="10" carrier="Tesco Mobile" apn="prepay.tesco-mobile.com" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="default,mms" user="tescowap" password="password" authtype="1" mvno_match_data="TESCO" mvno_type="spn"></apn>
-      <apn mcc="234" mnc="10" carrier="giffgaff" apn="giffgaff.com" mmsc="http://mmsc.mediamessaging.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" user="giffgaff" password="password" authtype="1" mvno_match_data="giffgaff" mvno_type="spn"></apn>
-      <apn mcc="234" mnc="11" carrier="O2 MMS Postpay" apn="wap.o2.co.uk" mmsc="http://mmsc.mms.02.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="mms" user="o2wap" password="password"></apn>
-      <apn mcc="234" mnc="11" carrier="O2 MMS Postpay" apn="wap.o2.co.uk" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="mms" user="o2wap" password="password"></apn>
-      <apn mcc="234" mnc="11" carrier="O2 MMS Prepay" apn="payandgo.o2.co.uk" mmsc="http://mmsc.mms.02.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="mms" user="payandgo" password="password"></apn>
-      <apn mcc="234" mnc="11" carrier="O2 MMS Prepay" apn="payandgo.o2.co.uk" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="82.132.254.1" mmsport="8080" type="mms" user="payandgo" password="password"></apn>
-      <apn mcc="234" mnc="15" carrier="ASDA Mobile" apn="asdamobiles.co.uk" mmsc="http://mms.asdamobiles.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,mms" user="wap" password="wap" authtype="0" mvno_match_data="ASDA Mobile" mvno_type="spn"></apn>
-      <apn mcc="234" mnc="15" carrier="ASDA WAP" apn="asdamobiles.co.uk" mmsc="http://mms.asdamobiles.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,supl,mms" user="wap" password="wap" authtype="1" mvno_match_data="A0" mvno_type="gid" proxy="212.183.137.12" port="8799"></apn>
-      <apn mcc="234" mnc="15" carrier="BT Mobile" apn="btmobile.bt.com" mmsc="http://mms.bt.com/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" user="bt" password="bt" authtype="1" mvno_match_data="B3" mvno_type="gid"></apn>
-      <apn mcc="234" mnc="15" carrier="Contract WAP" apn="wap.vodafone.co.uk" mmsc="http://mms.vodafone.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,mms" user="wap" password="wap" authtype="0"></apn>
-      <apn mcc="234" mnc="15" carrier="Lebara Internet" apn="uk.lebara.mobi" mmsc="http://mms.lebara.co.uk/servlets/mms" mmsproxy="212.183.137.012" mmsport="8799" type="default,supl,mms" user="wap" password="wap" authtype="1" mvno_match_data="Lebara" mvno_type="spn"></apn>
-      <apn mcc="234" mnc="15" carrier="PAYG WAP" apn="pp.vodafone.co.uk" mmsc="http://mms.vodafone.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,mms" user="wap" password="wap" authtype="0"></apn>
-      <apn mcc="234" mnc="15" carrier="Sainsbury&#39;s PAYG" apn="payg.mobilebysainsburys.co.uk" mmsc="http://mms.mobilebysainsburys.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" authtype="1" mvno_match_data="Sainsbury&#39;s" mvno_type="spn"></apn>
-      <apn mcc="234" mnc="15" carrier="TalkTalk" apn="mobile.talktalk.co.uk" mmsc="http://mms.talktalk.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,mms" user="wap" password="wap" authtype="0" mvno_match_data="TalkTalk" mvno_type="spn"></apn>
-      <apn mcc="234" mnc="15" carrier="TalkTalk WAP" apn="mobile.talktalk.co.uk" mmsc="http://mms.talktalk.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,supl,mms" mvno_match_data="70" mvno_type="gid"></apn>
-      <apn mcc="234" mnc="15" carrier="TalkTalk WAP" apn="mobile.talktalk.co.uk" mmsc="http://mms.talktalk.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,supl,mms" authtype="0" mvno_match_data="70" mvno_type="gid"></apn>
-      <apn mcc="234" mnc="15" carrier="Talkmob Internet" apn="talkmobile.co.uk" mmsc="http://mms.talkmobile.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,mms" password="wap" authtype="0" mvno_match_data="Talkmobile" mvno_type="spn"></apn>
-      <apn mcc="234" mnc="15" carrier="Talkmob PAYG Int" apn="payg.talkmobile.co.uk" mmsc="http://mms.talkmobile.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,mms" password="wap" authtype="0" mvno_match_data="Talkmobile" mvno_type="spn"></apn>
-      <apn mcc="234" mnc="15" carrier="Talkmob PAYG WAP" apn="payg.talkmobile.co.uk" mmsc="http://mms.talkmobile.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,supl,mms" user="wap" password="wap" authtype="1" mvno_match_data="C1" mvno_type="gid" proxy="212.183.137.12" port="8799"></apn>
-      <apn mcc="234" mnc="15" carrier="Talkmob WAP" apn="talkmobile.co.uk" mmsc="http://mms.talkmobile.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,supl,mms" user="wap" password="wap" authtype="1" mvno_match_data="C1" mvno_type="gid" proxy="212.183.137.12" port="8799"></apn>
-      <apn mcc="234" mnc="15" carrier="Vodafone UK" apn="wap.vodafone.co.uk" mmsc="http://mms.vodafone.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,supl,mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="234" mnc="15" carrier="Vodafone UK Prepay" apn="pp.vodafone.co.uk" mmsc="http://mms.vodafone.co.uk/servlets/mms" mmsproxy="212.183.137.12" mmsport="8799" type="default,supl,mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="234" mnc="20" carrier="3" apn="three.co.uk" mmsc="http://mms.um.three.co.uk:10021/mmsc" mmsproxy="mms.three.co.uk" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="234" mnc="20" carrier="3" apn="three.co.uk" mmsc="http://mms.um.three.co.uk:10021/mmsc" mmsproxy="mms.three.co.uk" mmsport="8799" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="234" mnc="20" carrier="3 UK" apn="three.co.uk" mmsc="http://mms.um.three.co.uk:10021/mmsc" mmsproxy="217.171.129.2" mmsport="8799" type="default,mms" authtype="0"></apn>
-      <apn mcc="234" mnc="30" carrier="BT MMS" apn="mms.bt.com" mmsc="http://MMS/" mmsproxy="149.254.201.135" mmsport="8080" type="mms" user="bt" password="bt" authtype="1" mvno_match_data="B3" mvno_type="gid"></apn>
-      <apn mcc="234" mnc="30" carrier="BT MMS" apn="mms.bt.com" mmsc="http://MMS/" mmsproxy="149.254.201.135" mmsport="8080" type="mms" user="bt" password="bt" authtype="1" mvno_match_data="C3" mvno_type="gid"></apn>
-      <apn mcc="234" mnc="30" carrier="BT One Phone MMS" apn="mms.btonephone.com" mmsc="http://MMSC/" mmsproxy="proxy.btonephone.com" mmsport="8080" type="mms" mvno_match_data="B2" mvno_type="gid"></apn>
-      <apn mcc="234" mnc="30" carrier="EE MMS" apn="eezone" mmsc="http://mms/" mmsproxy="149.254.201.135" mmsport="8080" type="mms" user="eesecure" password="secure" authtype="1"></apn>
-      <apn mcc="234" mnc="30" carrier="MMS" apn="eezone" mmsc="http://mms/" mmsproxy="149.254.201.135" mmsport="8080" type="mms" user="eesecure" password="secure" authtype="1"></apn>
-      <apn mcc="234" mnc="30" carrier="T-Mobile UK" apn="general.t-mobile.uk" mmsc="http://mmsc.t-mobile.co.uk:8002" mmsproxy="149.254.201.135" mmsport="8080"></apn>
-      <apn mcc="234" mnc="30" carrier="Virgin Media Mobile Internet" apn="goto.virginmobile.uk" mmsc="http://mms.virginmobile.co.uk:8002" mmsproxy="193.30.166.2" mmsport="8080" type="default,mms" user="user" authtype="0" mvno_match_data="Virgin" mvno_type="spn"></apn>
-      <apn mcc="234" mnc="30" carrier="Virgin Media Mobile Internet" apn="goto.virginmobile.uk" mmsc="http://mms.virginmobile.co.uk:8002" mmsproxy="193.30.166.2" mmsport="8080" type="default,supl,mms" user="user" authtype="1" mvno_match_data="28" mvno_type="gid"></apn>
-      <apn mcc="234" mnc="31" carrier="EE MMS" apn="eezone" mmsc="http://mms/" mmsproxy="149.254.201.135" mmsport="8080" type="mms" user="eesecure" password="secure" authtype="1"></apn>
-      <apn mcc="234" mnc="32" carrier="EE MMS" apn="eezone" mmsc="http://mms/" mmsproxy="149.254.201.135" mmsport="8080" type="mms" user="eesecure" password="secure" authtype="1"></apn>
-      <apn mcc="234" mnc="33" carrier="EE MMS" apn="eezone" mmsc="http://mms/" mmsproxy="149.254.201.135" mmsport="8080" type="mms" user="eesecure" password="secure" authtype="1"></apn>
-      <apn mcc="234" mnc="33" carrier="MMS" apn="eezone" mmsc="http://mms/" mmsproxy="149.254.201.135" mmsport="8080" type="mms" user="eesecure" password="secure" authtype="1"></apn>
-      <apn mcc="234" mnc="33" carrier="MMS" apn="tslmms" mmsc="http://mms/" mmsproxy="193.35.133.194" mmsport="8080" type="mms" user="wap" password="wap" authtype="1" mvno_match_data="LIFE" mvno_type="spn"></apn>
-      <apn mcc="234" mnc="34" carrier="EE MMS" apn="eezone" mmsc="http://mms/" mmsproxy="149.254.201.135" mmsport="8080" type="mms" user="eesecure" password="secure" authtype="1"></apn>
-      <apn mcc="234" mnc="50" carrier="Jersey Telecom" apn="mms" mmsc="http://mms.surfmail.com/mmsc" mmsproxy="212.9.19.199" mmsport="3130" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="234" mnc="55" carrier="Sure Picture Messaging" apn="mms" mmsc="http://mmsc.gprs.cw.com/" mmsproxy="10.0.3.101" mmsport="80" type="mms"></apn>
-      <apn mcc="234" mnc="58" carrier="Manx Telecom Contract MMS" apn="mms.manxpronto.net" mmsc="http://mms.manxpronto.net:8002" mmsproxy="195.10.99.46" mmsport="8080" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="234" mnc="58" carrier="Manx Telecom Prepay MMS" apn="mms.prontogo.net" mmsc="http://mms.manxpronto.net:8002" mmsproxy="195.10.99.41" mmsport="8080" type="mms" user="mmsgo" password="mmsgo"></apn>
-      <apn mcc="234" mnc="86" carrier="EE MMS" apn="eezone" mmsc="http://mms/" mmsproxy="149.254.201.135" mmsport="8080" type="mms" user="eesecure" password="secure" authtype="1"></apn>
-      <apn mcc="235" mnc="94" carrier="3" apn="three.co.uk" mmsc="http://mms.um.three.co.uk:10021/mmsc" mmsproxy="mms.three.co.uk" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="238" mnc="01" carrier="DK TDC mms" apn="mms" mmsc="http://192.168.241.114:8002" mmsproxy="194.182.251.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="238" mnc="01" carrier="TDC MMS" apn="mms" mmsc="http://mmsc.tdc.dk:8002" mmsproxy="194.182.251.15" mmsport="8080" type="mms" mvno_match_data="2380101xxxxxxxx" mvno_type="imsi"></apn>
-      <apn mcc="238" mnc="01" carrier="Telmore MMS" apn="mms" mmsc="http://192.168.241.114:8002" mmsproxy="194.182.251.15" mmsport="8080" type="mms" mvno_match_data="TELMORE" mvno_type="spn"></apn>
-      <apn mcc="238" mnc="1" carrier="TDC MMS" apn="mms" mmsc="http://mmsc.tdc.dk:8002" mmsproxy="194.182.251.15" mmsport="8080" type="mms" authtype="0" mvno_match_data="2380101xxxxxxxx" mvno_type="imsi"></apn>
-      <apn mcc="238" mnc="1" carrier="TELMORE MMS" apn="mms" mmsc="http://192.168.241.114:8002" mmsproxy="194.182.251.15" mmsport="8080" type="mms" authtype="0" mvno_match_data="TELMORE" mvno_type="spn"></apn>
-      <apn mcc="238" mnc="02" carrier="BiBoB" apn="mms.bibob.dk" mmsc="http://mms.telenor.dk" mmsproxy="212.88.64.8" mmsport="8080" type="mms" mvno_match_data="BiBoB" mvno_type="spn"></apn>
-      <apn mcc="238" mnc="02" carrier="CBB MMS" apn="telenor" mmsc="http://mms.telenor.dk" mmsproxy="212.88.64.8" mmsport="8080" type="mms" mvno_match_data="CBB Mobil" mvno_type="spn"></apn>
-      <apn mcc="238" mnc="02" carrier="Telenor MMS" apn="telenor" mmsc="http://mms.telenor.dk" mmsproxy="212.88.64.8" mmsport="8080" type="mms"></apn>
-      <apn mcc="238" mnc="2" carrier="Sonofon mms" apn="sonofon" mmsc="http://mms.sonofon.dk" mmsproxy="212.88.64.8" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="238" mnc="2" carrier="Telenor MMS" apn="telenor" mmsc="http://mms.telenor.dk" mmsproxy="212.88.64.8" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="238" mnc="06" carrier="3" apn="data.tre.dk" mmsc="http://mms.3.dk/" mmsproxy="mmsproxy.3.dk" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="238" mnc="6" carrier="3" apn="data.tre.dk" mmsc="http://mms.3.dk/" mmsproxy="mmsproxy.3.dk" mmsport="8799" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="238" mnc="6" carrier="3 DK" apn="data.tre.dk" mmsc="http://mms.3.dk" mmsproxy="172.16.1.25" mmsport="8799" type="default,mms" authtype="0" port="80"></apn>
-      <apn mcc="238" mnc="20" carrier="Call me MMS" apn="mmsSP" mmsc="http://mms.telia.dk" mmsproxy="193.209.134.131" mmsport="8080" type="mms" mvno_match_data="Call me" mvno_type="spn"></apn>
-      <apn mcc="238" mnc="20" carrier="Call me MMS" apn="mmsSP" mmsc="http://mms.telia.dk" mmsproxy="193.209.134.131" mmsport="8080" type="mms" authtype="0" mvno_match_data="Call me" mvno_type="spn"></apn>
-      <apn mcc="238" mnc="20" carrier="Call me MMS" apn="mmssp" mmsc="http://mms.telia.dk" mmsproxy="193.209.134.131" mmsport="80" type="mms" authtype="0" mvno_match_data="Call me" mvno_type="spn"></apn>
-      <apn mcc="238" mnc="20" carrier="DLG MMS" apn="mmssp" mmsc="http://mms.telia.dk" mmsproxy="193.209.134.131" mmsport="80" type="mms" authtype="0" mvno_match_data="DLG" mvno_type="spn"></apn>
-      <apn mcc="238" mnc="20" carrier="DLG Tele MMS" apn="mmsSP" mmsc="http://mms.telia.dk" mmsproxy="193.209.134.131" mmsport="8080" type="mms" mvno_match_data="DLG Tele" mvno_type="spn"></apn>
-      <apn mcc="238" mnc="20" carrier="DLG Tele MMS" apn="mmsSP" mmsc="http://mms.telia.dk" mmsproxy="193.209.134.131" mmsport="8080" type="mms" authtype="0" mvno_match_data="DLG Tele" mvno_type="spn"></apn>
-      <apn mcc="238" mnc="20" carrier="Telia MMS" apn="www.mms.mtelia.dk" mmsc="http://mms.telia.dk" mmsproxy="193.209.134.131" mmsport="8080" type="mms" mvno_match_data="2382010x" mvno_type="imsi"></apn>
-      <apn mcc="238" mnc="20" carrier="Telia MMS" apn="www.mms.mtelia.dk" mmsc="http://mms.telia.dk" mmsproxy="193.209.134.131" mmsport="8080" type="mms" mvno_match_data="2382030x" mvno_type="imsi"></apn>
-      <apn mcc="238" mnc="77" carrier="Telenor MMS" apn="telenor" mmsc="http://mms.telenor.dk" mmsproxy="212.88.64.8" mmsport="8080" type="mms"></apn>
-      <apn mcc="240" mnc="01" carrier="Halebop MMS" apn="mms.telia.se" mmsc="http://mmss" mmsproxy="193.209.134.132" mmsport="80" type="mms" mvno_match_data="240017xxxxxxxxx" mvno_type="imsi"></apn>
-      <apn mcc="240" mnc="01" carrier="Telia MMS" apn="mms.telia.se" mmsc="http://mmss" mmsproxy="193.209.134.132" mmsport="80" type="mms"></apn>
-      <apn mcc="240" mnc="1" carrier="TELIA S mms" apn="mms.telia.se" mmsc="http://mmss/" mmsproxy="193.209.134.132" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="240" mnc="1" carrier="Telia MMS" apn="mms.telia.se" mmsc="http://mmss" mmsproxy="193.209.134.132" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="240" mnc="02" carrier="3" apn="data.tre.se" mmsc="http://mms.tre.se" mmsproxy="mmsproxy.tre.se" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="240" mnc="2" carrier="3" apn="data.tre.se" mmsc="http://mms.tre.se" mmsproxy="mmsproxy.tre.se" mmsport="8799" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="240" mnc="2" carrier="3 SE" apn="data.tre.se" mmsc="http://mms.tre.se" mmsproxy="172.16.1.25" mmsport="8799" type="default,mms" authtype="0"></apn>
-      <apn mcc="240" mnc="04" carrier="3" apn="data.tre.se" mmsc="http://mms.tre.se" mmsproxy="mmsproxy.tre.se" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="240" mnc="04" carrier="Telenor SE" apn="services.telenor.se" mmsc="http://mms" mmsproxy="172.30.253.241" mmsport="8799" type="default,supl,mms" mvno_match_data="Telenor SE" mvno_type="spn"></apn>
-      <apn mcc="240" mnc="4" carrier="3" apn="data.tre.se" mmsc="http://mms.tre.se" mmsproxy="mmsproxy.tre.se" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="240" mnc="05" carrier="Halebop MMS" apn="mms.telia.se" mmsc="http://mmss" mmsproxy="193.209.134.132" mmsport="80" type="mms" mvno_match_data="Halebop" mvno_type="spn"></apn>
-      <apn mcc="240" mnc="05" carrier="Tele2 MMS" apn="4g.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="mms" mvno_match_data="Tele2" mvno_type="spn"></apn>
-      <apn mcc="240" mnc="05" carrier="Tele2 MMS 3G" apn="internet.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="mms" mvno_match_data="Tele2" mvno_type="spn"></apn>
-      <apn mcc="240" mnc="05" carrier="Telia MMS" apn="mms.telia.se" mmsc="http://mmss" mmsproxy="193.209.134.132" mmsport="80" type="mms" mvno_match_data="Telia" mvno_type="spn"></apn>
-      <apn mcc="240" mnc="5" carrier="Halebop MMS" apn="mms.telia.se" mmsc="http://mmss" mmsproxy="193.209.134.132" mmsport="80" type="mms" mvno_match_data="Halebop" mvno_type="spn"></apn>
-      <apn mcc="240" mnc="5" carrier="Tele2 MMS 3G" apn="internet.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="mms" mvno_match_data="Tele2" mvno_type="spn"></apn>
-      <apn mcc="240" mnc="06" carrier="Telenor MMS" apn="services.telenor.se" mmsc="http://mms" mmsproxy="173.30.253.241" mmsport="8799" type="mms"></apn>
-      <apn mcc="240" mnc="07" carrier="Tele2" apn="internet.tele2.no" mmsc="http://mmsc.tele2.no" mmsproxy="193.12.40.14" mmsport="8080" type="default,supl,mms" protocol="IP"></apn>
-      <apn mcc="240" mnc="07" carrier="Tele2 MMS" apn="4g.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="mms"></apn>
-      <apn mcc="240" mnc="07" carrier="Tele2 MMS" apn="internet.tele2.no" mmsc="http://mmsc.tele2.no" mmsproxy="193.12.40.14" mmsport="8080" type="mms" mvno_match_data="2400768xxxxxxxx" mvno_type="imsi"></apn>
-      <apn mcc="240" mnc="07" carrier="Tele2 MMS 3G" apn="internet.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="mms"></apn>
-      <apn mcc="240" mnc="7" carrier="Tele2 MMS" apn="4g.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="240" mnc="7" carrier="Tele2 MMS 3G" apn="internet.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="240" mnc="7" carrier="Tele2Comviq Internet" apn="4g.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="240" mnc="08" carrier="Telenor SE" apn="services.telenor.se" mmsc="http://mms" mmsproxy="172.30.253.241" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="240" mnc="8" carrier="Telenor MMS (240.08)" apn="services.telenor.se" mmsc="http://mms" mmsproxy="172.30.253.241" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="240" mnc="8" carrier="Telenor SE" apn="services.telenor.se" mmsc="http://mms" mmsproxy="172.30.253.241" mmsport="8799" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="240" mnc="09" carrier="Telenor MMS" apn="services.telenor.se" mmsc="http://mms" mmsproxy="173.30.253.241" mmsport="8799" type="mms"></apn>
-      <apn mcc="240" mnc="10" carrier="Spring MMS" apn="mms.springmobil.se" mmsc="http://mms.springmobil.se" mmsproxy="213.88.184.37" mmsport="8080" type="mms"></apn>
-      <apn mcc="240" mnc="017" carrier="Halebop MMS" apn="mms.telia.se" mmsc="http://mmss" mmsproxy="193.209.134.132" mmsport="9201" type="mms" user="mms" password="telia"></apn>
-      <apn mcc="240" mnc="24" carrier="Tele2 MMS" apn="4g.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="mms" mvno_match_data="Tele2" mvno_type="spn"></apn>
-      <apn mcc="240" mnc="24" carrier="Tele2 MMS 3G" apn="internet.tele2.se" mmsc="http://mmsc.tele2.se" mmsproxy="130.244.202.30" mmsport="8080" type="mms" mvno_match_data="Tele2" mvno_type="spn"></apn>
-      <apn mcc="240" mnc="24" carrier="Telenor SE" apn="services.telenor.se" mmsc="http://mms" mmsproxy="172.30.253.241" mmsport="8799" type="default,supl,mms" mvno_match_data="Telenor SE" mvno_type="spn"></apn>
-      <apn mcc="242" mnc="01" carrier="Telenor" apn="telenor" mmsc="http://mmsc" mmsproxy="10.10.10.11" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="242" mnc="01" carrier="Ventelo MMS" apn="mms.ventelo.no" mmsc="http://mmsc/" mmsproxy="10.10.10.11" mmsport="8080" type="mms" user="ventelo" password="1111" authtype="1" mvno_match_data="24201700xxxxxxx" mvno_type="imsi"></apn>
-      <apn mcc="242" mnc="1" carrier="N Telenor" apn="telenor" mmsc="http://mmsc/" mmsproxy="10.10.10.11" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="242" mnc="1" carrier="Telenor" apn="telenor" mmsc="http://mmsc" mmsproxy="10.10.10.11" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="242" mnc="02" carrier="Chess MMS" apn="netcom" mmsc="http://mm/" mmsproxy="212.169.66.4" mmsport="8080" type="mms" user="mms" password="netcom" authtype="1" mvno_match_data="2420256xxxxxxxx" mvno_type="imsi"></apn>
-      <apn mcc="242" mnc="02" carrier="NetCom" apn="netcom" mmsc="http://mm/" mmsproxy="212.169.66.4" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="242" mnc="2" carrier="N NetCom mms" apn="mms.netcom.no" mmsc="http://mms/" mmsproxy="193.209.134.133" mmsport="80" type="mms" user="mms" password="netcom" authtype="0"></apn>
-      <apn mcc="242" mnc="2" carrier="NetCom" apn="netcom" mmsc="http://mm/" mmsproxy="212.169.66.4" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="242" mnc="04" carrier="Tele2 Internet" apn="internet.tele2.no" mmsc="http://mmsc.tele2.no" mmsproxy="193.12.40.14" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="242" mnc="05" carrier="NwN MMS" apn="mms" mmsc="http://mms.nwn.no" mmsproxy="188.149.250.10" mmsport="80" type="mms"></apn>
-      <apn mcc="244" mnc="03" carrier="DNA MMS" apn="mms" mmsc="http://mmsc.dna.fi" mmsproxy="10.1.1.2" mmsport="8080" type="mms"></apn>
-      <apn mcc="244" mnc="3" carrier="DNA MMS" apn="mms" mmsc="http://mmsc.dna.fi" mmsproxy="10.1.1.2" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="244" mnc="3" carrier="DNA MMS" apn="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" user="dna" password="mms" authtype="0"></apn>
-      <apn mcc="244" mnc="04" carrier="DNA MMS" apn="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" user="dna" password="mms"></apn>
-      <apn mcc="244" mnc="4" carrier="DNA MMS" apn="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" user="dna" password="mms" authtype="3"></apn>
-      <apn mcc="244" mnc="4" carrier="DNA MMS 1" apn="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" user="dna" password="mms" authtype="0"></apn>
-      <apn mcc="244" mnc="05" carrier="Elisa MMS" apn="mms" mmsc="http://mms.elisa.fi" mmsproxy="213.161.41.57" mmsport="80" type="mms"></apn>
-      <apn mcc="244" mnc="05" carrier="Saunalahti MMS" apn="mms.saunalahti.fi" mmsc="http://mms.saunalahti.fi:8002/" mmsproxy="62.142.4.197" mmsport="8080" type="mms" mvno_match_data="2440541" mvno_type="imsi"></apn>
-      <apn mcc="244" mnc="5" carrier="Elisa MMS" apn="mms" mmsc="http://mms.elisa.fi" mmsproxy="213.161.41.57" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="244" mnc="10" carrier="TDC MMS" apn="mms.song.fi" mmsc="http://mms.song.fi" mmsproxy="213.161.41.58" mmsport="80" type="mms"></apn>
-      <apn mcc="244" mnc="12" carrier="DNA MMS" apn="mms" mmsc="http://mmsc.dna.fi" mmsproxy="10.1.1.2" mmsport="8080" type="mms"></apn>
-      <apn mcc="244" mnc="12" carrier="DNA MMS" apn="mms" mmsc="http://mmsc.dna.fi" mmsproxy="10.1.1.2" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="244" mnc="12" carrier="DNA MMS 2" apn="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" user="dna" password="mms" authtype="0"></apn>
-      <apn mcc="244" mnc="12" carrier="DNA Pro MMS" apn="mms.dnapro.fi" mmsc="http://mmsc.dnapro.fi/" mmsproxy="10.1.1.21" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="244" mnc="12" carrier="TDC MMS Finland" apn="mms.tdc.fi" mmsc="http://mmsc.tdc.fi" mmsproxy="10.1.12.2" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="244" mnc="13" carrier="DNA MMS" apn="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" user="dna" password="mms"></apn>
-      <apn mcc="244" mnc="13" carrier="DNA MMS" apn="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" user="dna" password="mms" authtype="3"></apn>
-      <apn mcc="244" mnc="13" carrier="DNA MMS 3" apn="mms" mmsc="http://mmsc.dnafinland.fi/" mmsproxy="10.1.1.2" mmsport="8080" type="mms" user="dna" password="mms" authtype="0"></apn>
-      <apn mcc="244" mnc="21" carrier="Saunalahti MMS" apn="mms.saunalahti.fi" mmsc="http://mms.saunalahti.fi:8002/" mmsproxy="62.142.4.197" mmsport="8080" type="mms"></apn>
-      <apn mcc="244" mnc="21" carrier="Saunalahti MMS" apn="mms.saunalahti.fi" mmsc="http://mms.saunalahti.fi:8002/" mmsproxy="62.142.4.197" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="244" mnc="91" carrier="SONERA MMS" apn="wap.sonera.net" mmsc="http://mms.sonera.fi:8002" mmsproxy="195.156.25.33" mmsport="80" type="mms"></apn>
-      <apn mcc="244" mnc="91" carrier="SONERA MMS" apn="wap.sonera.net" mmsc="http://mms.sonera.fi:8002" mmsproxy="195.156.25.33" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="244" mnc="91" carrier="TeliaSonera MMS" apn="wap.sonera.net" mmsc="http://mms.sonera.net:8002/" mmsproxy="195.156.25.33" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="246" mnc="01" carrier="Omnitel MMS" apn="gprs.mms.lt" mmsc="http://mms.omnitel.net:8002/" mmsproxy="194.176.32.149" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="246" mnc="1" carrier="OMNI MMS" apn="gprs.mms.lt" mmsc="http://mms.omnitel.net:8002/" mmsproxy="194.176.32.149" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="246" mnc="1" carrier="Omnitel MMS" apn="gprs.mms.lt" mmsc="http://mms.omnitel.net:8002/" mmsproxy="194.176.32.149" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="246" mnc="02" carrier="Bite MMS" apn="mms" mmsc="http://mmsc/servlets/mms" mmsproxy="192.168.150.2" mmsport="8080" type="mms" user="mms@mms" password="mms" authtype="1"></apn>
-      <apn mcc="246" mnc="2" carrier="Bite MMS" apn="mms" mmsc="http://mmsc" mmsproxy="192.168.150.2" mmsport="8080" type="mms" user="mms@mms" password="mms" authtype="0"></apn>
-      <apn mcc="246" mnc="2" carrier="Bite MMS" apn="mms" mmsc="http://mmsc/servlets/mms" mmsproxy="192.168.150.2" mmsport="8080" type="mms" user="mms@mms" password="mms" authtype="1"></apn>
-      <apn mcc="246" mnc="03" carrier="Tele2 Internet LT" apn="internet.tele2.lt" mmsc="http://mmsc.tele2.lt/" mmsproxy="193.12.40.29" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="246" mnc="3" carrier="MMS" apn="mms.tele2.lt" mmsc="http://mmsc.tele2.lt" mmsproxy="193.12.40.29" mmsport="8080" type="mms" user="wap" password="wap" authtype="0"></apn>
-      <apn mcc="246" mnc="3" carrier="Prepaid MMS" apn="mms.tele2.lt" mmsc="http://mmsc.tele2.lt" mmsproxy="193.12.40.29" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="246" mnc="3" carrier="Tele2 Internet LT" apn="internet.tele2.lt" mmsc="http://mmsc.tele2.lt/" mmsproxy="193.12.40.29" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="246" mnc="081" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="246" mnc="081" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="246" mnc="081" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="246" mnc="81" carrier="EHRPD - VZW Test CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="246" mnc="81" carrier="LTE - VZW Test CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="246" mnc="81" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="246" mnc="81" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="246" mnc="81" carrier="Test Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="247" mnc="01" carrier="LMT MMS" apn="internet.lmt.lv" mmsc="http://mmsc.lmt.lv/mmsc" type="mms"></apn>
-      <apn mcc="247" mnc="1" carrier="LMT MMS" apn="internet.lmt.lv" mmsc="http://mmsc.lmt.lv/mmsc" type="mms" authtype="0"></apn>
-      <apn mcc="247" mnc="1" carrier="LMT MMS" apn="mms.lmt.lv" mmsc="http://mmsc.lmt.lv/mmsc" mmsproxy="212.93.97.201" mmsport="8080" type="mms" user="lmt" password="lmt" authtype="0" port="8080"></apn>
-      <apn mcc="247" mnc="02" carrier="Tele2 LV MMS" apn="mms.tele2.lv" mmsc="http://mmsc.tele2.lv/" mmsproxy="193.12.40.38" mmsport="8080" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="247" mnc="2" carrier="MMS" apn="mms.tele2.lv" mmsc="http://mmsc.tele2.lv" mmsproxy="193.12.40.38" mmsport="8080" type="mms" user="wap" password="wap" authtype="0"></apn>
-      <apn mcc="247" mnc="2" carrier="Prepaid MMS" apn="mms.tele2.lv" mmsc="http://mmsc.tele2.lv" mmsproxy="193.12.40.38" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="247" mnc="05" carrier="Bite LV MMS" apn="mms" mmsc="http://mmsc/servlets/mms" mmsproxy="192.168.150.2" mmsport="8080" type="mms" user="mms@mms" password="mms" authtype="1"></apn>
-      <apn mcc="247" mnc="5" carrier="Bite MMS" apn="MMS" mmsc="http://mmsc" mmsproxy="192.168.150.2" mmsport="8080" type="mms" user="mms@mms" password="mms" authtype="0"></apn>
-      <apn mcc="248" mnc="01" carrier="EMT MMS" apn="mms.emt.ee" mmsc="http://mms.emt.ee/servlets/mms" mmsproxy="217.71.32.82" mmsport="8080" type="mms"></apn>
-      <apn mcc="248" mnc="01" carrier="Send" apn="send.ee" mmsc="http://mms.emt.ee/servlets/mms" mmsproxy="217.71.32.82" mmsport="8080" type="default,supl,mms" mvno_match_data="248010x2" mvno_type="imsi"></apn>
-      <apn mcc="248" mnc="01" carrier="Send" apn="send.ee" mmsc="http://mms.emt.ee/servlets/mms" mmsproxy="217.71.32.82" mmsport="8080" type="default,supl,mms" mvno_match_data="248010x3" mvno_type="imsi"></apn>
-      <apn mcc="248" mnc="1" carrier="EMT MMS" apn="mms.emt.ee" mmsc="http://mms.emt.ee/servlets/mms" mmsproxy="217.71.32.82" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="248" mnc="1" carrier="EMT MMS" apn="mms.emt.ee" mmsc="http://mms.emt.ee/servlets/mms" mmsproxy="217.71.32.82" mmsport="8080" type="mms" password="password" authtype="0"></apn>
-      <apn mcc="248" mnc="02" carrier="Elisa MMS" apn="mms" mmsc="http://194.204.2.10" mmsproxy="194.204.2.6" mmsport="8000" type="mms"></apn>
-      <apn mcc="248" mnc="2" carrier="Elisa MMS" apn="mms" mmsc="194.204.2.10" mmsproxy="194.204.2.6" mmsport="8000" type="mms" authtype="0"></apn>
-      <apn mcc="248" mnc="2" carrier="Elisa MMS" apn="mms" mmsc="http://194.204.2.10" mmsproxy="194.204.2.6" mmsport="8000" type="mms" authtype="0"></apn>
-      <apn mcc="248" mnc="03" carrier="Smart/Ultra MMS" apn="internet.tele2.ee" mmsc="http://mmsc.tele2.ee" mmsproxy="193.12.40.6" mmsport="8080" type="mms" mvno_match_data="24803000x" mvno_type="imsi"></apn>
-      <apn mcc="248" mnc="03" carrier="Smart/Ultra MMS" apn="internet.tele2.ee" mmsc="http://mmsc.tele2.ee" mmsproxy="193.12.40.6" mmsport="8080" type="mms" mvno_match_data="24803005x" mvno_type="imsi"></apn>
-      <apn mcc="248" mnc="03" carrier="Tele2 MMS" apn="mms.tele2.ee" mmsc="http://mmsc.tele2.ee" mmsproxy="193.12.40.6" mmsport="8080" type="mms"></apn>
-      <apn mcc="248" mnc="03" carrier="Tele2 MMS" apn="mms.tele2.ee" mmsc="http://mmsc.tele2.ee" mmsproxy="193.12.40.6" mmsport="8080" type="mms" mvno_match_data="24803005x" mvno_type="imsi"></apn>
-      <apn mcc="250" mnc="01" carrier="MTS MMS" apn="mms.mts.ru" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms" user="mts" password="mts" authtype="1"></apn>
-      <apn mcc="250" mnc="01" carrier="МТS MMS" apn="mms.mts.ru" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="1" carrier="MTS MMS" apn="mms.mts.ru" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="9201" type="mms" user="mts" password="mts" authtype="0"></apn>
-      <apn mcc="250" mnc="002" carrier="Megafon MMS" apn="mms" mmsc="http://mmsc:8002" mmsproxy="10.10.10.10" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="250" mnc="02" carrier="Megafon MMS" apn="mms" mmsc="http://mmsc:8002" mmsproxy="10.10.10.10" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="250" mnc="2" carrier="MegaFon MMS" apn="mms" mmsc="http://mmsc:8002" mmsproxy="10.10.10.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="250" mnc="2" carrier="Megafon MMS" apn="mms" mmsc="http://mmsc:8002" mmsproxy="10.10.10.10" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="250" mnc="03" carrier="NCC" apn="mms" mmsc="http://10.0.3.50" mmsproxy="10.0.3.20" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="04" carrier="МТС Центр MMS" apn="mms.mts.ru" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="05" carrier="МТС Центр MMS" apn="mms.mts.ru" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="07" carrier="mms" apn="mms.smarts.ru" mmsc="http://172.24.120.135/mms/wapenc" mmsproxy="172.24.128.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="10" carrier="МТС Центр MMS" apn="mms.mts.ru" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="11" carrier="Beeline MMS" apn="mms.beeline.ru" mmsc="http://mms/" mmsproxy="192.168.094.023" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="12" carrier="BWC MMS" apn="mms.bwc.ru" mmsc="http://mmsc/mms" mmsproxy="10.10.17.2" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="13" carrier="МТС Центр MMS" apn="mms.mts.ru" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="16" carrier="MMS" apn="mms.ntc" mmsc="http://mmsc.vntc.ru/was" mmsproxy="80.243.64.68" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="17" carrier="MMS" apn="mms.usi.ru" mmsc="http://mms" mmsproxy="192.168.168.192" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="20" carrier="TELE2 MMS" apn="mms.tele2.ru" mmsc="http://mmsc.tele2.ru" mmsproxy="193.12.40.65" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="20" carrier="TELE2 MMS" apn="mms.tele2.ru" mmsc="http://mmsc.tele2.ru" mmsproxy="193.12.40.65" mmsport="9201" type="mms"></apn>
-      <apn mcc="250" mnc="39" carrier="МТС Центр MMS" apn="mms.mts.ru" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="44" carrier="Beeline MMS" apn="mms.beeline.ru" mmsc="http://mms/" mmsproxy="192.168.94.23" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="92" carrier="МТС Центр MMS" apn="mms.mts.ru" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="93" carrier="МТС Центр MMS" apn="mms.mts.ru" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms"></apn>
-      <apn mcc="250" mnc="99" carrier="Beeline MMS" apn="mms.beeline.ru" mmsc="http://mms/" mmsproxy="192.168.94.23" mmsport="8080" type="mms" user="beeline" password="beeline" authtype="0"></apn>
-      <apn mcc="250" mnc="99" carrier="Beeline MMS" apn="mms.beeline.ru" mmsc="http://mms/" mmsproxy="192.168.94.23" mmsport="8080" type="mms" user="beeline" password="beeline" authtype="1"></apn>
-      <apn mcc="255" mnc="01" carrier="MTS MMS" apn="mms" mmsc="http://mmsc:8002/" mmsproxy="192.168.10.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="255" mnc="1" carrier="MTS MMS" apn="mms" mmsc="http://mmsc:8002/" mmsproxy="192.168.10.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="255" mnc="1" carrier="MTS UKR MMS" apn="mms" mmsc="http://mms/" mmsproxy="192.168.10.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="255" mnc="02" carrier="Beeline MMS" apn="mms.beeline.ua" mmsc="http://mms/" mmsproxy="172.29.18.192" mmsport="8080" type="mms"></apn>
-      <apn mcc="255" mnc="2" carrier="Beeline MMS" apn="mms.beeline.ua" mmsc="http://mms/" mmsproxy="172.29.18.192" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="255" mnc="2" carrier="Beeline UKR MMS" apn="mms.beeline.ua" mmsc="http://mms/" mmsproxy="172.29.18.192" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="255" mnc="03" carrier="Djuice MMS" apn="mms.djuice.com.ua" mmsc="http://mms.kyivstar.net" mmsproxy="10.10.10.10" mmsport="8080" type="mms" user="djuice" password="mms" authtype="1" mvno_match_data="DJUICE" mvno_type="spn"></apn>
-      <apn mcc="255" mnc="03" carrier="Kyivstar MMS" apn="mms.kyivstar.net" mmsc="http://mms.kyivstar.net" mmsproxy="10.10.10.10" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="255" mnc="3" carrier="UA-KYIVSTAR MMS" apn="mms.kyivstar.net" mmsc="http://mms.kyivstar.net" mmsproxy="10.10.10.10" mmsport="9201" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="255" mnc="06" carrier="Life:) MMS" apn="mms" mmsc="http://mms.life.com.ua/cmmsc/post" mmsproxy="212.58.162.230" mmsport="8080" type="mms"></apn>
-      <apn mcc="255" mnc="6" carrier="life:) MMS" apn="mms" mmsc="http://mms.life.com.ua/cmmsc/post" mmsproxy="212.58.162.230" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="255" mnc="07" carrier="Utel MMS" apn="3g.utel.ua" mmsc="http://10.212.1.4/mms/wapenc" mmsproxy="10.212.3.148" mmsport="8080" type="mms"></apn>
-      <apn mcc="257" mnc="01" carrier="Velcom MMS" apn="mms.velcom.by" mmsc="http://mmsc" mmsproxy="10.200.15.15" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="257" mnc="1" carrier="Velcom MMS" apn="mms.velcom.by" mmsc="http://mmsc" mmsproxy="10.200.15.15" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="257" mnc="02" carrier="MTS MMS" apn="mts" mmsc="http://mmsc" mmsproxy="192.168.192.192" mmsport="8080" type="mms" user="mts" password="mts" authtype="1"></apn>
-      <apn mcc="257" mnc="04" carrier="life:) MMS" apn="mms.life.com.by" mmsc="http://mms.life.com.by/mmsc/" mmsproxy="10.10.10.20" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="257" mnc="4" carrier="life:) MMS" apn="mms.life.com.by" mmsc="http://mms.life.com.by/mmsc/" mmsproxy="10.10.10.20" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="259" mnc="01" carrier="Orange MMS" apn="mms.orange.md" mmsc="http://mms/mms" mmsproxy="192.168.127.125" mmsport="3128" type="mms"></apn>
-      <apn mcc="259" mnc="01" carrier="Orange_MMS_GPRS" apn="mms.orange.md" mmsc="http://mms/mms" mmsproxy="192.168.127.125" mmsport="3128" type="mms"></apn>
-      <apn mcc="259" mnc="1" carrier="Orange_MMS_GPRS" apn="mms.orange.md" mmsc="http://mms/mms" mmsproxy="192.168.127.125" mmsport="3128" type="mms"></apn>
-      <apn mcc="259" mnc="02" carrier="Moldcell MMS" apn="mms" mmsc="http://mms.moldcell.md/cmmsc/post" mmsproxy="10.0.10.10" mmsport="9401" type="mms"></apn>
-      <apn mcc="259" mnc="2" carrier="Moldcell MMS" apn="mms" mmsc="http://mms.moldcell.md/cmmsc/post" mmsproxy="10.0.10.10" mmsport="9401" type="mms"></apn>
-      <apn mcc="259" mnc="05" carrier="Unite MMS" apn="mms.unite.md" mmsc="http://10.32.15.68:38090/was" mmsproxy="10.32.15.164" mmsport="8080" type="mms"></apn>
-      <apn mcc="260" mnc="01" carrier="Plus MMS" apn="mms" mmsc="http://mms.plusgsm.pl:8002" mmsproxy="212.2.96.16" mmsport="8080" type="mms"></apn>
-      <apn mcc="260" mnc="1" carrier="Plus mms" apn="mms" mmsc="http://mms.plusgsm.pl:8002" mmsproxy="212.2.96.16" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="260" mnc="02" carrier="T-mobile.pl" apn="mms" mmsc="http://mms/servlets/mms" mmsproxy="213.158.194.226" mmsport="8080" type="mms"></apn>
-      <apn mcc="260" mnc="02" carrier="heyahmms" apn="heyahmms" mmsc="http://mms.heyah.pl/servlets/mms" mmsproxy="213.158.194.226" mmsport="8080" type="mms"></apn>
-      <apn mcc="260" mnc="2" carrier="MMS" apn="mms" mmsc="http://mms/servlets/mms" mmsproxy="213.158.194.226" mmsport="8080" type="mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="260" mnc="2" carrier="T-mobile.pl" apn="mms" mmsc="http://mms/servlets/mms" mmsproxy="213.158.194.226" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="260" mnc="2" carrier="heyahmms" apn="heyahmms" mmsc="http://mms.heyah.pl/servlets/mms" mmsproxy="213.158.194.226" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="260" mnc="03" carrier="Orange MMS" apn="mms" mmsc="http://mms.orange.pl" mmsproxy="192.168.6.104" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="260" mnc="3" carrier="Orange PL mms" apn="mms" mmsc="http://mms.orange.pl" mmsproxy="192.168.6.104" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="260" mnc="06" carrier="Play MMS" apn="mms" mmsc="http://10.10.28.164/mms/wapenc" mmsproxy="10.10.25.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="260" mnc="6" carrier="PLAY mms" apn="mms" mmsc="http://10.10.28.164/mms/wapenc" mmsproxy="10.10.25.5" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="260" mnc="6" carrier="Play MMS" apn="mms" mmsc="http://10.10.28.164/mms/wapenc" mmsproxy="10.10.25.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="262" mnc="01" carrier="T-Mobile D" apn="internet.t-mobile" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.028.023.131" mmsport="8008"></apn>
-      <apn mcc="262" mnc="01" carrier="Telekom Internet" apn="internet.telekom" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.28.23.131" mmsport="8008" user="telekom" password="telekom" authtype="1" mvno_match_data="debitel" mvno_type="spn" protocol="IP"></apn>
-      <apn mcc="262" mnc="01" carrier="Telekom Internet" apn="internet.telekom" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.28.23.131" mmsport="8008" type="default,supl,mms" user="telekom" password="telekom" authtype="1"></apn>
-      <apn mcc="262" mnc="1" carrier="T-Mobile Internet" apn="internet.t-mobile" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.28.23.131" mmsport="8008" type="default,mms" user="t-mobile" password="tm" authtype="1"></apn>
-      <apn mcc="262" mnc="1" carrier="Telekom Internet" apn="internet.telekom" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.28.23.131" mmsport="8008" type="default,mms" user="telekom" password="telekom" authtype="1" protocol="IP"></apn>
-      <apn mcc="262" mnc="1" carrier="Telekom Internet" apn="internet.telekom" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.28.23.131" mmsport="8008" type="default,supl,mms" user="telekom" password="telekom" authtype="1"></apn>
-      <apn mcc="262" mnc="02" carrier="Vodafone DE-MMS" apn="event.vodafone.de" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" type="mms"></apn>
-      <apn mcc="262" mnc="2" carrier="Vodafone DE-MMS" apn="event.vodafone.de" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="262" mnc="2" carrier="Vodafone MMS (DE)" apn="event.vodafone.de" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="262" mnc="03" carrier="E-Plus MMS" apn="mms.eplus.de" mmsc="http://mms/eplus/" mmsproxy="212.23.97.153" mmsport="5080" type="mms" user="mms" password="eplus" authtype="1"></apn>
-      <apn mcc="262" mnc="3" carrier="E-Plus MMS (DE)" apn="mms.eplus.de" mmsc="http://mms/eplus" mmsproxy="212.23.97.153" mmsport="5080" type="mms" user="mms" password="eplus" authtype="0"></apn>
-      <apn mcc="262" mnc="07" carrier="Alice" apn="internet.partner1" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.41" mmsport="8080" authtype="0" mvno_match_data="Alice" mvno_type="spn"></apn>
-      <apn mcc="262" mnc="07" carrier="Fonic" apn="pinternet.interkom.net" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.6" mmsport="8080" authtype="0" mvno_match_data="26207515" mvno_type="imsi"></apn>
-      <apn mcc="262" mnc="07" carrier="o2" apn="internet" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.5" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="262" mnc="07" carrier="o2 Internet" apn="internet" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.5" mmsport="8080" type="default,supl,mms" mvno_match_data="2620739" mvno_type="imsi"></apn>
-      <apn mcc="262" mnc="07" carrier="o2 Internet Prepaid" apn="pinternet.interkom.de" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.6" mmsport="8080" type="default,supl,mms" proxy="82.113.100.6" port="8080"></apn>
-      <apn mcc="262" mnc="07" carrier="o2 Internet Prepaid" apn="pinternet.interkom.de" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.6" mmsport="8080" type="default,supl,mms" mvno_match_data="2620749" mvno_type="imsi"></apn>
-      <apn mcc="262" mnc="7" carrier="o2" apn="internet" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.5" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="262" mnc="7" carrier="o2 (DE)" apn="internet" mmsc="http://10.81.0.7:8002/" mmsproxy="82.113.100.5" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="262" mnc="7" carrier="o2 Internet Prepaid" apn="pinternet.interkom.de" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.6" mmsport="8080" type="default,supl,mms" authtype="0" proxy="82.113.100.6" port="8080"></apn>
-      <apn mcc="268" mnc="01" carrier="Vodafone Net2" apn="net2.vodafone.pt" mmsc="http://mms.vodafone.pt/servlets/mms" mmsproxy="iproxy.vodafone.pt" mmsport="80" type="default,supl,mms" user="vodafone" password="vodafone" authtype="1" proxy="iproxy.vodafone.pt" port="80"></apn>
-      <apn mcc="268" mnc="01" carrier="ZON MMS" apn="vas.zon.pt" mmsc="http://mms/servlets/mms" mmsproxy="213.30.27.63" mmsport="8799" type="mms" user="vas" password="vas" authtype="1" mvno_match_data="ZON" mvno_type="spn"></apn>
-      <apn mcc="268" mnc="1" carrier="Vodafone Net2" apn="net2.vodafone.pt" mmsc="http://mms.vodafone.pt/servlets/mms" mmsproxy="iproxy.vodafone.pt" mmsport="80" type="default,mms,supl,agps,fota" user="vodafone" password="vodafone" authtype="0" proxy="iproxy.vodafone.pt" port="80"></apn>
-      <apn mcc="268" mnc="1" carrier="Vodafone Net2" apn="net2.vodafone.pt" mmsc="http://mms.vodafone.pt/servlets/mms" mmsproxy="iproxy.vodafone.pt" mmsport="80" type="default,supl,mms" user="vodafone" password="vodafone" authtype="1" proxy="iproxy.vodafone.pt" port="80"></apn>
-      <apn mcc="268" mnc="03" carrier="PortalOptimus" apn="umts" mmsc="http://mmsc:10021/mmsc" mmsproxy="62.169.66.5" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="268" mnc="3" carrier="P OPTIMUS" apn="umts" mmsc="http://mmsc:10021/mmsc" mmsproxy="62.169.66.5" mmsport="8799" type="default,mms" authtype="0"></apn>
-      <apn mcc="268" mnc="3" carrier="PortalOptimus" apn="umts" mmsc="http://mmsc:10021/mmsc" mmsproxy="62.169.66.5" mmsport="8799" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="268" mnc="06" carrier="mms tmn" apn="mmsc.tmn.pt" mmsc="http://mmsc/" mmsproxy="10.111.2.16" mmsport="8080" type="mms" user="tmn" password="tmnnet" authtype="1"></apn>
-      <apn mcc="268" mnc="6" carrier="P TMN mms" apn="mmsc.tmn.pt" mmsc="http://mmsc" mmsproxy="10.111.2.16" mmsport="8080" type="mms" user="tmn" password="tmnnet" authtype="0"></apn>
-      <apn mcc="268" mnc="6" carrier="mms tmn" apn="mmsc.tmn.pt" mmsc="http://mmsc/" mmsproxy="10.111.2.16" mmsport="8080" type="mms" user="tmn" password="tmnnet" authtype="1"></apn>
-      <apn mcc="270" mnc="01" carrier="LUXGSM MMS" apn="mms.pt.lu" mmsc="http://mmsc.pt.lu" mmsproxy="194.154.192.88" mmsport="8080" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="270" mnc="1" carrier="LUXGSM MMS" apn="mms.pt.lu" mmsc="http://mmsc.pt.lu" mmsproxy="194.154.192.88" mmsport="8080" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="270" mnc="1" carrier="LUXGSM mms" apn="mms.pt.lu" mmsc="http://mmsc.pt.lu" mmsproxy="194.154.192.88" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="270" mnc="77" carrier="TANGO mms" apn="mms" mmsc="http://mms.tango.lu" mmsproxy="212.66.75.3" mmsport="8080" type="mms" user="tango" password="tango" authtype="1"></apn>
-      <apn mcc="270" mnc="77" carrier="Tango MMS" apn="mms" mmsc="http://mms.tango.lu" mmsproxy="212.66.75.3" mmsport="8080" type="mms" user="tango" password="tango"></apn>
-      <apn mcc="270" mnc="77" carrier="Tango MMS" apn="mms" mmsc="http://mms.tango.lu" mmsproxy="212.66.75.3" mmsport="8080" type="mms" user="tango" password="tango" authtype="3"></apn>
-      <apn mcc="270" mnc="99" carrier="Orange" apn="orange.lu" mmsc="http://mms.orange.lu" mmsproxy="212.88.139.44" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="270" mnc="99" carrier="Vox Mobile" apn="vox.lu" mmsc="http://mms.vox.lu" mmsproxy="212.88.139.44" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="270" mnc="99" carrier="Vox Mobile" apn="vox.lu" mmsc="http://mms.vox.lu" mmsproxy="212.88.139.44" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="272" mnc="01" carrier="Vodafone IE-MMS" apn="mms.vodafone.net" mmsc="http://www.vodafone.ie/mms" mmsproxy="10.24.59.200" mmsport="80" type="mms"></apn>
-      <apn mcc="272" mnc="1" carrier="Vodafone IE-MMS" apn="mms.vodafone.net" mmsc="http://www.vodafone.ie/mms" mmsproxy="10.24.59.200" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="272" mnc="1" carrier="Vodafone MMS" apn="mms.vodafone.net" mmsc="http://www.vodafone.ie/mms" mmsproxy="10.24.59.200" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="272" mnc="02" carrier="O2 Ireland" apn="internet" mmsc="http://mmsc.mms.o2.ie:8002" mmsproxy="62.40.32.40" mmsport="8080" type="default,supl,mms" proxy="62.40.32.40" port="8080"></apn>
-      <apn mcc="272" mnc="2" carrier="O2 Ireland" apn="internet" mmsc="http://mmsc.mms.o2.ie:8002" mmsproxy="62.40.32.40" mmsport="8080" type="default,supl,mms" authtype="0" proxy="62.40.32.40" port="8080"></apn>
-      <apn mcc="272" mnc="2" carrier="O2.ie Mobile Internet" apn="internet" mmsc="http://mmsc.mms.o2.ie:8002" mmsproxy="62.40.32.40" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="272" mnc="03" carrier="Meteor MMS" apn="mms.mymeteor.ie" mmsc="http://mms.mymeteor.ie" mmsproxy="10.85.85.85" mmsport="8799" type="mms" user="my" password="wap" authtype="1"></apn>
-      <apn mcc="272" mnc="3" carrier="Meteor MMS" apn="mms.mymeteor.ie" mmsc="http://mms.mymeteor.ie" mmsproxy="10.85.85.85" mmsport="8799" type="mms" user="my" password="mms" authtype="0"></apn>
-      <apn mcc="272" mnc="3" carrier="Meteor MMS" apn="mms.mymeteor.ie" mmsc="http://mms.mymeteor.ie" mmsproxy="10.85.85.85" mmsport="8799" type="mms" user="my" password="wap" authtype="1"></apn>
-      <apn mcc="272" mnc="05" carrier="3" apn="3ireland.ie" mmsc="http://mms.um.3ireland.ie:10021/mmsc" mmsproxy="mms.3ireland.ie" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="272" mnc="5" carrier="3" apn="3ireland.ie" mmsc="http://mms.um.3ireland.ie:10021/mmsc" mmsproxy="mms.3ireland.ie" mmsport="8799" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="272" mnc="5" carrier="3 Ireland" apn="3ireland.ie" mmsc="http://mms.um.3ireland.ie:10021/mmsc/" mmsproxy="mms.3ireland.ie" mmsport="8799" type="default,supl,agps,fota,dun,mms" authtype="0"></apn>
-      <apn mcc="272" mnc="11" carrier="Tesco" apn="tescomobile.liffeytelecom.com" mmsc="http://mmc1/servlets/mms" mmsproxy="10.1.11.19" mmsport="8080" type="default,supl,mms" mvno_match_data="0A" mvno_type="gid"></apn>
-      <apn mcc="274" mnc="01" carrier="Siminn MMS" apn="mms.simi.is" mmsc="http://mms.simi.is/servlets/mms" mmsproxy="213.167.138.200" mmsport="8080" type="mms"></apn>
-      <apn mcc="274" mnc="1" carrier="Siminn MMS" apn="mms.simi.is" mmsc="http://mms.simi.is/servlets/mms" mmsproxy="213.167.138.200" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="274" mnc="02" carrier="Vodafone MMS" apn="mms.gprs.is" mmsc="http://mmsc.vodafone.is" mmsproxy="10.22.0.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="274" mnc="2" carrier="Vodafone MMS" apn="mms.gprs.is" mmsc="http://mmsc.vodafone.is" mmsproxy="10.22.0.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="274" mnc="03" carrier="Vodafone MMS" apn="mms.gprs.is" mmsc="http://mmsc.vodafone.is" mmsproxy="10.22.0.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="274" mnc="3" carrier="Vodafone MMS" apn="mms.gprs.is" mmsc="http://mmsc.vodafone.is" mmsproxy="10.22.0.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="274" mnc="11" carrier="MMS Nova" apn="mms.nova.is" mmsc="http://mmsc.nova.is" mmsproxy="10.10.2.60" mmsport="8080" type="mms"></apn>
-      <apn mcc="274" mnc="11" carrier="MMS Nova" apn="mms.nova.is" mmsc="http://mmsc.nova.is" mmsproxy="10.10.2.60" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="274" mnc="11" carrier="Nova MMS" apn="mms.nova.is" mmsc="http://mmsc.nova.is" mmsproxy="10.10.2.60" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="278" mnc="01" carrier="Vodafone MT-MMS" apn="mms.vodafone.com.mt" mmsc="http://mms.vodafone.com.mt/servlets/mms" mmsproxy="10.12.0.3" mmsport="8080" type="mms"></apn>
-      <apn mcc="278" mnc="1" carrier="Vodafone MMS (MT)" apn="mms.vodafone.com.mt" mmsc="http://mms.vodafone.com.mt/servlets/mms" mmsproxy="10.12.0.3" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="278" mnc="1" carrier="Vodafone MT-MMS" apn="mms.vodafone.com.mt" mmsc="http://mms.vodafone.com.mt/servlets/mms" mmsproxy="10.12.0.3" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="280" mnc="01" carrier="CYTA" apn="cytamobile" mmsc="http://mmsc.cyta.com.cy" mmsproxy="212.31.96.161" mmsport="8080" type="default,supl,mms" user="user" password="pass"></apn>
-      <apn mcc="280" mnc="1" carrier="CYTA" apn="cytamobile" mmsc="http://mmsc.cyta.com.cy" mmsproxy="212.31.96.161" mmsport="8080" type="default,supl,mms" user="user" password="pass"></apn>
-      <apn mcc="280" mnc="10" carrier="MTN MMS" apn="mms" mmsc="http://mms.mtn.com.cy/mmsc" mmsproxy="172.24.97.1" mmsport="3130" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="283" mnc="10" carrier="Orange Armenia MMS" apn="mms" mmsc="http://mms/" mmsproxy="192.168.220.251" mmsport="3128" type="mms" authtype="1"></apn>
-      <apn mcc="284" mnc="01" carrier="MTel MMS" apn="mms-gprs.mtel.bg" mmsc="http://mmsc/" mmsproxy="10.150.0.33" mmsport="8080" type="mms" user="mtel" password="mtel" authtype="1"></apn>
-      <apn mcc="284" mnc="1" carrier="M-Tel BG MMS" apn="mms-gprs.mtel.bg" mmsc="http://mmsc/" mmsproxy="10.150.0.33" mmsport="8080" type="mms" user="mtel" password="mtel" authtype="0"></apn>
-      <apn mcc="284" mnc="03" carrier="Vivacom MMS" apn="mms.vivacom.bg" mmsc="http://mmsc.vivacom.bg" mmsproxy="192.168.123.123" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="284" mnc="3" carrier="VIVACOM MMS" apn="mms.vivacom.bg" mmsc="http://mmsc.vivacom.bg" mmsproxy="192.168.123.123" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="284" mnc="3" carrier="Vivacom MMS" apn="mms.vivacom.bg" mmsc="http://mmsc.vivacom.bg" mmsproxy="192.168.123.123" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="284" mnc="05" carrier="GLOBUL MMS GPRS" apn="mms.globul.bg" mmsc="http://mmsc1.mms.globul.bg:8002" mmsproxy="192.168.87.11" mmsport="8004" type="mms" user="mms"></apn>
-      <apn mcc="284" mnc="5" carrier="GLOBUL MMS GPRS" apn="mms.globul.bg" mmsc="http://mmsc1.mms.globul.bg:8002" mmsproxy="192.168.87.11" mmsport="8004" type="mms" user="mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="284" mnc="5" carrier="GLOBUL MMS GPRS" apn="mms.globul.bg" mmsc="http://mmsc1.mms.globul.bg:8002" mmsproxy="192.168.87.11" mmsport="8004" type="mms" user="mms" authtype="3"></apn>
-      <apn mcc="286" mnc="01" carrier="TURKCELL MMS" apn="mms" mmsc="http://mms.turkcell.com.tr/servlets/mms" mmsproxy="212.252.169.217" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="286" mnc="1" carrier="TR TURKCELL mms" apn="mms" mmsc="http://mms.turkcell.com.tr/servlets/mms" mmsproxy="212.252.169.217" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="286" mnc="1" carrier="TURKCELL MMS" apn="mms" mmsc="http://mms.turkcell.com.tr/servlets/mms" mmsproxy="212.252.169.217" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="286" mnc="02" carrier="Vodafone MMS" apn="mms" mmsc="http://217.31.233.18:6001/MM1Servlet" mmsproxy="217.31.233.18" mmsport="9401" type="mms" user="vodafone" password="vodafone" authtype="1"></apn>
-      <apn mcc="286" mnc="2" carrier="VODAFONE TR mms" apn="mms" mmsc="http://217.31.233.18:6001/MM1Servlet" mmsproxy="217.31.233.18" mmsport="9401" type="mms" user="vodafone" password="vodafone" authtype="0"></apn>
-      <apn mcc="286" mnc="2" carrier="Vodafone MMS" apn="mms" mmsc="http://217.31.233.18:6001/MM1Servlet" mmsproxy="217.31.233.18" mmsport="9401" type="mms" user="vodafone" password="vodafone" authtype="1"></apn>
-      <apn mcc="286" mnc="03" carrier="AVEA MMS" apn="mms" mmsc="http://mms.avea.com.tr/servlets/mms" mmsproxy="213.161.151.201" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="286" mnc="3" carrier="AVEA MMS" apn="mms" mmsc="http://mms.avea.com.tr/servlets/mms" mmsproxy="213.161.151.201" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="286" mnc="3" carrier="AVEA-MMS" apn="mms" mmsc="http://mms.avea.com.tr/servlets/mms" mmsproxy="213.161.151.201" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="290" mnc="01" carrier="Tele MMS" apn="mms" mmsc="http://mms.tele.gl/mms/wapenc" mmsproxy="10.112.222.37" mmsport="8080" type="mms"></apn>
-      <apn mcc="293" mnc="40" carrier="Si.mobil MMS" apn="mms.simobil.si" mmsc="http://mmc/" mmsproxy="80.95.224.46" mmsport="9201" type="mms" user="simobil" password="internet" authtype="1"></apn>
-      <apn mcc="293" mnc="40" carrier="Si.mobil mms" apn="mms.simobil.si" mmsc="http://mmc/" mmsproxy="80.95.224.46" mmsport="9090" type="mms" user="simobil" password="internet" authtype="0"></apn>
-      <apn mcc="293" mnc="41" carrier="MOBITEL" apn="internet" mmsc="http://mms.mobitel.si/servlets/mms" mmsproxy="213.229.249.40" mmsport="8080" type="default,mms" user="mobitel" password="internet" authtype="0" proxy="213.229.249.40" port="8080"></apn>
-      <apn mcc="293" mnc="41" carrier="Mobilni Internet" apn="internet" mmsc="http://mms.mobitel.si/servlets/mms" mmsproxy="213.229.249.40" mmsport="8080" type="default,supl,mms" user="mobitel" password="internet" authtype="1"></apn>
-      <apn mcc="293" mnc="64" carrier="T2" apn="internet.t-2.net" mmsc="http://www.mms.t-2.net:8002" mmsproxy="172.20.18.137" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="293" mnc="70" carrier="SI TUSMOBIL mms" apn="mms.tusmobil.si" mmsc="http://mms.tusmobil.si:8002" mmsproxy="91.185.221.85" mmsport="8080" type="mms" user="tusmobil" password="mms" authtype="0"></apn>
-      <apn mcc="293" mnc="70" carrier="Telemach Internet" apn="telemach.net" mmsc="http://mms.telemach.net:8002" mmsproxy="91.185.221.85" mmsport="8080" type="default,supl,mms" mvno_match_data="29370029xxxxxxx" mvno_type="imsi"></apn>
-      <apn mcc="293" mnc="70" carrier="Tusmobil MMS" apn="mms.tusmobil.si" mmsc="http://mms.tusmobil.si:8002" mmsproxy="91.185.221.85" mmsport="8080" type="mms" user="tusmobil" password="mms" authtype="1"></apn>
-      <apn mcc="294" mnc="01" carrier="T-Mobile MK MMS" apn="mms" mmsc="http://mms.t-mobile.com.mk" mmsproxy="62.162.155.227" mmsport="8080" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="294" mnc="1" carrier="T-Mobile MK MMS" apn="mms" mmsc="http://mms.t-mobile.com.mk" mmsproxy="62.162.155.227" mmsport="8080" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="294" mnc="1" carrier="TM MK MMS" apn="mms" mmsc="http://mms.t-mobile.com.mk" mmsproxy="62.162.155.227" mmsport="8080" type="mms" user="mms" password="mms" authtype="1" protocol="IP"></apn>
-      <apn mcc="294" mnc="02" carrier="Cosmofon MMS" apn="mms" mmsc="http://195.167.65.220:8002" mmsproxy="10.10.10.20" mmsport="8080" type="mms"></apn>
-      <apn mcc="294" mnc="2" carrier="Cosmofon MMS" apn="mms" mmsc="http://195.167.65.220:8002" mmsproxy="10.10.10.20" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="294" mnc="2" carrier="ONE MK MMS" apn="mms" mmsc="http://195.167.65.220:8002" mmsproxy="10.10.10.20" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="294" mnc="03" carrier="MMS" apn="vipoperator.mms" mmsc="http://mmsc.vipoperator.com.mk" mmsproxy="78.40.0.1" mmsport="8080" type="mms" user="vipoperator" password="vipoperator"></apn>
-      <apn mcc="294" mnc="3" carrier="MMS" apn="vipoperator.mms" mmsc="http://mmsc.vipoperator.com.mk" mmsproxy="78.40.0.1" mmsport="8080" type="mms" user="vipoperator" password="vipoperator" authtype="3"></apn>
-      <apn mcc="294" mnc="3" carrier="VIP MK MMS" apn="vipoperator" mmsc="http://mmsc.vipoperator.com.mk" mmsproxy="78.40.0.1" mmsport="8080" type="mms" user="vipoperator" authtype="0"></apn>
-      <apn mcc="297" mnc="02" carrier="T-Mobile MMS" apn="mms" mmsc="http://192.168.180.100/servlets/mms" mmsproxy="10.0.5.19" mmsport="8080" type="mms" user="38267" password="38267"></apn>
-      <apn mcc="297" mnc="2" carrier="T-Mobile MMS" apn="mms" mmsc="http://192.168.180.100/servlets/mms" mmsproxy="10.0.5.19" mmsport="8080" type="mms" user="38267" password="38267" authtype="3"></apn>
-      <apn mcc="297" mnc="2" carrier="Telekom MMS" apn="mms" mmsc="http://192.168.180.100/servlets/mms" mmsproxy="10.0.5.19" mmsport="8080" type="mms" user="38267" password="38267" authtype="1" protocol="IP"></apn>
-      <apn mcc="302" mnc="220" carrier="Koodo" apn="sp.koodo.com" mmsc="http://aliasredirect.net/proxy/koodo/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl,dun" mvno_match_data="4B" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="220" carrier="Koodo" apn="sp.koodo.com" mmsc="http://aliasredirect.net/proxy/koodo/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl,dun" authtype="0" mvno_match_data="4B" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="220" carrier="Koodo SP" apn="sp.koodo.com" mmsc="http://aliasredirect.net/proxy/koodo/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,agps,supl,fota,hipri,dun" authtype="0" mvno_match_data="4B4F" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="220" carrier="Mobile Internet" apn="sp.mb.com" mmsc="http://aliasredirect.net/proxy/mb/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,agps,supl,fota,hipri" mvno_match_data="4D4F" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="220" carrier="Mobile Internet" apn="sp.mb.com" mmsc="http://aliasredirect.net/proxy/mb/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,agps,supl,fota,hipri" authtype="0" mvno_match_data="5043" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="220" carrier="Mobile Internet" apn="sp.mb.com" mmsc="http://aliasredirect.net/proxy/mb/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl" mvno_match_data="50" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="220" carrier="PC mobile" apn="sp.mb.com" mmsc="http://aliasredirect.net/proxy/mb/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl" mvno_match_data="50" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="220" carrier="PC mobile" apn="sp.mb.com" mmsc="http://aliasredirect.net/proxy/mb/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl" authtype="0" mvno_match_data="50" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="220" carrier="TELUS" apn="sp.telus.com" mmsc="http://aliasredirect.net/proxy/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl" mvno_match_data="54" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="220" carrier="TELUS" apn="sp.telus.com" mmsc="http://aliasredirect.net/proxy/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl" authtype="0" mvno_match_data="54" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="220" carrier="TELUS SP" apn="sp.telus.com" mmsc="http://aliasredirect.net/proxy/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,agps,supl,fota,hipri" authtype="0" mvno_match_data="5455" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="221" carrier="Koodo" apn="sp.koodo.com" mmsc="http://aliasredirect.net/proxy/koodo/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl" mvno_match_data="4B" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="221" carrier="Koodo" apn="sp.koodo.com" mmsc="http://aliasredirect.net/proxy/koodo/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl,dun" mvno_match_data="4B" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="221" carrier="PC mobile" apn="sp.mb.com" mmsc="http://aliasredirect.net/proxy/mb/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl" mvno_match_data="50" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="221" carrier="TELUS" apn="sp.telus.com" mmsc="http://aliasredirect.net/proxy/mmsc" mmsproxy="74.49.0.18" mmsport="80" type="default,mms,supl" mvno_match_data="54" mvno_type="gid"></apn>
-      <apn mcc="302" mnc="270" carrier="Eastlink MMS" apn="mms.mobi.eastlink.ca" mmsc="http://mmss.mobi.eastlink.ca" mmsproxy="10.232.12.49" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="302" mnc="270" carrier="MMS" apn="mms.mobi.eastlink.ca" mmsc="http://mmss.mobi.eastlink.ca" mmsproxy="10.232.12.49" mmsport="8080" type="mms"></apn>
-      <apn mcc="302" mnc="270" carrier="MMS" apn="mms.mobi.eastlink.ca" mmsc="http://mmss.mobi.eastlink.ca" mmsproxy="10.232.12.49" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="302" mnc="320" carrier="MOMMS" apn="mms.davewireless.com" mmsc="http://mms.mobilicity.net" mmsproxy="10.100.3.4" mmsport="8080" type="mms"></apn>
-      <apn mcc="302" mnc="320" carrier="MOMMS" apn="mms.davewireless.com" mmsc="http://mms.mobilicity.net" mmsproxy="10.100.3.4" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="302" mnc="320" carrier="Mobilicity MMS" apn="mms.davewireless.com" mmsc="http://mms.mobilicity.net" mmsproxy="10.100.3.4" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="302" mnc="370" carrier="Fido Internet" apn="ltemobile.apn" mmsc="http://mms.fido.ca" mmsproxy="mmsproxy.fido.ca" mmsport="80" type="default,mms,agps,supl,fota,hipri" mvno_match_data="DD" mvno_type="gid" protocol="IPV4V6" roaming_protocol="IP"></apn>
-      <apn mcc="302" mnc="370" carrier="Fido LTE" apn="ltemobile.apn" mmsc="http://mms.fido.ca" mmsproxy="mmsproxy.fido.ca" mmsport="80" type="default,mms,supl" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="302" mnc="370" carrier="MTS" apn="sp.mts" mmsc="http://mmsc2.mts.net/" mmsproxy="wapgw1.mts.net" mmsport="9201" type="default,mms,supl" mvno_match_data="2C" mvno_type="gid" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="302" mnc="370" carrier="MTS" apn="sp.mts" mmsc="http://mmsc2.mts.net/" mmsproxy="wapgw1.mts.net" mmsport="9201" type="default,mms,supl" authtype="0" mvno_match_data="2C" mvno_type="gid" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="302" mnc="370" carrier="MTS Internet S" apn="sp.mts" mmsc="http://mmsc2.mts.net/" mmsproxy="wapgw1.mts.net" mmsport="9201" type="default,mms,agps,supl,fota,hipri" authtype="0" mvno_match_data="MTS" mvno_type="spn" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="302" mnc="490" carrier="MMS" apn="mms.windmobile.ca" mmsc="http://mms.windmobile.ca" mmsproxy="74.115.197.70" mmsport="8080" type="mms"></apn>
-      <apn mcc="302" mnc="490" carrier="MMS" apn="mms.windmobile.ca" mmsc="http://mms.windmobile.ca" mmsproxy="74.115.197.70" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="302" mnc="490" carrier="WIND MMS" apn="mms.windmobile.ca" mmsc="http://mms.windmobile.ca" mmsproxy="74.115.197.70" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="302" mnc="500" carrier="Media" apn="media.ng" mmsc="http://media.videotron.com" type="default,supl,mms"></apn>
-      <apn mcc="302" mnc="500" carrier="Videotron" apn="media.videotron" mmsc="http://media.videotron.com" type="default,mms,dun,agps,supl,fota,hipri" authtype="0"></apn>
-      <apn mcc="302" mnc="500" carrier="Videotron" apn="media.videotron" mmsc="http://media.videotron.com" type="default,supl,mms"></apn>
-      <apn mcc="302" mnc="500" carrier="Videotron" apn="media.videotron" mmsc="http://media.videotron.com" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="302" mnc="510" carrier="Media" apn="media.ng" mmsc="http://media.videotron.com" type="default,supl,mms"></apn>
-      <apn mcc="302" mnc="510" carrier="Videotron" apn="media.videotron" mmsc="http://media.videotron.com" type="default,supl,mms"></apn>
-      <apn mcc="302" mnc="520" carrier="Media" apn="media.ng" mmsc="http://media.videotron.com" type="default,supl,mms"></apn>
-      <apn mcc="302" mnc="610" carrier="Bell Mobility" apn="pda.bell.ca" mmsc="http://mms.bell.ca/mms/wapenc" type="default,mms,dun,supl"></apn>
-      <apn mcc="302" mnc="610" carrier="Bell Mobility" apn="pda.bell.ca" mmsc="http://mms.bell.ca/mms/wapenc" type="default,mms,dun,supl" authtype="0"></apn>
-      <apn mcc="302" mnc="610" carrier="Bell Mobility" apn="pda.bell.ca" mmsc="http://mms.bell.ca/mms/wapenc" type="default,mms,supl"></apn>
-      <apn mcc="302" mnc="610" carrier="Bell-Internet" apn="pda.bell.ca" mmsc="http://mms.bell.ca/mms/wapenc" mmsproxy="web.wireless.bell.ca" mmsport="80" type="default,mms" authtype="0"></apn>
-      <apn mcc="302" mnc="660" carrier="MTS" apn="sp.mts" mmsc="http://mmsc2.mts.net/" mmsproxy="wapgw1.mts.net" mmsport="9201" type="default,mms,supl" mvno_match_data="2C" mvno_type="gid" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="302" mnc="660" carrier="MTS" apn="sp.mts" mmsc="http://mmsc2.mts.net/" mmsproxy="wapgw1.mts.net" mmsport="9201" type="default,mms,supl" authtype="0" mvno_match_data="2C" mvno_type="gid" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="302" mnc="660" carrier="MTS Internet" apn="sp.mts" mmsc="http://mmsc2.mts.net/" mmsproxy="wapgw1.mts.net" mmsport="9201" type="default,mms,agps,supl,fota,hipri" authtype="0" mvno_match_data="MTS" mvno_type="spn" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="302" mnc="720" carrier="Chatr Internet" apn="chatrweb.apn" mmsc="http://mms.chatrwireless.com" mmsproxy="205.151.11.11" mmsport="80" type="default,mms,agps,supl,fota,hipri" authtype="0" mvno_match_data="chatr" mvno_type="spn" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="302" mnc="720" carrier="Cityfone Internet" apn="ltemobile.apn" mmsc="http://mms.gprs.rogers.com" mmsproxy="mmsproxy.rogers.com" mmsport="80" type="default,mms,agps,supl,fota,hipri" mvno_match_data="CITYFONE" mvno_type="spn" protocol="IPV4V6" roaming_protocol="IP"></apn>
-      <apn mcc="302" mnc="720" carrier="Rogers Internet" apn="ltemobile.apn" mmsc="http://mms.gprs.rogers.com" mmsproxy="mmsproxy.rogers.com" mmsport="80" type="default,mms,agps,supl,fota,hipri" mvno_match_data="ROGERS" mvno_type="spn" protocol="IPV4V6" roaming_protocol="IP"></apn>
-      <apn mcc="302" mnc="720" carrier="Rogers LTE" apn="ltemobile.apn" mmsc="http://mms.gprs.rogers.com" mmsproxy="mmsproxy.rogers.com" mmsport="80" type="default,mms,supl" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="302" mnc="720" carrier="Tbaytel Internet" apn="ltemobile.apn" mmsc="http://mms.gprs.rogers.com" mmsproxy="mmsproxy.rogers.com" mmsport="80" type="default,mms,agps,supl,fota,hipri" mvno_match_data="BA" mvno_type="gid" protocol="IPV4V6" roaming_protocol="IP"></apn>
-      <apn mcc="302" mnc="720" carrier="chatr" apn="chatrweb.apn" mmsc="http://mms.chatrwireless.com" mmsproxy="205.151.11.11" mmsport="80" type="default,mms,supl" mvno_match_data="302720x94" mvno_type="imsi" protocol="IPV4V6" roaming_protocol="IPV4V6" proxy="205.151.11.11" port="80"></apn>
-      <apn mcc="302" mnc="720" carrier="chatr" apn="chatrweb.apn" mmsc="http://mms.chatrwireless.com" mmsproxy="205.151.11.11" mmsport="80" type="default,mms,supl" authtype="0" mvno_match_data="302720x94" mvno_type="imsi" protocol="IPV4V6" roaming_protocol="IPV4V6" proxy="205.151.11.11" port="80"></apn>
-      <apn mcc="302" mnc="780" carrier="SaskTel" apn="pda.stm.sk.ca" mmsc="http://mms.sasktel.com/" mmsproxy="mig.sasktel.com" mmsport="80" type="default,mms,supl"></apn>
-      <apn mcc="302" mnc="780" carrier="SaskTel" apn="pda.stm.sk.ca" mmsc="http://mms.sasktel.com/" mmsproxy="mig.sasktel.com" mmsport="80" type="default,mms,supl,dun"></apn>
-      <apn mcc="310" mnc="0" carrier="MetroPCS" apn="internet" mmsc="http://mms.metropcs.net:3128/mmsc" user="*" password="*" server="*"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="1" server="*"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="10" server="*"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="11" server="*"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="15" server="*"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="16" server="*"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="2" server="*"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="3" server="*"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="9" server="*"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint" apn="mms_over_wifi" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="wifi" user="*" password="*" server="*"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint CdmaNai" apn="CdmaNai" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="mms" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="310" mnc="0" carrier="Sprint CdmaNai" apn="CdmaNai" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="mms" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="310" mnc="000" carrier="Verizon CDMA HRPD" mmsc="http://mms.vzwreseller.com/servlets/mms" type="default,mms,hipri,dun,supl" authtype="3" mvno_match_data="Tracfone" mvno_type="spn"></apn>
-      <apn mcc="310" mnc="000" carrier="Bluewire" apn="CdmaNai" mmsc="http://mms.blueunlimited.com" mmsport="8514" type="mms" mvno_match_data="bluewire" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="000" carrier="Bluewire" apn="VZWINTERNET" mmsc="http://mms.blueunlimited.com" mmsport="8514" type="default,mms,dun,supl" mvno_match_data="bluewire" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Bluewire" apn="VZWINTERNET" mmsc="http://mms.blueunlimited.com" mmsport="8514" type="default,mms,dun,supl" mvno_match_data="bluewire" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Commnet" apn="CdmaNai" mmsc="http://mmsc.cccomm.csky.us" mmsport="6672" type="mms" mvno_match_data="commnet" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="000" carrier="Distribution" apn="VZWINTERNET" mmsc="http://mms.dst.com/mms/" type="default,mms,dun,supl" mvno_match_data="distribution" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Distribution" apn="VZWINTERNET" mmsc="http://mms.dst.com/mms/" type="default,mms,dun,supl" mvno_match_data="distribution" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Flatwire" apn="VZWINTERNET" mmsc="http://mmsc.cleartalk.csky.us/" type="default,mms,dun,supl" mvno_match_data="flatwire" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Flatwire" apn="VZWINTERNET" mmsc="http://mmsc.cleartalk.csky.us/" type="default,mms,dun,supl" mvno_match_data="flatwire" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Internet" apn="n.ispsn" mmsc="http://mms.plspictures.com" mmsproxy="68.28.31.7" mmsport="80" type="default" protocol="IPV4V6" bearer="0"></apn>
-      <apn mcc="310" mnc="000" carrier="Mobilenation" apn="VZWINTERNET" mmsc="http://mms.mymn3g.net" mmsproxy="mms.mymn3g.net" mmsport="8081" type="default,mms,dun,supl" mvno_match_data="mobilenation" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Mobilenation" apn="VZWINTERNET" mmsc="http://mms.mymn3g.net" mmsproxy="mms.mymn3g.net" mmsport="8081" type="default,mms,dun,supl" mvno_match_data="mobilenation" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Mobipcs" apn="VZWINTERNET" mmsc="http://mms.mobipcs.com" type="default,mms,dun,supl" mvno_match_data="mobipcs" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Mobipcs" apn="VZWINTERNET" mmsc="http://mms.mobipcs.com" type="default,mms,dun,supl" mvno_match_data="mobipcs" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Mohave" apn="VZWINTERNET" mmsc="http://mms.mohavewireless.com" type="default,mms,dun,supl" mvno_match_data="mohave" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Mohave" apn="VZWINTERNET" mmsc="http://mms.mohavewireless.com" type="default,mms,dun,supl" mvno_match_data="mohave" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Peopleswire" apn="VZWINTERNET" mmsc="http://172.16.16.130/mms/" mmsport="80" type="default,mms,dun,supl" mvno_match_data="Peopleswire" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Peopleswire" apn="VZWINTERNET" mmsc="http://172.16.16.130/mms/" mmsport="80" type="default,mms,dun,supl" mvno_match_data="Peopleswire" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Revol" apn="VZWINTERNET" mmsc="http://mms.revol.us/revol/mms.php" type="default,mms,dun,supl" mvno_match_data="revol" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="Revol" apn="VZWINTERNET" mmsc="http://mms.revol.us/revol/mms.php" type="default,mms,dun,supl" mvno_match_data="revol" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="000" carrier="distribution" apn="CdmaNai" mmsc="http://mms.dst.com/mms/" type="mms" mvno_match_data="distribution" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="000" carrier="flatwire" apn="CdmaNai" mmsc="http://mmsc.cleartalk.csky.us/" type="mms" mvno_match_data="flatwire" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="000" carrier="mobilenation" apn="CdmaNai" mmsc="http://mms.mymn3g.net" mmsproxy="mms.mymn3g.net" mmsport="8081" type="mms" mvno_match_data="mobilenation" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="000" carrier="mobipcs" apn="CdmaNai" mmsc="http://mms.mobipcs.com" type="mms" mvno_match_data="mobipcs" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="000" carrier="mohave" apn="CdmaNai" mmsc="http://mms.mohavewireless.com" type="mms" mvno_match_data="mohave" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="000" carrier="peopleswire" apn="CdmaNai" mmsc="http://172.16.16.130/mms/" mmsport="80" type="mms" mvno_match_data="peopleswire" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="000" carrier="revol" apn="CdmaNai" mmsc="http://mms.revol.us/revol/mms.php" type="mms" mvno_match_data="revol" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun" protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="12"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="4"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="5"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="6"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="7"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="8"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="12"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="4"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="5"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="6"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="7"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="8"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="004" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="4" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="310" mnc="4" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="310" mnc="4" carrier="Verizon CDMA HRPD" apn="CdmaNai" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,hipri,dun,stdhipri,supl" protocol="IPV4V6" bearer="6" carrier_enabled="FALSE"></apn>
-      <apn mcc="310" mnc="4" carrier="Verizon CDMA HRPD" apn="CdmaNai" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,hipri,dun,stdhipri,supl" protocol="IPV4V6" bearer="6" carrier_enabled="TRUE"></apn>
-      <apn mcc="310" mnc="4" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri,supl" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="310" mnc="4" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri,supl" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="310" mnc="016" carrier="Cricket" apn="wap.mycricket.com" mmsc="http://mms.mycricket.com/servlets/mms" user="\@mycricket.com" password="cricket" authtype="2"></apn>
-      <apn mcc="310" mnc="020" carrier="Union Wireless MMS" apn="union.mms.com" mmsc="http://mmsc/01" mmsproxy="166.230.4.83" mmsport="8799" type="mms"></apn>
-      <apn mcc="310" mnc="028" carrier=" ALU Test-SIM CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="028" carrier=" ALU Test-SIM Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="28" carrier="ALU Test-SIM CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="310" mnc="28" carrier="ALU Test-SIM Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="310" mnc="030" carrier="myBlue Pix" apn="mmswap.centennialwireless.com" mmsc="http://mms.myblue.com/servlets/mms" mmsproxy="63.99.231.135" mmsport="8080" type="mms"></apn>
-      <apn mcc="310" mnc="30" carrier="myBlue Pix" apn="mmswap.centennialwireless.com" mmsc="http://mms.myblue.com/servlets/mms" mmsproxy="63.99.231.135" mmsport="8080" type="mms"></apn>
-      <apn mcc="310" mnc="035" carrier="Etex" apn="VZWINTERNET" mmsc="http://mmsi.etex.mobi" type="default,mms,dun,supl" mvno_match_data="etex" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="035" carrier="Etex" apn="VZWINTERNET" mmsc="http://mmsi.etex.mobi" type="default,mms,dun,supl" mvno_match_data="etex" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="035" carrier="etex" apn="CdmaNai" mmsc="http://mmsi.etex.mobi" type="mms" mvno_match_data="etex" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="040" carrier="Mta" apn="VZWINTERNET" mmsc="http://mmsc.mta.dataonair.net/" mmsproxy="209.4.229.85" mmsport="6672" type="default,mms,dun,supl" mvno_match_data="mta" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="040" carrier="Mta" apn="VZWINTERNET" mmsc="http://mmsc.mta.dataonair.net/" mmsproxy="209.4.229.85" mmsport="6672" type="default,mms,dun,supl" mvno_match_data="mta" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="040" carrier="mta" apn="CdmaNai" mmsc="http://mmsc.mta.dataonair.net/" mmsproxy="209.4.229.85" mmsport="6672" type="mms" mvno_match_data="mta" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="050" carrier="Alaskacomm" apn="VZWINTERNET" mmsc="http://mmsc1.acsalaska.net/servlets/mms" mvno_match_data="alaskacomm" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="050" carrier="Alaskacomm" apn="VZWINTERNET" mmsc="http://mmsc1.acsalaska.net/servlets/mms" type="default,mms,dun,supl" mvno_match_data="alaskacomm" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="050" carrier="alaskacomm" apn="CdmaNai" mmsc="http://mmsc1.acsalaska.net/servlets/mms" type="mms" mvno_match_data="alaskacomm" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="066" carrier="U.S.Cellular" apn="internet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" user="*" password="*" server="*"></apn>
-      <apn mcc="310" mnc="080" carrier="CorrMMS" apn="corrmms" mmsc="http://mms.iot1.com/corr/mms.php" mmsproxy="66.255.55.23" mmsport="80" type="mms"></apn>
-      <apn mcc="310" mnc="090" carrier="Edge MMS Prepay" apn="ppmms" mmsc="http://mms.edgemobile.net/mmsc" mmsproxy="12.108.12.13" mmsport="3128" type="mms"></apn>
-      <apn mcc="310" mnc="090" carrier="LTE DNSADMIN" apn="apndnsota.4g.mycricket.com" mmsc="http://mms.mycricket.com/servlets/mms" type="fota" authtype="0"></apn>
-      <apn mcc="310" mnc="090" carrier="LTE INTERNET" apn="4g.mycricket.com" mmsc="http://mms.mycricket.com/servlets/mms" type="default,dun,mms" authtype="0"></apn>
-      <apn mcc="310" mnc="090" carrier="MMS" apn="mms" mmsc="http://mms.edgemobile.net/mmsc" mmsproxy="12.108.12.13" mmsport="3128" type="mms"></apn>
-      <apn mcc="310" mnc="90" carrier="LTE ADMIN" apn="Apnota.4g.mycricket.com" mmsc="http://mms.mycricket.com/servlets/mms" type="default,dun,mms" authtype="0"></apn>
-      <apn mcc="310" mnc="100" carrier="PLAT-OTA-MMS" apn="plateaumms" mmsc="208.254.124.11:8514" mmsproxy="208.254.124.11" mmsport="8080" type="mms" password="mmsc"></apn>
-      <apn mcc="310" mnc="100" carrier="PLATMMS" apn="mms.plateau" mmsc="http://mms" mmsproxy="172.23.253.206" mmsport="8080" type="mms"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" bearer="1"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" bearer="10"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" bearer="11"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" bearer="15"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" bearer="16"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" bearer="2"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" bearer="3"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" bearer="9"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" authtype="0" bearer="1"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" authtype="0" bearer="10"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" authtype="0" bearer="11"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" authtype="0" bearer="15"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" authtype="0" bearer="16"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" authtype="0" bearer="2"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" authtype="0" bearer="3"></apn>
-      <apn mcc="310" mnc="120" carrier="SPCS Global" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms" authtype="0" bearer="9"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" authtype="3" bearer="1" server="*"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" authtype="3" bearer="10" server="*"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" authtype="3" bearer="11" server="*"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" authtype="3" bearer="15" server="*"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" authtype="3" bearer="16" server="*"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" authtype="3" bearer="2" server="*"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" authtype="3" bearer="3" server="*"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" authtype="3" bearer="9" server="*"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" bearer="12"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" bearer="4"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" bearer="5"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" bearer="6"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" bearer="7"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" bearer="8"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" authtype="0" bearer="12"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" authtype="0" bearer="4"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" authtype="0" bearer="5"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" authtype="0" bearer="6"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" authtype="0" bearer="7"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs" authtype="0" bearer="8"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs,dun" bearer="12"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs,dun" bearer="4"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs,dun" bearer="5"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs,dun" bearer="6"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs,dun" bearer="7"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint" apn="sprint" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,supl,mms,ims,cbs,dun" bearer="8"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint CdmaNai" apn="CdmaNai" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="mms" authtype="0" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="310" mnc="120" carrier="Sprint CdmaNai" apn="CdmaNai" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="mms" authtype="0" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="310" mnc="130" carrier="Carolina West Wireless" apn="home.cww.com" mmsc="" mmsproxy="" mmsport="" type="default,supl,fota"></apn>
-      <apn mcc="310" mnc="130" carrier="Carolina West Wireless IMS" apn="ims" mmsc="" mmsproxy="" mmsport="" type="ims"></apn>
-      <apn mcc="310" mnc="130" carrier="Carolina West Wireless MMS" apn="mms" mmsc="http://mms.cwwmms.com/cww/mms.php" mmsproxy="" mmsport="" type="mms"></apn>
-      <apn mcc="310" mnc="130" carrier="Carolina West Wireless Tethering" apn="tethering.cww.com" mmsc="" mmsproxy="" mmsport="80" type="dun"></apn>
-      <apn mcc="310" mnc="150" carrier="internet" apn="ndo" mmsc="http://mmsc.aiowireless.net" mmsproxy="proxy.aiowireless.net" mmsport="80" type="default,mms,fota,hipri,supl"></apn>
-      <apn mcc="310" mnc="160" carrier="MetroPCS 160" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="160" carrier="T-Mobile US 160" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="160" carrier="T-Mobile US 160" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="160" carrier="T-Mobile US 160" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="160" carrier="T-Mobile US 160" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="170" carrier="Cingular MMS" apn="wap.cingular" mmsc="http://mmsc.cingular.com" mmsproxy="66.209.11.32" mmsport="8080" type="mms" user="WAP@CINGULARGPRS.COM" password="CINGULAR1"></apn>
-      <apn mcc="310" mnc="180" carrier="WCW-MMS" apn="mms.wcc.net" mmsc="http://mms.wcc.net" mmsproxy="209.55.70.246" mmsport="80" type="mms" user="13257630000" password="mmsc" authtype="3"></apn>
-      <apn mcc="310" mnc="200" carrier="MetroPCS 200" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="200" carrier="T-Mobile US 200" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="200" carrier="T-Mobile US 200" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="200" carrier="T-Mobile US 200" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="200" carrier="T-Mobile US 200" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="210" carrier="MetroPCS 210" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="210" carrier="T-Mobile US 210" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="210" carrier="T-Mobile US 210" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="210" carrier="T-Mobile US 210" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="210" carrier="T-Mobile US 210" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="220" carrier="MetroPCS 220" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="220" carrier="T-Mobile US 220" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="220" carrier="T-Mobile US 220" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="220" carrier="T-Mobile US 220" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="220" carrier="T-Mobile US 220" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="230" carrier="MetroPCS 230" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="230" carrier="T-Mobile US 230" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="230" carrier="T-Mobile US 230" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="230" carrier="T-Mobile US 230" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="230" carrier="T-Mobile US 230" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="240" carrier="MetroPCS 240" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="240" carrier="T-Mobile US 240" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="240" carrier="T-Mobile US 240" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="240" carrier="T-Mobile US 240" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="240" carrier="T-Mobile US 240" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="250" carrier="MetroPCS 250" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="250" carrier="T-Mobile US 250" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="250" carrier="T-Mobile US 250" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="250" carrier="T-Mobile US 250" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="250" carrier="T-Mobile US 250" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="260" carrier="T-Mobile GPRS" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="260" carrier="T-Mobile GPRS" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="260" carrier="T-Mobile US" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="260" carrier="T-Mobile US" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="260" carrier="SIMPLE" apn="simple" mmsc="http://smpl.mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" mvno_match_data="534D" mvno_type="gid" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="260" carrier="Consumer Cellular" apn="wholesale" mmsc="http://wholesale.mmsmvno.com/mms/wapenc" mmsport="80" type="default,mms,supl,hipri" mvno_match_data="2AC9" mvno_type="gid"></apn>
-      <apn mcc="310" mnc="260" carrier="MetroPCS" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="260" carrier="TFWAP" apn="wap.tracfone" mmsc="http://mms.tracfone.com" type="default,mms,supl,hipri,fota" mvno_match_data="ddff" mvno_type="gid" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="260" carrier="TFWAP" apn="wap.tracfone" mmsc="http://mms.tracfone.com" type="default,mms,supl,hipri,fota" mvno_match_data="deff" mvno_type="gid" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="270" carrier="MetroPCS 270" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="270" carrier="T-Mobile US 270" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="270" carrier="T-Mobile US 270" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="270" carrier="T-Mobile US 270" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="270" carrier="T-Mobile US 270" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="300" carrier="MetroPCS 300" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="300" carrier="T-Mobile US 300" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="300" carrier="T-Mobile US 300" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="300" carrier="T-Mobile US 300" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="310" carrier="MetroPCS 310" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="310" carrier="T-Mobile US 310" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="310" carrier="T-Mobile US 310" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="310" carrier="T-Mobile US 310" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="310" carrier="T-Mobile US 310" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="320" carrier="Cellular One ClearSky MMS" apn="wap.c1csky.net" mmsc="http://mmsc.c1neaz.csky.us:6672" mmsproxy="209.4.229.94" mmsport="9401" type="mms"></apn>
-      <apn mcc="310" mnc="330" carrier="Alltel2" apn="VZWINTERNET" mmsc="http://mms.alltel.com/servlets/mms" mmsproxy="mms.alltel.com" mmsport="8080" type="default,mms,dun,supl" mvno_match_data="alltel2" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="330" carrier="Alltel2" apn="VZWINTERNET" mmsc="http://mms.alltel.com/servlets/mms" mmsproxy="mms.alltel.com" mmsport="8080" type="default,mms,dun,supl" mvno_match_data="alltel2" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="330" carrier="alltel2" apn="CdmaNai" mmsc="http://mms.alltel.com/servlets/mms" mmsproxy="mms.alltel.com" mmsport="8080" type="mms" mvno_match_data="alltel2" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="360" carrier="Pioneer" apn="VZWINTERNET" mmsc="http://mms1.zsend.com" type="default,mms,dun,supl" mvno_match_data="pioneer" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="360" carrier="Pioneer" apn="VZWINTERNET" mmsc="http://mms1.zsend.com" type="default,mms,dun,supl" mvno_match_data="pioneer" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="360" carrier="pioneer" apn="CdmaNai" mmsc="http://mms1.zsend.com" type="mms" mvno_match_data="pioneer" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="380" carrier="AWS MMS" apn="proxy" mmsc="http://mmsc.mymmode.com" mmsproxy="10.250.250.55" mmsport="8080" type="mms"></apn>
-      <apn mcc="310" mnc="380" carrier="Cingular 380 ATT" apn="proxy" mmsc="http://mmsc.cingular.com/" mmsproxy="wireless.cingular.com" type="default,supl,mms"></apn>
-      <apn mcc="310" mnc="390" carrier="Celloneet MMS" apn="mms.celloneet.com" mmsc="http://mms.celloneet.com/servlets/mms" mmsproxy="63.99.231.135" mmsport="8080" type="mms" user="user1@mms.celloneet.com" password="celloneet"></apn>
-      <apn mcc="310" mnc="410" carrier="AT&amp;T PTA" apn="pta" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,mms,supl,hipri,dun" authtype="0"></apn>
-      <apn mcc="310" mnc="410" carrier="AT&amp;T US MMS" apn="phone" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="310" mnc="410" carrier="AT&amp;T US MMS" apn="wap.cingular" mmsc="http://mmsc.cingular.com" mmsproxy="wireless.cingular.com" mmsport="80" type="mms" authtype="0" proxy="wireless.cingular.com" port="80"></apn>
-      <apn mcc="310" mnc="410" carrier="ATT Nextgenphone" apn="nxtgenphone" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,mms,supl,fota,hipri"></apn>
-      <apn mcc="310" mnc="410" carrier="ATT Phone" apn="phone" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,mms,supl,fota"></apn>
-      <apn mcc="310" mnc="410" carrier="ATT Phone" apn="phone" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,mms,supl,fota" authtype="0"></apn>
-      <apn mcc="310" mnc="410" carrier="ATT WAP" apn="wap.cingular" mmsc="http://mmsc.cingular.com/" mmsproxy="wireless.cingular.com" type="default,supl,mms" server="cingulargprs.com" proxy="wireless.cingular.com" port="80"></apn>
-      <apn mcc="310" mnc="410" carrier="ATT WAP" apn="wap.cingular" mmsc="http://mmsc.cingular.com/" mmsproxy="wireless.cingular.com" type="default,supl,mms" authtype="0" server="cingulargprs.com" proxy="wireless.cingular.com" port="80"></apn>
-      <apn mcc="310" mnc="410" carrier="Defense Mobile" apn="PRODATA" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,mms,supl" mvno_match_data="60FF" mvno_type="gid" protocol="IP"></apn>
-      <apn mcc="310" mnc="410" carrier="TFDATA" apn="tfdata" mmsc="http://mms-tf.net" mmsproxy="mms3.tracfone.com" mmsport="80" type="default,mms,supl,hipri,fota" mvno_match_data="ddff" mvno_type="gid" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="410" carrier="TFDATA" apn="tfdata" mmsc="http://mms-tf.net" mmsproxy="mms3.tracfone.com" mmsport="80" type="default,mms,supl,hipri,fota" mvno_match_data="deff" mvno_type="gid" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="420" carrier="CBW Data" apn="wap.gocbw.com" mmsc="http://mms.gocbw.com:8088/mms" mmsproxy="216.68.79.202" mmsport="80" type="default,supl,mms"></apn>
-      <apn mcc="310" mnc="430" carrier="Gci" apn="VZWINTERNET" mmsc="http://mmsc.akdt.dataonair.net:6672/" type="default,mms,dun,supl" mvno_match_data="gci" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="430" carrier="Gci" apn="VZWINTERNET" mmsc="http://mmsc.akdt.dataonair.net:6672/" type="default,mms,dun,supl" mvno_match_data="gci" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="430" carrier="gci" apn="CdmaNai" mmsc="http://mmsc.akdt.dataonair.net:6672/" type="mms" mvno_match_data="gci" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="450" carrier="Viaero MMS" apn="mms" mmsc="http://mms.viaero.com" mmsproxy="10.168.3.23" mmsport="9401" type="mms"></apn>
-      <apn mcc="310" mnc="470" carrier="MediaNet" apn="wap.cingular" mmsc="http://mmsc.cingular.com" mmsproxy="66.209.11.32" mmsport="8080" type="default,supl,mms" user="WAP@CINGULARGPRS.COM" password="CINGULAR1"></apn>
-      <apn mcc="310" mnc="470" carrier="MediaNet" apn="wap.cingular" mmsc="http://mmsc.cingular.com" mmsproxy="66.209.11.32" mmsport="8080" type="default,supl,mms" user="WAP@CINGULARGPRS.COM" password="CINGULAR1" authtype="3"></apn>
-      <apn mcc="310" mnc="470" carrier="nTelos Ota" apn="admin.4g.ntelos.com" mmsc="http://mms.ntelospcs.net" type="admin,fota,ota" protocol="IPV4V6" bearer="13" server="*"></apn>
-      <apn mcc="310" mnc="470" carrier="nTelos Ota" apn="admin.4g.ntelos.com" mmsc="http://mms.ntelospcs.net" type="admin,fota,ota" protocol="IPV4V6" bearer="14" server="*"></apn>
-      <apn mcc="310" mnc="470" carrier="nTelos Tether" apn="tethering.4g.ntelos.com" mmsc="http://mms.ntelospcs.net" type="dun,pam" protocol="IPV4V6" bearer="13" server="*"></apn>
-      <apn mcc="310" mnc="470" carrier="nTelos Tether" apn="tethering.4g.ntelos.com" mmsc="http://mms.ntelospcs.net" type="dun,pam" protocol="IPV4V6" bearer="14" server="*"></apn>
-      <apn mcc="310" mnc="470" carrier="nTelos Wireless" apn="CdmaNai" mmsc="http://mms.ntelospcs.net/" type="mms" mvno_match_data="ntelos" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="470" carrier="nTelos Wireless" apn="internet.4g.ntelos.com" mmsc="http://mms.ntelospcs.net" type="default,internet,supl,hipri,mms" protocol="IPV4V6" server="*"></apn>
-      <apn mcc="310" mnc="470" carrier="nTelos Wireless" apn="internet.4g.ntelos.com" mmsc="http://mms.ntelospcs.net" type="default,internet,supl,hipri,mms" authtype="0" protocol="IPV4V6" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="310" mnc="480" carrier="MediaNet" apn="wap.cingular" mmsc="http://mmsc.cingular.com" mmsproxy="66.209.11.32" mmsport="8080" type="default,supl,mms" user="WAP@CINGULARGPRS.COM" password="CINGULAR1"></apn>
-      <apn mcc="310" mnc="490" carrier="GoodCall Picture Message" apn="good.call" mmsc="http://mms.suncom.net:8088/mms" mmsproxy="66.150.33.125" mmsport="8080" type="mms"></apn>
-      <apn mcc="310" mnc="490" carrier="GoodCall Picture Message" apn="good.call" mmsc="http://mms.suncom.net:8088/mms" mmsproxy="66.150.33.125" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="310" mnc="490" carrier="MetroPCS 490" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="490" carrier="Suncom MMS" apn="mms" mmsc="http://mms.suncom.net:8088/mms" mmsproxy="66.150.33.125" mmsport="8080" type="mms"></apn>
-      <apn mcc="310" mnc="490" carrier="Suncom MMS" apn="mms" mmsc="http://mms.suncom.net:8088/mms" mmsproxy="66.150.33.125" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="310" mnc="490" carrier="T-Mobile US 490" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="490" carrier="T-Mobile US 490" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="490" carrier="T-Mobile US 490" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="490" carrier="T-Mobile US 490" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="530" carrier="MetroPCS 530" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="530" carrier="T-Mobile US 530" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="530" carrier="T-Mobile US 530" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="530" carrier="T-Mobile US 530" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="560" carrier="DobsonMMS" apn="dobsoncellularwap" mmsc="http://mmsc" mmsproxy="172.23.1.252" mmsport="8799" type="mms"></apn>
-      <apn mcc="310" mnc="570" carrier="Cellular One MMS" apn="clearsky" mmsc="http://mmsc.mtpcs.csky.us:6672/" mmsproxy="209.4.229.229" mmsport="9201" type="mms"></apn>
-      <apn mcc="310" mnc="570" carrier="ChinookMMS" apn="wapgw.chinookwireless.net" mmsc="http://mms.cellonenation.net/mms/" mmsproxy="204.181.155.195" mmsport="8080" type="mms"></apn>
-      <apn mcc="310" mnc="580" carrier="Inland" apn="VZWINTERNET" mmsc="http://mms.inland3g.com/inland/mms.php" type="default,mms,dun,supl" mvno_match_data="inland" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="580" carrier="Inland" apn="VZWINTERNET" mmsc="http://mms.inland3g.com/inland/mms.php" type="default,mms,dun,supl" mvno_match_data="inland" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="580" carrier="MetroPCS 580" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="580" carrier="T-Mobile US 580" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="580" carrier="T-Mobile US 580" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="580" carrier="T-Mobile US 580" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="580" carrier="T-Mobile US 580" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="580" carrier="inland" apn="CdmaNai" mmsc="http://mms.inland3g.com/inland/mms.php" type="mms" mvno_match_data="inland" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="590" carrier="CellularOne MMS" apn="cellular1wap" mmsc="http://mmsc" mmsproxy="172.23.1.252" mmsport="8799" type="mms"></apn>
-      <apn mcc="310" mnc="590" carrier="CellularOne MMS" apn="cellular1wap" mmsc="http://mmsc" mmsproxy="172.23.1.252" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="310" mnc="590" carrier="MetroPCS 590" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="590" carrier="T-Mobile US 590" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="590" carrier="T-Mobile US 590" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="590" carrier="T-Mobile US 590" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="600" carrier="Cellcom" apn="Cellcom mms" mmsc="http://mms.cellcom.com:9201/cellcom/mms.php" type="mms" protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="600" carrier="Cellcom" apn="VZWINTERNET" mmsc="http://mms.cellcom.com/cellcom/mms.php" type="default,mms,dun,supl" mvno_match_data="cellcom" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="600" carrier="Cellcom" apn="VZWINTERNET" mmsc="http://mms.cellcom.com/cellcom/mms.php" type="default,mms,dun,supl" mvno_match_data="cellcom" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="600" carrier="cellcom" apn="CdmaNai" mmsc="http://mms.cellcom.com/cellcom/mms.php" type="mms" mvno_match_data="cellcom" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="610" carrier="EpicMMS" apn="mms.epictouch" mmsc="http://mmsc.westlinkcom.com/servlets/mms" mmsproxy="63.99.231.135" mmsport="8080" type="mms"></apn>
-      <apn mcc="310" mnc="640" carrier="MetroPCS 640" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="640" carrier="T-Mobile US 640" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="640" carrier="T-Mobile US 640" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="640" carrier="T-Mobile US 640" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="660" carrier="MetroPCS 660" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="660" carrier="T-Mobile US 660" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="660" carrier="T-Mobile US 660" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="660" carrier="T-Mobile US 660" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="660" carrier="T-Mobile US 660" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="750" carrier="Appalachian" apn="VZWINTERNET" mmsc="http://mms.ekn.com" mmsport="80" type="default,mms,dun,supl" mvno_match_data="appalachian" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="750" carrier="Appalachian" apn="VZWINTERNET" mmsc="http://mms.ekn.com" mmsport="80" type="default,mms,dun,supl" mvno_match_data="appalachian" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="750" carrier="appalachian" apn="CdmaNai" mmsc="http://mms.ekn.com" mmsport="80" type="mms" mvno_match_data="appalachian" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="770" carrier="Picture Messaging" apn="wap1.iwireless.com" mmsc="http://mmsc.iwireless.dataonair.net:6672" mmsproxy="209.4.229.31" mmsport="9401" type="mms"></apn>
-      <apn mcc="310" mnc="770" carrier="Picture Messaging" apn="wap1.iwireless.com" mmsc="http://mmsc.iwireless.dataonair.net:6672" mmsproxy="209.4.229.32" mmsport="9401" type="mms"></apn>
-      <apn mcc="310" mnc="800" carrier="MetroPCS 800" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,supl,mms" mvno_match_data="6D" mvno_type="gid" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="800" carrier="T-Mobile US 800" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc"></apn>
-      <apn mcc="310" mnc="800" carrier="T-Mobile US 800" apn="epc.tmobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,mms,supl,hipri,fota" user="none" password="none" authtype="3" protocol="IP" server="*"></apn>
-      <apn mcc="310" mnc="800" carrier="T-Mobile US 800" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="800" carrier="T-Mobile US 800" apn="fast.t-mobile.com" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" authtype="0" protocol="IPV6" roaming_protocol="IP"></apn>
-      <apn mcc="310" mnc="820" carrier="Nepa" apn="VZWINTERNET" mmsc="http://mmsc.c1nepa.csky.us:6672/" type="default,mms,dun,supl" mvno_match_data="nepa" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="820" carrier="Nepa" apn="VZWINTERNET" mmsc="http://mmsc.c1nepa.csky.us:6672/" type="default,mms,dun,supl" mvno_match_data="nepa" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="820" carrier="nepa" apn="CdmaNai" mmsc="http://mmsc.c1nepa.csky.us:6672/" type="mms" mvno_match_data="nepa" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="840" carrier="Edge MMS Prepay" apn="ppmms" mmsc="http://mms.edgemobile.net/mmsc" mmsproxy="12.108.12.13" mmsport="3128" type="mms"></apn>
-      <apn mcc="310" mnc="840" carrier="MMS" apn="mms" mmsc="http://mms.edgemobile.net/mmsc" mmsproxy="12.108.12.13" mmsport="3128" type="mms"></apn>
-      <apn mcc="310" mnc="880" carrier="DTC MMS" apn="mms.adv.com" mmsc="http://mms.iot1.com/advantage/mms.php" type="mms"></apn>
-      <apn mcc="310" mnc="900" carrier="Midrivers" apn="VZWINTERNET" mmsc="http://mmsc.midrivers.csky.us:6672/" mmsproxy="209.4.229.27" mmsport="9401" type="default,mms,dun,supl" mvno_match_data="midrivers" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="900" carrier="Midrivers" apn="VZWINTERNET" mmsc="http://mmsc.midrivers.csky.us:6672/" mmsproxy="209.4.229.27" mmsport="9401" type="default,mms,dun,supl" mvno_match_data="midrivers" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="900" carrier="midrivers" apn="CdmaNai" mmsc="http://mmsc.midrivers.csky.us:6672/" mmsproxy="209.4.229.27" mmsport="9401" type="mms" mvno_match_data="midrivers" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="910" carrier="WOW_WAP" apn="wap.firstcellular.com" mmsc="mms.firstcellular.net/mmsc" mmsproxy="10.101.1.5" mmsport="3128" type="default,supl,mms"></apn>
-      <apn mcc="310" mnc="920" carrier="Jamesvalley" apn="VZWINTERNET" mmsc="http://m.iot1.com/jamesvalley/mms.php" mmsproxy="m.iot1.com" mmsport="9201" type="default,mms,dun,supl" mvno_match_data="jamesvalley" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="920" carrier="Jamesvalley" apn="VZWINTERNET" mmsc="http://m.iot1.com/jamesvalley/mms.php" mmsproxy="m.iot1.com" mmsport="9201" type="default,mms,dun,supl" mvno_match_data="jamesvalley" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="920" carrier="jamesvalley" apn="CdmaNai" mmsc="http://m.iot1.com/jamesvalley/mms.php" mmsproxy="m.iot1.com" mmsport="9201" type="mms" mvno_match_data="jamesvalley" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="930" carrier="Copper Valley" apn="VZWINTERNET" mmsc="http://cvwmms.com/servlets/mms" type="default,mms,dun,supl" mvno_match_data="coppervalley" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="930" carrier="Copper Valley" apn="VZWINTERNET" mmsc="http://cvwmms.com/servlets/mms" type="default,mms,dun,supl" mvno_match_data="coppervalley" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="930" carrier="coppervalley" apn="CdmaNai" mmsc="http://cvwmms.com/servlets/mms" type="mms" mvno_match_data="coppervalley" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="960" carrier="Nntcwire" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="nntcwire" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="Nntcwire" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="nntcwire" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="Silverstar" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="silverstar" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="Silverstar" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="silverstar" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="Snakeriver" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="snakeriver" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="Snakeriver" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="snakeriver" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="Southcentral" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="southcentral" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="Southcentral" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="southcentral" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="Syringa" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="syringa" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="Syringa" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="syringa" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="nntcwire" apn="CdmaNai" mmsc="http://mms.rinawireless.com" type="mms" mvno_match_data="nntcwire" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="960" carrier="silverstar" apn="CdmaNai" mmsc="http://mms.rinawireless.com" type="mms" mvno_match_data="silverstar" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="960" carrier="snakeriver" apn="CdmaNai" mmsc="http://mms.rinawireless.com" type="mms" mvno_match_data="snakeriver" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="960" carrier="southcentral" apn="CdmaNai" mmsc="http://mms.rinawireless.com" type="mms" mvno_match_data="southcentral" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="960" carrier="strata" apn="CdmaNai" mmsc="http://mms.rinawireless.com" type="mms" mvno_match_data="strata" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="310" mnc="960" carrier="strata" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="strata" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="strata" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="strata" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="310" mnc="960" carrier="syringa" apn="CdmaNai" mmsc="http://mms.rinawireless.com" type="mms" mvno_match_data="syringa" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="050" carrier="Thumbcellular" apn="VZWINTERNET" mmsc="http://mms.thumbcell.com/thumb/mms.php" type="default,mms,dun,supl" mvno_match_data="thumbcellular" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="050" carrier="Thumbcellular" apn="VZWINTERNET" mmsc="http://mms.thumbcell.com/thumb/mms.php" type="default,mms,dun,supl" mvno_match_data="thumbcellular" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="050" carrier="thumbcellular" apn="CdmaNai" mmsc="http://mms.thumbcell.com/thumb/mms.php" type="mms" mvno_match_data="thumbcellular" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="070" carrier="Elementmobile" apn="VZWINTERNET" mmsc="http://mms.elementmobile.net" mmsport="8080" type="default,mms,dun,supl" mvno_match_data="elementmobile" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="070" carrier="Elementmobile" apn="VZWINTERNET" mmsc="http://mms.elementmobile.net" mmsport="8080" type="default,mms,dun,supl" mvno_match_data="elementmobile" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="070" carrier="elementmobile" apn="CdmaNai" mmsc="http://mms.elementmobile.net" mmsport="8080" type="mms" mvno_match_data="elementmobile" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="080" carrier="PINE WAP" apn="PINE" mmsc="http://69.8.34.146/mms/" mmsproxy="69.8.34.146" mmsport="9401" type="default,mms"></apn>
-      <apn mcc="311" mnc="100" carrier="NexTech Wireless" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="mms" authtype="3" protocol="IPV4V6" server="*"></apn>
-      <apn mcc="311" mnc="100" carrier="NexTech Wireless" apn="CdmaNai" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="mms" protocol="IPV4V6" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="140" carrier="Sprocket" apn="VZWINTERNET" mmsc="http://mms.sprocketwireless.com" type="default,mms,dun,supl" mvno_match_data="sprocket" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="140" carrier="Sprocket" apn="VZWINTERNET" mmsc="http://mms.sprocketwireless.com" type="default,mms,dun,supl" mvno_match_data="sprocket" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="140" carrier="sprocket" apn="CdmaNai" mmsc="http://mms.sprocketwireless.com" type="mms" mvno_match_data="sprocket" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="190" carrier="MMS" apn="mms.cellular1.net" mmsc="http://mms.cellular1.net" mmsproxy="10.10.0.97" mmsport="9201" type="mms"></apn>
-      <apn mcc="311" mnc="190" carrier="MMS" apn="wap.cellular1.net" mmsc="http://mms.cellular1.net/ecit/mms.php" type="mms"></apn>
-      <apn mcc="311" mnc="210" carrier="Farmers MMS" apn="mms.farmers.com" mmsc="172.16.0.37:8514" type="mms"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="220" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="220" carrier="USCC" apn="internet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" mmsport="80" type="mms" authtype="3"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="221" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="222" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="223" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="224" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="true"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="225" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="true"></apn>
-      <apn mcc="311" mnc="225" carrier="USCC INTERNET 2" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,dun,mms,fota"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="226" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="227" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="228" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="229" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire" apn="CdmaNai" mmsc="http://pix.cspire.com/servlets/mms" mmsproxy="66.175.144.91" mmsport="80" type="mms" mvno_match_data="cspire" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire" apn="Cspire mms" mmsc="http://pix.cspire.com/servlets/mms" type="mms" protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire internet" apn="internet.cs4glte.com" mmsc="http://pix.cspire.com" type="default,internet,mms" protocol="IPV4V6" server="*"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire internet" apn="internet.cs4glte.com" mmsc="http://pix.cspire.com" type="default,internet,mms" protocol="IPV4V6" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire ota" apn="admin.cs4glte.com" mmsc="http://pix.cspire.com" type="admin,fota,ota" protocol="IPV4V6" bearer="13" server="*"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire ota" apn="admin.cs4glte.com" mmsc="http://pix.cspire.com" type="admin,fota,ota" protocol="IPV4V6" bearer="13" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire ota" apn="admin.cs4glte.com" mmsc="http://pix.cspire.com" type="admin,fota,ota" protocol="IPV4V6" bearer="14" server="*"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire ota" apn="admin.cs4glte.com" mmsc="http://pix.cspire.com" type="admin,fota,ota" protocol="IPV4V6" bearer="14" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire tether" apn="tethering.cs4glte.com" mmsc="http://pix.cspire.com" type="dun,pam" protocol="IPV4V6" bearer="13" server="*"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire tether" apn="tethering.cs4glte.com" mmsc="http://pix.cspire.com" type="dun,pam" protocol="IPV4V6" bearer="13" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire tether" apn="tethering.cs4glte.com" mmsc="http://pix.cspire.com" type="dun,pam" protocol="IPV4V6" bearer="14" server="*"></apn>
-      <apn mcc="311" mnc="230" carrier="CSpire tether" apn="tethering.cs4glte.com" mmsc="http://pix.cspire.com" type="dun,pam" protocol="IPV4V6" bearer="14" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="310" carrier="Leaco" apn="VZWINTERNET" mmsc="http://204.181.155.217/mms/" type="default,mms,dun,supl" mvno_match_data="leaco" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="310" carrier="Leaco" apn="VZWINTERNET" mmsc="http://204.181.155.217/mms/" type="default,mms,dun,supl" mvno_match_data="leaco" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="310" carrier="leaco" apn="CdmaNai" mmsc="http://204.181.155.217/mms/" type="mms" mvno_match_data="leaco" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="340" carrier="Illinois valley" apn="VZWINTERNET" mmsc="http://mms.iot1.com/ivc/mms.php" type="default,mms,dun,supl" mvno_match_data="illinoisvalley" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="340" carrier="Illinois valley" apn="VZWINTERNET" mmsc="http://mms.iot1.com/ivc/mms.php" type="default,mms,dun,supl" mvno_match_data="illinoisvalley" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="340" carrier="illinoisvalley" apn="CdmaNai" mmsc="http://mms.iot1.com/ivc/mms.php" type="mms" mvno_match_data="illinoisvalley" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="350" carrier="Nemont" apn="VZWINTERNET" mmsc="http://mms.nemont.mobi/mms/" type="default,mms,dun,supl" mvno_match_data="nemont" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="350" carrier="Nemont" apn="VZWINTERNET" mmsc="http://mms.nemont.mobi/mms/" type="default,mms,dun,supl" mvno_match_data="nemont" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="350" carrier="nemont" apn="CdmaNai" mmsc="http://mms.nemont.mobi/mms/" type="mms" mvno_match_data="nemont" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="370" carrier="ACS MMS" apn="mms.acs" mmsc="http://mmsc.acsalaska.net" mmsproxy="209.4.229.92" mmsport="9201" type="mms" mvno_match_data="3113702" mvno_type="imsi"></apn>
-      <apn mcc="311" mnc="370" carrier="GCI MMS" apn="mms.gci" mmsc="http://mmsc.gci.csky.us:6672" mmsproxy="209.4.229.92" mmsport="9201" type="mms" proxy="209.4.229.92" port="9201"></apn>
-      <apn mcc="311" mnc="390" carrier="Ericsson Test-SIM CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="390" carrier="Ericsson Test-SIM CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="390" carrier="Ericsson Test-SIM CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="390" carrier="Ericsson Test-SIM Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="390" carrier="Ericsson Test-SIM Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,dun" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="390" carrier="Ericsson Test-SIM Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="410" carrier="Chatmobrsa2" apn="VZWINTERNET" mmsc="http://mmsc.hawkeyeswitch.net/mms/" mmsport="80" type="default,mms,dun,supl" mvno_match_data="chatmobrsa2" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="410" carrier="Chatmobrsa2" apn="VZWINTERNET" mmsc="http://mmsc.hawkeyeswitch.net/mms/" mmsport="80" type="default,mms,dun,supl" mvno_match_data="chatmobrsa2" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="410" carrier="chatmobrsa2" apn="CdmaNai" mmsc="http://mmsc.hawkeyeswitch.net/mms/" mmsport="80" type="mms" mvno_match_data="chatmobrsa2" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="420" carrier="Northwestcell" apn="VZWINTERNET" mmsc="http://mms.nwmcell.com/mms/" type="default,mms,dun,supl" mvno_match_data="northwestcell" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="420" carrier="Northwestcell" apn="VZWINTERNET" mmsc="http://mms.nwmcell.com/mms/" type="default,mms,dun,supl" mvno_match_data="northwestcell" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="420" carrier="northwestcell" apn="CdmaNai" mmsc="http://mms.nwmcell.com/mms/" type="mms" mvno_match_data="northwestcell" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="430" carrier="Chatmobrsa1" apn="VZWINTERNET" mmsc="http://mmsc.hawkeyeswitch.net/mms/" mmsport="80" type="default,mms,dun,supl" mvno_match_data="chatmobrsa1" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="430" carrier="Chatmobrsa1" apn="VZWINTERNET" mmsc="http://mmsc.hawkeyeswitch.net/mms/" mmsport="80" type="default,mms,dun,supl" mvno_match_data="chatmobrsa1" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="430" carrier="chatmobrsa1" apn="CdmaNai" mmsc="http://mmsc.hawkeyeswitch.net/mms/" mmsport="80" type="mms" mvno_match_data="chatmobrsa1" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="440" carrier="Bluegrass" apn="Bluegrass mms" mmsc="http://m.iot1.com/bluegrass/mms.php" type="mms" protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="440" carrier="Bluegrass" apn="VZWINTERNET" mmsc="http://mms.iot1.com/bluegrass/mms.php" type="default,mms,dun,supl" mvno_match_data="bluegrass" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="440" carrier="Bluegrass" apn="VZWINTERNET" mmsc="http://mms.iot1.com/bluegrass/mms.php" type="default,mms,dun,supl" mvno_match_data="bluegrass" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="440" carrier="bluegrass" apn="CdmaNai" mmsc="http://mms.iot1.com/bluegrass/mms.php" type="mms" mvno_match_data="bluegrass" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="450" carrier="Ptci" apn="VZWINTERNET" mmsc="http://mmsc.ptci.net" mmsport="6672" type="default,mms,dun,supl" mvno_match_data="ptci" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="450" carrier="Ptci" apn="VZWINTERNET" mmsc="http://mmsc.ptci.net" mmsport="6672" type="default,mms,dun,supl" mvno_match_data="ptci" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="450" carrier="ptci" apn="CdmaNai" mmsc="http://mmsc.ptci.net" mmsport="6672" type="mms" mvno_match_data="ptci" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="480" carrier="EHRPD - Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="480" carrier="LTE - Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="1" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="10" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="11" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="15" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="2" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="3" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,mms" protocol="IPV4V6" bearer="9" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="12"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="4"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="5"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="6"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="7"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs" authtype="3" protocol="IPV4V6" bearer="8"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="12"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="4"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="5"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="6"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="7"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon" apn="internet" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,supl,fota,ims,cbs,dun" authtype="3" protocol="IPV4V6" bearer="8"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="1" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="10" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="11" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="15" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="2" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="3" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CBS" apn="VZWAPP" mmsc="http://mms.vtext.com/servlets/mms" type="cbs,hipri" protocol="IPV4V6" bearer="9" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CDMA HRPD" apn="CdmaNai" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,hipri,dun,stdhipri,supl" protocol="IPV4V6" bearer="6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon CDMA HRPD" apn="CdmaNai" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,hipri,dun,stdhipri,supl" protocol="IPV4V6" bearer="6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="1" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="10" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="11" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="15" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="2" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="3" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri" protocol="IPV4V6" bearer="9" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri,supl" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="480" carrier="Verizon Internet" apn="VZWINTERNET" mmsc="http://mms.vtext.com/servlets/mms" type="default,mms,dun,stdhipri,supl" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint" apn="cinet.spcs" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="default,mms" user="none" password="none" bearer="1" server="*"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint" apn="cinet.spcs" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="default,mms" user="none" password="none" bearer="10" server="*"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint" apn="cinet.spcs" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="default,mms" user="none" password="none" bearer="11" server="*"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint" apn="cinet.spcs" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="default,mms" user="none" password="none" bearer="15" server="*"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint" apn="cinet.spcs" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="default,mms" user="none" password="none" bearer="16" server="*"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint" apn="cinet.spcs" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="default,mms" user="none" password="none" bearer="2" server="*"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint" apn="cinet.spcs" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="default,mms" user="none" password="none" bearer="3" server="*"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint" apn="cinet.spcs" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="default,mms" user="none" password="none" bearer="9" server="*"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint" apn="mms_over_wifi" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="wifi" user="*" password="*" server="*"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint CdmaNai" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="default,mms" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint CdmaNai" apn="CdmaNai" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="mms" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="490" carrier="Sprint CdmaNai" apn="CdmaNai" mmsc="http://mmsc.vmobl.com:8088" mmsproxy="68.28.31.2" mmsport="80" type="mms" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="490" carrier="Virgin Mobile US" apn="0" mmsc="http://mmsc.vmobl.com:8088/mms?" mmsproxy="205.239.233.136" mmsport="81" authtype="0"></apn>
-      <apn mcc="311" mnc="500" carrier="24-7 WAP" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672" mmsproxy="09.4.229.46" mmsport="9201" mvno_match_data="24-7 Wireless" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="24-7 WAP AT&amp;T" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672" mmsproxy="09.4.229.46" mmsport="9201" mvno_match_data="24-7 Wireless RPA" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="24-7 WAP Other networks" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672" mmsproxy="09.4.229.46" mmsport="9201" mvno_match_data="24-7 Wireless RPO" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="24-7 WAP T-Mobile" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672" mmsproxy="09.4.229.46" mmsport="9201" mvno_match_data="24-7 Wireless RPT" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="Mosaic WAP" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672/" mmsproxy="209.4.229.46" mmsport="9201" type="default,mms" mvno_match_data="Mosaic Mobile" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="Mosaic WAP AT&amp;T" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672/" mmsproxy="209.4.229.46" mmsport="9201" type="default,mms" mvno_match_data="Mosaic RPA" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="Mosaic WAP Other networks" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672/" mmsproxy="209.4.229.46" mmsport="9201" type="default,mms" mvno_match_data="Mosaic RPO" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="Mosaic WAP T-Mobile" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672/" mmsproxy="209.4.229.46" mmsport="9201" type="default,mms" mvno_match_data="Mosaic RPT" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="Norvado" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672/" mmsproxy="209.4.229.46" mmsport="9201" type="default,mms" mvno_match_data="Norvado Wireless" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="Norvado AT&amp;T" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672/" mmsproxy="209.4.229.46" mmsport="9201" type="default,mms" mvno_match_data="Norvado Wireless RPA" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="Norvado Other networks" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672/" mmsproxy="209.4.229.46" mmsport="9201" type="default,mms" mvno_match_data="Norvado Wireless RPO" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="500" carrier="Norvado T-Mobile" apn="wap" mmsc="http://mmsc.ctc.csky.us:6672/" mmsproxy="209.4.229.46" mmsport="9201" type="default,mms" mvno_match_data="Norvado Wireless RPT" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="530" carrier="Blaze" apn="mms.mymobiletxt.com" mmsc="http://mms2.mymobiletxt.net" type="default,mms" mvno_match_data="Blaze Wireless" mvno_type="spn"></apn>
-      <apn mcc="311" mnc="530" carrier="Duet Internet" apn="wap.mymobiletxt.com" mmsc="http://172.16.16.103/mms/" mmsproxy="172.16.16.102" mmsport="8080" type="default,mms" protocol="IP"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="580" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="580" carrier="USCC INTERNET" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,dun,mms,fota"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="581" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="582" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="583" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="584" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="585" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="586" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="587" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="588" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="12" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="4" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="5" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="7" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" authtype="3" protocol="IPV4V6" bearer="8" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" apn="CdmaNai" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="589" carrier="U.S. Cellular" apn="usccinternet" mmsc="http://mmsc1.uscc.net/mmsc/MMS" type="default,mms,dun,hipri,fota" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="590" carrier="Gsc" apn="VZWINTERNET" mmsc="http://mmsc1.gscdata.com" type="default,mms,dun,supl" mvno_match_data="gsc" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="590" carrier="Gsc" apn="VZWINTERNET" mmsc="http://mmsc1.gscdata.com" type="default,mms,dun,supl" mvno_match_data="gsc" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="590" carrier="gsc" apn="CdmaNai" mmsc="http://mmsc1.gscdata.com" type="mms" mvno_match_data="gsc" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="600" carrier="Cox" apn="VZWINTERNET" mmsc="http://mms.cox.net/cox/mms.php" type="default,mms,dun,supl" mvno_match_data="cox" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="600" carrier="Cox" apn="VZWINTERNET" mmsc="http://mms.cox.net/cox/mms.php" type="default,mms,dun,supl" mvno_match_data="cox" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="600" carrier="cox" apn="CdmaNai" mmsc="http://mms.cox.net/cox/mms.php" type="mms" mvno_match_data="cox" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="610" carrier="Srtcomm" apn="VZWINTERNET" mmsc="http://mms.iot1.com/srt/mms.php" mmsproxy="mms.iot1.com" mmsport="9201" type="default,mms,dun,supl" mvno_match_data="srtcomm" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="610" carrier="Srtcomm" apn="VZWINTERNET" mmsc="http://mms.iot1.com/srt/mms.php" mmsproxy="mms.iot1.com" mmsport="9201" type="default,mms,dun,supl" mvno_match_data="srtcomm" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="610" carrier="srtcomm" apn="CdmaNai" mmsc="http://mms.iot1.com/srt/mms.php" mmsproxy="mms.iot1.com" mmsport="9201" type="mms" mvno_match_data="srtcomm" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="650" carrier="Unitedwireless" apn="VZWINTERNET" mmsc="http://mms.unitedwireless.com/united/mms.php" type="default,mms,dun,supl" mvno_match_data="unitedwireless" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="650" carrier="Unitedwireless" apn="VZWINTERNET" mmsc="http://mms.unitedwireless.com/united/mms.php" type="default,mms,dun,supl" mvno_match_data="unitedwireless" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="650" carrier="unitedwireless" apn="CdmaNai" mmsc="http://mms.unitedwireless.com/united/mms.php" type="mms" mvno_match_data="unitedwireless" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="660" carrier="MetroPCS IMS" apn="ims.metropcs" mmsc="http://mms.metropcs.net:3128/mmsc" type="ims" authtype="0"></apn>
-      <apn mcc="311" mnc="660" carrier="MetroPCS LTE" apn="internet.metropcs" mmsc="http://mms.metropcs.net:3128/mmsc" type="default,hipri,admin,mms" authtype="0"></apn>
-      <apn mcc="311" mnc="670" carrier="Pinebelt" apn="VZWINTERNET" mmsc="http://mmsc.pinebelt.csky.us:6672/" type="default,mms,dun,supl" mvno_match_data="pinebelt" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="670" carrier="Pinebelt" apn="VZWINTERNET" mmsc="http://mmsc.pinebelt.csky.us:6672/" type="default,mms,dun,supl" mvno_match_data="pinebelt" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="670" carrier="pinebelt" apn="CdmaNai" mmsc="http://mmsc.pinebelt.csky.us:6672/" type="mms" mvno_match_data="pinebelt" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="870" carrier="Internet" apn="n.ispsn" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="default" protocol="IPV4V6" bearer="0"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint" apn="cinet.spcs" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="1" server="*"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint" apn="cinet.spcs" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="10" server="*"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint" apn="cinet.spcs" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="11" server="*"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint" apn="cinet.spcs" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="15" server="*"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint" apn="cinet.spcs" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="16" server="*"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint" apn="cinet.spcs" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="2" server="*"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint" apn="cinet.spcs" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="3" server="*"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint" apn="cinet.spcs" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="9" server="*"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint" apn="mms_over_wifi" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="wifi" user="*" password="*" server="*"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint CdmaNai" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint CdmaNai" apn="CdmaNai" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="mms" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="311" mnc="870" carrier="Sprint CdmaNai" apn="CdmaNai" mmsc="http://mm.myboostmobile.com" mmsproxy="68.28.31.7" mmsport="80" type="mms" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="311" mnc="910" carrier="MobileNation" apn="mymn4g.net" mmsc="http://mms.mymn3g.net" mmsproxy="mms.mymn3g.net" mmsport="8081" type="default,internet,admin,fota,dun,mms" protocol="IPV4V6" server="*"></apn>
-      <apn mcc="311" mnc="920" carrier="Chariton valley" apn="VZWINTERNET" mmsc="http://mms.cvalley.net" mmsport="80" type="default,mms,dun,supl" mvno_match_data="charitonvalley" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="920" carrier="Chariton valley" apn="VZWINTERNET" mmsc="http://mms.cvalley.net" mmsport="80" type="default,mms,dun,supl" mvno_match_data="charitonvalley" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="311" mnc="920" carrier="charitonvalley" apn="CdmaNai" mmsc="http://mms.cvalley.net" mmsport="80" type="mms" mvno_match_data="charitonvalley" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="311" mnc="930" carrier="Syringa Wireless" apn="internet.syringawireless.com" mmsc="http://mms.rinawireless.com" mmsport="80" type="default,internet,admin,fota,dun,mms" protocol="IPV4V6" server="*"></apn>
-      <apn mcc="312" mnc="040" carrier="Custer" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="custer" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="312" mnc="040" carrier="Custer" apn="VZWINTERNET" mmsc="http://mms.rinawireless.com" type="default,mms,dun,supl" mvno_match_data="custer" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="312" mnc="040" carrier="custer" apn="CdmaNai" mmsc="http://mms.rinawireless.com" type="mms" mvno_match_data="custer" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="312" mnc="160" carrier="chatmobility" apn="CdmaNai" mmsc="http://mms.chatmobility.com/mms/" mmsport="80" type="mms" mvno_match_data="chatmobility" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="312" mnc="160" carrier="chatmobility" apn="VZWINTERNET" mmsc="http://mms.chatmobility.com/mms/" mmsport="80" type="default,mms,dun,supl" mvno_match_data="chatmobility" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="312" mnc="160" carrier="chatmobility" apn="VZWINTERNET" mmsc="http://mms.chatmobility.com/mms/" mmsport="80" type="default,mms,dun,supl" mvno_match_data="chatmobility" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="312" mnc="420" carrier="NexTech Ota" apn="admin.lte.ntwls.com" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="admin,fota,ota" protocol="IP" bearer="13" server="*"></apn>
-      <apn mcc="312" mnc="420" carrier="NexTech Ota" apn="admin.lte.ntwls.com" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="admin,fota,ota" protocol="IP" bearer="13" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="312" mnc="420" carrier="NexTech Ota" apn="admin.lte.ntwls.com" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="admin,fota,ota" protocol="IP" bearer="14" server="*"></apn>
-      <apn mcc="312" mnc="420" carrier="NexTech Ota" apn="admin.lte.ntwls.com" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="admin,fota,ota" protocol="IP" bearer="14" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="312" mnc="420" carrier="NexTech Tether" apn="modem.lte.ntwls.com" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="dun,pam" protocol="IPV4V6" bearer="13" server="*"></apn>
-      <apn mcc="312" mnc="420" carrier="NexTech Tether" apn="modem.lte.ntwls.com" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="dun,pam" protocol="IPV4V6" bearer="13" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="312" mnc="420" carrier="NexTech Tether" apn="modem.lte.ntwls.com" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="dun,pam" protocol="IPV4V6" bearer="14" server="*"></apn>
-      <apn mcc="312" mnc="420" carrier="NexTech Tether" apn="modem.lte.ntwls.com" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="dun,pam" protocol="IPV4V6" bearer="14" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="312" mnc="420" carrier="NexTech Wireless" apn="internet.lte.ntwls.com" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="default,internet,supl,hipri,mms" protocol="IPV4V6" server="*"></apn>
-      <apn mcc="312" mnc="420" carrier="NexTech Wireless" apn="internet.lte.ntwls.com" mmsc="http://mms.ntwls.net/nex-tech/mms.php" type="default,internet,supl,hipri,mms" protocol="IPV4V6" server="*" carrier_enabled="TRUE"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="1" server="*"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="10" server="*"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="11" server="*"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="15" server="*"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="16" server="*"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="2" server="*"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="3" server="*"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" user="none" password="none" bearer="9" server="*"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint" apn="mms_over_wifi" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="wifi" user="*" password="*" server="*"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint CdmaNai" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default,mms" authtype="3" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint CdmaNai" apn="CdmaNai" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="mms" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="FALSE"></apn>
-      <apn mcc="312" mnc="530" carrier="Sprint CdmaNai" apn="CdmaNai" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="mms" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="TRUE"></apn>
-      <apn mcc="312" mnc="570" carrier="Blue Wireless" apn="Blue Hotspot" mmsc="http://mms.blueunlimited.com" mmsport="8514" type="default,dun,mms" user="%M@dun.bluehandset.com" password="wirelessblue" protocol="IPV4V6" server="*"></apn>
-      <apn mcc="316" mnc="010" carrier="Sprint APN" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default" user="none" password="none" server="*"></apn>
-      <apn mcc="316" mnc="10" carrier="Sprint" apn="mms_over_wifi" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="wifi" user="*" password="*" server="*"></apn>
-      <apn mcc="316" mnc="10" carrier="Sprint APN" apn="cinet.spcs" mmsc="http://mms.sprintpcs.com" mmsproxy="68.28.31.7" mmsport="80" type="default" user="none" password="none" server="*"></apn>
-      <apn mcc="330" mnc="000" carrier="Openmobile" apn="VZWINTERNET" mmsc="http://mms.openmobilepr.com:1981/" type="default,mms,dun,supl" mvno_match_data="openmobile" mvno_type="spn" protocol="IPV4V6" bearer="13" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="330" mnc="000" carrier="Openmobile" apn="VZWINTERNET" mmsc="http://mms.openmobilepr.com:1981/" type="default,mms,dun,supl" mvno_match_data="openmobile" mvno_type="spn" protocol="IPV4V6" bearer="14" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="330" mnc="000" carrier="openmobile" apn="CdmaNai" mmsc="http://mms.openmobilepr.com:1981/" type="mms" mvno_match_data="openmobile" mvno_type="spn" protocol="IPV4V6" bearer="6" roaming_protocol="IPV4V6" carrier_enabled="false"></apn>
-      <apn mcc="330" mnc="110" carrier="MMS CLARO" apn="mms.claropr.com" mmsc="http://mmsg.claropr.com:10021/mmsc" mmsproxy="10.50.38.3" mmsport="8799" type="mms"></apn>
-      <apn mcc="330" mnc="110" carrier="MMS CLARO" apn="mms.claropr.com" mmsc="http://mmsg.claropr.com:10021/mmsc" mmsproxy="10.50.38.3" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="330" mnc="110" carrier="Puerto Rico:Claro:MMS" apn="mms.claropr.com" mmsc="http://mmsg.claropr.com:10021/mmsc" mmsproxy="10.50.38.3" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="330" mnc="110" carrier="Puerto Rico:Claro:MMS" apn="mmslte.claropr.com" mmsc="http://mmsg.claropr.com:10021/mmsc" mmsproxy="10.50.38.3" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="334" mnc="03" carrier="Movistar MMS" apn="mms.movistar.mx" mmsc="http://mms.movistar.mx" mmsproxy="10.2.20.1" mmsport="80" type="mms" user="movistar" password="movistar" authtype="1"></apn>
-      <apn mcc="334" mnc="3" carrier="Movistar MMS" apn="mms.movistar.mx" mmsc="http://mms.movistar.mx" mmsproxy="10.2.20.1" mmsport="80" type="mms" user="movistar" password="movistar" authtype="1"></apn>
-      <apn mcc="334" mnc="020" carrier="Mensajes Multimedia" apn="mms.itelcel.com" mmsc="http://mms.itelcel.com/servlets/mms" mmsproxy="148.233.151.240" mmsport="8080" type="mms" user="mmsgprs" password="mmsgprs2003" authtype="1"></apn>
-      <apn mcc="334" mnc="20" carrier="Mexico:Telcel:Mensajes Multimedia" apn="mms.itelcel.com" mmsc="http://mms.itelcel.com/servlets/mms" mmsproxy="148.233.151.240" mmsport="8080" type="mms" user="mmsgprs" password="mmsgprs2003" authtype="1"></apn>
-      <apn mcc="334" mnc="030" carrier="Movistar MMS" apn="mms.movistar.mx" mmsc="http://mms.movistar.mx" mmsproxy="10.2.20.1" mmsport="80" type="mms" user="movistar" password="movistar" authtype="1"></apn>
-      <apn mcc="334" mnc="30" carrier="Movistar MMS" apn="mms.movistar.mx" mmsc="http://mms.movistar.mx" mmsproxy="10.2.20.1" mmsport="80" type="mms" user="movistar" password="movistar" authtype="1"></apn>
-      <apn mcc="334" mnc="050" carrier="Iusacell MMS" apn="mms.iusacellgsm.mx" mmsc="http://mms.iusacell3g.com/" type="mms" user="mmsiusacellgsm" password="mmsiusacellgsm"></apn>
-      <apn mcc="334" mnc="50" carrier="Iusacell MMS" apn="mms.iusacellgsm.mx" mmsc="http://mms.iusacell3g.com/" type="mms" user="mmsiusacellgsm" password="mmsiusacellgsm" authtype="3"></apn>
-      <apn mcc="334" mnc="50" carrier="Mexico:Iusacell MMS" apn="mms.iusacellgsm.mx" mmsc="http://mms.iusacell3g.com/" type="mms" user="mmsiusacellgsm" password="mmsiusacellgsm" authtype="0"></apn>
-      <apn mcc="334" mnc="090" carrier="Nextel MMS" apn="mms.nexteldata.com.mx" mmsc="http://3gmms.nexteldata.com.mx" mmsproxy="129.192.129.104" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="334" mnc="90" carrier="Nextel MMS" apn="mms.nexteldata.com.mx" mmsc="http://3gmms.nexteldata.com.mx" mmsproxy="129.192.129.104" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="338" mnc="05" carrier="MMS Digicel" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="8080" type="mms"></apn>
-      <apn mcc="338" mnc="5" carrier="Jamaica:Digicel:Mms" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="338" mnc="5" carrier="MMS Digicel" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="338" mnc="18" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="338" mnc="18" carrier="Lime Prepaid MMS" apn="ppmms" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="338" mnc="050" carrier="MMS Digicel" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="8080" type="mms"></apn>
-      <apn mcc="338" mnc="50" carrier="MMS Digicel" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="8080" type="mms"></apn>
-      <apn mcc="338" mnc="070" carrier="Claro MMS" apn="mms.ideasclaro.com.jm" mmsc="http://mms.ideasclaro.com.jm/mms/wapenc" mmsproxy="190.80.147.118" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="338" mnc="70" carrier="Jamaica:Claro:MMS" apn="mms.ideasclaro.com.jm" mmsc="http://mms.ideasclaro.com.jm/mms/wapenc" mmsproxy="190.80.147.118" mmsport="8080" type="mms" user="claro" password="claro" authtype="1"></apn>
-      <apn mcc="338" mnc="180" carrier="Jamaica:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="338" mnc="180" carrier="Jamaica:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="338" mnc="180" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="338" mnc="180" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="338" mnc="180" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="338" mnc="180" carrier="Lime Prepaid MMS" apn="ppmms" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="338" mnc="180" carrier="Lime Prepaid MMS" apn="ppmms" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="340" mnc="01" carrier="Orange MMS Caraïbe" apn="orangewap" mmsc="http://193.251.160.246/servlets/mms" mmsproxy="10.0.0.10" mmsport="8082" type="mms" user="orange" password="orange"></apn>
-      <apn mcc="340" mnc="1" carrier="Orange MMS Caraïbe" apn="orangewap" mmsc="http://193.251.160.246/servlets/mms" mmsproxy="10.0.0.10" mmsport="8082" type="mms" user="orange" password="orange"></apn>
-      <apn mcc="340" mnc="20" carrier="Digicel Web" apn="web.digicelfr.com" mmsc="http://mmc.digiceltt.com/servlets/mms" mmsproxy="172.20.6.12" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="340" mnc="20" carrier="Digicel Web" apn="web.digicelfr.com" mmsc="http://mmc.digiceltt.com/servlets/mms" mmsproxy="172.20.6.12" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="340" mnc="20" carrier="French West Indies:Digicel:Mms" apn="wap.digicelfr.com" mmsc="http://mmc.digiceltt.com/servlets/mms" mmsproxy="172.20.6.12" mmsport="9201" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="340" mnc="20" carrier="French West Indies:Digicel:Modem" apn="wap.digicelfr.com" mmsc="http://wapdigicel.com" type="dun" user="wap" password="wap" authtype="1" proxy="172.20.6.12" port="8080"></apn>
-      <apn mcc="342" mnc="60" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="342" mnc="600" carrier="Barbado:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="342" mnc="600" carrier="Barbado:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="342" mnc="600" carrier="Barbados:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="344" mnc="92" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="344" mnc="920" carrier="Antigua:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="344" mnc="920" carrier="Antigua:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="344" mnc="920" carrier="Antigua:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="346" mnc="14" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="346" mnc="140" carrier="Cayman Islands:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="346" mnc="140" carrier="Cayman Islands:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="346" mnc="140" carrier="Cayman Islands:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="348" mnc="17" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="348" mnc="77" carrier="Bvi:Digicel:Mms" apn="wap.digicelbvi.com" mmsc="http://mmc.digiceljamaica.com/servlets/mms" mmsproxy="172.16.7.12" mmsport="9201" type="mms" user="wapbvi" password="wapbvi" authtype="1"></apn>
-      <apn mcc="348" mnc="77" carrier="Bvi:Digicel:Modem" apn="wap.digicelbvi.com" mmsc="http://wapdigicel.com" type="dun" user="wapbvi" password="wapbvi" authtype="1" proxy="172.16.7.12" port="8080"></apn>
-      <apn mcc="348" mnc="170" carrier="Bvi:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="348" mnc="170" carrier="Bvi:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="348" mnc="170" carrier="Bvi:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="352" mnc="11" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="352" mnc="110" carrier="Grenada:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="352" mnc="110" carrier="Grenada:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="352" mnc="110" carrier="Grenada:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="354" mnc="86" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="354" mnc="860" carrier="Monserrat:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="354" mnc="860" carrier="Monserrat:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="354" mnc="860" carrier="Monserrat:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="356" mnc="11" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="356" mnc="110" carrier="St Kitts And Nevis:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="356" mnc="110" carrier="St Kitts And Nevis:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="356" mnc="110" carrier="St Kitts And Nevis:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="358" mnc="11" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="358" mnc="110" carrier="St Lucia:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="358" mnc="110" carrier="St Lucia:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="358" mnc="110" carrier="St Lucia:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="360" mnc="11" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="360" mnc="110" carrier="St Vincent:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="360" mnc="110" carrier="St Vincent:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="360" mnc="110" carrier="St Vincent:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="362" mnc="69" carrier="Curacao:Digicel:Mms" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="362" mnc="69" carrier="Curacao:Digicel:Modem" apn="wap" mmsc="http://wapdigicel.com" type="dun" authtype="1" proxy="172.16.7.12" port="8080"></apn>
-      <apn mcc="363" mnc="02" carrier="MMS Digicel" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="363" mnc="2" carrier="Aruba:Digicel:Mms" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="363" mnc="020" carrier="MMS Digicel" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="363" mnc="20" carrier="Aruba:Digicel:Mms:2" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="365" mnc="84" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="365" mnc="840" carrier="Anguilla:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="365" mnc="840" carrier="Anguilla:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="365" mnc="840" carrier="Anguilla:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="366" mnc="11" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="366" mnc="110" carrier="Dominica:Lime:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="366" mnc="110" carrier="Dominica:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="366" mnc="110" carrier="Dominica:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="368" mnc="01" carrier="Cubacel MMS" apn="mms" mmsc="http://mms.cubacel.cu" mmsproxy="200.13.145.52" mmsport="8080" type="mms"></apn>
-      <apn mcc="368" mnc="1" carrier="Cubacel MMS" apn="mms" mmsc="http://mms.cubacel.cu" mmsproxy="200.13.145.52" mmsport="8080" type="mms"></apn>
-      <apn mcc="370" mnc="01" carrier="Orange MMS" apn="orangeworld" mmsc="http://mms.orange.com.do/servlets/mms" mmsproxy="172.16.126.70" mmsport="8080" type="mms" user="orange" password="orange" authtype="1"></apn>
-      <apn mcc="370" mnc="1" carrier="Dominican Rep:Orange:MMS" apn="orangeworld" mmsc="http://mms.orange.com/servlets/mms" mmsproxy="172.16.126.70" mmsport="8080" type="mms" user="orange" password="orange" authtype="1" port="8080"></apn>
-      <apn mcc="370" mnc="1" carrier="Orange MMS" apn="orangeworld" mmsc="http://mms.orange.com.do/servlets/mms" mmsproxy="172.16.126.70" mmsport="8080" type="mms" user="orange" password="orange" authtype="1"></apn>
-      <apn mcc="370" mnc="02" carrier="MMS" apn="internet.ideasclaro.com.do" mmsc="http://mms.ideasclaro.com.do/mms/wapenc" type="mms"></apn>
-      <apn mcc="370" mnc="2" carrier="Dominican Republic:Claro:INTERNET" apn="internet.ideasclaro.com.do" mmsc="http://mms.ideasclaro.com.do/mms/wapenc" type="default" authtype="1"></apn>
-      <apn mcc="370" mnc="2" carrier="MMS" apn="internet.ideasclaro.com.do" mmsc="http://mms.ideasclaro.com.do/mms/wapenc" type="mms" authtype="0"></apn>
-      <apn mcc="370" mnc="04" carrier="Viva MMS" apn="mms.viva.net.do" mmsc="http://10.200.16.4/mms/wapenc" mmsproxy="192.168.16.10" mmsport="9401" type="mms" user="viva" password="viva" authtype="1"></apn>
-      <apn mcc="370" mnc="4" carrier="Dominican Rep:Viva:Internet" apn="edge.viva.net.do" mmsc="http://wap.viva.net.do/WapDeck/" type="default" user="viva" password="viva" authtype="1" proxy="192.168.16.10" port="9401"></apn>
-      <apn mcc="370" mnc="4" carrier="Dominican Rep:Viva:MMS" apn="mms.viva.net.do" mmsc="http://10.200.16.4/mms/wapenc" mmsproxy="192.168.16.10" mmsport="9401" type="mms" user="viva" password="viva" authtype="1"></apn>
-      <apn mcc="370" mnc="4" carrier="Viva MMS" apn="mms.viva.net.do" mmsc="http://10.200.16.4/mms/wapenc" mmsproxy="192.168.16.10" mmsport="9401" type="mms" user="viva" password="viva" authtype="1"></apn>
-      <apn mcc="370" mnc="020" carrier="MMS" apn="internet.ideasclaro.com.do" mmsc="http://mms.ideasclaro.com.do/mms/wapenc" type="mms"></apn>
-      <apn mcc="372" mnc="02" carrier="Haiti:Digicel:Mms" apn="wap.digicelha.com" mmsc="http://mmc.digicelhaiti.com/servlets/mms" mmsproxy="172.20.200.12" mmsport="9201" type="mms" user="wapha" password="wap01ha" authtype="1"></apn>
-      <apn mcc="372" mnc="02" carrier="Haiti:Digicel:Modem" apn="wap.digicelha.com" mmsc="http://wapdigicel.com" type="dun" user="wapha" password="wap01ha" authtype="1" proxy="172.20.200.12" port="8080"></apn>
-      <apn mcc="372" mnc="2" carrier="Haiti:Digicel:Mms" apn="wap.digicelha.com" mmsc="http://mmc.digicelhaiti.com/servlets/mms" mmsproxy="172.20.200.12" mmsport="9201" type="mms" user="wapha" password="wap01ha" authtype="1"></apn>
-      <apn mcc="372" mnc="2" carrier="Haiti:Digicel:Modem" apn="wap.digicelha.com" mmsc="http://wapdigicel.com" type="dun" user="wapha" password="wap01ha" authtype="1" proxy="172.20.200.12" port="8080"></apn>
-      <apn mcc="374" mnc="12" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="12" carrier="Trinidad And Tobago:Bmobile:Internet" apn="internet" mmsc="http://www.time4lime.com/" type="default" authtype="1"></apn>
-      <apn mcc="374" mnc="12" carrier="Trinidad And Tobago:Bmobile:MMS" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.105" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="13" carrier="MMS Trinidad" apn="wap.digiceltt.com" mmsc="http://mmc.digiceltt.com/servlets/mms" mmsproxy="172.20.6.12" mmsport="8080" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="374" mnc="120" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="121" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="122" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="123" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="124" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="125" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="126" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="127" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="128" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="129" carrier="Bmobile mms" apn="mms" mmsc="http://192.168.210.104/mmrelay.app" mmsproxy="192.168.210.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="374" mnc="130" carrier="MMS Trinidad" apn="wap.digiceltt.com" mmsc="http://mmc.digiceltt.com/servlets/mms" mmsproxy="172.20.6.12" mmsport="8080" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="374" mnc="130" carrier="Trinidad And Tobago:Digicel:Mms" apn="wap.digiceltt.com" mmsc="http://mmc.digiceltt.com/servlets/mms" mmsproxy="172.20.6.12" mmsport="9201" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="376" mnc="35" carrier="Lime Postpaid MMS" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms"></apn>
-      <apn mcc="376" mnc="350" carrier="Turks And Caicos:Lime:Mms" apn="multimedia" mmsc="http://mmsc" mmsproxy="10.20.5.34" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="376" mnc="350" carrier="Turks And Caicos:Lime:Modem" apn="internet" mmsc="http://www.time4lime.com/" type="dun" authtype="1"></apn>
-      <apn mcc="401" mnc="01" carrier="Beeline MMS" apn="mms.beeline.kz" mmsc="http://mms.beeline.kz/mms/wapenc" mmsproxy="172.27.6.93" mmsport="8080" type="mms" user="\@mms.beeline" password="beeline" authtype="1"></apn>
-      <apn mcc="401" mnc="02" carrier="Kcell MMS" apn="mms" mmsc="http://mms.kcell.kz/post" mmsproxy="195.47.255.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="401" mnc="77" carrier="Tele2 MMS" apn="mms" mmsc="http://mms.tele2.kz/mms/wapenc" mmsproxy="10.1.26.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="001" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="01" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="01" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="1" carrier="Vodafone MMS (40401)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="1" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="002" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="02" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="02" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="2" carrier="Airtel MMS (40402)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="003" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="03" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="03" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="3" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="3" carrier="Airtel MMS (40403)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="004" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="04" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="04" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="04" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="4" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="4" carrier="IDEA MMS (40404)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="005" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="05" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="05" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="5" carrier="Vodafone MMS (40405)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="5" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="006" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="06" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="007" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="07" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="07" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="07" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="7" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="7" carrier="IDEA MMS (40407)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="009" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="09" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="09" carrier="Reliance MMS" apn="mms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="09" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="9" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="9" carrier="Reliance MMS (40409)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="010" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="10" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="10" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="10" carrier="Airtel MMS (40410)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="011" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="11" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="11" carrier="Vodafone MMS (40411)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="11" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="11" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="012" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="12" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="12" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="12" carrier="IDEA MMS (40412)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="12" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="12" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="013" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="13" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="13" carrier="Vodafone MMS (40413)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="13" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="13" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="014" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="14" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.11.12.180" mmsproxy="10.11.12.13" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="14" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.11.12.180" mmsproxy="10.11.12.13" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="14" carrier="IDEA Punjab MMS (40414)" apn="mmsc" mmsc="http://10.11.12.180" mmsproxy="10.11.12.13" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="14" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="14" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="015" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="15" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="15" carrier="Vodafone MMS (40415)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="15" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="15" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="016" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="16" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="16" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="16" carrier="Airtel MMS (40416)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="017" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="17" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="17" carrier="Aircel MMS (40417)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="17" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="17" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="018" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="18" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="18" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="18" carrier="Reliance MMS" apn="mms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="18" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="18" carrier="Reliance MMS (40418)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="019" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="19" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="19" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="19" carrier="IDEA MMS (40419)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="19" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="19" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="020" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="20" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="20" carrier="Vodafone MMS (40420)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="20" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="20" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="21" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="404" mnc="21" carrier="Loop MMS (40421)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="21" carrier="Loop Mobile MMS" apn="mizone" mmsc="http://mms.loopmobile.in:8080" mmsproxy="10.0.0.10" mmsport="9401" type="mms" password="mmsc"></apn>
-      <apn mcc="404" mnc="21" carrier="Loop Mobile MMS" apn="mizone" mmsc="http://mms.loopmobile.in:8080" mmsproxy="10.0.0.10" mmsport="9401" type="mms" password="mmsc" authtype="0"></apn>
-      <apn mcc="404" mnc="022" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="22" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="22" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="22" carrier="IDEA MMS (40422)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="22" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="22" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="024" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="24" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="24" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="24" carrier="IDEA MMS (40424)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="24" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="24" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="025" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="25" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="25" carrier="Aircel MMS (40425)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="25" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="25" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="027" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="27" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="27" carrier="Vodafone MMS (40427)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="27" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="27" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="028" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="28" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="28" carrier="Aircel MMS (40428)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="28" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="28" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="029" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="29" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="29" carrier="Aircel MMS (40429)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="29" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="29" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="030" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="30" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="30" carrier="Vodafone MMS (40430)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="30" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="30" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="031" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="31" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="31" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="31" carrier="Airtel MMS (40431)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="033" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="33" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="33" carrier="Aircel MMS (40433)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="33" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="33" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="034" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="34" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="34" carrier="BSNL MMS (40434)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="34" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="34" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="035" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="35" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="35" carrier="Aircel MMS (40435)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="35" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="35" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="036" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="36" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="36" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="36" carrier="Reliance MMS" apn="mms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="36" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="36" carrier="Reliance MMS (40436)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="037" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="37" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="37" carrier="Aircel MMS (40437)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="37" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="37" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="038" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="38" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="38" carrier="BSNL MMS (40438)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="38" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="38" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="040" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="40" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="40" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="40" carrier="Airtel MMS (40440)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="041" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="41" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="41" carrier="Aircel MMS (40441)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="404" mnc="41" carrier="Aircel MMS (40441)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="41" carrier="Aircel-MMS-Postpaid" apn="aircelmms.po" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms"></apn>
-      <apn mcc="404" mnc="41" carrier="Aircel-MMS-Postpaid" apn="aircelmms.po" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="41" carrier="Aircel-MMS-Prepaid" apn="aircelmms.pr" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms"></apn>
-      <apn mcc="404" mnc="41" carrier="Aircel-MMS-Prepaid" apn="aircelmms.pr" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="042" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="42" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="42" carrier="Aircel MMS (40442)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="42" carrier="Aircel-MMS-Postpaid" apn="aircelmms.po" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms"></apn>
-      <apn mcc="404" mnc="42" carrier="Aircel-MMS-Postpaid" apn="aircelmms.po" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="42" carrier="Aircel-MMS-Prepaid" apn="aircelmms.pr" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms"></apn>
-      <apn mcc="404" mnc="42" carrier="Aircel-MMS-Prepaid" apn="aircelmms.pr" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="043" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="43" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="43" carrier="Vodafone MMS (40443)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="43" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="43" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="044" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="44" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="44" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="44" carrier="IDEA MMS (40444)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="44" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="045" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="45" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="45" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="45" carrier="Airtel MMS (40445)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="046" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="46" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="46" carrier="Vodafone MMS (40446)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="46" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="46" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="049" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="49" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="49" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="49" carrier="Airtel MMS (40449)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="050" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="50" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="50" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="50" carrier="Reliance MMS" apn="mms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="50" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="50" carrier="Reliance MMS (40450)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="051" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="51" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="51" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="052" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="52" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="52" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="52" carrier="Reliance MMS" apn="mms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="52" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="52" carrier="Reliance MMS (40452)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="053" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="53" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="53" carrier="BSNL MMS (40453)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="53" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="53" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="054" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="54" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="54" carrier="BSNL MMS (40454)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="54" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="54" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="055" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="55" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="55" carrier="BSNL MMS (40455)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="55" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="55" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="056" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="56" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="56" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="56" carrier="IDEA MMS (40456)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="56" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="56" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="057" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="57" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="57" carrier="BSNL MMS (40457)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="57" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="57" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="058" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="58" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="58" carrier="BSNL MMS (40458)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="58" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="58" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="059" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="59" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="59" carrier="BSNL MMS (40459)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="59" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="59" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="060" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="60" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="60" carrier="Vodafone MMS (40460)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="60" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="60" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="062" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="62" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="62" carrier="BSNL MMS (40462)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="62" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="62" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="064" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="64" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="64" carrier="BSNL MMS (40464)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="64" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="64" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="066" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="66" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="66" carrier="BSNL MMS (40466)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="66" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="66" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="067" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="67" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="67" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="67" carrier="Reliance MMS" apn="mms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="67" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="67" carrier="Reliance MMS (40467)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="068" carrier="MTNL MMS" apn="mtnl.net" mmsc="http://mtnlmms/" mmsproxy="10.10.10.10" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="68" carrier="Dolphin_Delhi MMS" apn="gprsmtnldel" mmsc="http://172.16.31.136/mms/" mmsproxy="172.16.31.10" mmsport="80" type="mms" user="mtnl" password="mtnl123"></apn>
-      <apn mcc="404" mnc="68" carrier="Dolphin_Delhi MMS" apn="gprsmtnldel" mmsc="http://172.16.31.136/mms/" mmsproxy="172.16.31.10" mmsport="80" type="mms" user="mtnl" password="mtnl123" authtype="3"></apn>
-      <apn mcc="404" mnc="68" carrier="Dolphin_Delhi_3G MMS" apn="mtnl3g" mmsc="http://172.16.31.165/mms/" mmsproxy="172.16.31.10" mmsport="9401" type="mms" user="mtnl" password="mtnl123"></apn>
-      <apn mcc="404" mnc="68" carrier="Dolphin_Delhi_3G MMS" apn="mtnl3g" mmsc="http://172.16.31.165/mms/" mmsproxy="172.16.31.10" mmsport="9401" type="mms" user="mtnl" password="mtnl123" authtype="3"></apn>
-      <apn mcc="404" mnc="68" carrier="MTNL" apn="mtnl.net" mmsc="http://mtnlmms/" mmsproxy="10.10.10.10" mmsport="9401" type="default,mms,supl,agps,fota,dun" user="mtnl" password="mtnl123" authtype="0"></apn>
-      <apn mcc="404" mnc="68" carrier="MTNL Delhi MMS (40468)" apn="gprsmtnldel" mmsc="http://172.16.31.136/mms/" mmsproxy="172.16.31.10" mmsport="8080" type="mms" user="mtnl" password="mtnl123" authtype="1" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="68" carrier="MTNL MMS" apn="mtnl.net" mmsc="http://mtnlmms/" mmsproxy="10.10.10.10" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="68" carrier="MTNL MMS (40468)" apn="mtnl3g" mmsc="http://172.16.31.165/mms/" mmsproxy="172.16.31.10" mmsport="9401" type="mms" user="mtnl" password="mtnl123" authtype="1" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="069" carrier="MTNL MMS" apn="mtnl.net" mmsc="http://mtnlmms/" mmsproxy="10.10.10.10" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="69" carrier="Dolphin_Mumbai MMS" apn="gprsmtnlmum" mmsc="http://172.16.39.140/mms/" mmsproxy="172.16.39.10" mmsport="80" type="mms" user="mtnl" password="mtnl123"></apn>
-      <apn mcc="404" mnc="69" carrier="Dolphin_Mumbai MMS" apn="gprsmtnlmum" mmsc="http://172.16.39.140/mms/" mmsproxy="172.16.39.10" mmsport="80" type="mms" user="mtnl" password="mtnl123" authtype="3"></apn>
-      <apn mcc="404" mnc="69" carrier="Dolphin_Mumbai_3G MMS" apn="mtnl3g" mmsc="http://172.16.31.165/mms/" mmsproxy="172.16.39.10" mmsport="9401" type="mms" user="mtnl" password="mtnl123"></apn>
-      <apn mcc="404" mnc="69" carrier="Dolphin_Mumbai_3G MMS" apn="mtnl3g" mmsc="http://172.16.31.165/mms/" mmsproxy="172.16.39.10" mmsport="9401" type="mms" user="mtnl" password="mtnl123" authtype="3"></apn>
-      <apn mcc="404" mnc="69" carrier="MTNL" apn="mtnl.net" mmsc="http://mtnlmms/" mmsproxy="10.10.10.10" mmsport="9401" type="default,mms,supl,agps,fota,dun" user="mtnl" password="mtnl123" authtype="0" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="404" mnc="69" carrier="MTNL MMS" apn="mtnl.net" mmsc="http://mtnlmms/" mmsproxy="10.10.10.10" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="69" carrier="MTNL MMS (40469)" apn="mtnl3g" mmsc="http://172.16.31.165/mms/" mmsproxy="172.16.39.10" mmsport="9401" type="mms" user="mtnl" password="mtnl123" authtype="1" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="69" carrier="MTNL Mumbai MMS" apn="gprsmtnlmum" mmsc="http://172.16.39.140/mms/" mmsproxy="172.16.39.10" mmsport="8080" type="mms" user="mtnl" password="mtnl123" authtype="1" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="070" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="70" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="70" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="70" carrier="Airtel MMS (40470)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="071" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="71" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="71" carrier="BSNL MMS (40471)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="71" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="71" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="072" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="72" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="72" carrier="BSNL MMS (40472)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="72" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="72" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="073" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="73" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="73" carrier="BSNL MMS (40473)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="73" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="73" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="074" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="74" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="74" carrier="BSNL MMS (40474)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="74" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="74" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="075" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="75" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="75" carrier="BSNL MMS (40475)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="75" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="75" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="076" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="76" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="76" carrier="BSNL MMS (40476)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="76" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="76" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="077" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="77" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="77" carrier="BSNL MMS (40477)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="77" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="77" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="078" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="78" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="78" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="78" carrier="IDEA MMS (40478)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="78" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="78" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="079" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="79" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="79" carrier="BSNL MMS (40479)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="79" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="79" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="080" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="80" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="80" carrier="BSNL MMS (40480)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="80" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="80" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="081" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="81" carrier="BSNL MMS" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="81" carrier="BSNL MMS (40481)" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="81" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="81" carrier="bsnlmms" apn="bsnlmms" mmsc="http://bsnlmmsc.in:8514" mmsproxy="10.210.10.11" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="082" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="82" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="82" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="82" carrier="IDEA MMS (40482)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="82" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="82" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="083" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="83" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="83" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="83" carrier="Reliance MMS" apn="mms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="83" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="83" carrier="Reliance MMS (40483)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="084" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="84" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="84" carrier="Vodafone MMS (40484)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="84" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="84" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="085" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="85" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="85" carrier="Reliance MMS" apn="mms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="85" carrier="Reliance MMS" apn="mms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="85" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="85" carrier="Reliance MMS (40485)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="086" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="86" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="86" carrier="Vodafone MMS (40486)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="86" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="86" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="087" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="87" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="87" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="87" carrier="IDEA MMS (40487)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="87" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="87" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="088" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="88" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="88" carrier="Vodafone MMS (40488)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="88" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="404" mnc="88" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="089" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="89" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="89" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="89" carrier="IDEA MMS (40489)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="89" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="89" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="404" mnc="090" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="90" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="90" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="90" carrier="Airtel MMS (40490)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="091" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="91" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="91" carrier="Aircel MMS (40491)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="91" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="404" mnc="91" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="404" mnc="092" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="92" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="92" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="92" carrier="Airtel MMS (40492)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="093" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="93" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="93" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="93" carrier="Airtel MMS (40493)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="094" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="94" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="94" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="94" carrier="Airtel MMS (40494)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="095" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="95" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="95" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="95" carrier="Airtel MMS (40495)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="096" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="96" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="96" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="96" carrier="Airtel MMS (40496)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="097" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="97" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="97" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="97" carrier="Airtel MMS (40497)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="404" mnc="098" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="98" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="404" mnc="98" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="404" mnc="98" carrier="Airtel MMS (40498)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="001" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="01" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="1" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="1" carrier="Reliance MMS (40501)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="03" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="3" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="3" carrier="Reliance MMS (40503)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="04" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="4" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="4" carrier="Reliance MMS (40504)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="005" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="05" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="5" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="5" carrier="Reliance MMS (40505)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="006" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="06" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="6" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="6" carrier="Reliance MMS (40506)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="007" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="07" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="7" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="7" carrier="Reliance MMS (40507)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="08" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="8" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="8" carrier="Reliance MMS (40508)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="009" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="09" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="9" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="9" carrier="Reliance MMS (40509)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="010" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="10" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="10" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="10" carrier="Reliance MMS (40510)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="011" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="11" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="11" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="11" carrier="Reliance MMS (40511)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="12" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="12" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="12" carrier="Reliance MMS (40512)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="013" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="13" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="13" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="13" carrier="Reliance MMS (40513)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="14" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="14" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="14" carrier="Reliance MMS (40514)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="015" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="15" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="15" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="15" carrier="Reliance MMS (40515)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="17" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="17" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="17" carrier="Reliance MMS (40517)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="018" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="18" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="18" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="18" carrier="Reliance MMS (40518)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="019" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="19" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="19" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="19" carrier="Reliance MMS (40519)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="020" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="20" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="20" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="20" carrier="Reliance MMS (40520)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="021" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="21" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="21" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="21" carrier="Reliance MMS (40521)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="022" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="22" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="22" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="22" carrier="Reliance MMS (40522)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="23" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="23" carrier="Reliance MMS" apn="rcommms" mmsc="http://mmsc.rcom.co.in/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="23" carrier="Reliance MMS (40523)" apn="rcommms" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="025" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="25" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="25" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="25" carrier="TATA DOCOMO MMS (40525)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="026" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="26" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="26" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="26" carrier="TATA DOCOMO MMS (40526)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="027" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="27" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="27" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="27" carrier="TATA DOCOMO MMS (40527)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="028" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="28" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="28" carrier="TATA DOCOMO MMS (40528)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="029" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="29" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="29" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="29" carrier="TATA DOCOMO MMS (40529)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="030" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="30" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="30" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="30" carrier="TATA DOCOMO MMS (40530)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="031" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="31" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="31" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="31" carrier="TATA DOCOMO MMS (40531)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="032" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="32" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="32" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="32" carrier="TATA DOCOMO MMS (40532)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="033" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="33" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="33" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="33" carrier="TATA DOCOMO MMS (40533)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="405" mnc="034" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="34" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="34" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="34" carrier="TATA DOCOMO MMS (40534)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="035" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="35" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="35" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="35" carrier="TATA DOCOMO MMS (40535)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="036" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="36" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="36" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="36" carrier="TATA DOCOMO MMS (40536)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="037" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="37" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="37" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="37" carrier="TATA DOCOMO MMS (40537)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="038" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="38" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="38" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="38" carrier="TATA DOCOMO MMS (405238" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="039" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="39" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="39" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="39" carrier="TATA DOCOMO MMS (40539)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="040" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="40" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="40" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="40" carrier="TATA DOCOMO MMS (40540)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="405" mnc="041" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="41" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="41" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="41" carrier="TATA DOCOMO MMS (40541)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="042" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="42" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="42" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="42" carrier="TATA DOCOMO MMS (40542)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="043" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="43" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="43" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="43" carrier="TATA DOCOMO MMS (40543)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="044" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="44" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="44" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="44" carrier="TATA DOCOMO MMS (40544)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="045" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="45" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="45" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="45" carrier="TATA DOCOMO MMS (40545)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="046" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="46" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="46" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="46" carrier="TATA DOCOMO MMS (40546)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="047" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="47" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="47" carrier="TATA DOCOMO MMS" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="47" carrier="TATA DOCOMO MMS (40547)" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="051" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="51" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="405" mnc="51" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="51" carrier="Airtel MMS (40551)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="052" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="52" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="405" mnc="52" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="52" carrier="Airtel MMS (40552)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="053" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="53" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="405" mnc="53" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="53" carrier="Airtel MMS (40553)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="054" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="54" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="405" mnc="54" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="54" carrier="Airtel MMS (40554)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="055" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="55" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="405" mnc="55" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="55" carrier="Airtel MMS (40555)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="056" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="56" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="405" mnc="56" carrier="Airtel MMS" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc/" mmsproxy="100.1.201.172" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="56" carrier="Airtel MMS (40556)" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="066" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="66" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="66" carrier="Vodafone MMS (40566)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="66" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="66" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="067" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="67" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="67" carrier="Vodafone MMS (40567)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="67" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="67" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="070" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="70" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="70" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="70" carrier="IDEA MMS (40570)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="70" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="70" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="405" mnc="750" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="750" carrier="Vodafone MMS (405750)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="750" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="750" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="751" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="751" carrier="Vodafone MMS (405751)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="751" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="751" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="752" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="752" carrier="Vodafone MMS (405752)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="752" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="752" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="753" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="753" carrier="Vodafone MMS (405753)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="753" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="753" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="754" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="754" carrier="Vodafone MMS (405754)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="754" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="754" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="755" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="755" carrier="Vodafone MMS (405755)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="755" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="755" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="756" carrier="Vodafone MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="756" carrier="Vodafone MMS (405756)" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="756" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms"></apn>
-      <apn mcc="405" mnc="756" carrier="Vodafone_MMS" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="799" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="799" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="799" carrier="IDEA MMS (405799)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="799" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="799" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="405" mnc="800" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="800" carrier="Aircel MMS (405800)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="800" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="800" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="801" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="801" carrier="Aircel MMS (405801)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="801" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms"></apn>
-      <apn mcc="405" mnc="801" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="802" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="802" carrier="Aircel MMS (405802)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="802" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="802" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="803" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="803" carrier="Aircel MMS (405803)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="803" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms"></apn>
-      <apn mcc="405" mnc="803" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="804" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="804" carrier="Aircel MMS (405804)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="804" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="804" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="805" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="805" carrier="Aircel MMS (405805)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="805" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="805" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="806" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="806" carrier="Aircel MMS (405806)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="806" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="806" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="807" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="807" carrier="Aircel MMS (405807)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="807" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="807" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="808" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="808" carrier="Aircel MMS (405808)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="808" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="808" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="809" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="809" carrier="Aircel MMS (405809)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="809" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms"></apn>
-      <apn mcc="405" mnc="809" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://mmsc/mmrelay.app" mmsproxy="192.168.35.196" mmsport="8081" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="810" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="810" carrier="Aircel MMS (405810)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="810" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="810" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="811" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="811" carrier="Aircel MMS (405811)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="811" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="811" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="812" carrier="Aircel MMS" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.017.083.069" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="812" carrier="Aircel MMS (405812)" apn="aircelmms" mmsc="http://172.17.83.67/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="812" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="812" carrier="Aircel-MMS" apn="aircelmms" mmsc="http://10.50.1.166/servlets/mms" mmsproxy="172.17.83.69" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="813" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="813" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="814" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="814" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="815" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="815" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="816" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="816" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="817" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="817" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="818" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="818" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="819" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="819" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="820" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="820" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="821" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="821" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="822" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="822" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="823" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="823" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="823" carrier="Videocon MMS (405823)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="824" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="824" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="824" carrier="Videocon MMS (405824)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="825" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="825" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="825" carrier="Videocon MMS (405825)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="826" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="826" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="826" carrier="Videocon MMS (405826)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="827" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="827" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="827" carrier="Videocon MMS (405827)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="828" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="828" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="828" carrier="Videocon MMS (405828)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="829" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="829" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="829" carrier="Videocon MMS (405829)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="830" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="830" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="830" carrier="Videocon MMS (405830)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="831" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="831" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="831" carrier="Videocon MMS (405831)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="832" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="832" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="832" carrier="Videocon MMS (405832)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="833" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="833" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="833" carrier="Videocon MMS (405833)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="834" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="834" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="834" carrier="Videocon MMS (405834)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="835" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="835" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="835" carrier="Videocon MMS (405835)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="836" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="836" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="836" carrier="Videocon MMS (405836)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="837" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="837" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="837" carrier="Videocon MMS (405837)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="838" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="838" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="838" carrier="Videocon MMS (405838)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="839" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="839" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="839" carrier="Videocon MMS (405839)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="840" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="840" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="840" carrier="Videocon MMS (405840)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="841" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="841" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="841" carrier="Videocon MMS (405841)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="842" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="842" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="842" carrier="Videocon MMS (405842)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="843" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="843" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="843" carrier="Videocon MMS (405843)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="844" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="844" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="845" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="845" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="845" carrier="IDEA MMS (405845)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="845" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="845" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="405" mnc="846" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="846" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="846" carrier="IDEA MMS (405846)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="846" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="846" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="405" mnc="847" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="848" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="848" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="848" carrier="IDEA MMS (405848)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="848" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="848" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="405" mnc="849" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="849" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="849" carrier="IDEA MMS (405849)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="849" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="849" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="405" mnc="850" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="850" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="850" carrier="IDEA MMS (405850)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="850" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="850" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="405" mnc="851" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="852" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="852" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="852" carrier="IDEA MMS (405852)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="852" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="852" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="405" mnc="853" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="853" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="853" carrier="IDEA MMS (405853)" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="853" carrier="Idea MMS" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="853" carrier="Idea-MMS_Karnatak" apn="spicemms" mmsc="http://10.200.200.3:8514" proxy="10.200.200.3" port="8080"></apn>
-      <apn mcc="405" mnc="854" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="854" carrier="Loop MMS (405854)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="854" carrier="Loop MMS (405854)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="855" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="855" carrier="Loop MMS (405855)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="855" carrier="Loop MMS (405855)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="856" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="856" carrier="Loop MMS (405856)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="856" carrier="Loop MMS (405856)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="857" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="857" carrier="Loop MMS (405857)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="857" carrier="Loop MMS (405857)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="858" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="858" carrier="Loop MMS (405858)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="858" carrier="Loop MMS (405858)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="859" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="859" carrier="Loop MMS (405859)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="859" carrier="Loop MMS (405859)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="860" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="860" carrier="Loop MMS (405860)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="860" carrier="Loop MMS (405860)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="861" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="861" carrier="Loop MMS (405861)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="861" carrier="Loop MMS (405861)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="862" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="862" carrier="Loop MMS (405862)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="862" carrier="Loop MMS (405862)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="863" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="863" carrier="Loop MMS (405863)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="863" carrier="Loop MMS (405863)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="864" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="864" carrier="Loop MMS (405864)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="864" carrier="Loop MMS (405864)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="865" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="865" carrier="Loop MMS (405865)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="865" carrier="Loop MMS (405865)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="866" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="866" carrier="Loop MMS (405866)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="866" carrier="Loop MMS (405866)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="867" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="867" carrier="Loop MMS (405867)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="867" carrier="Loop MMS (405867)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="868" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="868" carrier="Loop MMS (405868)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="868" carrier="Loop MMS (405868)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="869" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="869" carrier="Loop MMS (405869)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="869" carrier="Loop MMS (405869)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="870" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="870" carrier="Loop MMS (405870)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="870" carrier="Loop MMS (405870)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="871" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="871" carrier="Loop MMS (405871)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="871" carrier="Loop MMS (405871)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="872" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="872" carrier="Loop MMS (405872)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="872" carrier="Loop MMS (405872)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="873" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="873" carrier="Loop MMS (405873)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="873" carrier="Loop MMS (405873)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="874" carrier="BPL MMS" apn="mizone" mmsc="http://mms.bplmobile.com:8080 " mmsproxy="010.000.000.010 " mmsport="9401"></apn>
-      <apn mcc="405" mnc="874" carrier="Loop MMS (405874)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="405" mnc="874" carrier="Loop MMS (405874)" apn="mizone" mmsc="http://mms.loopmobile.in:8080/" mmsproxy="10.0.0.10" mmsport="9401" type="mms" protocol="IP" roaming_protocol="IP" carrier_enabled="true"></apn>
-      <apn mcc="405" mnc="875" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="875" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="876" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="876" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="877" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="877" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="878" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="878" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="879" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="879" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="880" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="880" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="908" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="909" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="910" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="911" carrier="IDEA MMS" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="925" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="925" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="926" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="926" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="927" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="927" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="928" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="928" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="929" carrier="UNINOR MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.2.101" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="929" carrier="Uninor MMS" apn="uninor" mmsc="http://10.58.2.120" mmsproxy="10.58.10.59" mmsport="8080" type="mms"></apn>
-      <apn mcc="405" mnc="932" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms"></apn>
-      <apn mcc="405" mnc="932" carrier="Videocon MMS" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="405" mnc="932" carrier="Videocon MMS (405932)" apn="vgprs.com" mmsc="http://10.202.4.119:10021/mmsc/" mmsproxy="10.202.5.145" mmsport="8799" type="mms" authtype="0" protocol="IP" roaming_protocol="IP" carrier_enabled="TRUE"></apn>
-      <apn mcc="410" mnc="01" carrier="Mobilink MMS" apn="mms.mobilinkworld.com" mmsc="http://mms/" mmsproxy="172.25.20.12" mmsport="8080" type="mms" user="Mobilink" password="Mobilink"></apn>
-      <apn mcc="410" mnc="1" carrier="Mobilink MMS" apn="mms.mobilinkworld.com" mmsc="http://mms/" mmsproxy="172.25.20.12" mmsport="8080" type="mms" user="Mobilink" password="Mobilink" authtype="3"></apn>
-      <apn mcc="410" mnc="1" carrier="Mobilink MMS" apn="mms.mobilinkworld.com" mmsc="http://mms/" mmsproxy="172.25.20.12" mmsport="8080" type="mms" user="mobilink" password="mobilink" authtype="0"></apn>
-      <apn mcc="410" mnc="03" carrier="Ufone MMS" apn="Ufone.mms" mmsc="http://www.ufonemms.com:80/" mmsproxy="172.16.13.27" mmsport="8080" type="mms"></apn>
-      <apn mcc="410" mnc="3" carrier="Ufone MMS" apn="Ufone.mms" mmsc="http://www.ufonemms.com:80/" mmsproxy="172.16.13.27" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="410" mnc="3" carrier="Ufone MMS" apn="ufone.mms" mmsc="http://www.ufonemms.com:80/" mmsproxy="172.16.13.27" mmsport="9201" type="mms" user="ufone" password="ufone" authtype="0"></apn>
-      <apn mcc="410" mnc="04" carrier="ZONG MMS" apn="zongmms" mmsc="http://10.81.6.11:8080" mmsproxy="10.81.6.33" mmsport="8000" type="mms"></apn>
-      <apn mcc="410" mnc="4" carrier="Warid MMS" apn="mms.warid" mmsc="http://10.4.0.132/servlets/mms" mmsproxy="10.4.2.1" mmsport="9201" type="mms" authtype="0"></apn>
-      <apn mcc="410" mnc="4" carrier="ZONG MMS" apn="zongmms" mmsc="http://10.81.6.11:8080" mmsproxy="10.81.6.33" mmsport="8000" type="mms" authtype="0"></apn>
-      <apn mcc="410" mnc="06" carrier="Telenor MMS" apn="mms" mmsc="http://mmstelenor" mmsproxy="172.18.19.11" mmsport="8080" type="mms" user="Telenor" password="Telenor"></apn>
-      <apn mcc="410" mnc="6" carrier="Telenor MMS" apn="mms" mmsc="http://mmstelenor" mmsproxy="172.18.19.11" mmsport="8080" type="mms" user="Telenor" password="Telenor" authtype="3"></apn>
-      <apn mcc="410" mnc="6" carrier="Telenor MMS (410.06)" apn="mms" mmsc="http://mmstelenor" mmsproxy="172.18.19.11" mmsport="8080" type="mms" user="Telenor" password="Telenor" authtype="0"></apn>
-      <apn mcc="410" mnc="07" carrier="Warid MMS" apn="mms.warid" mmsc="http://10.4.0.132/servlets/MMS" mmsproxy="10.4.2.1" mmsport="8080" type="mms"></apn>
-      <apn mcc="410" mnc="7" carrier="Warid MMS" apn="mms.warid" mmsc="http://10.4.0.132/servlets/MMS" mmsproxy="10.4.2.1" mmsport="8080" type="mms"></apn>
-      <apn mcc="410" mnc="310" carrier="Consumer Cellular" apn="att.mvno" mmsc="http://mms.fido.ca" mmsproxy="mmsproxy.fido.ca" mmsport="80" type="default,mms,supl,hipri,fota" mvno_match_data="2AC9" mvno_type="gid" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="413" mnc="01" carrier="Mobitel MMS" apn="wapmms" mmsc="http://192.168.050.165" mmsproxy="192.168.050.163" mmsport="8080" type="mms"></apn>
-      <apn mcc="413" mnc="03" carrier="Etisalat MMS" apn="mms" mmsc="http://mms.etisalat.lk:8085" mmsproxy="192.168.104.004" mmsport="9401" type="mms"></apn>
-      <apn mcc="413" mnc="05" carrier="Airtel MMS SL" apn="AirtelLive" mmsc="http://mms.Airtel.lk" mmsproxy="10.200.184.086" mmsport="8080" type="mms"></apn>
-      <apn mcc="415" mnc="01" carrier="Alfa MMS" apn="mms.mic1.com.lb" mmsc="http://mms.mic1.com.lb" mmsproxy="192.168.23.51" mmsport="8080" type="mms" user="mic1" password="mic1"></apn>
-      <apn mcc="415" mnc="1" carrier="Alfa MMS" apn="mms.mic1.com.lb" mmsc="http://mms.mic1.com.lb" mmsproxy="192.168.23.51" mmsport="8080" type="mms" user="mic1" password="mic1" authtype="0"></apn>
-      <apn mcc="415" mnc="1" carrier="Alfa MMS" apn="mms.mic1.com.lb" mmsc="http://mms.mic1.com.lb" mmsproxy="192.168.23.51" mmsport="8080" type="mms" user="mic1" password="mic1" authtype="3"></apn>
-      <apn mcc="415" mnc="03" carrier="touch_MMS" apn="mms" mmsc="http://mms:8088/mms/" mmsproxy="192.168.4.103" mmsport="80" type="mms" user="touch"></apn>
-      <apn mcc="415" mnc="3" carrier="MTC touch MMS" apn="mms.mtctouch.com.lb" mmsc="http://mms:8088/mms/" mmsproxy="192.168.4.103" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="415" mnc="3" carrier="touch_MMS" apn="mms" mmsc="http://mms:8088/mms/" mmsproxy="192.168.4.103" mmsport="80" type="mms" user="touch" authtype="3"></apn>
-      <apn mcc="416" mnc="01" carrier="Zain JO MMS" apn="zain" mmsc="http://mms.jo.zain.com" mmsproxy="192.168.55.10" mmsport="80" type="mms" user="zain" password="zain" authtype="1"></apn>
-      <apn mcc="416" mnc="1" carrier="zain JO mms" apn="zain" mmsc="http://mms.jo.zain.com" mmsproxy="192.168.55.10" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="416" mnc="1" carrier="zain JO mms" apn="zain" mmsc="http://mms.jo.zain.com" mmsproxy="192.168.55.10" mmsport="80" type="mms" user="zain" password="zain" authtype="1"></apn>
-      <apn mcc="416" mnc="03" carrier="Umniah MMS" apn="mms" mmsc="http://mms.umniah.com/" mmsproxy="10.1.1.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="416" mnc="3" carrier="UMNIAH mms" apn="mms" mmsc="http://mms.umniah.com/" mmsproxy="10.1.1.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="416" mnc="3" carrier="UMNIAH mms" apn="mms" mmsc="http://mms.umniah.com/" mmsproxy="10.1.1.10" mmsport="8080" type="mms" authtype="0" server="http://mms.umniah.com/"></apn>
-      <apn mcc="416" mnc="77" carrier="Orange JO MMS" apn="mms.orange.jo" mmsc="http://172.16.1.96/servlets/mms" mmsproxy="172.16.1.2" mmsport="8080" type="mms" user="mmc" password="mmc" authtype="1" server="http://172.16.1.96/servlets/mms" proxy="172.16.1.2" port="8080"></apn>
-      <apn mcc="416" mnc="77" carrier="Orange MMS" apn="mms.orange.jo" mmsc="http://172.16.1.96/servlets/mms" mmsproxy="172.16.1.2" mmsport="8080" type="mms" user="mmc" password="mmc" authtype="1"></apn>
-      <apn mcc="416" mnc="770" carrier="Orange JO MMS" apn="mms.orange.jo" mmsc="http://172.16.1.96/servlets/mms" mmsproxy="172.16.1.2" mmsport="8080" type="mms" user="mmc" password="mmc" authtype="1" server="http://172.16.1.96/servlets/mms" proxy="172.16.1.2" port="8080"></apn>
-      <apn mcc="416" mnc="770" carrier="Orange MMS" apn="mms.orange.jo" mmsc="http://172.16.1.96/servlets/mms" mmsproxy="172.16.1.2" mmsport="8080" type="mms" user="mmc" password="mmc" authtype="1"></apn>
-      <apn mcc="417" mnc="01" carrier="Syriatel MMS" apn="mms.syriatel.com" mmsc="http://mymms.syriatel.com/" mmsproxy="172.20.5.6" mmsport="80" type="mms"></apn>
-      <apn mcc="417" mnc="02" carrier="MTN MMS" apn="mms" mmsc="http://mms/" mmsproxy="10.110.0.134" mmsport="8799" type="mms"></apn>
-      <apn mcc="418" mnc="05" carrier="Asiacell MMS" apn="wap.asiacell.com" mmsc="http://192.168.107.10:19090/was" mmsproxy="192.168.107.50" mmsport="8080" type="mms"></apn>
-      <apn mcc="418" mnc="5" carrier="Asiacell MMS" apn="wap.asiacell.com" mmsc="http://192.168.107.10:19090/was" mmsproxy="192.168.107.50" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="418" mnc="20" carrier="Zain-MMS" apn="MMS" mmsc="http://mms:8002/" mmsproxy="172.29.11.12" mmsport="8080" type="mms" user="atheer" password="atheer" authtype="1"></apn>
-      <apn mcc="418" mnc="30" carrier="Zain-MMS" apn="MMS" mmsc="http://mms:8002/" mmsproxy="172.29.11.12" mmsport="8080" type="mms" user="atheer" password="atheer" authtype="1"></apn>
-      <apn mcc="418" mnc="40" carrier="KOREK MMS" apn="mms.korek.com" mmsc="http://mms.korektel.com/mms/wapenc" mmsproxy="192.168.18.187" mmsport="8080" type="mms" user="korek" password="korek" authtype="1"></apn>
-      <apn mcc="419" mnc="02" carrier="MMS" apn="pps" mmsc="http://mms.zain" mmsproxy="176.0.0.65" mmsport="8080" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="419" mnc="2" carrier="MMS" apn="pps" mmsc="http://mms.zain" mmsproxy="176.0.0.65" mmsport="8080" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="419" mnc="2" carrier="Zain KW MMS" apn="pps" mmsc="http://176.0.0.21" mmsproxy="176.0.0.65" mmsport="8080" type="mms" user="annyway" password="online" authtype="0"></apn>
-      <apn mcc="419" mnc="03" carrier="Wataniya MMS" apn="mms.wataniya.com" mmsc="http://action.wataniya.com" mmsproxy="194.126.53.64" mmsport="8080" type="mms"></apn>
-      <apn mcc="419" mnc="03" carrier="Wataniya MMS" apn="mms.wataniya.com" mmsc="http://action.wataniya.com" mmsproxy="194.126.53.64" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="419" mnc="3" carrier="KT WATANIYA mms" apn="mms.wataniya.com" mmsc="http://action.wataniya.com" mmsproxy="194.126.53.64" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="419" mnc="3" carrier="Wataniya MMS" apn="mms.wataniya.com" mmsc="http://action.wataniya.com" mmsproxy="194.126.53.64" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="419" mnc="04" carrier="VIVA - KW" apn="viva" mmsc="http://172.16.128.80:38090/was" mmsproxy="172.16.128.228" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="419" mnc="04" carrier="VIVA MMS" apn="VIVA" mmsc="http://172.16.128.80:38090/was" mmsproxy="172.16.128.228" mmsport="8080" type="mms"></apn>
-      <apn mcc="419" mnc="4" carrier="VIVA - KW" apn="viva" mmsc="http://172.16.128.80:38090/was" mmsproxy="172.16.128.228" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="419" mnc="4" carrier="VIVA MMS" apn="VIVA" mmsc="http://172.16.128.80:38090/was" mmsproxy="172.16.128.228" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="420" mnc="01" carrier="STC MMS" apn="mms.net.sa" mmsc="http://mms.net.sa:8002/" mmsproxy="10.1.1.1" mmsport="8080" type="mms"></apn>
-      <apn mcc="420" mnc="1" carrier="STC MMS" apn="mms.net.sa" mmsc="http://mms.net.sa:8002/" mmsproxy="10.1.1.1" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="420" mnc="1" carrier="STC mms" apn="mms.net.sa" mmsc="http://mms.net.sa:8002" mmsproxy="10.1.1.1" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="420" mnc="03" carrier="Mobily MMS Postpaid" apn="mms1" mmsc="http://10.3.3.133:9090/was" mmsproxy="10.3.2.133" mmsport="8080" type="mms"></apn>
-      <apn mcc="420" mnc="03" carrier="Mobily MMS Prepaid" apn="mms2" mmsc="http://10.3.3.133:9090/was" mmsproxy="10.3.2.133" mmsport="8080" type="mms"></apn>
-      <apn mcc="420" mnc="3" carrier="Mobily MMS Postpaid" apn="mms1" mmsc="http://10.3.3.133:9090/was" mmsproxy="10.3.2.133" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="420" mnc="3" carrier="Mobily MMS Prepaid" apn="mms2" mmsc="http://10.3.3.133:9090/was" mmsproxy="10.3.2.133" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="420" mnc="3" carrier="mobily-KSA mms" apn="mms1" mmsc="http://10.3.3.133:9090/was" mmsproxy="10.3.2.133" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="420" mnc="3" carrier="mobily-KSA mms pre-paid" apn="mms2" mmsc="http://10.3.3.133:9090/was" mmsproxy="10.3.2.133" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="420" mnc="04" carrier="zain-mms" apn="zain" mmsc="http://10.122.200.12:8002" mmsproxy="10.122.200.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="420" mnc="04" carrier="zain-mms" apn="zainmms" mmsc="http://10.122.200.12:8002" mmsproxy="10.122.200.10" mmsport="8080" type="mms" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="420" mnc="4" carrier="Zain SA" apn="zain" mmsc="http://10.122.200.12:8002/" mmsproxy="10.122.200.10" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="420" mnc="4" carrier="zain-mms" apn="zain" mmsc="http://10.122.200.12:8002" mmsproxy="10.122.200.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="421" mnc="01" carrier="Sabafon MMS" apn="mms" mmsc="http://mms.sabafon.com/" mmsproxy="192.168.30.174" mmsport="8080" type="mms" user="wap" password="wap" authtype="0"></apn>
-      <apn mcc="421" mnc="1" carrier="Sabafon MMS" apn="mms" mmsc="http://mms.sabafon.com/" mmsproxy="192.168.30.174" mmsport="8080" type="mms" user="wap" password="wap" authtype="0"></apn>
-      <apn mcc="421" mnc="02" carrier="MTN MMS YE" apn="fast-mms" mmsc="http://192.168.97.1/mmsc" mmsproxy="192.168.97.1" mmsport="3130" type="mms" user="mms" authtype="0"></apn>
-      <apn mcc="421" mnc="2" carrier="MTN MMS YE" apn="fast-mms" mmsc="http://192.168.97.1/mmsc" mmsproxy="192.168.97.1" mmsport="3130" type="mms" user="mms" authtype="0"></apn>
-      <apn mcc="422" mnc="02" carrier="Oman Mobile MMS" apn="mms" mmsc="http://mmsc.omanmobile.om:10021/mmsc" mmsproxy="192.168.203.35" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="422" mnc="2" carrier="Oman Mobile MMS" apn="mms" mmsc="http://mmsc.omanmobile.om:10021/mmsc" mmsproxy="192.168.203.35" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="422" mnc="03" carrier="Nawras MMS" apn="mms.nawras.com.om" mmsc="http://10.128.240.16/servlets/mms" mmsproxy="10.128.240.19" mmsport="8080" type="mms" user="test" password="test" authtype="1"></apn>
-      <apn mcc="422" mnc="3" carrier="Nawras MMS" apn="mms.nawras.com.om" mmsc="http://10.128.240.16" mmsproxy="10.128.240.16" mmsport="9201" type="mms" user="test" password="test" authtype="0"></apn>
-      <apn mcc="424" mnc="02" carrier="Etisalat MMS" apn="etisalat" mmsc="http://mms/servlets/mms" mmsproxy="10.12.0.32" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="424" mnc="2" carrier="ETISALAT AE mms" apn="mms" mmsc="http://mms/servlets/mms" mmsproxy="10.12.0.30" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="424" mnc="2" carrier="Etisalat MMS" apn="etisalat" mmsc="http://mms/servlets/mms" mmsproxy="10.12.0.32" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="424" mnc="03" carrier="du MMS" apn="du" mmsc="http://mms.du.ae:8002" mmsproxy="10.19.18.4" mmsport="8080" type="mms"></apn>
-      <apn mcc="424" mnc="3" carrier="du" apn="du" mmsc="http://mms.du.ae" mmsproxy="10.19.18.4" mmsport="8080" type="default,mms" authtype="0" port="8080"></apn>
-      <apn mcc="424" mnc="3" carrier="du MMS" apn="du" mmsc="http://mms.du.ae:8002" mmsproxy="10.19.18.4" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="425" mnc="01" carrier="3G Portal" apn="uwap.orange.co.il" mmsc="http://192.168.220.15/servlets/mms" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="425" mnc="1" carrier="3G Portal" apn="uwap.orange.co.il" mmsc="http://192.168.220.15/servlets/mms" type="default,mms" authtype="0"></apn>
-      <apn mcc="425" mnc="1" carrier="3G Portal" apn="uwap.orange.co.il" mmsc="http://192.168.220.15/servlets/mms" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="425" mnc="02" carrier="Cellcom MMS" apn="mms" mmsc="http://mms.cellcom.co.il" mmsproxy="vwapm2.ain.co.il" mmsport="8080" type="mms"></apn>
-      <apn mcc="425" mnc="2" carrier="Cellcom MMS" apn="mms" mmsc="http://mms.cellcom.co.il" mmsproxy="vwapm2.ain.co.il" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="425" mnc="2" carrier="Cellcom_mms" apn="mms" mmsc="http://mms.cellcom.co.il" mmsproxy="172.31.29.38" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="425" mnc="03" carrier="Multimedia Pelephone" apn="mms.pelephone.net.il" mmsc="http://mmsu.pelephone.net.il" mmsproxy="10.170.252.104" mmsport="9093" type="mms" user="pcl@3g" password="pcl" authtype="3"></apn>
-      <apn mcc="425" mnc="3" carrier="Multimedia Pelephone" apn="mms.pelephone.net.il" mmsc="http://mmsu.pelephone.net.il" mmsproxy="10.170.9.54" mmsport="9093" type="mms" user="pcl@3g" password="pcl" authtype="0"></apn>
-      <apn mcc="425" mnc="05" carrier="Jawwal MMS" apn="mms" mmsc="http://mms.jawwal.ps/servlets/mms" mmsproxy="213.244.118.129" mmsport="8080" type="mms"></apn>
-      <apn mcc="425" mnc="5" carrier="Jawwal MMS" apn="mms" mmsc="http://mms.jawwal.ps/servlets/mms" mmsproxy="213.244.118.129" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="425" mnc="06" carrier="Wataniya_mms" apn="mms" mmsc="http://mms.wataniya.ps/servlets/mms" mmsproxy="10.100.129.111" mmsport="8080" type="mms"></apn>
-      <apn mcc="425" mnc="6" carrier="Wataniya_mms" apn="mms" mmsc="http://mms.wataniya.ps/servlets/mms" mmsproxy="10.100.129.111" mmsport="8080" type="mms"></apn>
-      <apn mcc="425" mnc="07" carrier="MMS HOT mobile" apn="mms.hotm" mmsc="http://mms.hotmobile.co.il" mmsproxy="80.246.131.99" mmsport="80" type="mms"></apn>
-      <apn mcc="425" mnc="7" carrier="MMS HOT mobile" apn="mms.hotm" mmsc="http://mms.hotmobile.co.il" mmsproxy="80.246.131.99" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="425" mnc="08" carrier="GolanTelecom MMS" apn="mms.golantelecom.net.il" mmsc="http://mmsc.golantelecom.co.il" mmsproxy="10.224.228.81" mmsport="80" type="mms"></apn>
-      <apn mcc="425" mnc="8" carrier="GolanTelecom MMS" apn="mms.golantelecom.net.il" mmsc="http://mmsc.golantelecom.co.il" mmsproxy="10.224.228.81" mmsport="80" type="mms"></apn>
-      <apn mcc="425" mnc="10" carrier="3G Portal" apn="uwap.orange.co.il" mmsc="http://192.168.220.15/servlets/mms" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="425" mnc="14" carrier="Alon Internet" apn="data.youphone.co.il" mmsc="http://192.168.220.15/servlets/mms" type="default,supl,mms"></apn>
-      <apn mcc="425" mnc="15" carrier="Home Cellular MMS" apn="hcmMMS" mmsc="http://82.166.164.229:9000/mmsc" mmsproxy="82.166.164.229" mmsport="8898" type="mms"></apn>
-      <apn mcc="425" mnc="16" carrier="Rami Levi Multimedia" apn="mms.pelephone.net.il" mmsc="http://mmsu.pelephone.net.il" mmsproxy="10.170.252.104" mmsport="9093" type="mms"></apn>
-      <apn mcc="426" mnc="01" carrier="Batelco MMS" apn="mms.batelco.com" mmsc="http://192.168.36.10/servlets/mms" mmsproxy="192.168.1.2" mmsport="80" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="426" mnc="1" carrier="Batelco MMS" apn="mms.batelco.com" mmsc="http://192.168.36.10/servlets/mms" mmsproxy="192.168.1.2" type="mms" authtype="0"></apn>
-      <apn mcc="426" mnc="1" carrier="Batelco MMS" apn="mms.batelco.com" mmsc="http://192.168.36.10/servlets/mms" mmsproxy="192.168.1.2" mmsport="80" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="426" mnc="02" carrier="Zain BH MMS" apn="mms" mmsc="http://172.18.83.129:80/" mmsproxy="172.18.85.34" mmsport="80" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="426" mnc="2" carrier="Zain BH MMS" apn="mms" mmsc="http://172.18.83.129" mmsproxy="172.18.85.34" mmsport="80" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="426" mnc="04" carrier="VIVAMMS" apn="vivawap.bh" mmsc="http://mms.viva.com.bh:38090" mmsproxy="172.18.142.36" mmsport="8080" type="mms"></apn>
-      <apn mcc="426" mnc="4" carrier="VIVA MMS" apn="vivawap.bh" mmsc="http://mms.viva.com.bh:38090" mmsproxy="172.18.142.36" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="426" mnc="4" carrier="VIVAMMS" apn="vivawap.bh" mmsc="http://mms.viva.com.bh:38090" mmsproxy="172.18.142.36" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="427" mnc="01" carrier="Qtel MMS" apn="mms.qtel" mmsc="http://mmsr.qtelmms.qa" mmsproxy="10.23.8.3" mmsport="8080" type="mms" user="10" password="11" authtype="1"></apn>
-      <apn mcc="427" mnc="1" carrier="Qat-Qtel mms" apn="mms.qtel" mmsc="http://mmsr.qtelmms.qa" mmsproxy="10.23.8.3" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="427" mnc="02" carrier="VFQ MMS" apn="vodafone.com.qa" mmsc="http://mms.vodafone.com.qa/mmsc" mmsproxy="10.101.97.102" mmsport="80" type="mms"></apn>
-      <apn mcc="427" mnc="2" carrier="VFQ MMS" apn="vodafone.com.qa" mmsc="http://mms.vodafone.com.qa/mmsc" mmsproxy="10.101.97.102" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="427" mnc="2" carrier="Vodafone Qatar MMS" apn="Vodafone.com.qa" mmsc="http://mms.vodafone.com.qa/mmsc" mmsproxy="10.101.97.102" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="432" mnc="11" carrier="MCCI MMS" apn="mcinet" mmsc="http://192.168.193.134:38090/was" mmsproxy="192.168.194.73" mmsport="8080" type="mms"></apn>
-      <apn mcc="432" mnc="14" carrier="MCCI MMS" apn="MCI-GPRS" mmsc="http://192.168.193.134" mmsport="38090" type="mms"></apn>
-      <apn mcc="432" mnc="19" carrier="MCCI MMS" apn="MCI-GPRS" mmsc="http://192.168.193.134" mmsport="38090" type="mms"></apn>
-      <apn mcc="432" mnc="20" carrier="RighTel-MMS" apn="RighTel-WAP" mmsc="http://10.200.40.55:38090/was" mmsproxy="10.200.39.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="432" mnc="35" carrier="Irancell-MMS" apn="mtnirancell" mmsc="http://mms:8002" mmsproxy="10.131.26.138" mmsport="8080" type="mms"></apn>
-      <apn mcc="432" mnc="70" carrier="MCCI MMS" apn="mcinet" mmsc="http://192.168.193.134:38090/was" mmsproxy="192.168.194.73" mmsport="8080" type="mms"></apn>
-      <apn mcc="432" mnc="93" carrier="MCCI MMS" apn="MCI-GPRS" mmsc="http://192.168.193.134" mmsport="38090" type="mms"></apn>
-      <apn mcc="434" mnc="04" carrier="Beeline-UZB MMS" apn="mms.beeline.uz" mmsc="http://mms" mmsproxy="172.30.30.166" mmsport="8080" type="mms" user="beeline" password="beeline" authtype="1"></apn>
-      <apn mcc="434" mnc="4" carrier="Beeline-UZB MMS" apn="mms.beeline.uz" mmsc="http://mms" mmsproxy="172.30.30.166" mmsport="8080" type="mms" user="beeline" password="beeline" authtype="1"></apn>
-      <apn mcc="434" mnc="05" carrier="UCELL MMS" apn="mms" mmsc="http://mmsc:8002/" mmsproxy="10.64.164.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="434" mnc="5" carrier="UCELL MMS" apn="mms" mmsc="http://mmsc:8002/" mmsproxy="10.64.164.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="434" mnc="07" carrier="MTS-UZB MMS" apn="mms.mts.uz" mmsc="http://mmsc/was" mmsproxy="10.10.0.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="440" mnc="20" carrier="Application" apn="andoworld.softbank.ne.jp" mmsc="http://mms/" mmsproxy="andmms.softbank.ne.jp" mmsport="8080" type="default,mms,supl,hpri" authtype="0"></apn>
-      <apn mcc="440" mnc="20" carrier="Application" apn="plus.acs.jp" mmsc="http://mms-s" mmsproxy="andmms.plus.acs.ne.jp" mmsport="8080" type="default,mms,supl,hipri" user="ym" password="ym" authtype="2"></apn>
-      <apn mcc="440" mnc="20" carrier="Application" apn="plus.acs.jp" mmsc="http://mms-s" mmsproxy="andmms.plusacs.ne.jp" mmsport="8080" type="default,mms,supl" user="plusw6q9tattkmpk" password="msfbbam83bsdetxb" authtype="2"></apn>
-      <apn mcc="450" mnc="05" carrier="SKT 3G INTERNET" apn="web.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" type="default,mms,supl,fota,cbs" server="*"></apn>
-      <apn mcc="450" mnc="05" carrier="SKT 3G Roaming" apn="roaming.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" server="*"></apn>
-      <apn mcc="450" mnc="05" carrier="SKT LTE INTERNET" apn="lte.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" type="default,mms,supl,fota,cbs" server="*"></apn>
-      <apn mcc="450" mnc="05" carrier="SKT LTE INTERNET" apn="lte.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" type="ia,default,mms,supl,fota,cbs" server="*"></apn>
-      <apn mcc="450" mnc="05" carrier="SKT LTE Roaming" apn="lte-roaming.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" server="*"></apn>
-      <apn mcc="450" mnc="5" carrier="SKT 3G INTERNET" apn="web.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" type="default,mms,supl,fota,cbs" authtype="0" server="*"></apn>
-      <apn mcc="450" mnc="5" carrier="SKT LTE INTERNET" apn="lte.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" type="default,mms,supl,fota,cbs" authtype="0" server="*"></apn>
-      <apn mcc="450" mnc="5" carrier="SKT-Home" apn="lte.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" type="default,mms" authtype="0" server="*"></apn>
-      <apn mcc="450" mnc="5" carrier="SKT-Roaming" apn="roaming.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" type="default,mms" authtype="0" server="*"></apn>
-      <apn mcc="450" mnc="06" carrier="LG uplus" apn="internet.lguplus.co.kr" mmsc="http://omammsc.uplus.co.kr:9084" type="default,mms,supl,fota,cbs" protocol="IPV4V6"></apn>
-      <apn mcc="450" mnc="06" carrier="LG uplus IMS" apn="ims.lguplus.co.kr" mmsc="http://omammsc.uplus.co.kr:9084" type="ia,ims" protocol="IPV4V6"></apn>
-      <apn mcc="450" mnc="06" carrier="LG uplus LTE Roaming" apn="lte-roaming.lguplus.co.kr" mmsc="http://omammsc.uplus.co.kr:9084" authtype="0"></apn>
-      <apn mcc="450" mnc="06" carrier="LG uplus Roaming" apn="wroaming.lguplus.co.kr" mmsc="http://omammsc.uplus.co.kr:9084" authtype="0"></apn>
-      <apn mcc="450" mnc="6" carrier="LG uplus" apn="internet.lguplus.co.kr" mmsc="http://omammsc.uplus.co.kr:9084" type="default,mms,supl,fota,cbs" protocol="IPV4V6"></apn>
-      <apn mcc="450" mnc="6" carrier="LG uplus IMS" apn="ims.lguplus.co.kr" mmsc="http://omammsc.uplus.co.kr:9084" type="ia,ims" protocol="IPV4V6"></apn>
-      <apn mcc="450" mnc="6" carrier="LG uplus LTE Roaming" apn="lte-roaming.lguplus.co.kr" mmsc="http://omammsc.uplus.co.kr:9084" authtype="0"></apn>
-      <apn mcc="450" mnc="6" carrier="LG uplus Roaming" apn="wroaming.lguplus.co.kr" mmsc="http://omammsc.uplus.co.kr:9084" authtype="0"></apn>
-      <apn mcc="450" mnc="08" carrier="KT" apn="lte.ktfwing.com" mmsc="http://mmsc.ktfwing.com:9082" server="*"></apn>
-      <apn mcc="450" mnc="08" carrier="KT 3G INTERNET" apn="alwayson-r6.ktfwing.com" mmsc="http://mmsc.ktfwing.com:9082" type="default,mms,supl,fota,cbs" server="*" port="80"></apn>
-      <apn mcc="450" mnc="08" carrier="KT LTE INTERNET" apn="lte150.ktfwing.com" mmsc="http://mmsc.ktfwing.com:9082" type="default,mms,supl,fota,cbs" server="*" port="80"></apn>
-      <apn mcc="450" mnc="08" carrier="KT LTE INTERNET" apn="lte150.ktfwing.com" mmsc="http://mmsc.ktfwing.com:9082" type="ia,default,mms,supl,fota,cbs" server="*" port="80"></apn>
-      <apn mcc="450" mnc="8" carrier="KT" apn="lte.ktfwing.com" mmsc="http://mmsc.ktfwing.com:9082" type="default,mms" authtype="0" server="*"></apn>
-      <apn mcc="450" mnc="8" carrier="KT 3G INTERNET" apn="alwayson-r6.ktfwing.com" mmsc="http://mmsc.ktfwing.com:9082" type="default,mms,supl,fota,cbs" authtype="0" server="*" port="80"></apn>
-      <apn mcc="450" mnc="8" carrier="KT LTE INTERNET" apn="lte150.ktfwing.com" mmsc="http://mmsc.ktfwing.com:9082" type="default,mms,supl,fota,cbs" authtype="0" server="*" port="80"></apn>
-      <apn mcc="450" mnc="11" carrier="SKT 3G INTERNET" apn="web.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" type="default,mms,supl,fota,cbs" server="*"></apn>
-      <apn mcc="450" mnc="11" carrier="SKT 3G Roaming" apn="roaming.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" server="*"></apn>
-      <apn mcc="450" mnc="11" carrier="SKT LTE Roaming" apn="lte-roaming.sktelecom.com" mmsc="http://omms.nate.com:9082/oma_mms" mmsproxy="smart.nate.com" mmsport="9093" server="*"></apn>
-      <apn mcc="452" mnc="01" carrier="Mobi-gprs-mms" apn="m-i090" mmsc="http://203.162.21.114/mmsc" mmsproxy="203.162.21.114" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="452" mnc="1" carrier="Mobi MMS" apn="m-i090" mmsc="http://203.162.21.114/mmsc" mmsproxy="203.162.21.114" mmsport="9201" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="452" mnc="1" carrier="Mobi-gprs-mms" apn="m-i090" mmsc="http://203.162.21.114/mmsc" mmsproxy="203.162.21.114" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="452" mnc="02" carrier="Vina-gprs-mms" apn="m3-mms" mmsc="http://mms.vinaphone.com.vn" mmsproxy="10.1.10.46" mmsport="8000" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="452" mnc="2" carrier="Vina MMS" apn="m3-mms" mmsc="http://mms.vinaphone.com.vn" mmsproxy="10.1.10.46" mmsport="9201" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="452" mnc="2" carrier="Vina-gprs-mms" apn="m3-mms" mmsc="http://mms.vinaphone.com.vn" mmsproxy="10.1.10.46" mmsport="8000" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="452" mnc="04" carrier="Viettel-gprs-mms" apn="v-mms" mmsc="http://mms.viettelmobile.com.vn/mms/wapenc" mmsproxy="192.168.233.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="452" mnc="4" carrier="Viettel MMS" apn="v-mms" mmsc="http://mms.viettelmobile.com.vn/mms/wapenc" mmsproxy="192.168.233.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="452" mnc="4" carrier="Viettel-gprs-mms" apn="v-mms" mmsc="http://mms.viettelmobile.com.vn/mms/wapenc" mmsproxy="192.168.233.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="452" mnc="05" carrier="Vietnamobile_MMS" apn="mms" mmsc="http://10.10.128.58/servlets/mms" mmsproxy="10.10.128.44" mmsport="8080" type="mms"></apn>
-      <apn mcc="452" mnc="5" carrier="EVN MMS" apn="mms" mmsc="http://10.10.128.58/servlets/mms" mmsproxy="10.10.128.44" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="452" mnc="5" carrier="Vietnamobile_MMS" apn="mms" mmsc="http://10.10.128.58/servlets/mms" mmsproxy="10.10.128.44" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="452" mnc="07" carrier="Gmobile MMS" apn="mms" mmsc="http://mms" mmsproxy="10.16.70.199" mmsport="8080" type="mms" user="mms" password="mms" authtype="2"></apn>
-      <apn mcc="452" mnc="07" carrier="Gmobile-gprs-mms" apn="mms" mmsc="http://mms" mmsproxy="10.16.70.199" mmsport="8080" type="mms"></apn>
-      <apn mcc="452" mnc="7" carrier="Beeline MMS VN" apn="mms" mmsc="http://mms" mmsproxy="10.16.70.199" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="452" mnc="7" carrier="Gmobile-gprs-mms" apn="mms" mmsc="http://mms" mmsproxy="10.16.70.199" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="452" mnc="08" carrier="e-mms" apn="e-mms" mmsc="http://10.18.2.172:38090" mmsproxy="10.18.2.183" mmsport="8080" type="mms"></apn>
-      <apn mcc="452" mnc="8" carrier="e-mms" apn="e-mms" mmsc="http://10.18.2.172:38090" mmsproxy="10.18.2.183" mmsport="8080" type="mms"></apn>
-      <apn mcc="454" mnc="00" carrier="1O1O" apn="mobile" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="00" carrier="NWMOBILE" apn="NWMOBILE" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.61" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="00" carrier="one2free" apn="mobile" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="000" carrier="one2free" apn="hkcsl" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="002" carrier="one2free" apn="hkcsl" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="02" carrier="1O1O" apn="mobile" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="02" carrier="NWMOBILE" apn="NWMOBILE" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.61" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="02" carrier="one2free" apn="mobile" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="2" carrier="1O1O" apn="mobile" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="2" carrier="NWMOBILE" apn="NWMOBILE" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.61" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="03" carrier="3" apn="mobile.three.com.hk" mmsc="http://mms.um.three.com.hk:10021/mmsc" mmsproxy="mms.three.com.hk" mmsport="8799" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="454" mnc="03" carrier="3 LTE" apn="mobile.lte.three.com.hk" mmsc="http://mms.um.three.com.hk:10021/mmsc" mmsproxy="mms.three.com.hk" mmsport="8799" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="454" mnc="004" carrier="3" apn="mobile.three.com.hk" mmsc="http://mms.um.three.com.hk:10021/mmsc" mmsproxy="mms.three.com.hk" mmsport="8799"></apn>
-      <apn mcc="454" mnc="04" carrier="3(2G) MMS" apn="mms-g.three.com.hk" mmsc="http://10.30.15.51:10021/mmsc" mmsproxy="10.30.15.53" mmsport="8080" type="mms"></apn>
-      <apn mcc="454" mnc="4" carrier="3(2G) MMS" apn="mms-g.three.com.hk" mmsc="http://10.30.15.51:10021/mmsc" mmsproxy="10.30.15.53" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="454" mnc="4" carrier="3-DB MMS" apn="mms-g.three.com.hk" mmsc="http://10.30.15.51:10021/mmsc" mmsproxy="10.30.15.53" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="454" mnc="06" carrier="SmarTone" apn="SmarTone" mmsc="http://mms.smartone.com/server" mmsproxy="10.9.9.9" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="10" carrier="one2free" apn="hkcsl" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="12" carrier="CMHK MMS" apn="cmhk" mmsc="http://mms.hk.chinamobile.com/mms" type="mms"></apn>
-      <apn mcc="454" mnc="12" carrier="CMHK MMS" apn="cmhk" mmsc="http://mms.hk.chinamobile.com/mms" type="mms" authtype="0"></apn>
-      <apn mcc="454" mnc="12" carrier="CMHK MMS" apn="peoples.mms" mmsc="http://mms.hk.chinamobile.com/mms" mmsproxy="172.31.31.36" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="454" mnc="13" carrier="CMHK MMS" apn="cmhk" mmsc="http://mms.hk.chinamobile.com/mms" type="mms"></apn>
-      <apn mcc="454" mnc="15" carrier="SmarTone" apn="SmarTone" mmsc="http://mms.smartone.com/server" mmsproxy="10.9.9.9" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="16" carrier="PCCW MMS" apn="pccwmms" mmsc="http://mmsc.mms.pccwmobile.com:8002/" mmsproxy="10.131.2.8" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="454" mnc="16" carrier="PCCW-HKT" apn="pccw" mmsc="http://3gmms.pccwmobile.com:8080/was" mmsproxy="10.140.14.10" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="454" mnc="16" carrier="PCCW-HKT" apn="pccw" mmsc="http://mms.pccw-hkt.com:8080" mmsproxy="10.140.14.10" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="454" mnc="17" carrier="SmarTone" apn="SmarTone" mmsc="http://mms.smartone.com/server" mmsproxy="10.9.9.9" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="18" carrier="1O1O" apn="mobile" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="18" carrier="NWMOBILE" apn="NWMOBILE" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.61" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="18" carrier="one2free" apn="hkcsl" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="18" carrier="one2free" apn="mobile" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="454" mnc="019" carrier="PCCW-HKT" apn="pccw" mmsc="http://mms.pccw-hkt.com:8080" mmsproxy="10.140.14.10" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="454" mnc="19" carrier="PCCW-HKT" apn="pccw" mmsc="http://3gmms.pccwmobile.com:8080/was" mmsproxy="10.140.14.10" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="454" mnc="020" carrier="PCCW-HKT" apn="pccw" mmsc="http://3gmms.pccwmobile.com:8080/was" mmsproxy="10.140.14.10" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="454" mnc="20" carrier="PCCW-HKT" apn="pccw" mmsc="http://mms.pccw-hkt.com:8080" mmsproxy="10.140.14.10" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="454" mnc="029" carrier="PCCW-HKT" apn="pccw" mmsc="http://3gmms.pccwmobile.com:8080/was" mmsproxy="10.140.14.10" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="454" mnc="029" carrier="PCCW-HKT" apn="pccw" mmsc="http://mms.pccw-hkt.com:8080" mmsproxy="10.140.14.10" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="455" mnc="00" carrier="SmarTone Macau" apn="smartgprs" mmsc="http://momms.smartone.com/dmog/mo" mmsproxy="10.9.9.29" mmsport="8080" type="default,supl,mms" authtype="3"></apn>
-      <apn mcc="455" mnc="01" carrier="CTM (Prepaid)" apn="ctmprepaid" mmsc="http://mms.wap.ctm.net:8002" mmsproxy="192.168.99.3" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="455" mnc="01" carrier="CTM MMS" apn="ctmmms" mmsc="http://mms.wap.ctm.net:8002" mmsproxy="192.168.99.3" mmsport="8080" type="mms"></apn>
-      <apn mcc="455" mnc="1" carrier="CTM (Prepaid)" apn="ctmprepaid" mmsc="http://mms.wap.ctm.net:8002" mmsproxy="192.168.99.3" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="455" mnc="1" carrier="CTM MMS" apn="ctmmms" mmsc="http://mms.wap.ctm.net:8002" mmsproxy="192.168.99.3" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="455" mnc="03" carrier="3 Macau" apn="mobile.three.com.mo" mmsc="http://mms.three.com.mo:10021/mmsc" mmsproxy="mms.three.com.mo" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="455" mnc="3" carrier="HutchisonMMS" apn="mms.hutchisonmacau.com" mmsc="http://10.30.15.51:10021/mmsc" mmsproxy="10.30.15.53" mmsport="9201" type="mms" user="hutchison" password="1234" authtype="3" proxy="10.30.3.151" port="9201"></apn>
-      <apn mcc="455" mnc="04" carrier="CTM (Prepaid)" apn="ctmprepaid" mmsc="http://mms.wap.ctm.net:8002" mmsproxy="192.168.99.3" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="455" mnc="04" carrier="CTM MMS" apn="ctmmms" mmsc="http://mms.wap.ctm.net:8002" mmsproxy="192.168.99.3" mmsport="8080" type="mms"></apn>
-      <apn mcc="455" mnc="4" carrier="CTM (Prepaid)" apn="ctmprepaid" mmsc="http://mms.wap.ctm.net:8002" mmsproxy="192.168.99.3" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="455" mnc="05" carrier="3 Macau" apn="mobile.three.com.mo" mmsc="http://mms.three.com.mo:10021/mmsc" mmsproxy="mms.three.com.mo" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="460" mnc="0" carrier="中国移动彩信 (China Mobile)" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" authtype="0" proxy="10.0.0.172" port="80"></apn>
-      <apn mcc="460" mnc="0" carrier="移动彩信" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="460" mnc="00" carrier="中国移动彩信 (China Mobile)" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" proxy="10.0.0.172" port="80"></apn>
-      <apn mcc="460" mnc="01" carrier="中国联通 3g 彩信 (China Unicom)" apn="3gwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" type="mms"></apn>
-      <apn mcc="460" mnc="01" carrier="中国联通彩信 (China Unicom)" apn="uniwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" type="mms"></apn>
-      <apn mcc="460" mnc="01" carrier="联通2g彩信 (China Unicom)" apn="uniwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" type="mms"></apn>
-      <apn mcc="460" mnc="01" carrier="联通彩信 (China Unicom)" apn="3gwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" type="mms"></apn>
-      <apn mcc="460" mnc="1" carrier="2G联通彩信" apn="uniwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="460" mnc="1" carrier="3G联通彩信" apn="3gwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="460" mnc="1" carrier="联通2g彩信 (China Unicom)" apn="uniwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="460" mnc="1" carrier="联通彩信 (China Unicom)" apn="3gwap" mmsc="http://mmsc.myuni.com.cn" mmsproxy="10.0.0.172" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="460" mnc="02" carrier="中国移动彩信 (China Mobile)" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" proxy="10.0.0.172" port="80"></apn>
-      <apn mcc="460" mnc="2" carrier="中国移动彩信 (China Mobile)" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" authtype="0" proxy="10.0.0.172" port="80"></apn>
-      <apn mcc="460" mnc="2" carrier="移动彩信" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="460" mnc="03" carrier="CTWAP" apn="ctwap" mmsc="http://mmsc.vnet.mobi" mmsproxy="10.0.0.200" mmsport="80" type="default,mms" proxy="10.0.0.200" port="80"></apn>
-      <apn mcc="460" mnc="07" carrier="中国移动彩信 (China Mobile)" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" proxy="10.0.0.172" port="80"></apn>
-      <apn mcc="460" mnc="7" carrier="中国移动彩信 (China Mobile)" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" authtype="0" proxy="10.0.0.172" port="80"></apn>
-      <apn mcc="460" mnc="7" carrier="移动彩信" apn="cmwap" mmsc="http://mmsc.monternet.com" mmsproxy="10.0.0.172" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="460" mnc="12" carrier="CTWAP" apn="ctwap" mmsc="http://mmsc.vnet.mobi" mmsproxy="10.0.0.200" mmsport="80" type="default,mms" proxy="10.0.0.200" port="80"></apn>
-      <apn mcc="460" mnc="13" carrier="CTWAP" apn="ctwap" mmsc="http://mmsc.vnet.mobi" mmsproxy="10.0.0.200" mmsport="80" type="default,mms" proxy="10.0.0.200" port="80"></apn>
-      <apn mcc="466" mnc="01" carrier="遠傳電信(Far EasTone) (MMS)" apn="fetnet01" mmsc="http://mms" mmsproxy="210.241.199.199" mmsport="9201" type="mms"></apn>
-      <apn mcc="466" mnc="1" carrier="遠傳電信 MMS" apn="fetnet01" mmsc="http://mms/" mmsproxy="210.241.199.199" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="1" carrier="遠傳電信(Far EasTone) (MMS)" apn="fetnet01" mmsc="http://mms" mmsproxy="210.241.199.199" mmsport="9201" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="88" carrier="和信電訊(KGT-Online) (MMS)" apn="kgtmms" mmsc="http://mms.kgtmms.net.tw/mms/wapenc" mmsproxy="172.28.33.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="466" mnc="89" carrier="T Star-MMS" apn="internet" mmsc="http://mms.vibo.net.tw" mmsproxy="172.24.128.36" mmsport="8080" type="mms"></apn>
-      <apn mcc="466" mnc="89" carrier="å¨å¯¶é›»ä¿¡ MMS" apn="vibo" mmsc="http://mms/" mmsproxy="172.24.128.36" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="89" carrier="威寶電信(VIBO) (MMS)" apn="vibo" mmsc="http://mms" mmsproxy="172.24.128.36" mmsport="8080" type="mms"></apn>
-      <apn mcc="466" mnc="89" carrier="威寶電信(VIBO) (MMS)" apn="vibo" mmsc="http://mms" mmsproxy="172.24.128.36" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="92" carrier="中華電信 MMS" apn="emome" mmsc="http://mms.emome.net:8002" mmsproxy="10.1.1.1" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="92" carrier="中華電信(Chunghwa) (MMS)" apn="emome" mmsc="http://mms.emome.net:8002" mmsproxy="10.1.1.1" mmsport="8080" type="mms"></apn>
-      <apn mcc="466" mnc="92" carrier="中華電信(Chunghwa) (MMS)" apn="emome" mmsc="http://mms.emome.net:8002" mmsproxy="10.1.1.1" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="93" carrier="台湾大哥大 MMS" apn="mms" mmsc="http://mms.catch.net.tw/" mmsproxy="10.1.1.2" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="93" carrier="台灣大哥大(TW Mobile) (MMS)" apn="MMS" mmsc="http://mms.catch.net.tw" mmsproxy="10.1.1.2" mmsport="80" type="mms"></apn>
-      <apn mcc="466" mnc="93" carrier="台灣大哥大(TW Mobile) (MMS)" apn="MMS" mmsc="http://mms.catch.net.tw" mmsproxy="10.1.1.2" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="97" carrier="台湾大哥大 MMS" apn="mms" mmsc="http://mms.catch.net.tw/" mmsproxy="10.1.1.2" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="97" carrier="台灣大哥大(TW Mobile) (MMS)" apn="MMS" mmsc="http://mms.catch.net.tw" mmsproxy="10.1.1.2" mmsport="80" type="mms"></apn>
-      <apn mcc="466" mnc="97" carrier="台灣大哥大(TW Mobile) (MMS)" apn="MMS" mmsc="http://mms.catch.net.tw" mmsproxy="10.1.1.2" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="99" carrier="台湾大哥大 MMS" apn="mms" mmsc="http://mms.catch.net.tw/" mmsproxy="10.1.1.2" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="466" mnc="99" carrier="台灣大哥大(TW Mobile) (MMS)" apn="mms" mmsc="http://mms.catch.net.tw" mmsproxy="10.1.1.2" mmsport="80" type="mms"></apn>
-      <apn mcc="466" mnc="99" carrier="台灣大哥大(TW Mobile) (MMS)" apn="mms" mmsc="http://mms.catch.net.tw" mmsproxy="10.1.1.2" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="470" mnc="01" carrier="GP-MMS" apn="gpmms" mmsc="http://mms.gpsurf.net/servlets/mms" mmsproxy="10.128.1.2" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="470" mnc="1" carrier="GP-MMS" apn="gpmms" mmsc="http://mms.gpsurf.net/servlets/mms" mmsproxy="10.128.1.2" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="502" mnc="10" carrier="DiGi MMS" apn="digimms" mmsc="http://mms.digi.com.my/servlets/mms" mmsproxy="203.92.128.160" mmsport="80" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="502" mnc="12" carrier="Maxis" apn="unet" mmsc="http://172.16.74.100:10021/mmsc" mmsproxy="202.75.133.49" mmsport="80" type="default,mms" user="maxis" password="wap" authtype="0" proxy="202.75.133.49" port="80"></apn>
-      <apn mcc="502" mnc="12" carrier="Maxis Internet" apn="max4g" mmsc="http://172.16.74.100:10021/mmsc" mmsproxy="202.75.133.49" mmsport="80" type="default,supl,mms" user="maxis" password="wap" authtype="1"></apn>
-      <apn mcc="502" mnc="13" carrier="Celcom Internet" apn="celcom4g" mmsc="http://mms.celcom.net.my" mmsproxy="10.128.1.242" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="502" mnc="16" carrier="DiGi MMS" apn="digimms" mmsc="http://mms.digi.com.my/servlets/mms" mmsproxy="203.92.128.160" mmsport="80" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="502" mnc="16" carrier="DiGi MMS" apn="digimms" mmsc="http://mms.digi.com.my/servlets/mms" mmsproxy="203.92.128.160" mmsport="80" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="502" mnc="17" carrier="Maxis Internet" apn="max4g" mmsc="http://172.16.74.100:10021/mmsc" mmsproxy="202.75.133.49" mmsport="80" type="default,supl,mms" user="maxis" password="wap" authtype="1"></apn>
-      <apn mcc="502" mnc="18" carrier="U Mobile Internet" apn="my3g" mmsc="http://10.30.3.11/servlets/mms" mmsproxy="10.30.5.11" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="502" mnc="18" carrier="U Mobile Internet" apn="my3g" mmsc="http://10.30.3.11/servlets/mms" mmsproxy="10.30.5.11" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="502" mnc="18" carrier="umobile" apn="my3g" mmsc="http://10.30.3.11/servlets/mms" mmsproxy="10.30.5.11" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="502" mnc="19" carrier="Celcom" apn="celcom3G" mmsc="http://mms.celcom.net.my" mmsproxy="10.128.1.242" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="502" mnc="19" carrier="Celcom Internet" apn="celcom4g" mmsc="http://mms.celcom.net.my" mmsproxy="10.128.1.242" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="502" mnc="19" carrier="Celcom Internet" apn="celcom4g" mmsc="http://mms.celcom.net.my" mmsproxy="10.128.1.242" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="502" mnc="142" carrier="Maxis Internet" apn="max4g" mmsc="http://172.16.74.100:10021/mmsc" mmsproxy="202.75.133.49" mmsport="80" type="default,supl,mms" user="maxis" password="wap" authtype="1"></apn>
-      <apn mcc="502" mnc="143" carrier="DiGi MMS" apn="digimms" mmsc="http://mms.digi.com.my/servlets/mms" mmsproxy="203.92.128.160" mmsport="80" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="502" mnc="145" carrier="Celcom Internet" apn="celcom4g" mmsc="http://mms.celcom.net.my" mmsproxy="10.128.1.242" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="502" mnc="146" carrier="DiGi MMS" apn="digimms" mmsc="http://mms.digi.com.my/servlets/mms" mmsproxy="203.92.128.160" mmsport="80" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="502" mnc="147" carrier="Maxis Internet" apn="max4g" mmsc="http://172.16.74.100:10021/mmsc" mmsproxy="202.75.133.49" mmsport="80" type="default,supl,mms" user="maxis" password="wap" authtype="1"></apn>
-      <apn mcc="502" mnc="148" carrier="Celcom Internet" apn="celcom4g" mmsc="http://mms.celcom.net.my" mmsproxy="10.128.1.242" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="505" mnc="01" carrier="Telstra MMS" apn="telstra.mms" mmsc="http://mmsc.telstra.com:8002/" mmsproxy="10.1.1.180" mmsport="80" type="mms"></apn>
-      <apn mcc="505" mnc="1" carrier="Telstra MMS" apn="telstra.mms" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.180" mmsport="80" type="mms" authtype="0" protocol="IP"></apn>
-      <apn mcc="505" mnc="1" carrier="Telstra MMS" apn="telstra.mms" mmsc="http://mmsc.telstra.com:8002/" mmsproxy="10.1.1.180" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="505" mnc="02" carrier="Optus MMS" apn="mms" mmsc="http://mmsc.optus.com.au:8002/" mmsproxy="61.88.190.10" mmsport="8070" type="mms"></apn>
-      <apn mcc="505" mnc="02" carrier="Virgin MMS" apn="virginmms" mmsc="http://mms.virginvibe.com.au:8002" mmsproxy="202.139.83.152" mmsport="8070" type="mms" mvno_match_data="505029" mvno_type="imsi"></apn>
-      <apn mcc="505" mnc="2" carrier="Optus MMS" apn="mms" mmsc="http://mmsc.optus.com.au:8002/" mmsproxy="61.88.190.10" mmsport="8070" type="mms" authtype="0"></apn>
-      <apn mcc="505" mnc="2" carrier="Virgin MMS" apn="virginmms" mmsc="http://mms.virginvibe.com.au:8002" mmsproxy="202.139.83.152" mmsport="8070" type="mms" authtype="0" mvno_match_data="505029" mvno_type="imsi"></apn>
-      <apn mcc="505" mnc="2" carrier="Virgin MMS" apn="virginmms" mmsc="http://mms.virginvibe.com.au:8002/" mmsproxy="202.139.83.152" mmsport="8070" type="mms" authtype="0" mvno_match_data="virgin mobile" mvno_type="spn"></apn>
-      <apn mcc="505" mnc="03" carrier="Vodafone live!" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.au/pxtsend" mmsproxy="10.202.2.60" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="505" mnc="3" carrier="Vodafone AU" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.au/pxtsend" mmsproxy="10.202.2.60" mmsport="8080" type="default,mms" authtype="0" protocol="IP"></apn>
-      <apn mcc="505" mnc="3" carrier="Vodafone live!" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.au/pxtsend" mmsproxy="10.202.2.60" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="505" mnc="06" carrier="Planet 3" apn="3services" mmsc="http://mmsc.three.net.au:10021/mmsc" mmsproxy="10.176.57.25" mmsport="8799" authtype="0" protocol="IP"></apn>
-      <apn mcc="505" mnc="6" carrier="Planet 3" apn="3services" mmsc="http://mmsc.three.net.au:10021/mmsc" mmsproxy="10.176.57.25" mmsport="8799" authtype="0" protocol="IP"></apn>
-      <apn mcc="505" mnc="07" carrier="VF AU PXT" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.au/pxtsend" mmsproxy="10.202.2.60" mmsport="8080" type="mms"></apn>
-      <apn mcc="505" mnc="11" carrier="Telstra MMS" apn="Telstra.mms" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.180" mmsport="80" type="mms"></apn>
-      <apn mcc="505" mnc="12" carrier="3" apn="3services" mmsc="http://mmsc.three.net.au:10021/mmsc" mmsproxy="10.176.57.25" mmsport="8799" type="default,supl,mms"></apn>
-      <apn mcc="505" mnc="71" carrier="Telstra MMS" apn="Telstra.mms" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.180" mmsport="80" type="mms"></apn>
-      <apn mcc="505" mnc="72" carrier="Telstra MMS" apn="Telstra.mms" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.180" mmsport="80" type="mms"></apn>
-      <apn mcc="505" mnc="88" carrier="VF AU PXT" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.au/pxtsend" mmsproxy="10.202.2.60" mmsport="8080" type="mms"></apn>
-      <apn mcc="505" mnc="90" carrier="Optus MMS" apn="mms" mmsc="http://mmsc.optus.com.au:8002/" mmsproxy="61.88.190.10" mmsport="8070" type="mms"></apn>
-      <apn mcc="505" mnc="99" carrier="Vodafone Live!" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.au/pxtsend" mmsproxy="10.202.2.60" mmsport="8080"></apn>
-      <apn mcc="510" mnc="01" carrier="INDOSAT-GPRS" apn="indosatgprs" mmsc="http://mmsc.indosat.com" mmsproxy="10.19.19.19" mmsport="8080" type="*" proxy="10.19.19.19" port="8080"></apn>
-      <apn mcc="510" mnc="01" carrier="Indosat MMS" apn="indosatmms" mmsc="http://mmsc.indosat.com" mmsproxy="10.19.19.19" mmsport="8080" type="mms" user="indosat" password="indosat" authtype="1"></apn>
-      <apn mcc="510" mnc="1" carrier="Indosat MMS" apn="indosatmms" mmsc="http://mmsc.indosat.com" mmsproxy="10.19.19.19" mmsport="8080" type="mms" user="indosat" password="indosat" authtype="1"></apn>
-      <apn mcc="510" mnc="1" carrier="Indosat MMS (01)" apn="indosatmms" mmsc="http://mmsc.indosat.com" mmsproxy="10.19.19.19" mmsport="8080" type="mms" user="indosat" password="indosat" authtype="0"></apn>
-      <apn mcc="510" mnc="08" carrier="AXISmms" apn="AXISmms" mmsc="http://mmsc.axis" mmsproxy="10.8.3.8" mmsport="8080" type="mms" user="axis" password="123456" authtype="1"></apn>
-      <apn mcc="510" mnc="08" carrier="AXISwap" apn="AXIS" mmsc="http://mmsc.axis" mmsproxy="10.8.3.8" mmsport="8080" type="*" proxy="10.8.3.8" port="8080"></apn>
-      <apn mcc="510" mnc="8" carrier="AXIS MMS" apn="AXISmms" mmsc="http://mmsc.AXIS" mmsproxy="10.8.3.8" mmsport="8080" type="mms" user="AXIS" password="123456" authtype="0"></apn>
-      <apn mcc="510" mnc="10" carrier="TSEL-GPRS" apn="telkomsel" mmsc="http://mms.telkomsel.com" mmsproxy="10.1.89.150" mmsport="8000" type="*" proxy="10.1.89.130" port="8000"></apn>
-      <apn mcc="510" mnc="10" carrier="TSEL-MMS" apn="mms" mmsc="http://mms.telkomsel.com" mmsproxy="10.1.89.150" mmsport="8000" type="mms" user="wap" password="wap123" authtype="1"></apn>
-      <apn mcc="510" mnc="10" carrier="Telkomsel MMS" apn="mms" mmsc="http://mms.telkomsel.com" mmsproxy="10.1.89.150" mmsport="8000" type="mms" user="wap" password="wap123" authtype="0"></apn>
-      <apn mcc="510" mnc="11" carrier="XL MMS" apn="www.xlmms.net" mmsc="http://mmc.xl.net.id/servlets/mms" mmsproxy="202.152.240.50" mmsport="8080" type="mms" user="xlgprs" password="proxl" authtype="0" server="http://mmc.xl.net.id/servlets/mms"></apn>
-      <apn mcc="510" mnc="11" carrier="XL-GPRS" apn="www.xlgprs.net" mmsc="http://mmc.xl.net.id/servlets/mms" mmsproxy="202.152.240.050" mmsport="8080" type="*" proxy="202.152.240.050" port="8080"></apn>
-      <apn mcc="510" mnc="11" carrier="XL-MMS" apn="www.xlmms.net" mmsc="http://mmc.xl.net.id/servlets/mms" mmsproxy="202.152.240.50" mmsport="8080" type="mms" user="xlgprs" password="proxl" authtype="1"></apn>
-      <apn mcc="510" mnc="21" carrier="INDOSAT-GPRS" apn="indosatgprs" mmsc="http://mmsc.indosat.com" mmsproxy="10.19.19.19" mmsport="8080" type="*" proxy="10.19.19.19" port="8080"></apn>
-      <apn mcc="510" mnc="21" carrier="Indosat MMS" apn="indosatmms" mmsc="http://mmsc.indosat.com" mmsproxy="10.19.19.19" mmsport="8080" type="mms" user="indosat" password="indosat" authtype="1"></apn>
-      <apn mcc="510" mnc="21" carrier="Indosat MMS (21)" apn="indosatmms" mmsc="http://mmsc.indosat.com" mmsproxy="10.19.19.19" mmsport="8080" type="mms" user="indosat" password="indosat" authtype="0"></apn>
-      <apn mcc="510" mnc="89" carrier="3 MMS (510.89)" apn="3mms" mmsc="http://mms.three.co.id" mmsproxy="10.4.0.10" mmsport="8080" type="mms" user="3mms" password="3mms" authtype="0"></apn>
-      <apn mcc="510" mnc="89" carrier="3-GPRS" apn="3gprs" mmsc="http://mms.three.co.id" mmsproxy="10.4.0.10" mmsport="3128" type="*" proxy="10.4.0.10" port="3128"></apn>
-      <apn mcc="510" mnc="89" carrier="3MMS" apn="3mms" mmsc="http://mms.three.co.id" mmsproxy="10.4.0.10" mmsport="3128" type="mms" user="3mms" password="3mms" authtype="1"></apn>
-      <apn mcc="515" mnc="02" carrier="myGlobe MMS" apn="mms.globe.com.ph" mmsc="http://192.40.100.22:10021/mmsc" mmsproxy="203.177.42.214" mmsport="8080" type="mms"></apn>
-      <apn mcc="515" mnc="2" carrier="Globe MMS" apn="mms.globe.com.ph" mmsc="http://192.40.100.22:10021/mmsc" mmsproxy="203.177.42.214" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="515" mnc="2" carrier="myGlobe MMS" apn="mms.globe.com.ph" mmsc="http://192.40.100.22:10021/mmsc" mmsproxy="203.177.42.214" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="515" mnc="03" carrier="Smart MMS" apn="mms" mmsc="http://10.102.61.238:8002" mmsproxy="10.102.61.46" mmsport="8080" type="mms"></apn>
-      <apn mcc="515" mnc="3" carrier="SMART MMS" apn="mms" mmsc="http://10.102.61.238:8002" mmsproxy="10.102.61.46" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="515" mnc="05" carrier="SUN MMS" apn="mms" mmsc="http://mmscenter.suncellular.com.ph" mmsproxy="202.138.159.78" mmsport="8080" type="mms"></apn>
-      <apn mcc="515" mnc="5" carrier="SUN MMS" apn="mms" mmsc="http://mmscenter.suncellular.com.ph" mmsproxy="202.138.159.78" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="515" mnc="18" carrier="CURE MMS" apn="redmms" mmsc="http://10.102.61.193:8002/mmsc" mmsproxy="10.138.3.35" mmsport="8080" type="mms"></apn>
-      <apn mcc="515" mnc="18" carrier="Redmms" apn="real.globe.com.ph" mmsc="http://10.102.61.193:8002/mmsc" mmsproxy="10.138.3.35" mmsport="8080" type="mms"></apn>
-      <apn mcc="520" mnc="0" carrier="CAT3G MMS" apn="catmms" mmsc="http://mms.cat3g.com:8002/" mmsproxy="10.4.7.39" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="520" mnc="0" carrier="TRUE-H MMS" apn="hmms" mmsc="http://mms.trueh.com:8002/" mmsproxy="10.4.7.39" mmsport="8080" type="mms" user="true" password="true" authtype="3"></apn>
-      <apn mcc="520" mnc="00" carrier="CAT3G MMS" apn="catmms" mmsc="http://mms.cat3g.com:8002/" mmsproxy="10.4.7.39" mmsport="8080" type="mms"></apn>
-      <apn mcc="520" mnc="00" carrier="TRUE-H MMS" apn="hmms" mmsc="http://mms.trueh.com:8002/" mmsproxy="10.4.7.39" mmsport="8080" type="mms" user="true" password="true" authtype="1" mvno_match_data="01" mvno_type="gid"></apn>
-      <apn mcc="520" mnc="01" carrier="AIS MMS" apn="multimedia" mmsc="http://mms.mobilelife.co.th" mmsproxy="203.170.229.34" mmsport="8080" type="mms"></apn>
-      <apn mcc="520" mnc="1" carrier="AIS MMS" apn="multimedia" mmsc="http://mms.mobilelife.co.th" mmsproxy="203.170.229.34" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="520" mnc="03" carrier="AIS MMS" apn="multimedia" mmsc="http://mms.mobilelife.co.th" mmsproxy="203.170.229.34" mmsport="8080" type="mms"></apn>
-      <apn mcc="520" mnc="3" carrier="AIS 3G MMS" apn="mms" mmsc="http://mms.ais.co.th" mmsproxy="203.170.229.34" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="520" mnc="3" carrier="AIS MMS" apn="multimedia" mmsc="http://mms.mobilelife.co.th" mmsproxy="203.170.229.34" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="520" mnc="04" carrier="TRUE-H MMS" apn="hmms" mmsc="http://mms.trueh.com:8002/" mmsproxy="10.4.7.39" mmsport="8080" type="mms" user="true" password="true" authtype="1"></apn>
-      <apn mcc="520" mnc="4" carrier="TRUE-H MMS" apn="hmms" mmsc="http://mms.trueh.com:8002/" mmsproxy="10.4.7.39" mmsport="8080" type="mms" user="true" password="true" authtype="3"></apn>
-      <apn mcc="520" mnc="05" carrier="dtac MMS" apn="mms" mmsc="http://mms2.dtac.co.th:8002/" mmsproxy="10.10.10.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="520" mnc="5" carrier="dtac mms" apn="mms" mmsc="http://mms2.dtac.co.th:8002/" mmsproxy="10.10.10.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="520" mnc="15" carrier="TOT 3G MMS" apn="mms" mmsc="http://mms.tot3g.net:8002" mmsproxy="192.168.0.72" mmsport="8080" type="mms"></apn>
-      <apn mcc="520" mnc="15" carrier="TOT 3G MMS" apn="mms" mmsc="http://mms.tot3g.net:8002" mmsproxy="192.168.0.72" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="520" mnc="18" carrier="dtac MMS" apn="mms" mmsc="http://mms.dtac.co.th:8002/" mmsproxy="10.10.10.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="520" mnc="18" carrier="dtac MMS" apn="mms" mmsc="http://mms.dtac.co.th:8002/" mmsproxy="10.10.10.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="520" mnc="18" carrier="dtac MMS" apn="mms" mmsc="http://mms.dtac.co.th:8002/" mmsproxy="203.155.200.133" mmsport="8080" type="mms"></apn>
-      <apn mcc="520" mnc="18" carrier="dtac MMS" apn="mms" mmsc="http://mms.dtac.co.th:8002/" mmsproxy="203.155.200.133" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="520" mnc="99" carrier="TRUE MMS" apn="hmms" mmsc="http://mms.truelife.com:8002/" mmsproxy="10.4.7.39" mmsport="8080" type="mms" user="true" password="true" authtype="1"></apn>
-      <apn mcc="520" mnc="99" carrier="True MMS" apn="mms" mmsc="http://mms.trueworld.net:8002/" mmsproxy="10.4.7.39" mmsport="8080" type="mms" user="true" password="true" authtype="3"></apn>
-      <apn mcc="525" mnc="01" carrier="SingTel (PostPaid)" apn="e-ideas" mmsc="http://mms.singtel.com:10021/mmsc" mmsproxy="165.21.42.84" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="525" mnc="01" carrier="SingTel (PrePaid)" apn="hicard" mmsc="http://mms.singtel.com:10021/mmsc" mmsproxy="165.21.42.84" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="525" mnc="1" carrier="SingTel (PostPaid)" apn="e-ideas" mmsc="http://mms.singtel.com:10021/mmsc" mmsproxy="165.21.42.84" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="525" mnc="1" carrier="SingTel (PrePaid)" apn="hicard" mmsc="http://mms.singtel.com:10021/mmsc" mmsproxy="165.21.42.84" mmsport="8080" type="default,supl,mms" authtype="0"></apn>
-      <apn mcc="525" mnc="1" carrier="SingTel MMS" apn="hicard" mmsc="http://mms.singtel.com:10021/mmsc" mmsproxy="165.21.42.84" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="525" mnc="02" carrier="SingTel (PostPaid)" apn="e-ideas" mmsc="http://mms.singtel.com:10021/mmsc" mmsproxy="165.21.42.84" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="525" mnc="02" carrier="SingTel (PrePaid)" apn="hicard" mmsc="http://mms.singtel.com:10021/mmsc" mmsproxy="165.21.42.84" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="525" mnc="2" carrier="SingTel (PostPaid)" apn="e-ideas" mmsc="http://mms.singtel.com:10021/mmsc" mmsproxy="165.21.42.84" mmsport="8080" type="default,supl,mms"></apn>
-      <apn mcc="525" mnc="03" carrier="M1 MMS(3G)" apn="miworld" mmsc="http://mmsgw:8002" mmsproxy="172.16.14.10" mmsport="8080" type="mms" user="65" password="user123" authtype="1"></apn>
-      <apn mcc="525" mnc="3" carrier="M1 MMS" apn="miworld" mmsc="http://mmsgw:8002/" mmsproxy="172.16.14.10" mmsport="8080" type="mms" user="65" password="user123" authtype="3"></apn>
-      <apn mcc="525" mnc="3" carrier="M1 MMS(3G)" apn="miworld" mmsc="http://mmsgw:8002" mmsproxy="172.16.14.10" mmsport="8080" type="mms" user="65" password="user123" authtype="1"></apn>
-      <apn mcc="525" mnc="04" carrier="M1 MMS(3G)" apn="miworld" mmsc="http://mmsgw:8002" mmsproxy="172.16.14.10" mmsport="8080" type="mms" user="65" password="user123" authtype="1"></apn>
-      <apn mcc="525" mnc="05" carrier="SH MMS Postpaid" apn="shmms" mmsc="http://mms.starhubgee.com.sg:8002/" mmsproxy="10.12.1.80" mmsport="80" type="mms"></apn>
-      <apn mcc="525" mnc="5" carrier="SH MMS Postpaid" apn="shmms" mmsc="http://mms.starhubgee.com.sg:8002/" mmsproxy="10.12.1.80" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="525" mnc="5" carrier="StarHub MMS" apn="shmms" mmsc="http://mms.starhubgee.com.sg:8002/" mmsproxy="10.12.1.80" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="530" mnc="01" carrier="VFNZ Gateway" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.nz/pxtsend" mmsproxy="172.30.38.3" mmsport="8080" type="mms"></apn>
-      <apn mcc="530" mnc="1" carrier="VFNZ Gateway" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.nz/pxtsend" mmsproxy="172.30.38.3" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="530" mnc="1" carrier="VFNZ PXT" apn="live.vodafone.com" mmsc="http://pxt.vodafone.net.nz/pxtsend" mmsproxy="172.30.38.3" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="530" mnc="05" carrier="TelecomMMS" apn="wap.telecom.co.nz" mmsc="http://lsmmsc.xtra.co.nz" mmsproxy="210.55.11.73" mmsport="80" type="mms"></apn>
-      <apn mcc="530" mnc="5" carrier="TelecomMMS" apn="wap.telecom.co.nz" mmsc="http://lsmmsc.xtra.co.nz" mmsproxy="210.55.11.73" mmsport="80" type="mms" authtype="0"></apn>
-      <apn mcc="530" mnc="24" carrier="2Degrees MMS" apn="mms" mmsc="http://mms.2degreesmobile.net.nz:48090" mmsproxy="118.148.1.118" mmsport="8080" type="mms"></apn>
-      <apn mcc="530" mnc="24" carrier="2degrees MMS" apn="mms" mmsc="http://mms.2degreesmobile.net.nz:48090" mmsproxy="118.148.1.118" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="537" mnc="03" carrier="PNG MMS" apn="wap.digicelpng.com" mmsc="http://mms.digicelpng.com:8990" mmsproxy="10.149.83.116" mmsport="8080" type="mms"></apn>
-      <apn mcc="537" mnc="03" carrier="Papua New Guinea:Digicel:Modem" apn="wap.digicel.com.pg" mmsc="http://wapdigicel.com" type="dun" authtype="1" proxy="10.149.122.12" port="8080"></apn>
-      <apn mcc="537" mnc="3" carrier="PNG MMS" apn="wap.digicelpng.com" mmsc="http://mms.digicelpng.com:8990" mmsproxy="10.149.83.116" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="537" mnc="3" carrier="Papua New Guinea:Digicel:Mms" apn="wap.digicel.com.pg" mmsc="http://mmc.digicel.com.pg/servlets/mms" mmsproxy="10.149.122.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="539" mnc="88" carrier="Tonga:Digicel:Mms" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="539" mnc="88" carrier="Tonga:Digicel:Modem" apn="wap" mmsc="http://wapdigicel.com" type="dun" authtype="1" proxy="172.16.7.12" port="8080"></apn>
-      <apn mcc="541" mnc="05" carrier="Vanatu:Digicel:Mms" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="541" mnc="05" carrier="Vanatu:Digicel:Modem" apn="wap" mmsc="http://wapdigicel.com" type="dun" authtype="1" proxy="172.16.7.12" port="8080"></apn>
-      <apn mcc="541" mnc="5" carrier="Vanatu:Digicel:Mms" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="542" mnc="02" carrier="Fiji:Digicel:Mms" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="542" mnc="02" carrier="Fiji:Digicel:Modem" apn="wap" mmsc="http://wapdigicel.com" type="dun" authtype="1" proxy="172.16.7.12" port="8080"></apn>
-      <apn mcc="542" mnc="2" carrier="Fiji:Digicel:Mms" apn="wap" mmsc="http://mms.digicelgroup.com" mmsproxy="172.16.7.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="602" mnc="01" carrier="Mobinil MMS" apn="mobinilmms" mmsc="http://10.7.13.24:8002" mmsproxy="62.241.155.45" mmsport="8080" type="mms"></apn>
-      <apn mcc="602" mnc="1" carrier="Mobinil MMS" apn="mobinilmms" mmsc="http://10.7.13.24:8002" mmsproxy="62.241.155.45" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="602" mnc="02" carrier="Vodafone MMS" apn="mms.vodafone.com.eg" mmsc="http://mms.vodafone.com.eg/servlets/mms" mmsproxy="163.121.178.2" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="602" mnc="2" carrier="vodafone EG mms" apn="mms.Vodafone.com.eg" mmsc="http://mms.vodafone.com.eg/servlets/mms" mmsproxy="163.121.178.2" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="602" mnc="03" carrier="Etisalat MMS" apn="etisalat" mmsc="http://10.71.131.7:38090" mmsproxy="10.71.130.29" mmsport="8080" type="mms"></apn>
-      <apn mcc="602" mnc="3" carrier="Etisalat MMS" apn="etisalat" mmsc="http://10.71.131.7:38090" mmsproxy="10.71.130.29" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="602" mnc="3" carrier="etisalat EG" apn="etisalat" mmsc="http://10.71.131.7:38090" mmsproxy="10.71.130.29" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="603" mnc="01" carrier="Mobilis mms" apn="mms" mmsc="http://172.25.49.9/servlets/mms" mmsproxy="172.25.49.2" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="603" mnc="1" carrier="Mobilis mms" apn="mms" mmsc="http://172.25.49.9/servlets/mms" mmsproxy="172.25.49.2" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="603" mnc="02" carrier="djezzy.mms" apn="djezzy.mms" mmsc="http://172.24.97.152:6021/mmsc" mmsproxy="172.24.97.158" mmsport="8799" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="603" mnc="2" carrier="Djezzy MMS" apn="djezzy.mms" mmsc="http://172.24.97.152.10021/mmsc" mmsproxy="172.24.97.158" mmsport="9201" type="mms" authtype="0"></apn>
-      <apn mcc="603" mnc="2" carrier="djezzy.mms" apn="djezzy.mms" mmsc="http://172.24.97.152:6021/mmsc" mmsproxy="172.24.97.158" mmsport="8799" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="603" mnc="03" carrier="nedjmamms" apn="nedjmamms" mmsc="http://10.10.111.1" mmsproxy="192.168.52.3" mmsport="3128" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="603" mnc="3" carrier="Nedjma MMS" apn="nedjmamms" mmsc="http://10.10.111.1" mmsproxy="192.168.52.3" mmsport="9201" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="603" mnc="3" carrier="nedjmamms" apn="nedjmamms" mmsc="http://10.10.111.1" mmsproxy="192.168.52.3" mmsport="3128" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="604" mnc="0" carrier="GPRS MMS" apn="mms.meditel.ma" mmsc="http://mms.meditel.ma:8088/mms" mmsproxy="10.8.8.9" mmsport="8080" type="mms" user="MEDIMMS" password="MEDIMMS" authtype="1"></apn>
-      <apn mcc="604" mnc="0" carrier="Meditel MMS" apn="mms.meditel.ma" mmsc="http://mms.meditel.ma:8088/mms" mmsproxy="10.8.8.9" mmsport="8080" type="mms" user="MEDIMMS" password="MEDIMMS" authtype="0"></apn>
-      <apn mcc="604" mnc="00" carrier="GPRS MMS" apn="mms.meditel.ma" mmsc="http://mms.meditel.ma:8088/mms" mmsproxy="10.8.8.9" mmsport="8080" type="mms" user="MEDIMMS" password="MEDIMMS" authtype="1"></apn>
-      <apn mcc="604" mnc="01" carrier="MMS IAM" apn="mmsiam" mmsc="http://mms:8002/" mmsproxy="10.16.35.50" mmsport="8080" type="mms"></apn>
-      <apn mcc="604" mnc="1" carrier="MMS IAM" apn="mmsiam" mmsc="http://mms:8002/" mmsproxy="10.16.35.50" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="604" mnc="02" carrier="MMS" apn="mms.wana.ma" mmsc="http://mms.wana.ma:38090" mmsproxy="10.86.0.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="604" mnc="2" carrier="MMS" apn="mms.wana.ma" mmsc="http://mms.wana.ma:38090" mmsproxy="10.86.0.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="605" mnc="01" carrier="MMS Orange" apn="mms.otun" mmsc="http://mms.orange.tn" mmsproxy="10.12.1.52" mmsport="8080" type="mms"></apn>
-      <apn mcc="605" mnc="1" carrier="MMS Orange" apn="mms.otun" mmsc="http://mms.orange.tn" mmsproxy="10.12.1.52" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="605" mnc="1" carrier="Orange TUN MMS" apn="mms.otun" mmsc="https://mms.orange.tn" mmsproxy="10.12.1.52" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="605" mnc="02" carrier="Tunisie Telecom MMS" apn="mms.tn" mmsc="http://192.168.0.3:19090/was" mmsproxy="192.168.0.2" mmsport="8080" type="mms" user="mms@tt1" password="mms" authtype="1"></apn>
-      <apn mcc="605" mnc="2" carrier="Tunisie Telecom MMS" apn="mms.tn" mmsc="http://192.168.0.3:19090/was" mmsproxy="192.168.0.2" mmsport="8080" type="mms" user="mms@tt1" password="mms" authtype="1"></apn>
-      <apn mcc="605" mnc="2" carrier="Tuntel MMS" apn="mms.tn" mmsc="http://mms/" mmsproxy="213.150.186.106" mmsport="9201" type="mms" user="mms@tt1" password="mms" authtype="0"></apn>
-      <apn mcc="605" mnc="03" carrier="MMS Tunisiana" apn="mms.tunisiana.com" mmsc="http://mmsc.tunisiana.com" mmsproxy="10.3.2.100" mmsport="80" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="605" mnc="3" carrier="Tunisiana MMS" apn="mms.tunisiana.com" mmsc="http://mmsc.tunisiana.com" mmsproxy="10.3.2.100" mmsport="9201" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="606" mnc="0" carrier="Libyana MMS" apn="mms" mmsc="http://62.240.62.180:80" mmsproxy="192.168.8.148" mmsport="8000" type="mms" authtype="0"></apn>
-      <apn mcc="606" mnc="00" carrier="Libyana MMS" apn="mms" mmsc="http://62.240.62.180:80" mmsproxy="192.168.8.148" mmsport="8000" type="mms" authtype="0"></apn>
-      <apn mcc="608" mnc="01" carrier="Orange MMS SN" apn="mms" mmsc="http://mmsalize/servlets/mms" mmsproxy="172.16.30.9" mmsport="8080" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="608" mnc="1" carrier="Orange MMS SN" apn="mms" mmsc="http://mmsalize/servlets/mms" mmsproxy="172.16.30.9" mmsport="8080" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="608" mnc="1" carrier="Orange SN MMS" apn="mms" mmsc="http://mmsalize/servlets/mms" mmsproxy="172.16.30.9" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="610" mnc="02" carrier="Orange ML MMS" apn="mms" mmsc="http://10.109.6.2/servlets/mms" mmsproxy="10.109.4.35" mmsport="8080" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="610" mnc="2" carrier="Orange ML MMS" apn="mms" mmsc="http://10.109.6.2/servlets/mms" mmsproxy="10.109.4.35" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="610" mnc="2" carrier="Orange ML MMS" apn="mms" mmsc="http://10.109.6.2/servlets/mms" mmsproxy="10.109.4.35" mmsport="8080" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="612" mnc="03" carrier="Omms CI" apn="orangecimms" mmsc="http://172.20.6.1/servlets/mms" mmsproxy="172.20.4.33" mmsport="8080" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="612" mnc="3" carrier="Omms CI" apn="orangecimms" mmsc="http://172.20.6.1/servlets/mms" mmsproxy="172.20.4.33" mmsport="8080" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="612" mnc="3" carrier="Orange CI MMS" apn="orangecimms" mmsc="http://172.20.6.1/servlets/mms" mmsproxy="172.20.4.33" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="614" mnc="04" carrier="Orange MMS" apn="orange.mms" mmsc="http://10.10.10.35:38090/was" mmsproxy="10.10.10.36" mmsport="8080" type="mms" user="orange" password="orange"></apn>
-      <apn mcc="614" mnc="4" carrier="Orange MMS" apn="orange.mms" mmsc="http://10.10.10.35:38090/was" mmsproxy="10.10.10.36" mmsport="8080" type="mms" user="orange" password="orange" authtype="3"></apn>
-      <apn mcc="614" mnc="4" carrier="Orange NE MMS" apn="orange.mms" mmsc="http://10.10.35:38090/was" mmsproxy="10.10.10.36" mmsport="8080" type="mms" user="orange" password="orange" authtype="0"></apn>
-      <apn mcc="617" mnc="01" carrier="Orange MMS" apn="orangemms" mmsc="http://10.2.1.20:8514" mmsproxy="10.2.1.20" mmsport="8080" type="mms" user="mmsc" password="mmsc"></apn>
-      <apn mcc="617" mnc="1" carrier="Orange MMS" apn="orangemms" mmsc="http://10.2.1.20:8514" mmsproxy="10.2.1.20" mmsport="8080" type="mms" user="mmsc" password="mmsc" authtype="3"></apn>
-      <apn mcc="617" mnc="1" carrier="Orange MU MMS" apn="orangemms" mmsc="http://1.2.1.20:8514" mmsproxy="10.2.1.20:8080" type="mms" user="mmsc" password="mmsc" authtype="0"></apn>
-      <apn mcc="620" mnc="0" carrier="Glo mms" apn="glo mms" mmsc="http://mms.gloworld.com/mms" mmsproxy="10.161.85.4" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="620" mnc="01" carrier="MTN MMS" apn="mtn mms" mmsc="http://172.17.3.7" mmsproxy="172.17.3.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="620" mnc="1" carrier="MTN MMS" apn="mtn mms" mmsc="http://172.17.3.7" mmsproxy="172.17.3.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="620" mnc="02" carrier="Vodafone_mms" apn="mms" mmsc="http://mms.vodaphone.com.gh/mms" mmsproxy="172.24.97.1" mmsport="9201" type="mms" authtype="0"></apn>
-      <apn mcc="620" mnc="2" carrier="Vodafone_mms" apn="mms" mmsc="http://mms.vodaphone.com.gh/mms" mmsproxy="172.24.97.1" mmsport="9201" type="mms" authtype="0"></apn>
-      <apn mcc="620" mnc="03" carrier="Tigo mms" apn="mms.tigo.com.gh" mmsc="http://mms/" mmsproxy="10.4.1.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="620" mnc="3" carrier="Tigo mms" apn="mms.tigo.com.gh" mmsc="http://mms/" mmsproxy="10.4.1.7" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="620" mnc="06" carrier="Airtel mms" apn="mms/airtel mms" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="620" mnc="6" carrier="Airtel mms" apn="mms/airtel mms" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" authtype="0"></apn>
-      <apn mcc="621" mnc="20" carrier="Airtel MMS" apn="mms.ng.zain.com" mmsc="http://10.210.3.239:9800/mm1" mmsproxy="172.18.254.5" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="621" mnc="20" carrier="Zain NG MMS" apn="mms.ng.zain.com" mmsc="http://172.23.1.12/wapenc" mmsproxy="172.18.254.5" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="621" mnc="30" carrier="MTN MMS" apn="web.gprs.mtnnigeria.net" mmsc="http://10.199.212.8/servlets/mms" mmsproxy="10.199.212.2" type="mms"></apn>
-      <apn mcc="621" mnc="30" carrier="MTN MMS" apn="web.gprs.mtnnigeria.net" mmsc="http://10.199.212.8/servlets/mms" mmsproxy="10.199.212.2" type="mms" authtype="0"></apn>
-      <apn mcc="621" mnc="30" carrier="MTN NG Internet" apn="web.gprs.mtnnigeria.net" mmsc="http://10.199.212.8/servlets/mms" mmsproxy="10.199.212.2" mmsport="8080" type="default,mms" user="web" password="web" authtype="0"></apn>
-      <apn mcc="621" mnc="50" carrier="Glo MMS" apn="glomms" mmsc="http://mms.gloworld.com/mmsc" mmsproxy="10.100.114.144" mmsport="3130" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="621" mnc="50" carrier="Glo MMS" apn="glomms" mmsc="http://mms.gloworld.com/mmsc" mmsproxy="10.100.82.4" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="621" mnc="60" carrier="Etisalat Internet" apn="etisalat" mmsc="http://10.71.170.30:38090/was" mmsproxy="10.71.170.5" mmsport="8080" type="default,mms" authtype="0"></apn>
-      <apn mcc="621" mnc="60" carrier="etisalat MMS" apn="etisalat" mmsc="http://10.71.170.30:38090/was" type="mms"></apn>
-      <apn mcc="621" mnc="60" carrier="etisalat MMS" apn="etisalat" mmsc="http://10.71.170.30:38090/was" type="mms" authtype="0"></apn>
-      <apn mcc="624" mnc="02" carrier="Orange CM" apn="orangecmgprs" mmsc="http://mms.orange.cm" mmsproxy="192.168.122.101" mmsport="8080" type="default,mms" user="orange" password="orange" proxy="192.168.122.101" port="8080"></apn>
-      <apn mcc="624" mnc="2" carrier="Orange CM" apn="orangecmgprs" mmsc="http://mms.orange.cm" mmsproxy="192.168.122.101" mmsport="8080" type="default,mms" user="orange" password="orange" authtype="0"></apn>
-      <apn mcc="624" mnc="2" carrier="Orange CM" apn="orangecmgprs" mmsc="http://mms.orange.cm" mmsproxy="192.168.122.101" mmsport="8080" type="default,mms" user="orange" password="orange" authtype="3" proxy="192.168.122.101" port="8080"></apn>
-      <apn mcc="627" mnc="01" carrier="Orange GQ MMS" apn="orangemms" mmsc="http://192.168.17.34/servlets/mms" mmsproxy="192.168.17.2" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="627" mnc="1" carrier="Orange GQ MMS" apn="orangemms" mmsc="http://192.168.17.34/servlets/mms" mmsproxy="192.168.17.2" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="630" mnc="01" carrier="Vodacom MMS" apn="vodalive" mmsc="http://172.24.97.1/mmsc" mmsproxy="172.24.97.1" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="630" mnc="1" carrier="Vodacom MMS" apn="vodalive" mmsc="http://172.24.97.1/mmsc" mmsproxy="172.24.97.1" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="639" mnc="02" carrier="safaricom mms" apn="safaricom" mmsc="http://mms.gprs.safaricom.com" mmsproxy="172.22.2.38" mmsport="8080" type="mms" user="saf" password="data" authtype="1"></apn>
-      <apn mcc="639" mnc="2" carrier="Safaricom Internet" apn="safaricom" mmsc="http://mms.gprs.safaricom.com" mmsproxy="172.22.2.38" mmsport="8080" type="default,mms" user="saf" password="data" authtype="0" proxy="172.22.2.38" port="8080"></apn>
-      <apn mcc="639" mnc="2" carrier="safaricom mms" apn="safaricom" mmsc="http://mms.gprs.safaricom.com" mmsproxy="172.22.2.38" mmsport="8080" type="mms" user="saf" password="data" authtype="1"></apn>
-      <apn mcc="639" mnc="03" carrier="Airtel mms" apn="mms" mmsc="http://mms.ke.airtel.com:8002" mmsproxy="172.30.9.8" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="639" mnc="03" carrier="mms" apn="ke.celtel.com" mmsc="http://mms.ke.celtel.com/servlets/mms" mmsproxy="172.30.8.50" mmsport="8080" type="mms"></apn>
-      <apn mcc="639" mnc="3" carrier="Airtel mms" apn="mms" mmsc="http://mms.ke.airtel.com:8002" mmsproxy="172.30.9.8" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="639" mnc="05" carrier="Yu Internet" apn="Internet" mmsc="http://10.4.16.22/servlets/mms" mmsproxy="10.4.16.6" mmsport="8080" type="default,supl,mms" proxy="10.4.16.6" port="8080"></apn>
-      <apn mcc="639" mnc="05" carrier="Yu mms" apn="Yu" mmsc="http://10.4.16.22/servlets/mms" mmsproxy="10.4.16.6" mmsport="8080" type="mms"></apn>
-      <apn mcc="639" mnc="5" carrier="Yu Internet" apn="Internet" mmsc="http://10.4.16.22/servlets/mms" mmsproxy="10.4.16.6" mmsport="8080" type="default,supl,mms" proxy="10.4.16.6" port="8080"></apn>
-      <apn mcc="639" mnc="5" carrier="Yu mms" apn="Yu" mmsc="http://10.4.16.22/servlets/mms" mmsproxy="10.4.16.6" mmsport="8080" type="mms"></apn>
-      <apn mcc="639" mnc="07" carrier="Orange MMS" apn="mms.orange.co.ke" mmsc="http://10.36.16.5/servlets/mms" mmsproxy="10.36.17.130" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="639" mnc="7" carrier="Orange KE MMS" apn="mms.orange.co.ke" mmsc="http://10.36.16.5/servlets/mms" mmsproxy="10.36.16.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="640" mnc="04" carrier="Vodacom MMS" apn="mms" mmsc="http://10.154.0.12/mms/" type="mms"></apn>
-      <apn mcc="640" mnc="4" carrier="Vodacom MMS" apn="mms" mmsc="http://10.154.0.12/mms/" type="mms"></apn>
-      <apn mcc="641" mnc="14" carrier="Orange MMS" apn="orangemms" mmsc="http://mms/" type="mms"></apn>
-      <apn mcc="641" mnc="14" carrier="Orange MMS" apn="orangemms" mmsc="http://mms/" type="mms" authtype="0"></apn>
-      <apn mcc="646" mnc="02" carrier="Orange MG MMS" apn="orangemms" mmsc="http://10.152.10.70.38090" mmsproxy="10.150.0.115" mmsport="8080" type="mms" user="mms" password="orange"></apn>
-      <apn mcc="646" mnc="2" carrier="Orange MG MMS" apn="orangemms" mmsc="http://10.152.10.70.38090" mmsproxy="10.150.0.115" mmsport="8080" type="mms" user="mms" password="orange" authtype="3"></apn>
-      <apn mcc="646" mnc="2" carrier="Orange MG MMS" apn="orangemms" mmsc="http://10.152.10.70:38090" mmsproxy="10.150.0.115" mmsport="8080" type="mms" user="mms" password="orange" authtype="0"></apn>
-      <apn mcc="647" mnc="00" carrier="Orange MMS Réunion" apn="orangerun.acte" mmsc="http://mms.orange.re" mmsproxy="192.168.10.200" mmsport="8080" type="mms" user="orange" password="orange"></apn>
-      <apn mcc="647" mnc="02" carrier="OnlyMMS" apn="onlymms" mmsc="http://10.4.85.50:8514" mmsproxy="10.4.85.50" mmsport="8080" type="mms" user="only" password="only" authtype="1"></apn>
-      <apn mcc="647" mnc="10" carrier="Coriolis MMS" apn="mmscoriolis" mmsc="http://mmscoriolis" mmsproxy="10.143.156.6" mmsport="8080" type="mms" mvno_match_data="12" mvno_type="gid"></apn>
-      <apn mcc="647" mnc="10" carrier="MMS" apn="mmssfr" mmsc="http://mms" mmsproxy="10.0.224.145" mmsport="8080" type="mms" user="mms" password="mms"></apn>
-      <apn mcc="647" mnc="10" carrier="MMS" apn="mmssfr" mmsc="http://mms" mmsproxy="10.0.224.145" mmsport="8080" type="mms" user="mms" password="mms" authtype="3"></apn>
-      <apn mcc="647" mnc="10" carrier="SRR MMS" apn="mmssfr" mmsc="http://mms" mmsproxy="10.0.224.145" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="651" mnc="01" carrier="VCL MMS GPRS" apn="mms" mmsc="http://mmsc.vodacom4me.co.ls" mmsproxy="10.113.63.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="651" mnc="1" carrier="VCL MMS GPRS" apn="mms" mmsc="http://mmsc.vodacom4me.co.ls" mmsproxy="10.113.63.11" mmsport="8080" type="mms"></apn>
-      <apn mcc="652" mnc="02" carrier="Orange BW MMS" apn="mms.orange.co.bw" mmsc="http://10.0.0.242/servlets/mms" mmsproxy="10.0.0.226" mmsport="8080" type="mms"></apn>
-      <apn mcc="652" mnc="2" carrier="Orange BW MMS" apn="mms.orange.co.bw" mmsc="http://10.0.0.242/servlets/mms" mmsproxy="10.0.0.226" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="655" mnc="01" carrier="MMS.Vodacom" apn="lte.vodacom.za" mmsc="http://mmsc.vodacom4me.co.za" mmsproxy="196.6.128.13" mmsport="8080" type="mms"></apn>
-      <apn mcc="655" mnc="01" carrier="MMS.Vodacom" apn="mms.vodacom.net" mmsc="http://mmsc.vodacom4me.co.za" mmsproxy="196.6.128.13" mmsport="8080" type="mms"></apn>
-      <apn mcc="655" mnc="1" carrier="MMS.Vodacom" apn="lte.vodacom.za" mmsc="http://mmsc.vodacom4me.co.za" mmsproxy="196.6.128.13" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="655" mnc="1" carrier="MMS.Vodacom" apn="mms.vodacom.net" mmsc="http://mmsc.vodacom4me.co.za" mmsproxy="196.6.128.13" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="655" mnc="1" carrier="Vlive! MMS" apn="mms.vodacom.net" mmsc="http://mmsc.vodacom4me.co.za" mmsproxy="196.6.128.13" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="655" mnc="02" carrier="Telkom Mobile MMS" apn="mms" mmsc="http://mms.8ta.com:38090/was" mmsproxy="41.151.254.162" mmsport="8080" type="mms"></apn>
-      <apn mcc="655" mnc="2" carrier="8.ta MMS" apn="mms" mmsc="http://mms.8ta.com:38090/was" mmsproxy="41.151.254.162" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="655" mnc="2" carrier="Telkom Mobile MMS" apn="mms" mmsc="http://mms.8ta.com:38090/was" mmsproxy="41.151.254.162" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="655" mnc="07" carrier="Cell C MMS" apn="mms" mmsc="http://mms.cmobile.co.za/" mmsproxy="196.31.116.250" mmsport="8080" type="mms"></apn>
-      <apn mcc="655" mnc="07" carrier="Redbull MMS" apn="mms" mmsc="http://mms.cmobile.co.za/" mmsproxy="196.31.116.250" mmsport="8080" type="mms" mvno_match_data="6550713" mvno_type="imsi"></apn>
-      <apn mcc="655" mnc="07" carrier="Virgin_MMS_1" apn="vmms" mmsc="http://mms.virginmobile.co.za" mmsproxy="196.31.116.242" mmsport="8080" type="mms" mvno_match_data="6550710" mvno_type="imsi"></apn>
-      <apn mcc="655" mnc="07" carrier="Virgin_MMS_2" apn="vmms" mmsc="http://mms.virginmobile.co.za" mmsproxy="196.31.116.242" mmsport="9201" type="mms" mvno_match_data="6550710" mvno_type="imsi"></apn>
-      <apn mcc="655" mnc="7" carrier="Cell C MMS" apn="mms" mmsc="http://mms.cmobile.co.za/" mmsproxy="196.31.116.250" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="655" mnc="7" carrier="Cell C mms" apn="mms" mmsc="http://mms.cmobile.co.za" mmsproxy="196.31.116.250" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="655" mnc="7" carrier="Virgin MMS" apn="vmms" mmsc="http://mms.virginmobile.co.za" mmsproxy="196.31.116.242" mmsport="8080" type="mms" authtype="1" mvno_match_data="Virgin" mvno_type="spn"></apn>
-      <apn mcc="655" mnc="7" carrier="Virgin_MMS_1" apn="vmms" mmsc="http://mms.virginmobile.co.za" mmsproxy="196.31.116.242" mmsport="8080" type="mms" authtype="0" mvno_match_data="6550710" mvno_type="imsi"></apn>
-      <apn mcc="655" mnc="7" carrier="Virgin_MMS_2" apn="vmms" mmsc="http://mms.virginmobile.co.za" mmsproxy="196.31.116.242" mmsport="9201" type="mms" authtype="0" mvno_match_data="6550710" mvno_type="imsi"></apn>
-      <apn mcc="655" mnc="10" carrier="MTN MMS" apn="myMTN" mmsc="http://mms.mtn.co.za/mms/wapenc" mmsproxy="196.11.240.241" mmsport="8080" type="mms" user="mtnmms" password="mtnmms" authtype="0"></apn>
-      <apn mcc="655" mnc="10" carrier="MTN MMS" apn="myMTN" mmsc="http://mms.mtn.co.za/mms/wapenc" mmsproxy="196.11.240.241" mmsport="8080" type="mms" user="mtnmms" password="mtnmms" authtype="1"></apn>
-      <apn mcc="704" mnc="01" carrier="MMS CLARO" apn="mms.ideasclaro" mmsc="http://mms.ideasclaro.com:8002" mmsproxy="216.230.133.66" mmsport="8080" type="mms"></apn>
-      <apn mcc="704" mnc="1" carrier="Guatemala:Claro:MMS" apn="mms.ideasclaro" mmsc="http://mms.ideasclaro.com:8002" mmsproxy="216.230.133.66" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="704" mnc="1" carrier="MMS CLARO" apn="mms.ideasclaro" mmsc="http://mms.ideasclaro.com:8002" mmsproxy="216.230.133.66" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="704" mnc="02" carrier="MMS TIGO" apn="mms.tigo.gt" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms"></apn>
-      <apn mcc="704" mnc="2" carrier="Guatemala:Tigo:Mms" apn="mms.tigo.gt" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms" authtype="1"></apn>
-      <apn mcc="704" mnc="2" carrier="MMS TIGO" apn="mms.tigo.gt" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms" authtype="0"></apn>
-      <apn mcc="704" mnc="03" carrier="Movistar MMS" apn="mms.movistar.gt" mmsc="http://mms.movistar.gt" mmsproxy="10.12.22.1" mmsport="80" type="mms" user="movistargt" password="movistargt" authtype="1"></apn>
-      <apn mcc="704" mnc="3" carrier="Guatemala:Movistar:MMS" apn="mms.movistar.gt" mmsc="http://mms.movistar.gt" mmsproxy="10.12.22.1" mmsport="80" type="mms" user="movistargt" password="movistargt" authtype="1"></apn>
-      <apn mcc="704" mnc="3" carrier="Movistar MMS" apn="mms.movistar.gt" mmsc="http://mms.movistar.gt" mmsproxy="10.12.22.1" mmsport="80" type="mms" user="movistargt" password="movistargt" authtype="1"></apn>
-      <apn mcc="704" mnc="030" carrier="Movistar MMS" apn="mms.movistar.gt" mmsc="http://mms.movistar.gt" mmsproxy="10.12.22.1" mmsport="80" type="mms" user="movistargt" password="movistargt" authtype="1"></apn>
-      <apn mcc="706" mnc="01" carrier="MMS CLARO" apn="mms.ideasclaro" mmsc="http://mms.ideasclaro.com:8002" mmsproxy="216.230.133.66" mmsport="8080" type="mms"></apn>
-      <apn mcc="706" mnc="1" carrier="El Salvador:Claro:MMS" apn="mms.ideasclaro" mmsc="http://mms.ideasclaro.com:8002" mmsproxy="216.230.133.66" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="706" mnc="1" carrier="MMS CLARO" apn="mms.ideasclaro" mmsc="http://mms.ideasclaro.com:8002" mmsproxy="216.230.133.66" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="706" mnc="02" carrier="MMS" apn="wap.digicelsv.com" mmsc="http://mmc.digiceljamaica.com/servlets/mms" mmsproxy="172.26.5.12" mmsport="8080" type="mms"></apn>
-      <apn mcc="706" mnc="2" carrier="El Salvador:Digicel:Mms" apn="wap.digicelsv.com" mmsc="http://172.26.5.132/servlets/mms" mmsproxy="172.26.5.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="706" mnc="2" carrier="MMS" apn="wap.digicelsv.com" mmsc="http://mmc.digiceljamaica.com/servlets/mms" mmsproxy="172.26.5.12" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="706" mnc="03" carrier="MMS Tigo" apn="mms.tigo.sv" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms"></apn>
-      <apn mcc="706" mnc="3" carrier="El Salvador:Tigo:Mms" apn="mms.tigo.sv" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms" authtype="1"></apn>
-      <apn mcc="706" mnc="3" carrier="MMS Tigo" apn="mms.tigo.sv" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms" authtype="0"></apn>
-      <apn mcc="706" mnc="04" carrier="Movistar MMS" apn="mms.movistar.sv" mmsc="http://mms.movistar.sv" mmsproxy="10.12.20.1" mmsport="80" type="mms" user="movistarsv" password="movistarsv" authtype="1"></apn>
-      <apn mcc="706" mnc="4" carrier="El Salvador:Movistar:MMS" apn="mms.movistar.sv" mmsc="http://mms.movistar.sv" mmsproxy="10.12.20.1" mmsport="80" type="mms" user="movistarsv" password="movistarsv" authtype="1"></apn>
-      <apn mcc="706" mnc="4" carrier="Movistar MMS" apn="mms.movistar.sv" mmsc="http://mms.movistar.sv" mmsproxy="10.12.20.1" mmsport="80" type="mms" user="movistarsv" password="movistarsv" authtype="1"></apn>
-      <apn mcc="706" mnc="040" carrier="Movistar MMS" apn="mms.movistar.sv" mmsc="http://mms.movistar.sv" mmsproxy="10.12.20.1" mmsport="80" type="mms" user="movistarsv" password="movistarsv" authtype="1"></apn>
-      <apn mcc="708" mnc="00" carrier="MMS Claro" apn="mms.ideasclaro" mmsc="http://10.6.32.27/servlets/mms" mmsproxy="10.6.32.2" mmsport="8080" type="mms"></apn>
-      <apn mcc="708" mnc="001" carrier="MMS Claro" apn="mms.ideasclaro" mmsc="http://10.6.32.27/servlets/mms" mmsproxy="10.6.32.2" mmsport="8080" type="mms"></apn>
-      <apn mcc="708" mnc="1" carrier="Honduras:Claro:MMS" apn="mms.megatel.hn" mmsc="http://10.6.32.27/servlets/mms" mmsproxy="10.6.32.2" mmsport="8080" type="mms" user="mmsmegatel" password="mmsmegatel" authtype="1"></apn>
-      <apn mcc="708" mnc="1" carrier="MMS Claro" apn="mms.ideasclaro" mmsc="http://10.6.32.27/servlets/mms" mmsproxy="10.6.32.2" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="708" mnc="02" carrier="MMS TIGO" apn="mms.tigo.hn" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms"></apn>
-      <apn mcc="708" mnc="2" carrier="Honduras:Tigo:Mms" apn="mms.tigo.hn" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms" authtype="1"></apn>
-      <apn mcc="708" mnc="2" carrier="MMS TIGO" apn="mms.tigo.hn" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms" authtype="0"></apn>
-      <apn mcc="708" mnc="04" carrier="Honduras:Digicel:Mms" apn="wap.digicelhn.com" mmsc="http://mms.digicelsv.com/servlets/mms" mmsproxy="172.26.5.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="708" mnc="04" carrier="Honduras:Digicel:Modem" apn="wap.digicelhn.com" mmsc="http://www.digicelive.com" type="dun" authtype="1" proxy="172.26.5.12" port="8080"></apn>
-      <apn mcc="708" mnc="4" carrier="Honduras:Digicel:Mms" apn="wap.digicelhn.com" mmsc="http://mms.digicelsv.com/servlets/mms" mmsproxy="172.26.5.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="708" mnc="4" carrier="Honduras:Digicel:Modem" apn="wap.digicelhn.com" mmsc="http://www.digicelive.com" type="dun" authtype="1" proxy="172.26.5.12" port="8080"></apn>
-      <apn mcc="708" mnc="020" carrier="MMS TIGO" apn="mms.tigo.hn" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms"></apn>
-      <apn mcc="708" mnc="20" carrier="Honduras:Tigo: Mms" apn="mms.tigo.hn" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms" authtype="1"></apn>
-      <apn mcc="708" mnc="20" carrier="MMS TIGO" apn="mms.tigo.hn" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms" authtype="0"></apn>
-      <apn mcc="708" mnc="040" carrier="Honduras:Digicel:Mms:2" apn="wap.digicelhn.com" mmsc="http://mms.digicelsv.com/servlets/mms" mmsproxy="172.26.5.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="708" mnc="40" carrier="Honduras:Digicel:Mms:2" apn="wap.digicelhn.com" mmsc="http://mms.digicelsv.com/servlets/mms" mmsproxy="172.26.5.12" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="710" mnc="21" carrier="Enitel MMS" apn="mms.indeasalo.ni" mmsc="http://10.6.32.27/servlets/mms" mmsproxy="10.6.32.2" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="710" mnc="21" carrier="Nicaragua:Enitel:MMS" apn="mms.emovil" mmsc="http://10.6.32.27/servlets/mms" mmsproxy="10.6.32.2" mmsport="8080" type="mms" user="mmsemovil" password="mmsemovil" authtype="1"></apn>
-      <apn mcc="710" mnc="30" carrier="Movistar MMS" apn="mms.movistar.ni" mmsc="http://mms.movistar.ni" mmsproxy="10.12.23.1" mmsport="80" type="mms" user="movistarni" password="movistarni" authtype="1"></apn>
-      <apn mcc="710" mnc="73" carrier="Enitel MMS" apn="mms.indeasalo.ni" mmsc="http://10.6.32.27/servlets/mms" mmsproxy="10.6.32.2" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="710" mnc="73" carrier="Nicaragua:Alo:MMS" apn="mms.ideasalo.ni" mmsc="http://10.6.32.27/servlets/mms" mmsproxy="10.6.32.2" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="710" mnc="300" carrier="Movistar MMS" apn="mms.movistar.ni" mmsc="http://mms.movistar.ni" mmsproxy="10.12.23.1" mmsport="80" type="mms" user="movistarni" password="movistarni" authtype="1"></apn>
-      <apn mcc="710" mnc="300" carrier="Nicaragua:Movistar:MMS" apn="mms.movistar.ni" mmsc="http://mms.movistar.ni" mmsproxy="10.12.23.1" mmsport="80" type="mms" user="movistarni" password="movistarni" authtype="1"></apn>
-      <apn mcc="710" mnc="730" carrier="Enitel MMS" apn="mms.indeasalo.ni" mmsc="http://10.6.32.27/servlets/mms" mmsproxy="10.6.32.2" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="712" mnc="01" carrier="Costar Rica:Kolbi:Modem" apn="kolbi" mmsc="http://mimundokolbi.ice.cr" mmsport="8080" type="dun" authtype="1"></apn>
-      <apn mcc="712" mnc="01" carrier="Kolbi Multimedia" apn="kolbimundo" mmsc="http://mmsice" mmsproxy="10.184.202.24" mmsport="8080" type="mms"></apn>
-      <apn mcc="712" mnc="01" carrier="Kolbi_Multimedia" apn="kolbimundo" mmsc="http://mmsice" mmsproxy="10.184.202.24" mmsport="8080" type="mms"></apn>
-      <apn mcc="712" mnc="1" carrier="Costar Rica:Kolbi:Internet" apn="kolbi" mmsc="http://mimundokolbi.ice.cr" mmsport="8080" type="default" authtype="1"></apn>
-      <apn mcc="712" mnc="1" carrier="Costar Rica:Kolbi:MMS" apn="mmscelular" mmsc="http://mmsice" mmsproxy="172.27.10.4" mmsport="8080" type="mms" authtype="1" port="8080"></apn>
-      <apn mcc="712" mnc="1" carrier="Kolbi_Multimedia" apn="kolbimundo" mmsc="http://mmsice" mmsproxy="10.184.202.24" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="712" mnc="02" carrier="Kolbi Multimedia" apn="kolbimundo" mmsc="http://mmsice" mmsproxy="10.184.202.24" mmsport="8080" type="mms"></apn>
-      <apn mcc="712" mnc="02" carrier="Kolbi_Multimedia" apn="kolbimundo" mmsc="http://mmsice" mmsproxy="10.184.202.24" mmsport="8080" type="mms"></apn>
-      <apn mcc="712" mnc="2" carrier="Kolbi_Multimedia" apn="kolbimundo" mmsc="http://mmsice" mmsproxy="10.184.202.24" mmsport="8080" type="mms"></apn>
-      <apn mcc="712" mnc="03" carrier="MMS CLARO CR" apn="mms.ideasclaro" mmsc="http://mms.ideasclaro.com:8002" mmsproxy="216.230.133.66" mmsport="8080" type="mms"></apn>
-      <apn mcc="712" mnc="3" carrier="Costa Rica:Claro:Internet" apn="internet.ideasclaro" mmsc="http://wap.ideasclaro.com" type="default" authtype="1" port="8080"></apn>
-      <apn mcc="712" mnc="3" carrier="Costa Rica:Claro:MMS" apn="mms.ideasclaro" mmsc="http://mms.ideasclaro.com:8002" mmsproxy="216.230.133.66" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="712" mnc="3" carrier="MMS CLARO CR" apn="mms.ideasclaro" mmsc="http://mms.ideasclaro.com:8002" mmsproxy="216.230.133.66" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="712" mnc="04" carrier="Movistar MMS" apn="mms.movistar.cr" mmsc="http://mms.movistar.cr" mmsproxy="10.221.79.83" mmsport="80" type="mms" user="movistarcr" password="movistarcr" authtype="1"></apn>
-      <apn mcc="712" mnc="4" carrier="Costa Rica:Movistar:Internet" apn="internet.movistar.cr" mmsc="http://www.movistar.co.cr" type="default" user="movistarcr" password="movistarcr" authtype="1"></apn>
-      <apn mcc="712" mnc="4" carrier="Costa Rica:Movistar:MMS" apn="mms.movistar.cr" mmsc="http://mms.movistar.cr" mmsproxy="10.221.79.83" mmsport="80" type="mms" user="movistarcr" password="movistarcr" authtype="1"></apn>
-      <apn mcc="712" mnc="4" carrier="Movistar MMS" apn="mms.movistar.cr" mmsc="http://mms.movistar.cr" mmsproxy="10.221.79.83" mmsport="80" type="mms" user="movistarcr" password="movistarcr" authtype="1"></apn>
-      <apn mcc="712" mnc="019" carrier="MMS Tuyo" apn="tm7mms" mmsc="http://mmsc.tuyomovil.com:1981" mmsproxy="10.186.181.5" mmsport="3128" type="mms"></apn>
-      <apn mcc="712" mnc="19" carrier="MMS Tuyo" apn="tm7mms" mmsc="http://mmsc.tuyomovil.com:1981" mmsproxy="10.186.181.5" mmsport="3128" type="mms"></apn>
-      <apn mcc="712" mnc="190" carrier="MMS Tuyo" apn="tm7mms" mmsc="http://mmsc.tuyomovil.com:1981" mmsproxy="10.186.181.5" mmsport="3128" type="mms"></apn>
-      <apn mcc="714" mnc="01" carrier="MMS" apn="apn02.cwpanama.com.pa" mmsc="http://mms.zonamovil.com.pa" mmsproxy="172.25.3.5" mmsport="8080" type="mms"></apn>
-      <apn mcc="714" mnc="1" carrier="MMS" apn="apn02.cwpanama.com.pa" mmsc="http://mms.zonamovil.com.pa" mmsproxy="172.25.3.5" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="714" mnc="1" carrier="Panama:CW:Internet" apn="apn01.cwpanama.com.pa" mmsc="http://wap.masmovil.com.pa" type="default" authtype="1"></apn>
-      <apn mcc="714" mnc="1" carrier="Panama:CW:MMS" apn="apn02.cwpanama.com.pa" mmsc="http://mms.zonamovil.com.pa" mmsproxy="172.25.3.5" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="714" mnc="02" carrier="Movistar MMS" apn="mms.movistar.pa" mmsc="http://mms.movistar.pa" mmsproxy="10.12.21.1" mmsport="80" type="mms" user="movistarpamms" password="movistarpa" authtype="1"></apn>
-      <apn mcc="714" mnc="2" carrier="Movistar MMS" apn="mms.movistar.pa" mmsc="http://mms.movistar.pa" mmsproxy="10.12.21.1" mmsport="80" type="mms" user="movistarpamms" password="movistarpa" authtype="1"></apn>
-      <apn mcc="714" mnc="03" carrier="MMS Claro" apn="mms.claro.com.pa" mmsc="http://www.claro.com.pa/mms/" mmsproxy="10.240.3.129" mmsport="8799" type="mms" user="CLAROMMS" password="CLAROMMS" authtype="1"></apn>
-      <apn mcc="714" mnc="3" carrier="MMS Claro" apn="mms.claro.com.pa" mmsc="http://www.claro.com.pa/mms/" mmsproxy="10.240.3.129" mmsport="8799" type="mms" user="CLAROMMS" password="CLAROMMS" authtype="1"></apn>
-      <apn mcc="714" mnc="3" carrier="Panama:Claro:MMS" apn="mms.claro.com.pa" mmsc="http://www.claro.com.pa/mms/" mmsproxy="10.240.3.129" mmsport="8799" type="mms" user="CLAROMMS" password="CLAROMMS" authtype="1"></apn>
-      <apn mcc="714" mnc="04" carrier="MMS" apn="wap.digicelpanama.com" mmsc="http://mmc.digicelpanama.com/servlets/mms" mmsproxy="172.27.99.99" mmsport="8080" type="mms"></apn>
-      <apn mcc="714" mnc="4" carrier="MMS" apn="wap.digicelpanama.com" mmsc="http://mmc.digicelpanama.com/servlets/mms" mmsproxy="172.27.99.99" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="714" mnc="4" carrier="Panama:Digicel:Mms" apn="wap.digicelpanama.com" mmsc="http://mmc.digicelpanama.com/servlets/mms" mmsproxy="172.27.99.99" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="714" mnc="020" carrier="Movistar MMS" apn="mms.movistar.pa" mmsc="http://mms.movistar.pa" mmsproxy="10.12.21.1" mmsport="80" type="mms" user="movistarpamms" password="movistarpa" authtype="1"></apn>
-      <apn mcc="714" mnc="20" carrier="Movistar MMS" apn="mms.movistar.pa" mmsc="http://mms.movistar.pa" mmsproxy="10.12.21.1" mmsport="80" type="mms" user="movistarpamms" password="movistarpa" authtype="1"></apn>
-      <apn mcc="714" mnc="20" carrier="Panama:Movistar:MMS" apn="mms.movistar.pa" mmsc="http://mms.movistar.pa" mmsproxy="10.12.21.1" mmsport="80" type="mms" user="movistarpamms" password="movistarpa" authtype="1"></apn>
-      <apn mcc="714" mnc="040" carrier="Panama:Digicel:Mms:2" apn="wap.digicelpanama.com" mmsc="http://mmc.digicelpanama.com/servlets/mms" mmsproxy="172.27.99.99" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="714" mnc="40" carrier="Panama:Digicel:Mms:2" apn="wap.digicelpanama.com" mmsc="http://mmc.digicelpanama.com/servlets/mms" mmsproxy="172.27.99.99" mmsport="9201" type="mms" authtype="1"></apn>
-      <apn mcc="716" mnc="06" carrier="Movistar MMS" apn="mms.movistar.pe" mmsc="http://mmsc.telefonicamovistar.com.pe:8088/mms/" mmsproxy="200.4.196.118" mmsport="8080" type="mms" user="movistar@mms" password="movistar" authtype="1"></apn>
-      <apn mcc="716" mnc="6" carrier="Movistar MMS" apn="mms.movistar.pe" mmsc="http://mmsc.telefonicamovistar.com.pe:8088/mms/" mmsproxy="200.4.196.118" mmsport="8080" type="mms" user="movistar@mms" password="movistar" authtype="1"></apn>
-      <apn mcc="716" mnc="10" carrier="CLARO MMS" apn="mms.claro.pe" mmsc="http://claro/servlets/mms" mmsproxy="192.168.231.30" mmsport="80" type="mms" user="claro" password="claro" authtype="1"></apn>
-      <apn mcc="716" mnc="15" carrier="Bitel - MMS" apn="bitel-mms" mmsc="http://181.176.241.99:8080" mmsproxy="10.121.144.3" mmsport="8000" type="mms" authtype="1" protocol="IP" roaming_protocol="IP"></apn>
-      <apn mcc="716" mnc="17" carrier="Entel MMS" apn="mms.entel.pe" mmsc="http://mms.entel.pe" mmsproxy="10.0.215.74" mmsport="8080" type="mms" authtype="0" protocol="IP"></apn>
-      <apn mcc="716" mnc="17" carrier="Nextel MMS" apn="mms.nextel.com.pe" mmsc="http://mms.nextel.pe" mmsproxy="129.192.129.104" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="722" mnc="01" carrier="Quam_MMS" apn="mms.movil" mmsc="http://mms.quam.com.ar" mmsproxy="200.68.32.239" mmsport="9090" type="mms" user="mms" password="mms" authtype="1" mvno_match_data="CELULAR" mvno_type="spn"></apn>
-      <apn mcc="722" mnc="01" carrier="Quam_MMS" apn="mms.movil" mmsc="http://mms.quam.com.ar" mmsproxy="200.68.32.239" mmsport="9090" type="mms" user="mms" password="mms" authtype="1" mvno_match_data="QUAM" mvno_type="spn"></apn>
-      <apn mcc="722" mnc="07" carrier="Movistar MMS" apn="mms.gprs.unifon.com.ar" mmsc="http://mms.movistar.com.ar" mmsproxy="200.68.32.239" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="722" mnc="7" carrier="Argentina:Movistar:MMS" apn="mms.gprs.unifon.com.ar" mmsc="http://mms.movistar.com.ar" mmsproxy="200.68.32.239" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="722" mnc="31" carrier="Claro AR" apn="igprs.claro.com.ar" mmsc="http://mms.claro.com.ar" type="default,supl,dun,mms"></apn>
-      <apn mcc="722" mnc="31" carrier="Claro AR" apn="igprs.claro.com.ar" mmsc="http://mms.claro.com.ar" type="default,supl,mms"></apn>
-      <apn mcc="722" mnc="34" carrier="Argentina:Personal:MMS" apn="mms" mmsc="http://mms.personal.com" mmsproxy="172.25.7.31" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="722" mnc="34" carrier="Personal MMS" apn="mms" mmsc="http://mms.personal.com" mmsproxy="172.25.7.31" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="722" mnc="36" carrier="Argentina:Nuestro:MMS" apn="mms.nuestro.com.ar" mmsc="http://mms.nuestro.com.ar" mmsproxy="172.16.0.20" mmsport="8080" type="mms" user="mms" authtype="0"></apn>
-      <apn mcc="722" mnc="310" carrier="Argentina:Claro:Internet Claro AR" apn="igprs.claro.com.ar" mmsc="http://mms.claro.com.ar" type="default,mms" authtype="0"></apn>
-      <apn mcc="722" mnc="310" carrier="Claro AR" apn="igprs.claro.com.ar" mmsc="http://mms.claro.com.ar" type="default,supl,dun,mms"></apn>
-      <apn mcc="722" mnc="310" carrier="Claro AR" apn="igprs.claro.com.ar" mmsc="http://mms.claro.com.ar" type="default,supl,dun,mms" authtype="0"></apn>
-      <apn mcc="722" mnc="310" carrier="Claro AR" apn="igprs.claro.com.ar" mmsc="http://mms.claro.com.ar" type="default,supl,mms"></apn>
-      <apn mcc="722" mnc="340" carrier="Argentina:Personal :MMS" apn="mms" mmsc="http://mms.personal.com" mmsproxy="172.25.7.31" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="722" mnc="341" carrier="Argentina:Personal: MMS" apn="mms" mmsc="http://mms.personal.com" mmsproxy="172.25.7.31" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="722" mnc="341" carrier="Personal MMS" apn="mms" mmsc="http://mms.personal.com" mmsproxy="172.25.7.31" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="724" mnc="01" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="02" carrier="TIM Connect" apn="timbrasil.br" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="default,supl,mms" user="tim" password="tim" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="2" carrier="TIM CONNECT" apn="timbrasil.br" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="default,dun,mms" user="tim" password="tim" authtype="1"></apn>
-      <apn mcc="724" mnc="2" carrier="TIM Connect" apn="timbrasil.br" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="default,supl,mms" user="tim" password="tim" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="03" carrier="TIM Connect" apn="timbrasil.br" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="default,supl,mms" user="tim" password="tim" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="3" carrier="TIM CONNECT" apn="timbrasil.br" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="default,dun,mms" user="tim" password="tim" authtype="1"></apn>
-      <apn mcc="724" mnc="3" carrier="TIM Connect" apn="timbrasil.br" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="default,supl,mms" user="tim" password="tim" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="04" carrier="TIM Connect" apn="timbrasil.br" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="default,supl,mms" user="tim" password="tim" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="4" carrier="TIM CONNECT" apn="timbrasil.br" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="default,dun,mms" user="tim" password="tim" authtype="1"></apn>
-      <apn mcc="724" mnc="4" carrier="TIM Connect" apn="timbrasil.br" mmsc="http://mms.tim.br" mmsproxy="200.179.66.242" mmsport="8080" type="default,supl,mms" user="tim" password="tim" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="05" carrier="Claro Foto" apn="mms.claro.com.br" mmsc="http://mms.claro.com.br" mmsproxy="200.169.126.10" mmsport="8799" type="mms" user="claro" password="claro" authtype="1"></apn>
-      <apn mcc="724" mnc="5" carrier="Claro Foto" apn="mms.claro.com.br" mmsc="http://mms.claro.com.br" mmsproxy="200.169.126.10" mmsport="8799" type="mms" user="claro" password="claro" authtype="1"></apn>
-      <apn mcc="724" mnc="06" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="6" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="6" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="07" carrier="SCTL MMS" apn="mms.sercomtel.com.br" mmsc="http://mms.claro.com.br" mmsproxy="200.169.126.10" mmsport="8799" type="mms" user="sercomtel" password="sercomtel"></apn>
-      <apn mcc="724" mnc="10" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="10" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="11" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="11" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="015" carrier="Sercomtel" apn="mms.sercomtel.com.br" mmsc="http://mms.claro.com.br" mmsproxy="200.169.126.10" mmsport="8799" type="mms" authtype="1"></apn>
-      <apn mcc="724" mnc="15" carrier="Sercomtel:MMS" apn="mms.sercomtel.com.br" mmsc="http://mms.claro.com.br" mmsproxy="200.169.126.10" mmsport="8799" type="mms" user="sercomtel" password="sercomtel" authtype="1"></apn>
-      <apn mcc="724" mnc="16" carrier="MMS GPRS" apn="mmsgprs.oi.com.br" mmsc="http://200.222.42.204:8002" mmsproxy="192.168.10.50" mmsport="3128" type="mms" user="oimms" password="oioioi" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="16" carrier="Oi:MMS:3" apn="mmsgprs.oi.com.br" mmsc="http://200.222.42.204:8002" mmsproxy="192.168.10.50" mmsport="3128" type="mms" user="oimms" password="oioioi" authtype="1" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="19" carrier="MMS Telemig" apn="mmsgprs.telemigcelular.com.br" mmsc="http://mms.telemigcelular.com.br" mmsproxy="200.192.230.142" mmsport="8080" type="mms" user="celular" password="celular"></apn>
-      <apn mcc="724" mnc="19" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="23" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="23" carrier="Vivo MMS" apn="mms.vivo.com.br" mmsc="http://termnat.vivomms.com.br:8088/mms" mmsproxy="200.142.130.104" mmsport="80" type="mms" user="vivo" password="vivo" authtype="1" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="24" carrier="Oi:MMS:2" apn="mmsgprs.oi.com.br" mmsc="http://200.222.42.204:8002" mmsproxy="192.168.10.50" mmsport="3128" type="mms" user="oimms" password="oioioi" authtype="1" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="31" carrier="MMS GPRS" apn="mmsgprs.oi.com.br" mmsc="http://200.222.42.204:8002" mmsproxy="192.168.10.50" mmsport="3128" type="mms" user="oimms" password="oioioi" authtype="1" protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="31" carrier="Oi:MMS:1" apn="mmsgprs.oi.com.br" mmsc="http://200.222.42.204:8002" mmsproxy="192.168.10.50" mmsport="3128" type="mms" user="oimms" password="oioioi" authtype="1" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="724" mnc="032" carrier="CTBC" apn="mms.ctbc.br" mmsc="http://mms.ctbccelular.com.br/was" mmsproxy="172.29.7.70" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="724" mnc="32" carrier="CTBC:MMS:1" apn="mms.ctbc.br" mmsc="http://mms.ctbccelular.com.br/was" mmsproxy="172.29.7.70" mmsport="8080" type="mms" user="CTBC" password="1212" authtype="1"></apn>
-      <apn mcc="724" mnc="033" carrier="CTBC" apn="mms.ctbc.br" mmsc="http://mms.ctbccelular.com.br/was" mmsproxy="172.29.7.70" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="724" mnc="33" carrier="CTBC:MMS:2" apn="mms.ctbc.br" mmsc="http://mms.ctbccelular.com.br/was" mmsproxy="172.29.7.70" mmsport="8080" type="mms" user="CTBC" password="1212" authtype="1"></apn>
-      <apn mcc="724" mnc="034" carrier="CTBC" apn="mms.ctbc.br" mmsc="http://mms.ctbccelular.com.br/was" mmsproxy="172.29.7.70" mmsport="8080" type="default,supl,mms" authtype="1"></apn>
-      <apn mcc="724" mnc="34" carrier="CTBC:MMS:3" apn="mms.ctbc.br" mmsc="http://mms.ctbccelular.com.br/was" mmsproxy="172.29.7.70" mmsport="8080" type="mms" user="CTBC" password="1212" authtype="1"></apn>
-      <apn mcc="724" mnc="039" carrier="Nextel" apn="mms.nextel3g.net.br" mmsc="http://3gmms.nextel3g.net.br" mmsproxy="129.192.129.104" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="724" mnc="39" carrier="Nextel MMS" apn="mms.nextel3g.net.br" mmsc="http://3gmms.nextel3g.net.br" mmsproxy="129.192.129.104" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="724" mnc="39" carrier="Nextel MMS" apn="mms.nextel3g.net.br" mmsc="http://3gmms.nextel3g.net.br" mmsproxy="129.192.129.104" mmsport="8080" type="mms" authtype="0" protocol="IPV4V6" roaming_protocol="IPV4V6"></apn>
-      <apn mcc="730" mnc="01" carrier="MMS Entel" apn="mms.entelpcs.cl" mmsc="http://mmsc.entelpcs.cl" mmsproxy="10.99.0.10" mmsport="8080" type="mms" user="entelpcs" password="entelpcs" authtype="1"></apn>
-      <apn mcc="730" mnc="1" carrier="Chile:Entel:MMS Entel PCS:1" apn="mms.entelpcs.cl" mmsc="http://mmsc.entelpcs.cl" mmsproxy="10.99.0.10" mmsport="8080" type="mms" user="entelpcs" password="entelpcs" authtype="1"></apn>
-      <apn mcc="730" mnc="1" carrier="MMS Entel" apn="mms.entelpcs.cl" mmsc="http://mmsc.entelpcs.cl" mmsproxy="10.99.0.10" mmsport="8080" type="mms" user="entelpcs" password="entelpcs" authtype="1"></apn>
-      <apn mcc="730" mnc="02" carrier="Movistar MMS" apn="mms.tmovil.cl" mmsc="http://mms.movistar.cl" mmsproxy="172.17.8.10" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="730" mnc="2" carrier="Movistar MMS" apn="mms.tmovil.cl" mmsc="http://mms.movistar.cl" mmsproxy="172.17.8.10" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="730" mnc="03" carrier="MMS Claro" apn="mms.clarochile.cl" mmsc="http://mms.clarochile.cl" mmsproxy="172.23.200.200" mmsport="8080" type="mms" user="clarochile" password="clarochile" authtype="1"></apn>
-      <apn mcc="730" mnc="3" carrier="Chile:Claro:MMS" apn="mms.clarochile.cl" mmsc="http://mms.clarochile.cl" mmsproxy="172.23.200.200" mmsport="8080" type="mms" user="clarochile" password="clarochile" authtype="1"></apn>
-      <apn mcc="730" mnc="3" carrier="MMS Claro" apn="mms.clarochile.cl" mmsc="http://mms.clarochile.cl" mmsproxy="172.23.200.200" mmsport="8080" type="mms" user="clarochile" password="clarochile" authtype="1"></apn>
-      <apn mcc="730" mnc="08" carrier="MMS" apn="mms.vtr.com" mmsc="http://192.168.94.162:19090/was" mmsproxy="192.168.94.210" mmsport="9028" type="mms" user="mms" authtype="0"></apn>
-      <apn mcc="730" mnc="8" carrier="MMS" apn="mms.vtr.com" mmsc="http://192.168.94.162:19090/was" mmsproxy="192.168.94.210" mmsport="9028" type="mms" user="mms" authtype="0"></apn>
-      <apn mcc="730" mnc="09" carrier="MMS Nextel" apn="mms.nextelmovil.cl" mmsc="http://3gmms.nextelmovil.cl" mmsproxy="129.192.129.104" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="730" mnc="9" carrier="Nextel MMS" apn="mms.nextelmovil.cl" mmsc="http://3gmms.nextelmovil.cl" mmsproxy="129.192.129.104" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="730" mnc="10" carrier="Chile:Entel:MMS Entel PCS:2" apn="mms.entelpcs.cl" mmsc="http://mmsc.entelpcs.cl" mmsproxy="10.99.0.10" mmsport="8080" type="mms" user="entelpcs" password="entelpcs" authtype="1"></apn>
-      <apn mcc="730" mnc="10" carrier="MMS Entel" apn="mms.entelpcs.cl" mmsc="http://mmsc.entelpcs.cl" mmsproxy="10.99.0.10" mmsport="8080" type="mms" user="entelpcs" password="entelpcs" authtype="1"></apn>
-      <apn mcc="730" mnc="10" carrier="MMS Entel PCS" apn="mms.entelpcs.cl" mmsc="http://mmsc.entelpcs.cl" mmsproxy="10.99.0.10" mmsport="8080" type="mms" user="entelpcs" password="entelpcs" authtype="1"></apn>
-      <apn mcc="732" mnc="12" carrier="Movistar MMS" apn="mms.movistar.com.co" mmsc="http://mms.movistar.com.co" mmsproxy="192.168.222.7" mmsport="9001" type="mms" user="movistar" password="movistar" authtype="1"></apn>
-      <apn mcc="732" mnc="101" carrier="Colombia:Comcel:MMS" apn="mms.comcel.com.co" mmsc="http://www.comcel.com.co/mms/" mmsproxy="198.228.90.225" mmsport="8799" type="mms" user="COMCELMMS" password="COMCELMMS" authtype="1"></apn>
-      <apn mcc="732" mnc="101" carrier="MMS Comcel 3GSM" apn="mms.comcel.com.co" mmsc="http://www.comcel.com.co/mms/" mmsproxy="198.228.90.225" mmsport="8799" type="mms" user="COMCELMMS" password="COMCELMMS" authtype="1"></apn>
-      <apn mcc="732" mnc="103" carrier="TIGO Multimedia" apn="mms.colombiamovil.com.co" mmsc="http://mms.ola.com.co" mmsproxy="190.102.206.48" mmsport="8080" type="mms" user="mms-cm1900" password="mms-cm1900" authtype="1"></apn>
-      <apn mcc="732" mnc="111" carrier="TIGO Multimedia" apn="mms.colombiamovil.com.co" mmsc="http://mms.ola.com.co" mmsproxy="190.102.206.48" mmsport="8080" type="mms" user="mms-cm1900" password="mms-cm1900" authtype="1"></apn>
-      <apn mcc="732" mnc="123" carrier="Movistar MMS" apn="mms.movistar.com.co" mmsc="http://mms.movistar.com.co" mmsproxy="192.168.222.7" mmsport="9001" type="mms" user="movistar" password="movistar" authtype="1"></apn>
-      <apn mcc="734" mnc="01" carrier="MMS" apn="expresate.digitel.ve" mmsc="http://mms.412.com.ve/servlets/mms" mmsproxy="10.99.0.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="734" mnc="1" carrier="MMS" apn="expresate.digitel.ve" mmsc="http://mms.412.com.ve/servlets/mms" mmsproxy="10.99.0.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="734" mnc="1" carrier="Venezuela:Digitel:MMS:1" apn="expresate.digitel.ve" mmsc="http://mms.412.com.ve/servlets/mms" mmsproxy="10.99.0.10" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="734" mnc="02" carrier="MMS" apn="expresate.digitel.ve" mmsc="http://mms.412.com.ve/servlets/mms" mmsproxy="10.99.0.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="734" mnc="2" carrier="MMS" apn="expresate.digitel.ve" mmsc="http://mms.412.com.ve/servlets/mms" mmsproxy="10.99.0.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="734" mnc="2" carrier="Venezuela:Digitel:MMS:2" apn="expresate.digitel.ve" mmsc="http://mms.412.com.ve/servlets/mms" mmsproxy="10.99.0.10" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="734" mnc="03" carrier="MMS" apn="expresate.digitel.ve" mmsc="http://mms.412.com.ve/servlets/mms" mmsproxy="10.99.0.10" mmsport="8080" type="mms"></apn>
-      <apn mcc="734" mnc="3" carrier="MMS" apn="expresate.digitel.ve" mmsc="http://mms.412.com.ve/servlets/mms" mmsproxy="10.99.0.10" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="734" mnc="3" carrier="Venezuela:Digitel:MMS:3" apn="expresate.digitel.ve" mmsc="http://mms.412.com.ve/servlets/mms" mmsproxy="10.99.0.10" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="734" mnc="04" carrier="Movistar MMS" apn="mms.movistar.ve" mmsc="http://mms.movistar.com.ve:8088/mms" mmsproxy="200.35.64.73" mmsport="9001" type="mms"></apn>
-      <apn mcc="734" mnc="4" carrier="Movistar MMS" apn="mms.movistar.ve" mmsc="http://mms.movistar.com.ve:8088/mms" mmsproxy="200.35.64.73" mmsport="9001" type="mms" authtype="0"></apn>
-      <apn mcc="734" mnc="4" carrier="Venezuela:Movistar:MMS" apn="mms.movistar.ve" mmsc="http://mms.movistar.com.ve:8088/mms" mmsproxy="200.35.64.73" mmsport="9001" type="mms" authtype="1"></apn>
-      <apn mcc="734" mnc="06" carrier="MMS" apn="mm.movilnet.com.ve" mmsc="http://mms2.movilnet.com.ve/servlets/mms" mmsproxy="192.168.16.12" mmsport="8080" type="mms"></apn>
-      <apn mcc="734" mnc="6" carrier="MMS" apn="mm.movilnet.com.ve" mmsc="http://mms2.movilnet.com.ve/servlets/mms" mmsproxy="192.168.16.12" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="734" mnc="6" carrier="Venezuela:Movilnet:MMS" apn="mm.movilnet.com.ve" mmsc="http://mms2.movilnet.com.ve/servlets/mms" mmsproxy="192.168.16.12" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="736" mnc="01" carrier="VIVAMMS" apn="mms.nuevatel.com" mmsc="http://mmsgw.nuevatel.com:1981" mmsproxy="192.168.101.4" mmsport="3128" type="mms" authtype="1"></apn>
-      <apn mcc="736" mnc="1" carrier="VIVAMMS" apn="mms.nuevatel.com" mmsc="http://mmsgw.nuevatel.com:1981" mmsproxy="192.168.101.4" mmsport="3128" type="mms" authtype="1"></apn>
-      <apn mcc="736" mnc="02" carrier="ENTEL MMS GPRS" apn="mms.movil.com.bo" mmsc="http://mms.movil.com.bo/servlets/mms" mmsproxy="172.27.7.10" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="736" mnc="03" carrier="MMSTIGO" apn="mms.tigo.bo" mmsc="http://mms" mmsproxy="172.25.100.8" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="738" mnc="01" carrier="Guyana:Digicel:Mms" apn="wap.digicelgy.com" mmsc="http://mmc.digicelgy.com/servlets/mms" mmsproxy="172.20.6.12" mmsport="9201" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="738" mnc="01" carrier="Guyana:Digicel:Modem" apn="wap.digicelgy.com" mmsc="http://www.digicelive.com" type="dun" user="wap" password="wap" authtype="1" proxy="172.20.6.12" port="8080"></apn>
-      <apn mcc="738" mnc="1" carrier="Guyana:Digicel:Mms" apn="wap.digicelgy.com" mmsc="http://mmc.digicelgy.com/servlets/mms" mmsproxy="172.20.6.12" mmsport="9201" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="740" mnc="0" carrier="Ecuador:Movistar:MMS" apn="mms.movistar.com.ec" mmsc="http://mms.movistar.com.ec:8088/mms/" mmsproxy="10.3.5.50" mmsport="9001" type="mms" user="movistar" password="movistar" authtype="1"></apn>
-      <apn mcc="740" mnc="00" carrier="Movistar MMS" apn="mms.movistar.com.ec" mmsc="http://mms.movistar.com.ec:8088/mms/" mmsproxy="10.3.5.50" mmsport="9001" type="mms" user="movistar" password="movistar" authtype="1"></apn>
-      <apn mcc="740" mnc="01" carrier="MMS Claro" apn="mms.claro.com.ec" mmsc="http://iesmms.porta.com.ec/" mmsproxy="216.250.208.94" mmsport="8799" type="mms" user="portamms" password="portamms2003" authtype="1"></apn>
-      <apn mcc="740" mnc="1" carrier="Ecuador:Claro:MMS" apn="mms.claro.com.ec" mmsc="http://iesmms.porta.com.ec" mmsproxy="216.250.208.94" mmsport="8799" type="mms" user="portamms" password="portamms2003" authtype="1"></apn>
-      <apn mcc="740" mnc="1" carrier="MMS Claro" apn="mms.claro.com.ec" mmsc="http://iesmms.porta.com.ec/" mmsproxy="216.250.208.94" mmsport="8799" type="mms" user="portamms" password="portamms2003" authtype="1"></apn>
-      <apn mcc="740" mnc="02" carrier="CNT MMS" apn="mms.alegro.net.ec" mmsc="http://mms.alegro.net.ec/mms/" mmsproxy="10.4.85.3" mmsport="8080" type="mms"></apn>
-      <apn mcc="740" mnc="2" carrier="CNT MMS" apn="mms.alegro.net.ec" mmsc="http://mms.alegro.net.ec/mms/" mmsproxy="10.4.85.3" mmsport="8080" type="mms" authtype="0"></apn>
-      <apn mcc="740" mnc="2" carrier="Ecuador:Alegro:Internet" apn="wap.alegro.net.ec" mmsc="www.alegro.com.ec/alegrowap/default.aspx" mmsproxy="10.4.85.3" type="default" authtype="1" port="8080"></apn>
-      <apn mcc="740" mnc="2" carrier="Ecuador:Alegro:Mms" apn="mms.alegro.net.ec" mmsc="http://mms.alegro.com.ec" mmsproxy="10.4.85.3" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="740" mnc="010" carrier="MMS Claro" apn="mms.claro.com.ec" mmsc="http://iesmms.porta.com.ec/" mmsproxy="216.250.208.94" mmsport="8799" type="mms" user="portamms" password="portamms2003" authtype="1"></apn>
-      <apn mcc="744" mnc="01" carrier="Paraguay:Voxx:Modem" apn="vox.wap" mmsc="http://www.vox.com.py/" mmsproxy="172.24.97.29" type="dun" authtype="1" port="8080"></apn>
-      <apn mcc="744" mnc="01" carrier="VOX MMS" apn="vox.mms" mmsc="http://mms.vox.com.py/mmsc" mmsproxy="172.24.97.29" mmsport="8080" type="mms" user="vox" password="vox" authtype="1"></apn>
-      <apn mcc="744" mnc="1" carrier="Paraguay:Voxx:Mms" apn="vox.mms" mmsc="http://srvvirtual.vox.com.py/mmsc" mmsproxy="172.24.97.29" mmsport="8080" type="mms" authtype="1"></apn>
-      <apn mcc="744" mnc="1" carrier="VOX MMS" apn="vox.mms" mmsc="http://mms.vox.com.py/mmsc" mmsproxy="172.24.97.29" mmsport="8080" type="mms" user="vox" password="vox" authtype="1"></apn>
-      <apn mcc="744" mnc="02" carrier="MMS GPRS PY" apn="mms.ctimovil.com.py" mmsc="http://mms.ctimovil.com.py" mmsproxy="170.51.255.240" mmsport="8080" type="mms" user="ctimms" password="ctimms999" authtype="1"></apn>
-      <apn mcc="744" mnc="2" carrier="Paraguay:Claro:Internet Claro PY" apn="igprs.claro.com.py" mmsc="http://mms.claro.com.py" type="default,mms" authtype="0"></apn>
-      <apn mcc="744" mnc="04" carrier="MMS Tigo" apn="mms.tigo.py" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms" user="tigo" password="tigo" authtype="1"></apn>
-      <apn mcc="744" mnc="4" carrier="Paraguay:Tigo:MMS TIGO" apn="mms.tigo.py" mmsc="http://mms" mmsproxy="10.16.17.12" mmsport="8888" type="mms" user="tigo" password="tigo" authtype="1"></apn>
-      <apn mcc="744" mnc="05" carrier="Personal MMS Py" apn="mms" mmsc="http://mms" mmsproxy="172.16.192.7" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="744" mnc="5" carrier="Paraguay:Personal:MMS Personal" apn="mms" mmsc="http://mms" mmsproxy="172.16.192.7" mmsport="8080" type="mms" user="mms" password="mms" authtype="0"></apn>
-      <apn mcc="744" mnc="5" carrier="Personal MMS Py" apn="mms" mmsc="http://mms" mmsproxy="172.16.192.7" mmsport="8080" type="mms" user="mms" password="mms" authtype="1"></apn>
-      <apn mcc="746" mnc="03" carrier="Suriname:Digicel:Mms" apn="wap.digicelsr.com" mmsc="http://mmc.digicelsr.com/servlets/mms" mmsproxy="172.20.6.12" mmsport="9201" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="746" mnc="03" carrier="Suriname:Digicel:Modem" apn="wap.digicelsr.com" mmsc="http://wapdigicel.com" type="dun" user="wap" password="wap" authtype="1" proxy="172.20.6.12" port="8080"></apn>
-      <apn mcc="746" mnc="3" carrier="Suriname:Digicel:Mms" apn="wap.digicelsr.com" mmsc="http://mmc.digicelsr.com/servlets/mms" mmsproxy="172.20.6.12" mmsport="9201" type="mms" user="wap" password="wap" authtype="1"></apn>
-      <apn mcc="746" mnc="3" carrier="Suriname:Digicel:Modem" apn="wap.digicelsr.com" mmsc="http://wapdigicel.com" type="dun" user="wap" password="wap" authtype="1" proxy="172.20.6.12" port="8080"></apn>
-      <apn mcc="748" mnc="01" carrier="mmsANCEL" apn="mms" mmsc="http://mmsc.mms.ancelutil.com.uy" mmsproxy="200.40.246.2" mmsport="3128" type="mms" authtype="1"></apn>
-      <apn mcc="748" mnc="1" carrier="Uruguay:Ancel:MMS" apn="mms" mmsc="http://mmsc.mms.ancelutil.com.uy" mmsproxy="200.40.246.2" mmsport="3128" type="mms" authtype="0"></apn>
-      <apn mcc="748" mnc="1" carrier="mmsANCEL" apn="mms" mmsc="http://mmsc.mms.ancelutil.com.uy" mmsproxy="200.40.246.2" mmsport="3128" type="mms" authtype="1"></apn>
-      <apn mcc="748" mnc="07" carrier="Movistar MMS" apn="apnmms.movistar.com.uy" mmsc="http://mmsc.movistar.com.uy" mmsproxy="10.0.2.29" mmsport="8080" type="mms" user="mmsuy" password="mmsuy" authtype="1"></apn>
-      <apn mcc="748" mnc="7" carrier="Uruguay:Movistar:MMS" apn="apnmms.movistar.com.uy" mmsc="http://mmsc.movistar.com.uy" mmsproxy="10.0.2.29" mmsport="8080" type="mms" user="mmsuy" password="mmsuy" authtype="0"></apn>
-      <apn mcc="748" mnc="10" carrier="MMS GPRS UY" apn="mms.ctimovil.com.uy" mmsc="http://mms.ctimovil.com.uy" mmsproxy="170.51.255.240" mmsport="8080" type="mms" user="ctimms" password="ctimms999" authtype="1"></apn>
-      <apn mcc="748" mnc="10" carrier="Uruguay:Claro:Internet Claro UY" apn="igprs.claro.com.uy" mmsc="http://mms.claro.com.uy" type="default,mms" authtype="0"></apn>
-  </apns>
diff --git a/res/xml/mms_config.xml b/res/xml/mms_config.xml
deleted file mode 100644
index e5a9338..0000000
--- a/res/xml/mms_config.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<!-- Version History
-        version 1 - initial version.
-        version 2 - added recipientLimit.
-        version 3 - added min/max recycler values.
-        version 4 - added sms to mms text threshold.
--->
-
-<mms_config version="4">
-    <!-- Flag indicating whether MMS should be enabled -->
-    <bool name="enabledMMS">true</bool>
-
-    <!-- Maximum message size in bytes for a MMS message -->
-    <int name="maxMessageSize">307200</int>
-
-    <!-- Maximum height for an attached image -->
-    <int name="maxImageHeight">480</int>
-
-    <!-- Maximum width for an attached image -->
-    <int name="maxImageWidth">640</int>
-
-    <!-- Maximum number of recipients allowed per message. Use a value of -1
-         to indicate no limit. -->
-    <int name="recipientLimit">-1</int>
-
-    <!-- If true, The text message over 160 characters will be sent in multi part.
-         If false, The text message over 160 characters will be sent
-         via multi media message. -->
-    <bool name="enableMultipartSMS">true</bool>
-
-    <!-- If enableMultipartSMS is true and smsToMmsTextThreshold > 1, then multi-part SMS messages
-         will be converted into a single mms message. For example, if the mms_config.xml file
-         specifies <int name="smsToMmsTextThreshold">7</int>, then on the 8th sms segment, the
-         message will be converted to an mms. -->
-    <int name="smsToMmsTextThreshold">-1</int>
-
-    <!-- Maximum length for message text. Use a value of -1
-         to indicate default value -->
-    <int name="maxMessageTextSize">-1</int>
-
-    <!-- UAProf parameter tag name -->
-    <!-- this is default to "x-wap-profile". Override if necessary. Optional -->
-    <!--
-    <string name="uaProfTagName">x-wap-profile</string>
-    -->
-
-    <!-- Reference for additional http parameters used in MMS http request.
-         Parameters are seperated by '|'. Optional.
-    -->
-    <!--
-    <string name="httpParams">
-        x-up-calling-line-id: ##LINE1##|x-carrier-magic: http://magic.google.com
-    </string>
-    -->
-
-    <!-- Suffix to the NAI header (encoded together with base64) -->
-    <!--
-    <string name="naiSuffix"></string>
-    -->
-</mms_config>
diff --git a/res/xml/preferences_application.xml b/res/xml/preferences_application.xml
deleted file mode 100644
index 7a18d09..0000000
--- a/res/xml/preferences_application.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<!-- Preference screen definition for Bugle's application-wide settings -->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <!--  KLP+ only -->
-    <PreferenceScreen
-        android:key="@string/sms_disabled_pref_key"
-        android:title="@string/sms_disabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.provider.Telephony.ACTION_CHANGE_DEFAULT">
-            <extra android:name="package" android:value="com.android.messaging" />
-        </intent>
-    </PreferenceScreen>
-    <PreferenceScreen
-        android:key="@string/sms_enabled_pref_key"
-        android:title="@string/sms_enabled_pref_title"
-        android:persistent="false">
-        <intent
-            android:action="android.settings.WIRELESS_SETTINGS">
-        </intent>
-    </PreferenceScreen>
-
-    <CheckBoxPreference
-        android:key="@string/send_sound_pref_key"
-        android:title="@string/send_sound_pref_title"
-        android:defaultValue="@bool/send_sound_pref_default"
-        android:persistent="true" />
-
-    <CheckBoxPreference
-        android:key="@string/notifications_enabled_pref_key"
-        android:title="@string/notifications_enabled_pref_title"
-        android:defaultValue="@bool/notifications_enabled_pref_default"
-        android:persistent="true"
-        android:disableDependentsState="false" />
-
-    <RingtonePreference
-        android:key="@string/notification_sound_pref_key"
-        android:title="@string/notification_sound_pref_title"
-        android:ringtoneType="notification"
-        android:showSilent="true"
-        android:showDefault="true"
-        android:persistent="true"
-        android:defaultValue=""
-        android:dependency="@string/notifications_enabled_pref_key" />
-
-    <CheckBoxPreference
-        android:key="@string/notification_vibration_pref_key"
-        android:title="@string/notification_vibrate_pref_title"
-        android:defaultValue="@bool/notification_vibration_pref_default"
-        android:persistent="true"
-        android:dependency="@string/notifications_enabled_pref_key" />
-
-    <PreferenceScreen
-            android:key="@string/advanced_pref_key"
-            android:title="@string/advanced_settings" />
-
-    <PreferenceCategory
-        android:key="@string/debug_pref_key"
-        android:title="@string/debug_category_pref_title">
-
-        <CheckBoxPreference
-            android:key="@string/dump_sms_pref_key"
-            android:title="@string/dump_sms_pref_title"
-            android:summary="@string/dump_sms_pref_summary"
-            android:defaultValue="@bool/dump_sms_pref_default" />
-
-        <CheckBoxPreference
-            android:key="@string/dump_mms_pref_key"
-            android:title="@string/dump_mms_pref_title"
-            android:summary="@string/dump_mms_pref_summary"
-            android:defaultValue="@bool/dump_mms_pref_default" />
-
-    </PreferenceCategory>
-
-</PreferenceScreen>
diff --git a/res/xml/preferences_per_subscription.xml b/res/xml/preferences_per_subscription.xml
deleted file mode 100644
index 5e00086..0000000
--- a/res/xml/preferences_per_subscription.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-<!-- Preference screen definition for Bugle's subscription-specific settings -->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <PreferenceCategory
-        android:key="@string/mms_messaging_category_pref_key"
-        android:title="@string/mms_messaging_category_pref_title">
-
-        <Preference
-            android:title="@string/group_mms_pref_title"
-            android:key="@string/group_mms_pref_key"/>
-
-        <com.android.messaging.ui.appsettings.PhoneNumberPreference
-            android:key="@string/mms_phone_number_pref_key"
-            android:title="@string/mms_phone_number_pref_title" />
-
-        <CheckBoxPreference
-            android:key="@string/auto_retrieve_mms_pref_key"
-            android:title="@string/auto_retrieve_mms_pref_title"
-            android:summary="@string/auto_retrieve_mms_pref_summary"
-            android:defaultValue="@bool/auto_retrieve_mms_pref_default" />
-
-        <CheckBoxPreference
-            android:key="@string/auto_retrieve_mms_when_roaming_pref_key"
-            android:dependency="@string/auto_retrieve_mms_pref_key"
-            android:title="@string/auto_retrieve_mms_when_roaming_pref_title"
-            android:summary="@string/auto_retrieve_mms_when_roaming_pref_summary"
-            android:defaultValue="@bool/auto_retrieve_mms_when_roaming_pref_default" />
-
-    </PreferenceCategory>
-
-    <PreferenceCategory
-        android:key="@string/advanced_category_pref_key"
-        android:title="@string/advanced_category_pref_title">
-
-        <CheckBoxPreference
-            android:key="@string/delivery_reports_pref_key"
-            android:title="@string/delivery_reports_pref_title"
-            android:summary="@string/delivery_reports_pref_summary"
-            android:defaultValue="@bool/delivery_reports_pref_default" />
-
-        <Preference
-            android:key="@string/wireless_alerts_key"
-            android:title="@string/wireless_alerts_title"/>
-
-        <PreferenceScreen
-            android:key="@string/sms_apns_key"
-            android:title="@string/sms_apns_title" />
-
-    </PreferenceCategory>
-</PreferenceScreen>
diff --git a/res/xml/widget_conversation.xml b/res/xml/widget_conversation.xml
deleted file mode 100644
index d1a573b..0000000
--- a/res/xml/widget_conversation.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
-    android:minResizeWidth="110dp"
-    android:minResizeHeight="110dp"
-    android:minWidth="180dp"
-    android:minHeight="180dp"
-    android:updatePeriodMillis="0"
-    android:initialLayout="@layout/widget_conversation"
-    android:resizeMode="horizontal|vertical"
-    android:widgetCategory="home_screen|keyguard"
-    android:previewImage="@drawable/messenger_widget_conversation_preview"
-    android:configure="com.android.messaging.ui.WidgetPickConversationActivity">
-</appwidget-provider>
diff --git a/res/xml/widget_conversation_list.xml b/res/xml/widget_conversation_list.xml
deleted file mode 100644
index b294acb..0000000
--- a/res/xml/widget_conversation_list.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.
--->
-
-<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
-    android:minResizeWidth="110dp"
-    android:minResizeHeight="110dp"
-    android:minWidth="250dp"
-    android:minHeight="180dp"
-    android:updatePeriodMillis="0"
-    android:initialLayout="@layout/widget_conversation_list"
-    android:resizeMode="horizontal|vertical"
-    android:previewImage="@drawable/messenger_widget_preview"
-    android:widgetCategory="home_screen|keyguard">
-</appwidget-provider>
diff --git a/src/android/support/v7/mms/ApnException.java b/src/android/support/v7/mms/ApnException.java
deleted file mode 100644
index 322260a..0000000
--- a/src/android/support/v7/mms/ApnException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-/**
- * APN exception
- */
-public class ApnException extends Exception {
-
-    public ApnException() {
-        super();
-    }
-
-    public ApnException(String message) {
-        super(message);
-    }
-
-    public ApnException(Throwable cause) {
-        super(cause);
-    }
-
-    public ApnException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}
diff --git a/src/android/support/v7/mms/ApnSettingsLoader.java b/src/android/support/v7/mms/ApnSettingsLoader.java
deleted file mode 100644
index 9ccfc06..0000000
--- a/src/android/support/v7/mms/ApnSettingsLoader.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import java.util.List;
-
-/**
- * Interface for loading APNs for default SMS SIM
- */
-public interface ApnSettingsLoader {
-    /**
-     * Interface to represent the minimal information MMS lib needs from an APN
-     */
-    interface Apn {
-        /**
-         * Get the MMSC URL string
-         *
-         * @return MMSC URL
-         */
-        String getMmsc();
-
-        /**
-         * Get the MMS proxy host address
-         *
-         * @return MMS proxy
-         */
-        String getMmsProxy();
-
-        /**
-         * Get the MMS proxy host port
-         *
-         * @return the port of MMS proxy
-         */
-        int getMmsProxyPort();
-
-        /**
-         * Flag the APN as a successful APN to use
-         */
-        void setSuccess();
-    }
-
-    /**
-     * Get a list possible APN matching the subId and APN name
-     *
-     * @param apnName the APN name
-     * @return a list of possible APNs
-     */
-    List<Apn> get(String apnName);
-}
diff --git a/src/android/support/v7/mms/ApnsXmlParser.java b/src/android/support/v7/mms/ApnsXmlParser.java
deleted file mode 100644
index 2d63136..0000000
--- a/src/android/support/v7/mms/ApnsXmlParser.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.content.ContentValues;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-
-/**
- * Parser for built-in XML resource file for APN list
- */
-class ApnsXmlParser extends MmsXmlResourceParser {
-    interface ApnProcessor {
-        void process(ContentValues apnValues);
-    }
-
-    private static final String TAG_APNS = "apns";
-    private static final String TAG_APN = "apn";
-
-    private final ApnProcessor mApnProcessor;
-
-    private final ContentValues mValues = new ContentValues();
-
-    ApnsXmlParser(final XmlPullParser parser, final ApnProcessor apnProcessor) {
-        super(parser);
-        mApnProcessor = apnProcessor;
-    }
-
-    // Parse one APN
-    @Override
-    protected void parseRecord() throws IOException, XmlPullParserException {
-        if (TAG_APN.equals(mInputParser.getName())) {
-            mValues.clear();
-            // Collect all the attributes
-            for (int i = 0; i < mInputParser.getAttributeCount(); i++) {
-                final String key = mInputParser.getAttributeName(i);
-                if (key != null) {
-                    mValues.put(key, mInputParser.getAttributeValue(i));
-                }
-            }
-            // We are done parsing one APN, call the handler
-            if (mApnProcessor != null) {
-                mApnProcessor.process(mValues);
-            }
-        }
-        // We are at the end tag
-        if (mInputParser.next() != XmlPullParser.END_TAG) {
-            throw new XmlPullParserException("Expecting end tag @" + xmlParserDebugContext());
-        }
-    }
-
-    @Override
-    protected String getRootTag() {
-        return TAG_APNS;
-    }
-}
diff --git a/src/android/support/v7/mms/CarrierConfigValuesLoader.java b/src/android/support/v7/mms/CarrierConfigValuesLoader.java
deleted file mode 100644
index 1cb5226..0000000
--- a/src/android/support/v7/mms/CarrierConfigValuesLoader.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.os.Bundle;
-
-/**
- * Loader for carrier dependent configuration values
- */
-public interface CarrierConfigValuesLoader {
-    /**
-     * Get the carrier config values in a bundle
-     *
-     * @param subId the associated subscription ID for the carrier configuration
-     * @return a bundle of all the values
-     */
-    Bundle get(int subId);
-
-    // Configuration keys and default values
-
-    /** Boolean value: if MMS is enabled */
-    public static final String CONFIG_ENABLED_MMS = "enabledMMS";
-    public static final boolean CONFIG_ENABLED_MMS_DEFAULT = true;
-    /**
-     * Boolean value: if transaction ID should be appended to
-     * the download URL of a single segment WAP push message
-     */
-    public static final String CONFIG_ENABLED_TRANS_ID = "enabledTransID";
-    public static final boolean CONFIG_ENABLED_TRANS_ID_DEFAULT = false;
-    /**
-     * Boolean value: if acknowledge or notify response to a download
-     * should be sent to the WAP push message's download URL
-     */
-    public static final String CONFIG_ENABLED_NOTIFY_WAP_MMSC = "enabledNotifyWapMMSC";
-    public static final boolean CONFIG_ENABLED_NOTIFY_WAP_MMSC_DEFAULT = false;
-    /**
-     * Boolean value: if phone number alias can be used
-     */
-    public static final String CONFIG_ALIAS_ENABLED = "aliasEnabled";
-    public static final boolean CONFIG_ALIAS_ENABLED_DEFAULT = false;
-    /**
-     * Boolean value: if audio is allowed in attachment
-     */
-    public static final String CONFIG_ALLOW_ATTACH_AUDIO = "allowAttachAudio";
-    public static final boolean CONFIG_ALLOW_ATTACH_AUDIO_DEFAULT = true;
-    /**
-     * Boolean value: if true, long sms messages are always sent as multi-part sms
-     * messages, with no checked limit on the number of segments. If false, then
-     * as soon as the user types a message longer than a single segment (i.e. 140 chars),
-     * the message will turn into and be sent as an mms message or separate,
-     * independent SMS messages (dependent on CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES flag).
-     * This feature exists for carriers that don't support multi-part sms.
-     */
-    public static final String CONFIG_ENABLE_MULTIPART_SMS = "enableMultipartSMS";
-    public static final boolean CONFIG_ENABLE_MULTIPART_SMS_DEFAULT = true;
-    /**
-     * Boolean value: if SMS delivery report is supported
-     */
-    public static final String CONFIG_ENABLE_SMS_DELIVERY_REPORTS = "enableSMSDeliveryReports";
-    public static final boolean CONFIG_ENABLE_SMS_DELIVERY_REPORTS_DEFAULT = true;
-    /**
-     * Boolean value: if group MMS is supported
-     */
-    public static final String CONFIG_ENABLE_GROUP_MMS = "enableGroupMms";
-    public static final boolean CONFIG_ENABLE_GROUP_MMS_DEFAULT = true;
-    /**
-     * Boolean value: if the content_disposition field of an MMS part should be parsed
-     * Check wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21. Most carriers support it except some.
-     */
-    public static final String CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION =
-            "supportMmsContentDisposition";
-    public static final boolean CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION_DEFAULT = true;
-    /**
-     * Boolean value: if the sms app should support a link to the system settings
-     * where amber alerts are configured.
-     */
-    public static final String CONFIG_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks";
-    public static final boolean CONFIG_CELL_BROADCAST_APP_LINKS_DEFAULT = true;
-    /**
-     * Boolean value: if multipart SMS should be sent as separate SMS messages
-     */
-    public static final String CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES =
-            "sendMultipartSmsAsSeparateMessages";
-    public static final boolean CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES_DEFAULT = false;
-    /**
-     * Boolean value: if MMS read report is supported
-     */
-    public static final String CONFIG_ENABLE_MMS_READ_REPORTS = "enableMMSReadReports";
-    public static final boolean CONFIG_ENABLE_MMS_READ_REPORTS_DEFAULT = false;
-    /**
-     * Boolean value: if MMS delivery report is supported
-     */
-    public static final String CONFIG_ENABLE_MMS_DELIVERY_REPORTS = "enableMMSDeliveryReports";
-    public static final boolean CONFIG_ENABLE_MMS_DELIVERY_REPORTS_DEFAULT = false;
-    /**
-     * Boolean value: if "charset" value is supported in the "Content-Type" HTTP header
-     */
-    public static final String CONFIG_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader";
-    public static final boolean CONFIG_SUPPORT_HTTP_CHARSET_HEADER_DEFAULT = false;
-    /**
-     * Integer value: maximal MMS message size in bytes
-     */
-    public static final String CONFIG_MAX_MESSAGE_SIZE = "maxMessageSize";
-    public static final int CONFIG_MAX_MESSAGE_SIZE_DEFAULT = 300 * 1024;
-    /**
-     * Integer value: maximal MMS image height in pixels
-     */
-    public static final String CONFIG_MAX_IMAGE_HEIGHT = "maxImageHeight";
-    public static final int CONFIG_MAX_IMAGE_HEIGHT_DEFAULT = 480;
-    /**
-     * Integer value: maximal MMS image width in pixels
-     */
-    public static final String CONFIG_MAX_IMAGE_WIDTH = "maxImageWidth";
-    public static final int CONFIG_MAX_IMAGE_WIDTH_DEFAULT = 640;
-    /**
-     * Integer value: limit on recipient list of an MMS message
-     */
-    public static final String CONFIG_RECIPIENT_LIMIT = "recipientLimit";
-    public static final int CONFIG_RECIPIENT_LIMIT_DEFAULT = Integer.MAX_VALUE;
-    /**
-     * Integer value: HTTP socket timeout in milliseconds for MMS
-     */
-    public static final String CONFIG_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout";
-    public static final int CONFIG_HTTP_SOCKET_TIMEOUT_DEFAULT = 60 * 1000;
-    /**
-     * Integer value: minimal number of characters of an alias
-     */
-    public static final String CONFIG_ALIAS_MIN_CHARS = "aliasMinChars";
-    public static final int CONFIG_ALIAS_MIN_CHARS_DEFAULT = 2;
-    /**
-     * Integer value: maximal number of characters of an alias
-     */
-    public static final String CONFIG_ALIAS_MAX_CHARS = "aliasMaxChars";
-    public static final int CONFIG_ALIAS_MAX_CHARS_DEFAULT = 48;
-    /**
-     * Integer value: the threshold of number of SMS parts when an multipart SMS will be
-     * converted into an MMS, e.g. if this is "4", when an multipart SMS message has 5
-     * parts, then it will be sent as MMS message instead. "-1" indicates no such conversion
-     * can happen.
-     */
-    public static final String CONFIG_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold";
-    public static final int CONFIG_SMS_TO_MMS_TEXT_THRESHOLD_DEFAULT = -1;
-    /**
-     * Integer value: the threshold of SMS length when it will be converted into an MMS.
-     * "-1" indicates no such conversion can happen.
-     */
-    public static final String CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD =
-            "smsToMmsTextLengthThreshold";
-    public static final int CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_DEFAULT = -1;
-    /**
-     * Integer value: maximal length in bytes of SMS message
-     */
-    public static final String CONFIG_MAX_MESSAGE_TEXT_SIZE = "maxMessageTextSize";
-    public static final int CONFIG_MAX_MESSAGE_TEXT_SIZE_DEFAULT = -1;
-    /**
-     * Integer value: maximum number of characters allowed for mms subject
-     */
-    public static final String CONFIG_MAX_SUBJECT_LENGTH = "maxSubjectLength";
-    public static final int CONFIG_MAX_SUBJECT_LENGTH_DEFAULT = 40;
-    /**
-     * String value: name for the user agent profile HTTP header
-     */
-    public static final String CONFIG_UA_PROF_TAG_NAME = "uaProfTagName";
-    public static final String CONFIG_UA_PROF_TAG_NAME_DEFAULT = "x-wap-profile";
-    /**
-     * String value: additional HTTP headers for MMS HTTP requests.
-     * The format is
-     * header_1:header_value_1|header_2:header_value_2|...
-     * Each value can contain macros.
-     */
-    public static final String CONFIG_HTTP_PARAMS = "httpParams";
-    public static final String CONFIG_HTTP_PARAMS_DEFAULT = null;
-    /**
-     * String value: number of email gateway
-     */
-    public static final String CONFIG_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber";
-    public static final String CONFIG_EMAIL_GATEWAY_NUMBER_DEFAULT = null;
-    /**
-     * String value: suffix for the NAI HTTP header value, e.g. ":pcs"
-     * (NAI is used as authentication in HTTP headers for some carriers)
-     */
-    public static final String CONFIG_NAI_SUFFIX = "naiSuffix";
-    public static final String CONFIG_NAI_SUFFIX_DEFAULT = null;
-    /**
-     * String value: Url for user agent profile
-     */
-    public static final String CONFIG_UA_PROF_URL = "uaProfUrl";
-    public static final String CONFIG_UA_PROF_URL_DEFAULT = null;
-    /**
-     * String value: user agent
-     */
-    public static final String CONFIG_USER_AGENT = "userAgent";
-    public static final String CONFIG_USER_AGENT_DEFAULT = null;
-}
diff --git a/src/android/support/v7/mms/CarrierConfigXmlParser.java b/src/android/support/v7/mms/CarrierConfigXmlParser.java
deleted file mode 100644
index 2e95d52..0000000
--- a/src/android/support/v7/mms/CarrierConfigXmlParser.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-
-/**
- * XML parser for carrier config (i.e. mms_config)
- */
-class CarrierConfigXmlParser extends MmsXmlResourceParser {
-    interface KeyValueProcessor {
-        void process(String type, String key, String value);
-    }
-
-    private static final String TAG_MMS_CONFIG = "mms_config";
-
-    private final KeyValueProcessor mKeyValueProcessor;
-
-    CarrierConfigXmlParser(final XmlPullParser parser, final KeyValueProcessor keyValueProcessor) {
-        super(parser);
-        mKeyValueProcessor = keyValueProcessor;
-    }
-
-    // Parse one key/value
-    @Override
-    protected void parseRecord() throws IOException, XmlPullParserException {
-        final String key = mInputParser.getAttributeValue(null, "name");
-        // We are at the start tag, the name of the tag is the type
-        // e.g. <int name="key">value</int>
-        final String type = mInputParser.getName();
-        int nextEvent = mInputParser.next();
-        String value = null;
-        if (nextEvent == XmlPullParser.TEXT) {
-            value = mInputParser.getText();
-            nextEvent = mInputParser.next();
-        }
-        if (nextEvent != XmlPullParser.END_TAG) {
-            throw new XmlPullParserException("Expecting end tag @" + xmlParserDebugContext());
-        }
-        // We are done parsing one mms_config key/value, call the handler
-        if (mKeyValueProcessor != null) {
-            mKeyValueProcessor.process(type, key, value);
-        }
-    }
-
-    @Override
-    protected String getRootTag() {
-        return TAG_MMS_CONFIG;
-    }
-
-}
diff --git a/src/android/support/v7/mms/DefaultApnSettingsLoader.java b/src/android/support/v7/mms/DefaultApnSettingsLoader.java
deleted file mode 100644
index a4bd647..0000000
--- a/src/android/support/v7/mms/DefaultApnSettingsLoader.java
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.res.Resources;
-import android.content.res.XmlResourceParser;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteException;
-import android.net.Uri;
-import android.provider.Telephony;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.messaging.R;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Default implementation of APN settings loader
- */
-class DefaultApnSettingsLoader implements ApnSettingsLoader {
-    /**
-     * The base implementation of an APN
-     */
-    private static class BaseApn implements Apn {
-        /**
-         * Create a base APN from parameters
-         *
-         * @param typesIn the APN type field
-         * @param mmscIn the APN mmsc field
-         * @param proxyIn the APN mmsproxy field
-         * @param portIn the APN mmsport field
-         * @return an instance of base APN, or null if any of the parameter is invalid
-         */
-        public static BaseApn from(final String typesIn, final String mmscIn, final String proxyIn,
-                final String portIn) {
-            if (!isValidApnType(trimWithNullCheck(typesIn), APN_TYPE_MMS)) {
-                return null;
-            }
-            String mmsc = trimWithNullCheck(mmscIn);
-            if (TextUtils.isEmpty(mmsc)) {
-                return null;
-            }
-            mmsc = trimV4AddrZeros(mmsc);
-            try {
-                new URI(mmsc);
-            } catch (final URISyntaxException e) {
-                return null;
-            }
-            String mmsProxy = trimWithNullCheck(proxyIn);
-            int mmsProxyPort = 80;
-            if (!TextUtils.isEmpty(mmsProxy)) {
-                mmsProxy = trimV4AddrZeros(mmsProxy);
-                final String portString = trimWithNullCheck(portIn);
-                if (portString != null) {
-                    try {
-                        mmsProxyPort = Integer.parseInt(portString);
-                    } catch (final NumberFormatException e) {
-                        // Ignore, just use 80 to try
-                    }
-                }
-            }
-            return new BaseApn(mmsc, mmsProxy, mmsProxyPort);
-        }
-
-        private final String mMmsc;
-        private final String mMmsProxy;
-        private final int mMmsProxyPort;
-
-        public BaseApn(final String mmsc, final String proxy, final int port) {
-            mMmsc = mmsc;
-            mMmsProxy = proxy;
-            mMmsProxyPort = port;
-        }
-
-        @Override
-        public String getMmsc() {
-            return mMmsc;
-        }
-
-        @Override
-        public String getMmsProxy() {
-            return mMmsProxy;
-        }
-
-        @Override
-        public int getMmsProxyPort() {
-            return mMmsProxyPort;
-        }
-
-        @Override
-        public void setSuccess() {
-            // Do nothing
-        }
-
-        public boolean equals(final BaseApn other) {
-            return TextUtils.equals(mMmsc, other.getMmsc()) &&
-                    TextUtils.equals(mMmsProxy, other.getMmsProxy()) &&
-                    mMmsProxyPort == other.getMmsProxyPort();
-        }
-    }
-
-    /**
-     * An in-memory implementation of an APN. These APNs are organized into an in-memory list.
-     * The order of the list can be changed by the setSuccess method.
-     */
-    private static class MemoryApn implements Apn {
-        /**
-         * Create an in-memory APN loaded from resources
-         *
-         * @param apns the in-memory APN list
-         * @param typesIn the APN type field
-         * @param mmscIn the APN mmsc field
-         * @param proxyIn the APN mmsproxy field
-         * @param portIn the APN mmsport field
-         * @return an in-memory APN instance, null if there is invalid parameter
-         */
-        public static MemoryApn from(final List<Apn> apns, final String typesIn,
-                final String mmscIn, final String proxyIn, final String portIn) {
-            if (apns == null) {
-                return null;
-            }
-            final BaseApn base = BaseApn.from(typesIn, mmscIn, proxyIn, portIn);
-            if (base == null) {
-                return null;
-            }
-            for (final Apn apn : apns) {
-                if (apn instanceof MemoryApn && ((MemoryApn) apn).equals(base)) {
-                    return null;
-                }
-            }
-            return new MemoryApn(apns, base);
-        }
-
-        private final List<Apn> mApns;
-        private final BaseApn mBase;
-
-        public MemoryApn(final List<Apn> apns, final BaseApn base) {
-            mApns = apns;
-            mBase = base;
-        }
-
-        @Override
-        public String getMmsc() {
-            return mBase.getMmsc();
-        }
-
-        @Override
-        public String getMmsProxy() {
-            return mBase.getMmsProxy();
-        }
-
-        @Override
-        public int getMmsProxyPort() {
-            return mBase.getMmsProxyPort();
-        }
-
-        @Override
-        public void setSuccess() {
-            // If this is being marked as a successful APN, move it to the top of the list so
-            // next time it will be tried first
-            boolean moved = false;
-            synchronized (mApns) {
-                if (mApns.get(0) != this) {
-                    mApns.remove(this);
-                    mApns.add(0, this);
-                    moved = true;
-                }
-            }
-            if (moved) {
-                Log.d(MmsService.TAG, "Set APN ["
-                        + "MMSC=" + getMmsc() + ", "
-                        + "PROXY=" + getMmsProxy() + ", "
-                        + "PORT=" + getMmsProxyPort() + "] to be first");
-            }
-        }
-
-        public boolean equals(final BaseApn other) {
-            if (other == null) {
-                return false;
-            }
-            return mBase.equals(other);
-        }
-    }
-
-    /**
-     * APN_TYPE_ALL is a special type to indicate that this APN entry can
-     * service all data connections.
-     */
-    public static final String APN_TYPE_ALL = "*";
-    /** APN type for MMS traffic */
-    public static final String APN_TYPE_MMS = "mms";
-
-    private static final String[] APN_PROJECTION = {
-            Telephony.Carriers.TYPE,
-            Telephony.Carriers.MMSC,
-            Telephony.Carriers.MMSPROXY,
-            Telephony.Carriers.MMSPORT,
-    };
-    private static final int COLUMN_TYPE         = 0;
-    private static final int COLUMN_MMSC         = 1;
-    private static final int COLUMN_MMSPROXY     = 2;
-    private static final int COLUMN_MMSPORT      = 3;
-
-    private static final String APN_MCC = "mcc";
-    private static final String APN_MNC = "mnc";
-    private static final String APN_APN = "apn";
-    private static final String APN_TYPE = "type";
-    private static final String APN_MMSC = "mmsc";
-    private static final String APN_MMSPROXY = "mmsproxy";
-    private static final String APN_MMSPORT = "mmsport";
-
-    private final Context mContext;
-
-    // Cached APNs for subIds
-    private final SparseArray<List<Apn>> mApnsCache;
-
-    DefaultApnSettingsLoader(final Context context) {
-        mContext = context;
-        mApnsCache = new SparseArray<>();
-    }
-
-    @Override
-    public List<Apn> get(final String apnName) {
-        final int subId = Utils.getEffectiveSubscriptionId(MmsManager.DEFAULT_SUB_ID);
-        List<Apn> apns;
-        boolean didLoad = false;
-        synchronized (this) {
-            apns = mApnsCache.get(subId);
-            if (apns == null) {
-                apns = new ArrayList<>();
-                mApnsCache.put(subId, apns);
-                loadLocked(subId, apnName, apns);
-                didLoad = true;
-            }
-        }
-        if (didLoad) {
-            Log.i(MmsService.TAG, "Loaded " + apns.size() + " APNs");
-        }
-        return apns;
-    }
-
-    private void loadLocked(final int subId, final String apnName, final List<Apn> apns) {
-        // Try system APN table first
-        loadFromSystem(subId, apnName, apns);
-        if (apns.size() > 0) {
-            return;
-        }
-        // Try loading from apns.xml in resources
-        loadFromResources(subId, apnName, apns);
-        if (apns.size() > 0) {
-            return;
-        }
-        // Try resources but without APN name
-        loadFromResources(subId, null/*apnName*/, apns);
-    }
-
-    /**
-     * Load matching APNs from telephony provider.
-     * We try different combinations of the query to work around some platform quirks.
-     *
-     * @param subId the SIM subId
-     * @param apnName the APN name to match
-     * @param apns the list used to return results
-     */
-    private void loadFromSystem(final int subId, final String apnName, final List<Apn> apns) {
-        Uri uri;
-        if (Utils.supportMSim() && subId != MmsManager.DEFAULT_SUB_ID) {
-            uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "/subId/" + subId);
-        } else {
-            uri = Telephony.Carriers.CONTENT_URI;
-        }
-        Cursor cursor = null;
-        try {
-            for (; ; ) {
-                // Try different combinations of queries. Some would work on some platforms.
-                // So we query each combination until we find one returns non-empty result.
-                cursor = querySystem(uri, true/*checkCurrent*/, apnName);
-                if (cursor != null) {
-                    break;
-                }
-                cursor = querySystem(uri, false/*checkCurrent*/, apnName);
-                if (cursor != null) {
-                    break;
-                }
-                cursor = querySystem(uri, true/*checkCurrent*/, null/*apnName*/);
-                if (cursor != null) {
-                    break;
-                }
-                cursor = querySystem(uri, false/*checkCurrent*/, null/*apnName*/);
-                break;
-            }
-        } catch (final SecurityException e) {
-            // Can't access platform APN table, return directly
-            return;
-        }
-        if (cursor == null) {
-            return;
-        }
-        try {
-            if (cursor.moveToFirst()) {
-                final Apn apn = BaseApn.from(
-                        cursor.getString(COLUMN_TYPE),
-                        cursor.getString(COLUMN_MMSC),
-                        cursor.getString(COLUMN_MMSPROXY),
-                        cursor.getString(COLUMN_MMSPORT));
-                if (apn != null) {
-                    apns.add(apn);
-                }
-            }
-        } finally {
-            cursor.close();
-        }
-    }
-
-    /**
-     * Query system APN table
-     *
-     * @param uri The APN query URL to use
-     * @param checkCurrent If add "CURRENT IS NOT NULL" condition
-     * @param apnName The optional APN name for query condition
-     * @return A cursor of the query result. If a cursor is returned as not null, it is
-     *         guaranteed to contain at least one row.
-     */
-    private Cursor querySystem(final Uri uri, final boolean checkCurrent, String apnName) {
-        Log.i(MmsService.TAG, "Loading APNs from system, "
-                + "checkCurrent=" + checkCurrent + " apnName=" + apnName);
-        final StringBuilder selectionBuilder = new StringBuilder();
-        String[] selectionArgs = null;
-        if (checkCurrent) {
-            selectionBuilder.append(Telephony.Carriers.CURRENT).append(" IS NOT NULL");
-        }
-        apnName = trimWithNullCheck(apnName);
-        if (!TextUtils.isEmpty(apnName)) {
-            if (selectionBuilder.length() > 0) {
-                selectionBuilder.append(" AND ");
-            }
-            selectionBuilder.append(Telephony.Carriers.APN).append("=?");
-            selectionArgs = new String[] { apnName };
-        }
-        try {
-            final Cursor cursor = mContext.getContentResolver().query(
-                    uri,
-                    APN_PROJECTION,
-                    selectionBuilder.toString(),
-                    selectionArgs,
-                    null/*sortOrder*/);
-            if (cursor == null || cursor.getCount() < 1) {
-                if (cursor != null) {
-                    cursor.close();
-                }
-                Log.w(MmsService.TAG, "Query " + uri + " with apn " + apnName + " and "
-                        + (checkCurrent ? "checking CURRENT" : "not checking CURRENT")
-                        + " returned empty");
-                return null;
-            }
-            return cursor;
-        } catch (final SQLiteException e) {
-            Log.w(MmsService.TAG, "APN table query exception: " + e);
-        } catch (final SecurityException e) {
-            Log.w(MmsService.TAG, "Platform restricts APN table access: " + e);
-            throw e;
-        }
-        return null;
-    }
-
-    /**
-     * Find matching APNs using builtin APN list resource
-     *
-     * @param subId the SIM subId
-     * @param apnName the APN name to match
-     * @param apns the list for returning results
-     */
-    private void loadFromResources(final int subId, final String apnName, final List<Apn> apns) {
-        Log.i(MmsService.TAG, "Loading APNs from resources, apnName=" + apnName);
-        final int[] mccMnc = Utils.getMccMnc(mContext, subId);
-        if (mccMnc[0] == 0) {
-            Log.w(MmsService.TAG, "Can not get valid mcc/mnc from system");
-            return;
-        }
-        // MCC/MNC is good, loading/querying APNs from XML
-        XmlResourceParser xml = null;
-        try {
-            xml = mContext.getResources().getXml(R.xml.apns);
-            new ApnsXmlParser(xml, new ApnsXmlParser.ApnProcessor() {
-                @Override
-                public void process(ContentValues apnValues) {
-                    final String mcc = trimWithNullCheck(apnValues.getAsString(APN_MCC));
-                    final String mnc = trimWithNullCheck(apnValues.getAsString(APN_MNC));
-                    final String apn = trimWithNullCheck(apnValues.getAsString(APN_APN));
-                    try {
-                        if (mccMnc[0] == Integer.parseInt(mcc) &&
-                                mccMnc[1] == Integer.parseInt(mnc) &&
-                                (TextUtils.isEmpty(apnName) || apnName.equalsIgnoreCase(apn))) {
-                            final String type = apnValues.getAsString(APN_TYPE);
-                            final String mmsc = apnValues.getAsString(APN_MMSC);
-                            final String mmsproxy = apnValues.getAsString(APN_MMSPROXY);
-                            final String mmsport = apnValues.getAsString(APN_MMSPORT);
-                            final Apn newApn = MemoryApn.from(apns, type, mmsc, mmsproxy, mmsport);
-                            if (newApn != null) {
-                                apns.add(newApn);
-                            }
-                        }
-                    } catch (final NumberFormatException e) {
-                        // Ignore
-                    }
-                }
-            }).parse();
-        } catch (final Resources.NotFoundException e) {
-            Log.w(MmsService.TAG, "Can not get apns.xml " + e);
-        } finally {
-            if (xml != null) {
-                xml.close();
-            }
-        }
-    }
-
-    private static String trimWithNullCheck(final String value) {
-        return value != null ? value.trim() : null;
-    }
-
-    /**
-     * Trim leading zeros from IPv4 address strings
-     * Our base libraries will interpret that as octel..
-     * Must leave non v4 addresses and host names alone.
-     * For example, 192.168.000.010 -> 192.168.0.10
-     *
-     * @param addr a string representing an ip addr
-     * @return a string propertly trimmed
-     */
-    private static String trimV4AddrZeros(final String addr) {
-        if (addr == null) {
-            return null;
-        }
-        final String[] octets = addr.split("\\.");
-        if (octets.length != 4) {
-            return addr;
-        }
-        final StringBuilder builder = new StringBuilder(16);
-        String result = null;
-        for (int i = 0; i < 4; i++) {
-            try {
-                if (octets[i].length() > 3) {
-                    return addr;
-                }
-                builder.append(Integer.parseInt(octets[i]));
-            } catch (final NumberFormatException e) {
-                return addr;
-            }
-            if (i < 3) {
-                builder.append('.');
-            }
-        }
-        result = builder.toString();
-        return result;
-    }
-
-    /**
-     * Check if the APN contains the APN type we want
-     *
-     * @param types The string encodes a list of supported types
-     * @param requestType The type we want
-     * @return true if the input types string contains the requestType
-     */
-    public static boolean isValidApnType(final String types, final String requestType) {
-        // If APN type is unspecified, assume APN_TYPE_ALL.
-        if (TextUtils.isEmpty(types)) {
-            return true;
-        }
-        for (final String t : types.split(",")) {
-            if (t.equals(requestType) || t.equals(APN_TYPE_ALL)) {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/src/android/support/v7/mms/DefaultCarrierConfigValuesLoader.java b/src/android/support/v7/mms/DefaultCarrierConfigValuesLoader.java
deleted file mode 100644
index 1a45338..0000000
--- a/src/android/support/v7/mms/DefaultCarrierConfigValuesLoader.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.content.res.XmlResourceParser;
-import android.os.Bundle;
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.messaging.R;
-
-/**
- * The default implementation of loader for carrier config values
- */
-class DefaultCarrierConfigValuesLoader implements CarrierConfigValuesLoader {
-    /*
-     * Key types
-     */
-    public static final String KEY_TYPE_INT = "int";
-    public static final String KEY_TYPE_BOOL = "bool";
-    public static final String KEY_TYPE_STRING = "string";
-
-    private final Context mContext;
-
-    // Cached values for subIds
-    private final SparseArray<Bundle> mValuesCache;
-
-    DefaultCarrierConfigValuesLoader(final Context context) {
-        mContext = context;
-        mValuesCache = new SparseArray<>();
-    }
-
-    @Override
-    public Bundle get(int subId) {
-        subId = Utils.getEffectiveSubscriptionId(subId);
-        Bundle values;
-        boolean didLoad = false;
-        synchronized (this) {
-            values = mValuesCache.get(subId);
-            if (values == null) {
-                values = new Bundle();
-                mValuesCache.put(subId, values);
-                loadLocked(subId, values);
-                didLoad = true;
-            }
-        }
-        if (didLoad) {
-            Log.i(MmsService.TAG, "Carrier configs loaded: " + values);
-        }
-        return values;
-    }
-
-    private void loadLocked(final int subId, final Bundle values) {
-        // For K and earlier, load from resources
-        loadFromResources(subId, values);
-        if (Utils.hasMmsApi()) {
-            // For L and later, also load from system MMS service
-            loadFromSystem(subId, values);
-        }
-    }
-
-    /**
-     * Load from system, using MMS API
-     *
-     * @param subId which SIM to load for
-     * @param values the result to add to
-     */
-    private static void loadFromSystem(final int subId, final Bundle values) {
-        try {
-            final Bundle systemValues = Utils.getSmsManager(subId).getCarrierConfigValues();
-            if (systemValues != null) {
-                values.putAll(systemValues);
-            }
-        } catch (final Exception e) {
-            Log.w(MmsService.TAG, "Calling system getCarrierConfigValues exception", e);
-        }
-    }
-
-    private void loadFromResources(final int subId, final Bundle values) {
-        // Get a subscription-dependent context for loading the mms_config.xml
-        final Context subContext = Utils.getSubDepContext(mContext, subId);
-        XmlResourceParser xml = null;
-        try {
-            xml = subContext.getResources().getXml(R.xml.mms_config);
-            new CarrierConfigXmlParser(xml, new CarrierConfigXmlParser.KeyValueProcessor() {
-                @Override
-                public void process(String type, String key, String value) {
-                    try {
-                        if (KEY_TYPE_INT.equals(type)) {
-                            values.putInt(key, Integer.parseInt(value));
-                        } else if (KEY_TYPE_BOOL.equals(type)) {
-                            values.putBoolean(key, Boolean.parseBoolean(value));
-                        } else if (KEY_TYPE_STRING.equals(type)) {
-                            values.putString(key, value);
-                        }
-                    } catch (final NumberFormatException e) {
-                        Log.w(MmsService.TAG, "Load carrier value from resources: "
-                                + "invalid " + key + "," + value + "," + type);
-                    }
-                }
-            }).parse();
-        } catch (final Resources.NotFoundException e) {
-            Log.w(MmsService.TAG, "Can not get mms_config.xml");
-        } finally {
-            if (xml != null) {
-                xml.close();
-            }
-        }
-    }
-}
diff --git a/src/android/support/v7/mms/DefaultUserAgentInfoLoader.java b/src/android/support/v7/mms/DefaultUserAgentInfoLoader.java
deleted file mode 100644
index e6191ce..0000000
--- a/src/android/support/v7/mms/DefaultUserAgentInfoLoader.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.content.Context;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-/**
- * The default implementation of loader of UA and UAProfUrl
- */
-class DefaultUserAgentInfoLoader implements UserAgentInfoLoader {
-    // Default values to be used as user agent info
-    private static final String DEFAULT_USER_AGENT = "Android MmsLib/1.0";
-    private static final String DEFAULT_UA_PROF_URL =
-            "http://www.gstatic.com/android/sms/mms_ua_profile.xml";
-
-    private Context mContext;
-    private boolean mLoaded;
-
-    private String mUserAgent;
-    private String mUAProfUrl;
-
-    DefaultUserAgentInfoLoader(final Context context) {
-        mContext = context;
-    }
-
-    @Override
-    public String getUserAgent() {
-        load();
-        return mUserAgent;
-    }
-
-    @Override
-    public String getUAProfUrl() {
-        load();
-        return mUAProfUrl;
-    }
-
-    private void load() {
-        if (mLoaded) {
-            return;
-        }
-        boolean didLoad = false;
-        synchronized (this) {
-            if (!mLoaded) {
-                loadLocked();
-                mLoaded = true;
-                didLoad = true;
-            }
-        }
-        if (didLoad) {
-            Log.i(MmsService.TAG, "Loaded user agent info: "
-                    + "UA=" + mUserAgent + ", UAProfUrl=" + mUAProfUrl);
-        }
-    }
-
-    private void loadLocked() {
-        if (Utils.hasUserAgentApi()) {
-            // load the MMS User agent and UaProfUrl from TelephonyManager APIs
-            final TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(
-                    Context.TELEPHONY_SERVICE);
-            mUserAgent = telephonyManager.getMmsUserAgent();
-            mUAProfUrl = telephonyManager.getMmsUAProfUrl();
-        }
-        if (TextUtils.isEmpty(mUserAgent)) {
-            mUserAgent = DEFAULT_USER_AGENT;
-        }
-        if (TextUtils.isEmpty(mUAProfUrl)) {
-            mUAProfUrl = DEFAULT_UA_PROF_URL;
-        }
-    }
-}
diff --git a/src/android/support/v7/mms/DownloadRequest.java b/src/android/support/v7/mms/DownloadRequest.java
deleted file mode 100644
index 5db01f8..0000000
--- a/src/android/support/v7/mms/DownloadRequest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.app.PendingIntent;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.ParcelFileDescriptor;
-import android.os.Parcelable;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.io.IOException;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Request to download an MMS
- */
-class DownloadRequest extends MmsRequest {
-
-    DownloadRequest(final String locationUrl, final Uri pduUri,
-            final PendingIntent sentIntent) {
-        super(locationUrl, pduUri, sentIntent);
-    }
-
-    @Override
-    protected boolean loadRequest(final Context context, final Bundle mmsConfig) {
-        // No need to load PDU from app. Always true.
-        return true;
-    }
-
-    @Override
-    protected boolean transferResponse(Context context, Intent fillIn, byte[] response) {
-        return writePduToContentUri(context, mPduUri, response);
-    }
-
-    @Override
-    protected byte[] doHttp(Context context, MmsNetworkManager netMgr, ApnSettingsLoader.Apn apn,
-            Bundle mmsConfig, String userAgent, String uaProfUrl) throws MmsHttpException {
-        final MmsHttpClient httpClient = netMgr.getHttpClient();
-        return httpClient.execute(getHttpRequestUrl(apn), null/*pdu*/, MmsHttpClient.METHOD_GET,
-                !TextUtils.isEmpty(apn.getMmsProxy()), apn.getMmsProxy(), apn.getMmsProxyPort(),
-                mmsConfig, userAgent, uaProfUrl);
-
-    }
-
-    @Override
-    protected String getHttpRequestUrl(final ApnSettingsLoader.Apn apn) {
-        return mLocationUrl;
-    }
-
-    /**
-     * Write pdu bytes to content provider uri
-     *
-     * @param contentUri content provider uri to which bytes should be written
-     * @param pdu Bytes to write
-     * @return true if all bytes successfully written else false
-     */
-    public boolean writePduToContentUri(final Context context, final Uri contentUri,
-            final byte[] pdu) {
-        if (contentUri == null || pdu == null) {
-            return false;
-        }
-        final Callable<Boolean> copyDownloadedPduToOutput = new Callable<Boolean>() {
-            public Boolean call() {
-                ParcelFileDescriptor.AutoCloseOutputStream outStream = null;
-                try {
-                    final ContentResolver cr = context.getContentResolver();
-                    final ParcelFileDescriptor pduFd = cr.openFileDescriptor(contentUri, "w");
-                    outStream = new ParcelFileDescriptor.AutoCloseOutputStream(pduFd);
-                    outStream.write(pdu);
-                    return true;
-                } catch (IOException e) {
-                    Log.e(MmsService.TAG, "Writing PDU to downloader: IO exception", e);
-                    return false;
-                } finally {
-                    if (outStream != null) {
-                        try {
-                            outStream.close();
-                        } catch (IOException ex) {
-                            // Ignore
-                        }
-                    }
-                }
-            }
-        };
-        final Future<Boolean> pendingResult =
-                mPduTransferExecutor.submit(copyDownloadedPduToOutput);
-        try {
-            return pendingResult.get(TASK_TIMEOUT_MS, TimeUnit.MILLISECONDS);
-        } catch (Exception e) {
-            // Typically a timeout occurred - cancel task
-            pendingResult.cancel(true);
-        }
-        return false;
-    }
-
-    public static final Parcelable.Creator<DownloadRequest> CREATOR
-            = new Parcelable.Creator<DownloadRequest>() {
-        public DownloadRequest createFromParcel(Parcel in) {
-            return new DownloadRequest(in);
-        }
-
-        public DownloadRequest[] newArray(int size) {
-            return new DownloadRequest[size];
-        }
-    };
-
-    private DownloadRequest(Parcel in) {
-        super(in);
-    }
-}
diff --git a/src/android/support/v7/mms/MmsHttpClient.java b/src/android/support/v7/mms/MmsHttpClient.java
deleted file mode 100644
index 241e4b8..0000000
--- a/src/android/support/v7/mms/MmsHttpClient.java
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.telephony.SmsManager;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.Base64;
-import android.util.Log;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.lang.reflect.Method;
-import java.net.HttpURLConnection;
-import java.net.InetSocketAddress;
-import java.net.MalformedURLException;
-import java.net.ProtocolException;
-import java.net.Proxy;
-import java.net.URL;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * MMS HTTP client for sending and downloading MMS messages
- */
-public class MmsHttpClient {
-    static final String METHOD_POST = "POST";
-    static final String METHOD_GET = "GET";
-
-    private static final String HEADER_CONTENT_TYPE = "Content-Type";
-    private static final String HEADER_ACCEPT = "Accept";
-    private static final String HEADER_ACCEPT_LANGUAGE = "Accept-Language";
-    private static final String HEADER_USER_AGENT = "User-Agent";
-
-    // The "Accept" header value
-    private static final String HEADER_VALUE_ACCEPT =
-            "*/*, application/vnd.wap.mms-message, application/vnd.wap.sic";
-    // The "Content-Type" header value
-    private static final String HEADER_VALUE_CONTENT_TYPE_WITH_CHARSET =
-            "application/vnd.wap.mms-message; charset=utf-8";
-    private static final String HEADER_VALUE_CONTENT_TYPE_WITHOUT_CHARSET =
-            "application/vnd.wap.mms-message";
-
-    /*
-     * Macro names
-     */
-    // The raw phone number
-    private static final String MACRO_LINE1 = "LINE1";
-    // The phone number without country code
-    private static final String MACRO_LINE1NOCOUNTRYCODE = "LINE1NOCOUNTRYCODE";
-    // NAI (Network Access Identifier)
-    private static final String MACRO_NAI = "NAI";
-
-    // The possible NAI system property name
-    private static final String NAI_PROPERTY = "persist.radio.cdma.nai";
-
-    private final Context mContext;
-    private final TelephonyManager mTelephonyManager;
-
-    /**
-     * Constructor
-     *
-     * @param context The Context object
-     */
-    MmsHttpClient(Context context) {
-        mContext = context;
-        mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-    }
-
-    /**
-     * Execute an MMS HTTP request, either a POST (sending) or a GET (downloading)
-     *
-     * @param urlString The request URL, for sending it is usually the MMSC, and for downloading
-     *                  it is the message URL
-     * @param pdu For POST (sending) only, the PDU to send
-     * @param method HTTP method, POST for sending and GET for downloading
-     * @param isProxySet Is there a proxy for the MMSC
-     * @param proxyHost The proxy host
-     * @param proxyPort The proxy port
-     * @param mmsConfig The MMS config to use
-     * @param userAgent The user agent header value
-     * @param uaProfUrl The UA Prof URL header value
-     * @return The HTTP response body
-     * @throws MmsHttpException For any failures
-     */
-    public byte[] execute(String urlString, byte[] pdu, String method, boolean isProxySet,
-            String proxyHost, int proxyPort, Bundle mmsConfig, String userAgent, String uaProfUrl)
-            throws MmsHttpException {
-        Log.d(MmsService.TAG, "HTTP: " + method + " " + Utils.redactUrlForNonVerbose(urlString)
-                + (isProxySet ? (", proxy=" + proxyHost + ":" + proxyPort) : "")
-                + ", PDU size=" + (pdu != null ? pdu.length : 0));
-        checkMethod(method);
-        HttpURLConnection connection = null;
-        try {
-            Proxy proxy = Proxy.NO_PROXY;
-            if (isProxySet) {
-                proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
-            }
-            final URL url = new URL(urlString);
-            // Now get the connection
-            connection = (HttpURLConnection) url.openConnection(proxy);
-            connection.setDoInput(true);
-            connection.setConnectTimeout(
-                    mmsConfig.getInt(CarrierConfigValuesLoader.CONFIG_HTTP_SOCKET_TIMEOUT,
-                            CarrierConfigValuesLoader.CONFIG_HTTP_SOCKET_TIMEOUT_DEFAULT));
-            // ------- COMMON HEADERS ---------
-            // Header: Accept
-            connection.setRequestProperty(HEADER_ACCEPT, HEADER_VALUE_ACCEPT);
-            // Header: Accept-Language
-            connection.setRequestProperty(
-                    HEADER_ACCEPT_LANGUAGE, getCurrentAcceptLanguage(Locale.getDefault()));
-            // Header: User-Agent
-            Log.i(MmsService.TAG, "HTTP: User-Agent=" + userAgent);
-            connection.setRequestProperty(HEADER_USER_AGENT, userAgent);
-            // Header: x-wap-profile
-            final String uaProfUrlTagName = mmsConfig.getString(
-                    CarrierConfigValuesLoader.CONFIG_UA_PROF_TAG_NAME,
-                    CarrierConfigValuesLoader.CONFIG_UA_PROF_TAG_NAME_DEFAULT);
-            if (uaProfUrl != null) {
-                Log.i(MmsService.TAG, "HTTP: UaProfUrl=" + uaProfUrl);
-                connection.setRequestProperty(uaProfUrlTagName, uaProfUrl);
-            }
-            // Add extra headers specified by mms_config.xml's httpparams
-            addExtraHeaders(connection, mmsConfig);
-            // Different stuff for GET and POST
-            if (METHOD_POST.equals(method)) {
-                if (pdu == null || pdu.length < 1) {
-                    Log.e(MmsService.TAG, "HTTP: empty pdu");
-                    throw new MmsHttpException(0/*statusCode*/, "Sending empty PDU");
-                }
-                connection.setDoOutput(true);
-                connection.setRequestMethod(METHOD_POST);
-                if (mmsConfig.getBoolean(
-                        CarrierConfigValuesLoader.CONFIG_SUPPORT_HTTP_CHARSET_HEADER,
-                        CarrierConfigValuesLoader.CONFIG_SUPPORT_HTTP_CHARSET_HEADER_DEFAULT)) {
-                    connection.setRequestProperty(HEADER_CONTENT_TYPE,
-                            HEADER_VALUE_CONTENT_TYPE_WITH_CHARSET);
-                } else {
-                    connection.setRequestProperty(HEADER_CONTENT_TYPE,
-                            HEADER_VALUE_CONTENT_TYPE_WITHOUT_CHARSET);
-                }
-                if (Log.isLoggable(MmsService.TAG, Log.VERBOSE)) {
-                    logHttpHeaders(connection.getRequestProperties());
-                }
-                connection.setFixedLengthStreamingMode(pdu.length);
-                // Sending request body
-                final OutputStream out =
-                        new BufferedOutputStream(connection.getOutputStream());
-                out.write(pdu);
-                out.flush();
-                out.close();
-            } else if (METHOD_GET.equals(method)) {
-                if (Log.isLoggable(MmsService.TAG, Log.VERBOSE)) {
-                    logHttpHeaders(connection.getRequestProperties());
-                }
-                connection.setRequestMethod(METHOD_GET);
-            }
-            // Get response
-            final int responseCode = connection.getResponseCode();
-            final String responseMessage = connection.getResponseMessage();
-            Log.d(MmsService.TAG, "HTTP: " + responseCode + " " + responseMessage);
-            if (Log.isLoggable(MmsService.TAG, Log.VERBOSE)) {
-                logHttpHeaders(connection.getHeaderFields());
-            }
-            if (responseCode / 100 != 2) {
-                throw new MmsHttpException(responseCode, responseMessage);
-            }
-            final InputStream in = new BufferedInputStream(connection.getInputStream());
-            final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
-            final byte[] buf = new byte[4096];
-            int count = 0;
-            while ((count = in.read(buf)) > 0) {
-                byteOut.write(buf, 0, count);
-            }
-            in.close();
-            final byte[] responseBody = byteOut.toByteArray();
-            Log.d(MmsService.TAG, "HTTP: response size="
-                    + (responseBody != null ? responseBody.length : 0));
-            return responseBody;
-        } catch (MalformedURLException e) {
-            final String redactedUrl = Utils.redactUrlForNonVerbose(urlString);
-            Log.e(MmsService.TAG, "HTTP: invalid URL " + redactedUrl, e);
-            throw new MmsHttpException(0/*statusCode*/, "Invalid URL " + redactedUrl, e);
-        } catch (ProtocolException e) {
-            final String redactedUrl = Utils.redactUrlForNonVerbose(urlString);
-            Log.e(MmsService.TAG, "HTTP: invalid URL protocol " + redactedUrl, e);
-            throw new MmsHttpException(0/*statusCode*/, "Invalid URL protocol " + redactedUrl, e);
-        } catch (IOException e) {
-            Log.e(MmsService.TAG, "HTTP: IO failure", e);
-            throw new MmsHttpException(0/*statusCode*/, e);
-        } finally {
-            if (connection != null) {
-                connection.disconnect();
-            }
-        }
-    }
-
-    private static void logHttpHeaders(Map<String, List<String>> headers) {
-        final StringBuilder sb = new StringBuilder();
-        if (headers != null) {
-            for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
-                final String key = entry.getKey();
-                final List<String> values = entry.getValue();
-                if (values != null) {
-                    for (String value : values) {
-                        sb.append(key).append('=').append(value).append('\n');
-                    }
-                }
-            }
-            Log.v(MmsService.TAG, "HTTP: headers\n" + sb.toString());
-        }
-    }
-
-    private static void checkMethod(String method) throws MmsHttpException {
-        if (!METHOD_GET.equals(method) && !METHOD_POST.equals(method)) {
-            throw new MmsHttpException(0/*statusCode*/, "Invalid method " + method);
-        }
-    }
-
-    private static final String ACCEPT_LANG_FOR_US_LOCALE = "en-US";
-
-    /**
-     * Return the Accept-Language header.  Use the current locale plus
-     * US if we are in a different locale than US.
-     * This code copied from the browser's WebSettings.java
-     *
-     * @return Current AcceptLanguage String.
-     */
-    public static String getCurrentAcceptLanguage(Locale locale) {
-        final StringBuilder buffer = new StringBuilder();
-        addLocaleToHttpAcceptLanguage(buffer, locale);
-
-        if (!Locale.US.equals(locale)) {
-            if (buffer.length() > 0) {
-                buffer.append(", ");
-            }
-            buffer.append(ACCEPT_LANG_FOR_US_LOCALE);
-        }
-
-        return buffer.toString();
-    }
-
-    /**
-     * Convert obsolete language codes, including Hebrew/Indonesian/Yiddish,
-     * to new standard.
-     */
-    private static String convertObsoleteLanguageCodeToNew(String langCode) {
-        if (langCode == null) {
-            return null;
-        }
-        if ("iw".equals(langCode)) {
-            // Hebrew
-            return "he";
-        } else if ("in".equals(langCode)) {
-            // Indonesian
-            return "id";
-        } else if ("ji".equals(langCode)) {
-            // Yiddish
-            return "yi";
-        }
-        return langCode;
-    }
-
-    private static void addLocaleToHttpAcceptLanguage(StringBuilder builder, Locale locale) {
-        final String language = convertObsoleteLanguageCodeToNew(locale.getLanguage());
-        if (language != null) {
-            builder.append(language);
-            final String country = locale.getCountry();
-            if (country != null) {
-                builder.append("-");
-                builder.append(country);
-            }
-        }
-    }
-
-    private static final Pattern MACRO_P = Pattern.compile("##(\\S+)##");
-    /**
-     * Resolve the macro in HTTP param value text
-     * For example, "something##LINE1##something" is resolved to "something9139531419something"
-     *
-     * @param value The HTTP param value possibly containing macros
-     * @return The HTTP param with macro resolved to real value
-     */
-    private String resolveMacro(String value, Bundle mmsConfig) {
-        if (TextUtils.isEmpty(value)) {
-            return value;
-        }
-        final Matcher matcher = MACRO_P.matcher(value);
-        int nextStart = 0;
-        StringBuilder replaced = null;
-        while (matcher.find()) {
-            if (replaced == null) {
-                replaced = new StringBuilder();
-            }
-            final int matchedStart = matcher.start();
-            if (matchedStart > nextStart) {
-                replaced.append(value.substring(nextStart, matchedStart));
-            }
-            final String macro = matcher.group(1);
-            final String macroValue = getHttpParamMacro(macro, mmsConfig);
-            if (macroValue != null) {
-                replaced.append(macroValue);
-            }
-            nextStart = matcher.end();
-        }
-        if (replaced != null && nextStart < value.length()) {
-            replaced.append(value.substring(nextStart));
-        }
-        return replaced == null ? value : replaced.toString();
-    }
-
-    /**
-     * Add extra HTTP headers from mms_config.xml's httpParams, which is a list of key/value
-     * pairs separated by "|". Each key/value pair is separated by ":". Value may contain
-     * macros like "##LINE1##" or "##NAI##" which is resolved with methods in this class
-     *
-     * @param connection The HttpURLConnection that we add headers to
-     * @param mmsConfig The MmsConfig object
-     */
-    private void addExtraHeaders(HttpURLConnection connection, Bundle mmsConfig) {
-        final String extraHttpParams = mmsConfig.getString(
-                CarrierConfigValuesLoader.CONFIG_HTTP_PARAMS);
-        if (!TextUtils.isEmpty(extraHttpParams)) {
-            // Parse the parameter list
-            String paramList[] = extraHttpParams.split("\\|");
-            for (String paramPair : paramList) {
-                String splitPair[] = paramPair.split(":", 2);
-                if (splitPair.length == 2) {
-                    final String name = splitPair[0].trim();
-                    final String value = resolveMacro(splitPair[1].trim(), mmsConfig);
-                    if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(value)) {
-                        // Add the header if the param is valid
-                        connection.setRequestProperty(name, value);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Return the HTTP param macro value.
-     * Example: LINE1 returns the phone number, etc.
-     *
-     * @param macro The macro name
-     * @param mmsConfig The carrier configuration values
-     * @return The value of the defined macro
-     */
-    private String getHttpParamMacro(final String macro, final Bundle mmsConfig) {
-        if (MACRO_LINE1.equals(macro)) {
-            return getSelfNumber();
-        } else if (MACRO_LINE1NOCOUNTRYCODE.equals(macro)) {
-            return PhoneNumberHelper.getNumberNoCountryCode(
-                    getSelfNumber(), getSimOrLocaleCountry());
-        }  else if (MACRO_NAI.equals(macro)) {
-            return getEncodedNai(mmsConfig.getString(
-                    CarrierConfigValuesLoader.CONFIG_NAI_SUFFIX,
-                    CarrierConfigValuesLoader.CONFIG_NAI_SUFFIX_DEFAULT));
-        }
-        return null;
-    }
-
-    /**
-     * Get the device phone number
-     *
-     * @return the phone number text
-     */
-    private String getSelfNumber() {
-        if (Utils.supportMSim()) {
-            final SubscriptionManager subscriptionManager = SubscriptionManager.from(mContext);
-            final SubscriptionInfo info = subscriptionManager.getActiveSubscriptionInfo(
-                    SmsManager.getDefaultSmsSubscriptionId());
-            if (info != null) {
-                return info.getNumber();
-            } else {
-                return null;
-            }
-        } else {
-            return mTelephonyManager.getLine1Number();
-        }
-    }
-
-    /**
-     * Get the country ISO code from SIM or system locale
-     *
-     * @return the country ISO code
-     */
-    private String getSimOrLocaleCountry() {
-        String country = null;
-        if (Utils.supportMSim()) {
-            final SubscriptionManager subscriptionManager = SubscriptionManager.from(mContext);
-            final SubscriptionInfo info = subscriptionManager.getActiveSubscriptionInfo(
-                    SmsManager.getDefaultSmsSubscriptionId());
-            if (info != null) {
-                country = info.getCountryIso();
-            }
-        } else {
-            country = mTelephonyManager.getSimCountryIso();
-        }
-        if (!TextUtils.isEmpty(country)) {
-            return country.toUpperCase();
-        } else {
-            return Locale.getDefault().getCountry();
-        }
-    }
-
-    /**
-     * Get encoded NAI string to use as the HTTP header for some carriers.
-     * On L-MR1+, we call the hidden system API to get this
-     * On L-MR1-, we try to find it via system property.
-     *
-     * @param naiSuffix the suffix to append to NAI before encoding
-     * @return the Base64 encoded NAI string to use as HTTP header
-     */
-    private String getEncodedNai(final String naiSuffix) {
-        String nai;
-        if (Utils.supportMSim()) {
-            nai = getNaiBySystemApi(
-                    getSlotId(Utils.getEffectiveSubscriptionId(MmsManager.DEFAULT_SUB_ID)));
-        } else {
-            nai = getNaiBySystemProperty();
-        }
-        if (!TextUtils.isEmpty(nai)) {
-            Log.i(MmsService.TAG, "NAI is not empty");
-            if (!TextUtils.isEmpty(naiSuffix)) {
-                nai = nai + naiSuffix;
-            }
-            byte[] encoded = null;
-            try {
-                encoded = Base64.encode(nai.getBytes("UTF-8"), Base64.NO_WRAP);
-            } catch (UnsupportedEncodingException e) {
-                encoded = Base64.encode(nai.getBytes(), Base64.NO_WRAP);
-            }
-            try {
-                return new String(encoded, "UTF-8");
-            } catch (UnsupportedEncodingException e) {
-                return new String(encoded);
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Invoke hidden SubscriptionManager.getSlotIndex(int)
-     *
-     * @param subId the subId
-     * @return the SIM slot ID
-     */
-    private static int getSlotId(final int subId) {
-        try {
-            final Method method = SubscriptionManager.class.getMethod("getSlotIndex", Integer.TYPE);
-            if (method != null) {
-                return (Integer) method.invoke(null, subId);
-            }
-        } catch (Exception e) {
-            Log.w(MmsService.TAG, "SubscriptionManager.getSlotIndex failed " + e);
-        }
-        return -1;
-    }
-
-    /**
-     * Get NAI using hidden TelephonyManager.getNai(int)
-     *
-     * @param slotId the SIM slot ID
-     * @return the NAI string
-     */
-    private String getNaiBySystemApi(final int slotId) {
-        try {
-            final Method method = mTelephonyManager.getClass().getMethod("getNai", Integer.TYPE);
-            if (method != null) {
-                return (String) method.invoke(mTelephonyManager, slotId);
-            }
-        } catch (Exception e) {
-            Log.w(MmsService.TAG, "TelephonyManager.getNai failed " + e);
-        }
-        return null;
-    }
-
-    /**
-     * Get NAI using hidden SystemProperties.get(String)
-     *
-     * @return the NAI string as system property
-     */
-    private static String getNaiBySystemProperty() {
-        try {
-            final Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
-            if (systemPropertiesClass != null) {
-                final Method method = systemPropertiesClass.getMethod("get", String.class);
-                if (method != null) {
-                    return (String) method.invoke(null, NAI_PROPERTY);
-                }
-            }
-        } catch (Exception e) {
-            Log.w(MmsService.TAG, "SystemProperties.get failed " + e);
-        }
-        return null;
-    }
-}
diff --git a/src/android/support/v7/mms/MmsHttpException.java b/src/android/support/v7/mms/MmsHttpException.java
deleted file mode 100644
index 545c66d..0000000
--- a/src/android/support/v7/mms/MmsHttpException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-/**
- * HTTP exception
- */
-public class MmsHttpException extends Exception {
-    // Optional HTTP status code. 0 means ignore. Otherwise this
-    // should be a valid HTTP status code.
-    private final int mStatusCode;
-
-    public MmsHttpException(int statusCode) {
-        super();
-        mStatusCode = statusCode;
-    }
-
-    public MmsHttpException(int statusCode, String message) {
-        super(message);
-        mStatusCode = statusCode;
-    }
-
-    public MmsHttpException(int statusCode, Throwable cause) {
-        super(cause);
-        mStatusCode = statusCode;
-    }
-
-    public MmsHttpException(int statusCode, String message, Throwable cause) {
-        super(message, cause);
-        mStatusCode = statusCode;
-    }
-
-    public int getStatusCode() {
-        return mStatusCode;
-    }
-}
diff --git a/src/android/support/v7/mms/MmsManager.java b/src/android/support/v7/mms/MmsManager.java
deleted file mode 100644
index 642a141..0000000
--- a/src/android/support/v7/mms/MmsManager.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.app.PendingIntent;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Bundle;
-import android.telephony.SmsManager;
-import android.util.SparseArray;
-
-/**
- * The public interface of MMS library
- */
-public class MmsManager {
-    /**
-     * Default subscription ID
-     */
-    public static final int DEFAULT_SUB_ID = -1;
-
-    // Whether to force legacy MMS sending
-    private static volatile boolean sForceLegacyMms = false;
-
-    // Cached computed overrides for carrier configuration values
-    private static SparseArray<Bundle> sConfigOverridesMap = new SparseArray<>();
-
-    /**
-     * Set the flag about whether to force to use legacy system APIs instead of system MMS API
-     *
-     * @param forceLegacyMms value to set
-     */
-    public static void setForceLegacyMms(boolean forceLegacyMms) {
-        sForceLegacyMms = forceLegacyMms;
-    }
-
-    /**
-     * Set the size of thread pool for request execution.
-     *
-     * Default is 4
-     *
-     * Note: if system MMS API is used, this has no effect
-     *
-     * @param size thread pool size
-     */
-    public static void setThreadPoolSize(int size) {
-        MmsService.setThreadPoolSize(size);
-    }
-
-    /**
-     * Set whether to use wake lock while sending or downloading MMS.
-     *
-     * Default value is true
-     *
-     * Note: if system MMS API is used, this has no effect
-     *
-     * @param useWakeLock true to use wake lock, false otherwise
-     */
-    public static void setUseWakeLock(final boolean useWakeLock) {
-        MmsService.setUseWakeLock(useWakeLock);
-    }
-
-    /**
-     * Set the optional carrier config values loader
-     *
-     * Note: if system MMS API is used, this is used to compute the overrides
-     * of carrier configuration values
-     *
-     * @param loader the carrier config values loader
-     */
-    public static void setCarrierConfigValuesLoader(CarrierConfigValuesLoader loader) {
-        if (loader == null) {
-            throw new IllegalArgumentException("Carrier configuration loader can not be empty");
-        }
-        synchronized (sConfigOverridesMap) {
-            MmsService.setCarrierConfigValuesLoader(loader);
-            sConfigOverridesMap.clear();
-        }
-    }
-
-    /**
-     * Set the optional APN settings loader
-     *
-     * Note: if system MMS API is used, this has no effect
-     *
-     * @param loader the APN settings loader
-     */
-    public static void setApnSettingsLoader(ApnSettingsLoader loader) {
-        if (loader == null) {
-            throw new IllegalArgumentException("APN settings loader can not be empty");
-        }
-        MmsService.setApnSettingsLoader(loader);
-    }
-
-    /**
-     * Set user agent info loader
-     *
-     * Note: if system MMS API is used, this is used to compute the overrides
-     * of carrier configuration values
-
-     * @param loader the user agent info loader
-     */
-    public static void setUserAgentInfoLoader(final UserAgentInfoLoader loader) {
-        if (loader == null) {
-            throw new IllegalArgumentException("User agent info loader can not be empty");
-        }
-        synchronized (sConfigOverridesMap) {
-            MmsService.setUserAgentInfoLoader(loader);
-            sConfigOverridesMap.clear();
-        }
-    }
-
-    /**
-     * Send MMS via platform MMS API (if platform supports and not forced to
-     * use legacy APIs) or legacy APIs
-     *
-     * @param subId the subscription ID of the SIM to use
-     * @param context the Context to use
-     * @param contentUri the content URI of the PDU to be sent
-     * @param locationUrl the optional location URL to use for sending
-     * @param sentIntent the pending intent for returning results
-     */
-    public static void sendMultimediaMessage(int subId, Context context, Uri contentUri,
-            String locationUrl, PendingIntent sentIntent) {
-        if (shouldUseLegacyMms()) {
-            MmsService.startRequest(context, new SendRequest(locationUrl, contentUri, sentIntent));
-        } else {
-            subId = Utils.getEffectiveSubscriptionId(subId);
-            final SmsManager smsManager = Utils.getSmsManager(subId);
-            smsManager.sendMultimediaMessage(context, contentUri, locationUrl,
-                    getConfigOverrides(subId), sentIntent);
-        }
-    }
-
-    /**
-     * Download MMS via platform MMS API (if platform supports and not forced to
-     * use legacy APIs) or legacy APIs
-     *
-     * @param subId the subscription ID of the SIM to use
-     * @param context the Context to use
-     * @param contentUri the content URI of the PDU to be sent
-     * @param locationUrl the optional location URL to use for sending
-     * @param downloadedIntent the pending intent for returning results
-     */
-    public static void downloadMultimediaMessage(int subId, Context context, String locationUrl,
-            Uri contentUri, PendingIntent downloadedIntent) {
-        if (shouldUseLegacyMms()) {
-            MmsService.startRequest(context,
-                    new DownloadRequest(locationUrl, contentUri, downloadedIntent));
-        } else {
-            subId = Utils.getEffectiveSubscriptionId(subId);
-            final SmsManager smsManager = Utils.getSmsManager(subId);
-            smsManager.downloadMultimediaMessage(context, locationUrl, contentUri,
-                    getConfigOverrides(subId), downloadedIntent);
-        }
-    }
-
-    /**
-     * Checks if we should use legacy APIs for MMS.
-     *
-     * @return true if forced to use legacy APIs or platform doesn't supports MMS APIs.
-     */
-    public static boolean shouldUseLegacyMms() {
-        return sForceLegacyMms || !Utils.hasMmsApi();
-    }
-
-    /**
-     * Get carrier configuration values overrides when platform MMS API is called.
-     * We only need to compute this if customized carrier config values loader or
-     * user agent info loader are set
-     *
-     * @param subId the ID of the SIM to use
-     * @return a Bundle containing the overrides
-     */
-    private static Bundle getConfigOverrides(final int subId) {
-        if (!Utils.hasMmsApi()) {
-            // If MMS API is not present, it is not necessary to compute overrides
-            return null;
-        }
-        Bundle overrides = null;
-        synchronized (sConfigOverridesMap) {
-            overrides = sConfigOverridesMap.get(subId);
-            if (overrides == null) {
-                overrides = new Bundle();
-                sConfigOverridesMap.put(subId, overrides);
-                computeOverridesLocked(subId, overrides);
-            }
-        }
-        return overrides;
-    }
-
-    /**
-     * Compute the overrides, incorporating the user agent info
-     *
-     * @param subId the subId of the SIM to use
-     * @param overrides the computed values overrides
-     */
-    private static void computeOverridesLocked(final int subId, final Bundle overrides) {
-        // Overrides not computed yet
-        final CarrierConfigValuesLoader carrierConfigValuesLoader =
-                MmsService.getCarrierConfigValuesLoader();
-        if (carrierConfigValuesLoader != null &&
-                !(carrierConfigValuesLoader instanceof DefaultCarrierConfigValuesLoader)) {
-            // Compute the overrides for carrier config values first if the config loader
-            // is not the default one.
-            final Bundle systemValues = Utils.getSmsManager(subId).getCarrierConfigValues();
-            final Bundle callerValues =
-                    MmsService.getCarrierConfigValuesLoader().get(subId);
-            if (systemValues != null && callerValues != null) {
-                computeConfigDelta(systemValues, callerValues, overrides);
-            } else if (systemValues == null && callerValues != null) {
-                overrides.putAll(callerValues);
-            }
-        }
-        final UserAgentInfoLoader userAgentInfoLoader = MmsService.getUserAgentInfoLoader();
-        if (userAgentInfoLoader != null &&
-                !(userAgentInfoLoader instanceof DefaultUserAgentInfoLoader)) {
-            // Also set the user agent and ua prof url via the overrides
-            // if the user agent loader is not the default one.
-            overrides.putString(UserAgentInfoLoader.CONFIG_USER_AGENT,
-                    userAgentInfoLoader.getUserAgent());
-            overrides.putString(UserAgentInfoLoader.CONFIG_UA_PROF_URL,
-                    userAgentInfoLoader.getUAProfUrl());
-        }
-    }
-
-    /**
-     * Compute the delta between two sets of carrier configuration values: system and caller
-     *
-     * @param systemValues the system config values
-     * @param callerValues the caller's config values
-     * @param delta the delta of values (caller - system), using caller value to override system's
-     */
-    private static void computeConfigDelta(final Bundle systemValues, final Bundle callerValues,
-            final Bundle delta) {
-        for (final String key : callerValues.keySet()) {
-            final Object callerValue = callerValues.get(key);
-            final Object systemValue = systemValues.get(key);
-            if ((callerValue != null && systemValue != null && !callerValue.equals(systemValue)) ||
-                    (callerValue != null && systemValue == null) ||
-                    (callerValue == null && systemValue != null)) {
-                if (callerValue == null || callerValue instanceof String) {
-                    delta.putString(key, (String) callerValue);
-                } else if (callerValue instanceof Integer) {
-                    delta.putInt(key, (Integer) callerValue);
-                } else if (callerValue instanceof Boolean) {
-                    delta.putBoolean(key, (Boolean) callerValue);
-                }
-            }
-        }
-    }
-}
diff --git a/src/android/support/v7/mms/MmsNetworkException.java b/src/android/support/v7/mms/MmsNetworkException.java
deleted file mode 100644
index 77e0912..0000000
--- a/src/android/support/v7/mms/MmsNetworkException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-/**
- * MMS network exception
- */
-class MmsNetworkException extends Exception {
-
-    public MmsNetworkException() {
-        super();
-    }
-
-    public MmsNetworkException(String message) {
-        super(message);
-    }
-
-    public MmsNetworkException(Throwable cause) {
-        super(cause);
-    }
-
-    public MmsNetworkException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}
diff --git a/src/android/support/v7/mms/MmsNetworkManager.java b/src/android/support/v7/mms/MmsNetworkManager.java
deleted file mode 100644
index 1021b5a..0000000
--- a/src/android/support/v7/mms/MmsNetworkManager.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.os.Build;
-import android.os.SystemClock;
-import android.util.Log;
-
-import java.lang.reflect.Method;
-import java.util.Timer;
-import java.util.TimerTask;
-
-/**
- * Class manages MMS network connectivity using legacy platform APIs
- * (deprecated since Android L) on pre-L devices (or when forced to
- * be used on L and later)
- */
-class MmsNetworkManager {
-    // Hidden platform constants
-    private static final String FEATURE_ENABLE_MMS = "enableMMS";
-    private static final String REASON_VOICE_CALL_ENDED = "2GVoiceCallEnded";
-    private static final int APN_ALREADY_ACTIVE     = 0;
-    private static final int APN_REQUEST_STARTED    = 1;
-    private static final int APN_TYPE_NOT_AVAILABLE = 2;
-    private static final int APN_REQUEST_FAILED     = 3;
-    private static final int APN_ALREADY_INACTIVE   = 4;
-    // A map from platform APN constant to text string
-    private static final String[] APN_RESULT_STRING = new String[]{
-            "already active",
-            "request started",
-            "type not available",
-            "request failed",
-            "already inactive",
-            "unknown",
-    };
-
-    private static final long NETWORK_ACQUIRE_WAIT_INTERVAL_MS = 15000;
-    private static final long DEFAULT_NETWORK_ACQUIRE_TIMEOUT_MS = 180000;
-    private static final String MMS_NETWORK_EXTENSION_TIMER = "mms_network_extension_timer";
-    private static final long MMS_NETWORK_EXTENSION_TIMER_WAIT_MS = 30000;
-
-    private static volatile long sNetworkAcquireTimeoutMs = DEFAULT_NETWORK_ACQUIRE_TIMEOUT_MS;
-
-    /**
-     * Set the network acquire timeout
-     *
-     * @param timeoutMs timeout in millisecond
-     */
-    static void setNetworkAcquireTimeout(final long timeoutMs) {
-        sNetworkAcquireTimeoutMs = timeoutMs;
-    }
-
-    private final Context mContext;
-    private final ConnectivityManager mConnectivityManager;
-
-    // If the connectivity intent receiver is registered
-    private boolean mReceiverRegistered;
-    // Count of requests that are using the MMS network
-    private int mUseCount;
-    // Count of requests that are waiting for connectivity (i.e. in acquireNetwork wait loop)
-    private int mWaitCount;
-    // Timer to extend the network connectivity
-    private Timer mExtensionTimer;
-
-    private final MmsHttpClient mHttpClient;
-
-    private final IntentFilter mConnectivityIntentFilter;
-    private final BroadcastReceiver mConnectivityChangeReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(final Context context, final Intent intent) {
-            if (!ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
-                return;
-            }
-            final int networkType = getConnectivityChangeNetworkType(intent);
-            if (networkType != ConnectivityManager.TYPE_MOBILE_MMS) {
-                return;
-            }
-            onMmsConnectivityChange(context, intent);
-        }
-    };
-
-    MmsNetworkManager(final Context context) {
-        mContext = context;
-        mConnectivityManager = (ConnectivityManager) mContext.getSystemService(
-                Context.CONNECTIVITY_SERVICE);
-        mHttpClient = new MmsHttpClient(mContext);
-        mConnectivityIntentFilter = new IntentFilter();
-        mConnectivityIntentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
-        mUseCount = 0;
-        mWaitCount = 0;
-    }
-
-    ConnectivityManager getConnectivityManager() {
-        return mConnectivityManager;
-    }
-
-    MmsHttpClient getHttpClient() {
-        return mHttpClient;
-    }
-
-    /**
-     * Synchronously acquire MMS network connectivity
-     *
-     * @throws MmsNetworkException If failed permanently or timed out
-     */
-    void acquireNetwork() throws MmsNetworkException {
-        Log.i(MmsService.TAG, "Acquire MMS network");
-        synchronized (this) {
-            try {
-                mUseCount++;
-                mWaitCount++;
-                if (mWaitCount == 1) {
-                    // Register the receiver for the first waiting request
-                    registerConnectivityChangeReceiverLocked();
-                }
-                long waitMs = sNetworkAcquireTimeoutMs;
-                final long beginMs = SystemClock.elapsedRealtime();
-                do {
-                    if (!isMobileDataEnabled()) {
-                        // Fast fail if mobile data is not enabled
-                        throw new MmsNetworkException("Mobile data is disabled");
-                    }
-                    // Always try to extend and check the MMS network connectivity
-                    // before we start waiting to make sure we don't miss the change
-                    // of MMS connectivity. As one example, some devices fail to send
-                    // connectivity change intent. So this would make sure we catch
-                    // the state change.
-                    if (extendMmsConnectivityLocked()) {
-                        // Connected
-                        return;
-                    }
-                    try {
-                        wait(Math.min(waitMs, NETWORK_ACQUIRE_WAIT_INTERVAL_MS));
-                    } catch (final InterruptedException e) {
-                        Log.w(MmsService.TAG, "Unexpected exception", e);
-                    }
-                    // Calculate the remaining time to wait
-                    waitMs = sNetworkAcquireTimeoutMs - (SystemClock.elapsedRealtime() - beginMs);
-                } while (waitMs > 0);
-                // Last check
-                if (extendMmsConnectivityLocked()) {
-                    return;
-                } else {
-                    // Reaching here means timed out.
-                    throw new MmsNetworkException("Acquiring MMS network timed out");
-                }
-            } finally {
-                mWaitCount--;
-                if (mWaitCount == 0) {
-                    // Receiver is used to listen to connectivity change and unblock
-                    // the waiting requests. If nobody's waiting on change, there is
-                    // no need for the receiver. The auto extension timer will try
-                    // to maintain the connectivity periodically.
-                    unregisterConnectivityChangeReceiverLocked();
-                }
-            }
-        }
-    }
-
-    /**
-     * Release MMS network connectivity. This is ref counted. So it only disconnect
-     * when the ref count is 0.
-     */
-    void releaseNetwork() {
-        Log.i(MmsService.TAG, "release MMS network");
-        synchronized (this) {
-            mUseCount--;
-            if (mUseCount == 0) {
-                stopNetworkExtensionTimerLocked();
-                endMmsConnectivity();
-            }
-        }
-    }
-
-    String getApnName() {
-        String apnName = null;
-        final NetworkInfo mmsNetworkInfo = mConnectivityManager.getNetworkInfo(
-                ConnectivityManager.TYPE_MOBILE_MMS);
-        if (mmsNetworkInfo != null) {
-            apnName = mmsNetworkInfo.getExtraInfo();
-        }
-        return apnName;
-    }
-
-    // Process mobile MMS connectivity change, waking up the waiting request thread
-    // in certain conditions:
-    // - Successfully connected
-    // - Failed permanently
-    // - Required another kickoff
-    // We don't initiate connection here but just notifyAll so the waiting request
-    // would wake up and retry connection before next wait.
-    private void onMmsConnectivityChange(final Context context, final Intent intent) {
-        if (mUseCount < 1) {
-            return;
-        }
-        final NetworkInfo mmsNetworkInfo =
-                mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS);
-        // Check availability of the mobile network.
-        if (mmsNetworkInfo != null) {
-            if (REASON_VOICE_CALL_ENDED.equals(mmsNetworkInfo.getReason())) {
-                // This is a very specific fix to handle the case where the phone receives an
-                // incoming call during the time we're trying to setup the mms connection.
-                // When the call ends, restart the process of mms connectivity.
-                // Once the waiting request is unblocked, before the next wait, we would start
-                // MMS network again.
-                unblockWait();
-            } else {
-                final NetworkInfo.State state = mmsNetworkInfo.getState();
-                if (state == NetworkInfo.State.CONNECTED ||
-                        (state == NetworkInfo.State.DISCONNECTED && !isMobileDataEnabled())) {
-                    // Unblock the waiting request when we either connected
-                    // OR
-                    // disconnected due to mobile data disabled therefore needs to fast fail
-                    // (on some devices if mobile data disabled and starting MMS would cause
-                    // an immediate state change to disconnected, so causing a tight loop of
-                    // trying and failing)
-                    // Once the waiting request is unblocked, before the next wait, we would
-                    // check mobile data and start MMS network again. So we should catch
-                    // both the success and the fast failure.
-                    unblockWait();
-                }
-            }
-        }
-    }
-
-    private void unblockWait() {
-        synchronized (this) {
-            notifyAll();
-        }
-    }
-
-    private void startNetworkExtensionTimerLocked() {
-        if (mExtensionTimer == null) {
-            mExtensionTimer = new Timer(MMS_NETWORK_EXTENSION_TIMER, true/*daemon*/);
-            mExtensionTimer.schedule(
-                    new TimerTask() {
-                        @Override
-                        public void run() {
-                            synchronized (this) {
-                                if (mUseCount > 0) {
-                                    try {
-                                        // Try extending the connectivity
-                                        extendMmsConnectivityLocked();
-                                    } catch (final MmsNetworkException e) {
-                                        // Ignore the exception
-                                    }
-                                }
-                            }
-                        }
-                    },
-                    MMS_NETWORK_EXTENSION_TIMER_WAIT_MS);
-        }
-    }
-
-    private void stopNetworkExtensionTimerLocked() {
-        if (mExtensionTimer != null) {
-            mExtensionTimer.cancel();
-            mExtensionTimer = null;
-        }
-    }
-
-    private boolean extendMmsConnectivityLocked() throws MmsNetworkException {
-        final int result = startMmsConnectivity();
-        if (result == APN_ALREADY_ACTIVE) {
-            // Already active
-            startNetworkExtensionTimerLocked();
-            return true;
-        } else if (result != APN_REQUEST_STARTED) {
-            stopNetworkExtensionTimerLocked();
-            throw new MmsNetworkException("Cannot acquire MMS network: " +
-                    result + " - " + getMmsConnectivityResultString(result));
-        }
-        return false;
-    }
-
-    private int startMmsConnectivity() {
-        Log.i(MmsService.TAG, "Start MMS connectivity");
-        try {
-            final Method method = mConnectivityManager.getClass().getMethod(
-                "startUsingNetworkFeature", Integer.TYPE, String.class);
-            if (method != null) {
-                return (Integer) method.invoke(
-                    mConnectivityManager, ConnectivityManager.TYPE_MOBILE, FEATURE_ENABLE_MMS);
-            }
-        } catch (final Exception e) {
-            Log.w(MmsService.TAG, "ConnectivityManager.startUsingNetworkFeature failed " + e);
-        }
-        return APN_REQUEST_FAILED;
-    }
-
-    private void endMmsConnectivity() {
-        Log.i(MmsService.TAG, "End MMS connectivity");
-        try {
-            final Method method = mConnectivityManager.getClass().getMethod(
-                "stopUsingNetworkFeature", Integer.TYPE, String.class);
-            if (method != null) {
-                method.invoke(
-                        mConnectivityManager, ConnectivityManager.TYPE_MOBILE, FEATURE_ENABLE_MMS);
-            }
-        } catch (final Exception e) {
-            Log.w(MmsService.TAG, "ConnectivityManager.stopUsingNetworkFeature failed " + e);
-        }
-    }
-
-    private void registerConnectivityChangeReceiverLocked() {
-        if (!mReceiverRegistered) {
-            mContext.registerReceiver(mConnectivityChangeReceiver, mConnectivityIntentFilter,
-                    Context.RECEIVER_EXPORTED/*UNAUDITED*/);
-            mReceiverRegistered = true;
-        }
-    }
-
-    private void unregisterConnectivityChangeReceiverLocked() {
-        if (mReceiverRegistered) {
-            mContext.unregisterReceiver(mConnectivityChangeReceiver);
-            mReceiverRegistered = false;
-        }
-    }
-
-    /**
-     * The absence of a connection type.
-     */
-    private static final int TYPE_NONE = -1;
-
-    /**
-     * Get the network type of the connectivity change
-     *
-     * @param intent the broadcast intent of connectivity change
-     * @return The change's network type
-     */
-    private static int getConnectivityChangeNetworkType(final Intent intent) {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
-            return intent.getIntExtra(ConnectivityManager.EXTRA_NETWORK_TYPE, TYPE_NONE);
-        } else {
-            final NetworkInfo info = intent.getParcelableExtra(
-                    ConnectivityManager.EXTRA_NETWORK_INFO);
-            if (info != null) {
-                return info.getType();
-            }
-        }
-        return TYPE_NONE;
-    }
-
-    private static String getMmsConnectivityResultString(int result) {
-        if (result < 0 || result >= APN_RESULT_STRING.length) {
-            result = APN_RESULT_STRING.length - 1;
-        }
-        return APN_RESULT_STRING[result];
-    }
-
-    private boolean isMobileDataEnabled() {
-        try {
-            final Class cmClass = mConnectivityManager.getClass();
-            final Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
-            method.setAccessible(true); // Make the method callable
-            // get the setting for "mobile data"
-            return (Boolean) method.invoke(mConnectivityManager);
-        } catch (final Exception e) {
-            Log.w(MmsService.TAG, "TelephonyManager.getMobileDataEnabled failed", e);
-        }
-        return false;
-    }
-}
diff --git a/src/android/support/v7/mms/MmsRequest.java b/src/android/support/v7/mms/MmsRequest.java
deleted file mode 100644
index b96902e..0000000
--- a/src/android/support/v7/mms/MmsRequest.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.app.Activity;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.net.ConnectivityManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import androidx.appcompat.mms.pdu.GenericPdu;
-import androidx.appcompat.mms.pdu.PduHeaders;
-import androidx.appcompat.mms.pdu.PduParser;
-import androidx.appcompat.mms.pdu.SendConf;
-import android.telephony.SmsManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.lang.reflect.Method;
-import java.net.Inet4Address;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-/**
- * MMS request base class. This handles the execution of any MMS request.
- */
-abstract class MmsRequest implements Parcelable {
-    /**
-     * Prepare to make the HTTP request - will download message for sending
-     *
-     * @param context the Context
-     * @param mmsConfig carrier config values to use
-     * @return true if loading request PDU from calling app succeeds, false otherwise
-     */
-    protected abstract boolean loadRequest(Context context, Bundle mmsConfig);
-
-    /**
-     * Transfer the received response to the caller
-     *
-     * @param context the Context
-     * @param fillIn the content of pending intent to be returned
-     * @param response the pdu to transfer
-     * @return true if transferring response PDU to calling app succeeds, false otherwise
-     */
-    protected abstract boolean transferResponse(Context context, Intent fillIn, byte[] response);
-
-    /**
-     * Making the HTTP request to MMSC
-     *
-     * @param context The context
-     * @param netMgr The current {@link MmsNetworkManager}
-     * @param apn The APN
-     * @param mmsConfig The carrier configuration values to use
-     * @param userAgent The User-Agent header value
-     * @param uaProfUrl The UA Prof URL header value
-     * @return The HTTP response data
-     * @throws MmsHttpException If any network error happens
-     */
-    protected abstract byte[] doHttp(Context context, MmsNetworkManager netMgr,
-            ApnSettingsLoader.Apn apn, Bundle mmsConfig, String userAgent, String uaProfUrl)
-            throws MmsHttpException;
-
-    /**
-     * Get the HTTP request URL for this MMS request
-     *
-     * @param apn The APN to use
-     * @return The HTTP request URL in text
-     */
-    protected abstract String getHttpRequestUrl(ApnSettingsLoader.Apn apn);
-
-    // Maximum time to spend waiting to read data from a content provider before failing with error.
-    protected static final int TASK_TIMEOUT_MS = 30 * 1000;
-
-    protected final String mLocationUrl;
-    protected final Uri mPduUri;
-    protected final PendingIntent mPendingIntent;
-    // Thread pool for transferring PDU with MMS apps
-    protected final ExecutorService mPduTransferExecutor = Executors.newCachedThreadPool();
-
-    // Whether this request should acquire wake lock
-    private boolean mUseWakeLock;
-
-    protected MmsRequest(final String locationUrl, final Uri pduUri,
-            final PendingIntent pendingIntent) {
-        mLocationUrl = locationUrl;
-        mPduUri = pduUri;
-        mPendingIntent = pendingIntent;
-        mUseWakeLock = true;
-    }
-
-    void setUseWakeLock(final boolean useWakeLock) {
-        mUseWakeLock = useWakeLock;
-    }
-
-    boolean getUseWakeLock() {
-        return mUseWakeLock;
-    }
-
-    /**
-     * Run the MMS request.
-     *
-     * @param context the context to use
-     * @param networkManager the MmsNetworkManager to use to setup MMS network
-     * @param apnSettingsLoader the APN loader
-     * @param carrierConfigValuesLoader the carrier config loader
-     * @param userAgentInfoLoader the user agent info loader
-     */
-    void execute(final Context context, final MmsNetworkManager networkManager,
-            final ApnSettingsLoader apnSettingsLoader,
-            final CarrierConfigValuesLoader carrierConfigValuesLoader,
-            final UserAgentInfoLoader userAgentInfoLoader) {
-        Log.i(MmsService.TAG, "Execute " + this.getClass().getSimpleName());
-        int result = SmsManager.MMS_ERROR_UNSPECIFIED;
-        int httpStatusCode = 0;
-        byte[] response = null;
-        final Bundle mmsConfig = carrierConfigValuesLoader.get(MmsManager.DEFAULT_SUB_ID);
-        if (mmsConfig == null) {
-            Log.e(MmsService.TAG, "Failed to load carrier configuration values");
-            result = SmsManager.MMS_ERROR_CONFIGURATION_ERROR;
-        } else if (!loadRequest(context, mmsConfig)) {
-            Log.e(MmsService.TAG, "Failed to load PDU");
-            result = SmsManager.MMS_ERROR_IO_ERROR;
-        } else {
-            // Everything's OK. Now execute the request.
-            try {
-                // Acquire the MMS network
-                networkManager.acquireNetwork();
-                // Load the potential APNs. In most cases there should be only one APN available.
-                // On some devices on which we can't obtain APN from system, we look up our own
-                // APN list. Since we don't have exact information, we may get a list of potential
-                // APNs to try. Whenever we found a successful APN, we signal it and return.
-                final String apnName = networkManager.getApnName();
-                final List<ApnSettingsLoader.Apn> apns = apnSettingsLoader.get(apnName);
-                if (apns.size() < 1) {
-                    throw new ApnException("No valid APN");
-                } else {
-                    Log.d(MmsService.TAG, "Trying " + apns.size() + " APNs");
-                }
-                final String userAgent = userAgentInfoLoader.getUserAgent();
-                final String uaProfUrl = userAgentInfoLoader.getUAProfUrl();
-                MmsHttpException lastException = null;
-                for (ApnSettingsLoader.Apn apn : apns) {
-                    Log.i(MmsService.TAG, "Using APN ["
-                            + "MMSC=" + apn.getMmsc() + ", "
-                            + "PROXY=" + apn.getMmsProxy() + ", "
-                            + "PORT=" + apn.getMmsProxyPort() + "]");
-                    try {
-                        final String url = getHttpRequestUrl(apn);
-                        // Request a global route for the host to connect
-                        requestRoute(networkManager.getConnectivityManager(), apn, url);
-                        // Perform the HTTP request
-                        response = doHttp(
-                                context, networkManager, apn, mmsConfig, userAgent, uaProfUrl);
-                        // Additional check of whether this is a success
-                        if (isWrongApnResponse(response, mmsConfig)) {
-                            throw new MmsHttpException(0/*statusCode*/, "Invalid sending address");
-                        }
-                        // Notify APN loader this is a valid APN
-                        apn.setSuccess();
-                        result = Activity.RESULT_OK;
-                        break;
-                    } catch (MmsHttpException e) {
-                        Log.w(MmsService.TAG, "HTTP or network failure", e);
-                        lastException = e;
-                    }
-                }
-                if (lastException != null) {
-                    throw lastException;
-                }
-            } catch (ApnException e) {
-                Log.e(MmsService.TAG, "MmsRequest: APN failure", e);
-                result = SmsManager.MMS_ERROR_INVALID_APN;
-            } catch (MmsNetworkException e) {
-                Log.e(MmsService.TAG, "MmsRequest: MMS network acquiring failure", e);
-                result = SmsManager.MMS_ERROR_UNABLE_CONNECT_MMS;
-            } catch (MmsHttpException e) {
-                Log.e(MmsService.TAG, "MmsRequest: HTTP or network I/O failure", e);
-                result = SmsManager.MMS_ERROR_HTTP_FAILURE;
-                httpStatusCode = e.getStatusCode();
-            } catch (Exception e) {
-                Log.e(MmsService.TAG, "MmsRequest: unexpected failure", e);
-                result = SmsManager.MMS_ERROR_UNSPECIFIED;
-            } finally {
-                // Release MMS network
-                networkManager.releaseNetwork();
-            }
-        }
-        // Process result and send back via PendingIntent
-        returnResult(context, result, response, httpStatusCode);
-    }
-
-    /**
-     * Check if the response indicates a failure when we send to wrong APN.
-     * Sometimes even if you send to the wrong APN, a response in valid PDU format can still
-     * be sent back but with an error status. Check one specific case here.
-     *
-     * TODO: maybe there are other possibilities.
-     *
-     * @param response the response data
-     * @param mmsConfig the carrier configuration values to use
-     * @return false if we find an invalid response case, otherwise true
-     */
-    static boolean isWrongApnResponse(final byte[] response, final Bundle mmsConfig) {
-        if (response != null && response.length > 0) {
-            try {
-                final GenericPdu pdu = new PduParser(
-                        response,
-                        mmsConfig.getBoolean(
-                                CarrierConfigValuesLoader
-                                        .CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION,
-                                CarrierConfigValuesLoader
-                                        .CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION_DEFAULT))
-                        .parse();
-                if (pdu != null && pdu instanceof SendConf) {
-                    final SendConf sendConf = (SendConf) pdu;
-                    final int responseStatus = sendConf.getResponseStatus();
-                    return responseStatus ==
-                            PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_SENDING_ADDRESS_UNRESOLVED ||
-                            responseStatus ==
-                                    PduHeaders.RESPONSE_STATUS_ERROR_SENDING_ADDRESS_UNRESOLVED;
-                }
-            } catch (RuntimeException e) {
-                Log.w(MmsService.TAG, "Parsing response failed", e);
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Return the result back via pending intent
-     *
-     * @param context The context
-     * @param result The result code of execution
-     * @param response The response body
-     * @param httpStatusCode The optional http status code in case of http failure
-     */
-    void returnResult(final Context context, int result, final byte[] response,
-            final int httpStatusCode) {
-        if (mPendingIntent == null) {
-            // Result not needed
-            return;
-        }
-        // Extra information to send back with the pending intent
-        final Intent fillIn = new Intent();
-        if (response != null) {
-            if (!transferResponse(context, fillIn, response)) {
-                // Failed to send PDU data back to caller
-                result = SmsManager.MMS_ERROR_IO_ERROR;
-            }
-        }
-        if (result == SmsManager.MMS_ERROR_HTTP_FAILURE && httpStatusCode != 0) {
-            // For HTTP failure, fill in the status code for more information
-            fillIn.putExtra(SmsManager.EXTRA_MMS_HTTP_STATUS, httpStatusCode);
-        }
-        try {
-            mPendingIntent.send(context, result, fillIn);
-        } catch (PendingIntent.CanceledException e) {
-            Log.e(MmsService.TAG, "Sending pending intent canceled", e);
-        }
-    }
-
-    /**
-     * Request the route to the APN (either proxy host or the MMSC host)
-     *
-     * @param connectivityManager the ConnectivityManager to use
-     * @param apn the current APN
-     * @param url the URL to connect to
-     * @throws MmsHttpException for unknown host or route failure
-     */
-    private static void requestRoute(final ConnectivityManager connectivityManager,
-            final ApnSettingsLoader.Apn apn, final String url) throws MmsHttpException {
-        String host = apn.getMmsProxy();
-        if (TextUtils.isEmpty(host)) {
-            final Uri uri = Uri.parse(url);
-            host = uri.getHost();
-        }
-        boolean success = false;
-        // Request route to all resolved host addresses
-        try {
-            for (final InetAddress addr : InetAddress.getAllByName(host)) {
-                final boolean requested = requestRouteToHostAddress(connectivityManager, addr);
-                if (requested) {
-                    success = true;
-                    Log.i(MmsService.TAG, "Requested route to " + addr);
-                } else {
-                    Log.i(MmsService.TAG, "Could not requested route to " + addr);
-                }
-            }
-            if (!success) {
-                throw new MmsHttpException(0/*statusCode*/, "No route requested");
-            }
-        } catch (UnknownHostException e) {
-            Log.w(MmsService.TAG, "Unknown host " + host);
-            throw new MmsHttpException(0/*statusCode*/, "Unknown host");
-        }
-    }
-
-    private static final Integer TYPE_MOBILE_MMS =
-            Integer.valueOf(ConnectivityManager.TYPE_MOBILE_MMS);
-    /**
-     * Wrapper for platform API requestRouteToHostAddress
-     *
-     * We first try the hidden but correct method on ConnectivityManager. If we can't, use
-     * the old but buggy one
-     *
-     * @param connMgr the ConnectivityManager instance
-     * @param inetAddr the InetAddress to request
-     * @return true if route is successfully setup, false otherwise
-     */
-    private static boolean requestRouteToHostAddress(final ConnectivityManager connMgr,
-            final InetAddress inetAddr) {
-        // First try the good method using reflection
-        try {
-            final Method method = connMgr.getClass().getMethod("requestRouteToHostAddress",
-                    Integer.TYPE, InetAddress.class);
-            if (method != null) {
-                return (Boolean) method.invoke(connMgr, TYPE_MOBILE_MMS, inetAddr);
-            }
-        } catch (Exception e) {
-            Log.w(MmsService.TAG, "ConnectivityManager.requestRouteToHostAddress failed " + e);
-        }
-        // If we fail, try the old but buggy one
-        if (inetAddr instanceof Inet4Address) {
-            try {
-                final Method method = connMgr.getClass().getMethod("requestRouteToHost",
-                        Integer.TYPE, Integer.TYPE);
-                if (method != null) {
-                    return (Boolean) method.invoke(connMgr, TYPE_MOBILE_MMS,
-                        inetAddressToInt(inetAddr));
-                }
-            } catch (Exception e) {
-                Log.w(MmsService.TAG, "ConnectivityManager.requestRouteToHost failed " + e);
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Convert a IPv4 address from an InetAddress to an integer
-     *
-     * @param inetAddr is an InetAddress corresponding to the IPv4 address
-     * @return the IP address as an integer in network byte order
-     */
-    private static int inetAddressToInt(final InetAddress inetAddr)
-            throws IllegalArgumentException {
-        final byte [] addr = inetAddr.getAddress();
-        return ((addr[3] & 0xff) << 24) | ((addr[2] & 0xff) << 16) |
-                ((addr[1] & 0xff) << 8) | (addr[0] & 0xff);
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel parcel, int flags) {
-        parcel.writeByte((byte) (mUseWakeLock ? 1 : 0));
-        parcel.writeString(mLocationUrl);
-        parcel.writeParcelable(mPduUri, 0);
-        parcel.writeParcelable(mPendingIntent, 0);
-    }
-
-    protected MmsRequest(final Parcel in) {
-        final ClassLoader classLoader = MmsRequest.class.getClassLoader();
-        mUseWakeLock = in.readByte() != 0;
-        mLocationUrl = in.readString();
-        mPduUri = in.readParcelable(classLoader);
-        mPendingIntent = in.readParcelable(classLoader);
-    }
-}
diff --git a/src/android/support/v7/mms/MmsService.java b/src/android/support/v7/mms/MmsService.java
deleted file mode 100644
index fb2dee8..0000000
--- a/src/android/support/v7/mms/MmsService.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.PowerManager;
-import android.os.Process;
-import android.telephony.SmsManager;
-import android.util.Log;
-
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.RejectedExecutionException;
-
-/**
- * Service to execute MMS requests using deprecated legacy APIs on older platform (prior to L)
- */
-public class MmsService extends Service {
-    static final String TAG = "MmsLib";
-
-    //The default number of threads allowed to run MMS requests
-    private static final int DEFAULT_THREAD_POOL_SIZE = 4;
-    // Delay before stopping the service
-    private static final int SERVICE_STOP_DELAY_MILLIS = 2000;
-
-    private static final String EXTRA_REQUEST = "request";
-    private static final String EXTRA_MYPID = "mypid";
-
-    private static final String WAKELOCK_ID = "mmslib_wakelock";
-
-    /**
-     * Thread pool size for each request queue
-     */
-    private static volatile int sThreadPoolSize = DEFAULT_THREAD_POOL_SIZE;
-
-    /**
-     * Optional wake lock to use
-     */
-    private static volatile boolean sUseWakeLock = true;
-    private static volatile PowerManager.WakeLock sWakeLock = null;
-    private static final Object sWakeLockLock = new Object();
-
-    /**
-     * Carrier configuration values loader
-     */
-    private static volatile CarrierConfigValuesLoader sCarrierConfigValuesLoader = null;
-
-    /**
-     * APN loader
-     */
-    private static volatile ApnSettingsLoader sApnSettingsLoader = null;
-
-    /**
-     * UserAgent and UA Prof URL loader
-     */
-    private static volatile UserAgentInfoLoader sUserAgentInfoLoader = null;
-
-    /**
-     * Set the size of thread pool for request execution.
-     * Default is DEFAULT_THREAD_POOL_SIZE
-     *
-     * @param size thread pool size
-     */
-    static void setThreadPoolSize(final int size) {
-        sThreadPoolSize = size;
-    }
-
-    /**
-     * Set whether to use wake lock
-     *
-     * @param useWakeLock true to use wake lock, false otherwise
-     */
-    static void setUseWakeLock(final boolean useWakeLock) {
-        sUseWakeLock = useWakeLock;
-    }
-
-    /**
-     * Set the optional carrier config values
-     *
-     * @param loader the carrier config values loader
-     */
-    static void setCarrierConfigValuesLoader(final CarrierConfigValuesLoader loader) {
-        sCarrierConfigValuesLoader = loader;
-    }
-
-    /**
-     * Get the current carrier config values loader
-     *
-     * @return the carrier config values loader currently set
-     */
-    static CarrierConfigValuesLoader getCarrierConfigValuesLoader() {
-        return sCarrierConfigValuesLoader;
-    }
-
-    /**
-     * Set APN settings loader
-     *
-     * @param loader the APN settings loader
-     */
-    static void setApnSettingsLoader(final ApnSettingsLoader loader) {
-        sApnSettingsLoader = loader;
-    }
-
-    /**
-     * Get the current APN settings loader
-     *
-     * @return the APN settings loader currently set
-     */
-    static ApnSettingsLoader getApnSettingsLoader() {
-        return sApnSettingsLoader;
-    }
-
-    /**
-     * Set user agent info loader
-     *
-     * @param loader the user agent info loader
-     */
-    static void setUserAgentInfoLoader(final UserAgentInfoLoader loader) {
-        sUserAgentInfoLoader = loader;
-    }
-
-    /**
-     * Get the current user agent info loader
-     *
-     * @return the user agent info loader currently set
-     */
-    static UserAgentInfoLoader getUserAgentInfoLoader() {
-        return sUserAgentInfoLoader;
-    }
-
-    /**
-     * Make sure loaders are not null. Set to default if that's the case
-     *
-     * @param context the Context to use
-     */
-    private static void ensureLoaders(final Context context) {
-        if (sUserAgentInfoLoader == null) {
-            sUserAgentInfoLoader = new DefaultUserAgentInfoLoader(context);
-        }
-        if (sCarrierConfigValuesLoader == null) {
-            sCarrierConfigValuesLoader = new DefaultCarrierConfigValuesLoader(context);
-        }
-        if (sApnSettingsLoader == null) {
-            sApnSettingsLoader = new DefaultApnSettingsLoader(context);
-        }
-    }
-
-    /**
-     * Acquire the wake lock
-     *
-     * @param context the context to use
-     */
-    private static void acquireWakeLock(final Context context) {
-        synchronized (sWakeLockLock) {
-            if (sWakeLock == null) {
-                final PowerManager pm =
-                        (PowerManager) context.getSystemService(Context.POWER_SERVICE);
-                sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_ID);
-            }
-            sWakeLock.acquire();
-        }
-    }
-
-    /**
-     * Release the wake lock
-     */
-    private static void releaseWakeLock() {
-        boolean releasedEmptyWakeLock = false;
-        synchronized (sWakeLockLock) {
-            if (sWakeLock != null) {
-                sWakeLock.release();
-            } else {
-                releasedEmptyWakeLock = true;
-            }
-        }
-        if (releasedEmptyWakeLock) {
-            Log.w(TAG, "Releasing empty wake lock");
-        }
-    }
-
-    /**
-     * Check if wake lock is not held (e.g. when service stops)
-     */
-    private static void verifyWakeLockNotHeld() {
-        boolean wakeLockHeld = false;
-        synchronized (sWakeLockLock) {
-            wakeLockHeld = sWakeLock != null && sWakeLock.isHeld();
-        }
-        if (wakeLockHeld) {
-            Log.e(TAG, "Wake lock still held!");
-        }
-    }
-
-    // Remember my PID to discard restarted intent
-    private static volatile int sMyPid = -1;
-
-    /**
-     * Get the current PID
-     *
-     * @return the current PID
-     */
-    private static int getMyPid() {
-        if (sMyPid < 0) {
-            sMyPid = Process.myPid();
-        }
-        return sMyPid;
-    }
-
-    /**
-     * Check if the intent is coming from this process
-     *
-     * @param intent the incoming intent for the service
-     * @return true if the intent is from the current process
-     */
-    private static boolean fromThisProcess(final Intent intent) {
-        final int pid = intent.getIntExtra(EXTRA_MYPID, -1);
-        return pid == getMyPid();
-    }
-
-    // Request execution thread pools. One thread pool for sending and one for downloading.
-    // The size of the thread pool controls the parallelism of request execution.
-    // See {@link setThreadPoolSize}
-    private ExecutorService[] mExecutors = new ExecutorService[2];
-
-    // Active request count
-    private int mActiveRequestCount;
-    // The latest intent startId, used for safely stopping service
-    private int mLastStartId;
-
-    private MmsNetworkManager mNetworkManager;
-
-    // Handler for scheduling service stop
-    private final Handler mHandler = new Handler();
-    // Service stop task
-    private final Runnable mServiceStopRunnable = new Runnable() {
-        @Override
-        public void run() {
-            tryStopService();
-        }
-    };
-
-    /**
-     * Start the service with a request
-     *
-     * @param context the Context to use
-     * @param request the request to start
-     */
-    public static void startRequest(final Context context, final MmsRequest request) {
-        final boolean useWakeLock = sUseWakeLock;
-        request.setUseWakeLock(useWakeLock);
-        final Intent intent = new Intent(context, MmsService.class);
-        intent.putExtra(EXTRA_REQUEST, request);
-        intent.putExtra(EXTRA_MYPID, getMyPid());
-        if (useWakeLock) {
-            acquireWakeLock(context);
-        }
-        if (context.startService(intent) == null) {
-            if (useWakeLock) {
-                releaseWakeLock();
-            }
-        }
-    }
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-
-        ensureLoaders(this);
-
-        for (int i = 0; i < mExecutors.length; i++) {
-            mExecutors[i] = Executors.newFixedThreadPool(sThreadPoolSize);
-        }
-
-        mNetworkManager = new MmsNetworkManager(this);
-
-        synchronized (this) {
-            mActiveRequestCount = 0;
-            mLastStartId = -1;
-        }
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-
-        for (ExecutorService executor : mExecutors) {
-            executor.shutdown();
-        }
-    }
-
-    @Override
-    public int onStartCommand(Intent intent, int flags, int startId) {
-        // Always remember the latest startId for use when we try releasing the service
-        synchronized (this) {
-            mLastStartId = startId;
-        }
-        boolean scheduled = false;
-        if (intent != null) {
-            // There is a rare situation that right after a intent is started,
-            // the service gets killed. Then the service will restart with
-            // the old intent which we don't want it to run since it will
-            // break our assumption for wake lock. Check the process ID
-            // embedded in the intent to make sure it is indeed from the
-            // the current life of this service.
-            if (fromThisProcess(intent)) {
-                final MmsRequest request = intent.getParcelableExtra(EXTRA_REQUEST);
-                if (request != null) {
-                    try {
-                        retainService(request, new Runnable() {
-                            @Override
-                            public void run() {
-                                try {
-                                    request.execute(
-                                            MmsService.this,
-                                            mNetworkManager,
-                                            getApnSettingsLoader(),
-                                            getCarrierConfigValuesLoader(),
-                                            getUserAgentInfoLoader());
-                                } catch (Exception e) {
-                                    Log.w(TAG, "Unexpected execution failure", e);
-                                } finally {
-                                    if (request.getUseWakeLock()) {
-                                        releaseWakeLock();
-                                    }
-                                    releaseService();
-                                }
-                            }
-                        });
-                        scheduled = true;
-                    } catch (RejectedExecutionException e) {
-                        // Rare thing happened. Send back failure using the pending intent
-                        // and also release the wake lock.
-                        Log.w(TAG, "Executing request failed " + e);
-                        request.returnResult(this, SmsManager.MMS_ERROR_UNSPECIFIED,
-                                null/*response*/, 0/*httpStatusCode*/);
-                        if (request.getUseWakeLock()) {
-                            releaseWakeLock();
-                        }
-                    }
-                } else {
-                    Log.w(TAG, "Empty request");
-                }
-            } else {
-                Log.w(TAG, "Got a restarted intent from previous incarnation");
-            }
-        } else {
-            Log.w(TAG, "Empty intent");
-        }
-        if (!scheduled) {
-            // If the request is not started successfully, we need to try shutdown the service
-            // if nobody is using it.
-            tryScheduleStop();
-        }
-        return START_NOT_STICKY;
-    }
-
-    /**
-     * Retain the service for executing the request in service thread pool
-     *
-     * @param request The request to execute
-     * @param runnable The runnable to run the request in thread pool
-     */
-    private void retainService(final MmsRequest request, final Runnable runnable) {
-        final ExecutorService executor = getRequestExecutor(request);
-        synchronized (this) {
-            executor.execute(runnable);
-            mActiveRequestCount++;
-        }
-    }
-
-    /**
-     * Release the service from the request. If nobody is using it, schedule service stop.
-     */
-    private void releaseService() {
-        synchronized (this) {
-            mActiveRequestCount--;
-            if (mActiveRequestCount <= 0) {
-                mActiveRequestCount = 0;
-                rescheduleServiceStop();
-            }
-        }
-    }
-
-    /**
-     * Schedule the service stop if there is no active request
-     */
-    private void tryScheduleStop() {
-        synchronized (this) {
-            if (mActiveRequestCount == 0) {
-                rescheduleServiceStop();
-            }
-        }
-    }
-
-    /**
-     * Reschedule service stop task
-     */
-    private void rescheduleServiceStop() {
-        mHandler.removeCallbacks(mServiceStopRunnable);
-        mHandler.postDelayed(mServiceStopRunnable, SERVICE_STOP_DELAY_MILLIS);
-    }
-
-    /**
-     * Really try to stop the service if there is not active request
-     */
-    private void tryStopService() {
-        Boolean stopped = null;
-        synchronized (this) {
-            if (mActiveRequestCount == 0) {
-                stopped = stopSelfResult(mLastStartId);
-            }
-        }
-        logServiceStop(stopped);
-    }
-
-    /**
-     * Log the result of service stopping. Also check wake lock status when service stops.
-     *
-     * @param stopped Not empty if service stop is performed: true if really stopped, false
-     *                if cancelled.
-     */
-    private void logServiceStop(final Boolean stopped) {
-        if (stopped != null) {
-            if (stopped) {
-                Log.i(TAG, "Service successfully stopped");
-                verifyWakeLockNotHeld();
-            } else {
-                Log.i(TAG, "Service stopping cancelled");
-            }
-        }
-    }
-
-    private ExecutorService getRequestExecutor(final MmsRequest request) {
-        if (request instanceof SendRequest) {
-            // Send
-            return mExecutors[0];
-        } else {
-            // Download
-            return mExecutors[1];
-        }
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        return null;
-    }
-}
diff --git a/src/android/support/v7/mms/MmsXmlResourceParser.java b/src/android/support/v7/mms/MmsXmlResourceParser.java
deleted file mode 100644
index 60d1ed7..0000000
--- a/src/android/support/v7/mms/MmsXmlResourceParser.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.util.Log;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-
-/**
- * Base class for a parser of XML resources
- */
-abstract class MmsXmlResourceParser {
-    /**
-     * Parse the content
-     *
-     * @throws IOException
-     * @throws XmlPullParserException
-     */
-    protected abstract void parseRecord() throws IOException, XmlPullParserException;
-
-    /**
-     * Get the root tag of the content
-     *
-     * @return the text of root tag
-     */
-    protected abstract String getRootTag();
-
-    private final StringBuilder mLogStringBuilder = new StringBuilder();
-
-    protected final XmlPullParser mInputParser;
-
-    protected MmsXmlResourceParser(XmlPullParser parser) {
-        mInputParser = parser;
-    }
-
-    void parse() {
-        try {
-            // Find the first element
-            if (advanceToNextEvent(XmlPullParser.START_TAG) != XmlPullParser.START_TAG) {
-                throw new XmlPullParserException("ApnsXmlProcessor: expecting start tag @"
-                        + xmlParserDebugContext());
-            }
-            if (!getRootTag().equals(mInputParser.getName())) {
-                Log.w(MmsService.TAG, "Carrier config does not start with " + getRootTag());
-                return;
-            }
-            // We are at the start tag
-            for (;;) {
-                int nextEvent;
-                // Skipping spaces
-                while ((nextEvent = mInputParser.next()) == XmlPullParser.TEXT);
-                if (nextEvent == XmlPullParser.START_TAG) {
-                    // Parse one record
-                    parseRecord();
-                } else if (nextEvent == XmlPullParser.END_TAG) {
-                    break;
-                } else {
-                    throw new XmlPullParserException("Expecting start or end tag @"
-                            + xmlParserDebugContext());
-                }
-            }
-        } catch (IOException e) {
-            Log.w(MmsService.TAG, "XmlResourceParser: I/O failure", e);
-        } catch (XmlPullParserException e) {
-            Log.w(MmsService.TAG, "XmlResourceParser: parsing failure", e);
-        }
-    }
-
-    /**
-     * Move XML parser forward to next event type or the end of doc
-     *
-     * @param eventType
-     * @return The final event type we meet
-     * @throws XmlPullParserException
-     * @throws IOException
-     */
-    protected int advanceToNextEvent(int eventType) throws XmlPullParserException, IOException {
-        for (;;) {
-            int nextEvent = mInputParser.next();
-            if (nextEvent == eventType
-                    || nextEvent == XmlPullParser.END_DOCUMENT) {
-                return nextEvent;
-            }
-        }
-    }
-
-    /**
-     * @return The debugging information of the parser's current position
-     */
-    protected String xmlParserDebugContext() {
-        mLogStringBuilder.setLength(0);
-        if (mInputParser != null) {
-            try {
-                final int eventType = mInputParser.getEventType();
-                mLogStringBuilder.append(xmlParserEventString(eventType));
-                if (eventType == XmlPullParser.START_TAG
-                        || eventType == XmlPullParser.END_TAG
-                        || eventType == XmlPullParser.TEXT) {
-                    mLogStringBuilder.append('<').append(mInputParser.getName());
-                    for (int i = 0; i < mInputParser.getAttributeCount(); i++) {
-                        mLogStringBuilder.append(' ')
-                                .append(mInputParser.getAttributeName(i))
-                                .append('=')
-                                .append(mInputParser.getAttributeValue(i));
-                    }
-                    mLogStringBuilder.append("/>");
-                }
-                return mLogStringBuilder.toString();
-            } catch (XmlPullParserException e) {
-                Log.w(MmsService.TAG, "XmlResourceParser exception", e);
-            }
-        }
-        return "Unknown";
-    }
-
-    private static String xmlParserEventString(int event) {
-        switch (event) {
-            case XmlPullParser.START_DOCUMENT: return "START_DOCUMENT";
-            case XmlPullParser.END_DOCUMENT: return "END_DOCUMENT";
-            case XmlPullParser.START_TAG: return "START_TAG";
-            case XmlPullParser.END_TAG: return "END_TAG";
-            case XmlPullParser.TEXT: return "TEXT";
-        }
-        return Integer.toString(event);
-    }
-}
diff --git a/src/android/support/v7/mms/PhoneNumberHelper.java b/src/android/support/v7/mms/PhoneNumberHelper.java
deleted file mode 100644
index a5bebae..0000000
--- a/src/android/support/v7/mms/PhoneNumberHelper.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.google.i18n.phonenumbers.NumberParseException;
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.i18n.phonenumbers.Phonenumber;
-
-/**
- * Helper methods for phone number formatting
- * This is isolated into a standalone class since it depends on libphonenumber
- */
-public class PhoneNumberHelper {
-    /**
-     * Given a phone number, get its national part without country code
-     *
-     * @param number the original number
-     * @param country the country ISO code
-     * @return the national number
-     */
-    static String getNumberNoCountryCode(final String number, final String country) {
-        if (!TextUtils.isEmpty(number)) {
-            final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
-            try {
-                final Phonenumber.PhoneNumber phoneNumber = phoneNumberUtil.parse(number, country);
-                if (phoneNumber != null && phoneNumberUtil.isValidNumber(phoneNumber)) {
-                    return phoneNumberUtil
-                            .format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.NATIONAL)
-                            .replaceAll("\\D", "");
-                }
-            } catch (final NumberParseException e) {
-                Log.w(MmsService.TAG, "getNumberNoCountryCode: invalid number " + e);
-            }
-        }
-        return number;
-    }
-}
diff --git a/src/android/support/v7/mms/SendRequest.java b/src/android/support/v7/mms/SendRequest.java
deleted file mode 100644
index a36ffc4..0000000
--- a/src/android/support/v7/mms/SendRequest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.app.PendingIntent;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.ParcelFileDescriptor;
-import android.os.Parcelable;
-import android.telephony.SmsManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.io.IOException;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Request to send an MMS
- */
-class SendRequest extends MmsRequest {
-    // Max send response PDU size in bytes (exceeding this may cause problem with
-    // system intent delivery).
-    private static final int MAX_SEND_RESPONSE_SIZE = 1000 * 1024;
-
-    private byte[] mPduData;
-
-    SendRequest(final String locationUrl, final Uri pduUri, final PendingIntent sentIntent) {
-        super(locationUrl, pduUri, sentIntent);
-    }
-
-    @Override
-    protected boolean loadRequest(final Context context, final Bundle mmsConfig) {
-        mPduData = readPduFromContentUri(
-                context,
-                mPduUri,
-                mmsConfig.getInt(
-                        CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_SIZE,
-                        CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_SIZE_DEFAULT));
-        return (mPduData != null);
-    }
-
-    @Override
-    protected boolean transferResponse(final Context context, final Intent fillIn,
-            final byte[] response) {
-        // SendConf pdus are always small and can be included in the intent
-        if (response != null && fillIn != null) {
-            if (response.length > MAX_SEND_RESPONSE_SIZE) {
-                // If the response PDU is too large, it won't be able to fit in
-                // the PendingIntent to be transferred via system IPC.
-                return false;
-            }
-            fillIn.putExtra(SmsManager.EXTRA_MMS_DATA, response);
-        }
-        return true;
-    }
-
-    @Override
-    protected byte[] doHttp(Context context, MmsNetworkManager netMgr, ApnSettingsLoader.Apn apn,
-            Bundle mmsConfig, String userAgent, String uaProfUrl) throws MmsHttpException {
-        final MmsHttpClient httpClient = netMgr.getHttpClient();
-        return httpClient.execute(getHttpRequestUrl(apn), mPduData, MmsHttpClient.METHOD_POST,
-                !TextUtils.isEmpty(apn.getMmsProxy()), apn.getMmsProxy(), apn.getMmsProxyPort(),
-                mmsConfig, userAgent, uaProfUrl);
-    }
-
-    @Override
-    protected String getHttpRequestUrl(final ApnSettingsLoader.Apn apn) {
-        return !TextUtils.isEmpty(mLocationUrl) ? mLocationUrl : apn.getMmsc();
-    }
-
-    /**
-     * Read pdu from content provider uri
-     *
-     * @param contentUri content provider uri from which to read
-     * @param maxSize maximum number of bytes to read
-     * @return pdu bytes if succeeded else null
-     */
-    public byte[] readPduFromContentUri(final Context context, final Uri contentUri,
-            final int maxSize) {
-        if (contentUri == null) {
-            return null;
-        }
-        final Callable<byte[]> copyPduToArray = new Callable<byte[]>() {
-            public byte[] call() {
-                ParcelFileDescriptor.AutoCloseInputStream inStream = null;
-                try {
-                    final ContentResolver cr = context.getContentResolver();
-                    final ParcelFileDescriptor pduFd = cr.openFileDescriptor(contentUri, "r");
-                    inStream = new ParcelFileDescriptor.AutoCloseInputStream(pduFd);
-                    // Request one extra byte to make sure file not bigger than maxSize
-                    final byte[] readBuf = new byte[maxSize+1];
-                    final int bytesRead = inStream.read(readBuf, 0, maxSize+1);
-                    if (bytesRead <= 0) {
-                        Log.e(MmsService.TAG, "Reading PDU from sender: empty PDU");
-                        return null;
-                    }
-                    if (bytesRead > maxSize) {
-                        Log.e(MmsService.TAG, "Reading PDU from sender: PDU too large");
-                        return null;
-                    }
-                    // Copy and return the exact length of bytes
-                    final byte[] result = new byte[bytesRead];
-                    System.arraycopy(readBuf, 0, result, 0, bytesRead);
-                    return result;
-                } catch (IOException e) {
-                    Log.e(MmsService.TAG, "Reading PDU from sender: IO exception", e);
-                    return null;
-                } finally {
-                    if (inStream != null) {
-                        try {
-                            inStream.close();
-                        } catch (IOException ex) {
-                            // Ignore
-                        }
-                    }
-                }
-            }
-        };
-        final Future<byte[]> pendingResult = mPduTransferExecutor.submit(copyPduToArray);
-        try {
-            return pendingResult.get(TASK_TIMEOUT_MS, TimeUnit.MILLISECONDS);
-        } catch (Exception e) {
-            // Typically a timeout occurred - cancel task
-            pendingResult.cancel(true);
-        }
-        return null;
-    }
-
-    public static final Parcelable.Creator<SendRequest> CREATOR
-            = new Parcelable.Creator<SendRequest>() {
-        public SendRequest createFromParcel(Parcel in) {
-            return new SendRequest(in);
-        }
-
-        public SendRequest[] newArray(int size) {
-            return new SendRequest[size];
-        }
-    };
-
-    private SendRequest(Parcel in) {
-        super(in);
-    }
-}
diff --git a/src/android/support/v7/mms/UserAgentInfoLoader.java b/src/android/support/v7/mms/UserAgentInfoLoader.java
deleted file mode 100644
index 783f99c..0000000
--- a/src/android/support/v7/mms/UserAgentInfoLoader.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-/**
- * Interface to load UserAgent and UA Prof URL
- */
-public interface UserAgentInfoLoader {
-    // Carrier configuration keys for passing as config overrides into system MMS service
-    public static final String CONFIG_USER_AGENT = "userAgent";
-    public static final String CONFIG_UA_PROF_URL = "uaProfUrl";
-
-    /**
-     * Get UserAgent value
-     *
-     * @return the text of UserAgent
-     */
-    String getUserAgent();
-
-    /**
-     * Get UA Profile URL
-     *
-     * @return the URL of UA profile
-     */
-    String getUAProfUrl();
-}
diff --git a/src/android/support/v7/mms/Utils.java b/src/android/support/v7/mms/Utils.java
deleted file mode 100644
index 593e444..0000000
--- a/src/android/support/v7/mms/Utils.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (C) 2015 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 androidx.appcompat.mms;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.os.Build;
-import android.telephony.SmsManager;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-/**
- * Utility methods
- */
-class Utils {
-    /**
-     * Check if MMS API is available
-     *
-     * @return true if MMS API is available, false otherwise
-     */
-    static boolean hasMmsApi() {
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
-    }
-
-    /**
-     * Check if support multi-SIM
-     *
-     * @return true if MSIM is supported, false otherwise
-     */
-    static boolean supportMSim() {
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1;
-    }
-
-    /**
-     * Check if support APIs for getting UserAgent and UAProfUrl
-     *
-     * @return true if those APIs are supported, false otherwise
-     */
-    static boolean hasUserAgentApi() {
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
-    }
-
-    /**
-     * Get system SmsManager
-     *
-     * @param subId the subscription ID of the SmsManager
-     * @return the SmsManager for the input subId
-     */
-    static SmsManager getSmsManager(final int subId) {
-        if (supportMSim()) {
-            return SmsManager.getSmsManagerForSubscriptionId(subId);
-        } else {
-            return SmsManager.getDefault();
-        }
-    }
-
-    /**
-     * Get the real subscription ID if the input is -1
-     *
-     * @param subId input subscription ID
-     * @return the default SMS subscription ID if the input is -1, otherwise the original
-     */
-    static int getEffectiveSubscriptionId(int subId) {
-        if (supportMSim()) {
-            if (subId == MmsManager.DEFAULT_SUB_ID) {
-                subId = SmsManager.getDefaultSmsSubscriptionId();
-            }
-        }
-        if (subId < 0) {
-            subId = MmsManager.DEFAULT_SUB_ID;
-        }
-        return subId;
-    }
-
-    /**
-     * Get MCC/MNC of an SIM subscription
-     *
-     * @param context the Context to use
-     * @param subId the SIM subId
-     * @return a non-empty array with exactly two elements, first is mcc and last is mnc.
-     */
-    static int[] getMccMnc(final Context context, final int subId) {
-        final int[] mccMnc = new int[] { 0, 0 };
-        if (Utils.supportMSim()) {
-            final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
-            final SubscriptionInfo subInfo = subscriptionManager.getActiveSubscriptionInfo(subId);
-            if (subInfo != null) {
-                mccMnc[0] = subInfo.getMcc();
-                mccMnc[1] = subInfo.getMnc();
-            }
-        } else {
-            final TelephonyManager telephonyManager =
-                    (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-            final String mccMncString = telephonyManager.getSimOperator();
-            try {
-                mccMnc[0] = Integer.parseInt(mccMncString.substring(0, 3));
-                mccMnc[1] = Integer.parseInt(mccMncString.substring(3));
-            } catch (Exception e) {
-                Log.w(MmsService.TAG, "Invalid mcc/mnc from system " + mccMncString + ": " + e);
-                mccMnc[0] = 0;
-                mccMnc[1] = 0;
-            }
-        }
-        return mccMnc;
-    }
-
-    /**
-     * Get a subscription's Context so we can load resources from it
-     *
-     * @param context the sub-independent Context
-     * @param subId the SIM's subId
-     * @return the sub-dependent Context
-     */
-    static Context getSubDepContext(final Context context, final int subId) {
-        if (!supportMSim()) {
-            return context;
-        }
-        final int[] mccMnc = getMccMnc(context, subId);
-        final int mcc = mccMnc[0];
-        final int mnc = mccMnc[1];
-        if (mcc == 0 && mnc == 0) {
-            return context;
-        }
-        final Configuration subConfig = new Configuration();
-        subConfig.mcc = mcc;
-        subConfig.mnc = mnc;
-        return context.createConfigurationContext(subConfig);
-    }
-
-    /**
-     * Redact the URL for non-VERBOSE logging. Replace url with only the host part and the length
-     * of the input URL string.
-     *
-     * @param urlString
-     * @return
-     */
-    static String redactUrlForNonVerbose(String urlString) {
-        if (Log.isLoggable(MmsService.TAG, Log.VERBOSE)) {
-            // Don't redact for VERBOSE level logging
-            return urlString;
-        }
-        if (TextUtils.isEmpty(urlString)) {
-            return urlString;
-        }
-        String protocol = "http";
-        String host = "";
-        try {
-            final URL url = new URL(urlString);
-            protocol = url.getProtocol();
-            host = url.getHost();
-        } catch (MalformedURLException e) {
-            // Ignore
-        }
-        // Print "http://host[length]"
-        final StringBuilder sb = new StringBuilder();
-        sb.append(protocol).append("://").append(host)
-                .append("[").append(urlString.length()).append("]");
-        return sb.toString();
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/AcknowledgeInd.java b/src/android/support/v7/mms/pdu/AcknowledgeInd.java
deleted file mode 100644
index b2ca729..0000000
--- a/src/android/support/v7/mms/pdu/AcknowledgeInd.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-/**
- * M-Acknowledge.ind PDU.
- */
-public class AcknowledgeInd extends GenericPdu {
-    /**
-     * Constructor, used when composing a M-Acknowledge.ind pdu.
-     *
-     * @param mmsVersion current viersion of mms
-     * @param transactionId the transaction-id value
-     * @throws InvalidHeaderValueException if parameters are invalid.
-     *         NullPointerException if transactionId is null.
-     */
-    public AcknowledgeInd(int mmsVersion, byte[] transactionId)
-            throws InvalidHeaderValueException {
-        super();
-
-        setMessageType(PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND);
-        setMmsVersion(mmsVersion);
-        setTransactionId(transactionId);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    AcknowledgeInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get X-Mms-Report-Allowed field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public int getReportAllowed() {
-        return mPduHeaders.getOctet(PduHeaders.REPORT_ALLOWED);
-    }
-
-    /**
-     * Set X-Mms-Report-Allowed field value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setReportAllowed(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.REPORT_ALLOWED);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id field value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTransactionId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/Base64.java b/src/android/support/v7/mms/pdu/Base64.java
deleted file mode 100644
index 18c2959..0000000
--- a/src/android/support/v7/mms/pdu/Base64.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-public class Base64 {
-    /**
-     * Used to get the number of Quadruples.
-     */
-    static final int FOURBYTE = 4;
-
-    /**
-     * Byte used to pad output.
-     */
-    static final byte PAD = (byte) '=';
-
-    /**
-     * The base length.
-     */
-    static final int BASELENGTH = 255;
-
-    // Create arrays to hold the base64 characters
-    private static byte[] base64Alphabet = new byte[BASELENGTH];
-
-    // Populating the character arrays
-    static {
-        for (int i = 0; i < BASELENGTH; i++) {
-            base64Alphabet[i] = (byte) -1;
-        }
-        for (int i = 'Z'; i >= 'A'; i--) {
-            base64Alphabet[i] = (byte) (i - 'A');
-        }
-        for (int i = 'z'; i >= 'a'; i--) {
-            base64Alphabet[i] = (byte) (i - 'a' + 26);
-        }
-        for (int i = '9'; i >= '0'; i--) {
-            base64Alphabet[i] = (byte) (i - '0' + 52);
-        }
-
-        base64Alphabet['+'] = 62;
-        base64Alphabet['/'] = 63;
-    }
-
-    /**
-     * Decodes Base64 data into octects
-     *
-     * @param base64Data Byte array containing Base64 data
-     * @return Array containing decoded data.
-     */
-    public static byte[] decodeBase64(byte[] base64Data) {
-        // RFC 2045 requires that we discard ALL non-Base64 characters
-        base64Data = discardNonBase64(base64Data);
-
-        // handle the edge case, so we don't have to worry about it later
-        if (base64Data.length == 0) {
-            return new byte[0];
-        }
-
-        int numberQuadruple = base64Data.length / FOURBYTE;
-        byte decodedData[] = null;
-        byte b1 = 0, b2 = 0, b3 = 0, b4 = 0, marker0 = 0, marker1 = 0;
-
-        // Throw away anything not in base64Data
-
-        int encodedIndex = 0;
-        int dataIndex = 0;
-        {
-            // this sizes the output array properly - rlw
-            int lastData = base64Data.length;
-            // ignore the '=' padding
-            while (base64Data[lastData - 1] == PAD) {
-                if (--lastData == 0) {
-                    return new byte[0];
-                }
-            }
-            decodedData = new byte[lastData - numberQuadruple];
-        }
-
-        for (int i = 0; i < numberQuadruple; i++) {
-            dataIndex = i * 4;
-            marker0 = base64Data[dataIndex + 2];
-            marker1 = base64Data[dataIndex + 3];
-
-            b1 = base64Alphabet[base64Data[dataIndex]];
-            b2 = base64Alphabet[base64Data[dataIndex + 1]];
-
-            if (marker0 != PAD && marker1 != PAD) {
-                //No PAD e.g 3cQl
-                b3 = base64Alphabet[marker0];
-                b4 = base64Alphabet[marker1];
-
-                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
-                decodedData[encodedIndex + 1] =
-                    (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
-                decodedData[encodedIndex + 2] = (byte) (b3 << 6 | b4);
-            } else if (marker0 == PAD) {
-                //Two PAD e.g. 3c[Pad][Pad]
-                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
-            } else if (marker1 == PAD) {
-                //One PAD e.g. 3cQ[Pad]
-                b3 = base64Alphabet[marker0];
-
-                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
-                decodedData[encodedIndex + 1] =
-                    (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
-            }
-            encodedIndex += 3;
-        }
-        return decodedData;
-    }
-
-    /**
-     * Check octect wheter it is a base64 encoding.
-     *
-     * @param octect to be checked byte
-     * @return ture if it is base64 encoding, false otherwise.
-     */
-    private static boolean isBase64(byte octect) {
-        if (octect == PAD) {
-            return true;
-        } else if (base64Alphabet[octect] == -1) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-
-    /**
-     * Discards any characters outside of the base64 alphabet, per
-     * the requirements on page 25 of RFC 2045 - "Any characters
-     * outside of the base64 alphabet are to be ignored in base64
-     * encoded data."
-     *
-     * @param data The base-64 encoded data to groom
-     * @return The data, less non-base64 characters (see RFC 2045).
-     */
-    static byte[] discardNonBase64(byte[] data) {
-        byte groomedData[] = new byte[data.length];
-        int bytesCopied = 0;
-
-        for (int i = 0; i < data.length; i++) {
-            if (isBase64(data[i])) {
-                groomedData[bytesCopied++] = data[i];
-            }
-        }
-
-        byte packedData[] = new byte[bytesCopied];
-
-        System.arraycopy(groomedData, 0, packedData, 0, bytesCopied);
-
-        return packedData;
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/CharacterSets.java b/src/android/support/v7/mms/pdu/CharacterSets.java
deleted file mode 100644
index e03ee60..0000000
--- a/src/android/support/v7/mms/pdu/CharacterSets.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-
-public class CharacterSets {
-    /**
-     * IANA assigned MIB enum numbers.
-     *
-     * From wap-230-wsp-20010705-a.pdf
-     * Any-charset = <Octet 128>
-     * Equivalent to the special RFC2616 charset value "*"
-     */
-    public static final int ANY_CHARSET = 0x00;
-    public static final int US_ASCII    = 0x03;
-    public static final int ISO_8859_1  = 0x04;
-    public static final int ISO_8859_2  = 0x05;
-    public static final int ISO_8859_3  = 0x06;
-    public static final int ISO_8859_4  = 0x07;
-    public static final int ISO_8859_5  = 0x08;
-    public static final int ISO_8859_6  = 0x09;
-    public static final int ISO_8859_7  = 0x0A;
-    public static final int ISO_8859_8  = 0x0B;
-    public static final int ISO_8859_9  = 0x0C;
-    public static final int SHIFT_JIS   = 0x11;
-    public static final int UTF_8       = 0x6A;
-    public static final int BIG5        = 0x07EA;
-    public static final int UCS2        = 0x03E8;
-    public static final int UTF_16      = 0x03F7;
-
-    /**
-     * If the encoding of given data is unsupported, use UTF_8 to decode it.
-     */
-    public static final int DEFAULT_CHARSET = UTF_8;
-
-    /**
-     * Array of MIB enum numbers.
-     */
-    private static final int[] MIBENUM_NUMBERS = {
-        ANY_CHARSET,
-        US_ASCII,
-        ISO_8859_1,
-        ISO_8859_2,
-        ISO_8859_3,
-        ISO_8859_4,
-        ISO_8859_5,
-        ISO_8859_6,
-        ISO_8859_7,
-        ISO_8859_8,
-        ISO_8859_9,
-        SHIFT_JIS,
-        UTF_8,
-        BIG5,
-        UCS2,
-        UTF_16,
-    };
-
-    /**
-     * The Well-known-charset Mime name.
-     */
-    public static final String MIMENAME_ANY_CHARSET = "*";
-    public static final String MIMENAME_US_ASCII    = "us-ascii";
-    public static final String MIMENAME_ISO_8859_1  = "iso-8859-1";
-    public static final String MIMENAME_ISO_8859_2  = "iso-8859-2";
-    public static final String MIMENAME_ISO_8859_3  = "iso-8859-3";
-    public static final String MIMENAME_ISO_8859_4  = "iso-8859-4";
-    public static final String MIMENAME_ISO_8859_5  = "iso-8859-5";
-    public static final String MIMENAME_ISO_8859_6  = "iso-8859-6";
-    public static final String MIMENAME_ISO_8859_7  = "iso-8859-7";
-    public static final String MIMENAME_ISO_8859_8  = "iso-8859-8";
-    public static final String MIMENAME_ISO_8859_9  = "iso-8859-9";
-    public static final String MIMENAME_SHIFT_JIS   = "shift_JIS";
-    public static final String MIMENAME_UTF_8       = "utf-8";
-    public static final String MIMENAME_BIG5        = "big5";
-    public static final String MIMENAME_UCS2        = "iso-10646-ucs-2";
-    public static final String MIMENAME_UTF_16      = "utf-16";
-
-    public static final String DEFAULT_CHARSET_NAME = MIMENAME_UTF_8;
-
-    /**
-     * Array of the names of character sets.
-     */
-    private static final String[] MIME_NAMES = {
-        MIMENAME_ANY_CHARSET,
-        MIMENAME_US_ASCII,
-        MIMENAME_ISO_8859_1,
-        MIMENAME_ISO_8859_2,
-        MIMENAME_ISO_8859_3,
-        MIMENAME_ISO_8859_4,
-        MIMENAME_ISO_8859_5,
-        MIMENAME_ISO_8859_6,
-        MIMENAME_ISO_8859_7,
-        MIMENAME_ISO_8859_8,
-        MIMENAME_ISO_8859_9,
-        MIMENAME_SHIFT_JIS,
-        MIMENAME_UTF_8,
-        MIMENAME_BIG5,
-        MIMENAME_UCS2,
-        MIMENAME_UTF_16,
-    };
-
-    private static final HashMap<Integer, String> MIBENUM_TO_NAME_MAP;
-    private static final HashMap<String, Integer> NAME_TO_MIBENUM_MAP;
-
-    static {
-        // Create the HashMaps.
-        MIBENUM_TO_NAME_MAP = new HashMap<Integer, String>();
-        NAME_TO_MIBENUM_MAP = new HashMap<String, Integer>();
-        assert(MIBENUM_NUMBERS.length == MIME_NAMES.length);
-        int count = MIBENUM_NUMBERS.length - 1;
-        for(int i = 0; i <= count; i++) {
-            MIBENUM_TO_NAME_MAP.put(MIBENUM_NUMBERS[i], MIME_NAMES[i]);
-            NAME_TO_MIBENUM_MAP.put(MIME_NAMES[i], MIBENUM_NUMBERS[i]);
-        }
-    }
-
-    private CharacterSets() {} // Non-instantiatable
-
-    /**
-     * Map an MIBEnum number to the name of the charset which this number
-     * is assigned to by IANA.
-     *
-     * @param mibEnumValue An IANA assigned MIBEnum number.
-     * @return The name string of the charset.
-     * @throws UnsupportedEncodingException
-     */
-    public static String getMimeName(int mibEnumValue)
-            throws UnsupportedEncodingException {
-        String name = MIBENUM_TO_NAME_MAP.get(mibEnumValue);
-        if (name == null) {
-            throw new UnsupportedEncodingException();
-        }
-        return name;
-    }
-
-    /**
-     * Map a well-known charset name to its assigned MIBEnum number.
-     *
-     * @param mimeName The charset name.
-     * @return The MIBEnum number assigned by IANA for this charset.
-     * @throws UnsupportedEncodingException
-     */
-    public static int getMibEnumValue(String mimeName)
-            throws UnsupportedEncodingException {
-        if(null == mimeName) {
-            return -1;
-        }
-
-        Integer mibEnumValue = NAME_TO_MIBENUM_MAP.get(mimeName);
-        if (mibEnumValue == null) {
-            throw new UnsupportedEncodingException();
-        }
-        return mibEnumValue;
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/ContentType.java b/src/android/support/v7/mms/pdu/ContentType.java
deleted file mode 100644
index eee98c1..0000000
--- a/src/android/support/v7/mms/pdu/ContentType.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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 androidx.appcompat.mms.pdu;
-
-import java.util.ArrayList;
-
-public class ContentType {
-    public static final String MMS_MESSAGE       = "application/vnd.wap.mms-message";
-    // The phony content type for generic PDUs (e.g. ReadOrig.ind,
-    // Notification.ind, Delivery.ind).
-    public static final String MMS_GENERIC       = "application/vnd.wap.mms-generic";
-    public static final String MULTIPART_MIXED   = "application/vnd.wap.multipart.mixed";
-    public static final String MULTIPART_RELATED = "application/vnd.wap.multipart.related";
-    public static final String MULTIPART_ALTERNATIVE = "application/vnd.wap.multipart.alternative";
-
-    public static final String TEXT_PLAIN        = "text/plain";
-    public static final String TEXT_HTML         = "text/html";
-    public static final String TEXT_VCALENDAR    = "text/x-vCalendar";
-    public static final String TEXT_VCARD        = "text/x-vCard";
-
-    public static final String IMAGE_UNSPECIFIED = "image/*";
-    public static final String IMAGE_JPEG        = "image/jpeg";
-    public static final String IMAGE_JPG         = "image/jpg";
-    public static final String IMAGE_GIF         = "image/gif";
-    public static final String IMAGE_WBMP        = "image/vnd.wap.wbmp";
-    public static final String IMAGE_PNG         = "image/png";
-    public static final String IMAGE_X_MS_BMP    = "image/x-ms-bmp";
-
-    public static final String AUDIO_UNSPECIFIED = "audio/*";
-    public static final String AUDIO_AAC         = "audio/aac";
-    public static final String AUDIO_AMR         = "audio/amr";
-    public static final String AUDIO_IMELODY     = "audio/imelody";
-    public static final String AUDIO_MID         = "audio/mid";
-    public static final String AUDIO_MIDI        = "audio/midi";
-    public static final String AUDIO_MP3         = "audio/mp3";
-    public static final String AUDIO_MPEG3       = "audio/mpeg3";
-    public static final String AUDIO_MPEG        = "audio/mpeg";
-    public static final String AUDIO_MPG         = "audio/mpg";
-    public static final String AUDIO_MP4         = "audio/mp4";
-    public static final String AUDIO_X_MID       = "audio/x-mid";
-    public static final String AUDIO_X_MIDI      = "audio/x-midi";
-    public static final String AUDIO_X_MP3       = "audio/x-mp3";
-    public static final String AUDIO_X_MPEG3     = "audio/x-mpeg3";
-    public static final String AUDIO_X_MPEG      = "audio/x-mpeg";
-    public static final String AUDIO_X_MPG       = "audio/x-mpg";
-    public static final String AUDIO_3GPP        = "audio/3gpp";
-    public static final String AUDIO_X_WAV       = "audio/x-wav";
-    public static final String AUDIO_OGG         = "application/ogg";
-
-    public static final String VIDEO_UNSPECIFIED = "video/*";
-    public static final String VIDEO_3GPP        = "video/3gpp";
-    public static final String VIDEO_3G2         = "video/3gpp2";
-    public static final String VIDEO_H263        = "video/h263";
-    public static final String VIDEO_MP4         = "video/mp4";
-
-    public static final String APP_SMIL          = "application/smil";
-    public static final String APP_WAP_XHTML     = "application/vnd.wap.xhtml+xml";
-    public static final String APP_XHTML         = "application/xhtml+xml";
-
-    public static final String APP_DRM_CONTENT   = "application/vnd.oma.drm.content";
-    public static final String APP_DRM_MESSAGE   = "application/vnd.oma.drm.message";
-
-    private static final ArrayList<String> sSupportedContentTypes = new ArrayList<String>();
-    private static final ArrayList<String> sSupportedImageTypes = new ArrayList<String>();
-    private static final ArrayList<String> sSupportedAudioTypes = new ArrayList<String>();
-    private static final ArrayList<String> sSupportedVideoTypes = new ArrayList<String>();
-
-    static {
-        sSupportedContentTypes.add(TEXT_PLAIN);
-        sSupportedContentTypes.add(TEXT_HTML);
-        sSupportedContentTypes.add(TEXT_VCALENDAR);
-        sSupportedContentTypes.add(TEXT_VCARD);
-
-        sSupportedContentTypes.add(IMAGE_JPEG);
-        sSupportedContentTypes.add(IMAGE_GIF);
-        sSupportedContentTypes.add(IMAGE_WBMP);
-        sSupportedContentTypes.add(IMAGE_PNG);
-        sSupportedContentTypes.add(IMAGE_JPG);
-        sSupportedContentTypes.add(IMAGE_X_MS_BMP);
-        //supportedContentTypes.add(IMAGE_SVG); not yet supported.
-
-        sSupportedContentTypes.add(AUDIO_AAC);
-        sSupportedContentTypes.add(AUDIO_AMR);
-        sSupportedContentTypes.add(AUDIO_IMELODY);
-        sSupportedContentTypes.add(AUDIO_MID);
-        sSupportedContentTypes.add(AUDIO_MIDI);
-        sSupportedContentTypes.add(AUDIO_MP3);
-        sSupportedContentTypes.add(AUDIO_MP4);
-        sSupportedContentTypes.add(AUDIO_MPEG3);
-        sSupportedContentTypes.add(AUDIO_MPEG);
-        sSupportedContentTypes.add(AUDIO_MPG);
-        sSupportedContentTypes.add(AUDIO_X_MID);
-        sSupportedContentTypes.add(AUDIO_X_MIDI);
-        sSupportedContentTypes.add(AUDIO_X_MP3);
-        sSupportedContentTypes.add(AUDIO_X_MPEG3);
-        sSupportedContentTypes.add(AUDIO_X_MPEG);
-        sSupportedContentTypes.add(AUDIO_X_MPG);
-        sSupportedContentTypes.add(AUDIO_X_WAV);
-        sSupportedContentTypes.add(AUDIO_3GPP);
-        sSupportedContentTypes.add(AUDIO_OGG);
-
-        sSupportedContentTypes.add(VIDEO_3GPP);
-        sSupportedContentTypes.add(VIDEO_3G2);
-        sSupportedContentTypes.add(VIDEO_H263);
-        sSupportedContentTypes.add(VIDEO_MP4);
-
-        sSupportedContentTypes.add(APP_SMIL);
-        sSupportedContentTypes.add(APP_WAP_XHTML);
-        sSupportedContentTypes.add(APP_XHTML);
-
-        sSupportedContentTypes.add(APP_DRM_CONTENT);
-        sSupportedContentTypes.add(APP_DRM_MESSAGE);
-
-        // add supported image types
-        sSupportedImageTypes.add(IMAGE_JPEG);
-        sSupportedImageTypes.add(IMAGE_GIF);
-        sSupportedImageTypes.add(IMAGE_WBMP);
-        sSupportedImageTypes.add(IMAGE_PNG);
-        sSupportedImageTypes.add(IMAGE_JPG);
-        sSupportedImageTypes.add(IMAGE_X_MS_BMP);
-
-        // add supported audio types
-        sSupportedAudioTypes.add(AUDIO_AAC);
-        sSupportedAudioTypes.add(AUDIO_AMR);
-        sSupportedAudioTypes.add(AUDIO_IMELODY);
-        sSupportedAudioTypes.add(AUDIO_MID);
-        sSupportedAudioTypes.add(AUDIO_MIDI);
-        sSupportedAudioTypes.add(AUDIO_MP3);
-        sSupportedAudioTypes.add(AUDIO_MPEG3);
-        sSupportedAudioTypes.add(AUDIO_MPEG);
-        sSupportedAudioTypes.add(AUDIO_MPG);
-        sSupportedAudioTypes.add(AUDIO_MP4);
-        sSupportedAudioTypes.add(AUDIO_X_MID);
-        sSupportedAudioTypes.add(AUDIO_X_MIDI);
-        sSupportedAudioTypes.add(AUDIO_X_MP3);
-        sSupportedAudioTypes.add(AUDIO_X_MPEG3);
-        sSupportedAudioTypes.add(AUDIO_X_MPEG);
-        sSupportedAudioTypes.add(AUDIO_X_MPG);
-        sSupportedAudioTypes.add(AUDIO_X_WAV);
-        sSupportedAudioTypes.add(AUDIO_3GPP);
-        sSupportedAudioTypes.add(AUDIO_OGG);
-
-        // add supported video types
-        sSupportedVideoTypes.add(VIDEO_3GPP);
-        sSupportedVideoTypes.add(VIDEO_3G2);
-        sSupportedVideoTypes.add(VIDEO_H263);
-        sSupportedVideoTypes.add(VIDEO_MP4);
-    }
-
-    // This class should never be instantiated.
-    private ContentType() {
-    }
-
-    public static boolean isSupportedType(String contentType) {
-        return (null != contentType) && sSupportedContentTypes.contains(contentType);
-    }
-
-    public static boolean isSupportedImageType(String contentType) {
-        return isImageType(contentType) && isSupportedType(contentType);
-    }
-
-    public static boolean isSupportedAudioType(String contentType) {
-        return isAudioType(contentType) && isSupportedType(contentType);
-    }
-
-    public static boolean isSupportedVideoType(String contentType) {
-        return isVideoType(contentType) && isSupportedType(contentType);
-    }
-
-    public static boolean isTextType(String contentType) {
-        return (null != contentType) && contentType.startsWith("text/");
-    }
-
-    public static boolean isImageType(String contentType) {
-        return (null != contentType) && contentType.startsWith("image/");
-    }
-
-    public static boolean isAudioType(String contentType) {
-        return (null != contentType) && contentType.startsWith("audio/");
-    }
-
-    public static boolean isVideoType(String contentType) {
-        return (null != contentType) && contentType.startsWith("video/");
-    }
-
-    public static boolean isDrmType(String contentType) {
-        return (null != contentType)
-                && (contentType.equals(APP_DRM_CONTENT)
-                        || contentType.equals(APP_DRM_MESSAGE));
-    }
-
-    public static boolean isUnspecified(String contentType) {
-        return (null != contentType) && contentType.endsWith("*");
-    }
-
-    @SuppressWarnings("unchecked")
-    public static ArrayList<String> getImageTypes() {
-        return (ArrayList<String>) sSupportedImageTypes.clone();
-    }
-
-    @SuppressWarnings("unchecked")
-    public static ArrayList<String> getAudioTypes() {
-        return (ArrayList<String>) sSupportedAudioTypes.clone();
-    }
-
-    @SuppressWarnings("unchecked")
-    public static ArrayList<String> getVideoTypes() {
-        return (ArrayList<String>) sSupportedVideoTypes.clone();
-    }
-
-    @SuppressWarnings("unchecked")
-    public static ArrayList<String> getSupportedTypes() {
-        return (ArrayList<String>) sSupportedContentTypes.clone();
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/DeliveryInd.java b/src/android/support/v7/mms/pdu/DeliveryInd.java
deleted file mode 100644
index 1ee1539..0000000
--- a/src/android/support/v7/mms/pdu/DeliveryInd.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-/**
- * M-Delivery.Ind Pdu.
- */
-public class DeliveryInd extends GenericPdu {
-    /**
-     * Empty constructor.
-     * Since the Pdu corresponding to this class is constructed
-     * by the Proxy-Relay server, this class is only instantiated
-     * by the Pdu Parser.
-     *
-     * @throws InvalidHeaderValueException if error occurs.
-     */
-    public DeliveryInd() throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_DELIVERY_IND);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    DeliveryInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get Date value.
-     *
-     * @return the value
-     */
-    public long getDate() {
-        return mPduHeaders.getLongInteger(PduHeaders.DATE);
-    }
-
-    /**
-     * Set Date value.
-     *
-     * @param value the value
-     */
-    public void setDate(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.DATE);
-    }
-
-    /**
-     * Get Message-ID value.
-     *
-     * @return the value
-     */
-    public byte[] getMessageId() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Set Message-ID value.
-     *
-     * @param value the value, should not be null
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Get Status value.
-     *
-     * @return the value
-     */
-    public int getStatus() {
-        return mPduHeaders.getOctet(PduHeaders.STATUS);
-    }
-
-    /**
-     * Set Status value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.STATUS);
-    }
-
-    /**
-     * Get To value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getTo() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
-    }
-
-    /**
-     * set To value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTo(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     *
-     *     public EncodedStringValue getStatusText() {return null;}
-     *     public void setStatusText(EncodedStringValue value) {}
-     */
-}
diff --git a/src/android/support/v7/mms/pdu/EncodedStringValue.java b/src/android/support/v7/mms/pdu/EncodedStringValue.java
deleted file mode 100644
index 0a5d2be..0000000
--- a/src/android/support/v7/mms/pdu/EncodedStringValue.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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 androidx.appcompat.mms.pdu;
-
-import android.util.Log;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-
-/**
- * Encoded-string-value = Text-string | Value-length Char-set Text-string
- */
-public class EncodedStringValue implements Cloneable {
-    private static final String TAG = "EncodedStringValue";
-    private static final boolean DEBUG = false;
-    private static final boolean LOCAL_LOGV = false;
-
-    /**
-     * The Char-set value.
-     */
-    private int mCharacterSet;
-
-    /**
-     * The Text-string value.
-     */
-    private byte[] mData;
-
-    /**
-     * Constructor.
-     *
-     * @param charset the Char-set value
-     * @param data the Text-string value
-     * @throws NullPointerException if Text-string value is null.
-     */
-    public EncodedStringValue(int charset, byte[] data) {
-        // TODO: CharSet needs to be validated against MIBEnum.
-        if(null == data) {
-            throw new NullPointerException("EncodedStringValue: Text-string is null.");
-        }
-
-        mCharacterSet = charset;
-        mData = new byte[data.length];
-        System.arraycopy(data, 0, mData, 0, data.length);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param data the Text-string value
-     * @throws NullPointerException if Text-string value is null.
-     */
-    public EncodedStringValue(byte[] data) {
-        this(CharacterSets.DEFAULT_CHARSET, data);
-    }
-
-    public EncodedStringValue(String data) {
-        try {
-            mData = data.getBytes(CharacterSets.DEFAULT_CHARSET_NAME);
-            mCharacterSet = CharacterSets.DEFAULT_CHARSET;
-        } catch (UnsupportedEncodingException e) {
-            Log.e(TAG, "Default encoding must be supported.", e);
-        }
-    }
-
-    /**
-     * Get Char-set value.
-     *
-     * @return the value
-     */
-    public int getCharacterSet() {
-        return mCharacterSet;
-    }
-
-    /**
-     * Set Char-set value.
-     *
-     * @param charset the Char-set value
-     */
-    public void setCharacterSet(int charset) {
-        // TODO: CharSet needs to be validated against MIBEnum.
-        mCharacterSet = charset;
-    }
-
-    /**
-     * Get Text-string value.
-     *
-     * @return the value
-     */
-    public byte[] getTextString() {
-        byte[] byteArray = new byte[mData.length];
-
-        System.arraycopy(mData, 0, byteArray, 0, mData.length);
-        return byteArray;
-    }
-
-    /**
-     * Set Text-string value.
-     *
-     * @param textString the Text-string value
-     * @throws NullPointerException if Text-string value is null.
-     */
-    public void setTextString(byte[] textString) {
-        if(null == textString) {
-            throw new NullPointerException("EncodedStringValue: Text-string is null.");
-        }
-
-        mData = new byte[textString.length];
-        System.arraycopy(textString, 0, mData, 0, textString.length);
-    }
-
-    /**
-     * Convert this object to a {@link java.lang.String}. If the encoding of
-     * the EncodedStringValue is null or unsupported, it will be
-     * treated as iso-8859-1 encoding.
-     *
-     * @return The decoded String.
-     */
-    public String getString()  {
-        if (CharacterSets.ANY_CHARSET == mCharacterSet) {
-            return new String(mData); // system default encoding.
-        } else {
-            try {
-                String name = CharacterSets.getMimeName(mCharacterSet);
-                return new String(mData, name);
-            } catch (UnsupportedEncodingException e) {
-            	if (LOCAL_LOGV) {
-            		Log.v(TAG, e.getMessage(), e);
-            	}
-            	try {
-                    return new String(mData, CharacterSets.MIMENAME_ISO_8859_1);
-                } catch (UnsupportedEncodingException e2) {
-                    return new String(mData); // system default encoding.
-                }
-            }
-        }
-    }
-
-    /**
-     * Append to Text-string.
-     *
-     * @param textString the textString to append
-     * @throws NullPointerException if the text String is null
-     *                      or an IOException occured.
-     */
-    public void appendTextString(byte[] textString) {
-        if(null == textString) {
-            throw new NullPointerException("Text-string is null.");
-        }
-
-        if(null == mData) {
-            mData = new byte[textString.length];
-            System.arraycopy(textString, 0, mData, 0, textString.length);
-        } else {
-            ByteArrayOutputStream newTextString = new ByteArrayOutputStream();
-            try {
-                newTextString.write(mData);
-                newTextString.write(textString);
-            } catch (IOException e) {
-                e.printStackTrace();
-                throw new NullPointerException(
-                        "appendTextString: failed when write a new Text-string");
-            }
-
-            mData = newTextString.toByteArray();
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see java.lang.Object#clone()
-     */
-    @Override
-    public Object clone() throws CloneNotSupportedException {
-        int len = mData.length;
-        byte[] dstBytes = new byte[len];
-        System.arraycopy(mData, 0, dstBytes, 0, len);
-
-        try {
-            return new EncodedStringValue(mCharacterSet, dstBytes);
-        } catch (Exception e) {
-            Log.e(TAG, "failed to clone an EncodedStringValue: " + this);
-            e.printStackTrace();
-            throw new CloneNotSupportedException(e.getMessage());
-        }
-    }
-
-    /**
-     * Split this encoded string around matches of the given pattern.
-     *
-     * @param pattern the delimiting pattern
-     * @return the array of encoded strings computed by splitting this encoded
-     *         string around matches of the given pattern
-     */
-    public EncodedStringValue[] split(String pattern) {
-        String[] temp = getString().split(pattern);
-        EncodedStringValue[] ret = new EncodedStringValue[temp.length];
-        for (int i = 0; i < ret.length; ++i) {
-            try {
-                ret[i] = new EncodedStringValue(mCharacterSet,
-                        temp[i].getBytes());
-            } catch (NullPointerException e) {
-                // Can't arrive here
-                return null;
-            }
-        }
-        return ret;
-    }
-
-    /**
-     * Extract an EncodedStringValue[] from a given String.
-     */
-    public static EncodedStringValue[] extract(String src) {
-        String[] values = src.split(";");
-
-        ArrayList<EncodedStringValue> list = new ArrayList<EncodedStringValue>();
-        for (int i = 0; i < values.length; i++) {
-            if (values[i].length() > 0) {
-                list.add(new EncodedStringValue(values[i]));
-            }
-        }
-
-        int len = list.size();
-        if (len > 0) {
-            return list.toArray(new EncodedStringValue[len]);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Concatenate an EncodedStringValue[] into a single String.
-     */
-    public static String concat(EncodedStringValue[] addr) {
-        StringBuilder sb = new StringBuilder();
-        int maxIndex = addr.length - 1;
-        for (int i = 0; i <= maxIndex; i++) {
-            sb.append(addr[i].getString());
-            if (i < maxIndex) {
-                sb.append(";");
-            }
-        }
-
-        return sb.toString();
-    }
-
-    public static EncodedStringValue copy(EncodedStringValue value) {
-        if (value == null) {
-            return null;
-        }
-
-        return new EncodedStringValue(value.mCharacterSet, value.mData);
-    }
-
-    public static EncodedStringValue[] encodeStrings(String[] array) {
-        int count = array.length;
-        if (count > 0) {
-            EncodedStringValue[] encodedArray = new EncodedStringValue[count];
-            for (int i = 0; i < count; i++) {
-                encodedArray[i] = new EncodedStringValue(array[i]);
-            }
-            return encodedArray;
-        }
-        return null;
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/GenericPdu.java b/src/android/support/v7/mms/pdu/GenericPdu.java
deleted file mode 100644
index a19520c..0000000
--- a/src/android/support/v7/mms/pdu/GenericPdu.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-public class GenericPdu {
-    /**
-     * The headers of pdu.
-     */
-    PduHeaders mPduHeaders = null;
-
-    /**
-     * Constructor.
-     */
-    public GenericPdu() {
-        mPduHeaders = new PduHeaders();
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param headers Headers for this PDU.
-     */
-    GenericPdu(PduHeaders headers) {
-        mPduHeaders = headers;
-    }
-
-    /**
-     * Get the headers of this PDU.
-     *
-     * @return A PduHeaders of this PDU.
-     */
-    PduHeaders getPduHeaders() {
-        return mPduHeaders;
-    }
-
-    /**
-     * Get X-Mms-Message-Type field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public int getMessageType() {
-        return mPduHeaders.getOctet(PduHeaders.MESSAGE_TYPE);
-    }
-
-    /**
-     * Set X-Mms-Message-Type field value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     *         RuntimeException if field's value is not Octet.
-     */
-    public void setMessageType(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.MESSAGE_TYPE);
-    }
-
-    /**
-     * Get X-Mms-MMS-Version field value.
-     *
-     * @return the X-Mms-MMS-Version value
-     */
-    public int getMmsVersion() {
-        return mPduHeaders.getOctet(PduHeaders.MMS_VERSION);
-    }
-
-    /**
-     * Set X-Mms-MMS-Version field value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     *         RuntimeException if field's value is not Octet.
-     */
-    public void setMmsVersion(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.MMS_VERSION);
-    }
-
-    /**
-     * Get From value.
-     * From-value = Value-length
-     *      (Address-present-token Encoded-string-value | Insert-address-token)
-     *
-     * @return the value
-     */
-    public EncodedStringValue getFrom() {
-       return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
-    }
-
-    /**
-     * Set From value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setFrom(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/InvalidHeaderValueException.java b/src/android/support/v7/mms/pdu/InvalidHeaderValueException.java
deleted file mode 100644
index 6df4974..0000000
--- a/src/android/support/v7/mms/pdu/InvalidHeaderValueException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-/**
- * Thrown when an invalid header value was set.
- */
-public class InvalidHeaderValueException extends MmsException {
-    private static final long serialVersionUID = -2053384496042052262L;
-
-    /**
-     * Constructs an InvalidHeaderValueException with no detailed message.
-     */
-    public InvalidHeaderValueException() {
-        super();
-    }
-
-    /**
-     * Constructs an InvalidHeaderValueException with the specified detailed message.
-     *
-     * @param message the detailed message.
-     */
-    public InvalidHeaderValueException(String message) {
-        super(message);
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/MmsException.java b/src/android/support/v7/mms/pdu/MmsException.java
deleted file mode 100644
index 1237e90..0000000
--- a/src/android/support/v7/mms/pdu/MmsException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-/**
- * A generic exception that is thrown by the Mms client.
- */
-public class MmsException extends Exception {
-    private static final long serialVersionUID = -7323249827281485390L;
-
-    /**
-     * Creates a new MmsException.
-     */
-    public MmsException() {
-        super();
-    }
-
-    /**
-     * Creates a new MmsException with the specified detail message.
-     *
-     * @param message the detail message.
-     */
-    public MmsException(String message) {
-        super(message);
-    }
-
-    /**
-     * Creates a new MmsException with the specified cause.
-     *
-     * @param cause the cause.
-     */
-    public MmsException(Throwable cause) {
-        super(cause);
-    }
-
-    /**
-     * Creates a new MmsException with the specified detail message and cause.
-     *
-     * @param message the detail message.
-     * @param cause the cause.
-     */
-    public MmsException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/MultimediaMessagePdu.java b/src/android/support/v7/mms/pdu/MultimediaMessagePdu.java
deleted file mode 100644
index 69670b6..0000000
--- a/src/android/support/v7/mms/pdu/MultimediaMessagePdu.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-/**
- * Multimedia message PDU.
- */
-public class MultimediaMessagePdu extends GenericPdu{
-    /**
-     * The body.
-     */
-    private PduBody mMessageBody;
-
-    /**
-     * Constructor.
-     */
-    public MultimediaMessagePdu() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param header the header of this PDU
-     * @param body the body of this PDU
-     */
-    public MultimediaMessagePdu(PduHeaders header, PduBody body) {
-        super(header);
-        mMessageBody = body;
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    MultimediaMessagePdu(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get body of the PDU.
-     *
-     * @return the body
-     */
-    public PduBody getBody() {
-        return mMessageBody;
-    }
-
-    /**
-     * Set body of the PDU.
-     *
-     * @param body the body
-     */
-    public void setBody(PduBody body) {
-        mMessageBody = body;
-    }
-
-    /**
-     * Get subject.
-     *
-     * @return the value
-     */
-    public EncodedStringValue getSubject() {
-        return mPduHeaders.getEncodedStringValue(PduHeaders.SUBJECT);
-    }
-
-    /**
-     * Set subject.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setSubject(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.SUBJECT);
-    }
-
-    /**
-     * Get To value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getTo() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
-    }
-
-    /**
-     * Add a "To" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void addTo(EncodedStringValue value) {
-        mPduHeaders.appendEncodedStringValue(value, PduHeaders.TO);
-    }
-
-    /**
-     * Get X-Mms-Priority value.
-     *
-     * @return the value
-     */
-    public int getPriority() {
-        return mPduHeaders.getOctet(PduHeaders.PRIORITY);
-    }
-
-    /**
-     * Set X-Mms-Priority value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setPriority(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.PRIORITY);
-    }
-
-    /**
-     * Get Date value.
-     *
-     * @return the value
-     */
-    public long getDate() {
-        return mPduHeaders.getLongInteger(PduHeaders.DATE);
-    }
-
-    /**
-     * Set Date value in seconds.
-     *
-     * @param value the value
-     */
-    public void setDate(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.DATE);
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/NotificationInd.java b/src/android/support/v7/mms/pdu/NotificationInd.java
deleted file mode 100644
index cad6ac4..0000000
--- a/src/android/support/v7/mms/pdu/NotificationInd.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-/**
- * M-Notification.ind PDU.
- */
-public class NotificationInd extends GenericPdu {
-    /**
-     * Empty constructor.
-     * Since the Pdu corresponding to this class is constructed
-     * by the Proxy-Relay server, this class is only instantiated
-     * by the Pdu Parser.
-     *
-     * @throws InvalidHeaderValueException if error occurs.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public NotificationInd() throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    NotificationInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get X-Mms-Content-Class Value.
-     *
-     * @return the value
-     */
-    public int getContentClass() {
-        return mPduHeaders.getOctet(PduHeaders.CONTENT_CLASS);
-    }
-
-    /**
-     * Set X-Mms-Content-Class Value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public void setContentClass(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.CONTENT_CLASS);
-    }
-
-    /**
-     * Get X-Mms-Content-Location value.
-     * When used in a PDU other than M-Mbox-Delete.conf and M-Delete.conf:
-     * Content-location-value = Uri-value
-     *
-     * @return the value
-     */
-    public byte[] getContentLocation() {
-        return mPduHeaders.getTextString(PduHeaders.CONTENT_LOCATION);
-    }
-
-    /**
-     * Set X-Mms-Content-Location value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public void setContentLocation(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.CONTENT_LOCATION);
-    }
-
-    /**
-     * Get X-Mms-Expiry value.
-     *
-     * Expiry-value = Value-length
-     *      (Absolute-token Date-value | Relative-token Delta-seconds-value)
-     *
-     * @return the value
-     */
-    public long getExpiry() {
-        return mPduHeaders.getLongInteger(PduHeaders.EXPIRY);
-    }
-
-    /**
-     * Set X-Mms-Expiry value.
-     *
-     * @param value the value
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setExpiry(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.EXPIRY);
-    }
-
-    /**
-     * Get From value.
-     * From-value = Value-length
-     *      (Address-present-token Encoded-string-value | Insert-address-token)
-     *
-     * @return the value
-     */
-    public EncodedStringValue getFrom() {
-       return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
-    }
-
-    /**
-     * Set From value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public void setFrom(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
-    }
-
-    /**
-     * Get X-Mms-Message-Class value.
-     * Message-class-value = Class-identifier | Token-text
-     * Class-identifier = Personal | Advertisement | Informational | Auto
-     *
-     * @return the value
-     */
-    public byte[] getMessageClass() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Set X-Mms-Message-Class value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public void setMessageClass(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Get X-Mms-Message-Size value.
-     * Message-size-value = Long-integer
-     *
-     * @return the value
-     */
-    public long getMessageSize() {
-        return mPduHeaders.getLongInteger(PduHeaders.MESSAGE_SIZE);
-    }
-
-    /**
-     * Set X-Mms-Message-Size value.
-     *
-     * @param value the value
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setMessageSize(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.MESSAGE_SIZE);
-    }
-
-    /**
-     * Get subject.
-     *
-     * @return the value
-     */
-    public EncodedStringValue getSubject() {
-        return mPduHeaders.getEncodedStringValue(PduHeaders.SUBJECT);
-    }
-
-    /**
-     * Set subject.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public void setSubject(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.SUBJECT);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id.
-     *
-     * @return the value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public void setTransactionId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Get X-Mms-Delivery-Report Value.
-     *
-     * @return the value
-     */
-    public int getDeliveryReport() {
-        return mPduHeaders.getOctet(PduHeaders.DELIVERY_REPORT);
-    }
-
-    /**
-     * Set X-Mms-Delivery-Report Value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public void setDeliveryReport(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.DELIVERY_REPORT);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte getDrmContent() {return 0x00;}
-     *     public void setDrmContent(byte value) {}
-     *
-     *     public byte getDistributionIndicator() {return 0x00;}
-     *     public void setDistributionIndicator(byte value) {}
-     *
-     *     public ElementDescriptorValue getElementDescriptor() {return null;}
-     *     public void getElementDescriptor(ElementDescriptorValue value) {}
-     *
-     *     public byte getPriority() {return 0x00;}
-     *     public void setPriority(byte value) {}
-     *
-     *     public byte getRecommendedRetrievalMode() {return 0x00;}
-     *     public void setRecommendedRetrievalMode(byte value) {}
-     *
-     *     public byte getRecommendedRetrievalModeText() {return 0x00;}
-     *     public void setRecommendedRetrievalModeText(byte value) {}
-     *
-     *     public byte[] getReplaceId() {return 0x00;}
-     *     public void setReplaceId(byte[] value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     *
-     *     public byte getReplyCharging() {return 0x00;}
-     *     public void setReplyCharging(byte value) {}
-     *
-     *     public byte getReplyChargingDeadline() {return 0x00;}
-     *     public void setReplyChargingDeadline(byte value) {}
-     *
-     *     public byte[] getReplyChargingId() {return 0x00;}
-     *     public void setReplyChargingId(byte[] value) {}
-     *
-     *     public long getReplyChargingSize() {return 0;}
-     *     public void setReplyChargingSize(long value) {}
-     *
-     *     public byte getStored() {return 0x00;}
-     *     public void setStored(byte value) {}
-     */
-}
diff --git a/src/android/support/v7/mms/pdu/NotifyRespInd.java b/src/android/support/v7/mms/pdu/NotifyRespInd.java
deleted file mode 100644
index c28458b..0000000
--- a/src/android/support/v7/mms/pdu/NotifyRespInd.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-/**
- * M-NofifyResp.ind PDU.
- */
-public class NotifyRespInd extends GenericPdu {
-    /**
-     * Constructor, used when composing a M-NotifyResp.ind pdu.
-     *
-     * @param mmsVersion current version of mms
-     * @param transactionId the transaction-id value
-     * @param status the status value
-     * @throws InvalidHeaderValueException if parameters are invalid.
-     *         NullPointerException if transactionId is null.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public NotifyRespInd(int mmsVersion,
-                         byte[] transactionId,
-                         int status) throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND);
-        setMmsVersion(mmsVersion);
-        setTransactionId(transactionId);
-        setStatus(status);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    NotifyRespInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get X-Mms-Report-Allowed field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public int getReportAllowed() {
-        return mPduHeaders.getOctet(PduHeaders.REPORT_ALLOWED);
-    }
-
-    /**
-     * Set X-Mms-Report-Allowed field value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public void setReportAllowed(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.REPORT_ALLOWED);
-    }
-
-    /**
-     * Set X-Mms-Status field value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public void setStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.STATUS);
-    }
-
-    /**
-     * GetX-Mms-Status field value.
-     *
-     * @return the X-Mms-Status value
-     */
-    public int getStatus() {
-        return mPduHeaders.getOctet(PduHeaders.STATUS);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id field value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     *         RuntimeException if an undeclared error occurs.
-     */
-    public void setTransactionId(byte[] value) {
-            mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/PduBody.java b/src/android/support/v7/mms/pdu/PduBody.java
deleted file mode 100644
index fa2b4a6..0000000
--- a/src/android/support/v7/mms/pdu/PduBody.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
-
-public class PduBody {
-    private Vector<PduPart> mParts = null;
-
-    private Map<String, PduPart> mPartMapByContentId = null;
-    private Map<String, PduPart> mPartMapByContentLocation = null;
-    private Map<String, PduPart> mPartMapByName = null;
-    private Map<String, PduPart> mPartMapByFileName = null;
-
-    /**
-     * Constructor.
-     */
-    public PduBody() {
-        mParts = new Vector<PduPart>();
-
-        mPartMapByContentId = new HashMap<String, PduPart>();
-        mPartMapByContentLocation  = new HashMap<String, PduPart>();
-        mPartMapByName = new HashMap<String, PduPart>();
-        mPartMapByFileName = new HashMap<String, PduPart>();
-    }
-
-    private void putPartToMaps(PduPart part) {
-        // Put part to mPartMapByContentId.
-        byte[] contentId = part.getContentId();
-        if(null != contentId) {
-            mPartMapByContentId.put(new String(contentId), part);
-        }
-
-        // Put part to mPartMapByContentLocation.
-        byte[] contentLocation = part.getContentLocation();
-        if(null != contentLocation) {
-            String clc = new String(contentLocation);
-            mPartMapByContentLocation.put(clc, part);
-        }
-
-        // Put part to mPartMapByName.
-        byte[] name = part.getName();
-        if(null != name) {
-            String clc = new String(name);
-            mPartMapByName.put(clc, part);
-        }
-
-        // Put part to mPartMapByFileName.
-        byte[] fileName = part.getFilename();
-        if(null != fileName) {
-            String clc = new String(fileName);
-            mPartMapByFileName.put(clc, part);
-        }
-    }
-
-    /**
-     * Appends the specified part to the end of this body.
-     *
-     * @param part part to be appended
-     * @return true when success, false when fail
-     * @throws NullPointerException when part is null
-     */
-    public boolean addPart(PduPart part) {
-        if(null == part) {
-            throw new NullPointerException();
-        }
-
-        putPartToMaps(part);
-        return mParts.add(part);
-    }
-
-    /**
-     * Inserts the specified part at the specified position.
-     *
-     * @param index index at which the specified part is to be inserted
-     * @param part part to be inserted
-     * @throws NullPointerException when part is null
-     */
-    public void addPart(int index, PduPart part) {
-        if(null == part) {
-            throw new NullPointerException();
-        }
-
-        putPartToMaps(part);
-        mParts.add(index, part);
-    }
-
-    /**
-     * Removes the part at the specified position.
-     *
-     * @param index index of the part to return
-     * @return part at the specified index
-     */
-    public PduPart removePart(int index) {
-        return mParts.remove(index);
-    }
-
-    /**
-     * Remove all of the parts.
-     */
-    public void removeAll() {
-        mParts.clear();
-    }
-
-    /**
-     * Get the part at the specified position.
-     *
-     * @param index index of the part to return
-     * @return part at the specified index
-     */
-    public PduPart getPart(int index) {
-        return mParts.get(index);
-    }
-
-    /**
-     * Get the index of the specified part.
-     *
-     * @param part the part object
-     * @return index the index of the first occurrence of the part in this body
-     */
-    public int getPartIndex(PduPart part) {
-        return mParts.indexOf(part);
-    }
-
-    /**
-     * Get the number of parts.
-     *
-     * @return the number of parts
-     */
-    public int getPartsNum() {
-        return mParts.size();
-    }
-
-    /**
-     * Get pdu part by content id.
-     *
-     * @param cid the value of content id.
-     * @return the pdu part.
-     */
-    public PduPart getPartByContentId(String cid) {
-        return mPartMapByContentId.get(cid);
-    }
-
-    /**
-     * Get pdu part by Content-Location. Content-Location of part is
-     * the same as filename and name(param of content-type).
-     *
-     * @param contentLocation the content location.
-     * @return the pdu part.
-     */
-    public PduPart getPartByContentLocation(String contentLocation) {
-        return mPartMapByContentLocation.get(contentLocation);
-    }
-
-    /**
-     * Get pdu part by name.
-     *
-     * @param name the value of filename.
-     * @return the pdu part.
-     */
-    public PduPart getPartByName(String name) {
-        return mPartMapByName.get(name);
-    }
-
-    /**
-     * Get pdu part by filename.
-     *
-     * @param filename the value of filename.
-     * @return the pdu part.
-     */
-    public PduPart getPartByFileName(String filename) {
-        return mPartMapByFileName.get(filename);
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/PduContentTypes.java b/src/android/support/v7/mms/pdu/PduContentTypes.java
deleted file mode 100644
index 9639119..0000000
--- a/src/android/support/v7/mms/pdu/PduContentTypes.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-public class PduContentTypes {
-    /**
-     * All content types. From:
-     * http://www.openmobilealliance.org/tech/omna/omna-wsp-content-type.htm
-     */
-    static final String[] contentTypes = {
-        "*/*",                                        /* 0x00 */
-        "text/*",                                     /* 0x01 */
-        "text/html",                                  /* 0x02 */
-        "text/plain",                                 /* 0x03 */
-        "text/x-hdml",                                /* 0x04 */
-        "text/x-ttml",                                /* 0x05 */
-        "text/x-vCalendar",                           /* 0x06 */
-        "text/x-vCard",                               /* 0x07 */
-        "text/vnd.wap.wml",                           /* 0x08 */
-        "text/vnd.wap.wmlscript",                     /* 0x09 */
-        "text/vnd.wap.wta-event",                     /* 0x0A */
-        "multipart/*",                                /* 0x0B */
-        "multipart/mixed",                            /* 0x0C */
-        "multipart/form-data",                        /* 0x0D */
-        "multipart/byterantes",                       /* 0x0E */
-        "multipart/alternative",                      /* 0x0F */
-        "application/*",                              /* 0x10 */
-        "application/java-vm",                        /* 0x11 */
-        "application/x-www-form-urlencoded",          /* 0x12 */
-        "application/x-hdmlc",                        /* 0x13 */
-        "application/vnd.wap.wmlc",                   /* 0x14 */
-        "application/vnd.wap.wmlscriptc",             /* 0x15 */
-        "application/vnd.wap.wta-eventc",             /* 0x16 */
-        "application/vnd.wap.uaprof",                 /* 0x17 */
-        "application/vnd.wap.wtls-ca-certificate",    /* 0x18 */
-        "application/vnd.wap.wtls-user-certificate",  /* 0x19 */
-        "application/x-x509-ca-cert",                 /* 0x1A */
-        "application/x-x509-user-cert",               /* 0x1B */
-        "image/*",                                    /* 0x1C */
-        "image/gif",                                  /* 0x1D */
-        "image/jpeg",                                 /* 0x1E */
-        "image/tiff",                                 /* 0x1F */
-        "image/png",                                  /* 0x20 */
-        "image/vnd.wap.wbmp",                         /* 0x21 */
-        "application/vnd.wap.multipart.*",            /* 0x22 */
-        "application/vnd.wap.multipart.mixed",        /* 0x23 */
-        "application/vnd.wap.multipart.form-data",    /* 0x24 */
-        "application/vnd.wap.multipart.byteranges",   /* 0x25 */
-        "application/vnd.wap.multipart.alternative",  /* 0x26 */
-        "application/xml",                            /* 0x27 */
-        "text/xml",                                   /* 0x28 */
-        "application/vnd.wap.wbxml",                  /* 0x29 */
-        "application/x-x968-cross-cert",              /* 0x2A */
-        "application/x-x968-ca-cert",                 /* 0x2B */
-        "application/x-x968-user-cert",               /* 0x2C */
-        "text/vnd.wap.si",                            /* 0x2D */
-        "application/vnd.wap.sic",                    /* 0x2E */
-        "text/vnd.wap.sl",                            /* 0x2F */
-        "application/vnd.wap.slc",                    /* 0x30 */
-        "text/vnd.wap.co",                            /* 0x31 */
-        "application/vnd.wap.coc",                    /* 0x32 */
-        "application/vnd.wap.multipart.related",      /* 0x33 */
-        "application/vnd.wap.sia",                    /* 0x34 */
-        "text/vnd.wap.connectivity-xml",              /* 0x35 */
-        "application/vnd.wap.connectivity-wbxml",     /* 0x36 */
-        "application/pkcs7-mime",                     /* 0x37 */
-        "application/vnd.wap.hashed-certificate",     /* 0x38 */
-        "application/vnd.wap.signed-certificate",     /* 0x39 */
-        "application/vnd.wap.cert-response",          /* 0x3A */
-        "application/xhtml+xml",                      /* 0x3B */
-        "application/wml+xml",                        /* 0x3C */
-        "text/css",                                   /* 0x3D */
-        "application/vnd.wap.mms-message",            /* 0x3E */
-        "application/vnd.wap.rollover-certificate",   /* 0x3F */
-        "application/vnd.wap.locc+wbxml",             /* 0x40 */
-        "application/vnd.wap.loc+xml",                /* 0x41 */
-        "application/vnd.syncml.dm+wbxml",            /* 0x42 */
-        "application/vnd.syncml.dm+xml",              /* 0x43 */
-        "application/vnd.syncml.notification",        /* 0x44 */
-        "application/vnd.wap.xhtml+xml",              /* 0x45 */
-        "application/vnd.wv.csp.cir",                 /* 0x46 */
-        "application/vnd.oma.dd+xml",                 /* 0x47 */
-        "application/vnd.oma.drm.message",            /* 0x48 */
-        "application/vnd.oma.drm.content",            /* 0x49 */
-        "application/vnd.oma.drm.rights+xml",         /* 0x4A */
-        "application/vnd.oma.drm.rights+wbxml",       /* 0x4B */
-        "application/vnd.wv.csp+xml",                 /* 0x4C */
-        "application/vnd.wv.csp+wbxml",               /* 0x4D */
-        "application/vnd.syncml.ds.notification",     /* 0x4E */
-        "audio/*",                                    /* 0x4F */
-        "video/*",                                    /* 0x50 */
-        "application/vnd.oma.dd2+xml",                /* 0x51 */
-        "application/mikey"                           /* 0x52 */
-    };
-}
diff --git a/src/android/support/v7/mms/pdu/PduHeaders.java b/src/android/support/v7/mms/pdu/PduHeaders.java
deleted file mode 100644
index bea31bf..0000000
--- a/src/android/support/v7/mms/pdu/PduHeaders.java
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-public class PduHeaders {
-    /**
-     * All pdu header fields.
-     */
-    public static final int BCC                             = 0x81;
-    public static final int CC                              = 0x82;
-    public static final int CONTENT_LOCATION                = 0x83;
-    public static final int CONTENT_TYPE                    = 0x84;
-    public static final int DATE                            = 0x85;
-    public static final int DELIVERY_REPORT                 = 0x86;
-    public static final int DELIVERY_TIME                   = 0x87;
-    public static final int EXPIRY                          = 0x88;
-    public static final int FROM                            = 0x89;
-    public static final int MESSAGE_CLASS                   = 0x8A;
-    public static final int MESSAGE_ID                      = 0x8B;
-    public static final int MESSAGE_TYPE                    = 0x8C;
-    public static final int MMS_VERSION                     = 0x8D;
-    public static final int MESSAGE_SIZE                    = 0x8E;
-    public static final int PRIORITY                        = 0x8F;
-
-    public static final int READ_REPLY                      = 0x90;
-    public static final int READ_REPORT                     = 0x90;
-    public static final int REPORT_ALLOWED                  = 0x91;
-    public static final int RESPONSE_STATUS                 = 0x92;
-    public static final int RESPONSE_TEXT                   = 0x93;
-    public static final int SENDER_VISIBILITY               = 0x94;
-    public static final int STATUS                          = 0x95;
-    public static final int SUBJECT                         = 0x96;
-    public static final int TO                              = 0x97;
-    public static final int TRANSACTION_ID                  = 0x98;
-    public static final int RETRIEVE_STATUS                 = 0x99;
-    public static final int RETRIEVE_TEXT                   = 0x9A;
-    public static final int READ_STATUS                     = 0x9B;
-    public static final int REPLY_CHARGING                  = 0x9C;
-    public static final int REPLY_CHARGING_DEADLINE         = 0x9D;
-    public static final int REPLY_CHARGING_ID               = 0x9E;
-    public static final int REPLY_CHARGING_SIZE             = 0x9F;
-
-    public static final int PREVIOUSLY_SENT_BY              = 0xA0;
-    public static final int PREVIOUSLY_SENT_DATE            = 0xA1;
-    public static final int STORE                           = 0xA2;
-    public static final int MM_STATE                        = 0xA3;
-    public static final int MM_FLAGS                        = 0xA4;
-    public static final int STORE_STATUS                    = 0xA5;
-    public static final int STORE_STATUS_TEXT               = 0xA6;
-    public static final int STORED                          = 0xA7;
-    public static final int ATTRIBUTES                      = 0xA8;
-    public static final int TOTALS                          = 0xA9;
-    public static final int MBOX_TOTALS                     = 0xAA;
-    public static final int QUOTAS                          = 0xAB;
-    public static final int MBOX_QUOTAS                     = 0xAC;
-    public static final int MESSAGE_COUNT                   = 0xAD;
-    public static final int CONTENT                         = 0xAE;
-    public static final int START                           = 0xAF;
-
-    public static final int ADDITIONAL_HEADERS              = 0xB0;
-    public static final int DISTRIBUTION_INDICATOR          = 0xB1;
-    public static final int ELEMENT_DESCRIPTOR              = 0xB2;
-    public static final int LIMIT                           = 0xB3;
-    public static final int RECOMMENDED_RETRIEVAL_MODE      = 0xB4;
-    public static final int RECOMMENDED_RETRIEVAL_MODE_TEXT = 0xB5;
-    public static final int STATUS_TEXT                     = 0xB6;
-    public static final int APPLIC_ID                       = 0xB7;
-    public static final int REPLY_APPLIC_ID                 = 0xB8;
-    public static final int AUX_APPLIC_ID                   = 0xB9;
-    public static final int CONTENT_CLASS                   = 0xBA;
-    public static final int DRM_CONTENT                     = 0xBB;
-    public static final int ADAPTATION_ALLOWED              = 0xBC;
-    public static final int REPLACE_ID                      = 0xBD;
-    public static final int CANCEL_ID                       = 0xBE;
-    public static final int CANCEL_STATUS                   = 0xBF;
-
-    /**
-     * X-Mms-Message-Type field types.
-     */
-    public static final int MESSAGE_TYPE_SEND_REQ           = 0x80;
-    public static final int MESSAGE_TYPE_SEND_CONF          = 0x81;
-    public static final int MESSAGE_TYPE_NOTIFICATION_IND   = 0x82;
-    public static final int MESSAGE_TYPE_NOTIFYRESP_IND     = 0x83;
-    public static final int MESSAGE_TYPE_RETRIEVE_CONF      = 0x84;
-    public static final int MESSAGE_TYPE_ACKNOWLEDGE_IND    = 0x85;
-    public static final int MESSAGE_TYPE_DELIVERY_IND       = 0x86;
-    public static final int MESSAGE_TYPE_READ_REC_IND       = 0x87;
-    public static final int MESSAGE_TYPE_READ_ORIG_IND      = 0x88;
-    public static final int MESSAGE_TYPE_FORWARD_REQ        = 0x89;
-    public static final int MESSAGE_TYPE_FORWARD_CONF       = 0x8A;
-    public static final int MESSAGE_TYPE_MBOX_STORE_REQ     = 0x8B;
-    public static final int MESSAGE_TYPE_MBOX_STORE_CONF    = 0x8C;
-    public static final int MESSAGE_TYPE_MBOX_VIEW_REQ      = 0x8D;
-    public static final int MESSAGE_TYPE_MBOX_VIEW_CONF     = 0x8E;
-    public static final int MESSAGE_TYPE_MBOX_UPLOAD_REQ    = 0x8F;
-    public static final int MESSAGE_TYPE_MBOX_UPLOAD_CONF   = 0x90;
-    public static final int MESSAGE_TYPE_MBOX_DELETE_REQ    = 0x91;
-    public static final int MESSAGE_TYPE_MBOX_DELETE_CONF   = 0x92;
-    public static final int MESSAGE_TYPE_MBOX_DESCR         = 0x93;
-    public static final int MESSAGE_TYPE_DELETE_REQ         = 0x94;
-    public static final int MESSAGE_TYPE_DELETE_CONF        = 0x95;
-    public static final int MESSAGE_TYPE_CANCEL_REQ         = 0x96;
-    public static final int MESSAGE_TYPE_CANCEL_CONF        = 0x97;
-
-    /**
-     *  X-Mms-Delivery-Report |
-     *  X-Mms-Read-Report |
-     *  X-Mms-Report-Allowed |
-     *  X-Mms-Sender-Visibility |
-     *  X-Mms-Store |
-     *  X-Mms-Stored |
-     *  X-Mms-Totals |
-     *  X-Mms-Quotas |
-     *  X-Mms-Distribution-Indicator |
-     *  X-Mms-DRM-Content |
-     *  X-Mms-Adaptation-Allowed |
-     *  field types.
-     */
-    public static final int VALUE_YES                       = 0x80;
-    public static final int VALUE_NO                        = 0x81;
-
-    /**
-     *  Delivery-Time |
-     *  Expiry and Reply-Charging-Deadline |
-     *  field type components.
-     */
-    public static final int VALUE_ABSOLUTE_TOKEN            = 0x80;
-    public static final int VALUE_RELATIVE_TOKEN            = 0x81;
-
-    /**
-     * X-Mms-MMS-Version field types.
-     */
-    public static final int MMS_VERSION_1_3                 = ((1 << 4) | 3);
-    public static final int MMS_VERSION_1_2                 = ((1 << 4) | 2);
-    public static final int MMS_VERSION_1_1                 = ((1 << 4) | 1);
-    public static final int MMS_VERSION_1_0                 = ((1 << 4) | 0);
-
-    // Current version is 1.2.
-    public static final int CURRENT_MMS_VERSION             = MMS_VERSION_1_2;
-
-    /**
-     *  From field type components.
-     */
-    public static final int FROM_ADDRESS_PRESENT_TOKEN      = 0x80;
-    public static final int FROM_INSERT_ADDRESS_TOKEN       = 0x81;
-
-    public static final String FROM_ADDRESS_PRESENT_TOKEN_STR = "address-present-token";
-    public static final String FROM_INSERT_ADDRESS_TOKEN_STR = "insert-address-token";
-
-    /**
-     *  X-Mms-Status Field.
-     */
-    public static final int STATUS_EXPIRED                  = 0x80;
-    public static final int STATUS_RETRIEVED                = 0x81;
-    public static final int STATUS_REJECTED                 = 0x82;
-    public static final int STATUS_DEFERRED                 = 0x83;
-    public static final int STATUS_UNRECOGNIZED             = 0x84;
-    public static final int STATUS_INDETERMINATE            = 0x85;
-    public static final int STATUS_FORWARDED                = 0x86;
-    public static final int STATUS_UNREACHABLE              = 0x87;
-
-    /**
-     *  MM-Flags field type components.
-     */
-    public static final int MM_FLAGS_ADD_TOKEN              = 0x80;
-    public static final int MM_FLAGS_REMOVE_TOKEN           = 0x81;
-    public static final int MM_FLAGS_FILTER_TOKEN           = 0x82;
-
-    /**
-     *  X-Mms-Message-Class field types.
-     */
-    public static final int MESSAGE_CLASS_PERSONAL          = 0x80;
-    public static final int MESSAGE_CLASS_ADVERTISEMENT     = 0x81;
-    public static final int MESSAGE_CLASS_INFORMATIONAL     = 0x82;
-    public static final int MESSAGE_CLASS_AUTO              = 0x83;
-
-    public static final String MESSAGE_CLASS_PERSONAL_STR = "personal";
-    public static final String MESSAGE_CLASS_ADVERTISEMENT_STR = "advertisement";
-    public static final String MESSAGE_CLASS_INFORMATIONAL_STR = "informational";
-    public static final String MESSAGE_CLASS_AUTO_STR = "auto";
-
-    /**
-     *  X-Mms-Priority field types.
-     */
-    public static final int PRIORITY_LOW                    = 0x80;
-    public static final int PRIORITY_NORMAL                 = 0x81;
-    public static final int PRIORITY_HIGH                   = 0x82;
-
-    /**
-     *  X-Mms-Response-Status field types.
-     */
-    public static final int RESPONSE_STATUS_OK                   = 0x80;
-    public static final int RESPONSE_STATUS_ERROR_UNSPECIFIED    = 0x81;
-    public static final int RESPONSE_STATUS_ERROR_SERVICE_DENIED = 0x82;
-
-    public static final int RESPONSE_STATUS_ERROR_MESSAGE_FORMAT_CORRUPT     = 0x83;
-    public static final int RESPONSE_STATUS_ERROR_SENDING_ADDRESS_UNRESOLVED = 0x84;
-
-    public static final int RESPONSE_STATUS_ERROR_MESSAGE_NOT_FOUND    = 0x85;
-    public static final int RESPONSE_STATUS_ERROR_NETWORK_PROBLEM      = 0x86;
-    public static final int RESPONSE_STATUS_ERROR_CONTENT_NOT_ACCEPTED = 0x87;
-    public static final int RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE  = 0x88;
-    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE    = 0xC0;
-
-    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_SENDNG_ADDRESS_UNRESOLVED = 0xC1;
-    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND         = 0xC2;
-    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM           = 0xC3;
-    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS           = 0xC4;
-
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_FAILURE                             = 0xE0;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_SERVICE_DENIED                      = 0xE1;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT              = 0xE2;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_SENDING_ADDRESS_UNRESOLVED          = 0xE3;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND                   = 0xE4;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_CONTENT_NOT_ACCEPTED                = 0xE5;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_LIMITATIONS_NOT_MET  = 0xE6;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_REQUEST_NOT_ACCEPTED = 0xE6;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_FORWARDING_DENIED    = 0xE8;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_NOT_SUPPORTED        = 0xE9;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_ADDRESS_HIDING_NOT_SUPPORTED        = 0xEA;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID                     = 0xEB;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_END                                 = 0xFF;
-
-    /**
-     *  X-Mms-Retrieve-Status field types.
-     */
-    public static final int RETRIEVE_STATUS_OK                                  = 0x80;
-    public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE             = 0xC0;
-    public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND   = 0xC1;
-    public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM     = 0xC2;
-    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE             = 0xE0;
-    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_SERVICE_DENIED      = 0xE1;
-    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND   = 0xE2;
-    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED = 0xE3;
-    public static final int RETRIEVE_STATUS_ERROR_END                           = 0xFF;
-
-    /**
-     *  X-Mms-Sender-Visibility field types.
-     */
-    public static final int SENDER_VISIBILITY_HIDE          = 0x80;
-    public static final int SENDER_VISIBILITY_SHOW          = 0x81;
-
-    /**
-     *  X-Mms-Read-Status field types.
-     */
-    public static final int READ_STATUS_READ                        = 0x80;
-    public static final int READ_STATUS__DELETED_WITHOUT_BEING_READ = 0x81;
-
-    /**
-     *  X-Mms-Cancel-Status field types.
-     */
-    public static final int CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED = 0x80;
-    public static final int CANCEL_STATUS_REQUEST_CORRUPTED             = 0x81;
-
-    /**
-     *  X-Mms-Reply-Charging field types.
-     */
-    public static final int REPLY_CHARGING_REQUESTED           = 0x80;
-    public static final int REPLY_CHARGING_REQUESTED_TEXT_ONLY = 0x81;
-    public static final int REPLY_CHARGING_ACCEPTED            = 0x82;
-    public static final int REPLY_CHARGING_ACCEPTED_TEXT_ONLY  = 0x83;
-
-    /**
-     *  X-Mms-MM-State field types.
-     */
-    public static final int MM_STATE_DRAFT                  = 0x80;
-    public static final int MM_STATE_SENT                   = 0x81;
-    public static final int MM_STATE_NEW                    = 0x82;
-    public static final int MM_STATE_RETRIEVED              = 0x83;
-    public static final int MM_STATE_FORWARDED              = 0x84;
-
-    /**
-     * X-Mms-Recommended-Retrieval-Mode field types.
-     */
-    public static final int RECOMMENDED_RETRIEVAL_MODE_MANUAL = 0x80;
-
-    /**
-     *  X-Mms-Content-Class field types.
-     */
-    public static final int CONTENT_CLASS_TEXT              = 0x80;
-    public static final int CONTENT_CLASS_IMAGE_BASIC       = 0x81;
-    public static final int CONTENT_CLASS_IMAGE_RICH        = 0x82;
-    public static final int CONTENT_CLASS_VIDEO_BASIC       = 0x83;
-    public static final int CONTENT_CLASS_VIDEO_RICH        = 0x84;
-    public static final int CONTENT_CLASS_MEGAPIXEL         = 0x85;
-    public static final int CONTENT_CLASS_CONTENT_BASIC     = 0x86;
-    public static final int CONTENT_CLASS_CONTENT_RICH      = 0x87;
-
-    /**
-     *  X-Mms-Store-Status field types.
-     */
-    public static final int STORE_STATUS_SUCCESS                                = 0x80;
-    public static final int STORE_STATUS_ERROR_TRANSIENT_FAILURE                = 0xC0;
-    public static final int STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM        = 0xC1;
-    public static final int STORE_STATUS_ERROR_PERMANENT_FAILURE                = 0xE0;
-    public static final int STORE_STATUS_ERROR_PERMANENT_SERVICE_DENIED         = 0xE1;
-    public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT = 0xE2;
-    public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND      = 0xE3;
-    public static final int STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL             = 0xE4;
-    public static final int STORE_STATUS_ERROR_END                              = 0xFF;
-
-    /**
-     * The map contains the value of all headers.
-     */
-    private HashMap<Integer, Object> mHeaderMap = null;
-
-    /**
-     * Constructor of PduHeaders.
-     */
-    public PduHeaders() {
-        mHeaderMap = new HashMap<Integer, Object>();
-    }
-
-    /**
-     * Get octet value by header field.
-     *
-     * @param field the field
-     * @return the octet value of the pdu header
-     *          with specified header field. Return 0 if
-     *          the value is not set.
-     */
-    protected int getOctet(int field) {
-        Integer octet = (Integer) mHeaderMap.get(field);
-        if (null == octet) {
-            return 0;
-        }
-
-        return octet;
-    }
-
-    /**
-     * Set octet value to pdu header by header field.
-     *
-     * @param value the value
-     * @param field the field
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    protected void setOctet(int value, int field)
-            throws InvalidHeaderValueException{
-        /**
-         * Check whether this field can be set for specific
-         * header and check validity of the field.
-         */
-        switch (field) {
-            case REPORT_ALLOWED:
-            case ADAPTATION_ALLOWED:
-            case DELIVERY_REPORT:
-            case DRM_CONTENT:
-            case DISTRIBUTION_INDICATOR:
-            case QUOTAS:
-            case READ_REPORT:
-            case STORE:
-            case STORED:
-            case TOTALS:
-            case SENDER_VISIBILITY:
-                if ((VALUE_YES != value) && (VALUE_NO != value)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case READ_STATUS:
-                if ((READ_STATUS_READ != value) &&
-                        (READ_STATUS__DELETED_WITHOUT_BEING_READ != value)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case CANCEL_STATUS:
-                if ((CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED != value) &&
-                        (CANCEL_STATUS_REQUEST_CORRUPTED != value)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case PRIORITY:
-                if ((value < PRIORITY_LOW) || (value > PRIORITY_HIGH)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case STATUS:
-                if ((value < STATUS_EXPIRED) || (value > STATUS_UNREACHABLE)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case REPLY_CHARGING:
-                if ((value < REPLY_CHARGING_REQUESTED)
-                        || (value > REPLY_CHARGING_ACCEPTED_TEXT_ONLY)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case MM_STATE:
-                if ((value < MM_STATE_DRAFT) || (value > MM_STATE_FORWARDED)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case RECOMMENDED_RETRIEVAL_MODE:
-                if (RECOMMENDED_RETRIEVAL_MODE_MANUAL != value) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case CONTENT_CLASS:
-                if ((value < CONTENT_CLASS_TEXT)
-                        || (value > CONTENT_CLASS_CONTENT_RICH)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case RETRIEVE_STATUS:
-                // According to oma-ts-mms-enc-v1_3, section 7.3.50, we modify the invalid value.
-                if ((value > RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM) &&
-                        (value < RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE)) {
-                    value = RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE;
-                } else if ((value > RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED) &&
-                        (value <= RETRIEVE_STATUS_ERROR_END)) {
-                    value = RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE;
-                } else if ((value < RETRIEVE_STATUS_OK) ||
-                        ((value > RETRIEVE_STATUS_OK) &&
-                                (value < RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
-                                (value > RETRIEVE_STATUS_ERROR_END)) {
-                    value = RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE;
-                }
-                break;
-            case STORE_STATUS:
-                // According to oma-ts-mms-enc-v1_3, section 7.3.58, we modify the invalid value.
-                if ((value > STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM) &&
-                        (value < STORE_STATUS_ERROR_PERMANENT_FAILURE)) {
-                    value = STORE_STATUS_ERROR_TRANSIENT_FAILURE;
-                } else if ((value > STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL) &&
-                        (value <= STORE_STATUS_ERROR_END)) {
-                    value = STORE_STATUS_ERROR_PERMANENT_FAILURE;
-                } else if ((value < STORE_STATUS_SUCCESS) ||
-                        ((value > STORE_STATUS_SUCCESS) &&
-                                (value < STORE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
-                                (value > STORE_STATUS_ERROR_END)) {
-                    value = STORE_STATUS_ERROR_PERMANENT_FAILURE;
-                }
-                break;
-            case RESPONSE_STATUS:
-                // According to oma-ts-mms-enc-v1_3, section 7.3.48, we modify the invalid value.
-                if ((value > RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS) &&
-                        (value < RESPONSE_STATUS_ERROR_PERMANENT_FAILURE)) {
-                    value = RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE;
-                } else if (((value > RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID) &&
-                        (value <= RESPONSE_STATUS_ERROR_PERMANENT_END)) ||
-                        (value < RESPONSE_STATUS_OK) ||
-                        ((value > RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE) &&
-                                (value < RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
-                                (value > RESPONSE_STATUS_ERROR_PERMANENT_END)) {
-                    value = RESPONSE_STATUS_ERROR_PERMANENT_FAILURE;
-                }
-                break;
-            case MMS_VERSION:
-                if ((value < MMS_VERSION_1_0)|| (value > MMS_VERSION_1_3)) {
-                    value = CURRENT_MMS_VERSION; // Current version is the default value.
-                }
-                break;
-            case MESSAGE_TYPE:
-                if ((value < MESSAGE_TYPE_SEND_REQ) || (value > MESSAGE_TYPE_CANCEL_CONF)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            default:
-                // This header value should not be Octect.
-                throw new RuntimeException("Invalid header field!");
-        }
-        mHeaderMap.put(field, value);
-    }
-
-    /**
-     * Get TextString value by header field.
-     *
-     * @param field the field
-     * @return the TextString value of the pdu header
-     *          with specified header field
-     */
-    protected byte[] getTextString(int field) {
-        return (byte[]) mHeaderMap.get(field);
-    }
-
-    /**
-     * Set TextString value to pdu header by header field.
-     *
-     * @param value the value
-     * @param field the field
-     * @return the TextString value of the pdu header
-     *          with specified header field
-     * @throws NullPointerException if the value is null.
-     */
-    protected void setTextString(byte[] value, int field) {
-        /**
-         * Check whether this field can be set for specific
-         * header and check validity of the field.
-         */
-        if (null == value) {
-            throw new NullPointerException();
-        }
-
-        switch (field) {
-            case TRANSACTION_ID:
-            case REPLY_CHARGING_ID:
-            case AUX_APPLIC_ID:
-            case APPLIC_ID:
-            case REPLY_APPLIC_ID:
-            case MESSAGE_ID:
-            case REPLACE_ID:
-            case CANCEL_ID:
-            case CONTENT_LOCATION:
-            case MESSAGE_CLASS:
-            case CONTENT_TYPE:
-                break;
-            default:
-                // This header value should not be Text-String.
-                throw new RuntimeException("Invalid header field!");
-        }
-        mHeaderMap.put(field, value);
-    }
-
-    /**
-     * Get EncodedStringValue value by header field.
-     *
-     * @param field the field
-     * @return the EncodedStringValue value of the pdu header
-     *          with specified header field
-     */
-    protected EncodedStringValue getEncodedStringValue(int field) {
-        return (EncodedStringValue) mHeaderMap.get(field);
-    }
-
-    /**
-     * Get TO, CC or BCC header value.
-     *
-     * @param field the field
-     * @return the EncodeStringValue array of the pdu header
-     *          with specified header field
-     */
-    protected EncodedStringValue[] getEncodedStringValues(int field) {
-        ArrayList<EncodedStringValue> list =
-                (ArrayList<EncodedStringValue>) mHeaderMap.get(field);
-        if (null == list) {
-            return null;
-        }
-        EncodedStringValue[] values = new EncodedStringValue[list.size()];
-        return list.toArray(values);
-    }
-
-    /**
-     * Set EncodedStringValue value to pdu header by header field.
-     *
-     * @param value the value
-     * @param field the field
-     * @return the EncodedStringValue value of the pdu header
-     *          with specified header field
-     * @throws NullPointerException if the value is null.
-     */
-    protected void setEncodedStringValue(EncodedStringValue value, int field) {
-        /**
-         * Check whether this field can be set for specific
-         * header and check validity of the field.
-         */
-        if (null == value) {
-            throw new NullPointerException();
-        }
-
-        switch (field) {
-            case SUBJECT:
-            case RECOMMENDED_RETRIEVAL_MODE_TEXT:
-            case RETRIEVE_TEXT:
-            case STATUS_TEXT:
-            case STORE_STATUS_TEXT:
-            case RESPONSE_TEXT:
-            case FROM:
-            case PREVIOUSLY_SENT_BY:
-            case MM_FLAGS:
-                break;
-            default:
-                // This header value should not be Encoded-String-Value.
-                throw new RuntimeException("Invalid header field!");
-        }
-
-        mHeaderMap.put(field, value);
-    }
-
-    /**
-     * Set TO, CC or BCC header value.
-     *
-     * @param value the value
-     * @param field the field
-     * @return the EncodedStringValue value array of the pdu header
-     *          with specified header field
-     * @throws NullPointerException if the value is null.
-     */
-    protected void setEncodedStringValues(EncodedStringValue[] value, int field) {
-        /**
-         * Check whether this field can be set for specific
-         * header and check validity of the field.
-         */
-        if (null == value) {
-            throw new NullPointerException();
-        }
-
-        switch (field) {
-            case BCC:
-            case CC:
-            case TO:
-                break;
-            default:
-                // This header value should not be Encoded-String-Value.
-                throw new RuntimeException("Invalid header field!");
-        }
-
-        ArrayList<EncodedStringValue> list = new ArrayList<EncodedStringValue>();
-        for (int i = 0; i < value.length; i++) {
-            list.add(value[i]);
-        }
-        mHeaderMap.put(field, list);
-    }
-
-    /**
-     * Append one EncodedStringValue to another.
-     *
-     * @param value the EncodedStringValue to append
-     * @param field the field
-     * @throws NullPointerException if the value is null.
-     */
-    protected void appendEncodedStringValue(EncodedStringValue value,
-                                    int field) {
-        if (null == value) {
-            throw new NullPointerException();
-        }
-
-        switch (field) {
-            case BCC:
-            case CC:
-            case TO:
-                break;
-            default:
-                throw new RuntimeException("Invalid header field!");
-        }
-
-        ArrayList<EncodedStringValue> list =
-            (ArrayList<EncodedStringValue>) mHeaderMap.get(field);
-        if (null == list) {
-            list  = new ArrayList<EncodedStringValue>();
-        }
-        list.add(value);
-        mHeaderMap.put(field, list);
-    }
-
-    /**
-     * Get LongInteger value by header field.
-     *
-     * @param field the field
-     * @return the LongInteger value of the pdu header
-     *          with specified header field. if return -1, the
-     *          field is not existed in pdu header.
-     */
-    protected long getLongInteger(int field) {
-        Long longInteger = (Long) mHeaderMap.get(field);
-        if (null == longInteger) {
-            return -1;
-        }
-
-        return longInteger.longValue();
-    }
-
-    /**
-     * Set LongInteger value to pdu header by header field.
-     *
-     * @param value the value
-     * @param field the field
-     */
-    protected void setLongInteger(long value, int field) {
-        /**
-         * Check whether this field can be set for specific
-         * header and check validity of the field.
-         */
-        switch (field) {
-            case DATE:
-            case REPLY_CHARGING_SIZE:
-            case MESSAGE_SIZE:
-            case MESSAGE_COUNT:
-            case START:
-            case LIMIT:
-            case DELIVERY_TIME:
-            case EXPIRY:
-            case REPLY_CHARGING_DEADLINE:
-            case PREVIOUSLY_SENT_DATE:
-                break;
-            default:
-                // This header value should not be LongInteger.
-                throw new RuntimeException("Invalid header field!");
-        }
-        mHeaderMap.put(field, value);
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/PduParser.java b/src/android/support/v7/mms/pdu/PduParser.java
deleted file mode 100755
index 206aa12..0000000
--- a/src/android/support/v7/mms/pdu/PduParser.java
+++ /dev/null
@@ -1,2008 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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 androidx.appcompat.mms.pdu;
-
-import android.util.Log;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.Arrays;
-import java.util.HashMap;
-
-public class PduParser {
-    /**
-     *  The next are WAP values defined in WSP specification.
-     */
-    private static final int QUOTE = 127;
-    private static final int LENGTH_QUOTE = 31;
-    private static final int TEXT_MIN = 32;
-    private static final int TEXT_MAX = 127;
-    private static final int SHORT_INTEGER_MAX = 127;
-    private static final int SHORT_LENGTH_MAX = 30;
-    private static final int LONG_INTEGER_LENGTH_MAX = 8;
-    private static final int QUOTED_STRING_FLAG = 34;
-    private static final int END_STRING_FLAG = 0x00;
-    //The next two are used by the interface "parseWapString" to
-    //distinguish Text-String and Quoted-String.
-    private static final int TYPE_TEXT_STRING = 0;
-    private static final int TYPE_QUOTED_STRING = 1;
-    private static final int TYPE_TOKEN_STRING = 2;
-
-    /**
-     * Specify the part position.
-     */
-    private static final int THE_FIRST_PART = 0;
-    private static final int THE_LAST_PART = 1;
-
-    /**
-     * The pdu data.
-     */
-    private ByteArrayInputStream mPduDataStream = null;
-
-    /**
-     * Store pdu headers
-     */
-    private PduHeaders mHeaders = null;
-
-    /**
-     * Store pdu parts.
-     */
-    private PduBody mBody = null;
-
-    /**
-     * Store the "type" parameter in "Content-Type" header field.
-     */
-    private static byte[] mTypeParam = null;
-
-    /**
-     * Store the "start" parameter in "Content-Type" header field.
-     */
-    private static byte[] mStartParam = null;
-
-    /**
-     * The log tag.
-     */
-    private static final String LOG_TAG = "PduParser";
-    private static final boolean DEBUG = false;
-    private static final boolean LOCAL_LOGV = false;
-
-    /**
-     * Whether to parse content-disposition part header
-     */
-    private final boolean mParseContentDisposition;
-
-    /**
-     * Constructor.
-     *
-     * @param pduDataStream pdu data to be parsed
-     * @param parseContentDisposition whether to parse the Content-Disposition part header
-     */
-    public PduParser(byte[] pduDataStream, boolean parseContentDisposition) {
-        mPduDataStream = new ByteArrayInputStream(pduDataStream);
-        mParseContentDisposition = parseContentDisposition;
-    }
-
-    /**
-     * Parse the pdu.
-     *
-     * @return the pdu structure if parsing successfully.
-     *         null if parsing error happened or mandatory fields are not set.
-     */
-    public GenericPdu parse(){
-        if (mPduDataStream == null) {
-            return null;
-        }
-
-        /* parse headers */
-        mHeaders = parseHeaders(mPduDataStream);
-        if (null == mHeaders) {
-            // Parse headers failed.
-            return null;
-        }
-
-        /* get the message type */
-        int messageType = mHeaders.getOctet(PduHeaders.MESSAGE_TYPE);
-
-        /* check mandatory header fields */
-        if (false == checkMandatoryHeader(mHeaders)) {
-            log("check mandatory headers failed!");
-            return null;
-        }
-
-        if ((PduHeaders.MESSAGE_TYPE_SEND_REQ == messageType) ||
-                (PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF == messageType)) {
-            /* need to parse the parts */
-            mBody = parseParts(mPduDataStream);
-            if (null == mBody) {
-                // Parse parts failed.
-                return null;
-            }
-        }
-
-        switch (messageType) {
-            case PduHeaders.MESSAGE_TYPE_SEND_REQ:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_SEND_REQ");
-                }
-                SendReq sendReq = new SendReq(mHeaders, mBody);
-                return sendReq;
-            case PduHeaders.MESSAGE_TYPE_SEND_CONF:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_SEND_CONF");
-                }
-                SendConf sendConf = new SendConf(mHeaders);
-                return sendConf;
-            case PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_NOTIFICATION_IND");
-                }
-                NotificationInd notificationInd =
-                    new NotificationInd(mHeaders);
-                return notificationInd;
-            case PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_NOTIFYRESP_IND");
-                }
-                NotifyRespInd notifyRespInd =
-                    new NotifyRespInd(mHeaders);
-                return notifyRespInd;
-            case PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_RETRIEVE_CONF");
-                }
-                RetrieveConf retrieveConf =
-                    new RetrieveConf(mHeaders, mBody);
-
-                byte[] contentType = retrieveConf.getContentType();
-                if (null == contentType) {
-                    return null;
-                }
-                String ctTypeStr = new String(contentType);
-                if (ctTypeStr.equals(ContentType.MULTIPART_MIXED)
-                        || ctTypeStr.equals(ContentType.MULTIPART_RELATED)
-                        || ctTypeStr.equals(ContentType.MULTIPART_ALTERNATIVE)) {
-                    // The MMS content type must be "application/vnd.wap.multipart.mixed"
-                    // or "application/vnd.wap.multipart.related"
-                    // or "application/vnd.wap.multipart.alternative"
-                    return retrieveConf;
-                } else if (ctTypeStr.equals(ContentType.MULTIPART_ALTERNATIVE)) {
-                    // "application/vnd.wap.multipart.alternative"
-                    // should take only the first part.
-                    PduPart firstPart = mBody.getPart(0);
-                    mBody.removeAll();
-                    mBody.addPart(0, firstPart);
-                    return retrieveConf;
-                }
-                return null;
-            case PduHeaders.MESSAGE_TYPE_DELIVERY_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_DELIVERY_IND");
-                }
-                DeliveryInd deliveryInd =
-                    new DeliveryInd(mHeaders);
-                return deliveryInd;
-            case PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_ACKNOWLEDGE_IND");
-                }
-                AcknowledgeInd acknowledgeInd =
-                    new AcknowledgeInd(mHeaders);
-                return acknowledgeInd;
-            case PduHeaders.MESSAGE_TYPE_READ_ORIG_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_READ_ORIG_IND");
-                }
-                ReadOrigInd readOrigInd =
-                    new ReadOrigInd(mHeaders);
-                return readOrigInd;
-            case PduHeaders.MESSAGE_TYPE_READ_REC_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_READ_REC_IND");
-                }
-                ReadRecInd readRecInd =
-                    new ReadRecInd(mHeaders);
-                return readRecInd;
-            default:
-                log("Parser doesn't support this message type in this version!");
-            return null;
-        }
-    }
-
-    /**
-     * Parse pdu headers.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return headers in PduHeaders structure, null when parse fail
-     */
-    protected PduHeaders parseHeaders(ByteArrayInputStream pduDataStream){
-        if (pduDataStream == null) {
-            return null;
-        }
-        boolean keepParsing = true;
-        PduHeaders headers = new PduHeaders();
-
-        while (keepParsing && (pduDataStream.available() > 0)) {
-            pduDataStream.mark(1);
-            int headerField = extractByteValue(pduDataStream);
-            /* parse custom text header */
-            if ((headerField >= TEXT_MIN) && (headerField <= TEXT_MAX)) {
-                pduDataStream.reset();
-                byte [] bVal = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "TextHeader: " + new String(bVal));
-                }
-                /* we should ignore it at the moment */
-                continue;
-            }
-            switch (headerField) {
-                case PduHeaders.MESSAGE_TYPE:
-                {
-                    int messageType = extractByteValue(pduDataStream);
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: messageType: " + messageType);
-                    }
-                    switch (messageType) {
-                        // We don't support these kind of messages now.
-                        case PduHeaders.MESSAGE_TYPE_FORWARD_REQ:
-                        case PduHeaders.MESSAGE_TYPE_FORWARD_CONF:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_STORE_REQ:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_STORE_CONF:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_VIEW_REQ:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_VIEW_CONF:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_UPLOAD_REQ:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_UPLOAD_CONF:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_DELETE_REQ:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_DELETE_CONF:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_DESCR:
-                        case PduHeaders.MESSAGE_TYPE_DELETE_REQ:
-                        case PduHeaders.MESSAGE_TYPE_DELETE_CONF:
-                        case PduHeaders.MESSAGE_TYPE_CANCEL_REQ:
-                        case PduHeaders.MESSAGE_TYPE_CANCEL_CONF:
-                            return null;
-                    }
-                    try {
-                        headers.setOctet(messageType, headerField);
-                    } catch(InvalidHeaderValueException e) {
-                        log("Set invalid Octet value: " + messageType +
-                                " into the header filed: " + headerField);
-                        return null;
-                    } catch(RuntimeException e) {
-                        log(headerField + "is not Octet header field!");
-                        return null;
-                    }
-                    break;
-                }
-                /* Octect value */
-                case PduHeaders.REPORT_ALLOWED:
-                case PduHeaders.ADAPTATION_ALLOWED:
-                case PduHeaders.DELIVERY_REPORT:
-                case PduHeaders.DRM_CONTENT:
-                case PduHeaders.DISTRIBUTION_INDICATOR:
-                case PduHeaders.QUOTAS:
-                case PduHeaders.READ_REPORT:
-                case PduHeaders.STORE:
-                case PduHeaders.STORED:
-                case PduHeaders.TOTALS:
-                case PduHeaders.SENDER_VISIBILITY:
-                case PduHeaders.READ_STATUS:
-                case PduHeaders.CANCEL_STATUS:
-                case PduHeaders.PRIORITY:
-                case PduHeaders.STATUS:
-                case PduHeaders.REPLY_CHARGING:
-                case PduHeaders.MM_STATE:
-                case PduHeaders.RECOMMENDED_RETRIEVAL_MODE:
-                case PduHeaders.CONTENT_CLASS:
-                case PduHeaders.RETRIEVE_STATUS:
-                case PduHeaders.STORE_STATUS:
-                    /**
-                     * The following field has a different value when
-                     * used in the M-Mbox-Delete.conf and M-Delete.conf PDU.
-                     * For now we ignore this fact, since we do not support these PDUs
-                     */
-                case PduHeaders.RESPONSE_STATUS:
-                {
-                    int value = extractByteValue(pduDataStream);
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: byte: " + headerField + " value: " +
-                                value);
-                    }
-
-                    try {
-                        headers.setOctet(value, headerField);
-                    } catch(InvalidHeaderValueException e) {
-                        log("Set invalid Octet value: " + value +
-                                " into the header filed: " + headerField);
-                        return null;
-                    } catch(RuntimeException e) {
-                        log(headerField + "is not Octet header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                /* Long-Integer */
-                case PduHeaders.DATE:
-                case PduHeaders.REPLY_CHARGING_SIZE:
-                case PduHeaders.MESSAGE_SIZE:
-                {
-                    try {
-                        long value = parseLongInteger(pduDataStream);
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: longint: " + headerField + " value: " +
-                                    value);
-                        }
-                        headers.setLongInteger(value, headerField);
-                    } catch(RuntimeException e) {
-                        log(headerField + "is not Long-Integer header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                /* Integer-Value */
-                case PduHeaders.MESSAGE_COUNT:
-                case PduHeaders.START:
-                case PduHeaders.LIMIT:
-                {
-                    try {
-                        long value = parseIntegerValue(pduDataStream);
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: int: " + headerField + " value: " +
-                                    value);
-                        }
-                        headers.setLongInteger(value, headerField);
-                    } catch(RuntimeException e) {
-                        log(headerField + "is not Long-Integer header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                /* Text-String */
-                case PduHeaders.TRANSACTION_ID:
-                case PduHeaders.REPLY_CHARGING_ID:
-                case PduHeaders.AUX_APPLIC_ID:
-                case PduHeaders.APPLIC_ID:
-                case PduHeaders.REPLY_APPLIC_ID:
-                    /**
-                     * The next three header fields are email addresses
-                     * as defined in RFC2822,
-                     * not including the characters "<" and ">"
-                     */
-                case PduHeaders.MESSAGE_ID:
-                case PduHeaders.REPLACE_ID:
-                case PduHeaders.CANCEL_ID:
-                    /**
-                     * The following field has a different value when
-                     * used in the M-Mbox-Delete.conf and M-Delete.conf PDU.
-                     * For now we ignore this fact, since we do not support these PDUs
-                     */
-                case PduHeaders.CONTENT_LOCATION:
-                {
-                    byte[] value = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                    if (null != value) {
-                        try {
-                            if (LOCAL_LOGV) {
-                                Log.v(LOG_TAG, "parseHeaders: string: " + headerField + " value: " +
-                                        new String(value));
-                            }
-                            headers.setTextString(value, headerField);
-                        } catch(NullPointerException e) {
-                            log("null pointer error!");
-                        } catch(RuntimeException e) {
-                            log(headerField + "is not Text-String header field!");
-                            return null;
-                        }
-                    }
-                    break;
-                }
-
-                /* Encoded-string-value */
-                case PduHeaders.SUBJECT:
-                case PduHeaders.RECOMMENDED_RETRIEVAL_MODE_TEXT:
-                case PduHeaders.RETRIEVE_TEXT:
-                case PduHeaders.STATUS_TEXT:
-                case PduHeaders.STORE_STATUS_TEXT:
-                    /* the next one is not support
-                     * M-Mbox-Delete.conf and M-Delete.conf now */
-                case PduHeaders.RESPONSE_TEXT:
-                {
-                    EncodedStringValue value =
-                        parseEncodedStringValue(pduDataStream);
-                    if (null != value) {
-                        try {
-                            if (LOCAL_LOGV) {
-                                Log.v(LOG_TAG, "parseHeaders: encoded string: " + headerField
-                                        + " value: " + value.getString());
-                            }
-                            headers.setEncodedStringValue(value, headerField);
-                        } catch(NullPointerException e) {
-                            log("null pointer error!");
-                        } catch (RuntimeException e) {
-                            log(headerField + "is not Encoded-String-Value header field!");
-                            return null;
-                        }
-                    }
-                    break;
-                }
-
-                /* Addressing model */
-                case PduHeaders.BCC:
-                case PduHeaders.CC:
-                case PduHeaders.TO:
-                {
-                    EncodedStringValue value =
-                        parseEncodedStringValue(pduDataStream);
-                    if (null != value) {
-                        byte[] address = value.getTextString();
-                        if (null != address) {
-                            String str = new String(address);
-                            if (LOCAL_LOGV) {
-                                Log.v(LOG_TAG, "parseHeaders: (to/cc/bcc) address: " + headerField
-                                        + " value: " + str);
-                            }
-                            int endIndex = str.indexOf("/");
-                            if (endIndex > 0) {
-                                str = str.substring(0, endIndex);
-                            }
-                            try {
-                                value.setTextString(str.getBytes());
-                            } catch(NullPointerException e) {
-                                log("null pointer error!");
-                                return null;
-                            }
-                        }
-
-                        try {
-                            headers.appendEncodedStringValue(value, headerField);
-                        } catch(NullPointerException e) {
-                            log("null pointer error!");
-                        } catch(RuntimeException e) {
-                            log(headerField + "is not Encoded-String-Value header field!");
-                            return null;
-                        }
-                    }
-                    break;
-                }
-
-                /* Value-length
-                 * (Absolute-token Date-value | Relative-token Delta-seconds-value) */
-                case PduHeaders.DELIVERY_TIME:
-                case PduHeaders.EXPIRY:
-                case PduHeaders.REPLY_CHARGING_DEADLINE:
-                {
-                    /* parse Value-length */
-                    parseValueLength(pduDataStream);
-
-                    /* Absolute-token or Relative-token */
-                    int token = extractByteValue(pduDataStream);
-
-                    /* Date-value or Delta-seconds-value */
-                    long timeValue;
-                    try {
-                        timeValue = parseLongInteger(pduDataStream);
-                    } catch(RuntimeException e) {
-                        log(headerField + "is not Long-Integer header field!");
-                        return null;
-                    }
-                    if (PduHeaders.VALUE_RELATIVE_TOKEN == token) {
-                        /* need to convert the Delta-seconds-value
-                         * into Date-value */
-                        timeValue = System.currentTimeMillis()/1000 + timeValue;
-                    }
-
-                    try {
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: time value: " + headerField
-                                    + " value: " + timeValue);
-                        }
-                        headers.setLongInteger(timeValue, headerField);
-                    } catch(RuntimeException e) {
-                        log(headerField + "is not Long-Integer header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                case PduHeaders.FROM: {
-                    /* From-value =
-                     * Value-length
-                     * (Address-present-token Encoded-string-value | Insert-address-token)
-                     */
-                    EncodedStringValue from = null;
-                    parseValueLength(pduDataStream); /* parse value-length */
-
-                    /* Address-present-token or Insert-address-token */
-                    int fromToken = extractByteValue(pduDataStream);
-
-                    /* Address-present-token or Insert-address-token */
-                    if (PduHeaders.FROM_ADDRESS_PRESENT_TOKEN == fromToken) {
-                        /* Encoded-string-value */
-                        from = parseEncodedStringValue(pduDataStream);
-                        if (null != from) {
-                            byte[] address = from.getTextString();
-                            if (null != address) {
-                                String str = new String(address);
-                                int endIndex = str.indexOf("/");
-                                if (endIndex > 0) {
-                                    str = str.substring(0, endIndex);
-                                }
-                                try {
-                                    from.setTextString(str.getBytes());
-                                } catch(NullPointerException e) {
-                                    log("null pointer error!");
-                                    return null;
-                                }
-                            }
-                        }
-                    } else {
-                        try {
-                            from = new EncodedStringValue(
-                                    PduHeaders.FROM_INSERT_ADDRESS_TOKEN_STR.getBytes());
-                        } catch(NullPointerException e) {
-                            log(headerField + "is not Encoded-String-Value header field!");
-                            return null;
-                        }
-                    }
-
-                    try {
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: from address: " + headerField
-                                    + " value: " + from.getString());
-                        }
-                        headers.setEncodedStringValue(from, PduHeaders.FROM);
-                    } catch(NullPointerException e) {
-                        log("null pointer error!");
-                    } catch(RuntimeException e) {
-                        log(headerField + "is not Encoded-String-Value header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                case PduHeaders.MESSAGE_CLASS: {
-                    /* Message-class-value = Class-identifier | Token-text */
-                    pduDataStream.mark(1);
-                    int messageClass = extractByteValue(pduDataStream);
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: MESSAGE_CLASS: " + headerField
-                                + " value: " + messageClass);
-                    }
-
-                    if (messageClass >= PduHeaders.MESSAGE_CLASS_PERSONAL) {
-                        /* Class-identifier */
-                        try {
-                            if (PduHeaders.MESSAGE_CLASS_PERSONAL == messageClass) {
-                                headers.setTextString(
-                                        PduHeaders.MESSAGE_CLASS_PERSONAL_STR.getBytes(),
-                                        PduHeaders.MESSAGE_CLASS);
-                            } else if (PduHeaders.MESSAGE_CLASS_ADVERTISEMENT == messageClass) {
-                                headers.setTextString(
-                                        PduHeaders.MESSAGE_CLASS_ADVERTISEMENT_STR.getBytes(),
-                                        PduHeaders.MESSAGE_CLASS);
-                            } else if (PduHeaders.MESSAGE_CLASS_INFORMATIONAL == messageClass) {
-                                headers.setTextString(
-                                        PduHeaders.MESSAGE_CLASS_INFORMATIONAL_STR.getBytes(),
-                                        PduHeaders.MESSAGE_CLASS);
-                            } else if (PduHeaders.MESSAGE_CLASS_AUTO == messageClass) {
-                                headers.setTextString(
-                                        PduHeaders.MESSAGE_CLASS_AUTO_STR.getBytes(),
-                                        PduHeaders.MESSAGE_CLASS);
-                            }
-                        } catch(NullPointerException e) {
-                            log("null pointer error!");
-                        } catch(RuntimeException e) {
-                            log(headerField + "is not Text-String header field!");
-                            return null;
-                        }
-                    } else {
-                        /* Token-text */
-                        pduDataStream.reset();
-                        byte[] messageClassString = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                        if (null != messageClassString) {
-                            try {
-                                headers.setTextString(messageClassString, PduHeaders.MESSAGE_CLASS);
-                            } catch(NullPointerException e) {
-                                log("null pointer error!");
-                            } catch(RuntimeException e) {
-                                log(headerField + "is not Text-String header field!");
-                                return null;
-                            }
-                        }
-                    }
-                    break;
-                }
-
-                case PduHeaders.MMS_VERSION: {
-                    int version = parseShortInteger(pduDataStream);
-
-                    try {
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: MMS_VERSION: " + headerField
-                                    + " value: " + version);
-                        }
-                        headers.setOctet(version, PduHeaders.MMS_VERSION);
-                    } catch(InvalidHeaderValueException e) {
-                        log("Set invalid Octet value: " + version +
-                                " into the header filed: " + headerField);
-                        return null;
-                    } catch(RuntimeException e) {
-                        log(headerField + "is not Octet header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                case PduHeaders.PREVIOUSLY_SENT_BY: {
-                    /* Previously-sent-by-value =
-                     * Value-length Forwarded-count-value Encoded-string-value */
-                    /* parse value-length */
-                    parseValueLength(pduDataStream);
-
-                    /* parse Forwarded-count-value */
-                    try {
-                        parseIntegerValue(pduDataStream);
-                    } catch(RuntimeException e) {
-                        log(headerField + " is not Integer-Value");
-                        return null;
-                    }
-
-                    /* parse Encoded-string-value */
-                    EncodedStringValue previouslySentBy =
-                        parseEncodedStringValue(pduDataStream);
-                    if (null != previouslySentBy) {
-                        try {
-                            if (LOCAL_LOGV) {
-                                Log.v(LOG_TAG, "parseHeaders: PREVIOUSLY_SENT_BY: " + headerField
-                                        + " value: " + previouslySentBy.getString());
-                            }
-                            headers.setEncodedStringValue(previouslySentBy,
-                                    PduHeaders.PREVIOUSLY_SENT_BY);
-                        } catch(NullPointerException e) {
-                            log("null pointer error!");
-                        } catch(RuntimeException e) {
-                            log(headerField + "is not Encoded-String-Value header field!");
-                            return null;
-                        }
-                    }
-                    break;
-                }
-
-                case PduHeaders.PREVIOUSLY_SENT_DATE: {
-                    /* Previously-sent-date-value =
-                     * Value-length Forwarded-count-value Date-value */
-                    /* parse value-length */
-                    parseValueLength(pduDataStream);
-
-                    /* parse Forwarded-count-value */
-                    try {
-                        parseIntegerValue(pduDataStream);
-                    } catch(RuntimeException e) {
-                        log(headerField + " is not Integer-Value");
-                        return null;
-                    }
-
-                    /* Date-value */
-                    try {
-                        long perviouslySentDate = parseLongInteger(pduDataStream);
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: PREVIOUSLY_SENT_DATE: " + headerField
-                                    + " value: " + perviouslySentDate);
-                        }
-                        headers.setLongInteger(perviouslySentDate,
-                                PduHeaders.PREVIOUSLY_SENT_DATE);
-                    } catch(RuntimeException e) {
-                        log(headerField + "is not Long-Integer header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                case PduHeaders.MM_FLAGS: {
-                    /* MM-flags-value =
-                     * Value-length
-                     * ( Add-token | Remove-token | Filter-token )
-                     * Encoded-string-value
-                     */
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: MM_FLAGS: " + headerField
-                                + " NOT REALLY SUPPORTED");
-                    }
-
-                    /* parse Value-length */
-                    parseValueLength(pduDataStream);
-
-                    /* Add-token | Remove-token | Filter-token */
-                    extractByteValue(pduDataStream);
-
-                    /* Encoded-string-value */
-                    parseEncodedStringValue(pduDataStream);
-
-                    /* not store this header filed in "headers",
-                     * because now PduHeaders doesn't support it */
-                    break;
-                }
-
-                /* Value-length
-                 * (Message-total-token | Size-total-token) Integer-Value */
-                case PduHeaders.MBOX_TOTALS:
-                case PduHeaders.MBOX_QUOTAS:
-                {
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: MBOX_TOTALS: " + headerField);
-                    }
-                    /* Value-length */
-                    parseValueLength(pduDataStream);
-
-                    /* Message-total-token | Size-total-token */
-                    extractByteValue(pduDataStream);
-
-                    /*Integer-Value*/
-                    try {
-                        parseIntegerValue(pduDataStream);
-                    } catch(RuntimeException e) {
-                        log(headerField + " is not Integer-Value");
-                        return null;
-                    }
-
-                    /* not store these headers filed in "headers",
-                    because now PduHeaders doesn't support them */
-                    break;
-                }
-
-                case PduHeaders.ELEMENT_DESCRIPTOR: {
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: ELEMENT_DESCRIPTOR: " + headerField);
-                    }
-                    parseContentType(pduDataStream, null);
-
-                    /* not store this header filed in "headers",
-                    because now PduHeaders doesn't support it */
-                    break;
-                }
-
-                case PduHeaders.CONTENT_TYPE: {
-                    HashMap<Integer, Object> map =
-                        new HashMap<Integer, Object>();
-                    byte[] contentType =
-                        parseContentType(pduDataStream, map);
-
-                    if (null != contentType) {
-                        try {
-                            if (LOCAL_LOGV) {
-                                Log.v(LOG_TAG, "parseHeaders: CONTENT_TYPE: " + headerField +
-                                        Arrays.toString(contentType));
-                            }
-                            headers.setTextString(contentType, PduHeaders.CONTENT_TYPE);
-                        } catch(NullPointerException e) {
-                            log("null pointer error!");
-                        } catch(RuntimeException e) {
-                            log(headerField + "is not Text-String header field!");
-                            return null;
-                        }
-                    }
-
-                    /* get start parameter */
-                    mStartParam = (byte[]) map.get(PduPart.P_START);
-
-                    /* get charset parameter */
-                    mTypeParam= (byte[]) map.get(PduPart.P_TYPE);
-
-                    keepParsing = false;
-                    break;
-                }
-
-                case PduHeaders.CONTENT:
-                case PduHeaders.ADDITIONAL_HEADERS:
-                case PduHeaders.ATTRIBUTES:
-                default: {
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: Unknown header: " + headerField);
-                    }
-                    log("Unknown header");
-                }
-            }
-        }
-
-        return headers;
-    }
-
-    /**
-     * Parse pdu parts.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return parts in PduBody structure
-     */
-    protected PduBody parseParts(ByteArrayInputStream pduDataStream) {
-        if (pduDataStream == null) {
-            return null;
-        }
-
-        int count = parseUnsignedInt(pduDataStream); // get the number of parts
-        PduBody body = new PduBody();
-
-        for (int i = 0 ; i < count ; i++) {
-            int headerLength = parseUnsignedInt(pduDataStream);
-            int dataLength = parseUnsignedInt(pduDataStream);
-            PduPart part = new PduPart();
-            int startPos = pduDataStream.available();
-            if (startPos <= 0) {
-                // Invalid part.
-                return null;
-            }
-
-            /* parse part's content-type */
-            HashMap<Integer, Object> map = new HashMap<Integer, Object>();
-            byte[] contentType = parseContentType(pduDataStream, map);
-            if (null != contentType) {
-                part.setContentType(contentType);
-            } else {
-                part.setContentType((PduContentTypes.contentTypes[0]).getBytes()); //"*/*"
-            }
-
-            /* get name parameter */
-            byte[] name = (byte[]) map.get(PduPart.P_NAME);
-            if (null != name) {
-                part.setName(name);
-            }
-
-            /* get charset parameter */
-            Integer charset = (Integer) map.get(PduPart.P_CHARSET);
-            if (null != charset) {
-                part.setCharset(charset);
-            }
-
-            /* parse part's headers */
-            int endPos = pduDataStream.available();
-            int partHeaderLen = headerLength - (startPos - endPos);
-            if (partHeaderLen > 0) {
-                if (false == parsePartHeaders(pduDataStream, part, partHeaderLen)) {
-                    // Parse part header faild.
-                    return null;
-                }
-            } else if (partHeaderLen < 0) {
-                // Invalid length of content-type.
-                return null;
-            }
-
-            /* FIXME: check content-id, name, filename and content location,
-             * if not set anyone of them, generate a default content-location
-             */
-            if ((null == part.getContentLocation())
-                    && (null == part.getName())
-                    && (null == part.getFilename())
-                    && (null == part.getContentId())) {
-                part.setContentLocation(Long.toOctalString(
-                        System.currentTimeMillis()).getBytes());
-            }
-
-            /* get part's data */
-            if (dataLength > 0) {
-                byte[] partData = new byte[dataLength];
-                String partContentType = new String(part.getContentType());
-                pduDataStream.read(partData, 0, dataLength);
-                if (partContentType.equalsIgnoreCase(ContentType.MULTIPART_ALTERNATIVE)) {
-                    // parse "multipart/vnd.wap.multipart.alternative".
-                    PduBody childBody = parseParts(new ByteArrayInputStream(partData));
-                    // take the first part of children.
-                    part = childBody.getPart(0);
-                } else {
-                    // Check Content-Transfer-Encoding.
-                    byte[] partDataEncoding = part.getContentTransferEncoding();
-                    if (null != partDataEncoding) {
-                        String encoding = new String(partDataEncoding);
-                        if (encoding.equalsIgnoreCase(PduPart.P_BASE64)) {
-                            // Decode "base64" into "binary".
-                            partData = Base64.decodeBase64(partData);
-                        } else if (encoding.equalsIgnoreCase(PduPart.P_QUOTED_PRINTABLE)) {
-                            // Decode "quoted-printable" into "binary".
-                            partData = QuotedPrintable.decodeQuotedPrintable(partData);
-                        } else {
-                            // "binary" is the default encoding.
-                        }
-                    }
-                    if (null == partData) {
-                        log("Decode part data error!");
-                        return null;
-                    }
-                    part.setData(partData);
-                }
-            }
-
-            /* add this part to body */
-            if (THE_FIRST_PART == checkPartPosition(part)) {
-                /* this is the first part */
-                body.addPart(0, part);
-            } else {
-                /* add the part to the end */
-                body.addPart(part);
-            }
-        }
-
-        return body;
-    }
-
-    /**
-     * Log status.
-     *
-     * @param text log information
-     */
-    private static void log(String text) {
-        if (LOCAL_LOGV) {
-            Log.v(LOG_TAG, text);
-        }
-    }
-
-    /**
-     * Parse unsigned integer.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return the integer, -1 when failed
-     */
-    protected static int parseUnsignedInt(ByteArrayInputStream pduDataStream) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * The maximum size of a uintvar is 32 bits.
-         * So it will be encoded in no more than 5 octets.
-         */
-        assert(null != pduDataStream);
-        int result = 0;
-        int temp = pduDataStream.read();
-        if (temp == -1) {
-            return temp;
-        }
-
-        while((temp & 0x80) != 0) {
-            result = result << 7;
-            result |= temp & 0x7F;
-            temp = pduDataStream.read();
-            if (temp == -1) {
-                return temp;
-            }
-        }
-
-        result = result << 7;
-        result |= temp & 0x7F;
-
-        return result;
-    }
-
-    /**
-     * Parse value length.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return the integer
-     */
-    protected static int parseValueLength(ByteArrayInputStream pduDataStream) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Value-length = Short-length | (Length-quote Length)
-         * Short-length = <Any octet 0-30>
-         * Length-quote = <Octet 31>
-         * Length = Uintvar-integer
-         * Uintvar-integer = 1*5 OCTET
-         */
-        assert(null != pduDataStream);
-        int temp = pduDataStream.read();
-        assert(-1 != temp);
-        int first = temp & 0xFF;
-
-        if (first <= SHORT_LENGTH_MAX) {
-            return first;
-        } else if (first == LENGTH_QUOTE) {
-            return parseUnsignedInt(pduDataStream);
-        }
-
-        throw new RuntimeException("Value length > LENGTH_QUOTE!");
-    }
-
-    /**
-     * Parse encoded string value.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return the EncodedStringValue
-     */
-    protected static EncodedStringValue parseEncodedStringValue(ByteArrayInputStream pduDataStream){
-        /**
-         * From OMA-TS-MMS-ENC-V1_3-20050927-C.pdf
-         * Encoded-string-value = Text-string | Value-length Char-set Text-string
-         */
-        assert(null != pduDataStream);
-        pduDataStream.mark(1);
-        EncodedStringValue returnValue = null;
-        int charset = 0;
-        int temp = pduDataStream.read();
-        assert(-1 != temp);
-        int first = temp & 0xFF;
-        if (first == 0) {
-            return new EncodedStringValue("");
-        }
-
-        pduDataStream.reset();
-        if (first < TEXT_MIN) {
-            parseValueLength(pduDataStream);
-
-            charset = parseShortInteger(pduDataStream); //get the "Charset"
-        }
-
-        byte[] textString = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-
-        try {
-            if (0 != charset) {
-                returnValue = new EncodedStringValue(charset, textString);
-            } else {
-                returnValue = new EncodedStringValue(textString);
-            }
-        } catch(Exception e) {
-            return null;
-        }
-
-        return returnValue;
-    }
-
-    /**
-     * Parse Text-String or Quoted-String.
-     *
-     * @param pduDataStream pdu data input stream
-     * @param stringType TYPE_TEXT_STRING or TYPE_QUOTED_STRING
-     * @return the string without End-of-string in byte array
-     */
-    protected static byte[] parseWapString(ByteArrayInputStream pduDataStream,
-            int stringType) {
-        assert(null != pduDataStream);
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Text-string = [Quote] *TEXT End-of-string
-         * If the first character in the TEXT is in the range of 128-255,
-         * a Quote character must precede it.
-         * Otherwise the Quote character must be omitted.
-         * The Quote is not part of the contents.
-         * Quote = <Octet 127>
-         * End-of-string = <Octet 0>
-         *
-         * Quoted-string = <Octet 34> *TEXT End-of-string
-         *
-         * Token-text = Token End-of-string
-         */
-
-        // Mark supposed beginning of Text-string
-        // We will have to mark again if first char is QUOTE or QUOTED_STRING_FLAG
-        pduDataStream.mark(1);
-
-        // Check first char
-        int temp = pduDataStream.read();
-        assert(-1 != temp);
-        if ((TYPE_QUOTED_STRING == stringType) &&
-                (QUOTED_STRING_FLAG == temp)) {
-            // Mark again if QUOTED_STRING_FLAG and ignore it
-            pduDataStream.mark(1);
-        } else if ((TYPE_TEXT_STRING == stringType) &&
-                (QUOTE == temp)) {
-            // Mark again if QUOTE and ignore it
-            pduDataStream.mark(1);
-        } else {
-            // Otherwise go back to origin
-            pduDataStream.reset();
-        }
-
-        // We are now definitely at the beginning of string
-        /**
-         * Return *TOKEN or *TEXT (Text-String without QUOTE,
-         * Quoted-String without QUOTED_STRING_FLAG and without End-of-string)
-         */
-        return getWapString(pduDataStream, stringType);
-    }
-
-    /**
-     * Check TOKEN data defined in RFC2616.
-     * @param ch checking data
-     * @return true when ch is TOKEN, false when ch is not TOKEN
-     */
-    protected static boolean isTokenCharacter(int ch) {
-        /**
-         * Token      = 1*<any CHAR except CTLs or separators>
-         * separators = "("(40) | ")"(41) | "<"(60) | ">"(62) | "@"(64)
-         *            | ","(44) | ";"(59) | ":"(58) | "\"(92) | <">(34)
-         *            | "/"(47) | "["(91) | "]"(93) | "?"(63) | "="(61)
-         *            | "{"(123) | "}"(125) | SP(32) | HT(9)
-         * CHAR       = <any US-ASCII character (octets 0 - 127)>
-         * CTL        = <any US-ASCII control character
-         *            (octets 0 - 31) and DEL (127)>
-         * SP         = <US-ASCII SP, space (32)>
-         * HT         = <US-ASCII HT, horizontal-tab (9)>
-         */
-        if((ch < 33) || (ch > 126)) {
-            return false;
-        }
-
-        switch(ch) {
-            case '"': /* '"' */
-            case '(': /* '(' */
-            case ')': /* ')' */
-            case ',': /* ',' */
-            case '/': /* '/' */
-            case ':': /* ':' */
-            case ';': /* ';' */
-            case '<': /* '<' */
-            case '=': /* '=' */
-            case '>': /* '>' */
-            case '?': /* '?' */
-            case '@': /* '@' */
-            case '[': /* '[' */
-            case '\\': /* '\' */
-            case ']': /* ']' */
-            case '{': /* '{' */
-            case '}': /* '}' */
-                return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Check TEXT data defined in RFC2616.
-     * @param ch checking data
-     * @return true when ch is TEXT, false when ch is not TEXT
-     */
-    protected static boolean isText(int ch) {
-        /**
-         * TEXT = <any OCTET except CTLs,
-         *      but including LWS>
-         * CTL  = <any US-ASCII control character
-         *      (octets 0 - 31) and DEL (127)>
-         * LWS  = [CRLF] 1*( SP | HT )
-         * CRLF = CR LF
-         * CR   = <US-ASCII CR, carriage return (13)>
-         * LF   = <US-ASCII LF, linefeed (10)>
-         */
-        if(((ch >= 32) && (ch <= 126)) || ((ch >= 128) && (ch <= 255))) {
-            return true;
-        }
-
-        switch(ch) {
-            case '\t': /* '\t' */
-            case '\n': /* '\n' */
-            case '\r': /* '\r' */
-                return true;
-        }
-
-        return false;
-    }
-
-    protected static byte[] getWapString(ByteArrayInputStream pduDataStream,
-            int stringType) {
-        assert(null != pduDataStream);
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        int temp = pduDataStream.read();
-        assert(-1 != temp);
-        while((-1 != temp) && ('\0' != temp)) {
-            // check each of the character
-            if (stringType == TYPE_TOKEN_STRING) {
-                if (isTokenCharacter(temp)) {
-                    out.write(temp);
-                }
-            } else {
-                if (isText(temp)) {
-                    out.write(temp);
-                }
-            }
-
-            temp = pduDataStream.read();
-            assert(-1 != temp);
-        }
-
-        if (out.size() > 0) {
-            return out.toByteArray();
-        }
-
-        return null;
-    }
-
-    /**
-     * Extract a byte value from the input stream.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return the byte
-     */
-    protected static int extractByteValue(ByteArrayInputStream pduDataStream) {
-        assert(null != pduDataStream);
-        int temp = pduDataStream.read();
-        assert(-1 != temp);
-        return temp & 0xFF;
-    }
-
-    /**
-     * Parse Short-Integer.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return the byte
-     */
-    protected static int parseShortInteger(ByteArrayInputStream pduDataStream) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Short-integer = OCTET
-         * Integers in range 0-127 shall be encoded as a one
-         * octet value with the most significant bit set to one (1xxx xxxx)
-         * and with the value in the remaining least significant bits.
-         */
-        assert(null != pduDataStream);
-        int temp = pduDataStream.read();
-        assert(-1 != temp);
-        return temp & 0x7F;
-    }
-
-    /**
-     * Parse Long-Integer.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return long integer
-     */
-    protected static long parseLongInteger(ByteArrayInputStream pduDataStream) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Long-integer = Short-length Multi-octet-integer
-         * The Short-length indicates the length of the Multi-octet-integer
-         * Multi-octet-integer = 1*30 OCTET
-         * The content octets shall be an unsigned integer value
-         * with the most significant octet encoded first (big-endian representation).
-         * The minimum number of octets must be used to encode the value.
-         * Short-length = <Any octet 0-30>
-         */
-        assert(null != pduDataStream);
-        int temp = pduDataStream.read();
-        assert(-1 != temp);
-        int count = temp & 0xFF;
-
-        if (count > LONG_INTEGER_LENGTH_MAX) {
-            throw new RuntimeException("Octet count greater than 8 and I can't represent that!");
-        }
-
-        long result = 0;
-
-        for (int i = 0 ; i < count ; i++) {
-            temp = pduDataStream.read();
-            assert(-1 != temp);
-            result <<= 8;
-            result += (temp & 0xFF);
-        }
-
-        return result;
-    }
-
-    /**
-     * Parse Integer-Value.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return long integer
-     */
-    protected static long parseIntegerValue(ByteArrayInputStream pduDataStream) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Integer-Value = Short-integer | Long-integer
-         */
-        assert(null != pduDataStream);
-        pduDataStream.mark(1);
-        int temp = pduDataStream.read();
-        assert(-1 != temp);
-        pduDataStream.reset();
-        if (temp > SHORT_INTEGER_MAX) {
-            return parseShortInteger(pduDataStream);
-        } else {
-            return parseLongInteger(pduDataStream);
-        }
-    }
-
-    /**
-     * To skip length of the wap value.
-     *
-     * @param pduDataStream pdu data input stream
-     * @param length area size
-     * @return the values in this area
-     */
-    protected static int skipWapValue(ByteArrayInputStream pduDataStream, int length) {
-        assert(null != pduDataStream);
-        byte[] area = new byte[length];
-        int readLen = pduDataStream.read(area, 0, length);
-        if (readLen < length) { //The actually read length is lower than the length
-            return -1;
-        } else {
-            return readLen;
-        }
-    }
-
-    /**
-     * Parse content type parameters. For now we just support
-     * four parameters used in mms: "type", "start", "name", "charset".
-     *
-     * @param pduDataStream pdu data input stream
-     * @param map to store parameters of Content-Type field
-     * @param length length of all the parameters
-     */
-    protected static void parseContentTypeParams(ByteArrayInputStream pduDataStream,
-            HashMap<Integer, Object> map, Integer length) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Parameter = Typed-parameter | Untyped-parameter
-         * Typed-parameter = Well-known-parameter-token Typed-value
-         * the actual expected type of the value is implied by the well-known parameter
-         * Well-known-parameter-token = Integer-value
-         * the code values used for parameters are specified in the Assigned Numbers appendix
-         * Typed-value = Compact-value | Text-value
-         * In addition to the expected type, there may be no value.
-         * If the value cannot be encoded using the expected type, it shall be encoded as text.
-         * Compact-value = Integer-value |
-         * Date-value | Delta-seconds-value | Q-value | Version-value |
-         * Uri-value
-         * Untyped-parameter = Token-text Untyped-value
-         * the type of the value is unknown, but it shall be encoded as an integer,
-         * if that is possible.
-         * Untyped-value = Integer-value | Text-value
-         */
-        assert(null != pduDataStream);
-        assert(length > 0);
-
-        int startPos = pduDataStream.available();
-        int tempPos = 0;
-        int lastLen = length;
-        while(0 < lastLen) {
-            int param = pduDataStream.read();
-            assert(-1 != param);
-            lastLen--;
-
-            switch (param) {
-                /**
-                 * From rfc2387, chapter 3.1
-                 * The type parameter must be specified and its value is the MIME media
-                 * type of the "root" body part. It permits a MIME user agent to
-                 * determine the content-type without reference to the enclosed body
-                 * part. If the value of the type parameter and the root body part's
-                 * content-type differ then the User Agent's behavior is undefined.
-                 *
-                 * From wap-230-wsp-20010705-a.pdf
-                 * type = Constrained-encoding
-                 * Constrained-encoding = Extension-Media | Short-integer
-                 * Extension-media = *TEXT End-of-string
-                 */
-                case PduPart.P_TYPE:
-                case PduPart.P_CT_MR_TYPE:
-                    pduDataStream.mark(1);
-                    int first = extractByteValue(pduDataStream);
-                    pduDataStream.reset();
-                    if (first > TEXT_MAX) {
-                        // Short-integer (well-known type)
-                        int index = parseShortInteger(pduDataStream);
-
-                        if (index < PduContentTypes.contentTypes.length) {
-                            byte[] type = (PduContentTypes.contentTypes[index]).getBytes();
-                            map.put(PduPart.P_TYPE, type);
-                        } else {
-                            //not support this type, ignore it.
-                        }
-                    } else {
-                        // Text-String (extension-media)
-                        byte[] type = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                        if ((null != type) && (null != map)) {
-                            map.put(PduPart.P_TYPE, type);
-                        }
-                    }
-
-                    tempPos = pduDataStream.available();
-                    lastLen = length - (startPos - tempPos);
-                    break;
-
-                    /**
-                     * From oma-ts-mms-conf-v1_3.pdf, chapter 10.2.3.
-                     * Start Parameter Referring to Presentation
-                     *
-                     * From rfc2387, chapter 3.2
-                     * The start parameter, if given, is the content-ID of the compound
-                     * object's "root". If not present the "root" is the first body part in
-                     * the Multipart/Related entity. The "root" is the element the
-                     * applications processes first.
-                     *
-                     * From wap-230-wsp-20010705-a.pdf
-                     * start = Text-String
-                     */
-                case PduPart.P_START:
-                case PduPart.P_DEP_START:
-                    byte[] start = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                    if ((null != start) && (null != map)) {
-                        map.put(PduPart.P_START, start);
-                    }
-
-                    tempPos = pduDataStream.available();
-                    lastLen = length - (startPos - tempPos);
-                    break;
-
-                    /**
-                     * From oma-ts-mms-conf-v1_3.pdf
-                     * In creation, the character set SHALL be either us-ascii
-                     * (IANA MIBenum 3) or utf-8 (IANA MIBenum 106)[Unicode].
-                     * In retrieval, both us-ascii and utf-8 SHALL be supported.
-                     *
-                     * From wap-230-wsp-20010705-a.pdf
-                     * charset = Well-known-charset|Text-String
-                     * Well-known-charset = Any-charset | Integer-value
-                     * Both are encoded using values from Character Set
-                     * Assignments table in Assigned Numbers
-                     * Any-charset = <Octet 128>
-                     * Equivalent to the special RFC2616 charset value "*"
-                     */
-                case PduPart.P_CHARSET:
-                    pduDataStream.mark(1);
-                    int firstValue = extractByteValue(pduDataStream);
-                    pduDataStream.reset();
-                    //Check first char
-                    if (((firstValue > TEXT_MIN) && (firstValue < TEXT_MAX)) ||
-                            (END_STRING_FLAG == firstValue)) {
-                        //Text-String (extension-charset)
-                        byte[] charsetStr = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                        try {
-                            int charsetInt = CharacterSets.getMibEnumValue(
-                                    new String(charsetStr));
-                            map.put(PduPart.P_CHARSET, charsetInt);
-                        } catch (UnsupportedEncodingException e) {
-                            // Not a well-known charset, use "*".
-                            Log.e(LOG_TAG, Arrays.toString(charsetStr), e);
-                            map.put(PduPart.P_CHARSET, CharacterSets.ANY_CHARSET);
-                        }
-                    } else {
-                        //Well-known-charset
-                        int charset = (int) parseIntegerValue(pduDataStream);
-                        if (map != null) {
-                            map.put(PduPart.P_CHARSET, charset);
-                        }
-                    }
-
-                    tempPos = pduDataStream.available();
-                    lastLen = length - (startPos - tempPos);
-                    break;
-
-                    /**
-                     * From oma-ts-mms-conf-v1_3.pdf
-                     * A name for multipart object SHALL be encoded using name-parameter
-                     * for Content-Type header in WSP multipart headers.
-                     *
-                     * From wap-230-wsp-20010705-a.pdf
-                     * name = Text-String
-                     */
-                case PduPart.P_DEP_NAME:
-                case PduPart.P_NAME:
-                    byte[] name = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                    if ((null != name) && (null != map)) {
-                        map.put(PduPart.P_NAME, name);
-                    }
-
-                    tempPos = pduDataStream.available();
-                    lastLen = length - (startPos - tempPos);
-                    break;
-                default:
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "Not supported Content-Type parameter");
-                    }
-                if (-1 == skipWapValue(pduDataStream, lastLen)) {
-                    Log.e(LOG_TAG, "Corrupt Content-Type");
-                } else {
-                    lastLen = 0;
-                }
-                break;
-            }
-        }
-
-        if (0 != lastLen) {
-            Log.e(LOG_TAG, "Corrupt Content-Type");
-        }
-    }
-
-    /**
-     * Parse content type.
-     *
-     * @param pduDataStream pdu data input stream
-     * @param map to store parameters in Content-Type header field
-     * @return Content-Type value
-     */
-    protected static byte[] parseContentType(ByteArrayInputStream pduDataStream,
-            HashMap<Integer, Object> map) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Content-type-value = Constrained-media | Content-general-form
-         * Content-general-form = Value-length Media-type
-         * Media-type = (Well-known-media | Extension-Media) *(Parameter)
-         */
-        assert(null != pduDataStream);
-
-        byte[] contentType = null;
-        pduDataStream.mark(1);
-        int temp = pduDataStream.read();
-        assert(-1 != temp);
-        pduDataStream.reset();
-
-        int cur = (temp & 0xFF);
-
-        if (cur < TEXT_MIN) {
-            int length = parseValueLength(pduDataStream);
-            int startPos = pduDataStream.available();
-            pduDataStream.mark(1);
-            temp = pduDataStream.read();
-            assert(-1 != temp);
-            pduDataStream.reset();
-            int first = (temp & 0xFF);
-
-            if ((first >= TEXT_MIN) && (first <= TEXT_MAX)) {
-                contentType = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-            } else if (first > TEXT_MAX) {
-                int index = parseShortInteger(pduDataStream);
-
-                if (index < PduContentTypes.contentTypes.length) { //well-known type
-                    contentType = (PduContentTypes.contentTypes[index]).getBytes();
-                } else {
-                    pduDataStream.reset();
-                    contentType = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                }
-            } else {
-                Log.e(LOG_TAG, "Corrupt content-type");
-                return (PduContentTypes.contentTypes[0]).getBytes(); //"*/*"
-            }
-
-            int endPos = pduDataStream.available();
-            int parameterLen = length - (startPos - endPos);
-            if (parameterLen > 0) {//have parameters
-                parseContentTypeParams(pduDataStream, map, parameterLen);
-            }
-
-            if (parameterLen < 0) {
-                Log.e(LOG_TAG, "Corrupt MMS message");
-                return (PduContentTypes.contentTypes[0]).getBytes(); //"*/*"
-            }
-        } else if (cur <= TEXT_MAX) {
-            contentType = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-        } else {
-            contentType =
-                (PduContentTypes.contentTypes[parseShortInteger(pduDataStream)]).getBytes();
-        }
-
-        return contentType;
-    }
-
-    /**
-     * Parse part's headers.
-     *
-     * @param pduDataStream pdu data input stream
-     * @param part to store the header informations of the part
-     * @param length length of the headers
-     * @return true if parse successfully, false otherwise
-     */
-    protected boolean parsePartHeaders(ByteArrayInputStream pduDataStream,
-            PduPart part, int length) {
-        assert(null != pduDataStream);
-        assert(null != part);
-        assert(length > 0);
-
-        /**
-         * From oma-ts-mms-conf-v1_3.pdf, chapter 10.2.
-         * A name for multipart object SHALL be encoded using name-parameter
-         * for Content-Type header in WSP multipart headers.
-         * In decoding, name-parameter of Content-Type SHALL be used if available.
-         * If name-parameter of Content-Type is not available,
-         * filename parameter of Content-Disposition header SHALL be used if available.
-         * If neither name-parameter of Content-Type header nor filename parameter
-         * of Content-Disposition header is available,
-         * Content-Location header SHALL be used if available.
-         *
-         * Within SMIL part the reference to the media object parts SHALL use
-         * either Content-ID or Content-Location mechanism [RFC2557]
-         * and the corresponding WSP part headers in media object parts
-         * contain the corresponding definitions.
-         */
-        int startPos = pduDataStream.available();
-        int tempPos = 0;
-        int lastLen = length;
-        while(0 < lastLen) {
-            int header = pduDataStream.read();
-            assert(-1 != header);
-            lastLen--;
-
-            if (header > TEXT_MAX) {
-                // Number assigned headers.
-                switch (header) {
-                    case PduPart.P_CONTENT_LOCATION:
-                        /**
-                         * From wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21
-                         * Content-location-value = Uri-value
-                         */
-                        byte[] contentLocation = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                        if (null != contentLocation) {
-                            part.setContentLocation(contentLocation);
-                        }
-
-                        tempPos = pduDataStream.available();
-                        lastLen = length - (startPos - tempPos);
-                        break;
-                    case PduPart.P_CONTENT_ID:
-                        /**
-                         * From wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21
-                         * Content-ID-value = Quoted-string
-                         */
-                        byte[] contentId = parseWapString(pduDataStream, TYPE_QUOTED_STRING);
-                        if (null != contentId) {
-                            part.setContentId(contentId);
-                        }
-
-                        tempPos = pduDataStream.available();
-                        lastLen = length - (startPos - tempPos);
-                        break;
-                    case PduPart.P_DEP_CONTENT_DISPOSITION:
-                    case PduPart.P_CONTENT_DISPOSITION:
-                        /**
-                         * From wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21
-                         * Content-disposition-value = Value-length Disposition *(Parameter)
-                         * Disposition = Form-data | Attachment | Inline | Token-text
-                         * Form-data = <Octet 128>
-                         * Attachment = <Octet 129>
-                         * Inline = <Octet 130>
-                         */
-
-                        /*
-                         * some carrier mmsc servers do not support content_disposition
-                         * field correctly
-                         */
-                        if (mParseContentDisposition) {
-                            int len = parseValueLength(pduDataStream);
-                            pduDataStream.mark(1);
-                            int thisStartPos = pduDataStream.available();
-                            int thisEndPos = 0;
-                            int value = pduDataStream.read();
-
-                            if (value == PduPart.P_DISPOSITION_FROM_DATA ) {
-                                part.setContentDisposition(PduPart.DISPOSITION_FROM_DATA);
-                            } else if (value == PduPart.P_DISPOSITION_ATTACHMENT) {
-                                part.setContentDisposition(PduPart.DISPOSITION_ATTACHMENT);
-                            } else if (value == PduPart.P_DISPOSITION_INLINE) {
-                                part.setContentDisposition(PduPart.DISPOSITION_INLINE);
-                            } else {
-                                pduDataStream.reset();
-                                /* Token-text */
-                                part.setContentDisposition(parseWapString(pduDataStream
-                                        , TYPE_TEXT_STRING));
-                            }
-
-                            /* get filename parameter and skip other parameters */
-                            thisEndPos = pduDataStream.available();
-                            if (thisStartPos - thisEndPos < len) {
-                                value = pduDataStream.read();
-                                if (value == PduPart.P_FILENAME) { //filename is text-string
-                                    part.setFilename(parseWapString(pduDataStream
-                                            , TYPE_TEXT_STRING));
-                                }
-
-                                /* skip other parameters */
-                                thisEndPos = pduDataStream.available();
-                                if (thisStartPos - thisEndPos < len) {
-                                    int last = len - (thisStartPos - thisEndPos);
-                                    byte[] temp = new byte[last];
-                                    pduDataStream.read(temp, 0, last);
-                                }
-                            }
-
-                            tempPos = pduDataStream.available();
-                            lastLen = length - (startPos - tempPos);
-                        }
-                        break;
-                    default:
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "Not supported Part headers: " + header);
-                        }
-                    if (-1 == skipWapValue(pduDataStream, lastLen)) {
-                        Log.e(LOG_TAG, "Corrupt Part headers");
-                        return false;
-                    }
-                    lastLen = 0;
-                    break;
-                }
-            } else if ((header >= TEXT_MIN) && (header <= TEXT_MAX)) {
-                // Not assigned header.
-                byte[] tempHeader = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                byte[] tempValue = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-
-                // Check the header whether it is "Content-Transfer-Encoding".
-                if (true ==
-                    PduPart.CONTENT_TRANSFER_ENCODING.equalsIgnoreCase(new String(tempHeader))) {
-                    part.setContentTransferEncoding(tempValue);
-                }
-
-                tempPos = pduDataStream.available();
-                lastLen = length - (startPos - tempPos);
-            } else {
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "Not supported Part headers: " + header);
-                }
-                // Skip all headers of this part.
-                if (-1 == skipWapValue(pduDataStream, lastLen)) {
-                    Log.e(LOG_TAG, "Corrupt Part headers");
-                    return false;
-                }
-                lastLen = 0;
-            }
-        }
-
-        if (0 != lastLen) {
-            Log.e(LOG_TAG, "Corrupt Part headers");
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Check the position of a specified part.
-     *
-     * @param part the part to be checked
-     * @return part position, THE_FIRST_PART when it's the
-     * first one, THE_LAST_PART when it's the last one.
-     */
-    private static int checkPartPosition(PduPart part) {
-        assert(null != part);
-        if ((null == mTypeParam) &&
-                (null == mStartParam)) {
-            return THE_LAST_PART;
-        }
-
-        /* check part's content-id */
-        if (null != mStartParam) {
-            byte[] contentId = part.getContentId();
-            if (null != contentId) {
-                if (true == Arrays.equals(mStartParam, contentId)) {
-                    return THE_FIRST_PART;
-                }
-            }
-            // This is not the first part, so append to end (keeping the original order)
-            // Check b/19607294 for details of this change
-            return THE_LAST_PART;
-        }
-
-        /* check part's content-type */
-        if (null != mTypeParam) {
-            byte[] contentType = part.getContentType();
-            if (null != contentType) {
-                if (true == Arrays.equals(mTypeParam, contentType)) {
-                    return THE_FIRST_PART;
-                }
-            }
-        }
-
-        return THE_LAST_PART;
-    }
-
-    /**
-     * Check mandatory headers of a pdu.
-     *
-     * @param headers pdu headers
-     * @return true if the pdu has all of the mandatory headers, false otherwise.
-     */
-    protected static boolean checkMandatoryHeader(PduHeaders headers) {
-        if (null == headers) {
-            return false;
-        }
-
-        /* get message type */
-        int messageType = headers.getOctet(PduHeaders.MESSAGE_TYPE);
-
-        /* check Mms-Version field */
-        int mmsVersion = headers.getOctet(PduHeaders.MMS_VERSION);
-        if (0 == mmsVersion) {
-            // Every message should have Mms-Version field.
-            return false;
-        }
-
-        /* check mandatory header fields */
-        switch (messageType) {
-            case PduHeaders.MESSAGE_TYPE_SEND_REQ:
-                // Content-Type field.
-                byte[] srContentType = headers.getTextString(PduHeaders.CONTENT_TYPE);
-                if (null == srContentType) {
-                    return false;
-                }
-
-                // From field.
-                EncodedStringValue srFrom = headers.getEncodedStringValue(PduHeaders.FROM);
-                if (null == srFrom) {
-                    return false;
-                }
-
-                // Transaction-Id field.
-                byte[] srTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
-                if (null == srTransactionId) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_SEND_CONF:
-                // Response-Status field.
-                int scResponseStatus = headers.getOctet(PduHeaders.RESPONSE_STATUS);
-                if (0 == scResponseStatus) {
-                    return false;
-                }
-
-                // Transaction-Id field.
-                byte[] scTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
-                if (null == scTransactionId) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND:
-                // Content-Location field.
-                byte[] niContentLocation = headers.getTextString(PduHeaders.CONTENT_LOCATION);
-                if (null == niContentLocation) {
-                    return false;
-                }
-
-                // Expiry field.
-                long niExpiry = headers.getLongInteger(PduHeaders.EXPIRY);
-                if (-1 == niExpiry) {
-                    return false;
-                }
-
-                // Message-Class field.
-                byte[] niMessageClass = headers.getTextString(PduHeaders.MESSAGE_CLASS);
-                if (null == niMessageClass) {
-                    return false;
-                }
-
-                // Message-Size field.
-                long niMessageSize = headers.getLongInteger(PduHeaders.MESSAGE_SIZE);
-                if (-1 == niMessageSize) {
-                    return false;
-                }
-
-                // Transaction-Id field.
-                byte[] niTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
-                if (null == niTransactionId) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND:
-                // Status field.
-                int nriStatus = headers.getOctet(PduHeaders.STATUS);
-                if (0 == nriStatus) {
-                    return false;
-                }
-
-                // Transaction-Id field.
-                byte[] nriTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
-                if (null == nriTransactionId) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF:
-                // Content-Type field.
-                byte[] rcContentType = headers.getTextString(PduHeaders.CONTENT_TYPE);
-                if (null == rcContentType) {
-                    return false;
-                }
-
-                // Date field.
-                long rcDate = headers.getLongInteger(PduHeaders.DATE);
-                if (-1 == rcDate) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_DELIVERY_IND:
-                // Date field.
-                long diDate = headers.getLongInteger(PduHeaders.DATE);
-                if (-1 == diDate) {
-                    return false;
-                }
-
-                // Message-Id field.
-                byte[] diMessageId = headers.getTextString(PduHeaders.MESSAGE_ID);
-                if (null == diMessageId) {
-                    return false;
-                }
-
-                // Status field.
-                int diStatus = headers.getOctet(PduHeaders.STATUS);
-                if (0 == diStatus) {
-                    return false;
-                }
-
-                // To field.
-                EncodedStringValue[] diTo = headers.getEncodedStringValues(PduHeaders.TO);
-                if (null == diTo) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND:
-                // Transaction-Id field.
-                byte[] aiTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
-                if (null == aiTransactionId) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_READ_ORIG_IND:
-                // Date field.
-                long roDate = headers.getLongInteger(PduHeaders.DATE);
-                if (-1 == roDate) {
-                    return false;
-                }
-
-                // From field.
-                EncodedStringValue roFrom = headers.getEncodedStringValue(PduHeaders.FROM);
-                if (null == roFrom) {
-                    return false;
-                }
-
-                // Message-Id field.
-                byte[] roMessageId = headers.getTextString(PduHeaders.MESSAGE_ID);
-                if (null == roMessageId) {
-                    return false;
-                }
-
-                // Read-Status field.
-                int roReadStatus = headers.getOctet(PduHeaders.READ_STATUS);
-                if (0 == roReadStatus) {
-                    return false;
-                }
-
-                // To field.
-                EncodedStringValue[] roTo = headers.getEncodedStringValues(PduHeaders.TO);
-                if (null == roTo) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_READ_REC_IND:
-                // From field.
-                EncodedStringValue rrFrom = headers.getEncodedStringValue(PduHeaders.FROM);
-                if (null == rrFrom) {
-                    return false;
-                }
-
-                // Message-Id field.
-                byte[] rrMessageId = headers.getTextString(PduHeaders.MESSAGE_ID);
-                if (null == rrMessageId) {
-                    return false;
-                }
-
-                // Read-Status field.
-                int rrReadStatus = headers.getOctet(PduHeaders.READ_STATUS);
-                if (0 == rrReadStatus) {
-                    return false;
-                }
-
-                // To field.
-                EncodedStringValue[] rrTo = headers.getEncodedStringValues(PduHeaders.TO);
-                if (null == rrTo) {
-                    return false;
-                }
-
-                break;
-            default:
-                // Parser doesn't support this message type in this version.
-                return false;
-        }
-
-        return true;
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/PduPart.java b/src/android/support/v7/mms/pdu/PduPart.java
deleted file mode 100644
index b20045e..0000000
--- a/src/android/support/v7/mms/pdu/PduPart.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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 androidx.appcompat.mms.pdu;
-
-import android.net.Uri;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * The pdu part.
- */
-public class PduPart {
-    /**
-     * Well-Known Parameters.
-     */
-    public static final int P_Q                  = 0x80;
-    public static final int P_CHARSET            = 0x81;
-    public static final int P_LEVEL              = 0x82;
-    public static final int P_TYPE               = 0x83;
-    public static final int P_DEP_NAME           = 0x85;
-    public static final int P_DEP_FILENAME       = 0x86;
-    public static final int P_DIFFERENCES        = 0x87;
-    public static final int P_PADDING            = 0x88;
-    // This value of "TYPE" s used with Content-Type: multipart/related
-    public static final int P_CT_MR_TYPE         = 0x89;
-    public static final int P_DEP_START          = 0x8A;
-    public static final int P_DEP_START_INFO     = 0x8B;
-    public static final int P_DEP_COMMENT        = 0x8C;
-    public static final int P_DEP_DOMAIN         = 0x8D;
-    public static final int P_MAX_AGE            = 0x8E;
-    public static final int P_DEP_PATH           = 0x8F;
-    public static final int P_SECURE             = 0x90;
-    public static final int P_SEC                = 0x91;
-    public static final int P_MAC                = 0x92;
-    public static final int P_CREATION_DATE      = 0x93;
-    public static final int P_MODIFICATION_DATE  = 0x94;
-    public static final int P_READ_DATE          = 0x95;
-    public static final int P_SIZE               = 0x96;
-    public static final int P_NAME               = 0x97;
-    public static final int P_FILENAME           = 0x98;
-    public static final int P_START              = 0x99;
-    public static final int P_START_INFO         = 0x9A;
-    public static final int P_COMMENT            = 0x9B;
-    public static final int P_DOMAIN             = 0x9C;
-    public static final int P_PATH               = 0x9D;
-
-    /**
-     *  Header field names.
-     */
-     public static final int P_CONTENT_TYPE       = 0x91;
-     public static final int P_CONTENT_LOCATION   = 0x8E;
-     public static final int P_CONTENT_ID         = 0xC0;
-     public static final int P_DEP_CONTENT_DISPOSITION = 0xAE;
-     public static final int P_CONTENT_DISPOSITION = 0xC5;
-    // The next header is unassigned header, use reserved header(0x48) value.
-     public static final int P_CONTENT_TRANSFER_ENCODING = 0xC8;
-
-     /**
-      * Content=Transfer-Encoding string.
-      */
-     public static final String CONTENT_TRANSFER_ENCODING =
-             "Content-Transfer-Encoding";
-
-     /**
-      * Value of Content-Transfer-Encoding.
-      */
-     public static final String P_BINARY = "binary";
-     public static final String P_7BIT = "7bit";
-     public static final String P_8BIT = "8bit";
-     public static final String P_BASE64 = "base64";
-     public static final String P_QUOTED_PRINTABLE = "quoted-printable";
-
-     /**
-      * Value of disposition can be set to PduPart when the value is octet in
-      * the PDU.
-      * "from-data" instead of Form-data<Octet 128>.
-      * "attachment" instead of Attachment<Octet 129>.
-      * "inline" instead of Inline<Octet 130>.
-      */
-     static final byte[] DISPOSITION_FROM_DATA = "from-data".getBytes();
-     static final byte[] DISPOSITION_ATTACHMENT = "attachment".getBytes();
-     static final byte[] DISPOSITION_INLINE = "inline".getBytes();
-
-     /**
-      * Content-Disposition value.
-      */
-     public static final int P_DISPOSITION_FROM_DATA  = 0x80;
-     public static final int P_DISPOSITION_ATTACHMENT = 0x81;
-     public static final int P_DISPOSITION_INLINE     = 0x82;
-
-     /**
-      * Header of part.
-      */
-     private Map<Integer, Object> mPartHeader = null;
-
-     /**
-      * Data uri.
-      */
-     private Uri mUri = null;
-
-     /**
-      * Part data.
-      */
-     private byte[] mPartData = null;
-
-     private static final String TAG = "PduPart";
-
-     /**
-      * Empty Constructor.
-      */
-     public PduPart() {
-         mPartHeader = new HashMap<Integer, Object>();
-     }
-
-     /**
-      * Set part data. The data are stored as byte array.
-      *
-      * @param data the data
-      */
-     public void setData(byte[] data) {
-         if(data == null) {
-            return;
-        }
-
-         mPartData = new byte[data.length];
-         System.arraycopy(data, 0, mPartData, 0, data.length);
-     }
-
-     /**
-      * @return A copy of the part data or null if the data wasn't set or
-      *         the data is stored as Uri.
-      * @see #getDataUri
-      */
-     public byte[] getData() {
-         if(mPartData == null) {
-            return null;
-         }
-
-         byte[] byteArray = new byte[mPartData.length];
-         System.arraycopy(mPartData, 0, byteArray, 0, mPartData.length);
-         return byteArray;
-     }
-
-    /**
-     * @return The length of the data, if this object have data, else 0.
-     */
-     public int getDataLength() {
-         if(mPartData != null){
-             return mPartData.length;
-         } else {
-             return 0;
-         }
-     }
-
-
-     /**
-      * Set data uri. The data are stored as Uri.
-      *
-      * @param uri the uri
-      */
-     public void setDataUri(Uri uri) {
-         mUri = uri;
-     }
-
-     /**
-      * @return The Uri of the part data or null if the data wasn't set or
-      *         the data is stored as byte array.
-      * @see #getData
-      */
-     public Uri getDataUri() {
-         return mUri;
-     }
-
-     /**
-      * Set Content-id value
-      *
-      * @param contentId the content-id value
-      * @throws NullPointerException if the value is null.
-      */
-     public void setContentId(byte[] contentId) {
-         if((contentId == null) || (contentId.length == 0)) {
-             throw new IllegalArgumentException(
-                     "Content-Id may not be null or empty.");
-         }
-
-         if ((contentId.length > 1)
-                 && ((char) contentId[0] == '<')
-                 && ((char) contentId[contentId.length - 1] == '>')) {
-             mPartHeader.put(P_CONTENT_ID, contentId);
-             return;
-         }
-
-         // Insert beginning '<' and trailing '>' for Content-Id.
-         byte[] buffer = new byte[contentId.length + 2];
-         buffer[0] = (byte) (0xff & '<');
-         buffer[buffer.length - 1] = (byte) (0xff & '>');
-         System.arraycopy(contentId, 0, buffer, 1, contentId.length);
-         mPartHeader.put(P_CONTENT_ID, buffer);
-     }
-
-     /**
-      * Get Content-id value.
-      *
-      * @return the value
-      */
-     public byte[] getContentId() {
-         return (byte[]) mPartHeader.get(P_CONTENT_ID);
-     }
-
-     /**
-      * Set Char-set value.
-      *
-      * @param charset the value
-      */
-     public void setCharset(int charset) {
-         mPartHeader.put(P_CHARSET, charset);
-     }
-
-     /**
-      * Get Char-set value
-      *
-      * @return the charset value. Return 0 if charset was not set.
-      */
-     public int getCharset() {
-         Integer charset = (Integer) mPartHeader.get(P_CHARSET);
-         if(charset == null) {
-             return 0;
-         } else {
-             return charset.intValue();
-         }
-     }
-
-     /**
-      * Set Content-Location value.
-      *
-      * @param contentLocation the value
-      * @throws NullPointerException if the value is null.
-      */
-     public void setContentLocation(byte[] contentLocation) {
-         if(contentLocation == null) {
-             throw new NullPointerException("null content-location");
-         }
-
-         mPartHeader.put(P_CONTENT_LOCATION, contentLocation);
-     }
-
-     /**
-      * Get Content-Location value.
-      *
-      * @return the value
-      *     return PduPart.disposition[0] instead of <Octet 128> (Form-data).
-      *     return PduPart.disposition[1] instead of <Octet 129> (Attachment).
-      *     return PduPart.disposition[2] instead of <Octet 130> (Inline).
-      */
-     public byte[] getContentLocation() {
-         return (byte[]) mPartHeader.get(P_CONTENT_LOCATION);
-     }
-
-     /**
-      * Set Content-Disposition value.
-      * Use PduPart.disposition[0] instead of <Octet 128> (Form-data).
-      * Use PduPart.disposition[1] instead of <Octet 129> (Attachment).
-      * Use PduPart.disposition[2] instead of <Octet 130> (Inline).
-      *
-      * @param contentDisposition the value
-      * @throws NullPointerException if the value is null.
-      */
-     public void setContentDisposition(byte[] contentDisposition) {
-         if(contentDisposition == null) {
-             throw new NullPointerException("null content-disposition");
-         }
-
-         mPartHeader.put(P_CONTENT_DISPOSITION, contentDisposition);
-     }
-
-     /**
-      * Get Content-Disposition value.
-      *
-      * @return the value
-      */
-     public byte[] getContentDisposition() {
-         return (byte[]) mPartHeader.get(P_CONTENT_DISPOSITION);
-     }
-
-     /**
-      *  Set Content-Type value.
-      *
-      *  @param contentType the content type
-      *  @throws NullPointerException if the value is null.
-      */
-     public void setContentType(byte[] contentType) {
-         if(contentType == null) {
-             throw new NullPointerException("null content-type");
-         }
-
-         mPartHeader.put(P_CONTENT_TYPE, contentType);
-     }
-
-     /**
-      * Get Content-Type value of part.
-      *
-      * @return the value
-      */
-     public byte[] getContentType() {
-         return (byte[]) mPartHeader.get(P_CONTENT_TYPE);
-     }
-
-     /**
-      * Set Content-Transfer-Encoding value
-      *
-      * @param contentTransferEncoding the Content-Transfer-Encoding value
-      * @throws NullPointerException if the value is null.
-      */
-     public void setContentTransferEncoding(byte[] contentTransferEncoding) {
-         if(contentTransferEncoding == null) {
-             throw new NullPointerException("null content-transfer-encoding");
-         }
-
-         mPartHeader.put(P_CONTENT_TRANSFER_ENCODING, contentTransferEncoding);
-     }
-
-     /**
-      * Get Content-Transfer-Encoding value.
-      *
-      * @return the value
-      */
-     public byte[] getContentTransferEncoding() {
-         return (byte[]) mPartHeader.get(P_CONTENT_TRANSFER_ENCODING);
-     }
-
-     /**
-      * Set Content-type parameter: name.
-      *
-      * @param name the name value
-      * @throws NullPointerException if the value is null.
-      */
-     public void setName(byte[] name) {
-         if(null == name) {
-             throw new NullPointerException("null content-id");
-         }
-
-         mPartHeader.put(P_NAME, name);
-     }
-
-     /**
-      *  Get content-type parameter: name.
-      *
-      *  @return the name
-      */
-     public byte[] getName() {
-         return (byte[]) mPartHeader.get(P_NAME);
-     }
-
-     /**
-      * Get Content-disposition parameter: filename
-      *
-      * @param fileName the filename value
-      * @throws NullPointerException if the value is null.
-      */
-     public void setFilename(byte[] fileName) {
-         if(null == fileName) {
-             throw new NullPointerException("null content-id");
-         }
-
-         mPartHeader.put(P_FILENAME, fileName);
-     }
-
-     /**
-      * Set Content-disposition parameter: filename
-      *
-      * @return the filename
-      */
-     public byte[] getFilename() {
-         return (byte[]) mPartHeader.get(P_FILENAME);
-     }
-
-    public String generateLocation() {
-        // Assumption: At least one of the content-location / name / filename
-        // or content-id should be set. This is guaranteed by the PduParser
-        // for incoming messages and by MM composer for outgoing messages.
-        byte[] location = (byte[]) mPartHeader.get(P_NAME);
-        if(null == location) {
-            location = (byte[]) mPartHeader.get(P_FILENAME);
-
-            if (null == location) {
-                location = (byte[]) mPartHeader.get(P_CONTENT_LOCATION);
-            }
-        }
-
-        if (null == location) {
-            byte[] contentId = (byte[]) mPartHeader.get(P_CONTENT_ID);
-            return "cid:" + new String(contentId);
-        } else {
-            return new String(location);
-        }
-    }
-}
-
diff --git a/src/android/support/v7/mms/pdu/QuotedPrintable.java b/src/android/support/v7/mms/pdu/QuotedPrintable.java
deleted file mode 100644
index 2e16581..0000000
--- a/src/android/support/v7/mms/pdu/QuotedPrintable.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-import java.io.ByteArrayOutputStream;
-
-public class QuotedPrintable {
-    private static byte ESCAPE_CHAR = '=';
-
-    /**
-     * Decodes an array quoted-printable characters into an array of original bytes.
-     * Escaped characters are converted back to their original representation.
-     *
-     * <p>
-     * This function implements a subset of
-     * quoted-printable encoding specification (rule #1 and rule #2)
-     * as defined in RFC 1521.
-     * </p>
-     *
-     * @param bytes array of quoted-printable characters
-     * @return array of original bytes,
-     *         null if quoted-printable decoding is unsuccessful.
-     */
-    public static final byte[] decodeQuotedPrintable(byte[] bytes) {
-        if (bytes == null) {
-            return null;
-        }
-        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-        for (int i = 0; i < bytes.length; i++) {
-            int b = bytes[i];
-            if (b == ESCAPE_CHAR) {
-                try {
-                    if('\r' == (char)bytes[i + 1] &&
-                            '\n' == (char)bytes[i + 2]) {
-                        i += 2;
-                        continue;
-                    }
-                    int u = Character.digit((char) bytes[++i], 16);
-                    int l = Character.digit((char) bytes[++i], 16);
-                    if (u == -1 || l == -1) {
-                        return null;
-                    }
-                    buffer.write((char) ((u << 4) + l));
-                } catch (ArrayIndexOutOfBoundsException e) {
-                    return null;
-                }
-            } else {
-                buffer.write(b);
-            }
-        }
-        return buffer.toByteArray();
-    }
-}
diff --git a/src/android/support/v7/mms/pdu/ReadOrigInd.java b/src/android/support/v7/mms/pdu/ReadOrigInd.java
deleted file mode 100644
index c0e37ee..0000000
--- a/src/android/support/v7/mms/pdu/ReadOrigInd.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-public class ReadOrigInd extends GenericPdu {
-    /**
-     * Empty constructor.
-     * Since the Pdu corresponding to this class is constructed
-     * by the Proxy-Relay server, this class is only instantiated
-     * by the Pdu Parser.
-     *
-     * @throws InvalidHeaderValueException if error occurs.
-     */
-    public ReadOrigInd() throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_READ_ORIG_IND);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    ReadOrigInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get Date value.
-     *
-     * @return the value
-     */
-    public long getDate() {
-        return mPduHeaders.getLongInteger(PduHeaders.DATE);
-    }
-
-    /**
-     * Set Date value.
-     *
-     * @param value the value
-     */
-    public void setDate(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.DATE);
-    }
-
-    /**
-     * Get From value.
-     * From-value = Value-length
-     *      (Address-present-token Encoded-string-value | Insert-address-token)
-     *
-     * @return the value
-     */
-    public EncodedStringValue getFrom() {
-       return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
-    }
-
-    /**
-     * Set From value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setFrom(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
-    }
-
-    /**
-     * Get Message-ID value.
-     *
-     * @return the value
-     */
-    public byte[] getMessageId() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Set Message-ID value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Get X-MMS-Read-status value.
-     *
-     * @return the value
-     */
-    public int getReadStatus() {
-        return mPduHeaders.getOctet(PduHeaders.READ_STATUS);
-    }
-
-    /**
-     * Set X-MMS-Read-status value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setReadStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.READ_STATUS);
-    }
-
-    /**
-     * Get To value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getTo() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
-    }
-
-    /**
-     * Set To value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTo(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     */
-}
diff --git a/src/android/support/v7/mms/pdu/ReadRecInd.java b/src/android/support/v7/mms/pdu/ReadRecInd.java
deleted file mode 100644
index bd0848c..0000000
--- a/src/android/support/v7/mms/pdu/ReadRecInd.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-public class ReadRecInd extends GenericPdu {
-    /**
-     * Constructor, used when composing a M-ReadRec.ind pdu.
-     *
-     * @param from the from value
-     * @param messageId the message ID value
-     * @param mmsVersion current viersion of mms
-     * @param readStatus the read status value
-     * @param to the to value
-     * @throws InvalidHeaderValueException if parameters are invalid.
-     *         NullPointerException if messageId or to is null.
-     */
-    public ReadRecInd(EncodedStringValue from,
-                      byte[] messageId,
-                      int mmsVersion,
-                      int readStatus,
-                      EncodedStringValue[] to) throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_READ_REC_IND);
-        setFrom(from);
-        setMessageId(messageId);
-        setMmsVersion(mmsVersion);
-        setTo(to);
-        setReadStatus(readStatus);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    ReadRecInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get Date value.
-     *
-     * @return the value
-     */
-    public long getDate() {
-        return mPduHeaders.getLongInteger(PduHeaders.DATE);
-    }
-
-    /**
-     * Set Date value.
-     *
-     * @param value the value
-     */
-    public void setDate(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.DATE);
-    }
-
-    /**
-     * Get Message-ID value.
-     *
-     * @return the value
-     */
-    public byte[] getMessageId() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Set Message-ID value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Get To value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getTo() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
-    }
-
-    /**
-     * Set To value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTo(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
-    }
-
-    /**
-     * Get X-MMS-Read-status value.
-     *
-     * @return the value
-     */
-    public int getReadStatus() {
-        return mPduHeaders.getOctet(PduHeaders.READ_STATUS);
-    }
-
-    /**
-     * Set X-MMS-Read-status value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setReadStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.READ_STATUS);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     */
-}
diff --git a/src/android/support/v7/mms/pdu/RetrieveConf.java b/src/android/support/v7/mms/pdu/RetrieveConf.java
deleted file mode 100644
index 4da42eb..0000000
--- a/src/android/support/v7/mms/pdu/RetrieveConf.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-/**
- * M-Retrive.conf Pdu.
- */
-public class RetrieveConf extends MultimediaMessagePdu {
-    /**
-     * Empty constructor.
-     * Since the Pdu corresponding to this class is constructed
-     * by the Proxy-Relay server, this class is only instantiated
-     * by the Pdu Parser.
-     *
-     * @throws InvalidHeaderValueException if error occurs.
-     */
-    public RetrieveConf() throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    RetrieveConf(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Constructor with given headers and body
-     *
-     * @param headers Headers for this PDU.
-     * @param body Body of this PDu.
-     */
-    RetrieveConf(PduHeaders headers, PduBody body) {
-        super(headers, body);
-    }
-
-    /**
-     * Get CC value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getCc() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.CC);
-    }
-
-    /**
-     * Add a "CC" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void addCc(EncodedStringValue value) {
-        mPduHeaders.appendEncodedStringValue(value, PduHeaders.CC);
-    }
-
-    /**
-     * Get Content-type value.
-     *
-     * @return the value
-     */
-    public byte[] getContentType() {
-        return mPduHeaders.getTextString(PduHeaders.CONTENT_TYPE);
-    }
-
-    /**
-     * Set Content-type value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setContentType(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.CONTENT_TYPE);
-    }
-
-    /**
-     * Get X-Mms-Delivery-Report value.
-     *
-     * @return the value
-     */
-    public int getDeliveryReport() {
-        return mPduHeaders.getOctet(PduHeaders.DELIVERY_REPORT);
-    }
-
-    /**
-     * Set X-Mms-Delivery-Report value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setDeliveryReport(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.DELIVERY_REPORT);
-    }
-
-    /**
-     * Get From value.
-     * From-value = Value-length
-     *      (Address-present-token Encoded-string-value | Insert-address-token)
-     *
-     * @return the value
-     */
-    public EncodedStringValue getFrom() {
-       return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
-    }
-
-    /**
-     * Set From value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setFrom(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
-    }
-
-    /**
-     * Get X-Mms-Message-Class value.
-     * Message-class-value = Class-identifier | Token-text
-     * Class-identifier = Personal | Advertisement | Informational | Auto
-     *
-     * @return the value
-     */
-    public byte[] getMessageClass() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Set X-Mms-Message-Class value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageClass(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Get Message-ID value.
-     *
-     * @return the value
-     */
-    public byte[] getMessageId() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Set Message-ID value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Get X-Mms-Read-Report value.
-     *
-     * @return the value
-     */
-    public int getReadReport() {
-        return mPduHeaders.getOctet(PduHeaders.READ_REPORT);
-    }
-
-    /**
-     * Set X-Mms-Read-Report value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setReadReport(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.READ_REPORT);
-    }
-
-    /**
-     * Get X-Mms-Retrieve-Status value.
-     *
-     * @return the value
-     */
-    public int getRetrieveStatus() {
-        return mPduHeaders.getOctet(PduHeaders.RETRIEVE_STATUS);
-    }
-
-    /**
-     * Set X-Mms-Retrieve-Status value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setRetrieveStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.RETRIEVE_STATUS);
-    }
-
-    /**
-     * Get X-Mms-Retrieve-Text value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue getRetrieveText() {
-        return mPduHeaders.getEncodedStringValue(PduHeaders.RETRIEVE_TEXT);
-    }
-
-    /**
-     * Set X-Mms-Retrieve-Text value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setRetrieveText(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.RETRIEVE_TEXT);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id.
-     *
-     * @return the value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTransactionId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte getContentClass() {return 0x00;}
-     *     public void setApplicId(byte value) {}
-     *
-     *     public byte getDrmContent() {return 0x00;}
-     *     public void setDrmContent(byte value) {}
-     *
-     *     public byte getDistributionIndicator() {return 0x00;}
-     *     public void setDistributionIndicator(byte value) {}
-     *
-     *     public PreviouslySentByValue getPreviouslySentBy() {return null;}
-     *     public void setPreviouslySentBy(PreviouslySentByValue value) {}
-     *
-     *     public PreviouslySentDateValue getPreviouslySentDate() {}
-     *     public void setPreviouslySentDate(PreviouslySentDateValue value) {}
-     *
-     *     public MmFlagsValue getMmFlags() {return null;}
-     *     public void setMmFlags(MmFlagsValue value) {}
-     *
-     *     public MmStateValue getMmState() {return null;}
-     *     public void getMmState(MmStateValue value) {}
-     *
-     *     public byte[] getReplaceId() {return 0x00;}
-     *     public void setReplaceId(byte[] value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     *
-     *     public byte getReplyCharging() {return 0x00;}
-     *     public void setReplyCharging(byte value) {}
-     *
-     *     public byte getReplyChargingDeadline() {return 0x00;}
-     *     public void setReplyChargingDeadline(byte value) {}
-     *
-     *     public byte[] getReplyChargingId() {return 0x00;}
-     *     public void setReplyChargingId(byte[] value) {}
-     *
-     *     public long getReplyChargingSize() {return 0;}
-     *     public void setReplyChargingSize(long value) {}
-     */
-}
diff --git a/src/android/support/v7/mms/pdu/SendConf.java b/src/android/support/v7/mms/pdu/SendConf.java
deleted file mode 100644
index 94a9abc..0000000
--- a/src/android/support/v7/mms/pdu/SendConf.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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 androidx.appcompat.mms.pdu;
-
-public class SendConf extends GenericPdu {
-    /**
-     * Empty constructor.
-     * Since the Pdu corresponding to this class is constructed
-     * by the Proxy-Relay server, this class is only instantiated
-     * by the Pdu Parser.
-     *
-     * @throws InvalidHeaderValueException if error occurs.
-     */
-    public SendConf() throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_SEND_CONF);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    SendConf(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get Message-ID value.
-     *
-     * @return the value
-     */
-    public byte[] getMessageId() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Set Message-ID value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Get X-Mms-Response-Status.
-     *
-     * @return the value
-     */
-    public int getResponseStatus() {
-        return mPduHeaders.getOctet(PduHeaders.RESPONSE_STATUS);
-    }
-
-    /**
-     * Set X-Mms-Response-Status.
-     *
-     * @param value the values
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setResponseStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.RESPONSE_STATUS);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id field value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTransactionId(byte[] value) {
-            mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *    public byte[] getContentLocation() {return null;}
-     *    public void setContentLocation(byte[] value) {}
-     *
-     *    public EncodedStringValue getResponseText() {return null;}
-     *    public void setResponseText(EncodedStringValue value) {}
-     *
-     *    public byte getStoreStatus() {return 0x00;}
-     *    public void setStoreStatus(byte value) {}
-     *
-     *    public byte[] getStoreStatusText() {return null;}
-     *    public void setStoreStatusText(byte[] value) {}
-     */
-}
diff --git a/src/android/support/v7/mms/pdu/SendReq.java b/src/android/support/v7/mms/pdu/SendReq.java
deleted file mode 100644
index bf3b32c..0000000
--- a/src/android/support/v7/mms/pdu/SendReq.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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 androidx.appcompat.mms.pdu;
-
-import android.util.Log;
-
-public class SendReq extends MultimediaMessagePdu {
-    private static final String TAG = "SendReq";
-
-    public SendReq() {
-        super();
-
-        try {
-            setMessageType(PduHeaders.MESSAGE_TYPE_SEND_REQ);
-            setMmsVersion(PduHeaders.CURRENT_MMS_VERSION);
-            // FIXME: Content-type must be decided according to whether
-            // SMIL part present.
-            setContentType("application/vnd.wap.multipart.related".getBytes());
-            setFrom(new EncodedStringValue(PduHeaders.FROM_INSERT_ADDRESS_TOKEN_STR.getBytes()));
-            setTransactionId(generateTransactionId());
-        } catch (InvalidHeaderValueException e) {
-            // Impossible to reach here since all headers we set above are valid.
-            Log.e(TAG, "Unexpected InvalidHeaderValueException.", e);
-            throw new RuntimeException(e);
-        }
-    }
-
-    private byte[] generateTransactionId() {
-        String transactionId = "T" + Long.toHexString(System.currentTimeMillis());
-        return transactionId.getBytes();
-    }
-
-    /**
-     * Constructor, used when composing a M-Send.req pdu.
-     *
-     * @param contentType the content type value
-     * @param from the from value
-     * @param mmsVersion current viersion of mms
-     * @param transactionId the transaction-id value
-     * @throws InvalidHeaderValueException if parameters are invalid.
-     *         NullPointerException if contentType, form or transactionId is null.
-     */
-    public SendReq(byte[] contentType,
-                   EncodedStringValue from,
-                   int mmsVersion,
-                   byte[] transactionId) throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_SEND_REQ);
-        setContentType(contentType);
-        setFrom(from);
-        setMmsVersion(mmsVersion);
-        setTransactionId(transactionId);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    SendReq(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Constructor with given headers and body
-     *
-     * @param headers Headers for this PDU.
-     * @param body Body of this PDu.
-     */
-    SendReq(PduHeaders headers, PduBody body) {
-        super(headers, body);
-    }
-
-    /**
-     * Get Bcc value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getBcc() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.BCC);
-    }
-
-    /**
-     * Add a "BCC" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void addBcc(EncodedStringValue value) {
-        mPduHeaders.appendEncodedStringValue(value, PduHeaders.BCC);
-    }
-
-    /**
-     * Set "BCC" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setBcc(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.BCC);
-    }
-
-    /**
-     * Get CC value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getCc() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.CC);
-    }
-
-    /**
-     * Add a "CC" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void addCc(EncodedStringValue value) {
-        mPduHeaders.appendEncodedStringValue(value, PduHeaders.CC);
-    }
-
-    /**
-     * Set "CC" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setCc(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.CC);
-    }
-
-    /**
-     * Get Content-type value.
-     *
-     * @return the value
-     */
-    public byte[] getContentType() {
-        return mPduHeaders.getTextString(PduHeaders.CONTENT_TYPE);
-    }
-
-    /**
-     * Set Content-type value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setContentType(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.CONTENT_TYPE);
-    }
-
-    /**
-     * Get X-Mms-Delivery-Report value.
-     *
-     * @return the value
-     */
-    public int getDeliveryReport() {
-        return mPduHeaders.getOctet(PduHeaders.DELIVERY_REPORT);
-    }
-
-    /**
-     * Set X-Mms-Delivery-Report value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setDeliveryReport(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.DELIVERY_REPORT);
-    }
-
-    /**
-     * Get X-Mms-Expiry value.
-     *
-     * Expiry-value = Value-length
-     *      (Absolute-token Date-value | Relative-token Delta-seconds-value)
-     *
-     * @return the value
-     */
-    public long getExpiry() {
-        return mPduHeaders.getLongInteger(PduHeaders.EXPIRY);
-    }
-
-    /**
-     * Set X-Mms-Expiry value.
-     *
-     * @param value the value
-     */
-    public void setExpiry(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.EXPIRY);
-    }
-
-    /**
-     * Get X-Mms-MessageSize value.
-     *
-     * Expiry-value = size of message
-     *
-     * @return the value
-     */
-    public long getMessageSize() {
-        return mPduHeaders.getLongInteger(PduHeaders.MESSAGE_SIZE);
-    }
-
-    /**
-     * Set X-Mms-MessageSize value.
-     *
-     * @param value the value
-     */
-    public void setMessageSize(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.MESSAGE_SIZE);
-    }
-
-    /**
-     * Get X-Mms-Message-Class value.
-     * Message-class-value = Class-identifier | Token-text
-     * Class-identifier = Personal | Advertisement | Informational | Auto
-     *
-     * @return the value
-     */
-    public byte[] getMessageClass() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Set X-Mms-Message-Class value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageClass(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Get X-Mms-Read-Report value.
-     *
-     * @return the value
-     */
-    public int getReadReport() {
-        return mPduHeaders.getOctet(PduHeaders.READ_REPORT);
-    }
-
-    /**
-     * Set X-Mms-Read-Report value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setReadReport(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.READ_REPORT);
-    }
-
-    /**
-     * Set "To" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTo(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id field value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTransactionId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte getAdaptationAllowed() {return 0};
-     *     public void setAdaptationAllowed(btye value) {};
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte getContentClass() {return 0x00;}
-     *     public void setApplicId(byte value) {}
-     *
-     *     public long getDeliveryTime() {return 0};
-     *     public void setDeliveryTime(long value) {};
-     *
-     *     public byte getDrmContent() {return 0x00;}
-     *     public void setDrmContent(byte value) {}
-     *
-     *     public MmFlagsValue getMmFlags() {return null;}
-     *     public void setMmFlags(MmFlagsValue value) {}
-     *
-     *     public MmStateValue getMmState() {return null;}
-     *     public void getMmState(MmStateValue value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     *
-     *     public byte getReplyCharging() {return 0x00;}
-     *     public void setReplyCharging(byte value) {}
-     *
-     *     public byte getReplyChargingDeadline() {return 0x00;}
-     *     public void setReplyChargingDeadline(byte value) {}
-     *
-     *     public byte[] getReplyChargingId() {return 0x00;}
-     *     public void setReplyChargingId(byte[] value) {}
-     *
-     *     public long getReplyChargingSize() {return 0;}
-     *     public void setReplyChargingSize(long value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     *
-     *     public byte getStore() {return 0x00;}
-     *     public void setStore(byte value) {}
-     */
-}
diff --git a/src/com/android/messaging/BugleApplication.java b/src/com/android/messaging/BugleApplication.java
deleted file mode 100644
index 36f062b..0000000
--- a/src/com/android/messaging/BugleApplication.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging;
-
-import android.app.Application;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.res.Configuration;
-import android.os.Handler;
-import android.os.Looper;
-import androidx.appcompat.mms.CarrierConfigValuesLoader;
-import androidx.appcompat.mms.MmsManager;
-import android.telephony.CarrierConfigManager;
-
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.receiver.SmsReceiver;
-import com.android.messaging.sms.ApnDatabase;
-import com.android.messaging.sms.BugleApnSettingsLoader;
-import com.android.messaging.sms.BugleUserAgentInfoLoader;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.ui.ConversationDrawables;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.BuglePrefsKeys;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.Trace;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.io.File;
-import java.lang.Thread.UncaughtExceptionHandler;
-
-/**
- * The application object
- */
-public class BugleApplication extends Application implements UncaughtExceptionHandler {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private UncaughtExceptionHandler sSystemUncaughtExceptionHandler;
-    private static boolean sRunningTests = false;
-
-    @VisibleForTesting
-    protected static void setTestsRunning() {
-        sRunningTests = true;
-    }
-
-    /**
-     * @return true if we're running unit tests.
-     */
-    public static boolean isRunningTests() {
-        return sRunningTests;
-    }
-
-    @Override
-    public void onCreate() {
-        Trace.beginSection("app.onCreate");
-        super.onCreate();
-
-        // Note onCreate is called in both test and real application environments
-        if (!sRunningTests) {
-            // Only create the factory if not running tests
-            FactoryImpl.register(getApplicationContext(), this);
-        } else {
-            LogUtil.e(TAG, "BugleApplication.onCreate: FactoryImpl.register skipped for test run");
-        }
-
-        sSystemUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
-        Thread.setDefaultUncaughtExceptionHandler(this);
-        Trace.endSection();
-    }
-
-    @Override
-    public void onConfigurationChanged(final Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-
-        // Update conversation drawables when changing writing systems
-        // (Right-To-Left / Left-To-Right)
-        ConversationDrawables.get().updateDrawables();
-    }
-
-    // Called by the "real" factory from FactoryImpl.register() (i.e. not run in tests)
-    public void initializeSync(final Factory factory) {
-        Trace.beginSection("app.initializeSync");
-        final Context context = factory.getApplicationContext();
-        final BugleGservices bugleGservices = factory.getBugleGservices();
-        final BuglePrefs buglePrefs = factory.getApplicationPrefs();
-        final DataModel dataModel = factory.getDataModel();
-        final CarrierConfigValuesLoader carrierConfigValuesLoader =
-                factory.getCarrierConfigValuesLoader();
-
-        maybeStartProfiling();
-
-        BugleApplication.updateAppConfig(context);
-
-        // Initialize MMS lib
-        initMmsLib(context, bugleGservices, carrierConfigValuesLoader);
-        // Initialize APN database
-        ApnDatabase.initializeAppContext(context);
-        // Fixup messages in flight if we crashed and send any pending
-        dataModel.onApplicationCreated();
-        // Register carrier config change receiver
-        if (OsUtil.isAtLeastM()) {
-            registerCarrierConfigChangeReceiver(context);
-        }
-
-        Trace.endSection();
-    }
-
-    private static void registerCarrierConfigChangeReceiver(final Context context) {
-        context.registerReceiver(new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                LogUtil.i(TAG, "Carrier config changed. Reloading MMS config.");
-                MmsConfig.loadAsync();
-            }
-        }, new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED),
-        Context.RECEIVER_EXPORTED/*UNAUDITED*/);
-    }
-
-    private static void initMmsLib(final Context context, final BugleGservices bugleGservices,
-            final CarrierConfigValuesLoader carrierConfigValuesLoader) {
-        MmsManager.setApnSettingsLoader(new BugleApnSettingsLoader(context));
-        MmsManager.setCarrierConfigValuesLoader(carrierConfigValuesLoader);
-        MmsManager.setUserAgentInfoLoader(new BugleUserAgentInfoLoader(context));
-        MmsManager.setUseWakeLock(true);
-        // If Gservices is configured not to use mms api, force MmsManager to always use
-        // legacy mms sending logic
-        MmsManager.setForceLegacyMms(!bugleGservices.getBoolean(
-                BugleGservicesKeys.USE_MMS_API_IF_PRESENT,
-                BugleGservicesKeys.USE_MMS_API_IF_PRESENT_DEFAULT));
-        bugleGservices.registerForChanges(new Runnable() {
-            @Override
-            public void run() {
-                MmsManager.setForceLegacyMms(!bugleGservices.getBoolean(
-                        BugleGservicesKeys.USE_MMS_API_IF_PRESENT,
-                        BugleGservicesKeys.USE_MMS_API_IF_PRESENT_DEFAULT));
-            }
-        });
-    }
-
-    public static void updateAppConfig(final Context context) {
-        // Make sure we set the correct state for the SMS/MMS receivers
-        SmsReceiver.updateSmsReceiveHandler(context);
-    }
-
-    // Called from thread started in FactoryImpl.register() (i.e. not run in tests)
-    public void initializeAsync(final Factory factory) {
-        // Handle shared prefs upgrade & Load MMS Configuration
-        Trace.beginSection("app.initializeAsync");
-        maybeHandleSharedPrefsUpgrade(factory);
-        MmsConfig.load();
-        Trace.endSection();
-    }
-
-    @Override
-    public void onLowMemory() {
-        super.onLowMemory();
-
-        if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "BugleApplication.onLowMemory");
-        }
-        Factory.get().reclaimMemory();
-    }
-
-    @Override
-    public void uncaughtException(final Thread thread, final Throwable ex) {
-        final boolean background = getMainLooper().getThread() != thread;
-        if (background) {
-            LogUtil.e(TAG, "Uncaught exception in background thread " + thread, ex);
-
-            final Handler handler = new Handler(getMainLooper());
-            handler.post(new Runnable() {
-
-                @Override
-                public void run() {
-                    sSystemUncaughtExceptionHandler.uncaughtException(thread, ex);
-                }
-            });
-        } else {
-            sSystemUncaughtExceptionHandler.uncaughtException(thread, ex);
-        }
-    }
-
-    private void maybeStartProfiling() {
-        // App startup profiling support. To use it:
-        //  adb shell setprop log.tag.BugleProfile DEBUG
-        //  #   Start the app, wait for a 30s, download trace file:
-        //  adb pull /data/data/com.android.messaging/cache/startup.trace /tmp
-        //  # Open trace file (using adt/tools/traceview)
-        if (android.util.Log.isLoggable(LogUtil.PROFILE_TAG, android.util.Log.DEBUG)) {
-            // Start method tracing with a big enough buffer and let it run for 30s.
-            // Note we use a logging tag as we don't want to wait for gservices to start up.
-            final File file = DebugUtils.getDebugFile("startup.trace", true);
-            if (file != null) {
-                android.os.Debug.startMethodTracing(file.getAbsolutePath(), 160 * 1024 * 1024);
-                new Handler(Looper.getMainLooper()).postDelayed(
-                       new Runnable() {
-                            @Override
-                            public void run() {
-                                android.os.Debug.stopMethodTracing();
-                                // Allow world to see trace file
-                                DebugUtils.ensureReadable(file);
-                                LogUtil.d(LogUtil.PROFILE_TAG, "Tracing complete - "
-                                     + file.getAbsolutePath());
-                            }
-                        }, 30000);
-            }
-        }
-    }
-
-    private void maybeHandleSharedPrefsUpgrade(final Factory factory) {
-        final int existingVersion = factory.getApplicationPrefs().getInt(
-                BuglePrefsKeys.SHARED_PREFERENCES_VERSION,
-                BuglePrefsKeys.SHARED_PREFERENCES_VERSION_DEFAULT);
-        final int targetVersion = Integer.parseInt(getString(R.string.pref_version));
-        if (targetVersion > existingVersion) {
-            LogUtil.i(LogUtil.BUGLE_TAG, "Upgrading shared prefs from " + existingVersion +
-                    " to " + targetVersion);
-            try {
-                // Perform upgrade on application-wide prefs.
-                factory.getApplicationPrefs().onUpgrade(existingVersion, targetVersion);
-                // Perform upgrade on each subscription's prefs.
-                PhoneUtils.forEachActiveSubscription(new PhoneUtils.SubscriptionRunnable() {
-                    @Override
-                    public void runForSubscription(final int subId) {
-                        factory.getSubscriptionPrefs(subId)
-                                .onUpgrade(existingVersion, targetVersion);
-                    }
-                });
-                factory.getApplicationPrefs().putInt(BuglePrefsKeys.SHARED_PREFERENCES_VERSION,
-                        targetVersion);
-            } catch (final Exception ex) {
-                // Upgrade failed. Don't crash the app because we can always fall back to the
-                // default settings.
-                LogUtil.e(LogUtil.BUGLE_TAG, "Failed to upgrade shared prefs", ex);
-            }
-        } else if (targetVersion < existingVersion) {
-            // We don't care about downgrade since real user shouldn't encounter this, so log it
-            // and ignore any prefs migration.
-            LogUtil.e(LogUtil.BUGLE_TAG, "Shared prefs downgrade requested and ignored. " +
-                    "oldVersion = " + existingVersion + ", newVersion = " + targetVersion);
-        }
-    }
-}
diff --git a/src/com/android/messaging/Factory.java b/src/com/android/messaging/Factory.java
deleted file mode 100644
index c542a54..0000000
--- a/src/com/android/messaging/Factory.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging;
-
-import android.content.Context;
-
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.MemoryCacheManager;
-import com.android.messaging.datamodel.ParticipantRefresh.ContactContentObserver;
-import com.android.messaging.datamodel.media.MediaCacheManager;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.sms.BugleCarrierConfigValuesLoader;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.MediaUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.google.common.annotations.VisibleForTesting;
-
-public abstract class Factory {
-
-    // Making this volatile because on the unit tests, setInstance is called from a unit test
-    // thread, and then it's read on the UI thread.
-    private static volatile Factory sInstance;
-    @VisibleForTesting
-    protected static boolean sRegistered;
-    @VisibleForTesting
-    protected static boolean sInitialized;
-
-    public static Factory get() {
-        return sInstance;
-    }
-
-    protected static void setInstance(final Factory factory) {
-        // Not allowed to call this after real application initialization is complete
-        Assert.isTrue(!sRegistered);
-        Assert.isTrue(!sInitialized);
-        sInstance = factory;
-    }
-    public abstract void onRequiredPermissionsAcquired();
-
-    public abstract Context getApplicationContext();
-    public abstract DataModel getDataModel();
-    public abstract BugleGservices getBugleGservices();
-    public abstract BuglePrefs getApplicationPrefs();
-    public abstract BuglePrefs getSubscriptionPrefs(int subId);
-    public abstract BuglePrefs getWidgetPrefs();
-    public abstract UIIntents getUIIntents();
-    public abstract MemoryCacheManager getMemoryCacheManager();
-    public abstract MediaResourceManager getMediaResourceManager();
-    public abstract MediaCacheManager getMediaCacheManager();
-    public abstract ContactContentObserver getContactContentObserver();
-    public abstract PhoneUtils getPhoneUtils(int subId);
-    public abstract MediaUtil getMediaUtil();
-    public abstract BugleCarrierConfigValuesLoader getCarrierConfigValuesLoader();
-    // Note this needs to run from any thread
-    public abstract void reclaimMemory();
-
-    public abstract void onActivityResume();
-}
diff --git a/src/com/android/messaging/FactoryImpl.java b/src/com/android/messaging/FactoryImpl.java
deleted file mode 100644
index a862308..0000000
--- a/src/com/android/messaging/FactoryImpl.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging;
-
-import android.content.Context;
-import android.os.Process;
-import android.telephony.SmsManager;
-import android.util.SparseArray;
-
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DataModelImpl;
-import com.android.messaging.datamodel.MemoryCacheManager;
-import com.android.messaging.datamodel.ParticipantRefresh.ContactContentObserver;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.media.BugleMediaCacheManager;
-import com.android.messaging.datamodel.media.MediaCacheManager;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.sms.BugleCarrierConfigValuesLoader;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.UIIntentsImpl;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleApplicationPrefs;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesImpl;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.BugleSubscriptionPrefs;
-import com.android.messaging.util.BugleWidgetPrefs;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.MediaUtil;
-import com.android.messaging.util.MediaUtilImpl;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import java.util.concurrent.ConcurrentHashMap;
-
-class FactoryImpl extends Factory {
-    private BugleApplication mApplication;
-    private DataModel mDataModel;
-    private BugleGservices mBugleGservices;
-    private BugleApplicationPrefs mBugleApplicationPrefs;
-    private BugleWidgetPrefs mBugleWidgetPrefs;
-    private Context mApplicationContext;
-    private UIIntents mUIIntents;
-    private MemoryCacheManager mMemoryCacheManager;
-    private MediaResourceManager mMediaResourceManager;
-    private MediaCacheManager mMediaCacheManager;
-    private ContactContentObserver mContactContentObserver;
-    private PhoneUtils mPhoneUtils;
-    private MediaUtil mMediaUtil;
-    private SparseArray<BugleSubscriptionPrefs> mSubscriptionPrefs;
-    private BugleCarrierConfigValuesLoader mCarrierConfigValuesLoader;
-
-    // Cached instance for Pre-L_MR1
-    private static final Object PHONEUTILS_INSTANCE_LOCK = new Object();
-    private static PhoneUtils sPhoneUtilsInstancePreLMR1 = null;
-    // Cached subId->instance for L_MR1 and beyond
-    private static final ConcurrentHashMap<Integer, PhoneUtils> sPhoneUtilsInstanceCacheLMR1 =
-            new ConcurrentHashMap<>();
-
-    private FactoryImpl() {
-    }
-
-    public static Factory register(final Context applicationContext,
-            final BugleApplication application) {
-        // This only gets called once (from BugleApplication.onCreate), but its not called in tests.
-        Assert.isTrue(!sRegistered);
-        Assert.isNull(Factory.get());
-
-        final FactoryImpl factory = new FactoryImpl();
-        Factory.setInstance(factory);
-        sRegistered = true;
-
-        // At this point Factory is published. Services can now get initialized and depend on
-        // Factory.get().
-        factory.mApplication = application;
-        factory.mApplicationContext = applicationContext;
-        factory.mMemoryCacheManager = new MemoryCacheManager();
-        factory.mMediaCacheManager = new BugleMediaCacheManager();
-        factory.mMediaResourceManager = new MediaResourceManager();
-        factory.mBugleGservices = new BugleGservicesImpl(applicationContext);
-        factory.mBugleApplicationPrefs = new BugleApplicationPrefs(applicationContext);
-        factory.mDataModel = new DataModelImpl(applicationContext);
-        factory.mBugleWidgetPrefs = new BugleWidgetPrefs(applicationContext);
-        factory.mUIIntents = new UIIntentsImpl();
-        factory.mContactContentObserver = new ContactContentObserver();
-        factory.mMediaUtil = new MediaUtilImpl();
-        factory.mSubscriptionPrefs = new SparseArray<BugleSubscriptionPrefs>();
-        factory.mCarrierConfigValuesLoader = new BugleCarrierConfigValuesLoader(applicationContext);
-
-        Assert.initializeGservices(factory.mBugleGservices);
-        LogUtil.initializeGservices(factory.mBugleGservices);
-
-        if (OsUtil.hasRequiredPermissions()) {
-            factory.onRequiredPermissionsAcquired();
-        }
-
-        return factory;
-    }
-
-    @Override
-    public void onRequiredPermissionsAcquired() {
-        if (sInitialized) {
-            return;
-        }
-        sInitialized = true;
-
-        mApplication.initializeSync(this);
-
-        final Thread asyncInitialization = new Thread() {
-            @Override
-            public void run() {
-                Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
-                mApplication.initializeAsync(FactoryImpl.this);
-            }
-        };
-        asyncInitialization.start();
-    }
-
-    @Override
-    public Context getApplicationContext() {
-        return mApplicationContext;
-    }
-
-    @Override
-    public DataModel getDataModel() {
-        return mDataModel;
-    }
-
-    @Override
-    public BugleGservices getBugleGservices() {
-        return mBugleGservices;
-    }
-
-    @Override
-    public BuglePrefs getApplicationPrefs() {
-        return mBugleApplicationPrefs;
-    }
-
-    @Override
-    public BuglePrefs getWidgetPrefs() {
-        return mBugleWidgetPrefs;
-    }
-
-    @Override
-    public BuglePrefs getSubscriptionPrefs(int subId) {
-        subId = PhoneUtils.getDefault().getEffectiveSubId(subId);
-        BugleSubscriptionPrefs pref = mSubscriptionPrefs.get(subId);
-        if (pref == null) {
-            synchronized (this) {
-                if ((pref = mSubscriptionPrefs.get(subId)) == null) {
-                    pref = new BugleSubscriptionPrefs(getApplicationContext(), subId);
-                    mSubscriptionPrefs.put(subId, pref);
-                }
-            }
-        }
-        return pref;
-    }
-
-    @Override
-    public UIIntents getUIIntents() {
-        return mUIIntents;
-    }
-
-    @Override
-    public MemoryCacheManager getMemoryCacheManager() {
-        return mMemoryCacheManager;
-    }
-
-    @Override
-    public MediaResourceManager getMediaResourceManager() {
-        return mMediaResourceManager;
-    }
-
-    @Override
-    public MediaCacheManager getMediaCacheManager() {
-        return mMediaCacheManager;
-    }
-
-    @Override
-    public ContactContentObserver getContactContentObserver() {
-        return mContactContentObserver;
-    }
-
-    @Override
-    public PhoneUtils getPhoneUtils(int subId) {
-        if (OsUtil.isAtLeastL_MR1()) {
-            if (subId == ParticipantData.DEFAULT_SELF_SUB_ID) {
-                subId = SmsManager.getDefaultSmsSubscriptionId();
-            }
-            if (subId < 0) {
-                LogUtil.w(LogUtil.BUGLE_TAG, "PhoneUtils.getForLMR1(): invalid subId = " + subId);
-                subId = ParticipantData.DEFAULT_SELF_SUB_ID;
-            }
-            PhoneUtils instance = sPhoneUtilsInstanceCacheLMR1.get(subId);
-            if (instance == null) {
-                instance = new PhoneUtils.PhoneUtilsLMR1(subId);
-                sPhoneUtilsInstanceCacheLMR1.putIfAbsent(subId, instance);
-            }
-            return instance;
-        } else {
-            Assert.isTrue(subId == ParticipantData.DEFAULT_SELF_SUB_ID);
-            if (sPhoneUtilsInstancePreLMR1 == null) {
-                synchronized (PHONEUTILS_INSTANCE_LOCK) {
-                    if (sPhoneUtilsInstancePreLMR1 == null) {
-                        sPhoneUtilsInstancePreLMR1 = new PhoneUtils.PhoneUtilsPreLMR1();
-                    }
-                }
-            }
-            return sPhoneUtilsInstancePreLMR1;
-        }
-    }
-
-    @Override
-    public void reclaimMemory() {
-        mMemoryCacheManager.reclaimMemory();
-    }
-
-    @Override
-    public void onActivityResume() {
-    }
-
-    @Override
-    public MediaUtil getMediaUtil() {
-        return mMediaUtil;
-    }
-
-    @Override
-    public BugleCarrierConfigValuesLoader getCarrierConfigValuesLoader() {
-        return mCarrierConfigValuesLoader;
-    }
-}
diff --git a/src/com/android/messaging/annotation/VisibleForAnimation.java b/src/com/android/messaging/annotation/VisibleForAnimation.java
deleted file mode 100644
index f97d827..0000000
--- a/src/com/android/messaging/annotation/VisibleForAnimation.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.annotation;
-
-/**
- * An annotation for class members that are made visible for Android's ObjectAnimator to work
- * properly through reflection.
- */
-public @interface VisibleForAnimation {
-}
diff --git a/src/com/android/messaging/datamodel/BitmapPool.java b/src/com/android/messaging/datamodel/BitmapPool.java
deleted file mode 100644
index 1a673ba..0000000
--- a/src/com/android/messaging/datamodel/BitmapPool.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import androidx.annotation.NonNull;
-import android.text.TextUtils;
-import android.util.SparseArray;
-
-import com.android.messaging.datamodel.MemoryCacheManager.MemoryCache;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-import java.io.InputStream;
-
-/**
- * Class for creating / loading / reusing bitmaps. This class allow the user to create a new bitmap,
- * reuse an bitmap from the pool and to return a bitmap for future reuse.  The pool of bitmaps
- * allows for faster decode and more efficient memory usage.
- * Note: consumers should not create BitmapPool directly, but instead get the pool they want from
- * the BitmapPoolManager.
- */
-public class BitmapPool implements MemoryCache {
-    public static final int MAX_SUPPORTED_IMAGE_DIMENSION = 0xFFFF;
-
-    protected static final boolean VERBOSE = false;
-
-    /**
-     * Number of reuse failures to skip before reporting.
-     */
-    private static final int FAILED_REPORTING_FREQUENCY = 100;
-
-    /**
-     * Count of reuse failures which have occurred.
-     */
-    private static volatile int sFailedBitmapReuseCount = 0;
-
-    /**
-     * Overall pool data structure which currently only supports rectangular bitmaps. The size of
-     * one of the sides is used to index into the SparseArray.
-     */
-    private final SparseArray<SingleSizePool> mPool;
-    private final Object mPoolLock = new Object();
-    private final String mPoolName;
-    private final int mMaxSize;
-
-    /**
-     * Inner structure which holds a pool of bitmaps all the same size (i.e. all have the same
-     * width as each other and height as each other, but not necessarily the same).
-     */
-    private class SingleSizePool {
-        int mNumItems;
-        final Bitmap[] mBitmaps;
-
-        SingleSizePool(final int maxPoolSize) {
-            mNumItems = 0;
-            mBitmaps = new Bitmap[maxPoolSize];
-        }
-    }
-
-    /**
-     * Creates a pool of reused bitmaps with helper decode methods which will attempt to use the
-     * reclaimed bitmaps. This will help speed up the creation of bitmaps by using already allocated
-     * bitmaps.
-     * @param maxSize The overall max size of the pool. When the pool exceeds this size, all calls
-     * to reclaimBitmap(Bitmap) will result in recycling the bitmap.
-     * @param name Name of the bitmap pool and only used for logging. Can not be null.
-     */
-    BitmapPool(final int maxSize, @NonNull final String name) {
-        Assert.isTrue(maxSize > 0);
-        Assert.isTrue(!TextUtils.isEmpty(name));
-        mPoolName = name;
-        mMaxSize = maxSize;
-        mPool = new SparseArray<SingleSizePool>();
-    }
-
-    @Override
-    public void reclaim() {
-        synchronized (mPoolLock) {
-            for (int p = 0; p < mPool.size(); p++) {
-                final SingleSizePool singleSizePool = mPool.valueAt(p);
-                for (int i = 0; i < singleSizePool.mNumItems; i++) {
-                    singleSizePool.mBitmaps[i].recycle();
-                    singleSizePool.mBitmaps[i] = null;
-                }
-                singleSizePool.mNumItems = 0;
-            }
-            mPool.clear();
-        }
-    }
-
-    /**
-     * Creates a new BitmapFactory.Options.
-     */
-    public static BitmapFactory.Options getBitmapOptionsForPool(final boolean scaled,
-            final int inputDensity, final int targetDensity) {
-        final BitmapFactory.Options options = new BitmapFactory.Options();
-        options.inScaled = scaled;
-        options.inDensity = inputDensity;
-        options.inTargetDensity = targetDensity;
-        options.inSampleSize = 1;
-        options.inJustDecodeBounds = false;
-        options.inMutable = true;
-        return options;
-    }
-
-    /**
-     * @return The pool key for the provided image dimensions or 0 if either width or height is
-     * greater than the max supported image dimension.
-     */
-    private int getPoolKey(final int width, final int height) {
-        if (width > MAX_SUPPORTED_IMAGE_DIMENSION || height > MAX_SUPPORTED_IMAGE_DIMENSION) {
-            return 0;
-        }
-        return (width << 16) | height;
-    }
-
-    /**
-     *
-     * @return A bitmap in the pool with the specified dimensions or null if no bitmap with the
-     * specified dimension is available.
-     */
-    private Bitmap findPoolBitmap(final int width, final int height) {
-        final int poolKey = getPoolKey(width, height);
-        if (poolKey != 0) {
-            synchronized (mPoolLock) {
-                // Take a bitmap from the pool if one is available
-                final SingleSizePool singlePool = mPool.get(poolKey);
-                if (singlePool != null && singlePool.mNumItems > 0) {
-                    singlePool.mNumItems--;
-                    final Bitmap foundBitmap = singlePool.mBitmaps[singlePool.mNumItems];
-                    singlePool.mBitmaps[singlePool.mNumItems] = null;
-                    return foundBitmap;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Internal function to try and find a bitmap in the pool which matches the desired width and
-     * height and then set that in the bitmap options properly.
-     *
-     * TODO: Why do we take a width/height? Shouldn't this already be in the
-     * BitmapFactory.Options instance? Can we assert that they match?
-     * @param optionsTmp The BitmapFactory.Options to update with the bitmap for the system to try
-     * to reuse.
-     * @param width The width of the reusable bitmap.
-     * @param height The height of the reusable bitmap.
-     */
-    private void assignPoolBitmap(final BitmapFactory.Options optionsTmp, final int width,
-            final int height) {
-        if (optionsTmp.inJustDecodeBounds) {
-            return;
-        }
-        optionsTmp.inBitmap = findPoolBitmap(width, height);
-    }
-
-    /**
-     * Load a resource into a bitmap. Uses a bitmap from the pool if possible to reduce memory
-     * turnover.
-     * @param resourceId Resource id to load.
-     * @param resources Application resources. Cannot be null.
-     * @param optionsTmp Should be the same options returned from getBitmapOptionsForPool(). Cannot
-     * be null.
-     * @param width The width of the bitmap.
-     * @param height The height of the bitmap.
-     * @return The decoded Bitmap with the resource drawn in it.
-     */
-    public Bitmap decodeSampledBitmapFromResource(final int resourceId,
-            @NonNull final Resources resources, @NonNull final BitmapFactory.Options optionsTmp,
-            final int width, final int height) {
-        Assert.notNull(resources);
-        Assert.notNull(optionsTmp);
-        Assert.isTrue(width > 0);
-        Assert.isTrue(height > 0);
-        assignPoolBitmap(optionsTmp, width, height);
-        Bitmap b = null;
-        try {
-            b = BitmapFactory.decodeResource(resources, resourceId, optionsTmp);
-        } catch (final IllegalArgumentException e) {
-            // BitmapFactory couldn't decode the file, try again without an inputBufferBitmap.
-            if (optionsTmp.inBitmap != null) {
-                optionsTmp.inBitmap = null;
-                b = BitmapFactory.decodeResource(resources, resourceId, optionsTmp);
-                sFailedBitmapReuseCount++;
-                if (sFailedBitmapReuseCount % FAILED_REPORTING_FREQUENCY == 0) {
-                    LogUtil.w(LogUtil.BUGLE_TAG,
-                            "Pooled bitmap consistently not being reused count = " +
-                            sFailedBitmapReuseCount);
-                }
-            }
-        } catch (final OutOfMemoryError e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Oom decoding resource " + resourceId);
-            reclaim();
-        }
-        return b;
-    }
-
-    /**
-     * Load an input stream into a bitmap. Uses a bitmap from the pool if possible to reduce memory
-     * turnover.
-     * @param inputStream InputStream load. Cannot be null.
-     * @param optionsTmp Should be the same options returned from getBitmapOptionsForPool(). Cannot
-     * be null.
-     * @param width The width of the bitmap.
-     * @param height The height of the bitmap.
-     * @return The decoded Bitmap with the resource drawn in it.
-     */
-    public Bitmap decodeSampledBitmapFromInputStream(@NonNull final InputStream inputStream,
-            @NonNull final BitmapFactory.Options optionsTmp,
-            final int width, final int height) {
-        Assert.notNull(inputStream);
-        Assert.isTrue(width > 0);
-        Assert.isTrue(height > 0);
-        assignPoolBitmap(optionsTmp, width, height);
-        Bitmap b = null;
-        try {
-            b = BitmapFactory.decodeStream(inputStream, null, optionsTmp);
-        } catch (final IllegalArgumentException e) {
-            // BitmapFactory couldn't decode the file, try again without an inputBufferBitmap.
-            if (optionsTmp.inBitmap != null) {
-                optionsTmp.inBitmap = null;
-                b = BitmapFactory.decodeStream(inputStream, null, optionsTmp);
-                sFailedBitmapReuseCount++;
-                if (sFailedBitmapReuseCount % FAILED_REPORTING_FREQUENCY == 0) {
-                    LogUtil.w(LogUtil.BUGLE_TAG,
-                            "Pooled bitmap consistently not being reused count = " +
-                            sFailedBitmapReuseCount);
-                }
-            }
-        } catch (final OutOfMemoryError e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Oom decoding inputStream");
-            reclaim();
-        }
-        return b;
-    }
-
-    /**
-     * Turn encoded bytes into a bitmap. Uses a bitmap from the pool if possible to reduce memory
-     * turnover.
-     * @param bytes Encoded bytes to draw on the bitmap. Cannot be null.
-     * @param optionsTmp The bitmap will set here and the input should be generated from
-     * getBitmapOptionsForPool(). Cannot be null.
-     * @param width The width of the bitmap.
-     * @param height The height of the bitmap.
-     * @return A Bitmap with the encoded bytes drawn in it.
-     */
-    public Bitmap decodeByteArray(@NonNull final byte[] bytes,
-            @NonNull final BitmapFactory.Options optionsTmp, final int width,
-            final int height) throws OutOfMemoryError {
-        Assert.notNull(bytes);
-        Assert.notNull(optionsTmp);
-        Assert.isTrue(width > 0);
-        Assert.isTrue(height > 0);
-        assignPoolBitmap(optionsTmp, width, height);
-        Bitmap b = null;
-        try {
-            b = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, optionsTmp);
-        } catch (final IllegalArgumentException e) {
-            if (VERBOSE) {
-                LogUtil.v(LogUtil.BUGLE_TAG, "BitmapPool(" + mPoolName +
-                        ") Unable to use pool bitmap");
-            }
-            // BitmapFactory couldn't decode the file, try again without an inputBufferBitmap.
-            // (i.e. without the bitmap from the pool)
-            if (optionsTmp.inBitmap != null) {
-                optionsTmp.inBitmap = null;
-                b = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, optionsTmp);
-                sFailedBitmapReuseCount++;
-                if (sFailedBitmapReuseCount % FAILED_REPORTING_FREQUENCY == 0) {
-                    LogUtil.w(LogUtil.BUGLE_TAG,
-                            "Pooled bitmap consistently not being reused count = " +
-                            sFailedBitmapReuseCount);
-                }
-            }
-        }
-        return b;
-    }
-
-    /**
-     * Creates a bitmap with the given size, this will reuse a bitmap in the pool, if one is
-     * available, otherwise this will create a new one.
-     * @param width The desired width of the bitmap.
-     * @param height The desired height of the bitmap.
-     * @return A bitmap with the desired width and height, this maybe a reused bitmap from the pool.
-     */
-    public Bitmap createOrReuseBitmap(final int width, final int height) {
-        Bitmap b = findPoolBitmap(width, height);
-        if (b == null) {
-            b = createBitmap(width, height);
-        }
-        return b;
-    }
-
-    /**
-     * This will create a new bitmap regardless of pool state.
-     * @param width The desired width of the bitmap.
-     * @param height The desired height of the bitmap.
-     * @return A bitmap with the desired width and height.
-     */
-    private Bitmap createBitmap(final int width, final int height) {
-        return Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
-    }
-
-    /**
-     * Called when a bitmap is finished being used so that it can be used for another bitmap in the
-     * future or recycled. Any bitmaps returned should not be used by the caller again.
-     * @param b The bitmap to return to the pool for future usage or recycled. This cannot be null.
-     */
-    public void reclaimBitmap(@NonNull final Bitmap b) {
-        Assert.notNull(b);
-        final int poolKey = getPoolKey(b.getWidth(), b.getHeight());
-        if (poolKey == 0 || !b.isMutable()) {
-            // Unsupported image dimensions or a immutable bitmap.
-            b.recycle();
-            return;
-        }
-        synchronized (mPoolLock) {
-            SingleSizePool singleSizePool = mPool.get(poolKey);
-            if (singleSizePool == null) {
-                singleSizePool = new SingleSizePool(mMaxSize);
-                mPool.append(poolKey, singleSizePool);
-            }
-            if (singleSizePool.mNumItems < singleSizePool.mBitmaps.length) {
-                singleSizePool.mBitmaps[singleSizePool.mNumItems] = b;
-                singleSizePool.mNumItems++;
-            } else {
-                b.recycle();
-            }
-        }
-    }
-
-    /**
-     * @return whether the pool is full for a given width and height.
-     */
-    public boolean isFull(final int width, final int height) {
-        final int poolKey = getPoolKey(width, height);
-        synchronized (mPoolLock) {
-            final SingleSizePool singleSizePool = mPool.get(poolKey);
-            if (singleSizePool != null &&
-                    singleSizePool.mNumItems >= singleSizePool.mBitmaps.length) {
-                return true;
-            }
-            return false;
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/BoundCursorLoader.java b/src/com/android/messaging/datamodel/BoundCursorLoader.java
deleted file mode 100644
index 84d38e6..0000000
--- a/src/com/android/messaging/datamodel/BoundCursorLoader.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.content.CursorLoader;
-import android.net.Uri;
-
-/**
- * Extension to basic cursor loader that has an attached binding id
- */
-public class BoundCursorLoader extends CursorLoader {
-    private final String mBindingId;
-
-    /**
-     * Create cursor loader for associated binding id
-     */
-    public BoundCursorLoader(final String bindingId, final Context context, final Uri uri,
-            final String[] projection, final String selection, final String[] selectionArgs,
-            final String sortOrder) {
-        super(context, uri, projection, selection, selectionArgs, sortOrder);
-        mBindingId = bindingId;
-    }
-
-    /**
-     * Binding id associated with this loader - consume can check to verify data still valid
-     * @return
-     */
-    public String getBindingId() {
-        return mBindingId;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/BugleDatabaseOperations.java b/src/com/android/messaging/datamodel/BugleDatabaseOperations.java
deleted file mode 100644
index c4e5fb8..0000000
--- a/src/com/android/messaging/datamodel/BugleDatabaseOperations.java
+++ /dev/null
@@ -1,1924 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDoneException;
-import android.database.sqlite.SQLiteStatement;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-import androidx.collection.ArrayMap;
-import androidx.collection.SimpleArrayMap;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationParticipantsColumns;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseHelper.PartColumns;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.ParticipantRefresh.ConversationParticipantsQuery;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.UriUtil;
-import com.android.messaging.widget.WidgetConversationProvider;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import javax.annotation.Nullable;
-
-
-/**
- * This class manages updating our local database
- */
-public class BugleDatabaseOperations {
-
-    private static final String TAG = LogUtil.BUGLE_DATABASE_TAG;
-
-    // Global cache of phone numbers -> participant id mapping since this call is expensive.
-    private static final ArrayMap<String, String> sNormalizedPhoneNumberToParticipantIdCache =
-            new ArrayMap<String, String>();
-
-    /**
-     * Convert list of recipient strings (email/phone number) into list of ConversationParticipants
-     *
-     * @param recipients The recipient list
-     * @param refSubId The subId used to normalize phone numbers in the recipients
-     */
-    static ArrayList<ParticipantData> getConversationParticipantsFromRecipients(
-            final List<String> recipients, final int refSubId) {
-        // Generate a list of partially formed participants
-        final ArrayList<ParticipantData> participants = new
-                ArrayList<ParticipantData>();
-
-        if (recipients != null) {
-            for (final String recipient : recipients) {
-                participants.add(ParticipantData.getFromRawPhoneBySimLocale(recipient, refSubId));
-            }
-        }
-        return participants;
-    }
-
-    /**
-     * Sanitize a given list of conversation participants by de-duping and stripping out self
-     * phone number in group conversation.
-     */
-    @DoesNotRunOnMainThread
-    public static void sanitizeConversationParticipants(final List<ParticipantData> participants) {
-        Assert.isNotMainThread();
-        if (participants.size() > 0) {
-            // First remove redundant phone numbers
-            final HashSet<String> recipients = new HashSet<String>();
-            for (int i = participants.size() - 1; i >= 0; i--) {
-                final String recipient = participants.get(i).getNormalizedDestination();
-                if (!recipients.contains(recipient)) {
-                    recipients.add(recipient);
-                } else {
-                    participants.remove(i);
-                }
-            }
-            if (participants.size() > 1) {
-                // Remove self phone number from group conversation.
-                final HashSet<String> selfNumbers =
-                        PhoneUtils.getDefault().getNormalizedSelfNumbers();
-                int removed = 0;
-                // Do this two-pass scan to avoid unnecessary memory allocation.
-                // Prescan to count the self numbers in the list
-                for (final ParticipantData p : participants) {
-                    if (selfNumbers.contains(p.getNormalizedDestination())) {
-                        removed++;
-                    }
-                }
-                // If all are self numbers, maybe that's what the user wants, just leave
-                // the participants as is. Otherwise, do another scan to remove self numbers.
-                if (removed < participants.size()) {
-                    for (int i = participants.size() - 1; i >= 0; i--) {
-                        final String recipient = participants.get(i).getNormalizedDestination();
-                        if (selfNumbers.contains(recipient)) {
-                            participants.remove(i);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Convert list of ConversationParticipants into recipient strings (email/phone number)
-     */
-    @DoesNotRunOnMainThread
-    public static ArrayList<String> getRecipientsFromConversationParticipants(
-            final List<ParticipantData> participants) {
-        Assert.isNotMainThread();
-        // First find the thread id for this list of participants.
-        final ArrayList<String> recipients = new ArrayList<String>();
-
-        for (final ParticipantData participant : participants) {
-            recipients.add(participant.getSendDestination());
-        }
-        return recipients;
-    }
-
-    /**
-     * Get or create a conversation based on the message's thread id
-     *
-     * NOTE: There are phones on which you can't get the recipients from the thread id for SMS
-     * until you have a message, so use getOrCreateConversationFromRecipient instead.
-     *
-     * TODO: Should this be in MMS/SMS code?
-     *
-     * @param db the database
-     * @param threadId The message's thread
-     * @param senderBlocked Flag whether sender of message is in blocked people list
-     * @param refSubId The reference subId for canonicalize phone numbers
-     * @return conversationId
-     */
-    @DoesNotRunOnMainThread
-    public static String getOrCreateConversationFromThreadId(final DatabaseWrapper db,
-            final long threadId, final boolean senderBlocked, final int refSubId) {
-        Assert.isNotMainThread();
-        final List<String> recipients = MmsUtils.getRecipientsByThread(threadId);
-        final ArrayList<ParticipantData> participants =
-                getConversationParticipantsFromRecipients(recipients, refSubId);
-
-        return getOrCreateConversation(db, threadId, senderBlocked, participants, false, false,
-                null);
-    }
-
-    /**
-     * Get or create a conversation based on provided recipient
-     *
-     * @param db the database
-     * @param threadId The message's thread
-     * @param senderBlocked Flag whether sender of message is in blocked people list
-     * @param recipient recipient for thread
-     * @return conversationId
-     */
-    @DoesNotRunOnMainThread
-    public static String getOrCreateConversationFromRecipient(final DatabaseWrapper db,
-            final long threadId, final boolean senderBlocked, final ParticipantData recipient) {
-        Assert.isNotMainThread();
-        final ArrayList<ParticipantData> recipients = new ArrayList<>(1);
-        recipients.add(recipient);
-        return getOrCreateConversation(db, threadId, senderBlocked, recipients, false, false, null);
-    }
-
-    /**
-     * Get or create a conversation based on provided participants
-     *
-     * @param db the database
-     * @param threadId The message's thread
-     * @param archived Flag whether the conversation should be created archived
-     * @param participants list of conversation participants
-     * @param noNotification If notification should be disabled
-     * @param noVibrate If vibrate on notification should be disabled
-     * @param soundUri If there is custom sound URI
-     * @return a conversation id
-     */
-    @DoesNotRunOnMainThread
-    public static String getOrCreateConversation(final DatabaseWrapper db, final long threadId,
-            final boolean archived, final ArrayList<ParticipantData> participants,
-            boolean noNotification, boolean noVibrate, String soundUri) {
-        Assert.isNotMainThread();
-
-        // Check to see if this conversation is already in out local db cache
-        String conversationId = BugleDatabaseOperations.getExistingConversation(db, threadId,
-                false);
-
-        if (conversationId == null) {
-            final String conversationName = ConversationListItemData.generateConversationName(
-                    participants);
-
-            // Create the conversation with the default self participant which always maps to
-            // the system default subscription.
-            final ParticipantData self = ParticipantData.getSelfParticipant(
-                    ParticipantData.DEFAULT_SELF_SUB_ID);
-
-            db.beginTransaction();
-            try {
-                // Look up the "self" participantId (creating if necessary)
-                final String selfId =
-                        BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, self);
-                // Create a new conversation
-                conversationId = BugleDatabaseOperations.createConversationInTransaction(
-                        db, threadId, conversationName, selfId, participants, archived,
-                        noNotification, noVibrate, soundUri);
-                db.setTransactionSuccessful();
-            } finally {
-                db.endTransaction();
-            }
-        }
-
-        return conversationId;
-    }
-
-    /**
-     * Get a conversation from the local DB based on the message's thread id.
-     *
-     * @param dbWrapper     The database
-     * @param threadId      The message's thread in the SMS database
-     * @param senderBlocked Flag whether sender of message is in blocked people list
-     * @return The existing conversation id or null
-     */
-    @VisibleForTesting
-    @DoesNotRunOnMainThread
-    public static String getExistingConversation(final DatabaseWrapper dbWrapper,
-            final long threadId, final boolean senderBlocked) {
-        Assert.isNotMainThread();
-        String conversationId = null;
-
-        Cursor cursor = null;
-        try {
-            // Look for an existing conversation in the db with this thread id
-            cursor = dbWrapper.rawQuery("SELECT " + ConversationColumns._ID
-                            + " FROM " + DatabaseHelper.CONVERSATIONS_TABLE
-                            + " WHERE " + ConversationColumns.SMS_THREAD_ID + "=" + threadId,
-                    null);
-
-            if (cursor.moveToFirst()) {
-                Assert.isTrue(cursor.getCount() == 1);
-                conversationId = cursor.getString(0);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        return conversationId;
-    }
-
-    /**
-     * Get the thread id for an existing conversation from the local DB.
-     *
-     * @param dbWrapper The database
-     * @param conversationId The conversation to look up thread for
-     * @return The thread id. Returns -1 if the conversation was not found or if it was found
-     * but the thread column was NULL.
-     */
-    @DoesNotRunOnMainThread
-    public static long getThreadId(final DatabaseWrapper dbWrapper, final String conversationId) {
-        Assert.isNotMainThread();
-        long threadId = -1;
-
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.CONVERSATIONS_TABLE,
-                    new String[] { ConversationColumns.SMS_THREAD_ID },
-                    ConversationColumns._ID + " =?",
-                    new String[] { conversationId },
-                    null, null, null);
-
-            if (cursor.moveToFirst()) {
-                Assert.isTrue(cursor.getCount() == 1);
-                if (!cursor.isNull(0)) {
-                    threadId = cursor.getLong(0);
-                }
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        return threadId;
-    }
-
-    @DoesNotRunOnMainThread
-    public static boolean isBlockedDestination(final DatabaseWrapper db, final String destination) {
-        Assert.isNotMainThread();
-        return isBlockedParticipant(db, destination, ParticipantColumns.NORMALIZED_DESTINATION);
-    }
-
-    static boolean isBlockedParticipant(final DatabaseWrapper db, final String participantId) {
-        return isBlockedParticipant(db, participantId, ParticipantColumns._ID);
-    }
-
-    static boolean isBlockedParticipant(final DatabaseWrapper db, final String value,
-            final String column) {
-        Cursor cursor = null;
-        try {
-            cursor = db.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                    new String[] { ParticipantColumns.BLOCKED },
-                    column + "=? AND " + ParticipantColumns.SUB_ID + "=?",
-                    new String[] { value,
-                    Integer.toString(ParticipantData.OTHER_THAN_SELF_SUB_ID) },
-                    null, null, null);
-
-            Assert.inRange(cursor.getCount(), 0, 1);
-            if (cursor.moveToFirst()) {
-                return cursor.getInt(0) == 1;
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return false;  // if there's no row, it's not blocked :-)
-    }
-
-    /**
-     * Create a conversation in the local DB based on the message's thread id.
-     *
-     * It's up to the caller to make sure that this is all inside a transaction.  It will return
-     * null if it's not in the local DB.
-     *
-     * @param dbWrapper     The database
-     * @param threadId      The message's thread
-     * @param selfId        The selfId to make default for this conversation
-     * @param archived      Flag whether the conversation should be created archived
-     * @param noNotification If notification should be disabled
-     * @param noVibrate     If vibrate on notification should be disabled
-     * @param soundUri      The customized sound
-     * @return The existing conversation id or new conversation id
-     */
-    static String createConversationInTransaction(final DatabaseWrapper dbWrapper,
-            final long threadId, final String conversationName, final String selfId,
-            final List<ParticipantData> participants, final boolean archived,
-            boolean noNotification, boolean noVibrate, String soundUri) {
-        // We want conversation and participant creation to be atomic
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-        boolean hasEmailAddress = false;
-        for (final ParticipantData participant : participants) {
-            Assert.isTrue(!participant.isSelf());
-            if (participant.isEmail()) {
-                hasEmailAddress = true;
-            }
-        }
-
-        // TODO : Conversations state - normal vs. archived
-
-        // Insert a new local conversation for this thread id
-        final ContentValues values = new ContentValues();
-        values.put(ConversationColumns.SMS_THREAD_ID, threadId);
-        // Start with conversation hidden - sending a message or saving a draft will change that
-        values.put(ConversationColumns.SORT_TIMESTAMP, 0L);
-        values.put(ConversationColumns.CURRENT_SELF_ID, selfId);
-        values.put(ConversationColumns.PARTICIPANT_COUNT, participants.size());
-        values.put(ConversationColumns.INCLUDE_EMAIL_ADDRESS, (hasEmailAddress ? 1 : 0));
-        if (archived) {
-            values.put(ConversationColumns.ARCHIVE_STATUS, 1);
-        }
-        if (noNotification) {
-            values.put(ConversationColumns.NOTIFICATION_ENABLED, 0);
-        }
-        if (noVibrate) {
-            values.put(ConversationColumns.NOTIFICATION_VIBRATION, 0);
-        }
-        if (!TextUtils.isEmpty(soundUri)) {
-            values.put(ConversationColumns.NOTIFICATION_SOUND_URI, soundUri);
-        }
-
-        fillParticipantData(values, participants);
-
-        final long conversationRowId = dbWrapper.insert(DatabaseHelper.CONVERSATIONS_TABLE, null,
-                values);
-
-        Assert.isTrue(conversationRowId != -1);
-        if (conversationRowId == -1) {
-            LogUtil.e(TAG, "BugleDatabaseOperations : failed to insert conversation into table");
-            return null;
-        }
-
-        final String conversationId = Long.toString(conversationRowId);
-
-        // Make sure that participants are added for this conversation
-        for (final ParticipantData participant : participants) {
-            // TODO: Use blocking information
-            addParticipantToConversation(dbWrapper, participant, conversationId);
-        }
-
-        // Now fully resolved participants available can update conversation name / avatar.
-        // b/16437575: We cannot use the participants directly, but instead have to call
-        // getParticipantsForConversation() to retrieve the actual participants. This is needed
-        // because the call to addParticipantToConversation() won't fill up the ParticipantData
-        // if the participant already exists in the participant table. For example, say you have
-        // an existing conversation with John. Now if you create a new group conversation with
-        // Jeff & John with only their phone numbers, then when we try to add John's number to the
-        // group conversation, we see that he's already in the participant table, therefore we
-        // short-circuit any steps to actually fill out the ParticipantData for John other than
-        // just returning his participant id. Eventually, the ParticipantData we have is still the
-        // raw data with just the phone number. getParticipantsForConversation(), on the other
-        // hand, will fill out all the info for each participant from the participants table.
-        updateConversationNameAndAvatarInTransaction(dbWrapper, conversationId,
-                getParticipantsForConversation(dbWrapper, conversationId));
-
-        return conversationId;
-    }
-
-    private static void fillParticipantData(final ContentValues values,
-            final List<ParticipantData> participants) {
-        if (participants != null && !participants.isEmpty()) {
-            final Uri avatarUri = AvatarUriUtil.createAvatarUri(participants);
-            values.put(ConversationColumns.ICON, avatarUri.toString());
-
-            long contactId;
-            String lookupKey;
-            String destination;
-            if (participants.size() == 1) {
-                final ParticipantData firstParticipant = participants.get(0);
-                contactId = firstParticipant.getContactId();
-                lookupKey = firstParticipant.getLookupKey();
-                destination = firstParticipant.getNormalizedDestination();
-            } else {
-                contactId = 0;
-                lookupKey = null;
-                destination = null;
-            }
-
-            values.put(ConversationColumns.PARTICIPANT_CONTACT_ID, contactId);
-            values.put(ConversationColumns.PARTICIPANT_LOOKUP_KEY, lookupKey);
-            values.put(ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION, destination);
-        }
-    }
-
-    /**
-     * Delete conversation and associated messages/parts
-     */
-    @DoesNotRunOnMainThread
-    public static boolean deleteConversation(final DatabaseWrapper dbWrapper,
-            final String conversationId, final long cutoffTimestamp) {
-        Assert.isNotMainThread();
-        dbWrapper.beginTransaction();
-        boolean conversationDeleted = false;
-        boolean conversationMessagesDeleted = false;
-        try {
-            // Delete existing messages
-            if (cutoffTimestamp == Long.MAX_VALUE) {
-                // Delete parts and messages
-                dbWrapper.delete(DatabaseHelper.MESSAGES_TABLE,
-                        MessageColumns.CONVERSATION_ID + "=?", new String[] { conversationId });
-                conversationMessagesDeleted = true;
-            } else {
-                // Delete all messages prior to the cutoff
-                dbWrapper.delete(DatabaseHelper.MESSAGES_TABLE,
-                        MessageColumns.CONVERSATION_ID + "=? AND "
-                                + MessageColumns.RECEIVED_TIMESTAMP + "<=?",
-                                new String[] { conversationId, Long.toString(cutoffTimestamp) });
-
-                // Delete any draft message. The delete above may not always include the draft,
-                // because under certain scenarios (e.g. sending messages in progress), the draft
-                // timestamp can be larger than the cutoff time, which is generally the conversation
-                // sort timestamp. Because of how the sms/mms provider works on some newer
-                // devices, it's important that we never delete all the messages in a conversation
-                // without also deleting the conversation itself (see b/20262204 for details).
-                dbWrapper.delete(DatabaseHelper.MESSAGES_TABLE,
-                        MessageColumns.STATUS + "=? AND " + MessageColumns.CONVERSATION_ID + "=?",
-                        new String[] {
-                            Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_DRAFT),
-                            conversationId
-                        });
-
-                // Check to see if there are any messages left in the conversation
-                final long count = dbWrapper.queryNumEntries(DatabaseHelper.MESSAGES_TABLE,
-                        MessageColumns.CONVERSATION_ID + "=?", new String[] { conversationId });
-                conversationMessagesDeleted = (count == 0);
-
-                // Log detail information if there are still messages left in the conversation
-                if (!conversationMessagesDeleted) {
-                    final long maxTimestamp =
-                            getConversationMaxTimestamp(dbWrapper, conversationId);
-                    LogUtil.w(TAG, "BugleDatabaseOperations:"
-                            + " cannot delete all messages in a conversation"
-                            + ", after deletion: count=" + count
-                            + ", max timestamp=" + maxTimestamp
-                            + ", cutoff timestamp=" + cutoffTimestamp);
-                }
-            }
-
-            if (conversationMessagesDeleted) {
-                // Delete conversation row
-                final int count = dbWrapper.delete(DatabaseHelper.CONVERSATIONS_TABLE,
-                        ConversationColumns._ID + "=?", new String[] { conversationId });
-                conversationDeleted = (count > 0);
-            }
-            dbWrapper.setTransactionSuccessful();
-        } finally {
-            dbWrapper.endTransaction();
-        }
-        return conversationDeleted;
-    }
-
-    private static final String MAX_RECEIVED_TIMESTAMP =
-            "MAX(" + MessageColumns.RECEIVED_TIMESTAMP + ")";
-    /**
-     * Get the max received timestamp of a conversation's messages
-     */
-    private static long getConversationMaxTimestamp(final DatabaseWrapper dbWrapper,
-            final String conversationId) {
-        final Cursor cursor = dbWrapper.query(
-                DatabaseHelper.MESSAGES_TABLE,
-                new String[]{ MAX_RECEIVED_TIMESTAMP },
-                MessageColumns.CONVERSATION_ID + "=?",
-                new String[]{ conversationId },
-                null, null, null);
-        if (cursor != null) {
-            try {
-                if (cursor.moveToFirst()) {
-                    return cursor.getLong(0);
-                }
-            } finally {
-                cursor.close();
-            }
-        }
-        return 0;
-    }
-
-    @DoesNotRunOnMainThread
-    public static void updateConversationMetadataInTransaction(final DatabaseWrapper dbWrapper,
-            final String conversationId, final String messageId, final long latestTimestamp,
-            final boolean keepArchived, final String smsServiceCenter,
-            final boolean shouldAutoSwitchSelfId) {
-        Assert.isNotMainThread();
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-
-        final ContentValues values = new ContentValues();
-        values.put(ConversationColumns.LATEST_MESSAGE_ID, messageId);
-        values.put(ConversationColumns.SORT_TIMESTAMP, latestTimestamp);
-        if (!TextUtils.isEmpty(smsServiceCenter)) {
-            values.put(ConversationColumns.SMS_SERVICE_CENTER, smsServiceCenter);
-        }
-
-        // When the conversation gets updated with new messages, unarchive the conversation unless
-        // the sender is blocked, or we have been told to keep it archived.
-        if (!keepArchived) {
-            values.put(ConversationColumns.ARCHIVE_STATUS, 0);
-        }
-
-        final MessageData message = readMessage(dbWrapper, messageId);
-        addSnippetTextAndPreviewToContentValues(message, false /* showDraft */, values);
-
-        if (shouldAutoSwitchSelfId) {
-            addSelfIdAutoSwitchInfoToContentValues(dbWrapper, message, conversationId, values);
-        }
-
-        // Conversation always exists as this method is called from ActionService only after
-        // reading and if necessary creating the conversation.
-        updateConversationRow(dbWrapper, conversationId, values);
-
-        if (shouldAutoSwitchSelfId && OsUtil.isAtLeastL_MR1()) {
-            // Normally, the draft message compose UI trusts its UI state for providing up-to-date
-            // conversation self id. Therefore, notify UI through local broadcast receiver about
-            // this external change so the change can be properly reflected.
-            UIIntents.get().broadcastConversationSelfIdChange(dbWrapper.getContext(),
-                    conversationId, getConversationSelfId(dbWrapper, conversationId));
-        }
-    }
-
-    @DoesNotRunOnMainThread
-    public static void updateConversationMetadataInTransaction(final DatabaseWrapper db,
-            final String conversationId, final String messageId, final long latestTimestamp,
-            final boolean keepArchived, final boolean shouldAutoSwitchSelfId) {
-        Assert.isNotMainThread();
-        updateConversationMetadataInTransaction(
-                db, conversationId, messageId, latestTimestamp, keepArchived, null,
-                shouldAutoSwitchSelfId);
-    }
-
-    @DoesNotRunOnMainThread
-    public static void updateConversationArchiveStatusInTransaction(final DatabaseWrapper dbWrapper,
-            final String conversationId, final boolean isArchived) {
-        Assert.isNotMainThread();
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-        final ContentValues values = new ContentValues();
-        values.put(ConversationColumns.ARCHIVE_STATUS, isArchived ? 1 : 0);
-        updateConversationRowIfExists(dbWrapper, conversationId, values);
-    }
-
-    static void addSnippetTextAndPreviewToContentValues(final MessageData message,
-            final boolean showDraft, final ContentValues values) {
-        values.put(ConversationColumns.SHOW_DRAFT, showDraft ? 1 : 0);
-        values.put(ConversationColumns.SNIPPET_TEXT, message.getMessageText());
-        values.put(ConversationColumns.SUBJECT_TEXT, message.getMmsSubject());
-
-        String type = null;
-        String uriString = null;
-        for (final MessagePartData part : message.getParts()) {
-            if (part.isAttachment() &&
-                    ContentType.isConversationListPreviewableType(part.getContentType())) {
-                uriString = part.getContentUri().toString();
-                type = part.getContentType();
-                break;
-            }
-        }
-        values.put(ConversationColumns.PREVIEW_CONTENT_TYPE, type);
-        values.put(ConversationColumns.PREVIEW_URI, uriString);
-    }
-
-    /**
-     * Adds self-id auto switch info for a conversation if the last message has a different
-     * subscription than the conversation's.
-     * @return true if self id will need to be changed, false otherwise.
-     */
-    static boolean addSelfIdAutoSwitchInfoToContentValues(final DatabaseWrapper dbWrapper,
-            final MessageData message, final String conversationId, final ContentValues values) {
-        // Only auto switch conversation self for incoming messages.
-        if (!OsUtil.isAtLeastL_MR1() || !message.getIsIncoming()) {
-            return false;
-        }
-
-        final String conversationSelfId = getConversationSelfId(dbWrapper, conversationId);
-        final String messageSelfId = message.getSelfId();
-
-        if (conversationSelfId == null || messageSelfId == null) {
-            return false;
-        }
-
-        // Get the sub IDs in effect for both the message and the conversation and compare them:
-        // 1. If message is unbound (using default sub id), then the message was sent with
-        //    pre-MSIM support. Don't auto-switch because we don't know the subscription for the
-        //    message.
-        // 2. If message is bound,
-        //    i. If conversation is unbound, use the system default sub id as its effective sub.
-        //    ii. If conversation is bound, use its subscription directly.
-        //    Compare the message sub id with the conversation's effective sub id. If they are
-        //    different, auto-switch the conversation to the message's sub.
-        final ParticipantData conversationSelf = getExistingParticipant(dbWrapper,
-                conversationSelfId);
-        final ParticipantData messageSelf = getExistingParticipant(dbWrapper, messageSelfId);
-        if (!messageSelf.isActiveSubscription()) {
-            // Don't switch if the message subscription is no longer active.
-            return false;
-        }
-        final int messageSubId = messageSelf.getSubId();
-        if (messageSubId == ParticipantData.DEFAULT_SELF_SUB_ID) {
-            return false;
-        }
-
-        final int conversationEffectiveSubId =
-                PhoneUtils.getDefault().getEffectiveSubId(conversationSelf.getSubId());
-
-        if (conversationEffectiveSubId != messageSubId) {
-            return addConversationSelfIdToContentValues(dbWrapper, messageSelf.getId(), values);
-        }
-        return false;
-    }
-
-    /**
-     * Adds conversation self id updates to ContentValues given. This performs check on the selfId
-     * to ensure it's valid and active.
-     * @return true if self id will need to be changed, false otherwise.
-     */
-    static boolean addConversationSelfIdToContentValues(final DatabaseWrapper dbWrapper,
-            final String selfId, final ContentValues values) {
-        // Make sure the selfId passed in is valid and active.
-        final String selection = ParticipantColumns._ID + "=? AND " +
-                ParticipantColumns.SIM_SLOT_ID + "<>?";
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                    new String[] { ParticipantColumns._ID }, selection,
-                    new String[] { selfId, String.valueOf(ParticipantData.INVALID_SLOT_ID) },
-                    null, null, null);
-
-            if (cursor != null && cursor.getCount() > 0) {
-                values.put(ConversationColumns.CURRENT_SELF_ID, selfId);
-                return true;
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return false;
-    }
-
-    private static void updateConversationDraftSnippetAndPreviewInTransaction(
-            final DatabaseWrapper dbWrapper, final String conversationId,
-            final MessageData draftMessage) {
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-
-        long sortTimestamp = 0L;
-        Cursor cursor = null;
-        try {
-            // Check to find the latest message in the conversation
-            cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
-                    REFRESH_CONVERSATION_MESSAGE_PROJECTION,
-                    MessageColumns.CONVERSATION_ID + "=?",
-                    new String[]{conversationId}, null, null,
-                    MessageColumns.RECEIVED_TIMESTAMP + " DESC", "1" /* limit */);
-
-            if (cursor.moveToFirst()) {
-                sortTimestamp = cursor.getLong(1);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-
-        final ContentValues values = new ContentValues();
-        if (draftMessage == null || !draftMessage.hasContent()) {
-            values.put(ConversationColumns.SHOW_DRAFT, 0);
-            values.put(ConversationColumns.DRAFT_SNIPPET_TEXT, "");
-            values.put(ConversationColumns.DRAFT_SUBJECT_TEXT, "");
-            values.put(ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE, "");
-            values.put(ConversationColumns.DRAFT_PREVIEW_URI, "");
-        } else {
-            sortTimestamp = Math.max(sortTimestamp, draftMessage.getReceivedTimeStamp());
-            values.put(ConversationColumns.SHOW_DRAFT, 1);
-            values.put(ConversationColumns.DRAFT_SNIPPET_TEXT, draftMessage.getMessageText());
-            values.put(ConversationColumns.DRAFT_SUBJECT_TEXT, draftMessage.getMmsSubject());
-            String type = null;
-            String uriString = null;
-            for (final MessagePartData part : draftMessage.getParts()) {
-                if (part.isAttachment() &&
-                        ContentType.isConversationListPreviewableType(part.getContentType())) {
-                    uriString = part.getContentUri().toString();
-                    type = part.getContentType();
-                    break;
-                }
-            }
-            values.put(ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE, type);
-            values.put(ConversationColumns.DRAFT_PREVIEW_URI, uriString);
-        }
-        values.put(ConversationColumns.SORT_TIMESTAMP, sortTimestamp);
-        // Called in transaction after reading conversation row
-        updateConversationRow(dbWrapper, conversationId, values);
-    }
-
-    @DoesNotRunOnMainThread
-    public static boolean updateConversationRowIfExists(final DatabaseWrapper dbWrapper,
-            final String conversationId, final ContentValues values) {
-        Assert.isNotMainThread();
-        return updateRowIfExists(dbWrapper, DatabaseHelper.CONVERSATIONS_TABLE,
-                ConversationColumns._ID, conversationId, values);
-    }
-
-    @DoesNotRunOnMainThread
-    public static void updateConversationRow(final DatabaseWrapper dbWrapper,
-            final String conversationId, final ContentValues values) {
-        Assert.isNotMainThread();
-        final boolean exists = updateConversationRowIfExists(dbWrapper, conversationId, values);
-        Assert.isTrue(exists);
-    }
-
-    @DoesNotRunOnMainThread
-    public static boolean updateMessageRowIfExists(final DatabaseWrapper dbWrapper,
-            final String messageId, final ContentValues values) {
-        Assert.isNotMainThread();
-        return updateRowIfExists(dbWrapper, DatabaseHelper.MESSAGES_TABLE, MessageColumns._ID,
-                messageId, values);
-    }
-
-    @DoesNotRunOnMainThread
-    public static void updateMessageRow(final DatabaseWrapper dbWrapper,
-            final String messageId, final ContentValues values) {
-        Assert.isNotMainThread();
-        final boolean exists = updateMessageRowIfExists(dbWrapper, messageId, values);
-        Assert.isTrue(exists);
-    }
-
-    @DoesNotRunOnMainThread
-    public static boolean updatePartRowIfExists(final DatabaseWrapper dbWrapper,
-            final String partId, final ContentValues values) {
-        Assert.isNotMainThread();
-        return updateRowIfExists(dbWrapper, DatabaseHelper.PARTS_TABLE, PartColumns._ID,
-                partId, values);
-    }
-
-    /**
-     * Returns the default conversation name based on its participants.
-     */
-    private static String getDefaultConversationName(final List<ParticipantData> participants) {
-        return ConversationListItemData.generateConversationName(participants);
-    }
-
-    /**
-     * Updates a given conversation's name based on its participants.
-     */
-    @DoesNotRunOnMainThread
-    public static void updateConversationNameAndAvatarInTransaction(
-            final DatabaseWrapper dbWrapper, final String conversationId) {
-        Assert.isNotMainThread();
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-
-        final ArrayList<ParticipantData> participants =
-                getParticipantsForConversation(dbWrapper, conversationId);
-        updateConversationNameAndAvatarInTransaction(dbWrapper, conversationId, participants);
-    }
-
-    /**
-     * Updates a given conversation's name based on its participants.
-     */
-    private static void updateConversationNameAndAvatarInTransaction(
-            final DatabaseWrapper dbWrapper, final String conversationId,
-            final List<ParticipantData> participants) {
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-
-        final ContentValues values = new ContentValues();
-        values.put(ConversationColumns.NAME,
-                getDefaultConversationName(participants));
-
-        // Fill in IS_ENTERPRISE.
-        final boolean hasAnyEnterpriseContact =
-                ConversationListItemData.hasAnyEnterpriseContact(participants);
-        values.put(ConversationColumns.IS_ENTERPRISE, hasAnyEnterpriseContact);
-
-        fillParticipantData(values, participants);
-
-        // Used by background thread when refreshing conversation so conversation could be deleted.
-        updateConversationRowIfExists(dbWrapper, conversationId, values);
-
-        WidgetConversationProvider.notifyConversationRenamed(Factory.get().getApplicationContext(),
-                conversationId);
-    }
-
-    /**
-     * Updates a given conversation's self id.
-     */
-    @DoesNotRunOnMainThread
-    public static void updateConversationSelfIdInTransaction(
-            final DatabaseWrapper dbWrapper, final String conversationId, final String selfId) {
-        Assert.isNotMainThread();
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-        final ContentValues values = new ContentValues();
-        if (addConversationSelfIdToContentValues(dbWrapper, selfId, values)) {
-            updateConversationRowIfExists(dbWrapper, conversationId, values);
-        }
-    }
-
-    @DoesNotRunOnMainThread
-    public static String getConversationSelfId(final DatabaseWrapper dbWrapper,
-            final String conversationId) {
-        Assert.isNotMainThread();
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.CONVERSATIONS_TABLE,
-                    new String[] { ConversationColumns.CURRENT_SELF_ID },
-                    ConversationColumns._ID + "=?",
-                    new String[] { conversationId },
-                    null, null, null);
-            Assert.inRange(cursor.getCount(), 0, 1);
-            if (cursor.moveToFirst()) {
-                return cursor.getString(0);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Frees up memory associated with phone number to participant id matching.
-     */
-    @DoesNotRunOnMainThread
-    public static void clearParticipantIdCache() {
-        Assert.isNotMainThread();
-        synchronized (sNormalizedPhoneNumberToParticipantIdCache) {
-            sNormalizedPhoneNumberToParticipantIdCache.clear();
-        }
-    }
-
-    @DoesNotRunOnMainThread
-    public static ArrayList<String> getRecipientsForConversation(final DatabaseWrapper dbWrapper,
-            final String conversationId) {
-        Assert.isNotMainThread();
-        final ArrayList<ParticipantData> participants =
-                getParticipantsForConversation(dbWrapper, conversationId);
-
-        final ArrayList<String> recipients = new ArrayList<String>();
-        for (final ParticipantData participant : participants) {
-            recipients.add(participant.getSendDestination());
-        }
-
-        return recipients;
-    }
-
-    @DoesNotRunOnMainThread
-    public static String getSmsServiceCenterForConversation(final DatabaseWrapper dbWrapper,
-            final String conversationId) {
-        Assert.isNotMainThread();
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.CONVERSATIONS_TABLE,
-                    new String[] { ConversationColumns.SMS_SERVICE_CENTER },
-                    ConversationColumns._ID + "=?",
-                    new String[] { conversationId },
-                    null, null, null);
-            Assert.inRange(cursor.getCount(), 0, 1);
-            if (cursor.moveToFirst()) {
-                return cursor.getString(0);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return null;
-    }
-
-    @DoesNotRunOnMainThread
-    public static ParticipantData getExistingParticipant(final DatabaseWrapper dbWrapper,
-            final String participantId) {
-        Assert.isNotMainThread();
-        ParticipantData participant = null;
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                    ParticipantData.ParticipantsQuery.PROJECTION,
-                    ParticipantColumns._ID + " =?",
-                    new String[] { participantId }, null, null, null);
-            Assert.inRange(cursor.getCount(), 0, 1);
-            if (cursor.moveToFirst()) {
-                participant = ParticipantData.getFromCursor(cursor);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        return participant;
-    }
-
-    public static int getSelfSubscriptionId(final DatabaseWrapper dbWrapper,
-            final String selfParticipantId) {
-        final ParticipantData selfParticipant = BugleDatabaseOperations.getExistingParticipant(
-                dbWrapper, selfParticipantId);
-        if (selfParticipant != null) {
-            Assert.isTrue(selfParticipant.isSelf());
-            return selfParticipant.getSubId();
-        }
-        return ParticipantData.DEFAULT_SELF_SUB_ID;
-    }
-
-    @VisibleForTesting
-    @DoesNotRunOnMainThread
-    public static ArrayList<ParticipantData> getParticipantsForConversation(
-            final DatabaseWrapper dbWrapper, final String conversationId) {
-        Assert.isNotMainThread();
-        final ArrayList<ParticipantData> participants =
-                new ArrayList<ParticipantData>();
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                    ParticipantData.ParticipantsQuery.PROJECTION,
-                    ParticipantColumns._ID + " IN ( " + "SELECT "
-                            + ConversationParticipantsColumns.PARTICIPANT_ID + " AS "
-                            + ParticipantColumns._ID
-                            + " FROM " + DatabaseHelper.CONVERSATION_PARTICIPANTS_TABLE
-                            + " WHERE " + ConversationParticipantsColumns.CONVERSATION_ID + " =? )",
-                            new String[] { conversationId }, null, null, null);
-
-            while (cursor.moveToNext()) {
-                participants.add(ParticipantData.getFromCursor(cursor));
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        return participants;
-    }
-
-    @DoesNotRunOnMainThread
-    public static MessageData readMessage(final DatabaseWrapper dbWrapper, final String messageId) {
-        Assert.isNotMainThread();
-        final MessageData message = readMessageData(dbWrapper, messageId);
-        if (message != null) {
-            readMessagePartsData(dbWrapper, message, false);
-        }
-        return message;
-    }
-
-    @VisibleForTesting
-    static MessagePartData readMessagePartData(final DatabaseWrapper dbWrapper,
-            final String partId) {
-        MessagePartData messagePartData = null;
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.PARTS_TABLE,
-                    MessagePartData.getProjection(), PartColumns._ID + "=?",
-                    new String[] { partId }, null, null, null);
-            Assert.inRange(cursor.getCount(), 0, 1);
-            if (cursor.moveToFirst()) {
-                messagePartData = MessagePartData.createFromCursor(cursor);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return messagePartData;
-    }
-
-    @DoesNotRunOnMainThread
-    public static MessageData readMessageData(final DatabaseWrapper dbWrapper,
-            final Uri smsMessageUri) {
-        Assert.isNotMainThread();
-        MessageData message = null;
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
-                    MessageData.getProjection(), MessageColumns.SMS_MESSAGE_URI + "=?",
-                    new String[] { smsMessageUri.toString() }, null, null, null);
-            Assert.inRange(cursor.getCount(), 0, 1);
-            if (cursor.moveToFirst()) {
-                message = new MessageData();
-                message.bind(cursor);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return message;
-    }
-
-    @DoesNotRunOnMainThread
-    public static MessageData readMessageData(final DatabaseWrapper dbWrapper,
-            final String messageId) {
-        Assert.isNotMainThread();
-        MessageData message = null;
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
-                    MessageData.getProjection(), MessageColumns._ID + "=?",
-                    new String[] { messageId }, null, null, null);
-            Assert.inRange(cursor.getCount(), 0, 1);
-            if (cursor.moveToFirst()) {
-                message = new MessageData();
-                message.bind(cursor);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return message;
-    }
-
-    /**
-     * Read all the parts for a message
-     * @param dbWrapper database
-     * @param message read parts for this message
-     * @param checkAttachmentFilesExist check each attachment file and only include if file exists
-     */
-    private static void readMessagePartsData(final DatabaseWrapper dbWrapper,
-            final MessageData message, final boolean checkAttachmentFilesExist) {
-        final ContentResolver contentResolver =
-                Factory.get().getApplicationContext().getContentResolver();
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.PARTS_TABLE,
-                    MessagePartData.getProjection(), PartColumns.MESSAGE_ID + "=?",
-                    new String[] { message.getMessageId() }, null, null, null);
-            while (cursor.moveToNext()) {
-                final MessagePartData messagePartData = MessagePartData.createFromCursor(cursor);
-                if (checkAttachmentFilesExist && messagePartData.isAttachment() &&
-                        !UriUtil.isBugleAppResource(messagePartData.getContentUri())) {
-                    try {
-                        // Test that the file exists before adding the attachment to the draft
-                        final ParcelFileDescriptor fileDescriptor =
-                                contentResolver.openFileDescriptor(
-                                        messagePartData.getContentUri(), "r");
-                        if (fileDescriptor != null) {
-                            fileDescriptor.close();
-                            message.addPart(messagePartData);
-                        }
-                    } catch (final IOException e) {
-                        // The attachment's temp storage no longer exists, just ignore the file
-                    } catch (final SecurityException e) {
-                        // Likely thrown by openFileDescriptor due to an expired access grant.
-                        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
-                            LogUtil.d(LogUtil.BUGLE_TAG, "uri: " + messagePartData.getContentUri());
-                        }
-                    }
-                } else {
-                    message.addPart(messagePartData);
-                }
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-    }
-
-    /**
-     * Write a message part to our local database
-     *
-     * @param dbWrapper     The database
-     * @param messagePart   The message part to insert
-     * @return The row id of the newly inserted part
-     */
-    static String insertNewMessagePartInTransaction(final DatabaseWrapper dbWrapper,
-            final MessagePartData messagePart, final String conversationId) {
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-        Assert.isTrue(!TextUtils.isEmpty(messagePart.getMessageId()));
-
-        // Insert a new part row
-        final SQLiteStatement insert = messagePart.getInsertStatement(dbWrapper, conversationId);
-        final long rowNumber = insert.executeInsert();
-
-        Assert.inRange(rowNumber, 0, Long.MAX_VALUE);
-        final String partId = Long.toString(rowNumber);
-
-        // Update the part id
-        messagePart.updatePartId(partId);
-
-        return partId;
-    }
-
-    /**
-     * Insert a message and its parts into the table
-     */
-    @DoesNotRunOnMainThread
-    public static void insertNewMessageInTransaction(final DatabaseWrapper dbWrapper,
-            final MessageData message) {
-        Assert.isNotMainThread();
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-
-        // Insert message row
-        final SQLiteStatement insert = message.getInsertStatement(dbWrapper);
-        final long rowNumber = insert.executeInsert();
-
-        Assert.inRange(rowNumber, 0, Long.MAX_VALUE);
-        final String messageId = Long.toString(rowNumber);
-        message.updateMessageId(messageId);
-        //  Insert new parts
-        for (final MessagePartData messagePart : message.getParts()) {
-            messagePart.updateMessageId(messageId);
-            insertNewMessagePartInTransaction(dbWrapper, messagePart, message.getConversationId());
-        }
-    }
-
-    /**
-     * Update a message and add its parts into the table
-     */
-    @DoesNotRunOnMainThread
-    public static void updateMessageInTransaction(final DatabaseWrapper dbWrapper,
-            final MessageData message) {
-        Assert.isNotMainThread();
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-        final String messageId = message.getMessageId();
-        // Check message still exists (sms sync or delete might have purged it)
-        final MessageData current = BugleDatabaseOperations.readMessage(dbWrapper, messageId);
-        if (current != null) {
-            // Delete existing message parts)
-            deletePartsForMessage(dbWrapper, message.getMessageId());
-            //  Insert new parts
-            for (final MessagePartData messagePart : message.getParts()) {
-                messagePart.updatePartId(null);
-                messagePart.updateMessageId(message.getMessageId());
-                insertNewMessagePartInTransaction(dbWrapper, messagePart,
-                        message.getConversationId());
-            }
-            //  Update message row
-            final ContentValues values = new ContentValues();
-            message.populate(values);
-            updateMessageRowIfExists(dbWrapper, message.getMessageId(), values);
-        }
-    }
-
-    @DoesNotRunOnMainThread
-    public static void updateMessageAndPartsInTransaction(final DatabaseWrapper dbWrapper,
-            final MessageData message, final List<MessagePartData> partsToUpdate) {
-        Assert.isNotMainThread();
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-        final ContentValues values = new ContentValues();
-        for (final MessagePartData messagePart : partsToUpdate) {
-            values.clear();
-            messagePart.populate(values);
-            updatePartRowIfExists(dbWrapper, messagePart.getPartId(), values);
-        }
-        values.clear();
-        message.populate(values);
-        updateMessageRowIfExists(dbWrapper, message.getMessageId(), values);
-    }
-
-    /**
-     * Delete all parts for a message
-     */
-    static void deletePartsForMessage(final DatabaseWrapper dbWrapper,
-            final String messageId) {
-        final int cnt = dbWrapper.delete(DatabaseHelper.PARTS_TABLE,
-                PartColumns.MESSAGE_ID + " =?",
-                new String[] { messageId });
-        Assert.inRange(cnt, 0, Integer.MAX_VALUE);
-    }
-
-    /**
-     * Delete one message and update the conversation (if necessary).
-     *
-     * @return number of rows deleted (should be 1 or 0).
-     */
-    @DoesNotRunOnMainThread
-    public static int deleteMessage(final DatabaseWrapper dbWrapper, final String messageId) {
-        Assert.isNotMainThread();
-        dbWrapper.beginTransaction();
-        try {
-            // Read message to find out which conversation it is in
-            final MessageData message = BugleDatabaseOperations.readMessage(dbWrapper, messageId);
-
-            int count = 0;
-            if (message != null) {
-                final String conversationId = message.getConversationId();
-                // Delete message
-                count = dbWrapper.delete(DatabaseHelper.MESSAGES_TABLE,
-                        MessageColumns._ID + "=?", new String[] { messageId });
-
-                if (!deleteConversationIfEmptyInTransaction(dbWrapper, conversationId)) {
-                    // TODO: Should we leave the conversation sort timestamp alone?
-                    refreshConversationMetadataInTransaction(dbWrapper, conversationId,
-                            false/* shouldAutoSwitchSelfId */, false/*archived*/);
-                }
-            }
-            dbWrapper.setTransactionSuccessful();
-            return count;
-        } finally {
-            dbWrapper.endTransaction();
-        }
-    }
-
-    /**
-     * Deletes the conversation if there are zero non-draft messages left.
-     * <p>
-     * This is necessary because the telephony database has a trigger that deletes threads after
-     * their last message is deleted. We need to ensure that if a thread goes away, we also delete
-     * the conversation in Bugle. We don't store draft messages in telephony, so we ignore those
-     * when querying for the # of messages in the conversation.
-     *
-     * @return true if the conversation was deleted
-     */
-    @DoesNotRunOnMainThread
-    public static boolean deleteConversationIfEmptyInTransaction(final DatabaseWrapper dbWrapper,
-            final String conversationId) {
-        Assert.isNotMainThread();
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-        Cursor cursor = null;
-        try {
-            // TODO: The refreshConversationMetadataInTransaction method below uses this
-            // same query; maybe they should share this logic?
-
-            // Check to see if there are any (non-draft) messages in the conversation
-            cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
-                    REFRESH_CONVERSATION_MESSAGE_PROJECTION,
-                    MessageColumns.CONVERSATION_ID + "=? AND " +
-                    MessageColumns.STATUS + "!=" + MessageData.BUGLE_STATUS_OUTGOING_DRAFT,
-                    new String[] { conversationId }, null, null,
-                    MessageColumns.RECEIVED_TIMESTAMP + " DESC", "1" /* limit */);
-            if (cursor.getCount() == 0) {
-                dbWrapper.delete(DatabaseHelper.CONVERSATIONS_TABLE,
-                        ConversationColumns._ID + "=?", new String[] { conversationId });
-                LogUtil.i(TAG,
-                        "BugleDatabaseOperations: Deleted empty conversation " + conversationId);
-                return true;
-            } else {
-                return false;
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-    }
-
-    private static final String[] REFRESH_CONVERSATION_MESSAGE_PROJECTION = new String[] {
-        MessageColumns._ID,
-        MessageColumns.RECEIVED_TIMESTAMP,
-        MessageColumns.SENDER_PARTICIPANT_ID
-    };
-
-    /**
-     * Update conversation snippet, timestamp and optionally self id to match latest message in
-     * conversation.
-     */
-    @DoesNotRunOnMainThread
-    public static void refreshConversationMetadataInTransaction(final DatabaseWrapper dbWrapper,
-            final String conversationId, final boolean shouldAutoSwitchSelfId,
-            boolean keepArchived) {
-        Assert.isNotMainThread();
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-        Cursor cursor = null;
-        try {
-            // Check to see if there are any (non-draft) messages in the conversation
-            cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
-                    REFRESH_CONVERSATION_MESSAGE_PROJECTION,
-                    MessageColumns.CONVERSATION_ID + "=? AND " +
-                    MessageColumns.STATUS + "!=" + MessageData.BUGLE_STATUS_OUTGOING_DRAFT,
-                    new String[] { conversationId }, null, null,
-                    MessageColumns.RECEIVED_TIMESTAMP + " DESC", "1" /* limit */);
-
-            if (cursor.moveToFirst()) {
-                // Refresh latest message in conversation
-                final String latestMessageId = cursor.getString(0);
-                final long latestMessageTimestamp = cursor.getLong(1);
-                final String senderParticipantId = cursor.getString(2);
-                final boolean senderBlocked = isBlockedParticipant(dbWrapper, senderParticipantId);
-                updateConversationMetadataInTransaction(dbWrapper, conversationId,
-                        latestMessageId, latestMessageTimestamp, senderBlocked || keepArchived,
-                        shouldAutoSwitchSelfId);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-    }
-
-    /**
-     * When moving/removing an existing message update conversation metadata if necessary
-     * @param dbWrapper      db wrapper
-     * @param conversationId conversation to modify
-     * @param messageId      message that is leaving the conversation
-     * @param shouldAutoSwitchSelfId should we try to auto-switch the conversation's self-id as a
-     *        result of this call when we see a new latest message?
-     * @param keepArchived   should we keep the conversation archived despite refresh
-     */
-    @DoesNotRunOnMainThread
-    public static void maybeRefreshConversationMetadataInTransaction(
-            final DatabaseWrapper dbWrapper, final String conversationId, final String messageId,
-            final boolean shouldAutoSwitchSelfId, final boolean keepArchived) {
-        Assert.isNotMainThread();
-        boolean refresh = true;
-        if (!TextUtils.isEmpty(messageId)) {
-            refresh = false;
-            // Look for an existing conversation in the db with this conversation id
-            Cursor cursor = null;
-            try {
-                cursor = dbWrapper.query(DatabaseHelper.CONVERSATIONS_TABLE,
-                        new String[] { ConversationColumns.LATEST_MESSAGE_ID },
-                        ConversationColumns._ID + "=?",
-                        new String[] { conversationId },
-                        null, null, null);
-                Assert.inRange(cursor.getCount(), 0, 1);
-                if (cursor.moveToFirst()) {
-                    refresh = TextUtils.equals(cursor.getString(0), messageId);
-                }
-            } finally {
-                if (cursor != null) {
-                    cursor.close();
-                }
-            }
-        }
-        if (refresh) {
-            // TODO: I think it is okay to delete the conversation if it is empty...
-            refreshConversationMetadataInTransaction(dbWrapper, conversationId,
-                    shouldAutoSwitchSelfId, keepArchived);
-        }
-    }
-
-
-
-    // SQL statement to query latest message if for particular conversation
-    private static final String QUERY_CONVERSATIONS_LATEST_MESSAGE_SQL = "SELECT "
-            + ConversationColumns.LATEST_MESSAGE_ID + " FROM " + DatabaseHelper.CONVERSATIONS_TABLE
-            + " WHERE " + ConversationColumns._ID + "=? LIMIT 1";
-
-    /**
-     * Note this is not thread safe so callers need to make sure they own the wrapper + statements
-     * while they call this and use the returned value.
-     */
-    @DoesNotRunOnMainThread
-    public static SQLiteStatement getQueryConversationsLatestMessageStatement(
-            final DatabaseWrapper db, final String conversationId) {
-        Assert.isNotMainThread();
-        final SQLiteStatement query = db.getStatementInTransaction(
-                DatabaseWrapper.INDEX_QUERY_CONVERSATIONS_LATEST_MESSAGE,
-                QUERY_CONVERSATIONS_LATEST_MESSAGE_SQL);
-        query.clearBindings();
-        query.bindString(1, conversationId);
-        return query;
-    }
-
-    // SQL statement to query latest message if for particular conversation
-    private static final String QUERY_MESSAGES_LATEST_MESSAGE_SQL = "SELECT "
-            + MessageColumns._ID + " FROM " + DatabaseHelper.MESSAGES_TABLE
-            + " WHERE " + MessageColumns.CONVERSATION_ID + "=? ORDER BY "
-            + MessageColumns.RECEIVED_TIMESTAMP + " DESC LIMIT 1";
-
-    /**
-     * Note this is not thread safe so callers need to make sure they own the wrapper + statements
-     * while they call this and use the returned value.
-     */
-    @DoesNotRunOnMainThread
-    public static SQLiteStatement getQueryMessagesLatestMessageStatement(
-            final DatabaseWrapper db, final String conversationId) {
-        Assert.isNotMainThread();
-        final SQLiteStatement query = db.getStatementInTransaction(
-                DatabaseWrapper.INDEX_QUERY_MESSAGES_LATEST_MESSAGE,
-                QUERY_MESSAGES_LATEST_MESSAGE_SQL);
-        query.clearBindings();
-        query.bindString(1, conversationId);
-        return query;
-    }
-
-    /**
-     * Update conversation metadata if necessary
-     * @param dbWrapper      db wrapper
-     * @param conversationId conversation to modify
-     * @param shouldAutoSwitchSelfId should we try to auto-switch the conversation's self-id as a
-     *                               result of this call when we see a new latest message?
-     * @param keepArchived if the conversation should be kept archived
-     */
-    @DoesNotRunOnMainThread
-    public static void maybeRefreshConversationMetadataInTransaction(
-            final DatabaseWrapper dbWrapper, final String conversationId,
-            final boolean shouldAutoSwitchSelfId, boolean keepArchived) {
-        Assert.isNotMainThread();
-        String currentLatestMessageId = null;
-        String latestMessageId = null;
-        try {
-            final SQLiteStatement currentLatestMessageIdSql =
-                    getQueryConversationsLatestMessageStatement(dbWrapper, conversationId);
-            currentLatestMessageId = currentLatestMessageIdSql.simpleQueryForString();
-
-            final SQLiteStatement latestMessageIdSql =
-                    getQueryMessagesLatestMessageStatement(dbWrapper, conversationId);
-            latestMessageId = latestMessageIdSql.simpleQueryForString();
-        } catch (final SQLiteDoneException e) {
-            LogUtil.e(TAG, "BugleDatabaseOperations: Query for latest message failed", e);
-        }
-
-        if (TextUtils.isEmpty(currentLatestMessageId) ||
-                !TextUtils.equals(currentLatestMessageId, latestMessageId)) {
-            refreshConversationMetadataInTransaction(dbWrapper, conversationId,
-                    shouldAutoSwitchSelfId, keepArchived);
-        }
-    }
-
-    static boolean getConversationExists(final DatabaseWrapper dbWrapper,
-            final String conversationId) {
-        // Look for an existing conversation in the db with this conversation id
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.CONVERSATIONS_TABLE,
-                    new String[] { /* No projection */},
-                    ConversationColumns._ID + "=?",
-                    new String[] { conversationId },
-                    null, null, null);
-            return cursor.getCount() == 1;
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-    }
-
-    /** Preserve parts in message but clear the stored draft */
-    public static final int UPDATE_MODE_CLEAR_DRAFT = 1;
-    /** Add the message as a draft */
-    public static final int UPDATE_MODE_ADD_DRAFT = 2;
-
-    /**
-     * Update draft message for specified conversation
-     * @param dbWrapper       local database (wrapped)
-     * @param conversationId  conversation to update
-     * @param message         Optional message to preserve attachments for (either as draft or for
-     *                        sending)
-     * @param updateMode      either {@link #UPDATE_MODE_CLEAR_DRAFT} or
-     *                        {@link #UPDATE_MODE_ADD_DRAFT}
-     * @return message id of newly written draft (else null)
-     */
-    @DoesNotRunOnMainThread
-    public static String updateDraftMessageData(final DatabaseWrapper dbWrapper,
-            final String conversationId, @Nullable final MessageData message,
-            final int updateMode) {
-        Assert.isNotMainThread();
-        Assert.notNull(conversationId);
-        Assert.inRange(updateMode, UPDATE_MODE_CLEAR_DRAFT, UPDATE_MODE_ADD_DRAFT);
-        String messageId = null;
-        Cursor cursor = null;
-        dbWrapper.beginTransaction();
-        try {
-            // Find all draft parts for the current conversation
-            final SimpleArrayMap<Uri, MessagePartData> currentDraftParts = new SimpleArrayMap<>();
-            cursor = dbWrapper.query(DatabaseHelper.DRAFT_PARTS_VIEW,
-                    MessagePartData.getProjection(),
-                    MessageColumns.CONVERSATION_ID + " =?",
-                    new String[] { conversationId }, null, null, null);
-            while (cursor.moveToNext()) {
-                final MessagePartData part = MessagePartData.createFromCursor(cursor);
-                if (part.isAttachment()) {
-                    currentDraftParts.put(part.getContentUri(), part);
-                }
-            }
-            // Optionally, preserve attachments for "message"
-            final boolean conversationExists = getConversationExists(dbWrapper, conversationId);
-            if (message != null && conversationExists) {
-                for (final MessagePartData part : message.getParts()) {
-                    if (part.isAttachment()) {
-                        currentDraftParts.remove(part.getContentUri());
-                    }
-                }
-            }
-
-            // Delete orphan content
-            for (int index = 0; index < currentDraftParts.size(); index++) {
-                final MessagePartData part = currentDraftParts.valueAt(index);
-                part.destroySync();
-            }
-
-            // Delete existing draft (cascade deletes parts)
-            dbWrapper.delete(DatabaseHelper.MESSAGES_TABLE,
-                    MessageColumns.STATUS + "=? AND " + MessageColumns.CONVERSATION_ID + "=?",
-                    new String[] {
-                        Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_DRAFT),
-                        conversationId
-                    });
-
-            // Write new draft
-            if (updateMode == UPDATE_MODE_ADD_DRAFT && message != null
-                    && message.hasContent() && conversationExists) {
-                Assert.equals(MessageData.BUGLE_STATUS_OUTGOING_DRAFT,
-                        message.getStatus());
-
-                // Now add draft to message table
-                insertNewMessageInTransaction(dbWrapper, message);
-                messageId = message.getMessageId();
-            }
-
-            if (conversationExists) {
-                updateConversationDraftSnippetAndPreviewInTransaction(
-                        dbWrapper, conversationId, message);
-
-                if (message != null && message.getSelfId() != null) {
-                    updateConversationSelfIdInTransaction(dbWrapper, conversationId,
-                            message.getSelfId());
-                }
-            }
-
-            dbWrapper.setTransactionSuccessful();
-        } finally {
-            dbWrapper.endTransaction();
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG,
-                    "Updated draft message " + messageId + " for conversation " + conversationId);
-        }
-        return messageId;
-    }
-
-    /**
-     * Read the first draft message associated with this conversation.
-     * If none present create an empty (sms) draft message.
-     */
-    @DoesNotRunOnMainThread
-    public static MessageData readDraftMessageData(final DatabaseWrapper dbWrapper,
-            final String conversationId, final String conversationSelfId) {
-        Assert.isNotMainThread();
-        MessageData message = null;
-        Cursor cursor = null;
-        dbWrapper.beginTransaction();
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.MESSAGES_TABLE,
-                    MessageData.getProjection(),
-                    MessageColumns.STATUS + "=? AND " + MessageColumns.CONVERSATION_ID + "=?",
-                    new String[] {
-                        Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_DRAFT),
-                        conversationId
-                    }, null, null, null);
-            Assert.inRange(cursor.getCount(), 0, 1);
-            if (cursor.moveToFirst()) {
-                message = new MessageData();
-                message.bindDraft(cursor, conversationSelfId);
-                readMessagePartsData(dbWrapper, message, true);
-                // Disconnect draft parts from DB
-                for (final MessagePartData part : message.getParts()) {
-                    part.updatePartId(null);
-                    part.updateMessageId(null);
-                }
-                message.updateMessageId(null);
-            }
-            dbWrapper.setTransactionSuccessful();
-        } finally {
-            dbWrapper.endTransaction();
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return message;
-    }
-
-    // Internal
-    private static void addParticipantToConversation(final DatabaseWrapper dbWrapper,
-            final ParticipantData participant, final String conversationId) {
-        final String participantId = getOrCreateParticipantInTransaction(dbWrapper, participant);
-        Assert.notNull(participantId);
-
-        // Add the participant to the conversation participants table
-        final ContentValues values = new ContentValues();
-        values.put(ConversationParticipantsColumns.CONVERSATION_ID, conversationId);
-        values.put(ConversationParticipantsColumns.PARTICIPANT_ID, participantId);
-        dbWrapper.insert(DatabaseHelper.CONVERSATION_PARTICIPANTS_TABLE, null, values);
-    }
-
-    /**
-     * Get string used as canonical recipient for participant cache for sub id
-     */
-    private static String getCanonicalRecipientFromSubId(final int subId) {
-        return "SELF(" + subId + ")";
-    }
-
-    /**
-     * Maps from a sub id or phone number to a participant id if there is one.
-     *
-     * @return If the participant is available in our cache, or the DB, this returns the
-     * participant id for the given subid/phone number.  Otherwise it returns null.
-     */
-    @VisibleForTesting
-    private static String getParticipantId(final DatabaseWrapper dbWrapper,
-            final int subId, final String canonicalRecipient) {
-        // First check our memory cache for the participant Id
-        String participantId;
-        synchronized (sNormalizedPhoneNumberToParticipantIdCache) {
-            participantId = sNormalizedPhoneNumberToParticipantIdCache.get(canonicalRecipient);
-        }
-
-        if (participantId != null) {
-            return participantId;
-        }
-
-        // This code will only be executed for incremental additions.
-        Cursor cursor = null;
-        try {
-            if (subId != ParticipantData.OTHER_THAN_SELF_SUB_ID) {
-                // Now look for an existing participant in the db with this sub id.
-                cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                        new String[] {ParticipantColumns._ID},
-                        ParticipantColumns.SUB_ID + "=?",
-                        new String[] { Integer.toString(subId) }, null, null, null);
-            } else {
-                // Look for existing participant with this normalized phone number and no subId.
-                cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                        new String[] {ParticipantColumns._ID},
-                        ParticipantColumns.NORMALIZED_DESTINATION + "=? AND "
-                                + ParticipantColumns.SUB_ID + "=?",
-                                new String[] {canonicalRecipient, Integer.toString(subId)},
-                                null, null, null);
-            }
-
-            if (cursor.moveToFirst()) {
-                // TODO Is this assert correct for multi-sim where a new sim was put in?
-                Assert.isTrue(cursor.getCount() == 1);
-
-                // We found an existing participant in the database
-                participantId = cursor.getString(0);
-
-                synchronized (sNormalizedPhoneNumberToParticipantIdCache) {
-                    // Add it to the cache for next time
-                    sNormalizedPhoneNumberToParticipantIdCache.put(canonicalRecipient,
-                            participantId);
-                }
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return participantId;
-    }
-
-    @DoesNotRunOnMainThread
-    public static ParticipantData getOrCreateSelf(final DatabaseWrapper dbWrapper,
-            final int subId) {
-        Assert.isNotMainThread();
-        ParticipantData participant = null;
-        dbWrapper.beginTransaction();
-        try {
-            final ParticipantData shell = ParticipantData.getSelfParticipant(subId);
-            final String participantId = getOrCreateParticipantInTransaction(dbWrapper, shell);
-            participant = getExistingParticipant(dbWrapper, participantId);
-            dbWrapper.setTransactionSuccessful();
-        } finally {
-            dbWrapper.endTransaction();
-        }
-        return participant;
-    }
-
-    /**
-     * Lookup and if necessary create a new participant
-     * @param dbWrapper      Database wrapper
-     * @param participant    Participant to find/create
-     * @return participantId ParticipantId for existing or newly created participant
-     */
-    @DoesNotRunOnMainThread
-    public static String getOrCreateParticipantInTransaction(final DatabaseWrapper dbWrapper,
-            final ParticipantData participant) {
-        Assert.isNotMainThread();
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-        int subId = ParticipantData.OTHER_THAN_SELF_SUB_ID;
-        String participantId = null;
-        String canonicalRecipient = null;
-        if (participant.isSelf()) {
-            subId = participant.getSubId();
-            canonicalRecipient = getCanonicalRecipientFromSubId(subId);
-        } else {
-            canonicalRecipient = participant.getNormalizedDestination();
-        }
-        Assert.notNull(canonicalRecipient);
-        participantId = getParticipantId(dbWrapper, subId, canonicalRecipient);
-
-        if (participantId != null) {
-            return participantId;
-        }
-
-        if (!participant.isContactIdResolved()) {
-            // Refresh participant's name and avatar with matching contact in CP2.
-            ParticipantRefresh.refreshParticipant(dbWrapper, participant);
-        }
-
-        // Insert the participant into the participants table
-        final ContentValues values = participant.toContentValues();
-        final long participantRow = dbWrapper.insert(DatabaseHelper.PARTICIPANTS_TABLE, null,
-                values);
-        participantId = Long.toString(participantRow);
-        Assert.notNull(canonicalRecipient);
-
-        synchronized (sNormalizedPhoneNumberToParticipantIdCache) {
-            // Now that we've inserted it, add it to our cache
-            sNormalizedPhoneNumberToParticipantIdCache.put(canonicalRecipient, participantId);
-        }
-
-        return participantId;
-    }
-
-    @DoesNotRunOnMainThread
-    public static void updateDestination(final DatabaseWrapper dbWrapper,
-            final String destination, final boolean blocked) {
-        Assert.isNotMainThread();
-        final ContentValues values = new ContentValues();
-        values.put(ParticipantColumns.BLOCKED, blocked ? 1 : 0);
-        dbWrapper.update(DatabaseHelper.PARTICIPANTS_TABLE, values,
-                ParticipantColumns.NORMALIZED_DESTINATION + "=? AND " +
-                        ParticipantColumns.SUB_ID + "=?",
-                new String[] { destination, Integer.toString(
-                        ParticipantData.OTHER_THAN_SELF_SUB_ID) });
-    }
-
-    @DoesNotRunOnMainThread
-    public static String getConversationFromOtherParticipantDestination(
-            final DatabaseWrapper db, final String otherDestination) {
-        Assert.isNotMainThread();
-        Cursor cursor = null;
-        try {
-            cursor = db.query(DatabaseHelper.CONVERSATIONS_TABLE,
-                    new String[] { ConversationColumns._ID },
-                    ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION + "=?",
-                    new String[] { otherDestination }, null, null, null);
-            Assert.inRange(cursor.getCount(), 0, 1);
-            if (cursor.moveToFirst()) {
-                return cursor.getString(0);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return null;
-    }
-
-
-    /**
-     * Get a list of conversations that contain any of participants specified.
-     */
-    private static HashSet<String> getConversationsForParticipants(
-            final ArrayList<String> participantIds) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final HashSet<String> conversationIds = new HashSet<String>();
-
-        final String selection = ConversationParticipantsColumns.PARTICIPANT_ID + "=?";
-        for (final String participantId : participantIds) {
-            final String[] selectionArgs = new String[] { participantId };
-            final Cursor cursor = db.query(DatabaseHelper.CONVERSATION_PARTICIPANTS_TABLE,
-                    ConversationParticipantsQuery.PROJECTION,
-                    selection, selectionArgs, null, null, null);
-
-            if (cursor != null) {
-                try {
-                    while (cursor.moveToNext()) {
-                        final String conversationId = cursor.getString(
-                                ConversationParticipantsQuery.INDEX_CONVERSATION_ID);
-                        conversationIds.add(conversationId);
-                    }
-                } finally {
-                    cursor.close();
-                }
-            }
-        }
-
-        return conversationIds;
-    }
-
-    /**
-     * Refresh conversation names/avatars based on a list of participants that are changed.
-     */
-    @DoesNotRunOnMainThread
-    public static void refreshConversationsForParticipants(final ArrayList<String> participants) {
-        Assert.isNotMainThread();
-        final HashSet<String> conversationIds = getConversationsForParticipants(participants);
-        if (conversationIds.size() > 0) {
-            for (final String conversationId : conversationIds) {
-                refreshConversation(conversationId);
-            }
-
-            MessagingContentProvider.notifyConversationListChanged();
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "Number of conversations refreshed:" + conversationIds.size());
-            }
-        }
-    }
-
-    /**
-     * Refresh conversation names/avatars based on a changed participant.
-     */
-    @DoesNotRunOnMainThread
-    public static void refreshConversationsForParticipant(final String participantId) {
-        Assert.isNotMainThread();
-        final ArrayList<String> participantList = new ArrayList<String>(1);
-        participantList.add(participantId);
-        refreshConversationsForParticipants(participantList);
-    }
-
-    /**
-     * Refresh one conversation.
-     */
-    private static void refreshConversation(final String conversationId) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        db.beginTransaction();
-        try {
-            BugleDatabaseOperations.updateConversationNameAndAvatarInTransaction(db,
-                    conversationId);
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-
-        MessagingContentProvider.notifyParticipantsChanged(conversationId);
-        MessagingContentProvider.notifyMessagesChanged(conversationId);
-        MessagingContentProvider.notifyConversationMetadataChanged(conversationId);
-    }
-
-    @DoesNotRunOnMainThread
-    public static boolean updateRowIfExists(final DatabaseWrapper db, final String table,
-            final String rowKey, final String rowId, final ContentValues values) {
-        Assert.isNotMainThread();
-        final StringBuilder sb = new StringBuilder();
-        final ArrayList<String> whereValues = new ArrayList<String>(values.size() + 1);
-        whereValues.add(rowId);
-
-        for (final String key : values.keySet()) {
-            if (sb.length() > 0) {
-                sb.append(" OR ");
-            }
-            final Object value = values.get(key);
-            sb.append(key);
-            if (value != null) {
-                sb.append(" IS NOT ?");
-                whereValues.add(value.toString());
-            } else {
-                sb.append(" IS NOT NULL");
-            }
-        }
-
-        final String whereClause = rowKey + "=?" + " AND (" + sb.toString() + ")";
-        final String [] whereValuesArray = whereValues.toArray(new String[whereValues.size()]);
-        final int count = db.update(table, values, whereClause, whereValuesArray);
-        if (count > 1) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Updated more than 1 row " + count + "; " + table +
-                    " for " + rowKey + " = " + rowId + " (deleted?)");
-        }
-        Assert.inRange(count, 0, 1);
-        return (count >= 0);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/BugleNotifications.java b/src/com/android/messaging/datamodel/BugleNotifications.java
deleted file mode 100644
index 3faee85..0000000
--- a/src/com/android/messaging/datamodel/BugleNotifications.java
+++ /dev/null
@@ -1,1221 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Bitmap.Config;
-import android.graphics.BitmapFactory;
-import android.graphics.Typeface;
-import android.media.AudioManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.SystemClock;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts;
-import androidx.core.app.NotificationCompat;
-import androidx.core.app.NotificationCompat.WearableExtender;
-import androidx.core.app.NotificationManagerCompat;
-import androidx.core.app.RemoteInput;
-import androidx.collection.SimpleArrayMap;
-import android.text.Spannable;
-import android.text.SpannableStringBuilder;
-import android.text.TextUtils;
-import android.text.style.StyleSpan;
-import android.text.style.TextAppearanceSpan;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.MessageNotificationState.BundledMessageNotificationState;
-import com.android.messaging.datamodel.MessageNotificationState.ConversationLineInfo;
-import com.android.messaging.datamodel.MessageNotificationState.MultiConversationNotificationState;
-import com.android.messaging.datamodel.MessageNotificationState.MultiMessageNotificationState;
-import com.android.messaging.datamodel.action.MarkAsReadAction;
-import com.android.messaging.datamodel.action.MarkAsSeenAction;
-import com.android.messaging.datamodel.action.RedownloadMmsAction;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.media.AvatarRequestDescriptor;
-import com.android.messaging.datamodel.media.ImageResource;
-import com.android.messaging.datamodel.media.MediaRequest;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.datamodel.media.MessagePartVideoThumbnailRequestDescriptor;
-import com.android.messaging.datamodel.media.UriImageRequestDescriptor;
-import com.android.messaging.datamodel.media.VideoThumbnailRequest;
-import com.android.messaging.sms.MmsSmsUtils;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.BuglePrefsKeys;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.ConversationIdSet;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.NotificationPlayer;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PendingIntentConstants;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.RingtoneUtil;
-import com.android.messaging.util.ThreadUtil;
-import com.android.messaging.util.UriUtil;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-
-/**
- * Handle posting, updating and removing all conversation notifications.
- *
- * There are currently two main classes of notification and their rules: <p>
- * 1) Messages - {@link MessageNotificationState}. Only one message notification.
- * Unread messages across senders and conversations are coalesced.<p>
- * 2) Failed Messages - {@link MessageNotificationState#checkFailedMesages } Only one failed
- * message. Multiple failures are coalesced.<p>
- *
- * To add a new class of notifications, subclass the NotificationState and add commands which
- * create one and pass into general creation function.
- *
- */
-public class BugleNotifications {
-    // Logging
-    public static final String TAG = LogUtil.BUGLE_NOTIFICATIONS_TAG;
-
-    // Constants to use for update.
-    public static final int UPDATE_NONE = 0;
-    public static final int UPDATE_MESSAGES = 1;
-    public static final int UPDATE_ERRORS = 2;
-    public static final int UPDATE_ALL = UPDATE_MESSAGES + UPDATE_ERRORS;
-
-    // Constants for notification type used for audio and vibration settings.
-    public static final int LOCAL_SMS_NOTIFICATION = 0;
-
-    private static final String SMS_NOTIFICATION_TAG = ":sms:";
-    private static final String SMS_ERROR_NOTIFICATION_TAG = ":error:";
-
-    private static final String WEARABLE_COMPANION_APP_PACKAGE = "com.google.android.wearable.app";
-
-    private static final Set<NotificationState> sPendingNotifications =
-            new HashSet<NotificationState>();
-
-    private static int sWearableImageWidth;
-    private static int sWearableImageHeight;
-    private static int sIconWidth;
-    private static int sIconHeight;
-
-    private static boolean sInitialized = false;
-
-    private static final Object mLock = new Object();
-
-    // sLastMessageDingTime is a map between a conversation id and a time. It's used to keep track
-    // of the time we last dinged a message for this conversation. When messages are coming in
-    // at flurry, we don't want to over-ding the user.
-    private static final SimpleArrayMap<String, Long> sLastMessageDingTime =
-            new SimpleArrayMap<String, Long>();
-    private static int sTimeBetweenDingsMs;
-
-    /**
-     * This is the volume at which to play the observable-conversation notification sound,
-     * expressed as a fraction of the system notification volume.
-     */
-    private static final float OBSERVABLE_CONVERSATION_NOTIFICATION_VOLUME = 0.25f;
-
-    /**
-     * Entry point for posting notifications.
-     * Don't call this on the UI thread.
-     * @param silent If true, no ring will be played. If false, checks global settings before
-     * playing a ringtone
-     * @param coverage Indicates which notification types should be checked. Valid values are
-     * UPDATE_NONE, UPDATE_MESSAGES, UPDATE_ERRORS, or UPDATE_ALL
-     */
-    public static void update(final boolean silent, final int coverage) {
-        update(silent, null /* conversationId */, coverage);
-    }
-
-    /**
-     * Entry point for posting notifications.
-     * Don't call this on the UI thread.
-     * @param silent If true, no ring will be played. If false, checks global settings before
-     * playing a ringtone
-     * @param conversationId Conversation ID where a new message was received
-     * @param coverage Indicates which notification types should be checked. Valid values are
-     * UPDATE_NONE, UPDATE_MESSAGES, UPDATE_ERRORS, or UPDATE_ALL
-     */
-    public static void update(final boolean silent, final String conversationId,
-            final int coverage) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "Update: silent = " + silent
-                    + " conversationId = " + conversationId
-                    + " coverage = " + coverage);
-        }
-    Assert.isNotMainThread();
-        checkInitialized();
-
-        if (!shouldNotify()) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "Notifications disabled");
-            }
-            cancel(PendingIntentConstants.SMS_NOTIFICATION_ID);
-            return;
-        } else {
-            if ((coverage & UPDATE_MESSAGES) != 0) {
-                createMessageNotification(silent, conversationId);
-            }
-        }
-        if ((coverage & UPDATE_ERRORS) != 0) {
-            MessageNotificationState.checkFailedMessages();
-        }
-    }
-
-    /**
-     * Cancel all notifications of a certain type.
-     *
-     * @param type Message or error notifications from Constants.
-     */
-    private static synchronized void cancel(final int type) {
-        cancel(type, null, false);
-    }
-
-    /**
-     * Cancel all notifications of a certain type.
-     *
-     * @param type Message or error notifications from Constants.
-     * @param conversationId If set, cancel the notification for this
-     *            conversation only. For message notifications, this only works
-     *            if the notifications are bundled (group children).
-     * @param isBundledNotification True if this notification is part of a
-     *            notification bundle. This only applies to message notifications,
-     *            which are bundled together with other message notifications.
-     */
-    private static synchronized void cancel(final int type, final String conversationId,
-            final boolean isBundledNotification) {
-        final String notificationTag = buildNotificationTag(type, conversationId,
-                isBundledNotification);
-        final NotificationManagerCompat notificationManager =
-                NotificationManagerCompat.from(Factory.get().getApplicationContext());
-
-        // Find all pending notifications and cancel them.
-        synchronized (sPendingNotifications) {
-            final Iterator<NotificationState> iter = sPendingNotifications.iterator();
-            while (iter.hasNext()) {
-                final NotificationState notifState = iter.next();
-                if (notifState.mType == type) {
-                    notifState.mCanceled = true;
-                    if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                        LogUtil.v(TAG, "Canceling pending notification");
-                    }
-                    iter.remove();
-                }
-            }
-        }
-        notificationManager.cancel(notificationTag, type);
-        if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "Canceled notifications of type " + type);
-        }
-
-        // Message notifications for multiple conversations can be grouped together (see comment in
-        // createMessageNotification). We need to do bookkeeping to track the current set of
-        // notification group children, including removing them when we cancel notifications).
-        if (type == PendingIntentConstants.SMS_NOTIFICATION_ID) {
-            final Context context = Factory.get().getApplicationContext();
-            final ConversationIdSet groupChildIds = getGroupChildIds(context);
-
-            if (groupChildIds != null && groupChildIds.size() > 0) {
-                // If a conversation is specified, remove just that notification. Otherwise,
-                // we're removing the group summary so clear all children.
-                if (conversationId != null) {
-                    groupChildIds.remove(conversationId);
-                    writeGroupChildIds(context, groupChildIds);
-                } else {
-                    cancelStaleGroupChildren(groupChildIds, null);
-                    // We'll update the group children preference as we cancel each child,
-                    // so we don't need to do it here.
-                }
-            }
-        }
-    }
-
-    /**
-     * Cancels stale notifications from the currently active group of
-     * notifications. If the {@code state} parameter is an instance of
-     * {@link MultiConversationNotificationState} it represents a new
-     * notification group. This method will cancel any notifications that were
-     * in the old group, but not the new one. If the new notification is not a
-     * group, then all existing grouped notifications are cancelled.
-     *
-     * @param previousGroupChildren Conversation ids for the active notification
-     *            group
-     * @param state New notification state
-     */
-    private static void cancelStaleGroupChildren(final ConversationIdSet previousGroupChildren,
-            final NotificationState state) {
-        final ConversationIdSet newChildren = new ConversationIdSet();
-        if (state instanceof MultiConversationNotificationState) {
-            for (final NotificationState child :
-                ((MultiConversationNotificationState) state).mChildren) {
-                if (child.mConversationIds != null) {
-                    newChildren.add(child.mConversationIds.first());
-                }
-            }
-        }
-        for (final String childConversationId : previousGroupChildren) {
-            if (!newChildren.contains(childConversationId)) {
-                cancel(PendingIntentConstants.SMS_NOTIFICATION_ID, childConversationId, true);
-            }
-        }
-    }
-
-    /**
-     * Returns {@code true} if incoming notifications should display a
-     * notification, {@code false} otherwise.
-     *
-     * @return true if the notification should occur
-     */
-    private static boolean shouldNotify() {
-        // If we're not the default sms app, don't put up any notifications.
-        if (!PhoneUtils.getDefault().isDefaultSmsApp()) {
-            return false;
-        }
-
-        // Now check prefs (i.e. settings) to see if the user turned off notifications.
-        final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-        final Context context = Factory.get().getApplicationContext();
-        final String prefKey = context.getString(R.string.notifications_enabled_pref_key);
-        final boolean defaultValue = context.getResources().getBoolean(
-                R.bool.notifications_enabled_pref_default);
-        return prefs.getBoolean(prefKey, defaultValue);
-    }
-
-    /**
-     * Returns {@code true} if incoming notifications for the given {@link NotificationState}
-     * should vibrate the device, {@code false} otherwise.
-     *
-     * @return true if vibration should be used
-     */
-    public static boolean shouldVibrate(final NotificationState state) {
-        // The notification should vibrate if the global setting is turned on AND
-        // the per-conversation setting is turned on (default).
-        if (!state.getNotificationVibrate()) {
-            return false;
-        } else {
-            final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-            final Context context = Factory.get().getApplicationContext();
-            final String prefKey = context.getString(R.string.notification_vibration_pref_key);
-            final boolean defaultValue = context.getResources().getBoolean(
-                    R.bool.notification_vibration_pref_default);
-            return prefs.getBoolean(prefKey, defaultValue);
-        }
-    }
-
-    private static Uri getNotificationRingtoneUriForConversationId(final String conversationId) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final ConversationListItemData convData =
-                ConversationListItemData.getExistingConversation(db, conversationId);
-        return RingtoneUtil.getNotificationRingtoneUri(
-                convData != null ? convData.getNotificationSoundUri() : null);
-    }
-
-    /**
-     * Returns a unique tag to identify a notification.
-     *
-     * @param name The tag name (in practice, the type)
-     * @param conversationId The conversation id (optional)
-     */
-    private static String buildNotificationTag(final String name,
-            final String conversationId) {
-        final Context context = Factory.get().getApplicationContext();
-        if (conversationId != null) {
-            return context.getPackageName() + name + ":" + conversationId;
-        } else {
-            return context.getPackageName() + name;
-        }
-    }
-
-    /**
-     * Returns a unique tag to identify a notification.
-     * <p>
-     * This delegates to
-     * {@link #buildNotificationTag(int, String, boolean)} and can be
-     * used when the notification is never bundled (e.g. error notifications).
-     */
-    static String buildNotificationTag(final int type, final String conversationId) {
-        return buildNotificationTag(type, conversationId, false /* bundledNotification */);
-    }
-
-    /**
-     * Returns a unique tag to identify a notification.
-     *
-     * @param type One of the constants in {@link PendingIntentConstants}
-     * @param conversationId The conversation id (where applicable)
-     * @param bundledNotification Set to true if this notification will be
-     *            bundled together with other notifications (e.g. on a wearable
-     *            device).
-     */
-    static String buildNotificationTag(final int type, final String conversationId,
-            final boolean bundledNotification) {
-        String tag = null;
-        switch(type) {
-            case PendingIntentConstants.SMS_NOTIFICATION_ID:
-                if (bundledNotification) {
-                    tag = buildNotificationTag(SMS_NOTIFICATION_TAG, conversationId);
-                } else {
-                    tag = buildNotificationTag(SMS_NOTIFICATION_TAG, null);
-                }
-                break;
-            case PendingIntentConstants.MSG_SEND_ERROR:
-                tag = buildNotificationTag(SMS_ERROR_NOTIFICATION_TAG, null);
-                break;
-        }
-        return tag;
-    }
-
-    private static void checkInitialized() {
-        if (!sInitialized) {
-            final Resources resources = Factory.get().getApplicationContext().getResources();
-            sWearableImageWidth = resources.getDimensionPixelSize(
-                    R.dimen.notification_wearable_image_width);
-            sWearableImageHeight = resources.getDimensionPixelSize(
-                    R.dimen.notification_wearable_image_height);
-            sIconHeight = (int) resources.getDimension(
-                    android.R.dimen.notification_large_icon_height);
-            sIconWidth =
-                    (int) resources.getDimension(android.R.dimen.notification_large_icon_width);
-
-            sInitialized = true;
-        }
-    }
-
-    private static void processAndSend(final NotificationState state, final boolean silent,
-            final boolean softSound) {
-        final Context context = Factory.get().getApplicationContext();
-        final NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(context);
-        notifBuilder.setCategory(Notification.CATEGORY_MESSAGE);
-        // TODO: Need to fix this for multi conversation notifications to rate limit dings.
-        final String conversationId = state.mConversationIds.first();
-
-
-        final Uri ringtoneUri = RingtoneUtil.getNotificationRingtoneUri(state.getRingtoneUri());
-        // If the notification's conversation is currently observable (focused or in the
-        // conversation list),  then play a notification beep at a low volume and don't display an
-        // actual notification.
-        if (softSound) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "processAndSend: fromConversationId == " +
-                        "sCurrentlyDisplayedConversationId so NOT showing notification," +
-                        " but playing soft sound. conversationId: " + conversationId);
-            }
-            playObservableConversationNotificationSound(ringtoneUri);
-            return;
-        }
-        state.mBaseRequestCode = state.mType;
-
-        // Set the delete intent (except for bundled wearable notifications, which are dismissed
-        // as a group, either from the wearable or when the summary notification is dismissed from
-        // the host device).
-        if (!(state instanceof BundledMessageNotificationState)) {
-            final PendingIntent clearIntent = state.getClearIntent();
-            notifBuilder.setDeleteIntent(clearIntent);
-        }
-
-        updateBuilderAudioVibrate(state, notifBuilder, silent, ringtoneUri, conversationId);
-
-        // Set the content intent
-        PendingIntent destinationIntent;
-        if (state.mConversationIds.size() > 1) {
-            // We have notifications for multiple conversation, go to the conversation list.
-            destinationIntent = UIIntents.get()
-                .getPendingIntentForConversationListActivity(context);
-        } else {
-            // We have a single conversation, go directly to that conversation.
-            destinationIntent = UIIntents.get()
-                    .getPendingIntentForConversationActivity(context,
-                            state.mConversationIds.first(),
-                            null /*draft*/);
-        }
-        notifBuilder.setContentIntent(destinationIntent);
-
-        // TODO: set based on contact coming from a favorite.
-        notifBuilder.setPriority(state.getPriority());
-
-        // Save the state of the notification in-progress so when the avatar is loaded,
-        // we can continue building the notification.
-        final NotificationCompat.Style notifStyle = state.build(notifBuilder);
-        state.mNotificationBuilder = notifBuilder;
-        state.mNotificationStyle = notifStyle;
-        if (!state.mPeople.isEmpty()) {
-            final Bundle people = new Bundle();
-            people.putStringArray(NotificationCompat.EXTRA_PEOPLE,
-                    state.mPeople.toArray(new String[state.mPeople.size()]));
-            notifBuilder.addExtras(people);
-        }
-
-        if (state.mParticipantAvatarsUris != null) {
-            final Uri avatarUri = state.mParticipantAvatarsUris.get(0);
-            final AvatarRequestDescriptor descriptor = new AvatarRequestDescriptor(avatarUri,
-                    sIconWidth, sIconHeight, OsUtil.isAtLeastL());
-            final MediaRequest<ImageResource> imageRequest = descriptor.buildSyncMediaRequest(
-                    context);
-
-            synchronized (sPendingNotifications) {
-                sPendingNotifications.add(state);
-            }
-
-            // Synchronously load the avatar.
-            final ImageResource avatarImage =
-                    MediaResourceManager.get().requestMediaResourceSync(imageRequest);
-            if (avatarImage != null) {
-                ImageResource avatarHiRes = null;
-                try {
-                    if (isWearCompanionAppInstalled()) {
-                        // For Wear users, we need to request a high-res avatar image to use as the
-                        // notification card background. If the sender has a contact photo, we'll
-                        // request the display photo from the Contacts provider. Otherwise, we ask
-                        // the local content provider for a hi-res version of the generic avatar
-                        // (e.g. letter with colored background).
-                        avatarHiRes = requestContactDisplayPhoto(context,
-                                getDisplayPhotoUri(avatarUri));
-                        if (avatarHiRes == null) {
-                            final AvatarRequestDescriptor hiResDesc =
-                                    new AvatarRequestDescriptor(avatarUri,
-                                    sWearableImageWidth,
-                                    sWearableImageHeight,
-                                    false /* cropToCircle */,
-                                    true /* isWearBackground */);
-                            avatarHiRes = MediaResourceManager.get().requestMediaResourceSync(
-                                    hiResDesc.buildSyncMediaRequest(context));
-                        }
-                    }
-
-                    // We have to make copies of the bitmaps to hand to the NotificationManager
-                    // because the bitmap in the ImageResource is managed and will automatically
-                    // get released.
-                    Bitmap avatarBitmap = Bitmap.createBitmap(avatarImage.getBitmap());
-                    Bitmap avatarHiResBitmap = (avatarHiRes != null) ?
-                            Bitmap.createBitmap(avatarHiRes.getBitmap()) : null;
-                    sendNotification(state, avatarBitmap, avatarHiResBitmap);
-                    return;
-                } finally {
-                    avatarImage.release();
-                    if (avatarHiRes != null) {
-                        avatarHiRes.release();
-                    }
-                }
-            }
-        }
-        // We have no avatar. Post the notification anyway.
-        sendNotification(state, null, null);
-    }
-
-    /**
-     * Returns the thumbnailUri from the avatar URI, or null if avatar URI does not have thumbnail.
-     */
-    private static Uri getThumbnailUri(final Uri avatarUri) {
-        Uri localUri = null;
-        final String avatarType = AvatarUriUtil.getAvatarType(avatarUri);
-        if (TextUtils.equals(avatarType, AvatarUriUtil.TYPE_LOCAL_RESOURCE_URI)) {
-            localUri = AvatarUriUtil.getPrimaryUri(avatarUri);
-        } else if (UriUtil.isLocalResourceUri(avatarUri)) {
-            localUri = avatarUri;
-        }
-        if (localUri != null && localUri.getAuthority().equals(ContactsContract.AUTHORITY)) {
-            // Contact photos are of the form: content://com.android.contacts/contacts/123/photo
-            final List<String> pathParts = localUri.getPathSegments();
-            if (pathParts.size() == 3 &&
-                    pathParts.get(2).equals(Contacts.Photo.CONTENT_DIRECTORY)) {
-                return localUri;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns the displayPhotoUri from the avatar URI, or null if avatar URI
-     * does not have a displayPhotoUri.
-     */
-    private static Uri getDisplayPhotoUri(final Uri avatarUri) {
-        final Uri thumbnailUri = getThumbnailUri(avatarUri);
-        if (thumbnailUri == null) {
-            return null;
-        }
-        final List<String> originalPaths = thumbnailUri.getPathSegments();
-        final int originalPathsSize = originalPaths.size();
-        final StringBuilder newPathBuilder = new StringBuilder();
-        // Change content://com.android.contacts/contacts("_corp")/123/photo to
-        // content://com.android.contacts/contacts("_corp")/123/display_photo
-        for (int i = 0; i < originalPathsSize; i++) {
-            newPathBuilder.append('/');
-            if (i == 2) {
-                newPathBuilder.append(ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
-            } else {
-                newPathBuilder.append(originalPaths.get(i));
-            }
-        }
-        return thumbnailUri.buildUpon().path(newPathBuilder.toString()).build();
-    }
-
-    private static ImageResource requestContactDisplayPhoto(final Context context,
-            final Uri displayPhotoUri) {
-        final UriImageRequestDescriptor bgDescriptor =
-                new UriImageRequestDescriptor(displayPhotoUri,
-                        sWearableImageWidth,
-                        sWearableImageHeight,
-                        false, /* allowCompression */
-                        true, /* isStatic */
-                        false /* cropToCircle */,
-                        ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                        ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
-        return MediaResourceManager.get().requestMediaResourceSync(
-                bgDescriptor.buildSyncMediaRequest(context));
-    }
-
-    private static void createMessageNotification(final boolean silent,
-            final String conversationId) {
-        final NotificationState state = MessageNotificationState.getNotificationState();
-        final boolean softSound = DataModel.get().isNewMessageObservable(conversationId);
-        if (state == null) {
-            cancel(PendingIntentConstants.SMS_NOTIFICATION_ID);
-            if (softSound && !TextUtils.isEmpty(conversationId)) {
-                final Uri ringtoneUri = getNotificationRingtoneUriForConversationId(conversationId);
-                playObservableConversationNotificationSound(ringtoneUri);
-            }
-            return;
-        }
-        processAndSend(state, silent, softSound);
-
-        // The rest of the logic here is for supporting Android Wear devices, specifically for when
-        // we are notifying about multiple conversations. In that case, the Inbox-style summary
-        // notification (which we already processed above) appears on the phone (as it always has),
-        // but wearables show per-conversation notifications, bundled together in a group.
-
-        // It is valid to replace a notification group with another group with fewer conversations,
-        // or even with one notification for a single conversation. In either case, we need to
-        // explicitly cancel any children from the old group which are not being notified about now.
-        final Context context = Factory.get().getApplicationContext();
-        final ConversationIdSet oldGroupChildIds = getGroupChildIds(context);
-        if (oldGroupChildIds != null && oldGroupChildIds.size() > 0) {
-            cancelStaleGroupChildren(oldGroupChildIds, state);
-        }
-
-        // Send per-conversation notifications (if there are multiple conversations).
-        final ConversationIdSet groupChildIds = new ConversationIdSet();
-        if (state instanceof MultiConversationNotificationState) {
-            for (final NotificationState child :
-                ((MultiConversationNotificationState) state).mChildren) {
-                processAndSend(child, true /* silent */, softSound);
-                if (child.mConversationIds != null) {
-                    groupChildIds.add(child.mConversationIds.first());
-                }
-            }
-        }
-
-        // Record the new set of group children.
-        writeGroupChildIds(context, groupChildIds);
-    }
-
-    private static void updateBuilderAudioVibrate(final NotificationState state,
-            final NotificationCompat.Builder notifBuilder, final boolean silent,
-            final Uri ringtoneUri, final String conversationId) {
-        int defaults = Notification.DEFAULT_LIGHTS;
-        if (!silent) {
-            final BuglePrefs prefs = Factory.get().getApplicationPrefs();
-            final long latestNotificationTimestamp = prefs.getLong(
-                    BuglePrefsKeys.LATEST_NOTIFICATION_MESSAGE_TIMESTAMP, Long.MIN_VALUE);
-            final long latestReceivedTimestamp = state.getLatestReceivedTimestamp();
-            prefs.putLong(
-                    BuglePrefsKeys.LATEST_NOTIFICATION_MESSAGE_TIMESTAMP,
-                    Math.max(latestNotificationTimestamp, latestReceivedTimestamp));
-            if (latestReceivedTimestamp > latestNotificationTimestamp) {
-                synchronized (mLock) {
-                    // Find out the last time we dinged for this conversation
-                    Long lastTime = sLastMessageDingTime.get(conversationId);
-                    if (sTimeBetweenDingsMs == 0) {
-                        sTimeBetweenDingsMs = BugleGservices.get().getInt(
-                                BugleGservicesKeys.NOTIFICATION_TIME_BETWEEN_RINGS_SECONDS,
-                                BugleGservicesKeys.NOTIFICATION_TIME_BETWEEN_RINGS_SECONDS_DEFAULT) *
-                                    1000;
-                    }
-                    if (lastTime == null
-                            || SystemClock.elapsedRealtime() - lastTime > sTimeBetweenDingsMs) {
-                        sLastMessageDingTime.put(conversationId, SystemClock.elapsedRealtime());
-                        notifBuilder.setSound(ringtoneUri);
-                        if (shouldVibrate(state)) {
-                            defaults |= Notification.DEFAULT_VIBRATE;
-                        }
-                    }
-                }
-            }
-        }
-        notifBuilder.setDefaults(defaults);
-    }
-
-    // TODO: this doesn't seem to be defined in NotificationCompat yet. Temporarily
-    // define it here until it makes its way from Notification -> NotificationCompat.
-    /**
-     * Notification category: incoming direct message (SMS, instant message, etc.).
-     */
-    private static final String CATEGORY_MESSAGE = "msg";
-
-    private static void sendNotification(final NotificationState notificationState,
-            final Bitmap avatarIcon, final Bitmap avatarHiRes) {
-        final Context context = Factory.get().getApplicationContext();
-        if (notificationState.mCanceled) {
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "sendNotification: Notification already cancelled; dropping it");
-            }
-            return;
-        }
-
-        synchronized (sPendingNotifications) {
-            if (sPendingNotifications.contains(notificationState)) {
-                sPendingNotifications.remove(notificationState);
-            }
-        }
-
-        notificationState.mNotificationBuilder
-            .setSmallIcon(notificationState.getIcon())
-            .setVisibility(NotificationCompat.VISIBILITY_PRIVATE)
-            .setColor(context.getResources().getColor(R.color.notification_accent_color))
-//            .setPublicVersion(null)    // TODO: when/if we ever support different
-                                         // text on the lockscreen, instead of "contents hidden"
-            .setCategory(CATEGORY_MESSAGE);
-
-        if (avatarIcon != null) {
-            notificationState.mNotificationBuilder.setLargeIcon(avatarIcon);
-        }
-
-        if (notificationState.mParticipantContactUris != null &&
-                notificationState.mParticipantContactUris.size() > 0) {
-            for (final Uri contactUri : notificationState.mParticipantContactUris) {
-                notificationState.mNotificationBuilder.addPerson(contactUri.toString());
-            }
-        }
-
-        final Uri attachmentUri = notificationState.getAttachmentUri();
-        final String attachmentType = notificationState.getAttachmentType();
-        Bitmap attachmentBitmap = null;
-
-        // For messages with photo/video attachment, request an image to show in the notification.
-        if (attachmentUri != null && notificationState.mNotificationStyle != null &&
-                (notificationState.mNotificationStyle instanceof
-                        NotificationCompat.BigPictureStyle) &&
-                        (ContentType.isImageType(attachmentType) ||
-                                ContentType.isVideoType(attachmentType))) {
-            final boolean isVideo = ContentType.isVideoType(attachmentType);
-
-            MediaRequest<ImageResource> imageRequest;
-            if (isVideo) {
-                Assert.isTrue(VideoThumbnailRequest.shouldShowIncomingVideoThumbnails());
-                final MessagePartVideoThumbnailRequestDescriptor videoDescriptor =
-                        new MessagePartVideoThumbnailRequestDescriptor(attachmentUri);
-                imageRequest = videoDescriptor.buildSyncMediaRequest(context);
-            } else {
-                final UriImageRequestDescriptor imageDescriptor =
-                        new UriImageRequestDescriptor(attachmentUri,
-                            sWearableImageWidth,
-                            sWearableImageHeight,
-                            false /* allowCompression */,
-                            true /* isStatic */,
-                            false /* cropToCircle */,
-                            ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                            ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
-                imageRequest = imageDescriptor.buildSyncMediaRequest(context);
-            }
-            final ImageResource imageResource =
-                    MediaResourceManager.get().requestMediaResourceSync(imageRequest);
-            if (imageResource != null) {
-                try {
-                    // Copy the bitmap, because the one in the ImageResource is managed by
-                    // MediaResourceManager.
-                    Bitmap imageResourceBitmap = imageResource.getBitmap();
-                    Config config = imageResourceBitmap.getConfig();
-
-                    // Make sure our bitmap has a valid format.
-                    if (config == null) {
-                        config = Bitmap.Config.ARGB_8888;
-                    }
-                    attachmentBitmap = imageResourceBitmap.copy(config, true);
-                } finally {
-                    imageResource.release();
-                }
-            }
-        }
-
-        fireOffNotification(notificationState, attachmentBitmap, avatarIcon, avatarHiRes);
-    }
-
-    private static void fireOffNotification(final NotificationState notificationState,
-            final Bitmap attachmentBitmap, final Bitmap avatarBitmap, Bitmap avatarHiResBitmap) {
-        if (notificationState.mCanceled) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "Firing off notification, but notification already canceled");
-            }
-            return;
-        }
-
-        final Context context = Factory.get().getApplicationContext();
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "MMS picture loaded, bitmap: " + attachmentBitmap);
-        }
-
-        final NotificationCompat.Builder notifBuilder = notificationState.mNotificationBuilder;
-        notifBuilder.setStyle(notificationState.mNotificationStyle);
-        notifBuilder.setColor(context.getResources().getColor(R.color.notification_accent_color));
-
-        final WearableExtender wearableExtender = new WearableExtender();
-        setWearableGroupOptions(notifBuilder, notificationState);
-
-        if (avatarHiResBitmap != null) {
-            wearableExtender.setBackground(avatarHiResBitmap);
-        } else if (avatarBitmap != null) {
-            // Nothing to do here; we already set avatarBitmap as the notification icon
-        } else {
-            final Bitmap defaultBackground = BitmapFactory.decodeResource(
-                    context.getResources(), R.drawable.bg_sms);
-            wearableExtender.setBackground(defaultBackground);
-        }
-
-        if (notificationState instanceof MultiMessageNotificationState) {
-            if (attachmentBitmap != null) {
-                // When we've got a picture attachment, we do some switcheroo trickery. When
-                // the notification is expanded, we show the picture as a bigPicture. The small
-                // icon shows the sender's avatar. When that same notification is collapsed, the
-                // picture is shown in the location where the avatar is normally shown. The lines
-                // below make all that happen.
-
-                // Here we're taking the picture attachment and making a small, scaled, center
-                // cropped version of the picture we can stuff into the place where the avatar
-                // goes when the notification is collapsed.
-                final Bitmap smallBitmap = ImageUtils.scaleCenterCrop(attachmentBitmap, sIconWidth,
-                        sIconHeight);
-                ((NotificationCompat.BigPictureStyle) notificationState.mNotificationStyle)
-                    .bigPicture(attachmentBitmap)
-                    .bigLargeIcon(avatarBitmap);
-                notificationState.mNotificationBuilder.setLargeIcon(smallBitmap);
-
-                // Add a wearable page with no visible card so you can more easily see the photo.
-                final NotificationCompat.Builder photoPageNotifBuilder =
-                        new NotificationCompat.Builder(Factory.get().getApplicationContext());
-                final WearableExtender photoPageWearableExtender = new WearableExtender();
-                photoPageWearableExtender.setHintShowBackgroundOnly(true);
-                if (attachmentBitmap != null) {
-                    final Bitmap wearBitmap = ImageUtils.scaleCenterCrop(attachmentBitmap,
-                            sWearableImageWidth, sWearableImageHeight);
-                    photoPageWearableExtender.setBackground(wearBitmap);
-                }
-                photoPageNotifBuilder.extend(photoPageWearableExtender);
-                wearableExtender.addPage(photoPageNotifBuilder.build());
-            }
-
-            maybeAddWearableConversationLog(wearableExtender,
-                    (MultiMessageNotificationState) notificationState);
-            addDownloadMmsAction(notifBuilder, wearableExtender, notificationState);
-            addWearableVoiceReplyAction(wearableExtender, notificationState);
-        }
-
-        // Apply the wearable options and build & post the notification
-        notifBuilder.extend(wearableExtender);
-        doNotify(notifBuilder.build(), notificationState);
-    }
-
-    private static void setWearableGroupOptions(final NotificationCompat.Builder notifBuilder,
-            final NotificationState notificationState) {
-        final String groupKey = "groupkey";
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "Group key (for wearables)=" + groupKey);
-        }
-        if (notificationState instanceof MultiConversationNotificationState) {
-            notifBuilder.setGroup(groupKey).setGroupSummary(true);
-        } else if (notificationState instanceof BundledMessageNotificationState) {
-            final int order = ((BundledMessageNotificationState) notificationState).mGroupOrder;
-            // Convert the order to a zero-padded string ("00", "01", "02", etc).
-            // The Wear library orders notifications within a bundle lexicographically
-            // by the sort key, hence the need for zeroes to preserve the ordering.
-            final String sortKey = String.format(Locale.US, "%02d", order);
-            notifBuilder.setGroup(groupKey).setSortKey(sortKey);
-        }
-    }
-
-    private static void maybeAddWearableConversationLog(
-            final WearableExtender wearableExtender,
-            final MultiMessageNotificationState notificationState) {
-        if (!isWearCompanionAppInstalled()) {
-            return;
-        }
-        final String convId = notificationState.mConversationIds.first();
-        ConversationLineInfo convInfo = notificationState.mConvList.mConvInfos.get(0);
-        final Notification page = MessageNotificationState.buildConversationPageForWearable(
-                convId,
-                convInfo.mParticipantCount);
-        if (page != null) {
-            wearableExtender.addPage(page);
-        }
-    }
-
-    private static void addWearableVoiceReplyAction(
-            final WearableExtender wearableExtender, final NotificationState notificationState) {
-        if (!(notificationState instanceof MultiMessageNotificationState)) {
-            return;
-        }
-        final MultiMessageNotificationState multiMessageNotificationState =
-                (MultiMessageNotificationState) notificationState;
-        final Context context = Factory.get().getApplicationContext();
-
-        final String conversationId = notificationState.mConversationIds.first();
-        final ConversationLineInfo convInfo =
-                multiMessageNotificationState.mConvList.mConvInfos.get(0);
-        final String selfId = convInfo.mSelfParticipantId;
-
-        final boolean requiresMms =
-                MmsSmsUtils.getRequireMmsForEmailAddress(
-                        convInfo.mIncludeEmailAddress, convInfo.mSubId) ||
-                (convInfo.mIsGroup && MmsUtils.groupMmsEnabled(convInfo.mSubId));
-
-        final int requestCode = multiMessageNotificationState.getReplyIntentRequestCode();
-        final PendingIntent replyPendingIntent = UIIntents.get()
-                .getPendingIntentForSendingMessageToConversation(context,
-                        conversationId, selfId, requiresMms, requestCode);
-
-        final int replyLabelRes = requiresMms ? R.string.notification_reply_via_mms :
-            R.string.notification_reply_via_sms;
-
-        final NotificationCompat.Action.Builder actionBuilder =
-                new NotificationCompat.Action.Builder(R.drawable.ic_wear_reply,
-                        context.getString(replyLabelRes), replyPendingIntent);
-        final String[] choices = context.getResources().getStringArray(
-                R.array.notification_reply_choices);
-        final RemoteInput remoteInput = new RemoteInput.Builder(Intent.EXTRA_TEXT).setLabel(
-                context.getString(R.string.notification_reply_prompt)).
-                setChoices(choices)
-                .build();
-        actionBuilder.addRemoteInput(remoteInput);
-        wearableExtender.addAction(actionBuilder.build());
-    }
-
-    private static void addDownloadMmsAction(final NotificationCompat.Builder notifBuilder,
-            final WearableExtender wearableExtender, final NotificationState notificationState) {
-        if (!(notificationState instanceof MultiMessageNotificationState)) {
-            return;
-        }
-        final MultiMessageNotificationState multiMessageNotificationState =
-                (MultiMessageNotificationState) notificationState;
-        final ConversationLineInfo convInfo =
-                multiMessageNotificationState.mConvList.mConvInfos.get(0);
-        if (!convInfo.getDoesLatestMessageNeedDownload()) {
-            return;
-        }
-        final String messageId = convInfo.getLatestMessageId();
-        if (messageId == null) {
-            // No message Id, no download for you
-            return;
-        }
-        final Context context = Factory.get().getApplicationContext();
-        final PendingIntent downloadPendingIntent =
-                RedownloadMmsAction.getPendingIntentForRedownloadMms(context, messageId);
-
-        final NotificationCompat.Action.Builder actionBuilder =
-                new NotificationCompat.Action.Builder(R.drawable.ic_file_download_light,
-                        context.getString(R.string.notification_download_mms),
-                        downloadPendingIntent);
-        final NotificationCompat.Action downloadAction = actionBuilder.build();
-        notifBuilder.addAction(downloadAction);
-
-        // Support the action on a wearable device as well
-        wearableExtender.addAction(downloadAction);
-    }
-
-    private static synchronized void doNotify(final Notification notification,
-            final NotificationState notificationState) {
-        if (notification == null) {
-            return;
-        }
-        final int type = notificationState.mType;
-        final ConversationIdSet conversationIds = notificationState.mConversationIds;
-        final boolean isBundledNotification =
-                (notificationState instanceof BundledMessageNotificationState);
-
-        // Mark the notification as finished
-        notificationState.mCanceled = true;
-
-        final NotificationManagerCompat notificationManager =
-                NotificationManagerCompat.from(Factory.get().getApplicationContext());
-        // Only need conversationId for tags with a single conversation.
-        String conversationId = null;
-        if (conversationIds != null && conversationIds.size() == 1) {
-            conversationId = conversationIds.first();
-        }
-        final String notificationTag = buildNotificationTag(type,
-                conversationId, isBundledNotification);
-
-        notification.flags |= Notification.FLAG_AUTO_CANCEL;
-        notification.defaults |= Notification.DEFAULT_LIGHTS;
-
-        notificationManager.notify(notificationTag, type, notification);
-
-        LogUtil.i(TAG, "Notifying for conversation " + conversationId + "; "
-                + "tag = " + notificationTag + ", type = " + type);
-    }
-
-    // This is the message string used in each line of an inboxStyle notification.
-    // TODO: add attachment type
-    static CharSequence formatInboxMessage(final String sender,
-            final CharSequence message, final Uri attachmentUri, final String attachmentType) {
-      final Context context = Factory.get().getApplicationContext();
-      final TextAppearanceSpan notificationSenderSpan = new TextAppearanceSpan(
-              context, R.style.NotificationSenderText);
-
-      final TextAppearanceSpan notificationTertiaryText = new TextAppearanceSpan(
-              context, R.style.NotificationTertiaryText);
-
-      final SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
-      if (!TextUtils.isEmpty(sender)) {
-          spannableStringBuilder.append(sender);
-          spannableStringBuilder.setSpan(notificationSenderSpan, 0, sender.length(), 0);
-      }
-      final String separator = context.getString(R.string.notification_separator);
-
-      if (!TextUtils.isEmpty(message)) {
-          if (spannableStringBuilder.length() > 0) {
-              spannableStringBuilder.append(separator);
-          }
-          final int start = spannableStringBuilder.length();
-          spannableStringBuilder.append(message);
-          spannableStringBuilder.setSpan(notificationTertiaryText, start,
-                  start + message.length(), 0);
-      }
-      if (attachmentUri != null) {
-          if (spannableStringBuilder.length() > 0) {
-              spannableStringBuilder.append(separator);
-          }
-          spannableStringBuilder.append(formatAttachmentTag(null, attachmentType));
-      }
-      return spannableStringBuilder;
-    }
-
-    protected static CharSequence buildColonSeparatedMessage(
-            final String title, final CharSequence content, final Uri attachmentUri,
-            final String attachmentType) {
-        return buildBoldedMessage(title, content, attachmentUri, attachmentType,
-                R.string.notification_ticker_separator);
-    }
-
-    protected static CharSequence buildSpaceSeparatedMessage(
-            final String title, final CharSequence content, final Uri attachmentUri,
-            final String attachmentType) {
-        return buildBoldedMessage(title, content, attachmentUri, attachmentType,
-                R.string.notification_space_separator);
-    }
-
-    /**
-     * buildBoldedMessage - build a formatted message where the title is bold, there's a
-     * separator, then the message.
-     */
-    private static CharSequence buildBoldedMessage(
-            final String title, final CharSequence message, final Uri attachmentUri,
-            final String attachmentType,
-            final int separatorId) {
-        final Context context = Factory.get().getApplicationContext();
-        final SpannableStringBuilder spanBuilder = new SpannableStringBuilder();
-
-        // Boldify the title (which is the sender's name)
-        if (!TextUtils.isEmpty(title)) {
-            spanBuilder.append(title);
-            spanBuilder.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length(),
-                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-        }
-        if (!TextUtils.isEmpty(message)) {
-            if (spanBuilder.length() > 0) {
-                spanBuilder.append(context.getString(separatorId));
-            }
-            spanBuilder.append(message);
-        }
-        if (attachmentUri != null) {
-            if (spanBuilder.length() > 0) {
-                final String separator = context.getString(R.string.notification_separator);
-                spanBuilder.append(separator);
-            }
-            spanBuilder.append(formatAttachmentTag(null, attachmentType));
-        }
-        return spanBuilder;
-    }
-
-    static CharSequence formatAttachmentTag(final String author, final String attachmentType) {
-        final Context context = Factory.get().getApplicationContext();
-            final TextAppearanceSpan notificationSecondaryText = new TextAppearanceSpan(
-                    context, R.style.NotificationSecondaryText);
-        final SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
-        if (!TextUtils.isEmpty(author)) {
-            final TextAppearanceSpan notificationSenderSpan = new TextAppearanceSpan(
-                    context, R.style.NotificationSenderText);
-            spannableStringBuilder.append(author);
-            spannableStringBuilder.setSpan(notificationSenderSpan, 0, author.length(), 0);
-            final String separator = context.getString(R.string.notification_separator);
-            spannableStringBuilder.append(separator);
-        }
-        final int start = spannableStringBuilder.length();
-        // The default attachment type is an image, since that's what was originally
-        // supported. When there's no content type, assume it's an image.
-        int message = R.string.notification_picture;
-        if (ContentType.isAudioType(attachmentType)) {
-            message = R.string.notification_audio;
-        } else if (ContentType.isVideoType(attachmentType)) {
-            message = R.string.notification_video;
-        } else if (ContentType.isVCardType(attachmentType)) {
-            message = R.string.notification_vcard;
-        }
-        spannableStringBuilder.append(context.getText(message));
-        spannableStringBuilder.setSpan(notificationSecondaryText, start,
-                spannableStringBuilder.length(), 0);
-        return spannableStringBuilder;
-    }
-
-    /**
-     * Play the observable conversation notification sound (it's the regular notification sound, but
-     * played at half-volume)
-     */
-    private static void playObservableConversationNotificationSound(final Uri ringtoneUri) {
-        final Context context = Factory.get().getApplicationContext();
-        final AudioManager audioManager = (AudioManager) context
-                .getSystemService(Context.AUDIO_SERVICE);
-        final boolean silenced =
-                audioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
-        if (silenced) {
-             return;
-        }
-
-        final NotificationPlayer player = new NotificationPlayer(LogUtil.BUGLE_TAG);
-        player.play(ringtoneUri, false,
-                AudioManager.STREAM_NOTIFICATION,
-                OBSERVABLE_CONVERSATION_NOTIFICATION_VOLUME);
-
-        // Stop the sound after five seconds to handle continuous ringtones
-        ThreadUtil.getMainThreadHandler().postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                player.stop();
-            }
-        }, 5000);
-    }
-
-    public static boolean isWearCompanionAppInstalled() {
-        boolean found = false;
-        try {
-            Factory.get().getApplicationContext().getPackageManager()
-                    .getPackageInfo(WEARABLE_COMPANION_APP_PACKAGE, 0);
-            found = true;
-        } catch (final NameNotFoundException e) {
-            // Ignore; found is already false
-        }
-        return found;
-    }
-
-    /**
-     * When we go to the conversation list, call this to mark all messages as seen. That means
-     * we won't show a notification again for the same message.
-     */
-    public static void markAllMessagesAsSeen() {
-        MarkAsSeenAction.markAllAsSeen();
-        resetLastMessageDing(null);     // reset the ding timeout for all conversations
-    }
-
-    /**
-     * When we open a particular conversation, call this to mark all messages as read.
-     */
-    public static void markMessagesAsRead(final String conversationId) {
-        MarkAsReadAction.markAsRead(conversationId);
-        resetLastMessageDing(conversationId);
-    }
-
-    /**
-     * Returns the conversation ids of all active, grouped notifications, or
-     * {code null} if no notifications are currently active and grouped.
-     */
-    private static ConversationIdSet getGroupChildIds(final Context context) {
-        final String prefKey = context.getString(R.string.notifications_group_children_key);
-        final String groupChildIdsText = BuglePrefs.getApplicationPrefs().getString(prefKey, "");
-        if (!TextUtils.isEmpty(groupChildIdsText)) {
-            return ConversationIdSet.createSet(groupChildIdsText);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Records the conversation ids of the currently active grouped notifications.
-     */
-    private static void writeGroupChildIds(final Context context,
-            final ConversationIdSet childIds) {
-        final ConversationIdSet oldChildIds = getGroupChildIds(context);
-        if (childIds.equals(oldChildIds)) {
-            return;
-        }
-        final String prefKey = context.getString(R.string.notifications_group_children_key);
-        BuglePrefs.getApplicationPrefs().putString(prefKey, childIds.getDelimitedString());
-    }
-
-    /**
-     * Reset the timer for a notification ding on a particular conversation or all conversations.
-     */
-    public static void resetLastMessageDing(final String conversationId) {
-        synchronized (mLock) {
-            if (TextUtils.isEmpty(conversationId)) {
-                // reset all conversation dings
-                sLastMessageDingTime.clear();
-            } else {
-                sLastMessageDingTime.remove(conversationId);
-            }
-        }
-    }
-
-    public static void notifyEmergencySmsFailed(final String emergencyNumber,
-            final String conversationId) {
-        final Context context = Factory.get().getApplicationContext();
-
-        final CharSequence line1 = MessageNotificationState.applyWarningTextColor(context,
-                context.getString(R.string.notification_emergency_send_failure_line1,
-                emergencyNumber));
-        final String line2 = context.getString(R.string.notification_emergency_send_failure_line2,
-                emergencyNumber);
-        final PendingIntent destinationIntent = UIIntents.get()
-                .getPendingIntentForConversationActivity(context, conversationId, null /* draft */);
-
-        final NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
-        builder.setTicker(line1)
-                .setContentTitle(line1)
-                .setContentText(line2)
-                .setStyle(new NotificationCompat.BigTextStyle(builder).bigText(line2))
-                .setSmallIcon(R.drawable.ic_failed_light)
-                .setContentIntent(destinationIntent)
-                .setSound(UriUtil.getUriForResourceId(context, R.raw.message_failure));
-
-        final String tag = context.getPackageName() + ":emergency_sms_error";
-        NotificationManagerCompat.from(context).notify(
-                tag,
-                PendingIntentConstants.MSG_SEND_ERROR,
-                builder.build());
-    }
-}
-
diff --git a/src/com/android/messaging/datamodel/BugleRecipientEntry.java b/src/com/android/messaging/datamodel/BugleRecipientEntry.java
deleted file mode 100644
index 2a9e5ff..0000000
--- a/src/com/android/messaging/datamodel/BugleRecipientEntry.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.net.Uri;
-import android.text.TextUtils;
-
-import com.android.ex.chips.RecipientEntry;
-
-/**
- * An extension of RecipientEntry for Bugle's use since Bugle uses phone numbers to identify
- * participants / recipients instead of contact ids. This allows the user to send to multiple
- * phone numbers of the same contact.
- */
-public class BugleRecipientEntry extends RecipientEntry {
-
-    protected BugleRecipientEntry(final int entryType, final String displayName,
-            final String destination, final int destinationType, final String destinationLabel,
-            final long contactId, final Long directoryId, final long dataId,
-            final Uri photoThumbnailUri, final boolean isFirstLevel, final boolean isValid,
-            final String lookupKey) {
-        super(entryType, displayName, destination, destinationType, destinationLabel, contactId,
-                directoryId, dataId, photoThumbnailUri, isFirstLevel, isValid, lookupKey);
-    }
-
-    public static BugleRecipientEntry constructTopLevelEntry(final String displayName,
-            final int displayNameSource, final String destination, final int destinationType,
-            final String destinationLabel, final long contactId, final Long directoryId,
-            final long dataId, final String thumbnailUriAsString, final boolean isValid,
-            final String lookupKey) {
-        return new BugleRecipientEntry(ENTRY_TYPE_PERSON, displayName, destination, destinationType,
-                destinationLabel, contactId, directoryId, dataId, (thumbnailUriAsString != null
-                ? Uri.parse(thumbnailUriAsString) : null), true, isValid, lookupKey);
-    }
-
-    public static BugleRecipientEntry constructSecondLevelEntry(final String displayName,
-            final int displayNameSource, final String destination, final int destinationType,
-            final String destinationLabel, final long contactId, final Long directoryId,
-            final long dataId, final String thumbnailUriAsString, final boolean isValid,
-            final String lookupKey) {
-        return new BugleRecipientEntry(ENTRY_TYPE_PERSON, displayName, destination, destinationType,
-                destinationLabel, contactId, directoryId, dataId, (thumbnailUriAsString != null
-                ? Uri.parse(thumbnailUriAsString) : null), false, isValid, lookupKey);
-    }
-
-    @Override
-    public boolean isSamePerson(final RecipientEntry entry) {
-        return getDestination() != null && entry.getDestination() != null &&
-                TextUtils.equals(getDestination(), entry.getDestination());
-    }
-}
diff --git a/src/com/android/messaging/datamodel/ConversationImagePartsView.java b/src/com/android/messaging/datamodel/ConversationImagePartsView.java
deleted file mode 100644
index 70ba381..0000000
--- a/src/com/android/messaging/datamodel/ConversationImagePartsView.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.provider.BaseColumns;
-
-import com.android.ex.photo.provider.PhotoContract.PhotoViewColumns;
-
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseHelper.PartColumns;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.util.ContentType;
-
-/**
- * View for the image parts for the conversation. It is used to provide the photoviewer with a
- * a data source for all the photos in a conversation, so that the photoviewer can support paging
- * through all the photos of the conversation. The columns of the view are a superset of
- * {@link com.android.ex.photo.provider.PhotoContract.PhotoViewColumns}.
- */
-public class ConversationImagePartsView {
-    private static final String VIEW_NAME = "conversation_image_parts_view";
-
-    private static final String CREATE_SQL = "CREATE VIEW " +
-            VIEW_NAME + " AS SELECT "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.CONVERSATION_ID
-            + " as " + Columns.CONVERSATION_ID + ", "
-            + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.CONTENT_URI
-            + " as " + Columns.URI + ", "
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.FULL_NAME
-            + " as " + Columns.SENDER_FULL_NAME + ", "
-            + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.CONTENT_URI
-            + " as " + Columns.CONTENT_URI + ", "
-            // Use NULL as the thumbnail uri
-            + " NULL as " + Columns.THUMBNAIL_URI + ", "
-            + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.CONTENT_TYPE
-            + " as " + Columns.CONTENT_TYPE + ", "
-            //
-            // Columns in addition to those specified by PhotoContract
-            //
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.DISPLAY_DESTINATION
-            + " as " + Columns.DISPLAY_DESTINATION + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RECEIVED_TIMESTAMP
-            + " as " + Columns.RECEIVED_TIMESTAMP + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.STATUS
-            + " as " + Columns.STATUS + " "
-
-            + " FROM " + DatabaseHelper.MESSAGES_TABLE + " LEFT JOIN " + DatabaseHelper.PARTS_TABLE
-            + " ON (" + DatabaseHelper.MESSAGES_TABLE + "." + MessageColumns._ID
-            + "=" + DatabaseHelper.PARTS_TABLE + "." + PartColumns.MESSAGE_ID + ") "
-            + " LEFT JOIN " + DatabaseHelper.PARTICIPANTS_TABLE + " ON ("
-            + DatabaseHelper.MESSAGES_TABLE + '.' +  MessageColumns.SENDER_PARTICIPANT_ID
-            + '=' + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns._ID + ")"
-
-            // "content_type like 'image/%'"
-            + " WHERE " + DatabaseHelper.PARTS_TABLE + "." + PartColumns.CONTENT_TYPE
-            + " like '" + ContentType.IMAGE_PREFIX + "%'"
-
-            + " ORDER BY "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RECEIVED_TIMESTAMP + " ASC, "
-            + DatabaseHelper.PARTS_TABLE + '.' + PartColumns._ID + " ASC";
-
-    static class Columns implements BaseColumns {
-        static final String CONVERSATION_ID = MessageColumns.CONVERSATION_ID;
-        static final String URI = PhotoViewColumns.URI;
-        static final String SENDER_FULL_NAME = PhotoViewColumns.NAME;
-        static final String CONTENT_URI = PhotoViewColumns.CONTENT_URI;
-        static final String THUMBNAIL_URI = PhotoViewColumns.THUMBNAIL_URI;
-        static final String CONTENT_TYPE = PhotoViewColumns.CONTENT_TYPE;
-        // Columns in addition to those specified by PhotoContract
-        static final String DISPLAY_DESTINATION = ParticipantColumns.DISPLAY_DESTINATION;
-        static final String RECEIVED_TIMESTAMP = MessageColumns.RECEIVED_TIMESTAMP;
-        static final String STATUS = MessageColumns.STATUS;
-    }
-
-    public interface PhotoViewQuery {
-        public final String[] PROJECTION = {
-            PhotoViewColumns.URI,
-            PhotoViewColumns.NAME,
-            PhotoViewColumns.CONTENT_URI,
-            PhotoViewColumns.THUMBNAIL_URI,
-            PhotoViewColumns.CONTENT_TYPE,
-            // Columns in addition to those specified by PhotoContract
-            Columns.DISPLAY_DESTINATION,
-            Columns.RECEIVED_TIMESTAMP,
-            Columns.STATUS,
-        };
-
-        public final int INDEX_URI = 0;
-        public final int INDEX_SENDER_FULL_NAME = 1;
-        public final int INDEX_CONTENT_URI = 2;
-        public final int INDEX_THUMBNAIL_URI = 3;
-        public final int INDEX_CONTENT_TYPE = 4;
-        // Columns in addition to those specified by PhotoContract
-        public final int INDEX_DISPLAY_DESTINATION = 5;
-        public final int INDEX_RECEIVED_TIMESTAMP = 6;
-        public final int INDEX_STATUS = 7;
-    }
-
-    static final String getViewName() {
-        return VIEW_NAME;
-    }
-
-    static final String getCreateSql() {
-        return CREATE_SQL;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/CursorQueryData.java b/src/com/android/messaging/datamodel/CursorQueryData.java
deleted file mode 100644
index 3e6a656..0000000
--- a/src/com/android/messaging/datamodel/CursorQueryData.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-
-import com.android.messaging.util.Assert;
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * Holds parameters and data (such as content URI) for performing queries on the content provider.
- * This class could then be used to perform a query using either a BoundCursorLoader or querying
- * on the content resolver directly.
- *
- * This class is used for cases where the way to load a cursor is not fixed. For example,
- * when using ContactUtil to query for phone numbers, the ContactPickerFragment wants to use
- * a CursorLoader to asynchronously load the data and tie in nicely with its data binding
- * paradigm, whereas ContactRecipientAdapter wants to synchronously perform the query on the
- * worker thread.
- */
-public class CursorQueryData {
-    protected final Uri mUri;
-    protected final String[] mProjection;
-    protected final String mSelection;
-    protected final String[] mSelectionArgs;
-    protected final String mSortOrder;
-    protected final Context mContext;
-
-    public CursorQueryData(final Context context, final Uri uri, final String[] projection,
-            final String selection, final String[] selectionArgs, final String sortOrder) {
-        mContext = context;
-        mUri = uri;
-        mProjection = projection;
-        mSelection = selection;
-        mSelectionArgs = selectionArgs;
-        mSortOrder = sortOrder;
-    }
-
-    public BoundCursorLoader createBoundCursorLoader(final String bindingId) {
-        return new BoundCursorLoader(bindingId, mContext, mUri, mProjection, mSelection,
-                mSelectionArgs, mSortOrder);
-    }
-
-    public Cursor performSynchronousQuery() {
-        Assert.isNotMainThread();
-        if (mUri == null) {
-            // See {@link #getEmptyQueryData}
-            return null;
-        } else {
-            return mContext.getContentResolver().query(mUri, mProjection, mSelection,
-                    mSelectionArgs, mSortOrder);
-        }
-    }
-
-    @VisibleForTesting
-    public Uri getUri() {
-        return mUri;
-    }
-
-    /**
-     * Representation of an invalid query. {@link #performSynchronousQuery} will return
-     * a null Cursor.
-     */
-    public static CursorQueryData getEmptyQueryData() {
-        return new CursorQueryData(null, null, null, null, null, null);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/DataModel.java b/src/com/android/messaging/datamodel/DataModel.java
deleted file mode 100644
index b606c72..0000000
--- a/src/com/android/messaging/datamodel/DataModel.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.database.sqlite.SQLiteDatabase;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.action.Action;
-import com.android.messaging.datamodel.action.ActionService;
-import com.android.messaging.datamodel.action.BackgroundWorker;
-import com.android.messaging.datamodel.data.BlockedParticipantsData;
-import com.android.messaging.datamodel.data.BlockedParticipantsData.BlockedParticipantsDataListener;
-import com.android.messaging.datamodel.data.ContactListItemData;
-import com.android.messaging.datamodel.data.ContactPickerData;
-import com.android.messaging.datamodel.data.ContactPickerData.ContactPickerDataListener;
-import com.android.messaging.datamodel.data.ConversationData;
-import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListData.ConversationListDataListener;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.GalleryGridItemData;
-import com.android.messaging.datamodel.data.LaunchConversationData;
-import com.android.messaging.datamodel.data.LaunchConversationData.LaunchConversationDataListener;
-import com.android.messaging.datamodel.data.MediaPickerData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.ParticipantListItemData;
-import com.android.messaging.datamodel.data.PeopleAndOptionsData;
-import com.android.messaging.datamodel.data.PeopleAndOptionsData.PeopleAndOptionsDataListener;
-import com.android.messaging.datamodel.data.PeopleOptionsItemData;
-import com.android.messaging.datamodel.data.SettingsData;
-import com.android.messaging.datamodel.data.SettingsData.SettingsDataListener;
-import com.android.messaging.datamodel.data.SubscriptionListData;
-import com.android.messaging.datamodel.data.VCardContactItemData;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-
-public abstract class DataModel {
-    private String mFocusedConversation;
-    private boolean mConversationListScrolledToNewestConversation;
-
-    public static DataModel get() {
-        return Factory.get().getDataModel();
-    }
-
-    public static final void startActionService(final Action action) {
-        get().getActionService().startAction(action);
-    }
-
-    public static final void scheduleAction(final Action action,
-            final int code, final long delayMs) {
-        get().getActionService().scheduleAction(action, code, delayMs);
-    }
-
-    public abstract ConversationListData createConversationListData(final Context context,
-            final ConversationListDataListener listener, final boolean archivedMode);
-
-    public abstract ConversationData createConversationData(final Context context,
-            final ConversationDataListener listener, final String conversationId);
-
-    public abstract ContactListItemData createContactListItemData();
-
-    public abstract ContactPickerData createContactPickerData(final Context context,
-            final ContactPickerDataListener listener);
-
-    public abstract MediaPickerData createMediaPickerData(final Context context);
-
-    public abstract GalleryGridItemData createGalleryGridItemData();
-
-    public abstract LaunchConversationData createLaunchConversationData(
-            LaunchConversationDataListener listener);
-
-    public abstract PeopleOptionsItemData createPeopleOptionsItemData(final Context context);
-
-    public abstract PeopleAndOptionsData createPeopleAndOptionsData(final String conversationId,
-            final Context context, final PeopleAndOptionsDataListener listener);
-
-    public abstract VCardContactItemData createVCardContactItemData(final Context context,
-            final MessagePartData data);
-
-    public abstract VCardContactItemData createVCardContactItemData(final Context context,
-            final Uri vCardUri);
-
-    public abstract ParticipantListItemData createParticipantListItemData(
-            final ParticipantData participant);
-
-    public abstract BlockedParticipantsData createBlockedParticipantsData(Context context,
-            BlockedParticipantsDataListener listener);
-
-    public abstract SubscriptionListData createSubscriptonListData(Context context);
-
-    public abstract SettingsData createSettingsData(Context context, SettingsDataListener listener);
-
-    public abstract DraftMessageData createDraftMessageData(String conversationId);
-
-    public abstract ActionService getActionService();
-
-    public abstract BackgroundWorker getBackgroundWorkerForActionService();
-
-    @DoesNotRunOnMainThread
-    public abstract DatabaseWrapper getDatabase();
-
-    // Allow DataModel to coordinate with activity lifetime events.
-    public abstract void onActivityResume();
-
-    abstract void onCreateTables(final SQLiteDatabase db);
-
-    public void setFocusedConversation(final String conversationId) {
-        mFocusedConversation = conversationId;
-    }
-
-    public boolean isFocusedConversation(final String conversationId) {
-        return !TextUtils.isEmpty(mFocusedConversation)
-                && TextUtils.equals(mFocusedConversation, conversationId);
-    }
-
-    public void setConversationListScrolledToNewestConversation(
-            final boolean scrolledToNewestConversation) {
-        mConversationListScrolledToNewestConversation = scrolledToNewestConversation;
-    }
-
-    public boolean isConversationListScrolledToNewestConversation() {
-        return mConversationListScrolledToNewestConversation;
-    }
-
-    /**
-     * If a new message is received in the specified conversation, will the user be able to
-     * observe it in some UI within the app?
-     * @param conversationId conversation with the new incoming message
-     */
-    public boolean isNewMessageObservable(final String conversationId) {
-        return isConversationListScrolledToNewestConversation()
-                || isFocusedConversation(conversationId);
-    }
-
-    public abstract void onApplicationCreated();
-
-    public abstract SyncManager getSyncManager();
-}
diff --git a/src/com/android/messaging/datamodel/DataModelException.java b/src/com/android/messaging/datamodel/DataModelException.java
deleted file mode 100644
index 7084438..0000000
--- a/src/com/android/messaging/datamodel/DataModelException.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-public class DataModelException extends Exception {
-    private static final long serialVersionUID = 1L;
-
-    private static final int FIRST = 100;
-
-    // ERRORS GENERATED INTERNALLY BY DATA MODEL.
-
-    // ERRORS RELATED WITH SMS.
-    public static final int ERROR_SMS_TEMPORARY_FAILURE = 116;
-    public static final int ERROR_SMS_PERMANENT_FAILURE = 117;
-    public static final int ERROR_MMS_TEMPORARY_FAILURE = 118;
-    public static final int ERROR_MMS_PERMANENT_UNKNOWN_FAILURE = 119;
-
-    // Request expired.
-    public static final int ERROR_EXPIRED = 120;
-    // Request canceled by user.
-    public static final int ERROR_CANCELED = 121;
-
-    public static final int ERROR_MOBILE_DATA_DISABLED  = 123;
-    public static final int ERROR_MMS_SERVICE_BLOCKED   = 124;
-    public static final int ERROR_MMS_INVALID_ADDRESS   = 125;
-    public static final int ERROR_MMS_NETWORK_PROBLEM   = 126;
-    public static final int ERROR_MMS_MESSAGE_NOT_FOUND = 127;
-    public static final int ERROR_MMS_MESSAGE_FORMAT_CORRUPT = 128;
-    public static final int ERROR_MMS_CONTENT_NOT_ACCEPTED = 129;
-    public static final int ERROR_MMS_MESSAGE_NOT_SUPPORTED = 130;
-    public static final int ERROR_MMS_REPLY_CHARGING_ERROR = 131;
-    public static final int ERROR_MMS_ADDRESS_HIDING_NOT_SUPPORTED = 132;
-    public static final int ERROR_MMS_LACK_OF_PREPAID = 133;
-    public static final int ERROR_MMS_CAN_NOT_PERSIST = 134;
-    public static final int ERROR_MMS_NO_AVAILABLE_APN = 135;
-    public static final int ERROR_MMS_INVALID_MESSAGE_TO_SEND = 136;
-    public static final int ERROR_MMS_INVALID_MESSAGE_RECEIVED = 137;
-    public static final int ERROR_MMS_NO_CONFIGURATION = 138;
-
-    private static final int LAST = 138;
-
-    private final boolean mIsInjection;
-    private final int mErrorCode;
-    private final String mMessage;
-    private final long mBackoff;
-
-    public DataModelException(final int errorCode, final Exception innerException,
-            final long backoff, final boolean injection, final String message) {
-        // Since some of the exceptions passed in may not be serializable, only record message
-        // instead of setting inner exception for Exception class. Otherwise, we will get
-        // serialization issues when we pass ServerRequestException as intent extra later.
-        if (errorCode < FIRST || errorCode > LAST) {
-            throw new IllegalArgumentException("error code out of range: " + errorCode);
-        }
-        mIsInjection = injection;
-        mErrorCode = errorCode;
-        if (innerException != null) {
-            mMessage = innerException.getMessage() + " -- " +
-                    (mIsInjection ? "[INJECTED] -- " : "") + message;
-        } else {
-            mMessage = (mIsInjection ? "[INJECTED] -- " : "") + message;
-        }
-
-        mBackoff = backoff;
-    }
-
-    public DataModelException(final int errorCode) {
-        this(errorCode, null, 0, false, null);
-    }
-
-    public DataModelException(final int errorCode, final Exception innerException) {
-        this(errorCode, innerException, 0, false, null);
-    }
-
-    public DataModelException(final int errorCode, final String message) {
-        this(errorCode, null, 0, false, message);
-    }
-
-    @Override
-    public String getMessage() {
-        return mMessage;
-    }
-
-    public int getErrorCode() {
-        return mErrorCode;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/DataModelImpl.java b/src/com/android/messaging/datamodel/DataModelImpl.java
deleted file mode 100644
index ddb17ff..0000000
--- a/src/com/android/messaging/datamodel/DataModelImpl.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.database.sqlite.SQLiteDatabase;
-import android.net.Uri;
-import android.telephony.SubscriptionManager;
-
-import com.android.messaging.datamodel.action.ActionService;
-import com.android.messaging.datamodel.action.BackgroundWorker;
-import com.android.messaging.datamodel.action.FixupMessageStatusOnStartupAction;
-import com.android.messaging.datamodel.action.ProcessPendingMessagesAction;
-import com.android.messaging.datamodel.data.BlockedParticipantsData;
-import com.android.messaging.datamodel.data.BlockedParticipantsData.BlockedParticipantsDataListener;
-import com.android.messaging.datamodel.data.ContactListItemData;
-import com.android.messaging.datamodel.data.ContactPickerData;
-import com.android.messaging.datamodel.data.ContactPickerData.ContactPickerDataListener;
-import com.android.messaging.datamodel.data.ConversationData;
-import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListData.ConversationListDataListener;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.GalleryGridItemData;
-import com.android.messaging.datamodel.data.LaunchConversationData;
-import com.android.messaging.datamodel.data.LaunchConversationData.LaunchConversationDataListener;
-import com.android.messaging.datamodel.data.MediaPickerData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.ParticipantListItemData;
-import com.android.messaging.datamodel.data.PeopleAndOptionsData;
-import com.android.messaging.datamodel.data.PeopleAndOptionsData.PeopleAndOptionsDataListener;
-import com.android.messaging.datamodel.data.PeopleOptionsItemData;
-import com.android.messaging.datamodel.data.SettingsData;
-import com.android.messaging.datamodel.data.SettingsData.SettingsDataListener;
-import com.android.messaging.datamodel.data.SubscriptionListData;
-import com.android.messaging.datamodel.data.VCardContactItemData;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.ConnectivityUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import java.util.concurrent.ConcurrentHashMap;
-
-public class DataModelImpl extends DataModel {
-    private final Context mContext;
-    private final ActionService mActionService;
-    private final BackgroundWorker mDataModelWorker;
-    private final DatabaseHelper mDatabaseHelper;
-    private final SyncManager mSyncManager;
-
-    // Cached ConnectivityUtil instance for Pre-N.
-    private static ConnectivityUtil sConnectivityUtilInstanceCachePreN = null;
-    // Cached ConnectivityUtil subId->instance for N and beyond
-    private static final ConcurrentHashMap<Integer, ConnectivityUtil>
-            sConnectivityUtilInstanceCacheN = new ConcurrentHashMap<>();
-
-    public DataModelImpl(final Context context) {
-        super();
-        mContext = context;
-        mActionService = new ActionService();
-        mDataModelWorker = new BackgroundWorker();
-        mDatabaseHelper = DatabaseHelper.getInstance(context);
-        mSyncManager = new SyncManager();
-    }
-
-    @Override
-    public ConversationListData createConversationListData(final Context context,
-            final ConversationListDataListener listener, final boolean archivedMode) {
-        return new ConversationListData(context, listener, archivedMode);
-    }
-
-    @Override
-    public ConversationData createConversationData(final Context context,
-            final ConversationDataListener listener, final String conversationId) {
-        return new ConversationData(context, listener, conversationId);
-    }
-
-    @Override
-    public ContactListItemData createContactListItemData() {
-        return new ContactListItemData();
-    }
-
-    @Override
-    public ContactPickerData createContactPickerData(final Context context,
-            final ContactPickerDataListener listener) {
-        return new ContactPickerData(context, listener);
-    }
-
-    @Override
-    public BlockedParticipantsData createBlockedParticipantsData(
-            final Context context, final BlockedParticipantsDataListener listener) {
-        return new BlockedParticipantsData(context, listener);
-    }
-
-    @Override
-    public MediaPickerData createMediaPickerData(final Context context) {
-        return new MediaPickerData(context);
-    }
-
-    @Override
-    public GalleryGridItemData createGalleryGridItemData() {
-        return new GalleryGridItemData();
-    }
-
-    @Override
-    public LaunchConversationData createLaunchConversationData(
-            final LaunchConversationDataListener listener) {
-       return new LaunchConversationData(listener);
-    }
-
-    @Override
-    public PeopleOptionsItemData createPeopleOptionsItemData(final Context context) {
-        return new PeopleOptionsItemData(context);
-    }
-
-    @Override
-    public PeopleAndOptionsData createPeopleAndOptionsData(final String conversationId,
-            final Context context, final PeopleAndOptionsDataListener listener) {
-        return new PeopleAndOptionsData(conversationId, context, listener);
-    }
-
-    @Override
-    public VCardContactItemData createVCardContactItemData(final Context context,
-            final MessagePartData data) {
-        return new VCardContactItemData(context, data);
-    }
-
-    @Override
-    public VCardContactItemData createVCardContactItemData(final Context context,
-            final Uri vCardUri) {
-        return new VCardContactItemData(context, vCardUri);
-    }
-
-    @Override
-    public ParticipantListItemData createParticipantListItemData(
-            final ParticipantData participant) {
-        return new ParticipantListItemData(participant);
-    }
-
-    @Override
-    public SubscriptionListData createSubscriptonListData(Context context) {
-        return new SubscriptionListData(context);
-    }
-
-    @Override
-    public SettingsData createSettingsData(Context context, SettingsDataListener listener) {
-        return new SettingsData(context, listener);
-    }
-
-    @Override
-    public DraftMessageData createDraftMessageData(String conversationId) {
-        return new DraftMessageData(conversationId);
-    }
-
-    @Override
-    public ActionService getActionService() {
-        // We need to allow access to this on the UI thread since it's used to start actions.
-        return mActionService;
-    }
-
-    @Override
-    public BackgroundWorker getBackgroundWorkerForActionService() {
-        return mDataModelWorker;
-    }
-
-    @Override
-    @DoesNotRunOnMainThread
-    public DatabaseWrapper getDatabase() {
-        // We prevent the main UI thread from accessing the database since we have to allow
-        // public access to this class to enable sub-packages to access data.
-        Assert.isNotMainThread();
-        return mDatabaseHelper.getDatabase();
-    }
-
-    @Override
-    public SyncManager getSyncManager() {
-        return mSyncManager;
-    }
-
-    @Override
-    void onCreateTables(final SQLiteDatabase db) {
-        LogUtil.w(LogUtil.BUGLE_TAG, "Rebuilt databases: reseting related state");
-        // Clear other things that implicitly reference the DB
-        SyncManager.resetLastSyncTimestamps();
-    }
-
-    @Override
-    public void onActivityResume() {
-        // Perform an incremental sync and register for changes if necessary
-        mSyncManager.updateSyncObserver(mContext);
-
-        // Trigger a participant refresh if needed, we should only need to refresh if there is
-        // contact change while the activity was paused.
-        ParticipantRefresh.refreshParticipantsIfNeeded();
-    }
-
-    @Override
-    public void onApplicationCreated() {
-        if (OsUtil.isAtLeastN()) {
-            createConnectivityUtilForEachActiveSubscription();
-        } else {
-            sConnectivityUtilInstanceCachePreN = new ConnectivityUtil(mContext);
-        }
-
-        FixupMessageStatusOnStartupAction.fixupMessageStatus();
-        ProcessPendingMessagesAction.processFirstPendingMessage();
-        SyncManager.immediateSync();
-
-        if (OsUtil.isAtLeastL_MR1()) {
-            // Start listening for subscription change events for refreshing any data associated
-            // with subscriptions.
-            PhoneUtils.getDefault().toLMr1().registerOnSubscriptionsChangedListener(
-                    new SubscriptionManager.OnSubscriptionsChangedListener() {
-                        @Override
-                        public void onSubscriptionsChanged() {
-                            // TODO: This dynamically changes the mms config that app is
-                            // currently using. It may cause inconsistency in some cases. We need
-                            // to check the usage of mms config and handle the dynamic change
-                            // gracefully
-                            MmsConfig.loadAsync();
-                            ParticipantRefresh.refreshSelfParticipants();
-                            if (OsUtil.isAtLeastN()) {
-                                createConnectivityUtilForEachActiveSubscription();
-                            }
-                        }
-                    });
-        }
-    }
-
-    private void createConnectivityUtilForEachActiveSubscription() {
-        PhoneUtils.forEachActiveSubscription(new PhoneUtils.SubscriptionRunnable() {
-            @Override
-            public void runForSubscription(int subId) {
-                // Create the ConnectivityUtil instance for given subId if absent.
-                if (subId <= ParticipantData.DEFAULT_SELF_SUB_ID) {
-                    subId = PhoneUtils.getDefault().getDefaultSmsSubscriptionId();
-                }
-                if (!sConnectivityUtilInstanceCacheN.containsKey(subId)) {
-                    sConnectivityUtilInstanceCacheN.put(
-                            subId, new ConnectivityUtil(mContext, subId));
-                }
-            }
-        });
-    }
-
-    public static ConnectivityUtil getConnectivityUtil(final int subId) {
-        if (OsUtil.isAtLeastN()) {
-            return sConnectivityUtilInstanceCacheN.get(subId);
-        } else {
-            return sConnectivityUtilInstanceCachePreN;
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/DatabaseHelper.java b/src/com/android/messaging/datamodel/DatabaseHelper.java
deleted file mode 100644
index 486973e..0000000
--- a/src/com/android/messaging/datamodel/DatabaseHelper.java
+++ /dev/null
@@ -1,825 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.database.SQLException;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.provider.BaseColumns;
-
-import com.android.messaging.BugleApplication;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.LogUtil;
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * TODO: Open Issues:
- * - Should we be storing the draft messages in the regular messages table or should we have a
- *   separate table for drafts to keep the normal messages query as simple as possible?
- */
-
-/**
- * Allows access to the SQL database.  This is package private.
- */
-public class DatabaseHelper extends SQLiteOpenHelper {
-    public static final String DATABASE_NAME = "bugle_db";
-
-    private static final int getDatabaseVersion(final Context context) {
-        return Integer.parseInt(context.getResources().getString(R.string.database_version));
-    }
-
-    /**
-     * Table containing names of all other tables and views.
-     * TODO(rtenneti): Fix the following special SQLLite table name when SQLLite changes.
-     */
-    private static final String PRIMARY_TABLE = "sqlite_master";
-    /** Column containing the name of the tables and views */
-    private static final String[] PRIMARY_COLUMNS = new String[] { "name", };
-
-    // Table names
-    public static final String CONVERSATIONS_TABLE = "conversations";
-    public static final String MESSAGES_TABLE = "messages";
-    public static final String PARTS_TABLE = "parts";
-    public static final String PARTICIPANTS_TABLE = "participants";
-    public static final String CONVERSATION_PARTICIPANTS_TABLE = "conversation_participants";
-
-    // Views
-    static final String DRAFT_PARTS_VIEW = "draft_parts_view";
-
-    // Conversations table schema
-    public static class ConversationColumns implements BaseColumns {
-        /* SMS/MMS Thread ID from the system provider */
-        public static final String SMS_THREAD_ID = "sms_thread_id";
-
-        /* Display name for the conversation */
-        public static final String NAME = "name";
-
-        /* Latest Message ID for the read status to display in conversation list */
-        public static final String LATEST_MESSAGE_ID = "latest_message_id";
-
-        /* Latest text snippet for display in conversation list */
-        public static final String SNIPPET_TEXT = "snippet_text";
-
-        /* Latest text subject for display in conversation list, empty string if none exists */
-        public static final String SUBJECT_TEXT = "subject_text";
-
-        /* Preview Uri */
-        public static final String PREVIEW_URI = "preview_uri";
-
-        /* The preview uri's content type */
-        public static final String PREVIEW_CONTENT_TYPE = "preview_content_type";
-
-        /* If we should display the current draft snippet/preview pair or snippet/preview pair */
-        public static final String SHOW_DRAFT = "show_draft";
-
-        /* Latest draft text subject for display in conversation list, empty string if none exists*/
-        public static final String DRAFT_SUBJECT_TEXT = "draft_subject_text";
-
-        /* Latest draft text snippet for display, empty string if none exists */
-        public static final String DRAFT_SNIPPET_TEXT = "draft_snippet_text";
-
-        /* Draft Preview Uri, empty string if none exists */
-        public static final String DRAFT_PREVIEW_URI = "draft_preview_uri";
-
-        /* The preview uri's content type */
-        public static final String DRAFT_PREVIEW_CONTENT_TYPE = "draft_preview_content_type";
-
-        /* If this conversation is archived */
-        public static final String ARCHIVE_STATUS = "archive_status";
-
-        /* Timestamp for sorting purposes */
-        public static final String SORT_TIMESTAMP = "sort_timestamp";
-
-        /* Last read message timestamp */
-        public static final String LAST_READ_TIMESTAMP = "last_read_timestamp";
-
-        /* Avatar for the conversation. Could be for group of individual */
-        public static final String ICON = "icon";
-
-        /* Participant contact ID if this conversation has a single participant. -1 otherwise */
-        public static final String PARTICIPANT_CONTACT_ID = "participant_contact_id";
-
-        /* Participant lookup key if this conversation has a single participant. null otherwise */
-        public static final String PARTICIPANT_LOOKUP_KEY = "participant_lookup_key";
-
-        /*
-         * Participant's normalized destination if this conversation has a single participant.
-         * null otherwise.
-         */
-        public static final String OTHER_PARTICIPANT_NORMALIZED_DESTINATION =
-                "participant_normalized_destination";
-
-        /* Default self participant for the conversation */
-        public static final String CURRENT_SELF_ID = "current_self_id";
-
-        /* Participant count not including self (so will be 1 for 1:1 or bigger for group) */
-        public static final String PARTICIPANT_COUNT = "participant_count";
-
-        /* Should notifications be enabled for this conversation? */
-        public static final String NOTIFICATION_ENABLED = "notification_enabled";
-
-        /* Notification sound used for the conversation */
-        public static final String NOTIFICATION_SOUND_URI = "notification_sound_uri";
-
-        /* Should vibrations be enabled for the conversation's notification? */
-        public static final String NOTIFICATION_VIBRATION = "notification_vibration";
-
-        /* Conversation recipients include email address */
-        public static final String INCLUDE_EMAIL_ADDRESS = "include_email_addr";
-
-        // Record the last received sms's service center info if it indicates that the reply path
-        // is present (TP-Reply-Path), so that we could use it for the subsequent message to send.
-        // Refer to TS 23.040 D.6 and SmsMessageSender.java in Android Messaging app.
-        public static final String SMS_SERVICE_CENTER = "sms_service_center";
-
-        // A conversation is enterprise if one of the participant is a enterprise contact.
-        public static final String IS_ENTERPRISE = "IS_ENTERPRISE";
-    }
-
-    // Conversation table SQL
-    private static final String CREATE_CONVERSATIONS_TABLE_SQL =
-            "CREATE TABLE " + CONVERSATIONS_TABLE + "("
-                    + ConversationColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
-                    // TODO : Int? Required not default?
-                    + ConversationColumns.SMS_THREAD_ID + " INT DEFAULT(0), "
-                    + ConversationColumns.NAME + " TEXT, "
-                    + ConversationColumns.LATEST_MESSAGE_ID + " INT, "
-                    + ConversationColumns.SNIPPET_TEXT + " TEXT, "
-                    + ConversationColumns.SUBJECT_TEXT + " TEXT, "
-                    + ConversationColumns.PREVIEW_URI + " TEXT, "
-                    + ConversationColumns.PREVIEW_CONTENT_TYPE + " TEXT, "
-                    + ConversationColumns.SHOW_DRAFT + " INT DEFAULT(0), "
-                    + ConversationColumns.DRAFT_SNIPPET_TEXT + " TEXT, "
-                    + ConversationColumns.DRAFT_SUBJECT_TEXT + " TEXT, "
-                    + ConversationColumns.DRAFT_PREVIEW_URI + " TEXT, "
-                    + ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE + " TEXT, "
-                    + ConversationColumns.ARCHIVE_STATUS + " INT DEFAULT(0), "
-                    + ConversationColumns.SORT_TIMESTAMP + " INT DEFAULT(0), "
-                    + ConversationColumns.LAST_READ_TIMESTAMP + " INT DEFAULT(0), "
-                    + ConversationColumns.ICON + " TEXT, "
-                    + ConversationColumns.PARTICIPANT_CONTACT_ID + " INT DEFAULT ( "
-                            + ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED + "), "
-                    + ConversationColumns.PARTICIPANT_LOOKUP_KEY + " TEXT, "
-                    + ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION + " TEXT, "
-                    + ConversationColumns.CURRENT_SELF_ID + " TEXT, "
-                    + ConversationColumns.PARTICIPANT_COUNT + " INT DEFAULT(0), "
-                    + ConversationColumns.NOTIFICATION_ENABLED + " INT DEFAULT(1), "
-                    + ConversationColumns.NOTIFICATION_SOUND_URI + " TEXT, "
-                    + ConversationColumns.NOTIFICATION_VIBRATION + " INT DEFAULT(1), "
-                    + ConversationColumns.INCLUDE_EMAIL_ADDRESS + " INT DEFAULT(0), "
-                    + ConversationColumns.SMS_SERVICE_CENTER + " TEXT ,"
-                    + ConversationColumns.IS_ENTERPRISE + " INT DEFAULT(0)"
-                    + ");";
-
-    private static final String CONVERSATIONS_TABLE_SMS_THREAD_ID_INDEX_SQL =
-            "CREATE INDEX index_" + CONVERSATIONS_TABLE + "_" + ConversationColumns.SMS_THREAD_ID
-            + " ON " +  CONVERSATIONS_TABLE
-            + "(" + ConversationColumns.SMS_THREAD_ID + ")";
-
-    private static final String CONVERSATIONS_TABLE_ARCHIVE_STATUS_INDEX_SQL =
-            "CREATE INDEX index_" + CONVERSATIONS_TABLE + "_" + ConversationColumns.ARCHIVE_STATUS
-            + " ON " +  CONVERSATIONS_TABLE
-            + "(" + ConversationColumns.ARCHIVE_STATUS + ")";
-
-    private static final String CONVERSATIONS_TABLE_SORT_TIMESTAMP_INDEX_SQL =
-            "CREATE INDEX index_" + CONVERSATIONS_TABLE + "_" + ConversationColumns.SORT_TIMESTAMP
-            + " ON " +  CONVERSATIONS_TABLE
-            + "(" + ConversationColumns.SORT_TIMESTAMP + ")";
-
-    // Messages table schema
-    public static class MessageColumns implements BaseColumns {
-        /* conversation id that this message belongs to */
-        public static final String CONVERSATION_ID = "conversation_id";
-
-        /* participant which send this message */
-        public static final String SENDER_PARTICIPANT_ID = "sender_id";
-
-        /* This is bugle's internal status for the message */
-        public static final String STATUS = "message_status";
-
-        /* Type of message: SMS, MMS or MMS notification */
-        public static final String PROTOCOL = "message_protocol";
-
-        /* This is the time that the sender sent the message */
-        public static final String SENT_TIMESTAMP = "sent_timestamp";
-
-        /* Time that we received the message on this device */
-        public static final String RECEIVED_TIMESTAMP = "received_timestamp";
-
-        /* When the message has been seen by a user in a notification */
-        public static final String SEEN = "seen";
-
-        /* When the message has been read by a user */
-        public static final String READ = "read";
-
-        /* participant representing the sim which processed this message */
-        public static final String SELF_PARTICIPANT_ID = "self_id";
-
-        /*
-         * Time when a retry is initiated. This is used to compute the retry window
-         * when we retry sending/downloading a message.
-         */
-        public static final String RETRY_START_TIMESTAMP = "retry_start_timestamp";
-
-        // Columns which map to the SMS provider
-
-        /* Message ID from the platform provider */
-        public static final String SMS_MESSAGE_URI = "sms_message_uri";
-
-        /* The message priority for MMS message */
-        public static final String SMS_PRIORITY = "sms_priority";
-
-        /* The message size for MMS message */
-        public static final String SMS_MESSAGE_SIZE = "sms_message_size";
-
-        /* The subject for MMS message */
-        public static final String MMS_SUBJECT = "mms_subject";
-
-        /* Transaction id for MMS notificaiton */
-        public static final String MMS_TRANSACTION_ID = "mms_transaction_id";
-
-        /* Content location for MMS notificaiton */
-        public static final String MMS_CONTENT_LOCATION = "mms_content_location";
-
-        /* The expiry time (ms) for MMS message */
-        public static final String MMS_EXPIRY = "mms_expiry";
-
-        /* The detailed status (RESPONSE_STATUS or RETRIEVE_STATUS) for MMS message */
-        public static final String RAW_TELEPHONY_STATUS = "raw_status";
-    }
-
-    // Messages table SQL
-    private static final String CREATE_MESSAGES_TABLE_SQL =
-            "CREATE TABLE " + MESSAGES_TABLE + " ("
-                    + MessageColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
-                    + MessageColumns.CONVERSATION_ID + " INT, "
-                    + MessageColumns.SENDER_PARTICIPANT_ID + " INT, "
-                    + MessageColumns.SENT_TIMESTAMP + " INT DEFAULT(0), "
-                    + MessageColumns.RECEIVED_TIMESTAMP + " INT DEFAULT(0), "
-                    + MessageColumns.PROTOCOL + " INT DEFAULT(0), "
-                    + MessageColumns.STATUS + " INT DEFAULT(0), "
-                    + MessageColumns.SEEN + " INT DEFAULT(0), "
-                    + MessageColumns.READ + " INT DEFAULT(0), "
-                    + MessageColumns.SMS_MESSAGE_URI + " TEXT, "
-                    + MessageColumns.SMS_PRIORITY + " INT DEFAULT(0), "
-                    + MessageColumns.SMS_MESSAGE_SIZE + " INT DEFAULT(0), "
-                    + MessageColumns.MMS_SUBJECT + " TEXT, "
-                    + MessageColumns.MMS_TRANSACTION_ID + " TEXT, "
-                    + MessageColumns.MMS_CONTENT_LOCATION + " TEXT, "
-                    + MessageColumns.MMS_EXPIRY + " INT DEFAULT(0), "
-                    + MessageColumns.RAW_TELEPHONY_STATUS + " INT DEFAULT(0), "
-                    + MessageColumns.SELF_PARTICIPANT_ID + " INT, "
-                    + MessageColumns.RETRY_START_TIMESTAMP + " INT DEFAULT(0), "
-                    + "FOREIGN KEY (" + MessageColumns.CONVERSATION_ID + ") REFERENCES "
-                    + CONVERSATIONS_TABLE + "(" + ConversationColumns._ID + ") ON DELETE CASCADE "
-                    + "FOREIGN KEY (" + MessageColumns.SENDER_PARTICIPANT_ID + ") REFERENCES "
-                    + PARTICIPANTS_TABLE + "(" + ParticipantColumns._ID + ") ON DELETE SET NULL "
-                    + "FOREIGN KEY (" + MessageColumns.SELF_PARTICIPANT_ID + ") REFERENCES "
-                    + PARTICIPANTS_TABLE + "(" + ParticipantColumns._ID + ") ON DELETE SET NULL "
-                    + ");";
-
-    // Primary sort index for messages table : by conversation id, status, received timestamp.
-    private static final String MESSAGES_TABLE_SORT_INDEX_SQL =
-            "CREATE INDEX index_" + MESSAGES_TABLE + "_sort ON " +  MESSAGES_TABLE + "("
-                    + MessageColumns.CONVERSATION_ID + ", "
-                    + MessageColumns.STATUS + ", "
-                    + MessageColumns.RECEIVED_TIMESTAMP + ")";
-
-    private static final String MESSAGES_TABLE_STATUS_SEEN_INDEX_SQL =
-            "CREATE INDEX index_" + MESSAGES_TABLE + "_status_seen ON " +  MESSAGES_TABLE + "("
-                    + MessageColumns.STATUS + ", "
-                    + MessageColumns.SEEN + ")";
-
-    // Parts table schema
-    // A part may contain text or a media url, but not both.
-    public static class PartColumns implements BaseColumns {
-        /* message id that this part belongs to */
-        public static final String MESSAGE_ID = "message_id";
-
-        /* conversation id that this part belongs to */
-        public static final String CONVERSATION_ID = "conversation_id";
-
-        /* text for this part */
-        public static final String TEXT = "text";
-
-        /* content uri for this part */
-        public static final String CONTENT_URI = "uri";
-
-        /* content type for this part */
-        public static final String CONTENT_TYPE = "content_type";
-
-        /* cached width for this part (for layout while loading) */
-        public static final String WIDTH = "width";
-
-        /* cached height for this part (for layout while loading) */
-        public static final String HEIGHT = "height";
-
-        /* de-normalized copy of timestamp from the messages table.  This is populated
-         * via an insert trigger on the parts table.
-         */
-        public static final String TIMESTAMP = "timestamp";
-    }
-
-    // Message part table SQL
-    private static final String CREATE_PARTS_TABLE_SQL =
-            "CREATE TABLE " + PARTS_TABLE + "("
-                    + PartColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
-                    + PartColumns.MESSAGE_ID + " INT,"
-                    + PartColumns.TEXT + " TEXT,"
-                    + PartColumns.CONTENT_URI + " TEXT,"
-                    + PartColumns.CONTENT_TYPE + " TEXT,"
-                    + PartColumns.WIDTH + " INT DEFAULT("
-                    + MessagingContentProvider.UNSPECIFIED_SIZE + "),"
-                    + PartColumns.HEIGHT + " INT DEFAULT("
-                    + MessagingContentProvider.UNSPECIFIED_SIZE + "),"
-                    + PartColumns.TIMESTAMP + " INT, "
-                    + PartColumns.CONVERSATION_ID + " INT NOT NULL,"
-                    + "FOREIGN KEY (" + PartColumns.MESSAGE_ID + ") REFERENCES "
-                    + MESSAGES_TABLE + "(" + MessageColumns._ID + ") ON DELETE CASCADE "
-                    + "FOREIGN KEY (" + PartColumns.CONVERSATION_ID + ") REFERENCES "
-                    + CONVERSATIONS_TABLE + "(" + ConversationColumns._ID + ") ON DELETE CASCADE "
-                    + ");";
-
-    public static final String CREATE_PARTS_TRIGGER_SQL =
-            "CREATE TRIGGER " + PARTS_TABLE + "_TRIGGER" + " AFTER INSERT ON " + PARTS_TABLE
-            + " FOR EACH ROW "
-            + " BEGIN UPDATE " + PARTS_TABLE
-            + " SET " + PartColumns.TIMESTAMP + "="
-            + " (SELECT received_timestamp FROM " + MESSAGES_TABLE + " WHERE " + MESSAGES_TABLE
-            + "." + MessageColumns._ID + "=" + "NEW." + PartColumns.MESSAGE_ID + ")"
-            + " WHERE " + PARTS_TABLE + "." + PartColumns._ID + "=" + "NEW." + PartColumns._ID
-            + "; END";
-
-    public static final String CREATE_MESSAGES_TRIGGER_SQL =
-            "CREATE TRIGGER " + MESSAGES_TABLE + "_TRIGGER" + " AFTER UPDATE OF "
-            + MessageColumns.RECEIVED_TIMESTAMP + " ON " + MESSAGES_TABLE
-            + " FOR EACH ROW BEGIN UPDATE " + PARTS_TABLE + " SET " + PartColumns.TIMESTAMP
-            + " = NEW." + MessageColumns.RECEIVED_TIMESTAMP + " WHERE " + PARTS_TABLE + "."
-            + PartColumns.MESSAGE_ID + " = NEW." + MessageColumns._ID
-            + "; END;";
-
-    // Primary sort index for parts table : by message_id
-    private static final String PARTS_TABLE_MESSAGE_INDEX_SQL =
-            "CREATE INDEX index_" + PARTS_TABLE + "_message_id ON " + PARTS_TABLE + "("
-                    + PartColumns.MESSAGE_ID + ")";
-
-    // Participants table schema
-    public static class ParticipantColumns implements BaseColumns {
-        /* The subscription id for the sim associated with this self participant.
-         * Introduced in L. For earlier versions will always be default_sub_id (-1).
-         * For multi sim devices (or cases where the sim was changed) single device
-         * may have several different sub_id values */
-        public static final String SUB_ID = "sub_id";
-
-        /* The slot of the active SIM (inserted in the device) for this self-participant. If the
-         * self-participant doesn't correspond to any active SIM, this will be
-         * {@link android.telephony.SubscriptionManager#INVALID_SLOT_ID}.
-         * The column is ignored for all non-self participants.
-         */
-        public static final String SIM_SLOT_ID = "sim_slot_id";
-
-        /* The phone number stored in a standard E164 format if possible.  This is unique for a
-         * given participant.  We can't handle multiple participants with the same phone number
-         * since we don't know which of them a message comes from. This can also be an email
-         * address, in which case this is the same as the displayed address */
-        public static final String NORMALIZED_DESTINATION = "normalized_destination";
-
-        /* The phone number as originally supplied and used for dialing. Not necessarily in E164
-         * format or unique */
-        public static final String SEND_DESTINATION = "send_destination";
-
-        /* The user-friendly formatting of the phone number according to the region setting of
-         * the device when the row was added. */
-        public static final String DISPLAY_DESTINATION = "display_destination";
-
-        /* A string with this participant's full name or a pretty printed phone number */
-        public static final String FULL_NAME = "full_name";
-
-        /* A string with just this participant's first name */
-        public static final String FIRST_NAME = "first_name";
-
-        /* A local URI to an asset for the icon for this participant */
-        public static final String PROFILE_PHOTO_URI = "profile_photo_uri";
-
-        /* Contact id for matching local contact for this participant */
-        public static final String CONTACT_ID = "contact_id";
-
-        /* String that contains hints on how to find contact information in a contact lookup */
-        public static final String LOOKUP_KEY = "lookup_key";
-
-        /* If this participant is blocked */
-        public static final String BLOCKED = "blocked";
-
-        /* The color of the subscription (FOR SELF PARTICIPANTS ONLY) */
-        public static final String SUBSCRIPTION_COLOR = "subscription_color";
-
-        /* The name of the subscription (FOR SELF PARTICIPANTS ONLY) */
-        public static final String SUBSCRIPTION_NAME = "subscription_name";
-
-        /* The exact destination stored in Contacts for this participant */
-        public static final String CONTACT_DESTINATION = "contact_destination";
-    }
-
-    // Participants table SQL
-    private static final String CREATE_PARTICIPANTS_TABLE_SQL =
-            "CREATE TABLE " + PARTICIPANTS_TABLE + "("
-                    + ParticipantColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
-                    + ParticipantColumns.SUB_ID + " INT DEFAULT("
-                    + ParticipantData.OTHER_THAN_SELF_SUB_ID + "),"
-                    + ParticipantColumns.SIM_SLOT_ID + " INT DEFAULT("
-                    + ParticipantData.INVALID_SLOT_ID + "),"
-                    + ParticipantColumns.NORMALIZED_DESTINATION + " TEXT,"
-                    + ParticipantColumns.SEND_DESTINATION + " TEXT,"
-                    + ParticipantColumns.DISPLAY_DESTINATION + " TEXT,"
-                    + ParticipantColumns.FULL_NAME + " TEXT,"
-                    + ParticipantColumns.FIRST_NAME + " TEXT,"
-                    + ParticipantColumns.PROFILE_PHOTO_URI + " TEXT, "
-                    + ParticipantColumns.CONTACT_ID + " INT DEFAULT( "
-                    + ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED + "), "
-                    + ParticipantColumns.LOOKUP_KEY + " STRING, "
-                    + ParticipantColumns.BLOCKED + " INT DEFAULT(0), "
-                    + ParticipantColumns.SUBSCRIPTION_NAME + " TEXT, "
-                    + ParticipantColumns.SUBSCRIPTION_COLOR + " INT DEFAULT(0), "
-                    + ParticipantColumns.CONTACT_DESTINATION + " TEXT, "
-                    + "UNIQUE (" + ParticipantColumns.NORMALIZED_DESTINATION + ", "
-                    + ParticipantColumns.SUB_ID + ") ON CONFLICT FAIL" + ");";
-
-    private static final String CREATE_SELF_PARTICIPANT_SQL =
-            "INSERT INTO " + PARTICIPANTS_TABLE
-            + " ( " +  ParticipantColumns.SUB_ID + " ) VALUES ( %s )";
-
-    static String getCreateSelfParticipantSql(int subId) {
-        return String.format(CREATE_SELF_PARTICIPANT_SQL, subId);
-    }
-
-    // Conversation Participants table schema - contains a list of participants excluding the user
-    // in a given conversation.
-    public static class ConversationParticipantsColumns implements BaseColumns {
-        /* participant id of someone in this conversation */
-        public static final String PARTICIPANT_ID = "participant_id";
-
-        /* conversation id that this participant belongs to */
-        public static final String CONVERSATION_ID = "conversation_id";
-    }
-
-    // Conversation Participants table SQL
-    private static final String CREATE_CONVERSATION_PARTICIPANTS_TABLE_SQL =
-            "CREATE TABLE " + CONVERSATION_PARTICIPANTS_TABLE + "("
-                    + ConversationParticipantsColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
-                    + ConversationParticipantsColumns.CONVERSATION_ID + " INT,"
-                    + ConversationParticipantsColumns.PARTICIPANT_ID + " INT,"
-                    + "UNIQUE (" + ConversationParticipantsColumns.CONVERSATION_ID + ","
-                    + ConversationParticipantsColumns.PARTICIPANT_ID + ") ON CONFLICT FAIL, "
-                    + "FOREIGN KEY (" + ConversationParticipantsColumns.CONVERSATION_ID + ") "
-                    + "REFERENCES " + CONVERSATIONS_TABLE + "(" + ConversationColumns._ID + ")"
-                    + " ON DELETE CASCADE "
-                    + "FOREIGN KEY (" + ConversationParticipantsColumns.PARTICIPANT_ID + ")"
-                    + " REFERENCES " + PARTICIPANTS_TABLE + "(" + ParticipantColumns._ID + "));";
-
-    // Primary access pattern for conversation participants is to look them up for a specific
-    // conversation.
-    private static final String CONVERSATION_PARTICIPANTS_TABLE_CONVERSATION_ID_INDEX_SQL =
-            "CREATE INDEX index_" + CONVERSATION_PARTICIPANTS_TABLE + "_"
-                    + ConversationParticipantsColumns.CONVERSATION_ID
-                    + " ON " +  CONVERSATION_PARTICIPANTS_TABLE
-                    + "(" + ConversationParticipantsColumns.CONVERSATION_ID + ")";
-
-    // View for getting parts which are for draft messages.
-    static final String DRAFT_PARTS_VIEW_SQL = "CREATE VIEW " +
-            DRAFT_PARTS_VIEW + " AS SELECT "
-            + PARTS_TABLE + '.' + PartColumns._ID
-            + " as " + PartColumns._ID + ", "
-            + PARTS_TABLE + '.' + PartColumns.MESSAGE_ID
-            + " as " + PartColumns.MESSAGE_ID + ", "
-            + PARTS_TABLE + '.' + PartColumns.TEXT
-            + " as " + PartColumns.TEXT + ", "
-            + PARTS_TABLE + '.' + PartColumns.CONTENT_URI
-            + " as " + PartColumns.CONTENT_URI + ", "
-            + PARTS_TABLE + '.' + PartColumns.CONTENT_TYPE
-            + " as " + PartColumns.CONTENT_TYPE + ", "
-            + PARTS_TABLE + '.' + PartColumns.WIDTH
-            + " as " + PartColumns.WIDTH + ", "
-            + PARTS_TABLE + '.' + PartColumns.HEIGHT
-            + " as " + PartColumns.HEIGHT + ", "
-            + MESSAGES_TABLE + '.' + MessageColumns.CONVERSATION_ID
-            + " as " + MessageColumns.CONVERSATION_ID + " "
-            + " FROM " + MESSAGES_TABLE + " LEFT JOIN " + PARTS_TABLE + " ON ("
-            + MESSAGES_TABLE + "." + MessageColumns._ID
-            + "=" + PARTS_TABLE + "." + PartColumns.MESSAGE_ID + ")"
-            // Exclude draft messages from main view
-            + " WHERE " + MESSAGES_TABLE + "." + MessageColumns.STATUS
-            + " = " + MessageData.BUGLE_STATUS_OUTGOING_DRAFT;
-
-    // List of all our SQL tables
-    private static final String[] CREATE_TABLE_SQLS = new String[] {
-        CREATE_CONVERSATIONS_TABLE_SQL,
-        CREATE_MESSAGES_TABLE_SQL,
-        CREATE_PARTS_TABLE_SQL,
-        CREATE_PARTICIPANTS_TABLE_SQL,
-        CREATE_CONVERSATION_PARTICIPANTS_TABLE_SQL,
-    };
-
-    // List of all our indices
-    private static final String[] CREATE_INDEX_SQLS = new String[] {
-        CONVERSATIONS_TABLE_SMS_THREAD_ID_INDEX_SQL,
-        CONVERSATIONS_TABLE_ARCHIVE_STATUS_INDEX_SQL,
-        CONVERSATIONS_TABLE_SORT_TIMESTAMP_INDEX_SQL,
-        MESSAGES_TABLE_SORT_INDEX_SQL,
-        MESSAGES_TABLE_STATUS_SEEN_INDEX_SQL,
-        PARTS_TABLE_MESSAGE_INDEX_SQL,
-        CONVERSATION_PARTICIPANTS_TABLE_CONVERSATION_ID_INDEX_SQL,
-    };
-
-    // List of all our SQL triggers
-    private static final String[] CREATE_TRIGGER_SQLS = new String[] {
-            CREATE_PARTS_TRIGGER_SQL,
-            CREATE_MESSAGES_TRIGGER_SQL,
-    };
-
-    // List of all our views
-    private static final String[] CREATE_VIEW_SQLS = new String[] {
-        ConversationListItemData.getConversationListViewSql(),
-        ConversationImagePartsView.getCreateSql(),
-        DRAFT_PARTS_VIEW_SQL,
-    };
-
-    private static final Object sLock = new Object();
-    private final Context mApplicationContext;
-    private static DatabaseHelper sHelperInstance;      // Protected by sLock.
-
-    private final Object mDatabaseWrapperLock = new Object();
-    private DatabaseWrapper mDatabaseWrapper;           // Protected by mDatabaseWrapperLock.
-    private final DatabaseUpgradeHelper mUpgradeHelper = new DatabaseUpgradeHelper();
-
-    /**
-     * Get a (singleton) instance of {@link DatabaseHelper}, creating one if there isn't one yet.
-     * This is the only public method for getting a new instance of the class.
-     * @param context Should be the application context (or something that will live for the
-     * lifetime of the application).
-     * @return The current (or a new) DatabaseHelper instance.
-     */
-    public static DatabaseHelper getInstance(final Context context) {
-        synchronized (sLock) {
-            if (sHelperInstance == null) {
-                sHelperInstance = new DatabaseHelper(context);
-            }
-            return sHelperInstance;
-        }
-    }
-
-    /**
-     * Private constructor, used from {@link #getInstance()}.
-     * @param context Should be the application context (or something that will live for the
-     * lifetime of the application).
-     */
-    private DatabaseHelper(final Context context) {
-        super(context, DATABASE_NAME, null, getDatabaseVersion(context), null);
-        mApplicationContext = context;
-    }
-
-    /**
-     * Test method that always instantiates a new DatabaseHelper instance. This should
-     * be used ONLY by the tests and never by the real application.
-     * @param context Test context.
-     * @return Brand new DatabaseHelper instance.
-     */
-    @VisibleForTesting
-    static DatabaseHelper getNewInstanceForTest(final Context context) {
-        Assert.isTrue(BugleApplication.isRunningTests());
-        return new DatabaseHelper(context);
-    }
-
-    /**
-     * Get the (singleton) instance of @{link DatabaseWrapper}.
-     * <p>The database is always opened as a writeable database.
-     * @return The current (or a new) DatabaseWrapper instance.
-     */
-    @DoesNotRunOnMainThread
-    DatabaseWrapper getDatabase() {
-        // We prevent the main UI thread from accessing the database here since we have to allow
-        // public access to this class to enable sub-packages to access data.
-        Assert.isNotMainThread();
-
-        synchronized (mDatabaseWrapperLock) {
-            if (mDatabaseWrapper == null) {
-                mDatabaseWrapper = new DatabaseWrapper(mApplicationContext, getWritableDatabase());
-            }
-            return mDatabaseWrapper;
-        }
-    }
-
-    @Override
-    public void onDowngrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
-        mUpgradeHelper.onDowngrade(db, oldVersion, newVersion);
-    }
-
-    /**
-     * Drops and recreates all tables.
-     */
-    public static void rebuildTables(final SQLiteDatabase db) {
-        // Drop tables first, then views, and indices.
-        dropAllTables(db);
-        dropAllViews(db);
-        dropAllIndexes(db);
-        dropAllTriggers(db);
-
-        // Recreate the whole database.
-        createDatabase(db);
-    }
-
-    /**
-     * Drop and rebuild a given view.
-     */
-    static void rebuildView(final SQLiteDatabase db, final String viewName,
-            final String createViewSql) {
-        dropView(db, viewName, true /* throwOnFailure */);
-        db.execSQL(createViewSql);
-    }
-
-    private static void dropView(final SQLiteDatabase db, final String viewName,
-            final boolean throwOnFailure) {
-        final String dropPrefix = "DROP VIEW IF EXISTS ";
-        try {
-            db.execSQL(dropPrefix + viewName);
-        } catch (final SQLException ex) {
-            if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
-                LogUtil.d(LogUtil.BUGLE_TAG, "unable to drop view " + viewName + " "
-                        + ex);
-            }
-
-            if (throwOnFailure) {
-                throw ex;
-            }
-        }
-    }
-
-    public static void rebuildAllViews(final DatabaseWrapper db) {
-        for (final String sql : DatabaseHelper.CREATE_VIEW_SQLS) {
-            db.execSQL(sql);
-        }
-    }
-
-    /**
-     * Drops all user-defined tables from the given database.
-     */
-    private static void dropAllTables(final SQLiteDatabase db) {
-        final Cursor tableCursor =
-                db.query(PRIMARY_TABLE, PRIMARY_COLUMNS, "type='table'", null, null, null, null);
-        if (tableCursor != null) {
-            try {
-                final String dropPrefix = "DROP TABLE IF EXISTS ";
-                while (tableCursor.moveToNext()) {
-                    final String tableName = tableCursor.getString(0);
-
-                    // Skip special tables
-                    if (tableName.startsWith("android_") || tableName.startsWith("sqlite_")) {
-                        continue;
-                    }
-                    try {
-                        db.execSQL(dropPrefix + tableName);
-                    } catch (final SQLException ex) {
-                        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
-                            LogUtil.d(LogUtil.BUGLE_TAG, "unable to drop table " + tableName + " "
-                                    + ex);
-                        }
-                    }
-                }
-            } finally {
-                tableCursor.close();
-            }
-        }
-    }
-
-    /**
-     * Drops all user-defined triggers from the given database.
-     */
-    private static void dropAllTriggers(final SQLiteDatabase db) {
-        final Cursor triggerCursor =
-                db.query(PRIMARY_TABLE, PRIMARY_COLUMNS, "type='trigger'", null, null, null, null);
-        if (triggerCursor != null) {
-            try {
-                final String dropPrefix = "DROP TRIGGER IF EXISTS ";
-                while (triggerCursor.moveToNext()) {
-                    final String triggerName = triggerCursor.getString(0);
-
-                    // Skip special tables
-                    if (triggerName.startsWith("android_") || triggerName.startsWith("sqlite_")) {
-                        continue;
-                    }
-                    try {
-                        db.execSQL(dropPrefix + triggerName);
-                    } catch (final SQLException ex) {
-                        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
-                            LogUtil.d(LogUtil.BUGLE_TAG, "unable to drop trigger " + triggerName +
-                                    " " + ex);
-                        }
-                    }
-                }
-            } finally {
-                triggerCursor.close();
-            }
-        }
-    }
-
-    /**
-     * Drops all user-defined views from the given database.
-     */
-    public static void dropAllViews(final SQLiteDatabase db) {
-        final Cursor viewCursor =
-                db.query(PRIMARY_TABLE, PRIMARY_COLUMNS, "type='view'", null, null, null, null);
-        if (viewCursor != null) {
-            try {
-                while (viewCursor.moveToNext()) {
-                    final String viewName = viewCursor.getString(0);
-                    dropView(db, viewName, false /* throwOnFailure */);
-                }
-            } finally {
-                viewCursor.close();
-            }
-        }
-    }
-
-    /**
-     * Drops all user-defined views from the given database.
-     */
-    private static void dropAllIndexes(final SQLiteDatabase db) {
-        final Cursor indexCursor =
-                db.query(PRIMARY_TABLE, PRIMARY_COLUMNS, "type='index'", null, null, null, null);
-        if (indexCursor != null) {
-            try {
-                final String dropPrefix = "DROP INDEX IF EXISTS ";
-                while (indexCursor.moveToNext()) {
-                    final String indexName = indexCursor.getString(0);
-                    try {
-                        db.execSQL(dropPrefix + indexName);
-                    } catch (final SQLException ex) {
-                        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
-                            LogUtil.d(LogUtil.BUGLE_TAG, "unable to drop index " + indexName + " "
-                                    + ex);
-                        }
-                    }
-                }
-            } finally {
-                indexCursor.close();
-            }
-        }
-    }
-
-    private static void createDatabase(final SQLiteDatabase db) {
-        for (final String sql : CREATE_TABLE_SQLS) {
-            db.execSQL(sql);
-        }
-
-        for (final String sql : CREATE_INDEX_SQLS) {
-            db.execSQL(sql);
-        }
-
-        for (final String sql : CREATE_VIEW_SQLS) {
-            db.execSQL(sql);
-        }
-
-        for (final String sql : CREATE_TRIGGER_SQLS) {
-            db.execSQL(sql);
-        }
-
-        // Enable foreign key constraints
-        db.execSQL("PRAGMA foreign_keys=ON;");
-
-        // Add the default self participant. The default self will be assigned a proper slot id
-        // during participant refresh.
-        db.execSQL(getCreateSelfParticipantSql(ParticipantData.DEFAULT_SELF_SUB_ID));
-
-        DataModel.get().onCreateTables(db);
-    }
-
-    @Override
-    public void onCreate(SQLiteDatabase db) {
-        createDatabase(db);
-    }
-
-    @Override
-    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
-        mUpgradeHelper.doOnUpgrade(db, oldVersion, newVersion);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/DatabaseUpgradeHelper.java b/src/com/android/messaging/datamodel/DatabaseUpgradeHelper.java
deleted file mode 100644
index 96aba86..0000000
--- a/src/com/android/messaging/datamodel/DatabaseUpgradeHelper.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.database.sqlite.SQLiteDatabase;
-
-import com.android.messaging.Factory;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-public class DatabaseUpgradeHelper {
-    private static final String TAG = LogUtil.BUGLE_DATABASE_TAG;
-
-    public void doOnUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
-        Assert.isTrue(newVersion >= oldVersion);
-        if (oldVersion == newVersion) {
-            return;
-        }
-
-        LogUtil.i(TAG, "Database upgrade started from version " + oldVersion + " to " + newVersion);
-        try {
-            doUpgradeWithExceptions(db, oldVersion, newVersion);
-            LogUtil.i(TAG, "Finished database upgrade");
-        } catch (final Exception ex) {
-            LogUtil.e(TAG, "Failed to perform db upgrade from version " +
-                    oldVersion + " to version " + newVersion, ex);
-            DatabaseHelper.rebuildTables(db);
-        }
-    }
-
-    public void doUpgradeWithExceptions(final SQLiteDatabase db, final int oldVersion,
-            final int newVersion) throws Exception {
-        int currentVersion = oldVersion;
-        if (currentVersion < 2) {
-            currentVersion = upgradeToVersion2(db);
-        }
-        // Rebuild all the views
-        final Context context = Factory.get().getApplicationContext();
-        DatabaseHelper.dropAllViews(db);
-        DatabaseHelper.rebuildAllViews(new DatabaseWrapper(context, db));
-        // Finally, check if we have arrived at the final version.
-        checkAndUpdateVersionAtReleaseEnd(currentVersion, Integer.MAX_VALUE, newVersion);
-    }
-
-    private int upgradeToVersion2(final SQLiteDatabase db) {
-        db.execSQL("ALTER TABLE " + DatabaseHelper.CONVERSATIONS_TABLE + " ADD COLUMN " +
-                DatabaseHelper.ConversationColumns.IS_ENTERPRISE + " INT DEFAULT(0)");
-        LogUtil.i(TAG, "Ugraded database to version 2");
-        return 2;
-    }
-
-    /**
-     * Checks db version correctness at the end of each milestone release. If target database
-     * version lies beyond the version range that the current release may handle, we snap the
-     * current version to the end of the release, so that we may go on to the next release' upgrade
-     * path. Otherwise, if target version is within reach of the current release, but we are not
-     * at the target version, then throw an exception to force a table rebuild.
-     */
-    private int checkAndUpdateVersionAtReleaseEnd(final int currentVersion,
-            final int maxVersionForRelease, final int targetVersion) throws Exception {
-        if (maxVersionForRelease < targetVersion) {
-            // Target version is beyond the current release. Snap to max version for the
-            // current release so we can go on to the upgrade path for the next release.
-            return maxVersionForRelease;
-        }
-
-        // If we are here, this means the current release' upgrade handler should upgrade to
-        // target version...
-        if (currentVersion != targetVersion) {
-            // No more upgrade handlers. So we can't possibly upgrade to the final version.
-            throw new Exception("Missing upgrade handler from version " +
-                    currentVersion + " to version " + targetVersion);
-        }
-        // Upgrade succeeded.
-        return targetVersion;
-    }
-
-    public void onDowngrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
-        DatabaseHelper.rebuildTables(db);
-        LogUtil.e(TAG, "Database downgrade requested for version " +
-                oldVersion + " version " + newVersion + ", forcing db rebuild!");
-    }
-}
diff --git a/src/com/android/messaging/datamodel/DatabaseWrapper.java b/src/com/android/messaging/datamodel/DatabaseWrapper.java
deleted file mode 100644
index c08d5aa..0000000
--- a/src/com/android/messaging/datamodel/DatabaseWrapper.java
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.DatabaseUtils;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteFullException;
-import android.database.sqlite.SQLiteQueryBuilder;
-import android.database.sqlite.SQLiteStatement;
-import android.util.SparseArray;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.UiUtils;
-
-import java.util.Locale;
-import java.util.Stack;
-import java.util.regex.Pattern;
-
-public class DatabaseWrapper {
-    private static final String TAG = LogUtil.BUGLE_DATABASE_TAG;
-
-    private final SQLiteDatabase mDatabase;
-    private final Context mContext;
-    private final boolean mLog;
-    /**
-     * Set mExplainQueryPlanRegexp (via {@link BugleGservicesKeys#EXPLAIN_QUERY_PLAN_REGEXP}
-     * to regex matching queries to see query plans. For example, ".*" to show all query plans.
-     */
-    // See
-    private final String mExplainQueryPlanRegexp;
-    private static final int sTimingThreshold = 50;        // in milliseconds
-
-    public static final int INDEX_INSERT_MESSAGE_PART = 0;
-    public static final int INDEX_INSERT_MESSAGE = 1;
-    public static final int INDEX_QUERY_CONVERSATIONS_LATEST_MESSAGE = 2;
-    public static final int INDEX_QUERY_MESSAGES_LATEST_MESSAGE = 3;
-
-    private final SparseArray<SQLiteStatement> mCompiledStatements;
-
-    static class TransactionData {
-        long time;
-        boolean transactionSuccessful;
-    }
-
-    // track transaction on a per thread basis
-    private static ThreadLocal<Stack<TransactionData>> sTransactionDepth =
-            new ThreadLocal<Stack<TransactionData>>() {
-        @Override
-        public Stack<TransactionData> initialValue() {
-            return new Stack<TransactionData>();
-        }
-    };
-
-    private static String[] sFormatStrings = new String[] {
-        "took %d ms to %s",
-        "   took %d ms to %s",
-        "      took %d ms to %s",
-    };
-
-    DatabaseWrapper(final Context context, final SQLiteDatabase db) {
-        mLog = LogUtil.isLoggable(LogUtil.BUGLE_DATABASE_PERF_TAG, LogUtil.VERBOSE);
-        mExplainQueryPlanRegexp = Factory.get().getBugleGservices().getString(
-                BugleGservicesKeys.EXPLAIN_QUERY_PLAN_REGEXP, null);
-        mDatabase = db;
-        mContext = context;
-        mCompiledStatements = new SparseArray<SQLiteStatement>();
-    }
-
-    public SQLiteStatement getStatementInTransaction(final int index, final String statement) {
-        // Use transaction to serialize access to statements
-        Assert.isTrue(mDatabase.inTransaction());
-        SQLiteStatement compiled = mCompiledStatements.get(index);
-        if (compiled == null) {
-            compiled = mDatabase.compileStatement(statement);
-            Assert.isTrue(compiled.toString().contains(statement.trim()));
-            mCompiledStatements.put(index, compiled);
-        }
-        return compiled;
-    }
-
-    private void maybePlayDebugNoise() {
-        DebugUtils.maybePlayDebugNoise(mContext, DebugUtils.DEBUG_SOUND_DB_OP);
-    }
-
-    private static void printTiming(final long t1, final String msg) {
-        final int transactionDepth = sTransactionDepth.get().size();
-        final long t2 = System.currentTimeMillis();
-        final long delta = t2 - t1;
-        if (delta > sTimingThreshold) {
-            LogUtil.v(LogUtil.BUGLE_DATABASE_PERF_TAG, String.format(Locale.US,
-                    sFormatStrings[Math.min(sFormatStrings.length - 1, transactionDepth)],
-                    delta,
-                    msg));
-        }
-    }
-
-    public Context getContext() {
-        return mContext;
-    }
-
-    public void beginTransaction() {
-        final long t1 = System.currentTimeMillis();
-
-        // push the current time onto the transaction stack
-        final TransactionData f = new TransactionData();
-        f.time = t1;
-        sTransactionDepth.get().push(f);
-
-        mDatabase.beginTransaction();
-    }
-
-    public void setTransactionSuccessful() {
-        final TransactionData f = sTransactionDepth.get().peek();
-        f.transactionSuccessful = true;
-        mDatabase.setTransactionSuccessful();
-    }
-
-    public void endTransaction() {
-        long t1 = 0;
-        long transactionStartTime = 0;
-        final TransactionData f = sTransactionDepth.get().pop();
-        if (f.transactionSuccessful == false) {
-            LogUtil.w(TAG, "endTransaction without setting successful");
-            for (final StackTraceElement st : (new Exception()).getStackTrace()) {
-                LogUtil.w(TAG, "    " + st.toString());
-            }
-        }
-        if (mLog) {
-            transactionStartTime = f.time;
-            t1 = System.currentTimeMillis();
-        }
-        try {
-            mDatabase.endTransaction();
-        } catch (SQLiteFullException ex) {
-            LogUtil.e(TAG, "Database full, unable to endTransaction", ex);
-            UiUtils.showToastAtBottom(R.string.db_full);
-        }
-        if (mLog) {
-            printTiming(t1, String.format(Locale.US,
-                    ">>> endTransaction (total for this transaction: %d)",
-                    (System.currentTimeMillis() - transactionStartTime)));
-        }
-    }
-
-    public void yieldTransaction() {
-        long yieldStartTime = 0;
-        if (mLog) {
-            yieldStartTime = System.currentTimeMillis();
-        }
-        final boolean wasYielded = mDatabase.yieldIfContendedSafely();
-        if (wasYielded && mLog) {
-            printTiming(yieldStartTime, "yieldTransaction");
-        }
-    }
-
-    public void insertWithOnConflict(final String searchTable, final String nullColumnHack,
-            final ContentValues initialValues, final int conflictAlgorithm) {
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        try {
-            mDatabase.insertWithOnConflict(searchTable, nullColumnHack, initialValues,
-                    conflictAlgorithm);
-        } catch (SQLiteFullException ex) {
-            LogUtil.e(TAG, "Database full, unable to insertWithOnConflict", ex);
-            UiUtils.showToastAtBottom(R.string.db_full);
-        }
-        if (mLog) {
-            printTiming(t1, String.format(Locale.US,
-                    "insertWithOnConflict with %s", searchTable));
-        }
-    }
-
-    private void explainQueryPlan(final SQLiteQueryBuilder qb, final SQLiteDatabase db,
-            final String[] projection, final String selection,
-            @SuppressWarnings("unused")
-                    final String[] queryArgs,
-            final String groupBy,
-            @SuppressWarnings("unused")
-                    final String having,
-            final String sortOrder, final String limit) {
-        final String queryString = qb.buildQuery(
-                projection,
-                selection,
-                groupBy,
-                null/*having*/,
-                sortOrder,
-                limit);
-        explainQueryPlan(db, queryString, queryArgs);
-    }
-
-    private void explainQueryPlan(final SQLiteDatabase db, final String sql,
-            final String[] queryArgs) {
-        if (!Pattern.matches(mExplainQueryPlanRegexp, sql)) {
-            return;
-        }
-        final Cursor planCursor = db.rawQuery("explain query plan " + sql, queryArgs);
-        try {
-            if (planCursor != null && planCursor.moveToFirst()) {
-                final int detailColumn = planCursor.getColumnIndex("detail");
-                final StringBuilder sb = new StringBuilder();
-                do {
-                    sb.append(planCursor.getString(detailColumn));
-                    sb.append("\n");
-                } while (planCursor.moveToNext());
-                if (sb.length() > 0) {
-                    sb.setLength(sb.length() - 1);
-                }
-                LogUtil.v(TAG, "for query " + sql + "\nplan is: "
-                        + sb.toString());
-            }
-        } catch (final Exception e) {
-            LogUtil.w(TAG, "Query plan failed ", e);
-        } finally {
-            if (planCursor != null) {
-                planCursor.close();
-            }
-        }
-    }
-
-    public Cursor query(final String searchTable, final String[] projection,
-            final String selection, final String[] selectionArgs, final String groupBy,
-            final String having, final String orderBy, final String limit) {
-        if (mExplainQueryPlanRegexp != null) {
-            final SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
-            qb.setTables(searchTable);
-            explainQueryPlan(qb, mDatabase, projection, selection, selectionArgs,
-                    groupBy, having, orderBy, limit);
-        }
-
-        maybePlayDebugNoise();
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        final Cursor cursor = mDatabase.query(searchTable, projection, selection, selectionArgs,
-                groupBy, having, orderBy, limit);
-        if (mLog) {
-            printTiming(
-                    t1,
-                    String.format(Locale.US, "query %s with %s ==> %d",
-                            searchTable, selection, cursor.getCount()));
-        }
-        return cursor;
-    }
-
-    public Cursor query(final String searchTable, final String[] columns,
-            final String selection, final String[] selectionArgs, final String groupBy,
-            final String having, final String orderBy) {
-        return query(
-                searchTable, columns, selection, selectionArgs,
-                groupBy, having, orderBy, null);
-    }
-
-    public Cursor query(final SQLiteQueryBuilder qb,
-            final String[] projection, final String selection, final String[] queryArgs,
-            final String groupBy, final String having, final String sortOrder, final String limit) {
-        if (mExplainQueryPlanRegexp != null) {
-            explainQueryPlan(qb, mDatabase, projection, selection, queryArgs,
-                    groupBy, having, sortOrder, limit);
-        }
-        maybePlayDebugNoise();
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        final Cursor cursor = qb.query(mDatabase, projection, selection, queryArgs, groupBy,
-                having, sortOrder, limit);
-        if (mLog) {
-            printTiming(
-                    t1,
-                    String.format(Locale.US, "query %s with %s ==> %d",
-                            qb.getTables(), selection, cursor.getCount()));
-        }
-        return cursor;
-    }
-
-    public long queryNumEntries(final String table, final String selection,
-            final String[] selectionArgs) {
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        maybePlayDebugNoise();
-        final long retval =
-                DatabaseUtils.queryNumEntries(mDatabase, table, selection, selectionArgs);
-        if (mLog){
-            printTiming(
-                    t1,
-                    String.format(Locale.US, "queryNumEntries %s with %s ==> %d", table,
-                            selection, retval));
-        }
-        return retval;
-    }
-
-    public Cursor rawQuery(final String sql, final String[] args) {
-        if (mExplainQueryPlanRegexp != null) {
-            explainQueryPlan(mDatabase, sql, args);
-        }
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        maybePlayDebugNoise();
-        final Cursor cursor = mDatabase.rawQuery(sql, args);
-        if (mLog) {
-            printTiming(
-                    t1,
-                    String.format(Locale.US, "rawQuery %s ==> %d", sql, cursor.getCount()));
-        }
-        return cursor;
-    }
-
-    public int update(final String table, final ContentValues values,
-            final String selection, final String[] selectionArgs) {
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        maybePlayDebugNoise();
-        int count = 0;
-        try {
-            count = mDatabase.update(table, values, selection, selectionArgs);
-        } catch (SQLiteFullException ex) {
-            LogUtil.e(TAG, "Database full, unable to update", ex);
-            UiUtils.showToastAtBottom(R.string.db_full);
-        }
-        if (mLog) {
-            printTiming(t1, String.format(Locale.US, "update %s with %s ==> %d",
-                    table, selection, count));
-        }
-        return count;
-    }
-
-    public int delete(final String table, final String whereClause, final String[] whereArgs) {
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        maybePlayDebugNoise();
-        int count = 0;
-        try {
-            count = mDatabase.delete(table, whereClause, whereArgs);
-        } catch (SQLiteFullException ex) {
-            LogUtil.e(TAG, "Database full, unable to delete", ex);
-            UiUtils.showToastAtBottom(R.string.db_full);
-        }
-        if (mLog) {
-            printTiming(t1,
-                    String.format(Locale.US, "delete from %s with %s ==> %d", table,
-                            whereClause, count));
-        }
-        return count;
-    }
-
-    public long insert(final String table, final String nullColumnHack,
-            final ContentValues values) {
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        maybePlayDebugNoise();
-        long rowId = -1;
-        try {
-            rowId = mDatabase.insert(table, nullColumnHack, values);
-        } catch (SQLiteFullException ex) {
-            LogUtil.e(TAG, "Database full, unable to insert", ex);
-            UiUtils.showToastAtBottom(R.string.db_full);
-        }
-        if (mLog) {
-            printTiming(t1, String.format(Locale.US, "insert to %s", table));
-        }
-        return rowId;
-    }
-
-    public long replace(final String table, final String nullColumnHack,
-            final ContentValues values) {
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        maybePlayDebugNoise();
-        long rowId = -1;
-        try {
-            rowId = mDatabase.replace(table, nullColumnHack, values);
-        } catch (SQLiteFullException ex) {
-            LogUtil.e(TAG, "Database full, unable to replace", ex);
-            UiUtils.showToastAtBottom(R.string.db_full);
-        }
-        if (mLog) {
-            printTiming(t1, String.format(Locale.US, "replace to %s", table));
-        }
-        return rowId;
-    }
-
-    public void setLocale(final Locale locale) {
-        mDatabase.setLocale(locale);
-    }
-
-    public void execSQL(final String sql, final String[] bindArgs) {
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        maybePlayDebugNoise();
-        try {
-            mDatabase.execSQL(sql, bindArgs);
-        } catch (SQLiteFullException ex) {
-            LogUtil.e(TAG, "Database full, unable to execSQL", ex);
-            UiUtils.showToastAtBottom(R.string.db_full);
-        }
-
-        if (mLog) {
-            printTiming(t1, String.format(Locale.US, "execSQL %s", sql));
-        }
-    }
-
-    public void execSQL(final String sql) {
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        maybePlayDebugNoise();
-        try {
-            mDatabase.execSQL(sql);
-        } catch (SQLiteFullException ex) {
-            LogUtil.e(TAG, "Database full, unable to execSQL", ex);
-            UiUtils.showToastAtBottom(R.string.db_full);
-        }
-
-        if (mLog) {
-            printTiming(t1, String.format(Locale.US, "execSQL %s", sql));
-        }
-    }
-
-    public int execSQLUpdateDelete(final String sql) {
-        long t1 = 0;
-        if (mLog) {
-            t1 = System.currentTimeMillis();
-        }
-        maybePlayDebugNoise();
-        final SQLiteStatement statement = mDatabase.compileStatement(sql);
-        int rowsUpdated = 0;
-        try {
-            rowsUpdated = statement.executeUpdateDelete();
-        } catch (SQLiteFullException ex) {
-            LogUtil.e(TAG, "Database full, unable to execSQLUpdateDelete", ex);
-            UiUtils.showToastAtBottom(R.string.db_full);
-        }
-        if (mLog) {
-            printTiming(t1, String.format(Locale.US, "execSQLUpdateDelete %s", sql));
-        }
-        return rowsUpdated;
-    }
-
-    public SQLiteDatabase getDatabase() {
-        return mDatabase;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/FileProvider.java b/src/com/android/messaging/datamodel/FileProvider.java
deleted file mode 100644
index ee332cd..0000000
--- a/src/com/android/messaging/datamodel/FileProvider.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.ContentProvider;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-import android.text.TextUtils;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Random;
-
-/**
- * A very simple content provider that can serve files.
- */
-public abstract class FileProvider extends ContentProvider {
-    // Object to generate random id for temp images.
-    private static final Random RANDOM_ID = new Random();
-
-    abstract File getFile(final String path, final String extension);
-
-    private static final String FILE_EXTENSION_PARAM_KEY = "ext";
-
-    /**
-     * Check if filename conforms to requirement for our provider
-     * @param fileId filename (optionally starting with path character
-     * @return true if filename consists only of digits
-     */
-    protected static boolean isValidFileId(final String fileId) {
-        // Ignore initial "/"
-        for (int index = (fileId.startsWith("/") ? 1 : 0); index < fileId.length(); index++) {
-            final Character c = fileId.charAt(index);
-            if (!Character.isDigit(c)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Create a temp file (to allow writing to that one particular file)
-     * @param file the file to create
-     * @return true if file successfully created
-     */
-    protected static boolean ensureFileExists(final File file) {
-        try {
-            final File parentDir = file.getParentFile();
-            if (parentDir.exists() || parentDir.mkdirs()) {
-                return file.createNewFile();
-            }
-        } catch (final IOException e) {
-            // fail on exceptions creating the file
-        }
-        return false;
-    }
-
-    /**
-     * Build uri for a new temporary file (creating file)
-     * @param authority authority with which to populate uri
-     * @param extension optional file extension
-     * @return unique uri that can be used to write temporary files
-     */
-    protected static Uri buildFileUri(final String authority, final String extension) {
-        final long fileId = Math.abs(RANDOM_ID.nextLong());
-        final Uri.Builder builder = (new Uri.Builder()).authority(authority).scheme(
-                ContentResolver.SCHEME_CONTENT);
-        builder.appendPath(String.valueOf(fileId));
-        if (!TextUtils.isEmpty(extension)) {
-            builder.appendQueryParameter(FILE_EXTENSION_PARAM_KEY, extension);
-        }
-        return builder.build();
-    }
-
-    @Override
-    public boolean onCreate() {
-        return true;
-    }
-
-    @Override
-    public int delete(final Uri uri, final String selection, final String[] selectionArgs) {
-        final String fileId = uri.getPath();
-        if (isValidFileId(fileId)) {
-            final File file = getFile(fileId, getExtensionFromUri(uri));
-            return file.delete() ? 1 : 0;
-        }
-        return 0;
-    }
-
-    @Override
-    public ParcelFileDescriptor openFile(final Uri uri, final String fileMode)
-            throws FileNotFoundException {
-        final String fileId = uri.getPath();
-        if (isValidFileId(fileId)) {
-            final File file = getFile(fileId, getExtensionFromUri(uri));
-            final int mode =
-                    (TextUtils.equals(fileMode, "r") ? ParcelFileDescriptor.MODE_READ_ONLY :
-                        ParcelFileDescriptor.MODE_WRITE_ONLY | ParcelFileDescriptor.MODE_TRUNCATE);
-            return ParcelFileDescriptor.open(file, mode);
-        }
-        return null;
-    }
-
-    protected static String getExtensionFromUri(final Uri uri) {
-        return uri.getQueryParameter(FILE_EXTENSION_PARAM_KEY);
-    }
-
-    @Override
-    public Cursor query(final Uri uri, final String[] projection, final String selection,
-            final String[] selectionArgs, final String sortOrder) {
-        // Don't support queries.
-        return null;
-    }
-
-    @Override
-    public Uri insert(final Uri uri, final ContentValues values) {
-        // Don't support inserts.
-        return null;
-    }
-
-    @Override
-    public int update(final Uri uri, final ContentValues values, final String selection,
-            final String[] selectionArgs) {
-        // Don't support updates.
-        return 0;
-    }
-
-    @Override
-    public String getType(final Uri uri) {
-        // No need for mime types.
-        return null;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/FrequentContactsCursorBuilder.java b/src/com/android/messaging/datamodel/FrequentContactsCursorBuilder.java
deleted file mode 100644
index 8f65156..0000000
--- a/src/com/android/messaging/datamodel/FrequentContactsCursorBuilder.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import androidx.collection.SimpleArrayMap;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContactUtil;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-
-/**
- * A cursor builder that takes the frequent contacts cursor and aggregate it with the all contacts
- * cursor to fill in contact details such as phone numbers and strip away invalid contacts.
- *
- * Because the frequent contact list depends on the loading of two cursors, it needs to temporarily
- * store the cursor that it receives with setFrequents() and setAllContacts() calls. Because it
- * doesn't know which one will be finished first, it always checks whether both cursors are ready
- * to pull data from and construct the aggregate cursor when it's ready to do so. Note that
- * this cursor builder doesn't assume ownership of the cursors passed in - it merely references
- * them and always does a isClosed() check before consuming them. The ownership still belongs to
- * the loader framework and the cursor may be closed when the UI is torn down.
- */
-public class FrequentContactsCursorBuilder {
-    private Cursor mAllContactsCursor;
-    private Cursor mFrequentContactsCursor;
-
-    /**
-     * Sets the frequent contacts cursor as soon as it is loaded, or null if it's reset.
-     * @return this builder instance for chained operations
-     */
-    public FrequentContactsCursorBuilder setFrequents(final Cursor frequentContactsCursor) {
-        mFrequentContactsCursor = frequentContactsCursor;
-        return this;
-    }
-
-    /**
-     * Sets the all contacts cursor as soon as it is loaded, or null if it's reset.
-     * @return this builder instance for chained operations
-     */
-    public FrequentContactsCursorBuilder setAllContacts(final Cursor allContactsCursor) {
-        mAllContactsCursor = allContactsCursor;
-        return this;
-    }
-
-    /**
-     * Reset this builder. Must be called when the consumer resets its data.
-     */
-    public void resetBuilder() {
-        mAllContactsCursor = null;
-        mFrequentContactsCursor = null;
-    }
-
-    /**
-     * Attempt to build the cursor records from the frequent and all contacts cursor if they
-     * are both ready to be consumed.
-     * @return the frequent contact cursor if built successfully, or null if it can't be built yet.
-     */
-    public Cursor build() {
-        if (mFrequentContactsCursor != null && mAllContactsCursor != null) {
-            Assert.isTrue(!mFrequentContactsCursor.isClosed());
-            Assert.isTrue(!mAllContactsCursor.isClosed());
-
-            // Frequent contacts cursor has one record per contact, plus it doesn't contain info
-            // such as phone number and type. In order for the records to be usable by Bugle, we
-            // would like to populate it with information from the all contacts cursor.
-            final MatrixCursor retCursor = new MatrixCursor(ContactUtil.PhoneQuery.PROJECTION);
-
-            // First, go through the frequents cursor and take note of all lookup keys and their
-            // corresponding rank in the frequents list.
-            final SimpleArrayMap<String, Integer> lookupKeyToRankMap =
-                    new SimpleArrayMap<String, Integer>();
-            int oldPosition = mFrequentContactsCursor.getPosition();
-            int rank = 0;
-            mFrequentContactsCursor.moveToPosition(-1);
-            while (mFrequentContactsCursor.moveToNext()) {
-                final String lookupKey = mFrequentContactsCursor.getString(
-                        ContactUtil.INDEX_LOOKUP_KEY_FREQUENT);
-                lookupKeyToRankMap.put(lookupKey, rank++);
-            }
-            mFrequentContactsCursor.moveToPosition(oldPosition);
-
-            // Second, go through the all contacts cursor once and retrieve all information
-            // (multiple phone numbers etc.) and store that in an array list. Since the all
-            // contacts list only contains phone contacts, this step will ensure that we filter
-            // out any invalid/email contacts in the frequents list.
-            final ArrayList<Object[]> rows =
-                    new ArrayList<Object[]>(mFrequentContactsCursor.getCount());
-            oldPosition = mAllContactsCursor.getPosition();
-            mAllContactsCursor.moveToPosition(-1);
-            while (mAllContactsCursor.moveToNext()) {
-                final String lookupKey = mAllContactsCursor.getString(ContactUtil.INDEX_LOOKUP_KEY);
-                if (lookupKeyToRankMap.containsKey(lookupKey)) {
-                    final Object[] row = new Object[ContactUtil.PhoneQuery.PROJECTION.length];
-                    row[ContactUtil.INDEX_DATA_ID] =
-                            mAllContactsCursor.getLong(ContactUtil.INDEX_DATA_ID);
-                    row[ContactUtil.INDEX_CONTACT_ID] =
-                            mAllContactsCursor.getLong(ContactUtil.INDEX_CONTACT_ID);
-                    row[ContactUtil.INDEX_LOOKUP_KEY] =
-                            mAllContactsCursor.getString(ContactUtil.INDEX_LOOKUP_KEY);
-                    row[ContactUtil.INDEX_DISPLAY_NAME] =
-                            mAllContactsCursor.getString(ContactUtil.INDEX_DISPLAY_NAME);
-                    row[ContactUtil.INDEX_PHOTO_URI] =
-                            mAllContactsCursor.getString(ContactUtil.INDEX_PHOTO_URI);
-                    row[ContactUtil.INDEX_PHONE_EMAIL] =
-                            mAllContactsCursor.getString(ContactUtil.INDEX_PHONE_EMAIL);
-                    row[ContactUtil.INDEX_PHONE_EMAIL_TYPE] =
-                            mAllContactsCursor.getInt(ContactUtil.INDEX_PHONE_EMAIL_TYPE);
-                    row[ContactUtil.INDEX_PHONE_EMAIL_LABEL] =
-                            mAllContactsCursor.getString(ContactUtil.INDEX_PHONE_EMAIL_LABEL);
-                    rows.add(row);
-                }
-            }
-            mAllContactsCursor.moveToPosition(oldPosition);
-
-            // Now we have a list of rows containing frequent contacts in alphabetical order.
-            // Therefore, sort all the rows according to their actual ranks in the frequents list.
-            Collections.sort(rows, new Comparator<Object[]>() {
-                @Override
-                public int compare(final Object[] lhs, final Object[] rhs) {
-                    final String lookupKeyLhs = (String) lhs[ContactUtil.INDEX_LOOKUP_KEY];
-                    final String lookupKeyRhs = (String) rhs[ContactUtil.INDEX_LOOKUP_KEY];
-                    Assert.isTrue(lookupKeyToRankMap.containsKey(lookupKeyLhs) &&
-                            lookupKeyToRankMap.containsKey(lookupKeyRhs));
-                    final int rankLhs = lookupKeyToRankMap.get(lookupKeyLhs);
-                    final int rankRhs = lookupKeyToRankMap.get(lookupKeyRhs);
-                    if (rankLhs < rankRhs) {
-                        return -1;
-                    } else if (rankLhs > rankRhs) {
-                        return 1;
-                    } else {
-                        // Same rank, so it's two contact records for the same contact.
-                        // Perform secondary sorting on the phone type. Always place
-                        // mobile before everything else.
-                        final int phoneTypeLhs = (int) lhs[ContactUtil.INDEX_PHONE_EMAIL_TYPE];
-                        final int phoneTypeRhs = (int) rhs[ContactUtil.INDEX_PHONE_EMAIL_TYPE];
-                        if (phoneTypeLhs == Phone.TYPE_MOBILE &&
-                                phoneTypeRhs == Phone.TYPE_MOBILE) {
-                            return 0;
-                        } else if (phoneTypeLhs == Phone.TYPE_MOBILE) {
-                            return -1;
-                        } else if (phoneTypeRhs == Phone.TYPE_MOBILE) {
-                            return 1;
-                        } else {
-                            // Use the default sort order, i.e. sort by phoneType value.
-                            return phoneTypeLhs < phoneTypeRhs ? -1 :
-                                    (phoneTypeLhs == phoneTypeRhs ? 0 : 1);
-                        }
-                    }
-                }
-            });
-
-            // Finally, add all the rows to this cursor.
-            for (final Object[] row : rows) {
-                retCursor.addRow(row);
-            }
-            return retCursor;
-        }
-        return null;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/FrequentContactsCursorQueryData.java b/src/com/android/messaging/datamodel/FrequentContactsCursorQueryData.java
deleted file mode 100644
index d1759ad..0000000
--- a/src/com/android/messaging/datamodel/FrequentContactsCursorQueryData.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts;
-
-import com.android.messaging.util.FallbackStrategies;
-import com.android.messaging.util.FallbackStrategies.Strategy;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-
-/**
- * Helper for querying frequent (and/or starred) contacts.
- */
-public class FrequentContactsCursorQueryData extends CursorQueryData {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static class FrequentContactsCursorLoader extends BoundCursorLoader {
-        private final Uri mOriginalUri;
-
-        FrequentContactsCursorLoader(String bindingId, Context context, Uri uri,
-                String[] projection, String selection, String[] selectionArgs, String sortOrder) {
-            super(bindingId, context, uri, projection, selection, selectionArgs, sortOrder);
-            mOriginalUri = uri;
-        }
-
-        @Override
-        public Cursor loadInBackground() {
-            return FallbackStrategies
-                    .startWith(new PrimaryStrequentContactsQueryStrategy())
-                    .thenTry(new FrequentOnlyContactsQueryStrategy())
-                    .thenTry(new PhoneOnlyStrequentContactsQueryStrategy())
-                    .execute(null);
-        }
-
-        private abstract class StrequentContactsQueryStrategy implements Strategy<Void, Cursor> {
-            @Override
-            public Cursor execute(Void params) throws Exception {
-                final Uri uri = getUri();
-                if (uri != null) {
-                    setUri(uri);
-                }
-                return FrequentContactsCursorLoader.super.loadInBackground();
-            }
-            protected abstract Uri getUri();
-        }
-
-        private class PrimaryStrequentContactsQueryStrategy extends StrequentContactsQueryStrategy {
-            @Override
-            protected Uri getUri() {
-                // Use the original URI requested.
-                return mOriginalUri;
-            }
-        }
-
-        private class FrequentOnlyContactsQueryStrategy extends StrequentContactsQueryStrategy {
-            @Override
-            protected Uri getUri() {
-                // Some phones have a buggy implementation of the Contacts provider which crashes
-                // when we query for strequent (starred+frequent) contacts (b/17991485).
-                // If this happens, switch to just querying for frequent contacts.
-                return Contacts.CONTENT_FREQUENT_URI;
-            }
-        }
-
-        private class PhoneOnlyStrequentContactsQueryStrategy extends
-                StrequentContactsQueryStrategy {
-            @Override
-            protected Uri getUri() {
-                // Some 3rd party ROMs have content provider
-                // implementation where invalid SQL queries are returned for regular strequent
-                // queries. Using strequent_phone_only query as a fallback to display only phone
-                // contacts. This is the last-ditch effort; if this fails, we will display an
-                // empty frequent list (b/18354836).
-                final String strequentQueryParam = OsUtil.isAtLeastL() ?
-                        ContactsContract.STREQUENT_PHONE_ONLY : "strequent_phone_only";
-                // TODO: Handle enterprise contacts post M once contacts provider supports it
-                return Contacts.CONTENT_STREQUENT_URI.buildUpon()
-                        .appendQueryParameter(strequentQueryParam, "true").build();
-            }
-        }
-    }
-
-    public FrequentContactsCursorQueryData(Context context, String[] projection,
-            String selection, String[] selectionArgs, String sortOrder) {
-        // TODO: Handle enterprise contacts post M once contacts provider supports it
-        super(context, Contacts.CONTENT_STREQUENT_URI, projection, selection, selectionArgs,
-                sortOrder);
-    }
-
-    @Override
-    public BoundCursorLoader createBoundCursorLoader(String bindingId) {
-        return new FrequentContactsCursorLoader(bindingId, mContext, mUri, mProjection, mSelection,
-                mSelectionArgs, mSortOrder);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/GalleryBoundCursorLoader.java b/src/com/android/messaging/datamodel/GalleryBoundCursorLoader.java
deleted file mode 100644
index 1974a5e..0000000
--- a/src/com/android/messaging/datamodel/GalleryBoundCursorLoader.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.net.Uri;
-import android.provider.MediaStore.Files;
-import android.provider.MediaStore.Files.FileColumns;
-import android.provider.MediaStore.MediaColumns;
-
-import com.android.messaging.datamodel.data.GalleryGridItemData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.google.common.base.Joiner;
-
-/**
- * A BoundCursorLoader that reads local media on the device.
- */
-public class GalleryBoundCursorLoader extends BoundCursorLoader {
-    public static final String MEDIA_SCANNER_VOLUME_EXTERNAL = "external";
-    private static final Uri STORAGE_URI = Files.getContentUri(MEDIA_SCANNER_VOLUME_EXTERNAL);
-    private static final String SORT_ORDER = MediaColumns.DATE_MODIFIED + " DESC";
-    private static final String SELECTION = createSelection(
-            MessagePartData.ACCEPTABLE_GALLERY_MEDIA_TYPES,
-            new Integer[] {
-                FileColumns.MEDIA_TYPE_IMAGE,
-                FileColumns.MEDIA_TYPE_VIDEO,
-                FileColumns.MEDIA_TYPE_AUDIO
-            });
-
-    public GalleryBoundCursorLoader(final String bindingId, final Context context) {
-        super(bindingId, context, STORAGE_URI, GalleryGridItemData.MEDIA_PROJECTION, SELECTION,
-                null, SORT_ORDER);
-    }
-
-    private static String createSelection(final String[] mimeTypes, Integer[] mediaTypes) {
-        return MediaColumns.MIME_TYPE + " IN ('" + Joiner.on("','").join(mimeTypes) + "') AND "
-                + FileColumns.MEDIA_TYPE + " IN (" + Joiner.on(',').join(mediaTypes) + ")";
-    }
-}
diff --git a/src/com/android/messaging/datamodel/MediaScratchFileProvider.java b/src/com/android/messaging/datamodel/MediaScratchFileProvider.java
deleted file mode 100644
index 6f21bc5..0000000
--- a/src/com/android/messaging/datamodel/MediaScratchFileProvider.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.database.MatrixCursor.RowBuilder;
-import android.net.Uri;
-import android.provider.OpenableColumns;
-import androidx.collection.SimpleArrayMap;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-/**
- * A very simple content provider that can serve media files from our cache directory.
- */
-public class MediaScratchFileProvider extends FileProvider {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static final SimpleArrayMap<Uri, String> sUriToDisplayNameMap =
-            new SimpleArrayMap<Uri, String>();
-
-    @VisibleForTesting
-    public static final String AUTHORITY =
-            "com.android.messaging.datamodel.MediaScratchFileProvider";
-    private static final String MEDIA_SCRATCH_SPACE_DIR = "mediascratchspace";
-
-    public static boolean isMediaScratchSpaceUri(final Uri uri) {
-        if (uri == null) {
-            return false;
-        }
-
-        final List<String> segments = uri.getPathSegments();
-        return (TextUtils.equals(uri.getScheme(), ContentResolver.SCHEME_CONTENT) &&
-                TextUtils.equals(uri.getAuthority(), AUTHORITY) &&
-                segments.size() == 1 && FileProvider.isValidFileId(segments.get(0)));
-    }
-
-    /**
-     * Returns a uri that can be used to access a raw mms file.
-     *
-     * @return the URI for an raw mms file
-     */
-    public static Uri buildMediaScratchSpaceUri(final String extension) {
-        final Uri uri = FileProvider.buildFileUri(AUTHORITY, extension);
-        final File file = getFileWithExtension(uri.getPath(), extension);
-        if (!ensureFileExists(file)) {
-            LogUtil.e(TAG, "Failed to create temp file " + file.getAbsolutePath());
-        }
-        return uri;
-    }
-
-    public static File getFileFromUri(final Uri uri) {
-        Assert.equals(AUTHORITY, uri.getAuthority());
-        return getFileWithExtension(uri.getPath(), getExtensionFromUri(uri));
-    }
-
-    public static Uri.Builder getUriBuilder() {
-        return (new Uri.Builder()).authority(AUTHORITY).scheme(ContentResolver.SCHEME_CONTENT);
-    }
-
-    @Override
-    File getFile(final String path, final String extension) {
-        return getFileWithExtension(path, extension);
-    }
-
-    private static File getFileWithExtension(final String path, final String extension) {
-        final Context context = Factory.get().getApplicationContext();
-        final File filePath = new File(getDirectory(context),
-                TextUtils.isEmpty(extension) ? path : path + "." + extension);
-
-        try {
-            if (!filePath.getCanonicalPath()
-                    .startsWith(getDirectory(context).getCanonicalPath())) {
-                LogUtil.e(TAG, "getFileWithExtension: path "
-                        + filePath.getCanonicalPath()
-                        + " does not start with "
-                        + getDirectory(context).getCanonicalPath());
-                return null;
-            }
-        } catch (IOException e) {
-            LogUtil.e(TAG, "getFileWithExtension: getCanonicalPath failed ", e);
-            return null;
-        }
-        return filePath;
-    }
-
-    private static File getDirectory(final Context context) {
-        return new File(context.getCacheDir(), MEDIA_SCRATCH_SPACE_DIR);
-    }
-
-    @Override
-    public Cursor query(final Uri uri, final String[] projection, final String selection,
-            final String[] selectionArgs, final String sortOrder) {
-        if (projection != null && projection.length > 0 &&
-                TextUtils.equals(projection[0], OpenableColumns.DISPLAY_NAME) &&
-                isMediaScratchSpaceUri(uri)) {
-            // Retrieve the display name associated with a temp file. This is used by the Contacts
-            // ImportVCardActivity to retrieve the name of the contact(s) being imported.
-            String displayName;
-            synchronized (sUriToDisplayNameMap) {
-                displayName = sUriToDisplayNameMap.get(uri);
-            }
-            if (!TextUtils.isEmpty(displayName)) {
-                MatrixCursor cursor =
-                        new MatrixCursor(new String[] { OpenableColumns.DISPLAY_NAME });
-                RowBuilder row = cursor.newRow();
-                row.add(displayName);
-                return cursor;
-            }
-        }
-        return null;
-    }
-
-    public static void addUriToDisplayNameEntry(final Uri scratchFileUri,
-            final String displayName) {
-        if (TextUtils.isEmpty(displayName)) {
-            return;
-        }
-        synchronized (sUriToDisplayNameMap) {
-            sUriToDisplayNameMap.put(scratchFileUri, displayName);
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/MemoryCacheManager.java b/src/com/android/messaging/datamodel/MemoryCacheManager.java
deleted file mode 100644
index 0968cff..0000000
--- a/src/com/android/messaging/datamodel/MemoryCacheManager.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import com.android.messaging.Factory;
-
-import java.util.HashSet;
-
-/**
- * Utility abstraction which allows MemoryCaches in an application to register and then when there
- * is memory pressure provide a callback to reclaim the memory in the caches.
- */
-public class MemoryCacheManager {
-    private final HashSet<MemoryCache> mMemoryCaches = new HashSet<MemoryCache>();
-    private final Object mMemoryCacheLock = new Object();
-
-    public static MemoryCacheManager get() {
-        return Factory.get().getMemoryCacheManager();
-    }
-
-    /**
-     * Extend this interface to provide a reclaim method on a memory cache.
-     */
-    public interface MemoryCache {
-        void reclaim();
-    }
-
-    /**
-     * Register the memory cache with the application.
-     */
-    public void registerMemoryCache(final MemoryCache cache) {
-        synchronized (mMemoryCacheLock) {
-            mMemoryCaches.add(cache);
-        }
-    }
-
-    /**
-     * Unregister the memory cache with the application.
-     */
-    public void unregisterMemoryCache(final MemoryCache cache) {
-        synchronized (mMemoryCacheLock) {
-            mMemoryCaches.remove(cache);
-        }
-    }
-
-    /**
-     * Reclaim memory in all the memory caches in the application.
-     */
-    @SuppressWarnings("unchecked")
-    public void reclaimMemory() {
-        // We're creating a cache copy in the lock to ensure we're not working on a concurrently
-        // modified set, then reclaim outside of the lock to minimize the time within the lock.
-        final HashSet<MemoryCache> shallowCopy;
-        synchronized (mMemoryCacheLock) {
-            shallowCopy = (HashSet<MemoryCache>) mMemoryCaches.clone();
-        }
-        for (final MemoryCache cache : shallowCopy) {
-            cache.reclaim();
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/MessageNotificationState.java b/src/com/android/messaging/datamodel/MessageNotificationState.java
deleted file mode 100644
index 6b858fa..0000000
--- a/src/com/android/messaging/datamodel/MessageNotificationState.java
+++ /dev/null
@@ -1,1347 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Typeface;
-import android.net.Uri;
-import androidx.core.app.NotificationCompat;
-import androidx.core.app.NotificationCompat.Builder;
-import androidx.core.app.NotificationCompat.WearableExtender;
-import androidx.core.app.NotificationManagerCompat;
-import android.text.Html;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.SpannableStringBuilder;
-import android.text.Spanned;
-import android.text.TextUtils;
-import android.text.style.ForegroundColorSpan;
-import android.text.style.StyleSpan;
-import android.text.style.TextAppearanceSpan;
-import android.text.style.URLSpan;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.ConversationMessageData;
-import com.android.messaging.datamodel.data.ConversationParticipantsData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.media.VideoThumbnailRequest;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.ConversationIdSet;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.PendingIntentConstants;
-import com.android.messaging.util.UriUtil;
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Notification building class for conversation messages.
- *
- * Message Notifications are built in several stages with several utility classes.
- * 1) Perform a database query and fill a data structure with information on messages and
- *    conversations which need to be notified.
- * 2) Based on the data structure choose an appropriate NotificationState subclass to
- *    represent all the notifications.
- *    -- For one or more messages in one conversation: MultiMessageNotificationState.
- *    -- For multiple messages in multiple conversations: MultiConversationNotificationState
- *
- *  A three level structure is used to coalesce the data from the database. From bottom to top:
- *  1) NotificationLineInfo - A single message that needs to be notified.
- *  2) ConversationLineInfo - A list of NotificationLineInfo in a single conversation.
- *  3) ConversationInfoList - A list of ConversationLineInfo and the total number of messages.
- *
- *  The createConversationInfoList function performs the query and creates the data structure.
- */
-public abstract class MessageNotificationState extends NotificationState {
-    // Logging
-    static final String TAG = LogUtil.BUGLE_NOTIFICATIONS_TAG;
-    private static final int MAX_MESSAGES_IN_WEARABLE_PAGE = 20;
-
-    private static final int MAX_CHARACTERS_IN_GROUP_NAME = 30;
-
-    private static final int REPLY_INTENT_REQUEST_CODE_OFFSET = 0;
-    private static final int NUM_EXTRA_REQUEST_CODES_NEEDED = 1;
-    protected String mTickerSender = null;
-    protected CharSequence mTickerText = null;
-    protected String mTitle = null;
-    protected CharSequence mContent = null;
-    protected Uri mAttachmentUri = null;
-    protected String mAttachmentType = null;
-
-    @Override
-    protected Uri getAttachmentUri() {
-        return mAttachmentUri;
-    }
-
-    @Override
-    protected String getAttachmentType() {
-        return mAttachmentType;
-    }
-
-    @Override
-    public int getIcon() {
-        return R.drawable.ic_sms_light;
-    }
-
-    @Override
-    public int getPriority() {
-        // Returning PRIORITY_HIGH causes L to put up a HUD notification. Without it, the ticker
-        // isn't displayed.
-        return Notification.PRIORITY_HIGH;
-    }
-
-    /**
-     * Base class for single notification events for messages. Multiple of these
-     * may be grouped into a single conversation.
-     */
-    static class NotificationLineInfo {
-
-        final int mNotificationType;
-
-        NotificationLineInfo() {
-            mNotificationType = BugleNotifications.LOCAL_SMS_NOTIFICATION;
-        }
-
-        NotificationLineInfo(final int notificationType) {
-            mNotificationType = notificationType;
-        }
-    }
-
-    /**
-     * Information on a single chat message which should be shown in a notification.
-     */
-    static class MessageLineInfo extends NotificationLineInfo {
-        final CharSequence mText;
-        Uri mAttachmentUri;
-        String mAttachmentType;
-        final String mAuthorFullName;
-        final String mAuthorFirstName;
-        boolean mIsManualDownloadNeeded;
-        final String mMessageId;
-
-        MessageLineInfo(final boolean isGroup, final String authorFullName,
-                final String authorFirstName, final CharSequence text, final Uri attachmentUrl,
-                final String attachmentType, final boolean isManualDownloadNeeded,
-                final String messageId) {
-            super(BugleNotifications.LOCAL_SMS_NOTIFICATION);
-            mAuthorFullName = authorFullName;
-            mAuthorFirstName = authorFirstName;
-            mText = text;
-            mAttachmentUri = attachmentUrl;
-            mAttachmentType = attachmentType;
-            mIsManualDownloadNeeded = isManualDownloadNeeded;
-            mMessageId = messageId;
-        }
-    }
-
-    /**
-     * Information on all the notification messages within a single conversation.
-     */
-    static class ConversationLineInfo {
-        // Conversation id of the latest message in the notification for this merged conversation.
-        final String mConversationId;
-
-        // True if this represents a group conversation.
-        final boolean mIsGroup;
-
-        // Name of the group conversation if available.
-        final String mGroupConversationName;
-
-        // True if this conversation's recipients includes one or more email address(es)
-        // (see ConversationColumns.INCLUDE_EMAIL_ADDRESS)
-        final boolean mIncludeEmailAddress;
-
-        // Timestamp of the latest message
-        final long mReceivedTimestamp;
-
-        // Self participant id.
-        final String mSelfParticipantId;
-
-        // List of individual line notifications to be parsed later.
-        final List<NotificationLineInfo> mLineInfos;
-
-        // Total number of messages. Might be different that mLineInfos.size() as the number of
-        // line infos is capped.
-        int mTotalMessageCount;
-
-        // Custom ringtone if set
-        final String mRingtoneUri;
-
-        // Should notification be enabled for this conversation?
-        final boolean mNotificationEnabled;
-
-        // Should notifications vibrate for this conversation?
-        final boolean mNotificationVibrate;
-
-        // Avatar uri of sender
-        final Uri mAvatarUri;
-
-        // Contact uri of sender
-        final Uri mContactUri;
-
-        // Subscription id.
-        final int mSubId;
-
-        // Number of participants
-        final int mParticipantCount;
-
-        public ConversationLineInfo(final String conversationId,
-                final boolean isGroup,
-                final String groupConversationName,
-                final boolean includeEmailAddress,
-                final long receivedTimestamp,
-                final String selfParticipantId,
-                final String ringtoneUri,
-                final boolean notificationEnabled,
-                final boolean notificationVibrate,
-                final Uri avatarUri,
-                final Uri contactUri,
-                final int subId,
-                final int participantCount) {
-            mConversationId = conversationId;
-            mIsGroup = isGroup;
-            mGroupConversationName = groupConversationName;
-            mIncludeEmailAddress = includeEmailAddress;
-            mReceivedTimestamp = receivedTimestamp;
-            mSelfParticipantId = selfParticipantId;
-            mLineInfos = new ArrayList<NotificationLineInfo>();
-            mTotalMessageCount = 0;
-            mRingtoneUri = ringtoneUri;
-            mAvatarUri = avatarUri;
-            mContactUri = contactUri;
-            mNotificationEnabled = notificationEnabled;
-            mNotificationVibrate = notificationVibrate;
-            mSubId = subId;
-            mParticipantCount = participantCount;
-        }
-
-        public int getLatestMessageNotificationType() {
-            final MessageLineInfo messageLineInfo = getLatestMessageLineInfo();
-            if (messageLineInfo == null) {
-                return BugleNotifications.LOCAL_SMS_NOTIFICATION;
-            }
-            return messageLineInfo.mNotificationType;
-        }
-
-        public String getLatestMessageId() {
-            final MessageLineInfo messageLineInfo = getLatestMessageLineInfo();
-            if (messageLineInfo == null) {
-                return null;
-            }
-            return messageLineInfo.mMessageId;
-        }
-
-        public boolean getDoesLatestMessageNeedDownload() {
-            final MessageLineInfo messageLineInfo = getLatestMessageLineInfo();
-            if (messageLineInfo == null) {
-                return false;
-            }
-            return messageLineInfo.mIsManualDownloadNeeded;
-        }
-
-        private MessageLineInfo getLatestMessageLineInfo() {
-            // The latest message is stored at index zero of the message line infos.
-            if (mLineInfos.size() > 0 && mLineInfos.get(0) instanceof MessageLineInfo) {
-                return (MessageLineInfo) mLineInfos.get(0);
-            }
-            return null;
-        }
-    }
-
-    /**
-     * Information on all the notification messages across all conversations.
-     */
-    public static class ConversationInfoList {
-        final int mMessageCount;
-        final List<ConversationLineInfo> mConvInfos;
-        public ConversationInfoList(final int count, final List<ConversationLineInfo> infos) {
-            mMessageCount = count;
-            mConvInfos = infos;
-        }
-    }
-
-    final ConversationInfoList mConvList;
-    private long mLatestReceivedTimestamp;
-
-    private static ConversationIdSet makeConversationIdSet(final ConversationInfoList convList) {
-        ConversationIdSet set = null;
-        if (convList != null && convList.mConvInfos != null && convList.mConvInfos.size() > 0) {
-            set = new ConversationIdSet();
-            for (final ConversationLineInfo info : convList.mConvInfos) {
-                    set.add(info.mConversationId);
-            }
-        }
-        return set;
-    }
-
-    protected MessageNotificationState(final ConversationInfoList convList) {
-        super(makeConversationIdSet(convList));
-        mConvList = convList;
-        mType = PendingIntentConstants.SMS_NOTIFICATION_ID;
-        mLatestReceivedTimestamp = Long.MIN_VALUE;
-        if (convList != null) {
-            for (final ConversationLineInfo info : convList.mConvInfos) {
-                mLatestReceivedTimestamp = Math.max(mLatestReceivedTimestamp,
-                        info.mReceivedTimestamp);
-            }
-        }
-    }
-
-    @Override
-    public long getLatestReceivedTimestamp() {
-        return mLatestReceivedTimestamp;
-    }
-
-    @Override
-    public int getNumRequestCodesNeeded() {
-        // Get additional request codes for the Reply PendingIntent (wearables only)
-        // and the DND PendingIntent.
-        return super.getNumRequestCodesNeeded() + NUM_EXTRA_REQUEST_CODES_NEEDED;
-    }
-
-    private int getBaseExtraRequestCode() {
-        return mBaseRequestCode + super.getNumRequestCodesNeeded();
-    }
-
-    public int getReplyIntentRequestCode() {
-        return getBaseExtraRequestCode() + REPLY_INTENT_REQUEST_CODE_OFFSET;
-    }
-
-    @Override
-    public PendingIntent getClearIntent() {
-        return UIIntents.get().getPendingIntentForClearingNotifications(
-                    Factory.get().getApplicationContext(),
-                    BugleNotifications.UPDATE_MESSAGES,
-                    mConversationIds,
-                    getClearIntentRequestCode());
-    }
-
-    /**
-     * Notification for multiple messages in at least 2 different conversations.
-     */
-    public static class MultiConversationNotificationState extends MessageNotificationState {
-
-        public final List<MessageNotificationState>
-                mChildren = new ArrayList<MessageNotificationState>();
-
-        public MultiConversationNotificationState(
-                final ConversationInfoList convList, final MessageNotificationState state) {
-            super(convList);
-            mAttachmentUri = null;
-            mAttachmentType = null;
-
-            // Pull the ticker title/text from the single notification
-            mTickerSender = state.getTitle();
-            mTitle = Factory.get().getApplicationContext().getResources().getQuantityString(
-                    R.plurals.notification_new_messages,
-                    convList.mMessageCount, convList.mMessageCount);
-            mTickerText = state.mContent;
-
-            // Create child notifications for each conversation,
-            // which will be displayed (only) on a wearable device.
-            for (int i = 0; i < convList.mConvInfos.size(); i++) {
-                final ConversationLineInfo convInfo = convList.mConvInfos.get(i);
-                if (!(convInfo.mLineInfos.get(0) instanceof MessageLineInfo)) {
-                    continue;
-                }
-                setPeopleForConversation(convInfo.mConversationId);
-                final ConversationInfoList list = new ConversationInfoList(
-                        convInfo.mTotalMessageCount, Lists.newArrayList(convInfo));
-                mChildren.add(new BundledMessageNotificationState(list, i));
-            }
-        }
-
-        @Override
-        public int getIcon() {
-            return R.drawable.ic_sms_multi_light;
-        }
-
-        @Override
-        protected NotificationCompat.Style build(final Builder builder) {
-            builder.setContentTitle(mTitle);
-            NotificationCompat.InboxStyle inboxStyle = null;
-            inboxStyle = new NotificationCompat.InboxStyle(builder);
-
-            final Context context = Factory.get().getApplicationContext();
-            // enumeration_comma is defined as ", "
-            final String separator = context.getString(R.string.enumeration_comma);
-            final StringBuilder senders = new StringBuilder();
-            long when = 0;
-            for (int i = 0; i < mConvList.mConvInfos.size(); i++) {
-                final ConversationLineInfo convInfo = mConvList.mConvInfos.get(i);
-                if (convInfo.mReceivedTimestamp > when) {
-                    when = convInfo.mReceivedTimestamp;
-                }
-                String sender;
-                CharSequence text;
-                final NotificationLineInfo lineInfo = convInfo.mLineInfos.get(0);
-                final MessageLineInfo messageLineInfo = (MessageLineInfo) lineInfo;
-                if (convInfo.mIsGroup) {
-                    sender = (convInfo.mGroupConversationName.length() >
-                            MAX_CHARACTERS_IN_GROUP_NAME) ?
-                                    truncateGroupMessageName(convInfo.mGroupConversationName)
-                                    : convInfo.mGroupConversationName;
-                } else {
-                    sender = messageLineInfo.mAuthorFullName;
-                }
-                text = messageLineInfo.mText;
-                mAttachmentUri = messageLineInfo.mAttachmentUri;
-                mAttachmentType = messageLineInfo.mAttachmentType;
-
-                inboxStyle.addLine(BugleNotifications.formatInboxMessage(
-                        sender, text, mAttachmentUri, mAttachmentType));
-                if (sender != null) {
-                    if (senders.length() > 0) {
-                        senders.append(separator);
-                    }
-                    senders.append(sender);
-                }
-            }
-            // for collapsed state
-            mContent = senders;
-            builder.setContentText(senders)
-                .setTicker(getTicker())
-                .setWhen(when);
-
-            return inboxStyle;
-        }
-    }
-
-    /**
-     * Truncate group conversation name to be displayed in the notifications. This either truncates
-     * the entire group name or finds the last comma in the available length and truncates the name
-     * at that point
-     */
-    private static String truncateGroupMessageName(final String conversationName) {
-        int endIndex = MAX_CHARACTERS_IN_GROUP_NAME;
-        for (int i = MAX_CHARACTERS_IN_GROUP_NAME; i >= 0; i--) {
-            // The dividing marker should stay consistent with ConversationListItemData.DIVIDER_TEXT
-            if (conversationName.charAt(i) == ',') {
-                endIndex = i;
-                break;
-            }
-        }
-        return conversationName.substring(0, endIndex) + '\u2026';
-    }
-
-    /**
-     * Notification for multiple messages in a single conversation. Also used if there is a single
-     * message in a single conversation.
-     */
-    public static class MultiMessageNotificationState extends MessageNotificationState {
-
-        public MultiMessageNotificationState(final ConversationInfoList convList) {
-            super(convList);
-            // This conversation has been accepted.
-            final ConversationLineInfo convInfo = convList.mConvInfos.get(0);
-            setAvatarUrlsForConversation(convInfo.mConversationId);
-            setPeopleForConversation(convInfo.mConversationId);
-
-            final Context context = Factory.get().getApplicationContext();
-            MessageLineInfo messageInfo = (MessageLineInfo) convInfo.mLineInfos.get(0);
-            // attached photo
-            mAttachmentUri = messageInfo.mAttachmentUri;
-            mAttachmentType = messageInfo.mAttachmentType;
-            mContent = messageInfo.mText;
-
-            if (mAttachmentUri != null) {
-                // The default attachment type is an image, since that's what was originally
-                // supported. When there's no content type, assume it's an image.
-                int message = R.string.notification_picture;
-                if (ContentType.isAudioType(mAttachmentType)) {
-                    message = R.string.notification_audio;
-                } else if (ContentType.isVideoType(mAttachmentType)) {
-                    message = R.string.notification_video;
-                } else if (ContentType.isVCardType(mAttachmentType)) {
-                    message = R.string.notification_vcard;
-                }
-                final String attachment = context.getString(message);
-                final SpannableStringBuilder spanBuilder = new SpannableStringBuilder();
-                if (!TextUtils.isEmpty(mContent)) {
-                    spanBuilder.append(mContent).append(System.getProperty("line.separator"));
-                }
-                final int start = spanBuilder.length();
-                spanBuilder.append(attachment);
-                spanBuilder.setSpan(new StyleSpan(Typeface.ITALIC), start, spanBuilder.length(),
-                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                mContent = spanBuilder;
-            }
-            if (convInfo.mIsGroup) {
-                // When the message is part of a group, the sender's first name
-                // is prepended to the message, but not for the ticker message.
-                mTickerText = mContent;
-                mTickerSender = messageInfo.mAuthorFullName;
-                // append the bold name to the front of the message
-                mContent = BugleNotifications.buildSpaceSeparatedMessage(
-                        messageInfo.mAuthorFullName, mContent, mAttachmentUri,
-                        mAttachmentType);
-                mTitle = convInfo.mGroupConversationName;
-            } else {
-                // No matter how many messages there are, since this is a 1:1, just
-                // get the author full name from the first one.
-                messageInfo = (MessageLineInfo) convInfo.mLineInfos.get(0);
-                mTitle = messageInfo.mAuthorFullName;
-            }
-        }
-
-        @Override
-        protected NotificationCompat.Style build(final Builder builder) {
-            builder.setContentTitle(mTitle)
-                .setTicker(getTicker());
-
-            NotificationCompat.Style notifStyle = null;
-            final ConversationLineInfo convInfo = mConvList.mConvInfos.get(0);
-            final List<NotificationLineInfo> lineInfos = convInfo.mLineInfos;
-            final int messageCount = lineInfos.size();
-            // At this point, all the messages come from the same conversation. We need to load
-            // the sender's avatar and then finish building the notification on a callback.
-
-            builder.setContentText(mContent);   // for collapsed state
-
-            if (messageCount == 1) {
-                final boolean shouldShowImage = ContentType.isImageType(mAttachmentType)
-                        || (ContentType.isVideoType(mAttachmentType)
-                        && VideoThumbnailRequest.shouldShowIncomingVideoThumbnails());
-                if (mAttachmentUri != null && shouldShowImage) {
-                    // Show "Picture" as the content
-                    final MessageLineInfo messageLineInfo = (MessageLineInfo) lineInfos.get(0);
-                    String authorFirstName = messageLineInfo.mAuthorFirstName;
-
-                    // For the collapsed state, just show "picture" unless this is a
-                    // group conversation. If it's a group, show the sender name and
-                    // "picture".
-                    final CharSequence tickerTag =
-                            BugleNotifications.formatAttachmentTag(authorFirstName,
-                                    mAttachmentType);
-                    // For 1:1 notifications don't show first name in the notification, but
-                    // do show it in the ticker text
-                    CharSequence pictureTag = tickerTag;
-                    if (!convInfo.mIsGroup) {
-                        authorFirstName = null;
-                        pictureTag = BugleNotifications.formatAttachmentTag(authorFirstName,
-                                mAttachmentType);
-                    }
-                    builder.setContentText(pictureTag);
-                    builder.setTicker(tickerTag);
-
-                    notifStyle = new NotificationCompat.BigPictureStyle(builder)
-                        .setSummaryText(BugleNotifications.formatInboxMessage(
-                                authorFirstName,
-                                null, null,
-                                null));  // expanded state, just show sender
-                } else {
-                    notifStyle = new NotificationCompat.BigTextStyle(builder)
-                    .bigText(mContent);
-                }
-            } else {
-                // We've got multiple messages for the same sender.
-                // Starting with the oldest new message, display the full text of each message.
-                // Begin a line for each subsequent message.
-                final SpannableStringBuilder buf = new SpannableStringBuilder();
-
-                for (int i = lineInfos.size() - 1; i >= 0; --i) {
-                    final NotificationLineInfo info = lineInfos.get(i);
-                    final MessageLineInfo messageLineInfo = (MessageLineInfo) info;
-                    mAttachmentUri = messageLineInfo.mAttachmentUri;
-                    mAttachmentType = messageLineInfo.mAttachmentType;
-                    CharSequence text = messageLineInfo.mText;
-                    if (!TextUtils.isEmpty(text) || mAttachmentUri != null) {
-                        if (convInfo.mIsGroup) {
-                            // append the bold name to the front of the message
-                            text = BugleNotifications.buildSpaceSeparatedMessage(
-                                    messageLineInfo.mAuthorFullName, text, mAttachmentUri,
-                                    mAttachmentType);
-                        } else {
-                            text = BugleNotifications.buildSpaceSeparatedMessage(
-                                    null, text, mAttachmentUri, mAttachmentType);
-                        }
-                        buf.append(text);
-                        if (i > 0) {
-                            buf.append('\n');
-                        }
-                    }
-                }
-
-                // Show a single notification -- big style with the text of all the messages
-                notifStyle = new NotificationCompat.BigTextStyle(builder).bigText(buf);
-            }
-            builder.setWhen(convInfo.mReceivedTimestamp);
-            return notifStyle;
-        }
-
-    }
-
-    private static boolean firstNameUsedMoreThanOnce(
-            final HashMap<String, Integer> map, final String firstName) {
-        if (map == null) {
-            return false;
-        }
-        if (firstName == null) {
-            return false;
-        }
-        final Integer count = map.get(firstName);
-        if (count != null) {
-            return count > 1;
-        } else {
-            return false;
-        }
-    }
-
-    private static HashMap<String, Integer> scanFirstNames(final String conversationId) {
-        final Context context = Factory.get().getApplicationContext();
-        final Uri uri =
-                MessagingContentProvider.buildConversationParticipantsUri(conversationId);
-        final ConversationParticipantsData participantsData = new ConversationParticipantsData();
-
-        try (final Cursor participantsCursor = context.getContentResolver().query(
-                    uri, ParticipantData.ParticipantsQuery.PROJECTION, null, null, null)) {
-            participantsData.bind(participantsCursor);
-        }
-
-        final Iterator<ParticipantData> iter = participantsData.iterator();
-
-        final HashMap<String, Integer> firstNames = new HashMap<String, Integer>();
-        boolean seenSelf = false;
-        while (iter.hasNext()) {
-            final ParticipantData participant = iter.next();
-            // Make sure we only add the self participant once
-            if (participant.isSelf()) {
-                if (seenSelf) {
-                    continue;
-                } else {
-                    seenSelf = true;
-                }
-            }
-
-            final String firstName = participant.getFirstName();
-            if (firstName == null) {
-                continue;
-            }
-
-            final int currentCount = firstNames.containsKey(firstName)
-                    ? firstNames.get(firstName)
-                    : 0;
-            firstNames.put(firstName, currentCount + 1);
-        }
-        return firstNames;
-    }
-
-    // Essentially, we're building a list of the past 20 messages for this conversation to display
-    // on the wearable.
-    public static Notification buildConversationPageForWearable(final String conversationId,
-            int participantCount) {
-        final Context context = Factory.get().getApplicationContext();
-
-        // Limit the number of messages to show. We just want enough to provide context for the
-        // notification. Fetch one more than we need, so we can tell if there are more messages
-        // before the one we're showing.
-        // TODO: in the query, a multipart message will contain a row for each part.
-        // We might need a smarter GROUP_BY. On the other hand, we might want to show each of the
-        // parts as separate messages on the wearable.
-        final int limit = MAX_MESSAGES_IN_WEARABLE_PAGE + 1;
-
-        final List<CharSequence> messages = Lists.newArrayList();
-        boolean hasSeenMessagesBeforeNotification = false;
-        Cursor convMessageCursor = null;
-        try {
-            final DatabaseWrapper db = DataModel.get().getDatabase();
-
-            final String[] queryArgs = { conversationId };
-            final String convPageSql = ConversationMessageData.getWearableQuerySql() + " LIMIT " +
-                    limit;
-            convMessageCursor = db.rawQuery(
-                    convPageSql,
-                    queryArgs);
-
-            if (convMessageCursor == null || !convMessageCursor.moveToFirst()) {
-                return null;
-            }
-            final ConversationMessageData convMessageData =
-                    new ConversationMessageData();
-
-            final HashMap<String, Integer> firstNames = scanFirstNames(conversationId);
-            do {
-                convMessageData.bind(convMessageCursor);
-
-                final String authorFullName = convMessageData.getSenderFullName();
-                final String authorFirstName = convMessageData.getSenderFirstName();
-                String text = convMessageData.getText();
-
-                final boolean isSmsPushNotification = convMessageData.getIsMmsNotification();
-
-                // if auto-download was off to show a message to tap to download the message. We
-                // might need to get that working again.
-                if (isSmsPushNotification && text != null) {
-                    text = convertHtmlAndStripUrls(text).toString();
-                }
-                // Skip messages without any content
-                if (TextUtils.isEmpty(text) && !convMessageData.hasAttachments()) {
-                    continue;
-                }
-                // Track whether there are messages prior to the one(s) shown in the notification.
-                if (convMessageData.getIsSeen()) {
-                    hasSeenMessagesBeforeNotification = true;
-                }
-
-                final boolean usedMoreThanOnce = firstNameUsedMoreThanOnce(
-                        firstNames, authorFirstName);
-                String displayName = usedMoreThanOnce ? authorFullName : authorFirstName;
-                if (TextUtils.isEmpty(displayName)) {
-                    if (convMessageData.getIsIncoming()) {
-                        displayName = convMessageData.getSenderDisplayDestination();
-                        if (TextUtils.isEmpty(displayName)) {
-                            displayName = context.getString(R.string.unknown_sender);
-                        }
-                    } else {
-                        displayName = context.getString(R.string.unknown_self_participant);
-                    }
-                }
-
-                Uri attachmentUri = null;
-                String attachmentType = null;
-                final List<MessagePartData> attachments = convMessageData.getAttachments();
-                for (final MessagePartData messagePartData : attachments) {
-                    // Look for the first attachment that's not the text piece.
-                    if (!messagePartData.isText()) {
-                        attachmentUri = messagePartData.getContentUri();
-                        attachmentType = messagePartData.getContentType();
-                        break;
-                    }
-                }
-
-                final CharSequence message = BugleNotifications.buildSpaceSeparatedMessage(
-                        displayName, text, attachmentUri, attachmentType);
-                messages.add(message);
-
-            } while (convMessageCursor.moveToNext());
-        } finally {
-            if (convMessageCursor != null) {
-                convMessageCursor.close();
-            }
-        }
-
-        // If there is no conversation history prior to what is already visible in the main
-        // notification, there's no need to include the conversation log, too.
-        final int maxMessagesInNotification = getMaxMessagesInConversationNotification();
-        if (!hasSeenMessagesBeforeNotification && messages.size() <= maxMessagesInNotification) {
-            return null;
-        }
-
-        final SpannableStringBuilder bigText = new SpannableStringBuilder();
-        // There is at least 1 message prior to the first one that we're going to show.
-        // Indicate this by inserting an ellipsis at the beginning of the conversation log.
-        if (convMessageCursor.getCount() == limit) {
-            bigText.append(context.getString(R.string.ellipsis) + "\n\n");
-            if (messages.size() > MAX_MESSAGES_IN_WEARABLE_PAGE) {
-                messages.remove(messages.size() - 1);
-            }
-        }
-        // Messages are sorted in descending timestamp order, so iterate backwards
-        // to get them back in ascending order for display purposes.
-        for (int i = messages.size() - 1; i >= 0; --i) {
-            bigText.append(messages.get(i));
-            if (i > 0) {
-                bigText.append("\n\n");
-            }
-        }
-        ++participantCount;     // Add in myself
-
-        if (participantCount > 2) {
-            final SpannableString statusText = new SpannableString(
-                    context.getResources().getQuantityString(R.plurals.wearable_participant_count,
-                            participantCount, participantCount));
-            statusText.setSpan(new ForegroundColorSpan(context.getResources().getColor(
-                    R.color.wearable_notification_participants_count)), 0, statusText.length(),
-                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-            bigText.append("\n\n").append(statusText);
-        }
-
-        final NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(context);
-        final NotificationCompat.Style notifStyle =
-                new NotificationCompat.BigTextStyle(notifBuilder).bigText(bigText);
-        notifBuilder.setStyle(notifStyle);
-
-        final WearableExtender wearableExtender = new WearableExtender();
-        wearableExtender.setStartScrollBottom(true);
-        notifBuilder.extend(wearableExtender);
-
-        return notifBuilder.build();
-    }
-
-    /**
-     * Notification for one or more messages in a single conversation, which is bundled together
-     * with notifications for other conversations on a wearable device.
-     */
-    public static class BundledMessageNotificationState extends MultiMessageNotificationState {
-        public int mGroupOrder;
-        public BundledMessageNotificationState(final ConversationInfoList convList,
-                final int groupOrder) {
-            super(convList);
-            mGroupOrder = groupOrder;
-        }
-    }
-
-    /**
-     * Performs a query on the database.
-     */
-    private static ConversationInfoList createConversationInfoList() {
-        // Map key is conversation id. We use LinkedHashMap to ensure that entries are iterated in
-        // the same order they were originally added. We scan unseen messages from newest to oldest,
-        // so the corresponding conversations are added in that order, too.
-        final Map<String, ConversationLineInfo> convLineInfos = new LinkedHashMap<>();
-        int messageCount = 0;
-
-        Cursor convMessageCursor = null;
-        try {
-            final Context context = Factory.get().getApplicationContext();
-            final DatabaseWrapper db = DataModel.get().getDatabase();
-
-            convMessageCursor = db.rawQuery(
-                    ConversationMessageData.getNotificationQuerySql(),
-                    null);
-
-            if (convMessageCursor != null && convMessageCursor.moveToFirst()) {
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "MessageNotificationState: Found unseen message notifications.");
-                }
-                final ConversationMessageData convMessageData =
-                        new ConversationMessageData();
-
-                HashMap<String, Integer> firstNames = null;
-                String conversationIdForFirstNames = null;
-                String groupConversationName = null;
-                final int maxMessages = getMaxMessagesInConversationNotification();
-
-                do {
-                    convMessageData.bind(convMessageCursor);
-
-                    // First figure out if this is a valid message.
-                    String authorFullName = convMessageData.getSenderFullName();
-                    String authorFirstName = convMessageData.getSenderFirstName();
-                    final String messageText = convMessageData.getText();
-
-                    final String convId = convMessageData.getConversationId();
-                    final String messageId = convMessageData.getMessageId();
-
-                    CharSequence text = messageText;
-                    final boolean isManualDownloadNeeded = convMessageData.getIsMmsNotification();
-                    if (isManualDownloadNeeded) {
-                        // Don't try and convert the text from html if it's sms and not a sms push
-                        // notification.
-                        Assert.equals(MessageData.BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD,
-                                convMessageData.getStatus());
-                        text = context.getResources().getString(
-                                R.string.message_title_manual_download);
-                    }
-                    ConversationLineInfo currConvInfo = convLineInfos.get(convId);
-                    if (currConvInfo == null) {
-                        final ConversationListItemData convData =
-                                ConversationListItemData.getExistingConversation(db, convId);
-                        if (!convData.getNotificationEnabled()) {
-                            // Skip conversations that have notifications disabled.
-                            continue;
-                        }
-                        final int subId = BugleDatabaseOperations.getSelfSubscriptionId(db,
-                                convData.getSelfId());
-                        groupConversationName = convData.getName();
-                        final Uri avatarUri = AvatarUriUtil.createAvatarUri(
-                                convMessageData.getSenderProfilePhotoUri(),
-                                convMessageData.getSenderFullName(),
-                                convMessageData.getSenderNormalizedDestination(),
-                                convMessageData.getSenderContactLookupKey());
-                        currConvInfo = new ConversationLineInfo(convId,
-                                convData.getIsGroup(),
-                                groupConversationName,
-                                convData.getIncludeEmailAddress(),
-                                convMessageData.getReceivedTimeStamp(),
-                                convData.getSelfId(),
-                                convData.getNotificationSoundUri(),
-                                convData.getNotificationEnabled(),
-                                convData.getNotifiationVibrate(),
-                                avatarUri,
-                                convMessageData.getSenderContactLookupUri(),
-                                subId,
-                                convData.getParticipantCount());
-                        convLineInfos.put(convId, currConvInfo);
-                    }
-                    // Prepare the message line
-                    if (currConvInfo.mTotalMessageCount < maxMessages) {
-                        if (currConvInfo.mIsGroup) {
-                            if (authorFirstName == null) {
-                                // authorFullName might be null as well. In that case, we won't
-                                // show an author. That is better than showing all the group
-                                // names again on the 2nd line.
-                                authorFirstName = authorFullName;
-                            }
-                        } else {
-                            // don't recompute this if we don't need to
-                            if (!TextUtils.equals(conversationIdForFirstNames, convId)) {
-                                firstNames = scanFirstNames(convId);
-                                conversationIdForFirstNames = convId;
-                            }
-                            if (firstNames != null) {
-                                final Integer count = firstNames.get(authorFirstName);
-                                if (count != null && count > 1) {
-                                    authorFirstName = authorFullName;
-                                }
-                            }
-
-                            if (authorFullName == null) {
-                                authorFullName = groupConversationName;
-                            }
-                            if (authorFirstName == null) {
-                                authorFirstName = groupConversationName;
-                            }
-                        }
-                        final String subjectText = MmsUtils.cleanseMmsSubject(
-                                context.getResources(),
-                                convMessageData.getMmsSubject());
-                        if (!TextUtils.isEmpty(subjectText)) {
-                            final String subjectLabel =
-                                    context.getString(R.string.subject_label);
-                            final SpannableStringBuilder spanBuilder =
-                                    new SpannableStringBuilder();
-
-                            spanBuilder.append(context.getString(R.string.notification_subject,
-                                    subjectLabel, subjectText));
-                            spanBuilder.setSpan(new TextAppearanceSpan(
-                                    context, R.style.NotificationSubjectText), 0,
-                                    subjectLabel.length(),
-                                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                            if (!TextUtils.isEmpty(text)) {
-                                // Now add the actual message text below the subject header.
-                                spanBuilder.append(System.getProperty("line.separator") + text);
-                            }
-                            text = spanBuilder;
-                        }
-                        // If we've got attachments, find the best one. If one of the messages is
-                        // a photo, save the url so we'll display a big picture notification.
-                        // Otherwise, show the first one we find.
-                        Uri attachmentUri = null;
-                        String attachmentType = null;
-                        final MessagePartData messagePartData =
-                                getMostInterestingAttachment(convMessageData);
-                        if (messagePartData != null) {
-                            attachmentUri = messagePartData.getContentUri();
-                            attachmentType = messagePartData.getContentType();
-                        }
-                        currConvInfo.mLineInfos.add(new MessageLineInfo(currConvInfo.mIsGroup,
-                                authorFullName, authorFirstName, text,
-                                attachmentUri, attachmentType, isManualDownloadNeeded, messageId));
-                    }
-                    messageCount++;
-                    currConvInfo.mTotalMessageCount++;
-                } while (convMessageCursor.moveToNext());
-            }
-        } finally {
-            if (convMessageCursor != null) {
-                convMessageCursor.close();
-            }
-        }
-        if (convLineInfos.isEmpty()) {
-            return null;
-        } else {
-            return new ConversationInfoList(messageCount,
-                    Lists.newLinkedList(convLineInfos.values()));
-        }
-    }
-
-    /**
-     * Scans all the attachments for a message and returns the most interesting one that we'll
-     * show in a notification. By order of importance, in case there are multiple attachments:
-     *      1- an image (because we can show the image as a BigPictureNotification)
-     *      2- a video (because we can show a video frame as a BigPictureNotification)
-     *      3- a vcard
-     *      4- an audio attachment
-     * @return MessagePartData for the most interesting part. Can be null.
-     */
-    private static MessagePartData getMostInterestingAttachment(
-            final ConversationMessageData convMessageData) {
-        final List<MessagePartData> attachments = convMessageData.getAttachments();
-
-        MessagePartData imagePart = null;
-        MessagePartData audioPart = null;
-        MessagePartData vcardPart = null;
-        MessagePartData videoPart = null;
-
-        // 99.99% of the time there will be 0 or 1 part, since receiving slideshows is so
-        // uncommon.
-
-        // Remember the first of each type of part.
-        for (final MessagePartData messagePartData : attachments) {
-            if (messagePartData.isImage() && imagePart == null) {
-                imagePart = messagePartData;
-            }
-            if (messagePartData.isVideo() && videoPart == null) {
-                videoPart = messagePartData;
-            }
-            if (messagePartData.isVCard() && vcardPart == null) {
-                vcardPart = messagePartData;
-            }
-            if (messagePartData.isAudio() && audioPart == null) {
-                audioPart = messagePartData;
-            }
-        }
-        if (imagePart != null) {
-            return imagePart;
-        } else if (videoPart != null) {
-            return videoPart;
-        } else if (audioPart != null) {
-            return audioPart;
-        } else if (vcardPart != null) {
-            return vcardPart;
-        }
-        return null;
-    }
-
-    private static int getMaxMessagesInConversationNotification() {
-        if (!BugleNotifications.isWearCompanionAppInstalled()) {
-            return BugleGservices.get().getInt(
-                    BugleGservicesKeys.MAX_MESSAGES_IN_CONVERSATION_NOTIFICATION,
-                    BugleGservicesKeys.MAX_MESSAGES_IN_CONVERSATION_NOTIFICATION_DEFAULT);
-        }
-        return BugleGservices.get().getInt(
-                BugleGservicesKeys.MAX_MESSAGES_IN_CONVERSATION_NOTIFICATION_WITH_WEARABLE,
-                BugleGservicesKeys.MAX_MESSAGES_IN_CONVERSATION_NOTIFICATION_WITH_WEARABLE_DEFAULT);
-    }
-
-    /**
-     * Scans the database for messages that need to go into notifications. Creates the appropriate
-     * MessageNotificationState depending on if there are multiple senders, or
-     * messages from one sender.
-     * @return NotificationState for the notification created.
-     */
-    public static NotificationState getNotificationState() {
-        MessageNotificationState state = null;
-        final ConversationInfoList convList = createConversationInfoList();
-
-        if (convList == null || convList.mConvInfos.size() == 0) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "MessageNotificationState: No unseen notifications");
-            }
-        } else {
-            final ConversationLineInfo convInfo = convList.mConvInfos.get(0);
-            state = new MultiMessageNotificationState(convList);
-
-            if (convList.mConvInfos.size() > 1) {
-                // We've got notifications across multiple conversations. Pass in the notification
-                // we just built of the most recent notification so we can use that to show the
-                // user the new message in the ticker.
-                state = new MultiConversationNotificationState(convList, state);
-            } else {
-                // For now, only show avatars for notifications for a single conversation.
-                if (convInfo.mAvatarUri != null) {
-                    if (state.mParticipantAvatarsUris == null) {
-                        state.mParticipantAvatarsUris = new ArrayList<Uri>(1);
-                    }
-                    state.mParticipantAvatarsUris.add(convInfo.mAvatarUri);
-                }
-                if (convInfo.mContactUri != null) {
-                    if (state.mParticipantContactUris == null) {
-                        state.mParticipantContactUris = new ArrayList<Uri>(1);
-                    }
-                    state.mParticipantContactUris.add(convInfo.mContactUri);
-                }
-            }
-        }
-        if (state != null && LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "MessageNotificationState: Notification state created"
-                    + ", title = "
-                    + (state.mTickerSender != null ? state.mTickerSender : state.mTitle)
-                    + ", content = "
-                    + (state.mTickerText != null ? state.mTickerText : state.mContent));
-        }
-        return state;
-    }
-
-    protected String getTitle() {
-        return mTitle;
-    }
-
-    @Override
-    public int getLatestMessageNotificationType() {
-        // This function is called to determine whether the most recent notification applies
-        // to an sms conversation or a hangout conversation. We have different ringtone/vibrate
-        // settings for both types of conversations.
-        if (mConvList.mConvInfos.size() > 0) {
-            final ConversationLineInfo convInfo = mConvList.mConvInfos.get(0);
-            return convInfo.getLatestMessageNotificationType();
-        }
-        return BugleNotifications.LOCAL_SMS_NOTIFICATION;
-    }
-
-    @Override
-    public String getRingtoneUri() {
-        if (mConvList.mConvInfos.size() > 0) {
-            return mConvList.mConvInfos.get(0).mRingtoneUri;
-        }
-        return null;
-    }
-
-    @Override
-    public boolean getNotificationVibrate() {
-        if (mConvList.mConvInfos.size() > 0) {
-            return mConvList.mConvInfos.get(0).mNotificationVibrate;
-        }
-        return false;
-    }
-
-    protected CharSequence getTicker() {
-        return BugleNotifications.buildColonSeparatedMessage(
-                mTickerSender != null ? mTickerSender : mTitle,
-                mTickerText != null ? mTickerText : mContent,
-                null,
-                null);
-    }
-
-    private static CharSequence convertHtmlAndStripUrls(final String s) {
-        final Spanned text = Html.fromHtml(s);
-        if (text instanceof Spannable) {
-            stripUrls((Spannable) text);
-        }
-        return text;
-    }
-
-    // Since we don't want to show URLs in notifications, a function
-    // to remove them in place.
-    private static void stripUrls(final Spannable text) {
-        final URLSpan[] spans = text.getSpans(0, text.length(), URLSpan.class);
-        for (final URLSpan span : spans) {
-            text.removeSpan(span);
-        }
-    }
-
-    /*
-    private static void updateAlertStatusMessages(final long thresholdDeltaMs) {
-        // TODO may need this when supporting error notifications
-        final EsDatabaseHelper helper = EsDatabaseHelper.getDatabaseHelper();
-        final ContentValues values = new ContentValues();
-        final long nowMicros = System.currentTimeMillis() * 1000;
-        values.put(MessageColumns.ALERT_STATUS, "1");
-        final String selection =
-                MessageColumns.ALERT_STATUS + "=0 AND (" +
-                MessageColumns.STATUS + "=" + EsProvider.MESSAGE_STATUS_FAILED_TO_SEND + " OR (" +
-                MessageColumns.STATUS + "!=" + EsProvider.MESSAGE_STATUS_ON_SERVER + " AND " +
-                MessageColumns.TIMESTAMP + "+" + thresholdDeltaMs*1000 + "<" + nowMicros + ")) ";
-
-        final int updateCount = helper.getWritableDatabaseWrapper().update(
-                EsProvider.MESSAGES_TABLE,
-                values,
-                selection,
-                null);
-        if (updateCount > 0) {
-            EsConversationsData.notifyConversationsChanged();
-        }
-    }*/
-
-    static CharSequence applyWarningTextColor(final Context context,
-            final CharSequence text) {
-        if (text == null) {
-            return null;
-        }
-        final SpannableStringBuilder spanBuilder = new SpannableStringBuilder();
-        spanBuilder.append(text);
-        spanBuilder.setSpan(new ForegroundColorSpan(context.getResources().getColor(
-                R.color.notification_warning_color)), 0, text.length(),
-                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-        return spanBuilder;
-    }
-
-    /**
-     * Check for failed messages and post notifications as needed.
-     * TODO: Rewrite this as a NotificationState.
-     */
-    public static void checkFailedMessages() {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final Cursor messageDataCursor = db.query(DatabaseHelper.MESSAGES_TABLE,
-            MessageData.getProjection(),
-            FailedMessageQuery.FAILED_MESSAGES_WHERE_CLAUSE,
-            null /*selectionArgs*/,
-            null /*groupBy*/,
-            null /*having*/,
-            FailedMessageQuery.FAILED_ORDER_BY);
-
-        try {
-            final Context context = Factory.get().getApplicationContext();
-            final Resources resources = context.getResources();
-            final NotificationManagerCompat notificationManager =
-                    NotificationManagerCompat.from(context);
-            if (messageDataCursor != null) {
-                final MessageData messageData = new MessageData();
-
-                final HashSet<String> conversationsWithFailedMessages = new HashSet<String>();
-
-                // track row ids in case we want to display something that requires this
-                // information
-                final ArrayList<Integer> failedMessages = new ArrayList<Integer>();
-
-                int cursorPosition = -1;
-                final long when = 0;
-
-                messageDataCursor.moveToPosition(-1);
-                while (messageDataCursor.moveToNext()) {
-                    messageData.bind(messageDataCursor);
-
-                    final String conversationId = messageData.getConversationId();
-                    if (DataModel.get().isNewMessageObservable(conversationId)) {
-                        // Don't post a system notification for an observable conversation
-                        // because we already show an angry red annotation in the conversation
-                        // itself or in the conversation preview snippet.
-                        continue;
-                    }
-
-                    cursorPosition = messageDataCursor.getPosition();
-                    failedMessages.add(cursorPosition);
-                    conversationsWithFailedMessages.add(conversationId);
-                }
-
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "Found " + failedMessages.size() + " failed messages");
-                }
-                if (failedMessages.size() > 0) {
-                    final NotificationCompat.Builder builder =
-                            new NotificationCompat.Builder(context);
-
-                    CharSequence line1;
-                    CharSequence line2;
-                    final boolean isRichContent = false;
-                    ConversationIdSet conversationIds = null;
-                    PendingIntent destinationIntent;
-                    if (failedMessages.size() == 1) {
-                        messageDataCursor.moveToPosition(cursorPosition);
-                        messageData.bind(messageDataCursor);
-                        final String conversationId =  messageData.getConversationId();
-
-                        // We have a single conversation, go directly to that conversation.
-                        destinationIntent = UIIntents.get()
-                                .getPendingIntentForConversationActivity(context,
-                                        conversationId,
-                                        null /*draft*/);
-
-                        conversationIds = ConversationIdSet.createSet(conversationId);
-
-                        final String failedMessgeSnippet = messageData.getMessageText();
-                        int failureStringId;
-                        if (messageData.getStatus() ==
-                                MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED) {
-                            failureStringId =
-                                    R.string.notification_download_failures_line1_singular;
-                        } else {
-                            failureStringId = R.string.notification_send_failures_line1_singular;
-                        }
-                        line1 = resources.getString(failureStringId);
-                        line2 = failedMessgeSnippet;
-                        // Set rich text for non-SMS messages or MMS push notification messages
-                        // which we generate locally with rich text
-                        // TODO- fix this
-//                        if (messageData.isMmsInd()) {
-//                            isRichContent = true;
-//                        }
-                    } else {
-                        // We have notifications for multiple conversation, go to the conversation
-                        // list.
-                        destinationIntent = UIIntents.get()
-                            .getPendingIntentForConversationListActivity(context);
-
-                        int line1StringId;
-                        int line2PluralsId;
-                        if (messageData.getStatus() ==
-                                MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED) {
-                            line1StringId =
-                                    R.string.notification_download_failures_line1_plural;
-                            line2PluralsId = R.plurals.notification_download_failures;
-                        } else {
-                            line1StringId = R.string.notification_send_failures_line1_plural;
-                            line2PluralsId = R.plurals.notification_send_failures;
-                        }
-                        line1 = resources.getString(line1StringId);
-                        line2 = resources.getQuantityString(
-                                line2PluralsId,
-                                conversationsWithFailedMessages.size(),
-                                failedMessages.size(),
-                                conversationsWithFailedMessages.size());
-                    }
-                    line1 = applyWarningTextColor(context, line1);
-                    line2 = applyWarningTextColor(context, line2);
-
-                    final PendingIntent pendingIntentForDelete =
-                            UIIntents.get().getPendingIntentForClearingNotifications(
-                                    context,
-                                    BugleNotifications.UPDATE_ERRORS,
-                                    conversationIds,
-                                    0);
-
-                    builder
-                        .setContentTitle(line1)
-                        .setTicker(line1)
-                        .setWhen(when > 0 ? when : System.currentTimeMillis())
-                        .setSmallIcon(R.drawable.ic_failed_light)
-                        .setDeleteIntent(pendingIntentForDelete)
-                        .setContentIntent(destinationIntent)
-                        .setSound(UriUtil.getUriForResourceId(context, R.raw.message_failure));
-                    if (isRichContent && !TextUtils.isEmpty(line2)) {
-                        final NotificationCompat.InboxStyle inboxStyle =
-                                new NotificationCompat.InboxStyle(builder);
-                        if (line2 != null) {
-                            inboxStyle.addLine(Html.fromHtml(line2.toString()));
-                        }
-                        builder.setStyle(inboxStyle);
-                    } else {
-                        builder.setContentText(line2);
-                    }
-
-                    if (builder != null) {
-                        notificationManager.notify(
-                                BugleNotifications.buildNotificationTag(
-                                        PendingIntentConstants.MSG_SEND_ERROR, null),
-                                PendingIntentConstants.MSG_SEND_ERROR,
-                                builder.build());
-                    }
-                } else {
-                    notificationManager.cancel(
-                            BugleNotifications.buildNotificationTag(
-                                    PendingIntentConstants.MSG_SEND_ERROR, null),
-                            PendingIntentConstants.MSG_SEND_ERROR);
-                }
-            }
-        } finally {
-            if (messageDataCursor != null) {
-                messageDataCursor.close();
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/MessageTextStats.java b/src/com/android/messaging/datamodel/MessageTextStats.java
deleted file mode 100644
index 2bd24ff..0000000
--- a/src/com/android/messaging/datamodel/MessageTextStats.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.telephony.SmsMessage;
-
-import com.android.messaging.sms.MmsConfig;
-
-public class MessageTextStats {
-    private boolean mMessageLengthRequiresMms;
-    private int mMessageCount;
-    private int mCodePointsRemainingInCurrentMessage;
-
-    public MessageTextStats() {
-        mCodePointsRemainingInCurrentMessage = Integer.MAX_VALUE;
-    }
-
-    public int getNumMessagesToBeSent() {
-        return mMessageCount;
-    }
-
-    public int getCodePointsRemainingInCurrentMessage() {
-        return mCodePointsRemainingInCurrentMessage;
-    }
-
-    public boolean getMessageLengthRequiresMms() {
-        return mMessageLengthRequiresMms;
-    }
-
-    public void updateMessageTextStats(final int selfSubId, final String messageText) {
-        final int[] params = SmsMessage.calculateLength(messageText, false);
-        /* SmsMessage.calculateLength returns an int[4] with:
-         *   int[0] being the number of SMS's required,
-         *   int[1] the number of code points used,
-         *   int[2] is the number of code points remaining until the next message.
-         *   int[3] is the encoding type that should be used for the message.
-         */
-        mMessageCount = params[0];
-        mCodePointsRemainingInCurrentMessage = params[2];
-
-        final MmsConfig mmsConfig = MmsConfig.get(selfSubId);
-        if (!mmsConfig.getMultipartSmsEnabled() &&
-                !mmsConfig.getSendMultipartSmsAsSeparateMessages()) {
-            // The provider doesn't support multi-part sms's and we should use MMS to
-            // send multi-part sms, so as soon as the user types
-            // an sms longer than one segment, we have to turn the message into an mms.
-            mMessageLengthRequiresMms = mMessageCount > 1;
-        } else {
-            final int threshold = mmsConfig.getSmsToMmsTextThreshold();
-            mMessageLengthRequiresMms = threshold > 0 && mMessageCount > threshold;
-        }
-        // Some carriers require any SMS message longer than 80 to be sent as MMS
-        // see b/12122333
-        int smsToMmsLengthThreshold = mmsConfig.getSmsToMmsTextLengthThreshold();
-        if (smsToMmsLengthThreshold > 0) {
-            final int usedInCurrentMessage = params[1];
-            /*
-             * A little hacky way to find out if we should count characters in double bytes.
-             * SmsMessage.calculateLength counts message code units based on the characters
-             * in input. If all of them are ascii, the max length is
-             * SmsMessage.MAX_USER_DATA_SEPTETS (160). If any of them are double-byte, like
-             * Korean or Chinese, the max length is SmsMessage.MAX_USER_DATA_BYTES (140) bytes
-             * (70 code units).
-             * Here we check if the total code units we can use is smaller than 140. If so,
-             * we know we should count threshold in double-byte, so divide the threshold by 2.
-             * In this way, we will count Korean text correctly with regard to the length threshold.
-             */
-            if (usedInCurrentMessage + mCodePointsRemainingInCurrentMessage
-                    < SmsMessage.MAX_USER_DATA_BYTES) {
-                smsToMmsLengthThreshold /= 2;
-            }
-            if (usedInCurrentMessage > smsToMmsLengthThreshold) {
-                mMessageLengthRequiresMms = true;
-            }
-        }
-    }
-
-}
diff --git a/src/com/android/messaging/datamodel/MessagingContentProvider.java b/src/com/android/messaging/datamodel/MessagingContentProvider.java
deleted file mode 100644
index 7688abd..0000000
--- a/src/com/android/messaging/datamodel/MessagingContentProvider.java
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.ContentProvider;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.UriMatcher;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteQueryBuilder;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-import android.text.TextUtils;
-
-import com.android.messaging.BugleApplication;
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationParticipantsColumns;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.ConversationMessageData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.widget.BugleWidgetProvider;
-import com.android.messaging.widget.WidgetConversationProvider;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.io.FileDescriptor;
-import java.io.FileNotFoundException;
-import java.io.PrintWriter;
-
-/**
- * A centralized provider for Uris exposed by Bugle.
- *  */
-public class MessagingContentProvider extends ContentProvider {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    @VisibleForTesting
-    public static final String AUTHORITY =
-            "com.android.messaging.datamodel.MessagingContentProvider";
-    private static final String CONTENT_AUTHORITY = "content://" + AUTHORITY + '/';
-
-    // Conversations query
-    private static final String CONVERSATIONS_QUERY = "conversations";
-
-    public static final Uri CONVERSATIONS_URI = Uri.parse(CONTENT_AUTHORITY + CONVERSATIONS_QUERY);
-    static final Uri PARTS_URI = Uri.parse(CONTENT_AUTHORITY + DatabaseHelper.PARTS_TABLE);
-
-    // Messages query
-    private static final String MESSAGES_QUERY = "messages";
-
-    static final Uri MESSAGES_URI = Uri.parse(CONTENT_AUTHORITY + MESSAGES_QUERY);
-
-    public static final Uri CONVERSATION_MESSAGES_URI = Uri.parse(CONTENT_AUTHORITY +
-            MESSAGES_QUERY + "/conversation");
-
-    // Conversation participants query
-    private static final String PARTICIPANTS_QUERY = "participants";
-
-    static class ConversationParticipantsQueryColumns extends ParticipantColumns {
-        static final String CONVERSATION_ID = ConversationParticipantsColumns.CONVERSATION_ID;
-    }
-
-    static final Uri CONVERSATION_PARTICIPANTS_URI = Uri.parse(CONTENT_AUTHORITY +
-            PARTICIPANTS_QUERY + "/conversation");
-
-    public static final Uri PARTICIPANTS_URI = Uri.parse(CONTENT_AUTHORITY + PARTICIPANTS_QUERY);
-
-    // Conversation images query
-    private static final String CONVERSATION_IMAGES_QUERY = "conversation_images";
-
-    public static final Uri CONVERSATION_IMAGES_URI = Uri.parse(CONTENT_AUTHORITY +
-            CONVERSATION_IMAGES_QUERY);
-
-    private static final String DRAFT_IMAGES_QUERY = "draft_images";
-
-    public static final Uri DRAFT_IMAGES_URI = Uri.parse(CONTENT_AUTHORITY +
-            DRAFT_IMAGES_QUERY);
-
-    /**
-     * Notifies that <i>all</i> data exposed by the provider needs to be refreshed.
-     * <p>
-     * <b>IMPORTANT!</b> You probably shouldn't be calling this. Prefer to notify more specific
-     * uri's instead. Currently only sync uses this, because sync can potentially update many
-     * different tables at once.
-     */
-    public static void notifyEverythingChanged() {
-        final Uri uri = Uri.parse(CONTENT_AUTHORITY);
-        final Context context = Factory.get().getApplicationContext();
-        final ContentResolver cr = context.getContentResolver();
-        cr.notifyChange(uri, null);
-
-        // Notify any conversations widgets the conversation list has changed.
-        BugleWidgetProvider.notifyConversationListChanged(context);
-
-        // Notify all conversation widgets to update.
-        WidgetConversationProvider.notifyMessagesChanged(context, null /*conversationId*/);
-    }
-
-    /**
-     * Build a participant uri from the conversation id.
-     */
-    public static Uri buildConversationParticipantsUri(final String conversationId) {
-        final Uri.Builder builder = CONVERSATION_PARTICIPANTS_URI.buildUpon();
-        builder.appendPath(conversationId);
-        return builder.build();
-    }
-
-    public static void notifyParticipantsChanged(final String conversationId) {
-        final Uri uri = buildConversationParticipantsUri(conversationId);
-        final ContentResolver cr = Factory.get().getApplicationContext().getContentResolver();
-        cr.notifyChange(uri, null);
-    }
-
-    public static void notifyAllMessagesChanged() {
-        final ContentResolver cr = Factory.get().getApplicationContext().getContentResolver();
-        cr.notifyChange(CONVERSATION_MESSAGES_URI, null);
-    }
-
-    public static void notifyAllParticipantsChanged() {
-        final ContentResolver cr = Factory.get().getApplicationContext().getContentResolver();
-        cr.notifyChange(CONVERSATION_PARTICIPANTS_URI, null);
-    }
-
-    // Default value for unknown dimension of image
-    public static final int UNSPECIFIED_SIZE = -1;
-
-    // Internal
-    private static final int CONVERSATIONS_QUERY_CODE = 10;
-
-    private static final int CONVERSATION_QUERY_CODE = 20;
-    private static final int CONVERSATION_MESSAGES_QUERY_CODE = 30;
-    private static final int CONVERSATION_PARTICIPANTS_QUERY_CODE = 40;
-    private static final int CONVERSATION_IMAGES_QUERY_CODE = 50;
-    private static final int DRAFT_IMAGES_QUERY_CODE = 60;
-    private static final int PARTICIPANTS_QUERY_CODE = 70;
-
-    // TODO: Move to a better structured URI namespace.
-    private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
-    static {
-        sURIMatcher.addURI(AUTHORITY, CONVERSATIONS_QUERY, CONVERSATIONS_QUERY_CODE);
-        sURIMatcher.addURI(AUTHORITY, CONVERSATIONS_QUERY + "/*", CONVERSATION_QUERY_CODE);
-        sURIMatcher.addURI(AUTHORITY, MESSAGES_QUERY + "/conversation/*",
-                CONVERSATION_MESSAGES_QUERY_CODE);
-        sURIMatcher.addURI(AUTHORITY, PARTICIPANTS_QUERY + "/conversation/*",
-                CONVERSATION_PARTICIPANTS_QUERY_CODE);
-        sURIMatcher.addURI(AUTHORITY, PARTICIPANTS_QUERY, PARTICIPANTS_QUERY_CODE);
-        sURIMatcher.addURI(AUTHORITY, CONVERSATION_IMAGES_QUERY + "/*",
-                CONVERSATION_IMAGES_QUERY_CODE);
-        sURIMatcher.addURI(AUTHORITY, DRAFT_IMAGES_QUERY + "/*",
-                DRAFT_IMAGES_QUERY_CODE);
-    }
-
-    /**
-     * Build a messages uri from the conversation id.
-     */
-    public static Uri buildConversationMessagesUri(final String conversationId) {
-        final Uri.Builder builder = CONVERSATION_MESSAGES_URI.buildUpon();
-        builder.appendPath(conversationId);
-        return builder.build();
-    }
-
-    public static void notifyMessagesChanged(final String conversationId) {
-        final Uri uri = buildConversationMessagesUri(conversationId);
-        final Context context = Factory.get().getApplicationContext();
-        final ContentResolver cr = context.getContentResolver();
-        cr.notifyChange(uri, null);
-        notifyConversationListChanged();
-
-        // Notify the widget the messages changed
-        WidgetConversationProvider.notifyMessagesChanged(context, conversationId);
-    }
-
-    /**
-     * Build a conversation metadata uri from a conversation id.
-     */
-    public static Uri buildConversationMetadataUri(final String conversationId) {
-        final Uri.Builder builder = CONVERSATIONS_URI.buildUpon();
-        builder.appendPath(conversationId);
-        return builder.build();
-    }
-
-    public static void notifyConversationMetadataChanged(final String conversationId) {
-        final Uri uri = buildConversationMetadataUri(conversationId);
-        final ContentResolver cr = Factory.get().getApplicationContext().getContentResolver();
-        cr.notifyChange(uri, null);
-        notifyConversationListChanged();
-    }
-
-    public static void notifyPartsChanged() {
-        final ContentResolver cr = Factory.get().getApplicationContext().getContentResolver();
-        cr.notifyChange(PARTS_URI, null);
-    }
-
-    public static void notifyConversationListChanged() {
-        final Context context = Factory.get().getApplicationContext();
-        final ContentResolver cr = context.getContentResolver();
-        cr.notifyChange(CONVERSATIONS_URI, null);
-
-        // Notify the widget the conversation list changed
-        BugleWidgetProvider.notifyConversationListChanged(context);
-    }
-
-    /**
-     * Build a conversation images uri from a conversation id.
-     */
-    public static Uri buildConversationImagesUri(final String conversationId) {
-        final Uri.Builder builder = CONVERSATION_IMAGES_URI.buildUpon();
-        builder.appendPath(conversationId);
-        return builder.build();
-    }
-
-    /**
-     * Build a draft images uri from a conversation id.
-     */
-    public static Uri buildDraftImagesUri(final String conversationId) {
-        final Uri.Builder builder = DRAFT_IMAGES_URI.buildUpon();
-        builder.appendPath(conversationId);
-        return builder.build();
-    }
-
-    private DatabaseHelper mDatabaseHelper;
-    private DatabaseWrapper mDatabaseWrapper;
-
-    public MessagingContentProvider() {
-        super();
-    }
-
-    @VisibleForTesting
-    public void setDatabaseForTest(final DatabaseWrapper db) {
-        Assert.isTrue(BugleApplication.isRunningTests());
-        mDatabaseWrapper = db;
-    }
-
-    private DatabaseWrapper getDatabaseWrapper() {
-        if (mDatabaseWrapper == null) {
-            mDatabaseWrapper = mDatabaseHelper.getDatabase();
-        }
-        return mDatabaseWrapper;
-    }
-
-    @Override
-    public Cursor query(final Uri uri, final String[] projection, String selection,
-            final String[] selectionArgs, String sortOrder) {
-
-        // Processes other than self are allowed to temporarily access the media
-        // scratch space; we grant uri read access on a case-by-case basis. Dialer app and
-        // contacts app would doQuery() on the vCard uri before trying to open the inputStream.
-        // There's nothing that we need to return for this uri so just No-Op.
-        //if (isMediaScratchSpaceUri(uri)) {
-        //    return null;
-        //}
-
-        final SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
-
-        String[] queryArgs = selectionArgs;
-        final int match = sURIMatcher.match(uri);
-        String groupBy = null;
-        String limit = null;
-        switch (match) {
-            case CONVERSATIONS_QUERY_CODE:
-                queryBuilder.setTables(ConversationListItemData.getConversationListView());
-                // Hide empty conversations (ones with 0 sort_timestamp)
-                queryBuilder.appendWhere(ConversationColumns.SORT_TIMESTAMP + " > 0 ");
-                break;
-            case CONVERSATION_QUERY_CODE:
-                queryBuilder.setTables(ConversationListItemData.getConversationListView());
-                if (uri.getPathSegments().size() == 2) {
-                    queryBuilder.appendWhere(ConversationColumns._ID + "=?");
-                    // Get the conversation id from the uri
-                    queryArgs = prependArgs(queryArgs, uri.getPathSegments().get(1));
-                } else {
-                    throw new IllegalArgumentException("Malformed URI " + uri);
-                }
-                break;
-            case CONVERSATION_PARTICIPANTS_QUERY_CODE:
-                queryBuilder.setTables(DatabaseHelper.PARTICIPANTS_TABLE);
-                if (uri.getPathSegments().size() == 3 &&
-                        TextUtils.equals(uri.getPathSegments().get(1), "conversation")) {
-                    queryBuilder.appendWhere(ParticipantColumns._ID + " IN ( " + "SELECT "
-                            + ConversationParticipantsColumns.PARTICIPANT_ID + " AS "
-                            + ParticipantColumns._ID
-                            + " FROM " + DatabaseHelper.CONVERSATION_PARTICIPANTS_TABLE
-                            + " WHERE " + ConversationParticipantsColumns.CONVERSATION_ID
-                            + " =? UNION SELECT " + ParticipantColumns._ID + " FROM "
-                            + DatabaseHelper.PARTICIPANTS_TABLE + " WHERE "
-                            + ParticipantColumns.SUB_ID + " != "
-                            + ParticipantData.OTHER_THAN_SELF_SUB_ID + " )");
-                    // Get the conversation id from the uri
-                    queryArgs = prependArgs(queryArgs, uri.getPathSegments().get(2));
-                } else {
-                    throw new IllegalArgumentException("Malformed URI " + uri);
-                }
-                break;
-            case PARTICIPANTS_QUERY_CODE:
-                queryBuilder.setTables(DatabaseHelper.PARTICIPANTS_TABLE);
-                if (uri.getPathSegments().size() != 1) {
-                    throw new IllegalArgumentException("Malformed URI " + uri);
-                }
-                break;
-            case CONVERSATION_MESSAGES_QUERY_CODE:
-                if (uri.getPathSegments().size() == 3 &&
-                    TextUtils.equals(uri.getPathSegments().get(1), "conversation")) {
-                    // Get the conversation id from the uri
-                    final String conversationId = uri.getPathSegments().get(2);
-
-                    // We need to handle this query differently, instead of falling through to the
-                    // generic query call at the bottom. For performance reasons, the conversation
-                    // messages query is executed as a raw query. It is invalid to specify
-                    // selection/sorting for this query.
-
-                    if (selection == null && selectionArgs == null && sortOrder == null) {
-                        return queryConversationMessages(conversationId, uri);
-                    } else {
-                        throw new IllegalArgumentException(
-                                "Cannot set selection or sort order with this query");
-                    }
-                } else {
-                    throw new IllegalArgumentException("Malformed URI " + uri);
-                }
-            case CONVERSATION_IMAGES_QUERY_CODE:
-                queryBuilder.setTables(ConversationImagePartsView.getViewName());
-                if (uri.getPathSegments().size() == 2) {
-                    // Exclude draft.
-                    queryBuilder.appendWhere(
-                            ConversationImagePartsView.Columns.CONVERSATION_ID + " =? AND " +
-                                    ConversationImagePartsView.Columns.STATUS + "<>" +
-                                    MessageData.BUGLE_STATUS_OUTGOING_DRAFT);
-                    // Get the conversation id from the uri
-                    queryArgs = prependArgs(queryArgs, uri.getPathSegments().get(1));
-                } else {
-                    throw new IllegalArgumentException("Malformed URI " + uri);
-                }
-                break;
-            case DRAFT_IMAGES_QUERY_CODE:
-                queryBuilder.setTables(ConversationImagePartsView.getViewName());
-                if (uri.getPathSegments().size() == 2) {
-                    // Draft only.
-                    queryBuilder.appendWhere(
-                            ConversationImagePartsView.Columns.CONVERSATION_ID + " =? AND " +
-                                    ConversationImagePartsView.Columns.STATUS + "=" +
-                                    MessageData.BUGLE_STATUS_OUTGOING_DRAFT);
-                    // Get the conversation id from the uri
-                    queryArgs = prependArgs(queryArgs, uri.getPathSegments().get(1));
-                } else {
-                    throw new IllegalArgumentException("Malformed URI " + uri);
-                }
-                break;
-            default: {
-                throw new IllegalArgumentException("Unknown URI " + uri);
-            }
-        }
-
-        final Cursor cursor = getDatabaseWrapper().query(queryBuilder, projection, selection,
-                queryArgs, groupBy, null, sortOrder, limit);
-        cursor.setNotificationUri(getContext().getContentResolver(), uri);
-        return cursor;
-    }
-
-    private Cursor queryConversationMessages(final String conversationId, final Uri notifyUri) {
-        final String[] queryArgs = { conversationId };
-        final Cursor cursor = getDatabaseWrapper().rawQuery(
-                ConversationMessageData.getConversationMessagesQuerySql(), queryArgs);
-        cursor.setNotificationUri(getContext().getContentResolver(), notifyUri);
-        return cursor;
-    }
-
-    @Override
-    public String getType(final Uri uri) {
-        final StringBuilder sb = new
-                StringBuilder("vnd.android.cursor.dir/vnd.android.messaging.");
-
-        switch (sURIMatcher.match(uri)) {
-            case CONVERSATIONS_QUERY_CODE: {
-                sb.append(CONVERSATIONS_QUERY);
-                break;
-            }
-            default: {
-                throw new IllegalArgumentException("Unknown URI: " + uri);
-            }
-        }
-        return sb.toString();
-    }
-
-    protected DatabaseHelper getDatabase() {
-        return DatabaseHelper.getInstance(getContext());
-    }
-
-    @Override
-    public ParcelFileDescriptor openFile(final Uri uri, final String fileMode)
-            throws FileNotFoundException {
-        throw new IllegalArgumentException("openFile not supported: " + uri);
-    }
-
-    @Override
-    public Uri insert(final Uri uri, final ContentValues values) {
-        throw new IllegalStateException("Insert not supported " + uri);
-    }
-
-    @Override
-    public int delete(final Uri uri, final String selection, final String[] selectionArgs) {
-        throw new IllegalArgumentException("Delete not supported: " + uri);
-    }
-
-    @Override
-    public int update(final Uri uri, final ContentValues values, final String selection,
-            final String[] selectionArgs) {
-        throw new IllegalArgumentException("Update not supported: " + uri);
-    }
-
-    /**
-     * Prepends new arguments to the existing argument list.
-     *
-     * @param oldArgList The current list of arguments. May be {@code null}
-     * @param args The new arguments to prepend
-     * @return A new argument list with the given arguments prepended
-     */
-    private String[] prependArgs(final String[] oldArgList, final String... args) {
-        if (args == null || args.length == 0) {
-            return oldArgList;
-        }
-        final int oldArgCount = (oldArgList == null ? 0 : oldArgList.length);
-        final int newArgCount = args.length;
-
-        final String[] newArgs = new String[oldArgCount + newArgCount];
-        System.arraycopy(args, 0, newArgs, 0, newArgCount);
-        if (oldArgCount > 0) {
-            System.arraycopy(oldArgList, 0, newArgs, newArgCount, oldArgCount);
-        }
-        return newArgs;
-    }
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void dump(final FileDescriptor fd, final PrintWriter writer, final String[] args) {
-        // First dump out the default SMS app package name
-        String defaultSmsApp = PhoneUtils.getDefault().getDefaultSmsApp();
-        if (TextUtils.isEmpty(defaultSmsApp)) {
-            if (OsUtil.isAtLeastKLP()) {
-                defaultSmsApp = "None";
-            } else {
-                defaultSmsApp = "None (pre-Kitkat)";
-            }
-        }
-        writer.println("Default SMS app: " + defaultSmsApp);
-        // Now dump logs
-        LogUtil.dump(writer);
-    }
-
-    @Override
-    public boolean onCreate() {
-        // This is going to wind up calling into createDatabase() below.
-        mDatabaseHelper = (DatabaseHelper) getDatabase();
-        // We cannot initialize mDatabaseWrapper yet as the Factory may not be initialized
-        return true;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/MmsFileProvider.java b/src/com/android/messaging/datamodel/MmsFileProvider.java
deleted file mode 100644
index eb49802..0000000
--- a/src/com/android/messaging/datamodel/MmsFileProvider.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.util.LogUtil;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.io.File;
-import java.io.IOException;
-
-/**
- * A very simple content provider that can serve mms files from our cache directory.
- */
-public class MmsFileProvider extends FileProvider {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    @VisibleForTesting
-    static final String AUTHORITY = "com.android.messaging.datamodel.MmsFileProvider";
-    private static final String RAW_MMS_DIR = "rawmms";
-
-    /**
-     * Returns a uri that can be used to access a raw mms file.
-     *
-     * @return the URI for an raw mms file
-     */
-    public static Uri buildRawMmsUri() {
-        final Uri uri = FileProvider.buildFileUri(AUTHORITY, null);
-        final File file = getFile(uri.getPath());
-        if (!ensureFileExists(file)) {
-            LogUtil.e(TAG, "Failed to create temp file " + file.getAbsolutePath());
-        }
-        return uri;
-    }
-
-    @Override
-    File getFile(final String path, final String extension) {
-        return getFile(path);
-    }
-
-    public static File getFile(final Uri uri) {
-        return getFile(uri.getPath());
-    }
-
-    private static File getFile(final String path) {
-        final Context context = Factory.get().getApplicationContext();
-        final File filePath = new File(getDirectory(context), path + ".dat");
-
-        try {
-            if (!filePath.getCanonicalPath()
-                    .startsWith(getDirectory(context).getCanonicalPath())) {
-                LogUtil.e(TAG, "getFile: path "
-                        + filePath.getCanonicalPath()
-                        + " does not start with "
-                        + getDirectory(context).getCanonicalPath());
-                return null;
-            }
-        } catch (IOException e) {
-            LogUtil.e(TAG, "getFile: getCanonicalPath failed ", e);
-            return null;
-        }
-        return filePath;
-    }
-
-    private static File getDirectory(final Context context) {
-        return new File(context.getCacheDir(), RAW_MMS_DIR);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/NoConfirmationSmsSendService.java b/src/com/android/messaging/datamodel/NoConfirmationSmsSendService.java
deleted file mode 100644
index bea4961..0000000
--- a/src/com/android/messaging/datamodel/NoConfirmationSmsSendService.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.app.IntentService;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.core.app.RemoteInput;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.action.InsertNewMessageAction;
-import com.android.messaging.datamodel.action.UpdateMessageNotificationAction;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.conversationlist.ConversationListActivity;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.UriUtil;
-
-/**
- * Respond to a special intent and send an SMS message without the user's intervention, unless
- * the intent extra "showUI" is true.
- */
-public class NoConfirmationSmsSendService extends IntentService {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static final String EXTRA_SUBSCRIPTION = "subscription";
-    public static final String EXTRA_SELF_ID = "self_id";
-
-    public NoConfirmationSmsSendService() {
-        // Class name will be the thread name.
-        super(NoConfirmationSmsSendService.class.getName());
-
-        // Intent should be redelivered if the process gets killed before completing the job.
-        setIntentRedelivery(true);
-    }
-
-    @Override
-    protected void onHandleIntent(final Intent intent) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "NoConfirmationSmsSendService onHandleIntent");
-        }
-
-        final String action = intent.getAction();
-        if (!TelephonyManager.ACTION_RESPOND_VIA_MESSAGE.equals(action)) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "NoConfirmationSmsSendService onHandleIntent wrong action: " +
-                    action);
-            }
-            return;
-        }
-        final Bundle extras = intent.getExtras();
-        if (extras == null) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "Called to send SMS but no extras");
-            }
-            return;
-        }
-
-        // Get all possible extras from intent
-        final String conversationId =
-                intent.getStringExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID);
-        final String selfId = intent.getStringExtra(EXTRA_SELF_ID);
-        final boolean requiresMms = intent.getBooleanExtra(UIIntents.UI_INTENT_EXTRA_REQUIRES_MMS,
-                false);
-        final String message = getText(intent, Intent.EXTRA_TEXT);
-        final String subject = getText(intent, Intent.EXTRA_SUBJECT);
-        final int subId = extras.getInt(EXTRA_SUBSCRIPTION, ParticipantData.DEFAULT_SELF_SUB_ID);
-
-        // Get a comma-separated list of recipients
-        final String recipients = UriUtil.parseRecipientsFromSmsMmsUri(intent.getData());
-
-        if (TextUtils.isEmpty(recipients) && TextUtils.isEmpty(conversationId)) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "Both conversationId and recipient(s) cannot be empty");
-            }
-            return;
-        }
-
-        if (extras.getBoolean("showUI", false)) {
-            startActivity(new Intent(this, ConversationListActivity.class));
-        } else {
-            if (TextUtils.isEmpty(message)) {
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "Message cannot be empty");
-                }
-                return;
-            }
-
-            // TODO: it's possible that a long message would require sending it via mms,
-            // but we're not testing for that here and we're sending the message as an sms.
-
-            if (TextUtils.isEmpty(conversationId)) {
-                InsertNewMessageAction.insertNewMessage(subId, recipients, message, subject);
-            } else {
-                MessageData messageData = null;
-                if (requiresMms) {
-                    if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                        LogUtil.v(TAG, "Auto-sending MMS message in conversation: " +
-                                conversationId);
-                    }
-                    messageData = MessageData.createDraftMmsMessage(conversationId, selfId, message,
-                            subject);
-                } else {
-                    if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                        LogUtil.v(TAG, "Auto-sending SMS message in conversation: " +
-                                conversationId);
-                    }
-                    messageData = MessageData.createDraftSmsMessage(conversationId, selfId,
-                            message);
-                }
-                InsertNewMessageAction.insertNewMessage(messageData);
-            }
-            UpdateMessageNotificationAction.updateMessageNotification();
-        }
-    }
-
-    private String getText(final Intent intent, final String textType) {
-        final String message = intent.getStringExtra(textType);
-        if (message == null) {
-            final Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-            if (remoteInput != null) {
-                final CharSequence extra = remoteInput.getCharSequence(textType);
-                if (extra != null) {
-                    return extra.toString();
-                }
-            }
-        }
-        return message;
-    }
-
-}
diff --git a/src/com/android/messaging/datamodel/NotificationState.java b/src/com/android/messaging/datamodel/NotificationState.java
deleted file mode 100644
index e19f70c..0000000
--- a/src/com/android/messaging/datamodel/NotificationState.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.app.PendingIntent;
-import android.net.Uri;
-import androidx.core.app.NotificationCompat;
-
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.util.ConversationIdSet;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-
-/**
- * Base class for representing notifications. The main reason for this class is that in order to
- * show pictures or avatars they might need to be loaded in the background. This class and
- * subclasses can do the main work to get the notification ready and then wait until any images
- * that are needed are ready before posting.
- *
- * The creation of a notification is split into two parts. The NotificationState ctor should
- * setup the basic information including the mContentIntent. A Notification Builder is created in
- * RealTimeChatNotifications and passed to the build() method of each notification where the
- * Notification is fully specified.
- *
- * TODO: There is still some duplication and inconsistency in the utility functions and
- * placement of different building blocks across notification types (e.g. summary text for accounts)
- */
-public abstract class NotificationState {
-    private static final int CONTENT_INTENT_REQUEST_CODE_OFFSET = 0;
-    private static final int CLEAR_INTENT_REQUEST_CODE_OFFSET = 1;
-    private static final int NUM_REQUEST_CODES_NEEDED = 2;
-
-    public interface FailedMessageQuery {
-        static final String FAILED_MESSAGES_WHERE_CLAUSE =
-                "((" + MessageColumns.STATUS + " = " +
-                MessageData.BUGLE_STATUS_OUTGOING_FAILED + " OR " +
-                MessageColumns.STATUS + " = " +
-                MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED + ") AND " +
-                DatabaseHelper.MessageColumns.SEEN + " = 0)";
-
-        static final String FAILED_ORDER_BY = DatabaseHelper.MessageColumns.CONVERSATION_ID + ", " +
-                DatabaseHelper.MessageColumns.SENT_TIMESTAMP + " asc";
-    }
-
-    public final ConversationIdSet mConversationIds;
-    public final HashSet<String> mPeople;
-
-    public NotificationCompat.Style mNotificationStyle;
-    public NotificationCompat.Builder mNotificationBuilder;
-    public boolean mCanceled;
-    public int mType;
-    public int mBaseRequestCode;
-    public ArrayList<Uri> mParticipantAvatarsUris = null;
-    public ArrayList<Uri> mParticipantContactUris = null;
-
-    NotificationState(final ConversationIdSet conversationIds) {
-        mConversationIds = conversationIds;
-        mPeople = new HashSet<String>();
-    }
-
-    /**
-     * The intent to be triggered when the notification is dismissed.
-     */
-    public abstract PendingIntent getClearIntent();
-
-    protected Uri getAttachmentUri() {
-        return null;
-    }
-
-    // Returns the mime type of the attachment (See ContentType class for definitions)
-    protected String getAttachmentType() {
-        return null;
-    }
-
-    /**
-     * Build the notification using the given builder.
-     * @param builder
-     * @return The style of the notification.
-     */
-    protected abstract NotificationCompat.Style build(NotificationCompat.Builder builder);
-
-    protected void setAvatarUrlsForConversation(final String conversationId) {
-    }
-
-    protected void setPeopleForConversation(final String conversationId) {
-    }
-
-    /**
-     * Reserves request codes for this notification type. By default 2 codes are reserved, one for
-     * the main intent and another for the cancel intent. Override this function to reserve more.
-     */
-    public int getNumRequestCodesNeeded() {
-        return NUM_REQUEST_CODES_NEEDED;
-    }
-
-    public int getContentIntentRequestCode() {
-        return mBaseRequestCode + CONTENT_INTENT_REQUEST_CODE_OFFSET;
-    }
-
-    public int getClearIntentRequestCode() {
-        return mBaseRequestCode + CLEAR_INTENT_REQUEST_CODE_OFFSET;
-    }
-
-    /**
-     * Gets the appropriate icon needed for notifications.
-     */
-    public abstract int getIcon();
-
-    /**
-     * @return the type of notification that should be used from {@link RealTimeChatNotifications}
-     * so that the proper ringtone and vibrate settings can be used.
-     */
-    public int getLatestMessageNotificationType() {
-        return BugleNotifications.LOCAL_SMS_NOTIFICATION;
-    }
-
-    /**
-     * @return the notification priority level for this notification.
-     */
-    public abstract int getPriority();
-
-    /** @return custom ringtone URI or null if not set */
-    public String getRingtoneUri() {
-        return null;
-    }
-
-    public boolean getNotificationVibrate() {
-        return false;
-    }
-
-    public long getLatestReceivedTimestamp() {
-        return Long.MIN_VALUE;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/ParticipantRefresh.java b/src/com/android/messaging/datamodel/ParticipantRefresh.java
deleted file mode 100644
index 55d439b..0000000
--- a/src/com/android/messaging/datamodel/ParticipantRefresh.java
+++ /dev/null
@@ -1,738 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.ContentValues;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.database.DatabaseUtils;
-import android.graphics.Color;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import androidx.collection.ArrayMap;
-import android.telephony.SubscriptionInfo;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationParticipantsColumns;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.ParticipantData.ParticipantsQuery;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.SafeAsyncTask;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Joiner;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-/**
- * Utility class for refreshing participant information based on matching contact. This updates
- *     1. name, photo_uri, matching contact_id of participants.
- *     2. generated_name of conversations.
- *
- * There are two kinds of participant refreshes,
- *     1. Full refresh, this is triggered at application start or activity resumes after contact
- *        change is detected.
- *     2. Partial refresh, this is triggered when a participant is added to a conversation. This
- *        normally happens during SMS sync.
- */
-@VisibleForTesting
-public class ParticipantRefresh {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    /**
-     * Refresh all participants including ones that were resolved before.
-     */
-    public static final int REFRESH_MODE_FULL = 0;
-
-    /**
-     * Refresh all unresolved participants.
-     */
-    public static final int REFRESH_MODE_INCREMENTAL = 1;
-
-    /**
-     * Force refresh all self participants.
-     */
-    public static final int REFRESH_MODE_SELF_ONLY = 2;
-
-    public static class ConversationParticipantsQuery {
-        public static final String[] PROJECTION = new String[] {
-            ConversationParticipantsColumns._ID,
-            ConversationParticipantsColumns.CONVERSATION_ID,
-            ConversationParticipantsColumns.PARTICIPANT_ID
-        };
-
-        public static final int INDEX_ID                        = 0;
-        public static final int INDEX_CONVERSATION_ID           = 1;
-        public static final int INDEX_PARTICIPANT_ID            = 2;
-    }
-
-    // Track whether observer is initialized or not.
-    private static volatile boolean sObserverInitialized = false;
-    private static final Object sLock = new Object();
-    private static final AtomicBoolean sFullRefreshScheduled = new AtomicBoolean(false);
-    private static final Runnable sFullRefreshRunnable = new Runnable() {
-        @Override
-        public void run() {
-            final boolean oldScheduled = sFullRefreshScheduled.getAndSet(false);
-            Assert.isTrue(oldScheduled);
-            refreshParticipants(REFRESH_MODE_FULL);
-        }
-    };
-    private static final Runnable sSelfOnlyRefreshRunnable = new Runnable() {
-        @Override
-        public void run() {
-            refreshParticipants(REFRESH_MODE_SELF_ONLY);
-        }
-    };
-
-    /**
-     * A customized content resolver to track contact changes.
-     */
-    public static class ContactContentObserver extends ContentObserver {
-        private volatile boolean mContactChanged = false;
-
-        public ContactContentObserver() {
-            super(null);
-        }
-
-        @Override
-        public void onChange(final boolean selfChange) {
-            super.onChange(selfChange);
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "Contacts changed");
-            }
-            mContactChanged = true;
-        }
-
-        public boolean getContactChanged() {
-            return mContactChanged;
-        }
-
-        public void resetContactChanged() {
-            mContactChanged = false;
-        }
-
-        public void initialize() {
-            // TODO: Handle enterprise contacts post M once contacts provider supports it
-            Factory.get().getApplicationContext().getContentResolver().registerContentObserver(
-                    Phone.CONTENT_URI, true, this);
-            mContactChanged = true; // Force a full refresh on initialization.
-        }
-    }
-
-    /**
-     * Refresh participants only if needed, i.e., application start or contact changed.
-     */
-    public static void refreshParticipantsIfNeeded() {
-        if (ParticipantRefresh.getNeedFullRefresh() &&
-                sFullRefreshScheduled.compareAndSet(false, true)) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "Started full participant refresh");
-            }
-            SafeAsyncTask.executeOnThreadPool(sFullRefreshRunnable);
-        } else if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "Skipped full participant refresh");
-        }
-    }
-
-    /**
-     * Refresh self participants on subscription or settings change.
-     */
-    public static void refreshSelfParticipants() {
-        SafeAsyncTask.executeOnThreadPool(sSelfOnlyRefreshRunnable);
-    }
-
-    private static boolean getNeedFullRefresh() {
-        final ContactContentObserver observer = Factory.get().getContactContentObserver();
-        if (observer == null) {
-            // If there is no observer (for unittest cases), we don't need to refresh participants.
-            return false;
-        }
-
-        if (!sObserverInitialized) {
-            synchronized (sLock) {
-                if (!sObserverInitialized) {
-                    observer.initialize();
-                    sObserverInitialized = true;
-                }
-            }
-        }
-
-        return observer.getContactChanged();
-    }
-
-    private static void resetNeedFullRefresh() {
-        final ContactContentObserver observer = Factory.get().getContactContentObserver();
-        if (observer != null) {
-            observer.resetContactChanged();
-        }
-    }
-
-    /**
-     * This class is totally static. Make constructor to be private so that an instance
-     * of this class would not be created by by mistake.
-     */
-    private ParticipantRefresh() {
-    }
-
-    /**
-     * Refresh participants in Bugle.
-     *
-     * @param refreshMode the refresh mode desired. See {@link #REFRESH_MODE_FULL},
-     *        {@link #REFRESH_MODE_INCREMENTAL}, and {@link #REFRESH_MODE_SELF_ONLY}
-     */
-     @VisibleForTesting
-     static void refreshParticipants(final int refreshMode) {
-        Assert.inRange(refreshMode, REFRESH_MODE_FULL, REFRESH_MODE_SELF_ONLY);
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            switch (refreshMode) {
-                case REFRESH_MODE_FULL:
-                    LogUtil.v(TAG, "Start full participant refresh");
-                    break;
-                case REFRESH_MODE_INCREMENTAL:
-                    LogUtil.v(TAG, "Start partial participant refresh");
-                    break;
-                case REFRESH_MODE_SELF_ONLY:
-                    LogUtil.v(TAG, "Start self participant refresh");
-                    break;
-            }
-        }
-
-        if (!ContactUtil.hasReadContactsPermission() || !OsUtil.hasPhonePermission()) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "Skipping participant referesh because of permissions");
-            }
-            return;
-        }
-
-        if (refreshMode == REFRESH_MODE_FULL) {
-            // resetNeedFullRefresh right away so that we will skip duplicated full refresh
-            // requests.
-            resetNeedFullRefresh();
-        }
-
-        if (refreshMode == REFRESH_MODE_FULL || refreshMode == REFRESH_MODE_SELF_ONLY) {
-            refreshSelfParticipantList();
-        }
-
-        final ArrayList<String> changedParticipants = new ArrayList<String>();
-
-        String selection = null;
-        String[] selectionArgs = null;
-
-        if (refreshMode == REFRESH_MODE_INCREMENTAL) {
-            // In case of incremental refresh, filter out participants that are already resolved.
-            selection = ParticipantColumns.CONTACT_ID + "=?";
-            selectionArgs = new String[] {
-                    String.valueOf(ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED) };
-        } else if (refreshMode == REFRESH_MODE_SELF_ONLY) {
-            // In case of self-only refresh, filter out non-self participants.
-            selection = SELF_PARTICIPANTS_CLAUSE;
-            selectionArgs = null;
-        }
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        Cursor cursor = null;
-        boolean selfUpdated = false;
-        try {
-            cursor = db.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                    ParticipantsQuery.PROJECTION, selection, selectionArgs, null, null, null);
-
-            if (cursor != null) {
-                while (cursor.moveToNext()) {
-                    try {
-                        final ParticipantData participantData =
-                                ParticipantData.getFromCursor(cursor);
-                        if (refreshParticipant(db, participantData)) {
-                            if (participantData.isSelf()) {
-                                selfUpdated = true;
-                            }
-                            updateParticipant(db, participantData);
-                            final String id = participantData.getId();
-                            changedParticipants.add(id);
-                        }
-                    } catch (final Exception exception) {
-                        // Failure to update one participant shouldn't cancel the entire refresh.
-                        // Log the failure so we know what's going on and resume the loop.
-                        LogUtil.e(LogUtil.BUGLE_DATAMODEL_TAG, "ParticipantRefresh: Failed to " +
-                                "update participant", exception);
-                    }
-                }
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "Number of participants refreshed:" + changedParticipants.size());
-        }
-
-        // Refresh conversations for participants that are changed.
-        if (changedParticipants.size() > 0) {
-            BugleDatabaseOperations.refreshConversationsForParticipants(changedParticipants);
-        }
-        if (selfUpdated) {
-            // Boom
-            MessagingContentProvider.notifyAllParticipantsChanged();
-            MessagingContentProvider.notifyAllMessagesChanged();
-        }
-    }
-
-    private static final String SELF_PARTICIPANTS_CLAUSE = ParticipantColumns.SUB_ID
-            + " NOT IN ( "
-            + ParticipantData.OTHER_THAN_SELF_SUB_ID
-            + " )";
-
-    private static final Set<Integer> getExistingSubIds() {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final HashSet<Integer> existingSubIds = new HashSet<Integer>();
-
-        Cursor cursor = null;
-        try {
-            cursor = db.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                    ParticipantsQuery.PROJECTION,
-                    SELF_PARTICIPANTS_CLAUSE, null, null, null, null);
-
-            if (cursor != null) {
-                while (cursor.moveToNext()) {
-                    final int subId = cursor.getInt(ParticipantsQuery.INDEX_SUB_ID);
-                    existingSubIds.add(subId);
-                }
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return existingSubIds;
-    }
-
-    private static final String UPDATE_SELF_PARTICIPANT_SUBSCRIPTION_SQL =
-            "UPDATE " + DatabaseHelper.PARTICIPANTS_TABLE + " SET "
-            +  ParticipantColumns.SIM_SLOT_ID + " = %d, "
-            +  ParticipantColumns.SUBSCRIPTION_COLOR + " = %d, "
-            +  ParticipantColumns.SUBSCRIPTION_NAME + " = %s "
-            + " WHERE %s";
-
-    static String getUpdateSelfParticipantSubscriptionInfoSql(final int slotId,
-            final int subscriptionColor, final String subscriptionName, final String where) {
-        return String.format((Locale) null /* construct SQL string without localization */,
-                UPDATE_SELF_PARTICIPANT_SUBSCRIPTION_SQL,
-                slotId, subscriptionColor, subscriptionName, where);
-    }
-
-    /**
-     * Ensure that there is a self participant corresponding to every active SIM. Also, ensure
-     * that any other older SIM self participants are marked as inactive.
-     */
-    private static void refreshSelfParticipantList() {
-        if (!OsUtil.isAtLeastL_MR1()) {
-            return;
-        }
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final List<SubscriptionInfo> subInfoRecords =
-                PhoneUtils.getDefault().toLMr1().getActiveSubscriptionInfoList();
-        final ArrayMap<Integer, SubscriptionInfo> activeSubscriptionIdToRecordMap =
-                new ArrayMap<Integer, SubscriptionInfo>();
-        db.beginTransaction();
-        final Set<Integer> existingSubIds = getExistingSubIds();
-
-        try {
-            if (subInfoRecords != null) {
-                for (final SubscriptionInfo subInfoRecord : subInfoRecords) {
-                    final int subId = subInfoRecord.getSubscriptionId();
-                    // If its a new subscription, add it to the database.
-                    if (!existingSubIds.contains(subId)) {
-                        db.execSQL(DatabaseHelper.getCreateSelfParticipantSql(subId));
-                        // Add it to the local set to guard against duplicated entries returned
-                        // by subscription manager.
-                        existingSubIds.add(subId);
-                    }
-                    activeSubscriptionIdToRecordMap.put(subId, subInfoRecord);
-
-                    if (subId == PhoneUtils.getDefault().getDefaultSmsSubscriptionId()) {
-                        // This is the system default subscription, so update the default self.
-                        activeSubscriptionIdToRecordMap.put(ParticipantData.DEFAULT_SELF_SUB_ID,
-                                subInfoRecord);
-                    }
-                }
-            }
-
-            // For subscriptions already in the database, refresh ParticipantColumns.SIM_SLOT_ID.
-            for (final Integer subId : activeSubscriptionIdToRecordMap.keySet()) {
-                final SubscriptionInfo record = activeSubscriptionIdToRecordMap.get(subId);
-                final String displayName =
-                        DatabaseUtils.sqlEscapeString(record.getDisplayName().toString());
-                db.execSQL(getUpdateSelfParticipantSubscriptionInfoSql(record.getSimSlotIndex(),
-                        record.getIconTint(), displayName,
-                        ParticipantColumns.SUB_ID + " = " + subId));
-            }
-            db.execSQL(getUpdateSelfParticipantSubscriptionInfoSql(
-                    ParticipantData.INVALID_SLOT_ID, Color.TRANSPARENT, "''",
-                    ParticipantColumns.SUB_ID + " NOT IN (" +
-                    Joiner.on(", ").join(activeSubscriptionIdToRecordMap.keySet()) + ")"));
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-        // Fix up conversation self ids by reverting to default self for conversations whose self
-        // ids are no longer active.
-        refreshConversationSelfIds();
-    }
-
-    /**
-     * Refresh one participant.
-     * @return true if the ParticipantData was changed
-     */
-    public static boolean refreshParticipant(final DatabaseWrapper db,
-            final ParticipantData participantData) {
-        boolean updated = false;
-
-        if (participantData.isSelf()) {
-            final int selfChange = refreshFromSelfProfile(db, participantData);
-
-            if (selfChange == SELF_PROFILE_EXISTS) {
-                // If a self-profile exists, it takes precedence over Contacts data. So we are done.
-                return true;
-            }
-
-            updated = (selfChange == SELF_PHONE_NUMBER_OR_SUBSCRIPTION_CHANGED);
-
-            // Fall-through and try to update based on Contacts data
-        }
-
-        updated |= refreshFromContacts(db, participantData);
-        return updated;
-    }
-
-    private static final int SELF_PHONE_NUMBER_OR_SUBSCRIPTION_CHANGED = 1;
-    private static final int SELF_PROFILE_EXISTS = 2;
-
-    private static int refreshFromSelfProfile(final DatabaseWrapper db,
-            final ParticipantData participantData) {
-        int changed = 0;
-        // Refresh the phone number based on information from telephony
-        if (participantData.updatePhoneNumberForSelfIfChanged()) {
-            changed = SELF_PHONE_NUMBER_OR_SUBSCRIPTION_CHANGED;
-        }
-
-        if (OsUtil.isAtLeastL_MR1()) {
-            // Refresh the subscription info based on information from SubscriptionManager.
-            final SubscriptionInfo subscriptionInfo =
-                    PhoneUtils.get(participantData.getSubId()).toLMr1().getActiveSubscriptionInfo();
-            if (participantData.updateSubscriptionInfoForSelfIfChanged(subscriptionInfo)) {
-                changed = SELF_PHONE_NUMBER_OR_SUBSCRIPTION_CHANGED;
-            }
-        }
-
-        // For self participant, try getting name/avatar from self profile in CP2 first.
-        // TODO: in case of multi-sim, profile would not be able to be used for
-        // different numbers. Need to figure out that.
-        Cursor selfCursor = null;
-        try {
-            selfCursor = ContactUtil.getSelf(db.getContext()).performSynchronousQuery();
-            if (selfCursor != null && selfCursor.getCount() > 0) {
-                selfCursor.moveToNext();
-                final long selfContactId = selfCursor.getLong(ContactUtil.INDEX_CONTACT_ID);
-                participantData.setContactId(selfContactId);
-                participantData.setFullName(selfCursor.getString(
-                        ContactUtil.INDEX_DISPLAY_NAME));
-                participantData.setFirstName(
-                        ContactUtil.lookupFirstName(db.getContext(), selfContactId));
-                participantData.setProfilePhotoUri(selfCursor.getString(
-                        ContactUtil.INDEX_PHOTO_URI));
-                participantData.setLookupKey(selfCursor.getString(
-                        ContactUtil.INDEX_SELF_QUERY_LOOKUP_KEY));
-                return SELF_PROFILE_EXISTS;
-            }
-        } catch (final Exception exception) {
-            // It's possible for contact query to fail and we don't want that to crash our app.
-            // However, we need to at least log the exception so we know something was wrong.
-            LogUtil.e(LogUtil.BUGLE_DATAMODEL_TAG, "Participant refresh: failed to refresh " +
-                    "participant. exception=" + exception);
-        } finally {
-            if (selfCursor != null) {
-                selfCursor.close();
-            }
-        }
-        return changed;
-    }
-
-    private static boolean refreshFromContacts(final DatabaseWrapper db,
-            final ParticipantData participantData) {
-        final String normalizedDestination = participantData.getNormalizedDestination();
-        final long currentContactId = participantData.getContactId();
-        final String currentDisplayName = participantData.getFullName();
-        final String currentFirstName = participantData.getFirstName();
-        final String currentPhotoUri = participantData.getProfilePhotoUri();
-        final String currentContactDestination = participantData.getContactDestination();
-
-        Cursor matchingContactCursor = null;
-        long matchingContactId = -1;
-        String matchingDisplayName = null;
-        String matchingFirstName = null;
-        String matchingPhotoUri = null;
-        String matchingLookupKey = null;
-        String matchingDestination = null;
-        boolean updated = false;
-
-        if (TextUtils.isEmpty(normalizedDestination)) {
-            // The normalized destination can be "" for the self id if we can't get it from the
-            // SIM.  Some contact providers throw an IllegalArgumentException if you lookup "",
-            // so we early out.
-            return false;
-        }
-
-        try {
-            matchingContactCursor = ContactUtil.lookupDestination(db.getContext(),
-                    normalizedDestination).performSynchronousQuery();
-            if (matchingContactCursor == null || matchingContactCursor.getCount() == 0) {
-                // If there is no match, mark the participant as contact not found.
-                if (currentContactId != ParticipantData.PARTICIPANT_CONTACT_ID_NOT_FOUND) {
-                    participantData.setContactId(ParticipantData.PARTICIPANT_CONTACT_ID_NOT_FOUND);
-                    participantData.setFullName(null);
-                    participantData.setFirstName(null);
-                    participantData.setProfilePhotoUri(null);
-                    participantData.setLookupKey(null);
-                    updated = true;
-                }
-                return updated;
-            }
-
-            while (matchingContactCursor.moveToNext()) {
-                final long contactId = matchingContactCursor.getLong(ContactUtil.INDEX_CONTACT_ID);
-                // Pick either the first contact or the contact with same id as previous matched
-                // contact id.
-                if (matchingContactId == -1 || currentContactId == contactId) {
-                    matchingContactId = contactId;
-                    matchingDisplayName = matchingContactCursor.getString(
-                            ContactUtil.INDEX_DISPLAY_NAME);
-                    matchingFirstName = ContactUtil.lookupFirstName(db.getContext(), contactId);
-                    matchingPhotoUri = matchingContactCursor.getString(
-                            ContactUtil.INDEX_PHOTO_URI);
-                    matchingLookupKey = matchingContactCursor.getString(
-                            ContactUtil.INDEX_LOOKUP_KEY);
-                    matchingDestination = matchingContactCursor.getString(
-                            ContactUtil.INDEX_PHONE_EMAIL);
-                }
-
-                // There is no need to try other contacts if the current contactId was not filled...
-                if (currentContactId < 0
-                        // or we found the matching contact id
-                        || currentContactId == contactId) {
-                    break;
-                }
-            }
-        } catch (final Exception exception) {
-            // It's possible for contact query to fail and we don't want that to crash our app.
-            // However, we need to at least log the exception so we know something was wrong.
-            LogUtil.e(LogUtil.BUGLE_DATAMODEL_TAG, "Participant refresh: failed to refresh " +
-                    "participant. exception=" + exception);
-            return false;
-        } finally {
-            if (matchingContactCursor != null) {
-                matchingContactCursor.close();
-            }
-        }
-
-        // Update participant only if something changed.
-        final boolean isContactIdChanged = (matchingContactId != currentContactId);
-        final boolean isDisplayNameChanged =
-                !TextUtils.equals(matchingDisplayName, currentDisplayName);
-        final boolean isFirstNameChanged = !TextUtils.equals(matchingFirstName, currentFirstName);
-        final boolean isPhotoUrlChanged = !TextUtils.equals(matchingPhotoUri, currentPhotoUri);
-        final boolean isDestinationChanged = !TextUtils.equals(matchingDestination,
-                currentContactDestination);
-
-        if (isContactIdChanged || isDisplayNameChanged || isFirstNameChanged || isPhotoUrlChanged
-                || isDestinationChanged) {
-            participantData.setContactId(matchingContactId);
-            participantData.setFullName(matchingDisplayName);
-            participantData.setFirstName(matchingFirstName);
-            participantData.setProfilePhotoUri(matchingPhotoUri);
-            participantData.setLookupKey(matchingLookupKey);
-            participantData.setContactDestination(matchingDestination);
-            if (isDestinationChanged) {
-                // Update the send destination to the new one entered by user in Contacts.
-                participantData.setSendDestination(matchingDestination);
-            }
-            updated = true;
-        }
-
-        return updated;
-    }
-
-    /**
-     * Update participant with matching contact's contactId, displayName and photoUri.
-     */
-    private static void updateParticipant(final DatabaseWrapper db,
-            final ParticipantData participantData) {
-        final ContentValues values = new ContentValues();
-        if (participantData.isSelf()) {
-            // Self participants can refresh their normalized phone numbers
-            values.put(ParticipantColumns.NORMALIZED_DESTINATION,
-                    participantData.getNormalizedDestination());
-            values.put(ParticipantColumns.DISPLAY_DESTINATION,
-                    participantData.getDisplayDestination());
-        }
-        values.put(ParticipantColumns.CONTACT_ID, participantData.getContactId());
-        values.put(ParticipantColumns.LOOKUP_KEY, participantData.getLookupKey());
-        values.put(ParticipantColumns.FULL_NAME, participantData.getFullName());
-        values.put(ParticipantColumns.FIRST_NAME, participantData.getFirstName());
-        values.put(ParticipantColumns.PROFILE_PHOTO_URI, participantData.getProfilePhotoUri());
-        values.put(ParticipantColumns.CONTACT_DESTINATION, participantData.getContactDestination());
-        values.put(ParticipantColumns.SEND_DESTINATION, participantData.getSendDestination());
-
-        db.beginTransaction();
-        try {
-            db.update(DatabaseHelper.PARTICIPANTS_TABLE, values, ParticipantColumns._ID + "=?",
-                    new String[] { participantData.getId() });
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-    }
-
-    /**
-     * Get a list of inactive self ids in the participants table.
-     */
-    private static List<String> getInactiveSelfParticipantIds() {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final List<String> inactiveSelf = new ArrayList<String>();
-
-        final String selection = ParticipantColumns.SIM_SLOT_ID + "=? AND " +
-                SELF_PARTICIPANTS_CLAUSE;
-        Cursor cursor = null;
-        try {
-            cursor = db.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                    new String[] { ParticipantColumns._ID },
-                    selection, new String[] { String.valueOf(ParticipantData.INVALID_SLOT_ID) },
-                    null, null, null);
-
-            if (cursor != null) {
-                while (cursor.moveToNext()) {
-                    final String participantId = cursor.getString(0);
-                    inactiveSelf.add(participantId);
-                }
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        return inactiveSelf;
-    }
-
-    /**
-     * Gets a list of conversations with the given self ids.
-     */
-    private static List<String> getConversationsWithSelfParticipantIds(final List<String> selfIds) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final List<String> conversationIds = new ArrayList<String>();
-
-        Cursor cursor = null;
-        try {
-            final StringBuilder selectionList = new StringBuilder();
-            for (int i = 0; i < selfIds.size(); i++) {
-                selectionList.append('?');
-                if (i < selfIds.size() - 1) {
-                    selectionList.append(',');
-                }
-            }
-            final String selection =
-                    ConversationColumns.CURRENT_SELF_ID + " IN (" + selectionList + ")";
-            cursor = db.query(DatabaseHelper.CONVERSATIONS_TABLE,
-                    new String[] { ConversationColumns._ID },
-                    selection, selfIds.toArray(new String[0]),
-                    null, null, null);
-
-            if (cursor != null) {
-                while (cursor.moveToNext()) {
-                    final String conversationId = cursor.getString(0);
-                    conversationIds.add(conversationId);
-                }
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return conversationIds;
-    }
-
-    /**
-     * Refresh one conversation's self id.
-     */
-    private static void updateConversationSelfId(final String conversationId,
-            final String selfId) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        db.beginTransaction();
-        try {
-            BugleDatabaseOperations.updateConversationSelfIdInTransaction(db, conversationId,
-                    selfId);
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-
-        MessagingContentProvider.notifyMessagesChanged(conversationId);
-        MessagingContentProvider.notifyConversationMetadataChanged(conversationId);
-        UIIntents.get().broadcastConversationSelfIdChange(db.getContext(), conversationId, selfId);
-    }
-
-    /**
-     * After refreshing the self participant list, find all conversations with inactive self ids,
-     * and switch them back to system default.
-     */
-    private static void refreshConversationSelfIds() {
-        final List<String> inactiveSelfs = getInactiveSelfParticipantIds();
-        if (inactiveSelfs.size() == 0) {
-            return;
-        }
-        final List<String> conversationsToRefresh =
-                getConversationsWithSelfParticipantIds(inactiveSelfs);
-        if (conversationsToRefresh.size() == 0) {
-            return;
-        }
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final ParticipantData defaultSelf =
-                BugleDatabaseOperations.getOrCreateSelf(db, ParticipantData.DEFAULT_SELF_SUB_ID);
-
-        if (defaultSelf != null) {
-            for (final String conversationId : conversationsToRefresh) {
-                updateConversationSelfId(conversationId, defaultSelf.getId());
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/SyncManager.java b/src/com/android/messaging/datamodel/SyncManager.java
deleted file mode 100644
index 28fc696..0000000
--- a/src/com/android/messaging/datamodel/SyncManager.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.provider.Telephony;
-import androidx.collection.LongSparseArray;
-
-import com.android.messaging.datamodel.action.SyncMessagesAction;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.BuglePrefsKeys;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-
-/**
- * This class manages message sync with the Telephony SmsProvider/MmsProvider.
- */
-public class SyncManager {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    /**
-     * Record of any user customization to conversation settings
-     */
-    public static class ConversationCustomization {
-        private final boolean mArchived;
-        private final boolean mMuted;
-        private final boolean mNoVibrate;
-        private final String mNotificationSoundUri;
-
-        public ConversationCustomization(final boolean archived, final boolean muted,
-                final boolean noVibrate, final String notificationSoundUri) {
-            mArchived = archived;
-            mMuted = muted;
-            mNoVibrate = noVibrate;
-            mNotificationSoundUri = notificationSoundUri;
-        }
-
-        public boolean isArchived() {
-            return mArchived;
-        }
-
-        public boolean isMuted() {
-            return mMuted;
-        }
-
-        public boolean noVibrate() {
-            return mNoVibrate;
-        }
-
-        public String getNotificationSoundUri() {
-            return mNotificationSoundUri;
-        }
-    }
-
-    SyncManager() {
-    }
-
-    /**
-     * Timestamp of in progress sync - used to keep track of whether sync is running
-     */
-    private long mSyncInProgressTimestamp = -1;
-
-    /**
-     * Timestamp of current sync batch upper bound - used to determine if message makes batch dirty
-     */
-    private long mCurrentUpperBoundTimestamp = -1;
-
-    /**
-     * Timestamp of messages inserted since sync batch started - used to determine if batch dirty
-     */
-    private long mMaxRecentChangeTimestamp = -1L;
-
-    private final ThreadInfoCache mThreadInfoCache = new ThreadInfoCache();
-
-    /**
-     * User customization to conversations. If this is set, we need to recover them after
-     * a full sync.
-     */
-    private LongSparseArray<ConversationCustomization> mCustomization = null;
-
-    /**
-     * Start an incremental sync (backed off a few seconds)
-     */
-    public static void sync() {
-        SyncMessagesAction.sync();
-    }
-
-    /**
-     * Start an incremental sync (with no backoff)
-     */
-    public static void immediateSync() {
-        SyncMessagesAction.immediateSync();
-    }
-
-    /**
-     * Start a full sync (for debugging)
-     */
-    public static void forceSync() {
-        SyncMessagesAction.fullSync();
-    }
-
-    /**
-     * Called from data model thread when starting a sync batch
-     * @param upperBoundTimestamp upper bound timestamp for sync batch
-     */
-    public synchronized void startSyncBatch(final long upperBoundTimestamp) {
-        Assert.isTrue(mCurrentUpperBoundTimestamp < 0);
-        mCurrentUpperBoundTimestamp = upperBoundTimestamp;
-        mMaxRecentChangeTimestamp = -1L;
-    }
-
-    /**
-     * Called from data model thread at end of batch to determine if any messages added in window
-     * @param lowerBoundTimestamp lower bound timestamp for sync batch
-     * @return true if message added within window from lower to upper bound timestamp of batch
-     */
-    public synchronized boolean isBatchDirty(final long lowerBoundTimestamp) {
-        Assert.isTrue(mCurrentUpperBoundTimestamp >= 0);
-        final long max = mMaxRecentChangeTimestamp;
-
-        final boolean dirty = (max >= 0 && max >= lowerBoundTimestamp);
-        if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "SyncManager: Sync batch of messages from " + lowerBoundTimestamp
-                    + " to " + mCurrentUpperBoundTimestamp + " is "
-                    + (dirty ? "DIRTY" : "clean") + "; max change timestamp = "
-                    + mMaxRecentChangeTimestamp);
-        }
-
-        mCurrentUpperBoundTimestamp = -1L;
-        mMaxRecentChangeTimestamp = -1L;
-
-        return dirty;
-    }
-
-    /**
-     * Called from data model or background worker thread to indicate start of message add process
-     * (add must complete on that thread before action transitions to new thread/stage)
-     * @param timestamp timestamp of message being added
-     */
-    public synchronized void onNewMessageInserted(final long timestamp) {
-        if (mCurrentUpperBoundTimestamp >= 0 && timestamp <= mCurrentUpperBoundTimestamp) {
-            // Message insert in current sync window
-            mMaxRecentChangeTimestamp = Math.max(mCurrentUpperBoundTimestamp, timestamp);
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "SyncManager: New message @ " + timestamp + " before upper bound of "
-                        + "current sync batch " + mCurrentUpperBoundTimestamp);
-            }
-        } else if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "SyncManager: New message @ " + timestamp + " after upper bound of "
-                    + "current sync batch " + mCurrentUpperBoundTimestamp);
-        }
-    }
-
-    /**
-     * Synchronously checks whether sync is allowed and starts sync if allowed
-     * @param full - true indicates a full (not incremental) sync operation
-     * @param startTimestamp - starttimestamp for this sync (if allowed)
-     * @return - true if sync should start
-     */
-    public synchronized boolean shouldSync(final boolean full, final long startTimestamp) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "SyncManager: Checking shouldSync " + (full ? "full " : "")
-                    + "at " + startTimestamp);
-        }
-
-        if (full) {
-            final long delayUntilFullSync = delayUntilFullSync(startTimestamp);
-            if (delayUntilFullSync > 0) {
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "SyncManager: Full sync requested for " + startTimestamp
-                            + " delayed for " + delayUntilFullSync + " ms");
-                }
-                return false;
-            }
-        }
-
-        if (isSyncing()) {
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "SyncManager: Not allowed to " + (full ? "full " : "")
-                        + "sync yet; still running sync started at " + mSyncInProgressTimestamp);
-            }
-            return false;
-        }
-        if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "SyncManager: Starting " + (full ? "full " : "") + "sync at "
-                    + startTimestamp);
-        }
-
-        mSyncInProgressTimestamp = startTimestamp;
-
-        return true;
-    }
-
-    /**
-     * Return delay (in ms) until allowed to run a full sync (0 meaning can run immediately)
-     * @param startTimestamp Timestamp used to start the sync
-     * @return 0 if allowed to run now, else delay in ms
-     */
-    public long delayUntilFullSync(final long startTimestamp) {
-        final BugleGservices bugleGservices = BugleGservices.get();
-        final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-
-        final long lastFullSyncTime = prefs.getLong(BuglePrefsKeys.LAST_FULL_SYNC_TIME, -1L);
-        final long smsFullSyncBackoffTimeMillis = bugleGservices.getLong(
-                BugleGservicesKeys.SMS_FULL_SYNC_BACKOFF_TIME_MILLIS,
-                BugleGservicesKeys.SMS_FULL_SYNC_BACKOFF_TIME_MILLIS_DEFAULT);
-        final long noFullSyncBefore = (lastFullSyncTime < 0 ? startTimestamp :
-            lastFullSyncTime + smsFullSyncBackoffTimeMillis);
-
-        final long delayUntilFullSync = noFullSyncBefore - startTimestamp;
-        if (delayUntilFullSync > 0) {
-            return delayUntilFullSync;
-        }
-        return 0;
-    }
-
-    /**
-     * Check if sync currently in progress (public for asserts/logging).
-     */
-    public synchronized boolean isSyncing() {
-        return (mSyncInProgressTimestamp >= 0);
-    }
-
-    /**
-     * Check if sync batch should be in progress - compares upperBound with in memory value
-     * @param upperBoundTimestamp - upperbound timestamp for sync batch
-     * @return - true if timestamps match (otherwise batch is orphan from older process)
-     */
-    public synchronized boolean isSyncing(final long upperBoundTimestamp) {
-        Assert.isTrue(upperBoundTimestamp >= 0);
-        return (upperBoundTimestamp == mCurrentUpperBoundTimestamp);
-    }
-
-    /**
-     * Check if sync has completed for the first time.
-     */
-    public boolean getHasFirstSyncCompleted() {
-        final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-        return prefs.getLong(BuglePrefsKeys.LAST_SYNC_TIME,
-                BuglePrefsKeys.LAST_SYNC_TIME_DEFAULT) !=
-                BuglePrefsKeys.LAST_SYNC_TIME_DEFAULT;
-    }
-
-    /**
-     * Called once sync is complete
-     */
-    public synchronized void complete() {
-        if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "SyncManager: Sync started at " + mSyncInProgressTimestamp
-                    + " marked as complete");
-        }
-        mSyncInProgressTimestamp = -1L;
-        // Conversation customization only used once
-        mCustomization = null;
-    }
-
-    private final ContentObserver mMmsSmsObserver = new TelephonyMessagesObserver();
-    private boolean mSyncOnChanges = false;
-    private boolean mNotifyOnChanges = false;
-
-    /**
-     * Register content observer when necessary and kick off a catch up sync
-     */
-    public void updateSyncObserver(final Context context) {
-        registerObserver(context);
-        // Trigger an sms sync in case we missed and messages before registering this observer or
-        // becoming the SMS provider.
-        immediateSync();
-    }
-
-    private void registerObserver(final Context context) {
-        if (!PhoneUtils.getDefault().isDefaultSmsApp()) {
-            // Not default SMS app - need to actively monitor telephony but not notify
-            mNotifyOnChanges = false;
-            mSyncOnChanges = true;
-        } else if (OsUtil.isSecondaryUser()){
-            // Secondary users default SMS app - need to actively monitor telephony and notify
-            mNotifyOnChanges = true;
-            mSyncOnChanges = true;
-        } else {
-            // Primary users default SMS app - don't monitor telephony (most changes from this app)
-            mNotifyOnChanges = false;
-            mSyncOnChanges = false;
-            if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
-                // This is default SMS app but on Auto platform, even default SMS app needs
-                // to be notified of changes because Bluetooth makes changes to Sms database
-                // (thru ContentProvider). Content Change notifications help the default SMS app
-                // refresh display with changes, whenever Bluetooth changes data in SMS db.
-                mNotifyOnChanges = true;
-                mSyncOnChanges = false;
-            }
-        }
-        if (mNotifyOnChanges || mSyncOnChanges) {
-            context.getContentResolver().registerContentObserver(Telephony.MmsSms.CONTENT_URI,
-                    true, mMmsSmsObserver);
-        } else {
-            context.getContentResolver().unregisterContentObserver(mMmsSmsObserver);
-        }
-    }
-
-    public synchronized void setCustomization(
-            final LongSparseArray<ConversationCustomization> customization) {
-        this.mCustomization = customization;
-    }
-
-    public synchronized ConversationCustomization getCustomizationForThread(final long threadId) {
-        if (mCustomization != null) {
-            return mCustomization.get(threadId);
-        }
-        return null;
-    }
-
-    public static void resetLastSyncTimestamps() {
-        final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-        prefs.putLong(BuglePrefsKeys.LAST_FULL_SYNC_TIME,
-                BuglePrefsKeys.LAST_FULL_SYNC_TIME_DEFAULT);
-        prefs.putLong(BuglePrefsKeys.LAST_SYNC_TIME, BuglePrefsKeys.LAST_SYNC_TIME_DEFAULT);
-    }
-
-    private class TelephonyMessagesObserver extends ContentObserver {
-        public TelephonyMessagesObserver() {
-            // Just run on default thread
-            super(null);
-        }
-
-        // Implement the onChange(boolean) method to delegate the change notification to
-        // the onChange(boolean, Uri) method to ensure correct operation on older versions
-        // of the framework that did not have the onChange(boolean, Uri) method.
-        @Override
-        public void onChange(final boolean selfChange) {
-            onChange(selfChange, null);
-        }
-
-        // Implement the onChange(boolean, Uri) method to take advantage of the new Uri argument.
-        @Override
-        public void onChange(final boolean selfChange, final Uri uri) {
-            // Handle change.
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "SyncManager: Sms/Mms DB changed @" + System.currentTimeMillis()
-                        + " for " + (uri == null ? "<unk>" : uri.toString()) + " "
-                        + mSyncOnChanges + "/" + mNotifyOnChanges);
-            }
-
-            if (mSyncOnChanges) {
-                // If sync is already running this will do nothing - but at end of each sync
-                // action there is a check for recent messages that should catch new changes.
-                SyncManager.immediateSync();
-            }
-            if (mNotifyOnChanges) {
-                // TODO: Secondary users are not going to get notifications
-            }
-        }
-    }
-
-    public ThreadInfoCache getThreadInfoCache() {
-        return mThreadInfoCache;
-    }
-
-    public static class ThreadInfoCache {
-        // Cache of thread->conversationId map
-        private final LongSparseArray<String> mThreadToConversationId =
-                new LongSparseArray<String>();
-
-        // Cache of thread->recipients map
-        private final LongSparseArray<List<String>> mThreadToRecipients =
-                new LongSparseArray<List<String>>();
-
-        // Remember the conversation ids that need to be archived
-        private final HashSet<String> mArchivedConversations = new HashSet<>();
-
-        public synchronized void clear() {
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "SyncManager: Cleared ThreadInfoCache");
-            }
-            mThreadToConversationId.clear();
-            mThreadToRecipients.clear();
-            mArchivedConversations.clear();
-        }
-
-        public synchronized boolean isArchived(final String conversationId) {
-            return mArchivedConversations.contains(conversationId);
-        }
-
-        /**
-         * Get or create a conversation based on the message's thread id
-         *
-         * @param threadId The message's thread
-         * @param refSubId The subId used for normalizing phone numbers in the thread
-         * @param customization The user setting customization to the conversation if any
-         * @return The existing conversation id or new conversation id
-         */
-        public synchronized String getOrCreateConversation(final DatabaseWrapper db,
-                final long threadId, int refSubId, final ConversationCustomization customization) {
-            // This function has several components which need to be atomic.
-            Assert.isTrue(db.getDatabase().inTransaction());
-
-            // If we already have this conversation ID in our local map, just return it
-            String conversationId = mThreadToConversationId.get(threadId);
-            if (conversationId != null) {
-                return conversationId;
-            }
-
-            final List<String> recipients = getThreadRecipients(threadId);
-            final ArrayList<ParticipantData> participants =
-                    BugleDatabaseOperations.getConversationParticipantsFromRecipients(recipients,
-                            refSubId);
-
-            if (customization != null) {
-                // There is user customization we need to recover
-                conversationId = BugleDatabaseOperations.getOrCreateConversation(db, threadId,
-                        customization.isArchived(), participants, customization.isMuted(),
-                        customization.noVibrate(), customization.getNotificationSoundUri());
-                if (customization.isArchived()) {
-                    mArchivedConversations.add(conversationId);
-                }
-            } else {
-                conversationId = BugleDatabaseOperations.getOrCreateConversation(db, threadId,
-                        false/*archived*/, participants, false/*noNotification*/,
-                        false/*noVibrate*/, null/*soundUri*/);
-            }
-
-            if (conversationId != null) {
-                mThreadToConversationId.put(threadId, conversationId);
-                return conversationId;
-            }
-
-            return null;
-        }
-
-
-        /**
-         * Load the recipients of a thread from telephony provider. If we fail, use
-         * a predefined unknown recipient. This should not return null.
-         *
-         * @param threadId
-         */
-        public synchronized List<String> getThreadRecipients(final long threadId) {
-            List<String> recipients = mThreadToRecipients.get(threadId);
-            if (recipients == null) {
-                recipients = MmsUtils.getRecipientsByThread(threadId);
-                if (recipients != null && recipients.size() > 0) {
-                    mThreadToRecipients.put(threadId, recipients);
-                }
-            }
-
-            if (recipients == null || recipients.isEmpty()) {
-                LogUtil.w(TAG, "SyncManager : using unknown sender since thread " + threadId +
-                        " couldn't find any recipients.");
-
-                // We want to try our best to load the messages,
-                // so if recipient info is broken, try to fix it with unknown recipient
-                recipients = Lists.newArrayList();
-                recipients.add(ParticipantData.getUnknownSenderDestination());
-            }
-
-            return recipients;
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/Action.java b/src/com/android/messaging/datamodel/action/Action.java
deleted file mode 100644
index e4c332e..0000000
--- a/src/com/android/messaging/datamodel/action/Action.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DataModelException;
-import com.android.messaging.datamodel.action.ActionMonitor.ActionCompletedListener;
-import com.android.messaging.datamodel.action.ActionMonitor.ActionExecutedListener;
-import com.android.messaging.util.LogUtil;
-
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Base class for operations that perform application business logic off the main UI thread while
- * holding a wake lock.
- * .
- * Note all derived classes need to provide real implementation of Parcelable (this is abstract)
- */
-public abstract class Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    // Members holding the parameters common to all actions - no action state
-    public final String actionKey;
-
-    // If derived classes keep their data in actionParameters then parcelable is trivial
-    protected Bundle actionParameters;
-
-    // This does not get written to the parcel
-    private final List<Action> mBackgroundActions = new LinkedList<Action>();
-
-    /**
-     * Process the action locally - runs on action service thread.
-     * TODO: Currently, there is no way for this method to indicate failure
-     * @return result to be passed in to {@link ActionExecutedListener#onActionExecuted}. It is
-     *         also the result passed in to {@link ActionCompletedListener#onActionSucceeded} if
-     *         there is no background work.
-     */
-    protected Object executeAction() {
-        return null;
-    }
-
-    /**
-     * Queues up background work ie. {@link #doBackgroundWork} will be called on the
-     * background worker thread.
-     */
-    protected void requestBackgroundWork() {
-        mBackgroundActions.add(this);
-    }
-
-    /**
-     * Queues up background actions for background processing after the current action has
-     * completed its processing ({@link #executeAction}, {@link processBackgroundCompletion}
-     * or {@link #processBackgroundFailure}) on the Action thread.
-     * @param backgroundAction
-     */
-    protected void requestBackgroundWork(final Action backgroundAction) {
-        mBackgroundActions.add(backgroundAction);
-    }
-
-    /**
-     * Return flag indicating if any actions have been queued
-     */
-    public boolean hasBackgroundActions() {
-        return !mBackgroundActions.isEmpty();
-    }
-
-    /**
-     * Send queued actions to the background worker provided
-     */
-    public void sendBackgroundActions(final BackgroundWorker worker) {
-        worker.queueBackgroundWork(mBackgroundActions);
-        mBackgroundActions.clear();
-    }
-
-    /**
-     * Do work in a long running background worker thread.
-     * {@link #requestBackgroundWork} needs to be called for this method to
-     * be called. {@link #processBackgroundFailure} will be called on the Action service thread
-     * if this method throws {@link DataModelException}.
-     * @return response that is to be passed to {@link #processBackgroundResponse}
-     */
-    protected Bundle doBackgroundWork() throws DataModelException {
-        return null;
-    }
-
-    /**
-     * Process the success response from the background worker. Runs on action service thread.
-     * @param response the response returned by {@link #doBackgroundWork}
-     * @return result to be passed in to {@link ActionCompletedListener#onActionSucceeded}
-     */
-    protected Object processBackgroundResponse(final Bundle response) {
-        return null;
-    }
-
-    /**
-     * Called in case of failures when sending background actions. Runs on action service thread
-     * @return result to be passed in to {@link ActionCompletedListener#onActionFailed}
-     */
-    protected Object processBackgroundFailure() {
-        return null;
-    }
-
-    /**
-     * Constructor
-     */
-    protected Action(final String key) {
-        this.actionKey = key;
-        this.actionParameters = new Bundle();
-    }
-
-    /**
-     * Constructor
-     */
-    protected Action() {
-        this.actionKey = generateUniqueActionKey(getClass().getSimpleName());
-        this.actionParameters = new Bundle();
-    }
-
-    /**
-     * Queue an action and monitor for processing by the ActionService via the factory helper
-     */
-    protected void start(final ActionMonitor monitor) {
-        ActionMonitor.registerActionMonitor(this.actionKey, monitor);
-        DataModel.startActionService(this);
-    }
-
-    /**
-     * Queue an action for processing by the ActionService via the factory helper
-     */
-    public void start() {
-        DataModel.startActionService(this);
-    }
-
-    /**
-     * Queue an action for delayed processing by the ActionService via the factory helper
-     */
-    public void schedule(final int requestCode, final long delayMs) {
-        DataModel.scheduleAction(this, requestCode, delayMs);
-    }
-
-    /**
-     * Called when action queues ActionService intent
-     */
-    protected final void markStart() {
-        ActionMonitor.setState(this, ActionMonitor.STATE_CREATED,
-                ActionMonitor.STATE_QUEUED);
-    }
-
-    /**
-     * Mark the beginning of local action execution
-     */
-    protected final void markBeginExecute() {
-        ActionMonitor.setState(this, ActionMonitor.STATE_QUEUED,
-                ActionMonitor.STATE_EXECUTING);
-    }
-
-    /**
-     * Mark the end of local action execution - either completes the action or queues
-     * background actions
-     */
-    protected final void markEndExecute(final Object result) {
-        final boolean hasBackgroundActions = hasBackgroundActions();
-        ActionMonitor.setExecutedState(this, ActionMonitor.STATE_EXECUTING,
-                hasBackgroundActions, result);
-        if (!hasBackgroundActions) {
-            ActionMonitor.setCompleteState(this, ActionMonitor.STATE_EXECUTING,
-                    result, true);
-        }
-    }
-
-    /**
-     * Update action state to indicate that the background worker is starting
-     */
-    protected final void markBackgroundWorkStarting() {
-        ActionMonitor.setState(this,
-                ActionMonitor.STATE_BACKGROUND_ACTIONS_QUEUED,
-                ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION);
-    }
-
-    /**
-     * Update action state to indicate that the background worker has posted its response
-     * (or failure) to the Action service
-     */
-    protected final void markBackgroundCompletionQueued() {
-        ActionMonitor.setState(this,
-                ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION,
-                ActionMonitor.STATE_BACKGROUND_COMPLETION_QUEUED);
-    }
-
-    /**
-     * Update action state to indicate the background action failed but is being re-queued for retry
-     */
-    protected final void markBackgroundWorkQueued() {
-        ActionMonitor.setState(this,
-                ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION,
-                ActionMonitor.STATE_BACKGROUND_ACTIONS_QUEUED);
-    }
-
-    /**
-     * Called by ActionService to process a response from the background worker
-     * @param response the response returned by {@link #doBackgroundWork}
-     */
-    protected final void processBackgroundWorkResponse(final Bundle response) {
-        ActionMonitor.setState(this,
-                ActionMonitor.STATE_BACKGROUND_COMPLETION_QUEUED,
-                ActionMonitor.STATE_PROCESSING_BACKGROUND_RESPONSE);
-        final Object result = processBackgroundResponse(response);
-        ActionMonitor.setCompleteState(this,
-                ActionMonitor.STATE_PROCESSING_BACKGROUND_RESPONSE, result, true);
-    }
-
-    /**
-     * Called by ActionService when a background action fails
-     */
-    protected final void processBackgroundWorkFailure() {
-        final Object result = processBackgroundFailure();
-        ActionMonitor.setCompleteState(this, ActionMonitor.STATE_UNDEFINED,
-                result, false);
-    }
-
-    private static final Object sLock = new Object();
-    private static long sActionIdx = System.currentTimeMillis() * 1000;
-
-    /**
-     * Helper method to generate a unique operation index
-     */
-    protected static long getActionIdx() {
-        long idx = 0;
-        synchronized (sLock) {
-            idx = ++sActionIdx;
-        }
-        return idx;
-    }
-
-    /**
-     * This helper can be used to generate a unique key used to identify an action.
-     * @param baseKey - key generated to identify the action parameters
-     * @return - composite key generated by appending unique index
-     */
-    protected static String generateUniqueActionKey(final String baseKey) {
-        final StringBuilder key = new StringBuilder();
-        if (!TextUtils.isEmpty(baseKey)) {
-            key.append(baseKey);
-        }
-        key.append(":");
-        key.append(getActionIdx());
-        return key.toString();
-    }
-
-    /**
-     * Most derived classes use this base implementation (unless they include files handles)
-     */
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * Derived classes need to implement writeToParcel (but typically should call this method
-     * to parcel Action member variables before they parcel their member variables).
-     */
-    public void writeActionToParcel(final Parcel parcel, final int flags) {
-        parcel.writeString(this.actionKey);
-        parcel.writeBundle(this.actionParameters);
-    }
-
-    /**
-     * Helper for derived classes to implement parcelable
-     */
-    public Action(final Parcel in) {
-        this.actionKey = in.readString();
-        // Note: Need to set classloader to ensure we can un-parcel classes from this package
-        this.actionParameters = in.readBundle(Action.class.getClassLoader());
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ActionMonitor.java b/src/com/android/messaging/datamodel/action/ActionMonitor.java
deleted file mode 100644
index ac83414..0000000
--- a/src/com/android/messaging/datamodel/action/ActionMonitor.java
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.os.Handler;
-import androidx.collection.SimpleArrayMap;
-import android.text.TextUtils;
-
-import com.android.messaging.util.Assert.RunsOnAnyThread;
-import com.android.messaging.util.Assert.RunsOnMainThread;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.ThreadUtil;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.TimeZone;
-
-/**
- * Base class for action monitors
- * Actions come in various flavors but
- *  o) Fire and forget - no monitor
- *  o) Immediate local processing only - will trigger ActionCompletedListener when done
- *  o) Background worker processing only - will trigger ActionCompletedListener when done
- *  o) Immediate local processing followed by background work followed by more local processing
- *      - will trigger ActionExecutedListener once local processing complete and
- *        ActionCompletedListener when second set of local process (dealing with background
- *         worker response) is complete
- */
-public class ActionMonitor {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    /**
-     * Interface used to notify on completion of local execution for an action
-     */
-    public interface ActionExecutedListener {
-        /**
-         * @param result value returned by {@link Action#executeAction}
-         */
-        @RunsOnMainThread
-        abstract void onActionExecuted(ActionMonitor monitor, final Action action,
-                final Object data, final Object result);
-    }
-
-    /**
-     * Interface used to notify action completion
-     */
-    public interface ActionCompletedListener {
-        /**
-         * @param result object returned from processing the action. This is the value returned by
-         *               {@link Action#executeAction} if there is no background work, or
-         *               else the value returned by
-         *               {@link Action#processBackgroundResponse}
-         */
-        @RunsOnMainThread
-        abstract void onActionSucceeded(ActionMonitor monitor,
-                final Action action, final Object data, final Object result);
-        /**
-         * @param result value returned by {@link Action#processBackgroundFailure}
-         */
-        @RunsOnMainThread
-        abstract void onActionFailed(ActionMonitor monitor, final Action action,
-                final Object data, final Object result);
-    }
-
-    /**
-     * Interface for being notified of action state changes - used for profiling, testing only
-     */
-    protected interface ActionStateChangedListener {
-        /**
-         * @param action the action that is changing state
-         * @param state the new state of the action
-         */
-        @RunsOnAnyThread
-        void onActionStateChanged(Action action, int state);
-    }
-
-    /**
-     * Operations always start out as STATE_CREATED and finish as STATE_COMPLETE.
-     * Some common state transition sequences in between include:
-     * <ul>
-     *   <li>Local data change only : STATE_QUEUED - STATE_EXECUTING
-     *   <li>Background worker request only : STATE_BACKGROUND_ACTIONS_QUEUED
-     *      - STATE_EXECUTING_BACKGROUND_ACTION
-     *      - STATE_BACKGROUND_COMPLETION_QUEUED
-     *      - STATE_PROCESSING_BACKGROUND_RESPONSE
-     *   <li>Local plus background worker request : STATE_QUEUED - STATE_EXECUTING
-     *      - STATE_BACKGROUND_ACTIONS_QUEUED
-     *      - STATE_EXECUTING_BACKGROUND_ACTION
-     *      - STATE_BACKGROUND_COMPLETION_QUEUED
-     *      - STATE_PROCESSING_BACKGROUND_RESPONSE
-     * </ul>
-     */
-    protected static final int STATE_UNDEFINED = 0;
-    protected static final int STATE_CREATED = 1; // Just created
-    protected static final int STATE_QUEUED = 2; // Action queued for processing
-    protected static final int STATE_EXECUTING = 3; // Action processing on datamodel thread
-    protected static final int STATE_BACKGROUND_ACTIONS_QUEUED = 4;
-    protected static final int STATE_EXECUTING_BACKGROUND_ACTION = 5;
-    // The background work has completed, either returning a success response or resulting in a
-    // failure
-    protected static final int STATE_BACKGROUND_COMPLETION_QUEUED = 6;
-    protected static final int STATE_PROCESSING_BACKGROUND_RESPONSE = 7;
-    protected static final int STATE_COMPLETE = 8; // Action complete
-
-    /**
-     * Lock used to protect access to state and listeners
-     */
-    private final Object mLock = new Object();
-
-    /**
-     * Current state of action
-     */
-    @VisibleForTesting
-    protected int mState;
-
-    /**
-     * Listener which is notified on action completion
-     */
-    private ActionCompletedListener mCompletedListener;
-
-    /**
-     * Listener which is notified on action executed
-     */
-    private ActionExecutedListener mExecutedListener;
-
-    /**
-     * Listener which is notified of state changes
-     */
-    private ActionStateChangedListener mStateChangedListener;
-
-    /**
-     * Handler used to post results back to caller
-     */
-    private final Handler mHandler;
-
-    /**
-     * Data passed back to listeners (associated with the action when it is created)
-     */
-    private final Object mData;
-
-    /**
-     * The action key is used to determine equivalence of operations and their requests
-     */
-    private final String mActionKey;
-
-    /**
-     * Get action key identifying associated action
-     */
-    public String getActionKey() {
-        return mActionKey;
-    }
-
-    /**
-     * Unregister listeners so that they will not be called back - override this method if needed
-     */
-    public void unregister() {
-        clearListeners();
-    }
-
-    /**
-     * Unregister listeners so that they will not be called
-     */
-    protected final void clearListeners() {
-        synchronized (mLock) {
-            mCompletedListener = null;
-            mExecutedListener = null;
-        }
-    }
-
-    /**
-     * Create a monitor associated with a particular action instance
-     */
-    protected ActionMonitor(final int initialState, final String actionKey,
-            final Object data) {
-        mHandler = ThreadUtil.getMainThreadHandler();
-        mActionKey = actionKey;
-        mState = initialState;
-        mData = data;
-    }
-
-    /**
-     * Return flag to indicate if action is complete
-     */
-    public boolean isComplete() {
-        boolean complete = false;
-        synchronized (mLock) {
-            complete = (mState == STATE_COMPLETE);
-        }
-        return complete;
-    }
-
-    /**
-     * Set listener that will be called with action completed result
-     */
-    protected final void setCompletedListener(final ActionCompletedListener listener) {
-        synchronized (mLock) {
-            mCompletedListener = listener;
-        }
-    }
-
-    /**
-     * Set listener that will be called with local execution result
-     */
-    protected final void setExecutedListener(final ActionExecutedListener listener) {
-        synchronized (mLock) {
-            mExecutedListener = listener;
-        }
-    }
-
-    /**
-     * Set listener that will be called with local execution result
-     */
-    protected final void setStateChangedListener(final ActionStateChangedListener listener) {
-        synchronized (mLock) {
-            mStateChangedListener = listener;
-        }
-    }
-
-    /**
-     * Perform a state update transition
-     * @param action - action whose state is updating
-     * @param expectedOldState - expected existing state of action (can be UNKNOWN)
-     * @param newState - new state which will be set
-     */
-    @VisibleForTesting
-    protected void updateState(final Action action, final int expectedOldState,
-            final int newState) {
-        ActionStateChangedListener listener = null;
-        synchronized (mLock) {
-            if (expectedOldState != STATE_UNDEFINED &&
-                    mState != expectedOldState) {
-                throw new IllegalStateException("On updateState to " + newState + " was " + mState
-                        + " expecting " + expectedOldState);
-            }
-            if (newState != mState) {
-                mState = newState;
-                listener = mStateChangedListener;
-            }
-        }
-        if (listener != null) {
-            listener.onActionStateChanged(action, newState);
-        }
-    }
-
-    /**
-     * Perform a state update transition
-     * @param action - action whose state is updating
-     * @param expectedOldState - expected existing state of action (can be UNKNOWN)
-     * @param newState - new state which will be set
-     */
-    static void setState(final Action action, final int expectedOldState,
-            final int newState) {
-        int oldMonitorState = expectedOldState;
-        int newMonitorState = newState;
-        final ActionMonitor monitor
-                = ActionMonitor.lookupActionMonitor(action.actionKey);
-        if (monitor != null) {
-            oldMonitorState = monitor.mState;
-            monitor.updateState(action, expectedOldState, newState);
-            newMonitorState = monitor.mState;
-        }
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
-            df.setTimeZone(TimeZone.getTimeZone("UTC"));
-            LogUtil.v(TAG, "Operation-" + action.actionKey + ": @" + df.format(new Date())
-                    + "UTC State = " + oldMonitorState + " - " + newMonitorState);
-        }
-    }
-
-    /**
-     * Mark action complete
-     * @param action - action whose state is updating
-     * @param expectedOldState - expected existing state of action (can be UNKNOWN)
-     * @param result - object returned from processing the action. This is the value returned by
-     *                 {@link Action#executeAction} if there is no background work, or
-     *                 else the value returned by {@link Action#processBackgroundResponse}
-     *                 or {@link Action#processBackgroundFailure}
-     */
-    private final void complete(final Action action,
-            final int expectedOldState, final Object result,
-            final boolean succeeded) {
-        ActionCompletedListener completedListener = null;
-        synchronized (mLock) {
-            setState(action, expectedOldState, STATE_COMPLETE);
-            completedListener = mCompletedListener;
-            mExecutedListener = null;
-            mStateChangedListener = null;
-        }
-        if (completedListener != null) {
-            // Marshal to UI thread
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    ActionCompletedListener listener = null;
-                    synchronized (mLock) {
-                        if (mCompletedListener != null) {
-                            listener = mCompletedListener;
-                        }
-                        mCompletedListener = null;
-                    }
-                    if (listener != null) {
-                        if (succeeded) {
-                            listener.onActionSucceeded(ActionMonitor.this,
-                                    action, mData, result);
-                        } else {
-                            listener.onActionFailed(ActionMonitor.this,
-                                    action, mData, result);
-                        }
-                    }
-                }
-            });
-        }
-    }
-
-    /**
-     * Mark action complete
-     * @param action - action whose state is updating
-     * @param expectedOldState - expected existing state of action (can be UNKNOWN)
-     * @param result - object returned from processing the action. This is the value returned by
-     *                 {@link Action#executeAction} if there is no background work, or
-     *                 else the value returned by {@link Action#processBackgroundResponse}
-     *                 or {@link Action#processBackgroundFailure}
-     */
-    static void setCompleteState(final Action action, final int expectedOldState,
-            final Object result, final boolean succeeded) {
-        int oldMonitorState = expectedOldState;
-        final ActionMonitor monitor
-                = ActionMonitor.lookupActionMonitor(action.actionKey);
-        if (monitor != null) {
-            oldMonitorState = monitor.mState;
-            monitor.complete(action, expectedOldState, result, succeeded);
-            unregisterActionMonitorIfComplete(action.actionKey, monitor);
-        }
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
-            df.setTimeZone(TimeZone.getTimeZone("UTC"));
-            LogUtil.v(TAG, "Operation-" + action.actionKey + ": @" + df.format(new Date())
-                    + "UTC State = " + oldMonitorState + " - " + STATE_COMPLETE);
-        }
-    }
-
-    /**
-     * Mark action complete
-     * @param action - action whose state is updating
-     * @param expectedOldState - expected existing state of action (can be UNKNOWN)
-     * @param hasBackgroundActions - has the completing action requested background work
-     * @param result - the return value of {@link Action#executeAction}
-     */
-    final void executed(final Action action,
-            final int expectedOldState, final boolean hasBackgroundActions, final Object result) {
-        ActionExecutedListener executedListener = null;
-        synchronized (mLock) {
-            if (hasBackgroundActions) {
-                setState(action, expectedOldState, STATE_BACKGROUND_ACTIONS_QUEUED);
-            }
-            executedListener = mExecutedListener;
-        }
-        if (executedListener != null) {
-            // Marshal to UI thread
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    ActionExecutedListener listener = null;
-                    synchronized (mLock) {
-                        if (mExecutedListener != null) {
-                            listener = mExecutedListener;
-                            mExecutedListener = null;
-                        }
-                    }
-                    if (listener != null) {
-                        listener.onActionExecuted(ActionMonitor.this,
-                                action, mData, result);
-                    }
-                }
-            });
-        }
-    }
-
-    /**
-     * Mark action complete
-     * @param action - action whose state is updating
-     * @param expectedOldState - expected existing state of action (can be UNKNOWN)
-     * @param hasBackgroundActions - has the completing action requested background work
-     * @param result - the return value of {@link Action#executeAction}
-     */
-    static void setExecutedState(final Action action,
-            final int expectedOldState, final boolean hasBackgroundActions, final Object result) {
-        int oldMonitorState = expectedOldState;
-        final ActionMonitor monitor
-                = ActionMonitor.lookupActionMonitor(action.actionKey);
-        if (monitor != null) {
-            oldMonitorState = monitor.mState;
-            monitor.executed(action, expectedOldState, hasBackgroundActions, result);
-        }
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
-            df.setTimeZone(TimeZone.getTimeZone("UTC"));
-            LogUtil.v(TAG, "Operation-" + action.actionKey + ": @" + df.format(new Date())
-                    + "UTC State = " + oldMonitorState + " - EXECUTED");
-        }
-    }
-
-    /**
-     * Map of action monitors indexed by actionKey
-     */
-    @VisibleForTesting
-    static SimpleArrayMap<String, ActionMonitor> sActionMonitors =
-            new SimpleArrayMap<String, ActionMonitor>();
-
-    /**
-     * Insert new monitor into map
-     */
-    static void registerActionMonitor(final String actionKey,
-            final ActionMonitor monitor) {
-        if (monitor != null
-                && (TextUtils.isEmpty(monitor.getActionKey())
-                        || TextUtils.isEmpty(actionKey)
-                        || !actionKey.equals(monitor.getActionKey()))) {
-            throw new IllegalArgumentException("Monitor key " + monitor.getActionKey()
-                    + " not compatible with action key " + actionKey);
-        }
-        synchronized (sActionMonitors) {
-            sActionMonitors.put(actionKey, monitor);
-        }
-    }
-
-    /**
-     * Find monitor associated with particular action
-     */
-    private static ActionMonitor lookupActionMonitor(final String actionKey) {
-        ActionMonitor monitor = null;
-        synchronized (sActionMonitors) {
-            monitor = sActionMonitors.get(actionKey);
-        }
-        return monitor;
-    }
-
-    /**
-     * Remove monitor from map
-     */
-    @VisibleForTesting
-    static void unregisterActionMonitor(final String actionKey,
-            final ActionMonitor monitor) {
-        if (monitor != null) {
-            synchronized (sActionMonitors) {
-                sActionMonitors.remove(actionKey);
-            }
-        }
-    }
-
-    /**
-     * Remove monitor from map if the action is complete
-     */
-    static void unregisterActionMonitorIfComplete(final String actionKey,
-            final ActionMonitor monitor) {
-        if (monitor != null && monitor.isComplete()) {
-            synchronized (sActionMonitors) {
-                sActionMonitors.remove(actionKey);
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ActionService.java b/src/com/android/messaging/datamodel/action/ActionService.java
deleted file mode 100644
index 29225fa..0000000
--- a/src/com/android/messaging/datamodel/action/ActionService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.app.PendingIntent;
-import android.content.Context;
-import android.os.Bundle;
-
-/**
- * Class providing interface for the ActionService - can be stubbed for testing
- */
-public class ActionService {
-    protected static PendingIntent makeStartActionPendingIntent(final Context context,
-            final Action action, final int requestCode, final boolean launchesAnActivity) {
-        return ActionServiceImpl.makeStartActionPendingIntent(context, action, requestCode,
-                launchesAnActivity);
-    }
-
-    /**
-     * Start an action by posting it over the the ActionService
-     */
-    public void startAction(final Action action) {
-        ActionServiceImpl.startAction(action);
-    }
-
-    /**
-     * Schedule a delayed action by posting it over the the ActionService
-     */
-    public void scheduleAction(final Action action, final int code,
-            final long delayMs) {
-        ActionServiceImpl.scheduleAction(action, code, delayMs);
-    }
-
-    /**
-     * Process a response from the BackgroundWorker in the ActionService
-     */
-    protected void handleResponseFromBackgroundWorker(
-            final Action action, final Bundle response) {
-        ActionServiceImpl.handleResponseFromBackgroundWorker(action, response);
-    }
-
-    /**
-     * Process a failure from the BackgroundWorker in the ActionService
-     */
-    protected void handleFailureFromBackgroundWorker(final Action action,
-            final Exception exception) {
-        ActionServiceImpl.handleFailureFromBackgroundWorker(action, exception);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ActionServiceImpl.java b/src/com/android/messaging/datamodel/action/ActionServiceImpl.java
deleted file mode 100644
index d78bdc0..0000000
--- a/src/com/android/messaging/datamodel/action/ActionServiceImpl.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.SystemClock;
-
-import androidx.core.app.JobIntentService;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.LoggingTimer;
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * ActionService used to perform background processing for data model
- */
-public class ActionServiceImpl extends JobIntentService {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-    private static final boolean VERBOSE = false;
-
-    /**
-     * Unique job ID for this service.
-     */
-    public static final int JOB_ID = 1000;
-
-    public ActionServiceImpl() {
-        super();
-    }
-
-    /**
-     * Start action by sending intent to the service
-     * @param action - action to start
-     */
-    protected static void startAction(final Action action) {
-        final Intent intent = makeIntent(OP_START_ACTION);
-        final Bundle actionBundle = new Bundle();
-        actionBundle.putParcelable(BUNDLE_ACTION, action);
-        intent.putExtra(EXTRA_ACTION_BUNDLE, actionBundle);
-        action.markStart();
-        startServiceWithIntent(intent);
-    }
-
-    /**
-     * Schedule an action to run after specified delay using alarm manager to send pendingintent
-     * @param action - action to start
-     * @param requestCode - request code used to collapse requests
-     * @param delayMs - delay in ms (from now) before action will start
-     */
-    protected static void scheduleAction(final Action action, final int requestCode,
-            final long delayMs) {
-        final Intent intent = PendingActionReceiver.makeIntent(OP_START_ACTION);
-        final Bundle actionBundle = new Bundle();
-        actionBundle.putParcelable(BUNDLE_ACTION, action);
-        intent.putExtra(EXTRA_ACTION_BUNDLE, actionBundle);
-
-        PendingActionReceiver.scheduleAlarm(intent, requestCode, delayMs);
-    }
-
-    /**
-     * Handle response returned by BackgroundWorker
-     * @param request - request generating response
-     * @param response - response from service
-     */
-    protected static void handleResponseFromBackgroundWorker(final Action action,
-            final Bundle response) {
-        final Intent intent = makeIntent(OP_RECEIVE_BACKGROUND_RESPONSE);
-
-        final Bundle actionBundle = new Bundle();
-        actionBundle.putParcelable(BUNDLE_ACTION, action);
-        intent.putExtra(EXTRA_ACTION_BUNDLE, actionBundle);
-        intent.putExtra(EXTRA_WORKER_RESPONSE, response);
-
-        startServiceWithIntent(intent);
-    }
-
-    /**
-     * Handle response returned by BackgroundWorker
-     * @param request - request generating failure
-     */
-    protected static void handleFailureFromBackgroundWorker(final Action action,
-            final Exception exception) {
-        final Intent intent = makeIntent(OP_RECEIVE_BACKGROUND_FAILURE);
-
-        final Bundle actionBundle = new Bundle();
-        actionBundle.putParcelable(BUNDLE_ACTION, action);
-        intent.putExtra(EXTRA_ACTION_BUNDLE, actionBundle);
-        intent.putExtra(EXTRA_WORKER_EXCEPTION, exception);
-
-        startServiceWithIntent(intent);
-    }
-
-    // ops
-    @VisibleForTesting
-    protected static final int OP_START_ACTION = 200;
-    @VisibleForTesting
-    protected static final int OP_RECEIVE_BACKGROUND_RESPONSE = 201;
-    @VisibleForTesting
-    protected static final int OP_RECEIVE_BACKGROUND_FAILURE = 202;
-
-    // extras
-    @VisibleForTesting
-    protected static final String EXTRA_OP_CODE = "op";
-    @VisibleForTesting
-    protected static final String EXTRA_ACTION_BUNDLE = "datamodel_action_bundle";
-    @VisibleForTesting
-    protected static final String EXTRA_WORKER_EXCEPTION = "worker_exception";
-    @VisibleForTesting
-    protected static final String EXTRA_WORKER_RESPONSE = "worker_response";
-    @VisibleForTesting
-    protected static final String EXTRA_WORKER_UPDATE = "worker_update";
-    @VisibleForTesting
-    protected static final String BUNDLE_ACTION = "bundle_action";
-
-    private BackgroundWorker mBackgroundWorker;
-
-    /**
-     * Allocate an intent with a specific opcode.
-     */
-    private static Intent makeIntent(final int opcode) {
-        final Intent intent = new Intent(Factory.get().getApplicationContext(),
-                ActionServiceImpl.class);
-        intent.putExtra(EXTRA_OP_CODE, opcode);
-        return intent;
-    }
-
-    /**
-     * Broadcast receiver for alarms scheduled through ActionService.
-     */
-    public static class PendingActionReceiver extends BroadcastReceiver {
-        static final String ACTION = "com.android.messaging.datamodel.PENDING_ACTION";
-
-        /**
-         * Allocate an intent with a specific opcode and alarm action.
-         */
-        public static Intent makeIntent(final int opcode) {
-            final Intent intent = new Intent(Factory.get().getApplicationContext(),
-                    PendingActionReceiver.class);
-            intent.setAction(ACTION);
-            intent.putExtra(EXTRA_OP_CODE, opcode);
-            return intent;
-        }
-
-        public static void scheduleAlarm(final Intent intent, final int requestCode,
-                final long delayMs) {
-            final Context context = Factory.get().getApplicationContext();
-            final PendingIntent pendingIntent = PendingIntent.getBroadcast(
-                    context, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
-
-            final AlarmManager mgr =
-                    (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
-
-            if (delayMs < Long.MAX_VALUE) {
-                mgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
-                        SystemClock.elapsedRealtime() + delayMs, pendingIntent);
-            } else {
-                mgr.cancel(pendingIntent);
-            }
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        public void onReceive(final Context context, final Intent intent) {
-            ActionServiceImpl.startServiceWithIntent(intent);
-        }
-    }
-
-    /**
-     * Creates a pending intent that will trigger a data model action when the intent is
-     * triggered
-     */
-    public static PendingIntent makeStartActionPendingIntent(final Context context,
-            final Action action, final int requestCode, final boolean launchesAnActivity) {
-        final Intent intent = PendingActionReceiver.makeIntent(OP_START_ACTION);
-        final Bundle actionBundle = new Bundle();
-        actionBundle.putParcelable(BUNDLE_ACTION, action);
-        intent.putExtra(EXTRA_ACTION_BUNDLE, actionBundle);
-        if (launchesAnActivity) {
-            intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
-        }
-        return PendingIntent.getBroadcast(context, requestCode, intent,
-                PendingIntent.FLAG_UPDATE_CURRENT);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        mBackgroundWorker = DataModel.get().getBackgroundWorkerForActionService();
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-    }
-
-    /**
-     * Queue intent to the ActionService.
-     */
-    private static void startServiceWithIntent(final Intent intent) {
-        final Context context = Factory.get().getApplicationContext();
-        final int opcode = intent.getIntExtra(EXTRA_OP_CODE, 0);
-        intent.setClass(context, ActionServiceImpl.class);
-        enqueueWork(context, intent);
-    }
-
-    public static void enqueueWork(Context context, Intent work) {
-        enqueueWork(context, ActionServiceImpl.class, JOB_ID, work);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected void onHandleWork(final Intent intent) {
-        if (intent == null) {
-            // Shouldn't happen but sometimes does following another crash.
-            LogUtil.w(TAG, "ActionService.onHandleIntent: Called with null intent");
-            return;
-        }
-        final int opcode = intent.getIntExtra(EXTRA_OP_CODE, 0);
-
-        Action action;
-        final Bundle actionBundle = intent.getBundleExtra(EXTRA_ACTION_BUNDLE);
-        actionBundle.setClassLoader(getClassLoader());
-        switch(opcode) {
-            case OP_START_ACTION: {
-                action = (Action) actionBundle.getParcelable(BUNDLE_ACTION);
-                executeAction(action);
-                break;
-            }
-
-            case OP_RECEIVE_BACKGROUND_RESPONSE: {
-                action = (Action) actionBundle.getParcelable(BUNDLE_ACTION);
-                final Bundle response = intent.getBundleExtra(EXTRA_WORKER_RESPONSE);
-                processBackgroundResponse(action, response);
-                break;
-            }
-
-            case OP_RECEIVE_BACKGROUND_FAILURE: {
-                action = (Action) actionBundle.getParcelable(BUNDLE_ACTION);
-                processBackgroundFailure(action);
-                break;
-            }
-
-            default:
-                throw new RuntimeException("Unrecognized opcode in ActionServiceImpl");
-        }
-
-        action.sendBackgroundActions(mBackgroundWorker);
-    }
-
-    private static final long EXECUTION_TIME_WARN_LIMIT_MS = 1000; // 1 second
-    /**
-     * Local execution of action on ActionService thread
-     */
-    private void executeAction(final Action action) {
-        action.markBeginExecute();
-
-        final LoggingTimer timer = createLoggingTimer(action, "#executeAction");
-        timer.start();
-
-        final Object result = action.executeAction();
-
-        timer.stopAndLog();
-
-        action.markEndExecute(result);
-    }
-
-    /**
-     * Process response on ActionService thread
-     */
-    private void processBackgroundResponse(final Action action, final Bundle response) {
-        final LoggingTimer timer = createLoggingTimer(action, "#processBackgroundResponse");
-        timer.start();
-
-        action.processBackgroundWorkResponse(response);
-
-        timer.stopAndLog();
-    }
-
-    /**
-     * Process failure on ActionService thread
-     */
-    private void processBackgroundFailure(final Action action) {
-        final LoggingTimer timer = createLoggingTimer(action, "#processBackgroundFailure");
-        timer.start();
-
-        action.processBackgroundWorkFailure();
-
-        timer.stopAndLog();
-    }
-
-    private static LoggingTimer createLoggingTimer(
-            final Action action, final String methodName) {
-        return new LoggingTimer(TAG, action.getClass().getSimpleName() + methodName,
-                EXECUTION_TIME_WARN_LIMIT_MS);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/BackgroundWorker.java b/src/com/android/messaging/datamodel/action/BackgroundWorker.java
deleted file mode 100644
index aad3c07..0000000
--- a/src/com/android/messaging/datamodel/action/BackgroundWorker.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import java.util.List;
-
-/**
- * Interface between action service and its workers
- */
-public class BackgroundWorker {
-
-    /**
-     * Send list of requests from action service to a worker
-     */
-    public void queueBackgroundWork(final List<Action> backgroundActions) {
-        BackgroundWorkerService.queueBackgroundWork(backgroundActions);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/BackgroundWorkerService.java b/src/com/android/messaging/datamodel/action/BackgroundWorkerService.java
deleted file mode 100644
index 6096345..0000000
--- a/src/com/android/messaging/datamodel/action/BackgroundWorkerService.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-
-import androidx.core.app.JobIntentService;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DataModelException;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.LoggingTimer;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.List;
-
-/**
- * Background worker service is an initial example of a background work queue handler
- * Used to actually "send" messages which may take some time and should not block ActionService
- * or UI
- */
-public class BackgroundWorkerService extends JobIntentService {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-    private static final boolean VERBOSE = false;
-
-    /**
-     * Unique job ID for this service.
-     */
-    public static final int JOB_ID = 1001;
-
-    private final ActionService mHost;
-
-    public BackgroundWorkerService() {
-        super();
-        mHost = DataModel.get().getActionService();
-    }
-
-    /**
-     * Queue a list of requests from action service to this worker
-     */
-    public static void queueBackgroundWork(final List<Action> actions) {
-        for (final Action action : actions) {
-            startServiceWithAction(action, 0);
-        }
-    }
-
-    // ops
-    @VisibleForTesting
-    protected static final int OP_PROCESS_REQUEST = 400;
-
-    // extras
-    @VisibleForTesting
-    protected static final String EXTRA_OP_CODE = "op";
-    @VisibleForTesting
-    protected static final String EXTRA_ACTION = "action";
-    @VisibleForTesting
-    protected static final String EXTRA_ATTEMPT = "retry_attempt";
-
-    /**
-     * Queue action intent to the BackgroundWorkerService.
-     */
-    private static void startServiceWithAction(final Action action,
-            final int retryCount) {
-        final Intent intent = new Intent();
-        intent.putExtra(EXTRA_ACTION, action);
-        intent.putExtra(EXTRA_ATTEMPT, retryCount);
-        startServiceWithIntent(OP_PROCESS_REQUEST, intent);
-    }
-
-    /**
-     * Queue intent to the BackgroundWorkerService.
-     */
-    private static void startServiceWithIntent(final int opcode, final Intent intent) {
-        final Context context = Factory.get().getApplicationContext();
-
-        intent.setClass(context, BackgroundWorkerService.class);
-        intent.putExtra(EXTRA_OP_CODE, opcode);
-
-        enqueueWork(context, intent);
-    }
-
-    public static void enqueueWork(Context context, Intent work) {
-        enqueueWork(context, BackgroundWorkerService.class, JOB_ID, work);
-    }
-
-    @Override
-    protected void onHandleWork(final Intent intent) {
-        if (intent == null) {
-            // Shouldn't happen but sometimes does following another crash.
-            LogUtil.w(TAG, "BackgroundWorkerService.onHandleIntent: Called with null intent");
-            return;
-        }
-        final int opcode = intent.getIntExtra(EXTRA_OP_CODE, 0);
-
-        switch(opcode) {
-            case OP_PROCESS_REQUEST: {
-                final Action action = intent.getParcelableExtra(EXTRA_ACTION);
-                final int attempt = intent.getIntExtra(EXTRA_ATTEMPT, -1);
-                doBackgroundWork(action, attempt);
-                break;
-            }
-
-            default:
-                LogUtil.w(TAG, "Unrecognized opcode in BackgroundWorkerService " + opcode);
-                throw new RuntimeException("Unrecognized opcode in BackgroundWorkerService");
-        }
-    }
-
-    /**
-     * Local execution of background work for action on ActionService thread
-     */
-    private void doBackgroundWork(final Action action, final int attempt) {
-        action.markBackgroundWorkStarting();
-        Bundle response = null;
-        try {
-            final LoggingTimer timer = new LoggingTimer(
-                    TAG, action.getClass().getSimpleName() + "#doBackgroundWork");
-            timer.start();
-
-            response = action.doBackgroundWork();
-
-            timer.stopAndLog();
-            action.markBackgroundCompletionQueued();
-            mHost.handleResponseFromBackgroundWorker(action, response);
-        } catch (final Exception exception) {
-            final boolean retry = false;
-            LogUtil.e(TAG, "Error in background worker", exception);
-            if (!(exception instanceof DataModelException)) {
-                // DataModelException is expected (sort-of) and handled in handleFailureFromWorker
-                // below, but other exceptions should crash ENG builds
-                Assert.fail("Unexpected error in background worker - abort");
-            }
-            if (retry) {
-                action.markBackgroundWorkQueued();
-                startServiceWithAction(action, attempt + 1);
-            } else {
-                action.markBackgroundCompletionQueued();
-                mHost.handleFailureFromBackgroundWorker(action, exception);
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/BugleActionToasts.java b/src/com/android/messaging/datamodel/action/BugleActionToasts.java
deleted file mode 100644
index f60facd..0000000
--- a/src/com/android/messaging/datamodel/action/BugleActionToasts.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.widget.Toast;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.AccessibilityUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.ThreadUtil;
-
-import javax.annotation.Nullable;
-
-/**
- * Shows one-time, transient notifications in response to action failures (i.e. permanent failures
- * when sending a message) by showing toasts.
- */
-public class BugleActionToasts {
-    /**
-     * Called when SendMessageAction or DownloadMmsAction finishes
-     * @param conversationId the conversation of the sent or downloaded message
-     * @param success did the action succeed
-     * @param status the message sending status
-     * @param isSms whether the message is sent using SMS
-     * @param subId the subId of the SIM related to this send
-     * @param isSend whether it is a send (false for download)
-     */
-    static void onSendMessageOrManualDownloadActionCompleted(
-            final String conversationId,
-            final boolean success,
-            final int status,
-            final boolean isSms,
-            final int subId,
-            final boolean isSend) {
-        // We only show notifications for two cases, i.e. when mobile data is off or when we are
-        // in airplane mode, both of which fail fast with permanent failures.
-        if (!success && status == MmsUtils.MMS_REQUEST_MANUAL_RETRY) {
-            final PhoneUtils phoneUtils = PhoneUtils.get(subId);
-            if (phoneUtils.isAirplaneModeOn()) {
-                if (isSend) {
-                    showToast(R.string.send_message_failure_airplane_mode);
-                } else {
-                    showToast(R.string.download_message_failure_airplane_mode);
-                }
-                return;
-            } else if (!isSms && !phoneUtils.isMobileDataEnabled()) {
-                if (isSend) {
-                    showToast(R.string.send_message_failure_no_data);
-                } else {
-                    showToast(R.string.download_message_failure_no_data);
-                }
-                return;
-            }
-        }
-
-        if (AccessibilityUtil.isTouchExplorationEnabled(Factory.get().getApplicationContext())) {
-            final boolean isFocusedConversation = DataModel.get().isFocusedConversation(conversationId);
-            if (isFocusedConversation && success) {
-                // Using View.announceForAccessibility may be preferable, but we do not have a
-                // View, and so we use a toast instead.
-                showToast(isSend ? R.string.send_message_success
-                        : R.string.download_message_success);
-                return;
-            }
-
-            // {@link MessageNotificationState#checkFailedMessages} does not post a notification for
-            // failures in observable conversations. For accessibility, we provide an indication
-            // here.
-            final boolean isObservableConversation = DataModel.get().isNewMessageObservable(
-                    conversationId);
-            if (isObservableConversation && !success) {
-                showToast(isSend ? R.string.send_message_failure
-                        : R.string.download_message_failure);
-            }
-        }
-    }
-
-    public static void onMessageReceived(final String conversationId,
-            @Nullable final ParticipantData sender, @Nullable final MessageData message) {
-        final Context context = Factory.get().getApplicationContext();
-        if (AccessibilityUtil.isTouchExplorationEnabled(context)) {
-            final boolean isFocusedConversation = DataModel.get().isFocusedConversation(
-                    conversationId);
-            if (isFocusedConversation) {
-                final Resources res = context.getResources();
-                final String senderDisplayName = (sender == null)
-                        ? res.getString(R.string.unknown_sender) : sender.getDisplayName(false);
-                final String announcement = res.getString(
-                        R.string.incoming_message_announcement, senderDisplayName,
-                        (message == null) ? "" : message.getMessageText());
-                showToast(announcement);
-            }
-        }
-    }
-
-    public static void onConversationDeleted() {
-        showToast(R.string.conversation_deleted);
-    }
-
-    private static void showToast(final int messageResId) {
-        ThreadUtil.getMainThreadHandler().post(new Runnable() {
-            @Override
-            public void run() {
-                Toast.makeText(getApplicationContext(),
-                        getApplicationContext().getString(messageResId), Toast.LENGTH_LONG).show();
-            }
-        });
-    }
-
-    private static void showToast(final String message) {
-        ThreadUtil.getMainThreadHandler().post(new Runnable() {
-            @Override
-            public void run() {
-                Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
-            }
-        });
-    }
-
-    private static Context getApplicationContext() {
-        return Factory.get().getApplicationContext();
-    }
-
-    private static class UpdateDestinationBlockedActionToast
-            implements UpdateDestinationBlockedAction.UpdateDestinationBlockedActionListener {
-        private final Context mContext;
-
-        UpdateDestinationBlockedActionToast(final Context context) {
-            mContext = context;
-        }
-
-        @Override
-        public void onUpdateDestinationBlockedAction(
-                final UpdateDestinationBlockedAction action,
-                final boolean success,
-                final boolean block,
-                final String destination) {
-            if (success) {
-                Toast.makeText(mContext,
-                        block
-                                ? R.string.update_destination_blocked
-                                : R.string.update_destination_unblocked,
-                        Toast.LENGTH_LONG
-                ).show();
-            }
-        }
-    }
-
-    public static UpdateDestinationBlockedAction.UpdateDestinationBlockedActionListener
-            makeUpdateDestinationBlockedActionListener(final Context context) {
-        return new UpdateDestinationBlockedActionToast(context);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/DeleteConversationAction.java b/src/com/android/messaging/datamodel/action/DeleteConversationAction.java
deleted file mode 100644
index a00f6d6..0000000
--- a/src/com/android/messaging/datamodel/action/DeleteConversationAction.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DataModelException;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.widget.WidgetConversationProvider;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Action used to delete a conversation.
- */
-public class DeleteConversationAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    public static void deleteConversation(final String conversationId, final long cutoffTimestamp) {
-        final DeleteConversationAction action = new DeleteConversationAction(conversationId,
-                cutoffTimestamp);
-        action.start();
-    }
-
-    private static final String KEY_CONVERSATION_ID = "conversation_id";
-    private static final String KEY_CUTOFF_TIMESTAMP = "cutoff_timestamp";
-
-    private DeleteConversationAction(final String conversationId, final long cutoffTimestamp) {
-        super();
-        actionParameters.putString(KEY_CONVERSATION_ID, conversationId);
-        // TODO: Should we set cuttoff timestamp to prevent us deleting new messages?
-        actionParameters.putLong(KEY_CUTOFF_TIMESTAMP, cutoffTimestamp);
-    }
-
-    // Delete conversation from both the local DB and telephony in the background so sync cannot
-    // run concurrently and incorrectly try to recreate the conversation's messages locally. The
-    // telephony database can sometimes be quite slow to delete conversations, so we delete from
-    // the local DB first, notify the UI, and then delete from telephony.
-    @Override
-    protected Bundle doBackgroundWork() throws DataModelException {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final String conversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-        final long cutoffTimestamp = actionParameters.getLong(KEY_CUTOFF_TIMESTAMP);
-
-        if (!TextUtils.isEmpty(conversationId)) {
-            // First find the thread id for this conversation.
-            final long threadId = BugleDatabaseOperations.getThreadId(db, conversationId);
-
-            if (BugleDatabaseOperations.deleteConversation(db, conversationId, cutoffTimestamp)) {
-                LogUtil.i(TAG, "DeleteConversationAction: Deleted local conversation "
-                        + conversationId);
-
-                BugleActionToasts.onConversationDeleted();
-
-                // Remove notifications if necessary
-                BugleNotifications.update(true /* silent */, null /* conversationId */,
-                        BugleNotifications.UPDATE_MESSAGES);
-
-                // We have changed the conversation list
-                MessagingContentProvider.notifyConversationListChanged();
-
-                // Notify the widget the conversation is deleted so it can go into its configure state.
-                WidgetConversationProvider.notifyConversationDeleted(
-                        Factory.get().getApplicationContext(),
-                        conversationId);
-            } else {
-                LogUtil.w(TAG, "DeleteConversationAction: Could not delete local conversation "
-                        + conversationId);
-                return null;
-            }
-
-            // Now delete from telephony DB. MmsSmsProvider throws an exception if the thread id is
-            // less than 0. If it's greater than zero, it will delete all messages with that thread
-            // id, even if there's no corresponding row in the threads table.
-            if (threadId >= 0) {
-                final int count = MmsUtils.deleteThread(threadId, cutoffTimestamp);
-                if (count > 0) {
-                    LogUtil.i(TAG, "DeleteConversationAction: Deleted telephony thread "
-                            + threadId + " (cutoffTimestamp = " + cutoffTimestamp + ")");
-                } else {
-                    LogUtil.w(TAG, "DeleteConversationAction: Could not delete thread from "
-                            + "telephony: conversationId = " + conversationId + ", thread id = "
-                            + threadId);
-                }
-            } else {
-                LogUtil.w(TAG, "DeleteConversationAction: Local conversation " + conversationId
-                        + " has an invalid telephony thread id; will delete messages individually");
-                deleteConversationMessagesFromTelephony();
-            }
-        } else {
-            LogUtil.e(TAG, "DeleteConversationAction: conversationId is empty");
-        }
-
-        return null;
-    }
-
-    /**
-     * Deletes all the telephony messages for the local conversation being deleted.
-     * <p>
-     * This is a fallback used when the conversation is not associated with any telephony thread,
-     * or its thread id is invalid (e.g. negative). This is not common, but can happen sometimes
-     * (e.g. the Unknown Sender conversation). In the usual case of deleting a conversation, we
-     * don't need this because the telephony provider automatically deletes messages when a thread
-     * is deleted.
-     */
-    private void deleteConversationMessagesFromTelephony() {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final String conversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-        Assert.notNull(conversationId);
-
-        final List<Uri> messageUris = new ArrayList<>();
-        Cursor cursor = null;
-        try {
-            cursor = db.query(DatabaseHelper.MESSAGES_TABLE,
-                    new String[] { MessageColumns.SMS_MESSAGE_URI },
-                    MessageColumns.CONVERSATION_ID + "=?",
-                    new String[] { conversationId },
-                    null, null, null);
-            while (cursor.moveToNext()) {
-                String messageUri = cursor.getString(0);
-                try {
-                    messageUris.add(Uri.parse(messageUri));
-                } catch (Exception e) {
-                    LogUtil.e(TAG, "DeleteConversationAction: Could not parse message uri "
-                            + messageUri);
-                }
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        for (Uri messageUri : messageUris) {
-            int count = MmsUtils.deleteMessage(messageUri);
-            if (count > 0) {
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "DeleteConversationAction: Deleted telephony message "
-                            + messageUri);
-                }
-            } else {
-                LogUtil.w(TAG, "DeleteConversationAction: Could not delete telephony message "
-                        + messageUri);
-            }
-        }
-    }
-
-    @Override
-    protected Object executeAction() {
-        requestBackgroundWork();
-        return null;
-    }
-
-    private DeleteConversationAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<DeleteConversationAction> CREATOR
-            = new Parcelable.Creator<DeleteConversationAction>() {
-        @Override
-        public DeleteConversationAction createFromParcel(final Parcel in) {
-            return new DeleteConversationAction(in);
-        }
-
-        @Override
-        public DeleteConversationAction[] newArray(final int size) {
-            return new DeleteConversationAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/DeleteMessageAction.java b/src/com/android/messaging/datamodel/action/DeleteMessageAction.java
deleted file mode 100644
index 9ddb2a6..0000000
--- a/src/com/android/messaging/datamodel/action/DeleteMessageAction.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Action used to delete a single message.
- */
-public class DeleteMessageAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    public static void deleteMessage(final String messageId) {
-        final DeleteMessageAction action = new DeleteMessageAction(messageId);
-        action.start();
-    }
-
-    private static final String KEY_MESSAGE_ID = "message_id";
-
-    private DeleteMessageAction(final String messageId) {
-        super();
-        actionParameters.putString(KEY_MESSAGE_ID, messageId);
-    }
-
-    // Doing this work in the background so that we're not competing with sync
-    // which could bring the deleted message back to life between the time we deleted
-    // it locally and deleted it in telephony (sync is also done on doBackgroundWork).
-    //
-    // Previously this block of code deleted from telephony first but that can be very
-    // slow (on the order of seconds) so this was modified to first delete locally, trigger
-    // the UI update, then delete from telephony.
-    @Override
-    protected Bundle doBackgroundWork() {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        // First find the thread id for this conversation.
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-
-        if (!TextUtils.isEmpty(messageId)) {
-            // Check message still exists
-            final MessageData message = BugleDatabaseOperations.readMessage(db, messageId);
-            if (message != null) {
-                // Delete from local DB
-                int count = BugleDatabaseOperations.deleteMessage(db, messageId);
-                if (count > 0) {
-                    LogUtil.i(TAG, "DeleteMessageAction: Deleted local message "
-                            + messageId);
-                } else {
-                    LogUtil.w(TAG, "DeleteMessageAction: Could not delete local message "
-                            + messageId);
-                }
-                MessagingContentProvider.notifyMessagesChanged(message.getConversationId());
-                // We may have changed the conversation list
-                MessagingContentProvider.notifyConversationListChanged();
-
-                final Uri messageUri = message.getSmsMessageUri();
-                if (messageUri != null) {
-                    // Delete from telephony DB
-                    count = MmsUtils.deleteMessage(messageUri);
-                    if (count > 0) {
-                        LogUtil.i(TAG, "DeleteMessageAction: Deleted telephony message "
-                                + messageUri);
-                    } else {
-                        LogUtil.w(TAG, "DeleteMessageAction: Could not delete message from "
-                                + "telephony: messageId = " + messageId + ", telephony uri = "
-                                + messageUri);
-                    }
-                } else {
-                    LogUtil.i(TAG, "DeleteMessageAction: Local message " + messageId
-                            + " has no telephony uri.");
-                }
-            } else {
-                LogUtil.w(TAG, "DeleteMessageAction: Message " + messageId + " no longer exists");
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Delete the message.
-     */
-    @Override
-    protected Object executeAction() {
-        requestBackgroundWork();
-        return null;
-    }
-
-    private DeleteMessageAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<DeleteMessageAction> CREATOR
-            = new Parcelable.Creator<DeleteMessageAction>() {
-        @Override
-        public DeleteMessageAction createFromParcel(final Parcel in) {
-            return new DeleteMessageAction(in);
-        }
-
-        @Override
-        public DeleteMessageAction[] newArray(final int size) {
-            return new DeleteMessageAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/DownloadMmsAction.java b/src/com/android/messaging/datamodel/action/DownloadMmsAction.java
deleted file mode 100644
index 2852a61..0000000
--- a/src/com/android/messaging/datamodel/action/DownloadMmsAction.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.RunsOnMainThread;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Downloads an MMS message.
- * <p>
- * This class is public (not package-private) because the SMS/MMS (e.g. MmsUtils) classes need to
- * access the EXTRA_* fields for setting up the 'downloaded' pending intent.
- */
-public class DownloadMmsAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    /**
-     * Interface for DownloadMmsAction listeners
-     */
-    public interface DownloadMmsActionListener {
-        @RunsOnMainThread
-        abstract void onDownloadMessageStarting(final ActionMonitor monitor,
-                final Object data, final MessageData message);
-        @RunsOnMainThread
-        abstract void onDownloadMessageSucceeded(final ActionMonitor monitor,
-                final Object data, final MessageData message);
-        @RunsOnMainThread
-        abstract void onDownloadMessageFailed(final ActionMonitor monitor,
-                final Object data, final MessageData message);
-    }
-
-    /**
-     * Queue download of an mms notification message (can only be called during execute of action)
-     */
-    static boolean queueMmsForDownloadInBackground(final String messageId,
-            final Action processingAction) {
-        // When this method is being called, it is always from auto download
-        final DownloadMmsAction action = new DownloadMmsAction();
-        // This could queue nothing
-        return action.queueAction(messageId, processingAction);
-    }
-
-    private static final String KEY_MESSAGE_ID = "message_id";
-    private static final String KEY_CONVERSATION_ID = "conversation_id";
-    private static final String KEY_PARTICIPANT_ID = "participant_id";
-    private static final String KEY_CONTENT_LOCATION = "content_location";
-    private static final String KEY_TRANSACTION_ID = "transaction_id";
-    private static final String KEY_NOTIFICATION_URI = "notification_uri";
-    private static final String KEY_SUB_ID = "sub_id";
-    private static final String KEY_SUB_PHONE_NUMBER = "sub_phone_number";
-    private static final String KEY_AUTO_DOWNLOAD = "auto_download";
-    private static final String KEY_FAILURE_STATUS = "failure_status";
-    private static final String KEY_EXPIRY = "expiry";
-
-    // Values we attach to the pending intent that's fired when the message is downloaded.
-    // Only applicable when downloading via the platform APIs on L+.
-    public static final String EXTRA_MESSAGE_ID = "message_id";
-    public static final String EXTRA_CONTENT_URI = "content_uri";
-    public static final String EXTRA_NOTIFICATION_URI = "notification_uri";
-    public static final String EXTRA_SUB_ID = "sub_id";
-    public static final String EXTRA_SUB_PHONE_NUMBER = "sub_phone_number";
-    public static final String EXTRA_TRANSACTION_ID = "transaction_id";
-    public static final String EXTRA_CONTENT_LOCATION = "content_location";
-    public static final String EXTRA_AUTO_DOWNLOAD = "auto_download";
-    public static final String EXTRA_RECEIVED_TIMESTAMP = "received_timestamp";
-    public static final String EXTRA_CONVERSATION_ID = "conversation_id";
-    public static final String EXTRA_PARTICIPANT_ID = "participant_id";
-    public static final String EXTRA_STATUS_IF_FAILED = "status_if_failed";
-    public static final String EXTRA_EXPIRY = "expiry";
-
-    private DownloadMmsAction() {
-        super();
-    }
-
-    @Override
-    protected Object executeAction() {
-        Assert.fail("DownloadMmsAction must be queued rather than started");
-        return null;
-    }
-
-    protected boolean queueAction(final String messageId, final Action processingAction) {
-        actionParameters.putString(KEY_MESSAGE_ID, messageId);
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        // Read the message from local db
-        final MessageData message = BugleDatabaseOperations.readMessage(db, messageId);
-        if (message != null && message.canDownloadMessage()) {
-            final Uri notificationUri = message.getSmsMessageUri();
-            final String conversationId = message.getConversationId();
-            final int status = message.getStatus();
-
-            final String selfId = message.getSelfId();
-            final ParticipantData self = BugleDatabaseOperations
-                    .getExistingParticipant(db, selfId);
-            final int subId = self.getSubId();
-            actionParameters.putInt(KEY_SUB_ID, subId);
-            actionParameters.putString(KEY_CONVERSATION_ID, conversationId);
-            actionParameters.putString(KEY_PARTICIPANT_ID, message.getParticipantId());
-            actionParameters.putString(KEY_CONTENT_LOCATION, message.getMmsContentLocation());
-            actionParameters.putString(KEY_TRANSACTION_ID, message.getMmsTransactionId());
-            actionParameters.putParcelable(KEY_NOTIFICATION_URI, notificationUri);
-            actionParameters.putBoolean(KEY_AUTO_DOWNLOAD, isAutoDownload(status));
-            actionParameters.putLong(KEY_EXPIRY, message.getMmsExpiry());
-
-            final long now = System.currentTimeMillis();
-            if (message.getInDownloadWindow(now)) {
-                // We can still retry
-                actionParameters.putString(KEY_SUB_PHONE_NUMBER, self.getNormalizedDestination());
-
-                final int downloadingStatus = getDownloadingStatus(status);
-                // Update message status to indicate downloading.
-                updateMessageStatus(notificationUri, messageId, conversationId,
-                        downloadingStatus, MessageData.RAW_TELEPHONY_STATUS_UNDEFINED);
-                // Pre-compute the next status when failed so we don't have to load from db again
-                actionParameters.putInt(KEY_FAILURE_STATUS, getFailureStatus(downloadingStatus));
-
-                // Actual download happens in background
-                processingAction.requestBackgroundWork(this);
-
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG,
-                            "DownloadMmsAction: Queued download of MMS message " + messageId);
-                }
-                return true;
-            } else {
-                LogUtil.w(TAG, "DownloadMmsAction: Download of MMS message " + messageId
-                        + " failed (outside download window)");
-
-                // Retries depleted and we failed. Update the message status so we won't retry again
-                updateMessageStatus(notificationUri, messageId, conversationId,
-                        MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED,
-                        MessageData.RAW_TELEPHONY_STATUS_UNDEFINED);
-                if (status == MessageData.BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD) {
-                    // For auto download failure, we should send a DEFERRED NotifyRespInd
-                    // to carrier to indicate we will manual download later
-                    ProcessDownloadedMmsAction.sendDeferredRespStatus(
-                            messageId, message.getMmsTransactionId(),
-                            message.getMmsContentLocation(), subId);
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Find out the auto download state of this message based on its starting status
-     *
-     * @param status The starting status of the message.
-     * @return True if this is a message doing auto downloading, false otherwise
-     */
-    private static boolean isAutoDownload(final int status) {
-        switch (status) {
-            case MessageData.BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD:
-                return false;
-            case MessageData.BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD:
-                return true;
-            default:
-                Assert.fail("isAutoDownload: invalid input status " + status);
-                return false;
-        }
-    }
-
-    /**
-     * Get the corresponding downloading status based on the starting status of the message
-     *
-     * @param status The starting status of the message.
-     * @return The downloading status
-     */
-    private static int getDownloadingStatus(final int status) {
-        switch (status) {
-            case MessageData.BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD:
-                return MessageData.BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING;
-            case MessageData.BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD:
-                return MessageData.BUGLE_STATUS_INCOMING_AUTO_DOWNLOADING;
-            default:
-                Assert.fail("isAutoDownload: invalid input status " + status);
-                return MessageData.BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING;
-        }
-    }
-
-    /**
-     * Get the corresponding failed status based on the current downloading status
-     *
-     * @param status The downloading status
-     * @return The status the message should have if downloading failed
-     */
-    private static int getFailureStatus(final int status) {
-        switch (status) {
-            case MessageData.BUGLE_STATUS_INCOMING_AUTO_DOWNLOADING:
-                return MessageData.BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD;
-            case MessageData.BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING:
-                return MessageData.BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD;
-            default:
-                Assert.fail("isAutoDownload: invalid input status " + status);
-                return MessageData.BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD;
-        }
-    }
-
-    @Override
-    protected Bundle doBackgroundWork() {
-        final Context context = Factory.get().getApplicationContext();
-        final int subId = actionParameters.getInt(KEY_SUB_ID);
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-        final Uri notificationUri = actionParameters.getParcelable(KEY_NOTIFICATION_URI);
-        final String subPhoneNumber = actionParameters.getString(KEY_SUB_PHONE_NUMBER);
-        final String transactionId = actionParameters.getString(KEY_TRANSACTION_ID);
-        final String contentLocation = actionParameters.getString(KEY_CONTENT_LOCATION);
-        final boolean autoDownload = actionParameters.getBoolean(KEY_AUTO_DOWNLOAD);
-        final String conversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-        final String participantId = actionParameters.getString(KEY_PARTICIPANT_ID);
-        final int statusIfFailed = actionParameters.getInt(KEY_FAILURE_STATUS);
-        final long expiry = actionParameters.getLong(KEY_EXPIRY);
-
-        final long receivedTimestampRoundedToSecond =
-                1000 * ((System.currentTimeMillis() + 500) / 1000);
-
-        LogUtil.i(TAG, "DownloadMmsAction: Downloading MMS message " + messageId
-                + " (" + (autoDownload ? "auto" : "manual") + ")");
-
-        // Bundle some values we'll need after the message is downloaded (via platform APIs)
-        final Bundle extras = new Bundle();
-        extras.putString(EXTRA_MESSAGE_ID, messageId);
-        extras.putString(EXTRA_CONVERSATION_ID, conversationId);
-        extras.putString(EXTRA_PARTICIPANT_ID, participantId);
-        extras.putInt(EXTRA_STATUS_IF_FAILED, statusIfFailed);
-
-        // Start the download
-        final MmsUtils.StatusPlusUri status = MmsUtils.downloadMmsMessage(context,
-                notificationUri, subId, subPhoneNumber, transactionId, contentLocation,
-                autoDownload, receivedTimestampRoundedToSecond / 1000L, expiry / 1000L, extras);
-        if (status == MmsUtils.STATUS_PENDING) {
-            // Async download; no status yet
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "DownloadMmsAction: Downloading MMS message " + messageId
-                        + " asynchronously; waiting for pending intent to signal completion");
-            }
-        } else {
-            // Inform sync that message has been added at local received timestamp
-            final SyncManager syncManager = DataModel.get().getSyncManager();
-            syncManager.onNewMessageInserted(receivedTimestampRoundedToSecond);
-            // Handle downloaded message
-            ProcessDownloadedMmsAction.processMessageDownloadFastFailed(messageId,
-                    notificationUri, conversationId, participantId, contentLocation, subId,
-                    subPhoneNumber, statusIfFailed, autoDownload, transactionId,
-                    status.resultCode);
-        }
-        return null;
-    }
-
-    @Override
-    protected Object processBackgroundResponse(final Bundle response) {
-        // Nothing to do here; post-download actions handled by ProcessDownloadedMmsAction
-        return null;
-    }
-
-    @Override
-    protected Object processBackgroundFailure() {
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-        final String transactionId = actionParameters.getString(KEY_TRANSACTION_ID);
-        final String conversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-        final String participantId = actionParameters.getString(KEY_PARTICIPANT_ID);
-        final int statusIfFailed = actionParameters.getInt(KEY_FAILURE_STATUS);
-        final int subId = actionParameters.getInt(KEY_SUB_ID);
-
-        ProcessDownloadedMmsAction.processDownloadActionFailure(messageId,
-                MmsUtils.MMS_REQUEST_MANUAL_RETRY, MessageData.RAW_TELEPHONY_STATUS_UNDEFINED,
-                conversationId, participantId, statusIfFailed, subId, transactionId);
-
-        return null;
-    }
-
-    static void updateMessageStatus(final Uri messageUri, final String messageId,
-            final String conversationId, final int status, final int rawStatus) {
-        final Context context = Factory.get().getApplicationContext();
-        // Downloading status just kept in local DB but need to fix up telephony DB first
-        if (status == MessageData.BUGLE_STATUS_INCOMING_AUTO_DOWNLOADING ||
-                status == MessageData.BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING) {
-            MmsUtils.clearMmsStatus(context, messageUri);
-        }
-        // Then mark downloading status in our local DB
-        final ContentValues values = new ContentValues();
-        values.put(MessageColumns.STATUS, status);
-        values.put(MessageColumns.RAW_TELEPHONY_STATUS, rawStatus);
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        BugleDatabaseOperations.updateMessageRowIfExists(db, messageId, values);
-
-        MessagingContentProvider.notifyMessagesChanged(conversationId);
-    }
-
-    private DownloadMmsAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<DownloadMmsAction> CREATOR
-            = new Parcelable.Creator<DownloadMmsAction>() {
-        @Override
-        public DownloadMmsAction createFromParcel(final Parcel in) {
-            return new DownloadMmsAction(in);
-        }
-
-        @Override
-        public DownloadMmsAction[] newArray(final int size) {
-            return new DownloadMmsAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/DumpDatabaseAction.java b/src/com/android/messaging/datamodel/action/DumpDatabaseAction.java
deleted file mode 100644
index ab320bf..0000000
--- a/src/com/android/messaging/datamodel/action/DumpDatabaseAction.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Context;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.LogUtil;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-public class DumpDatabaseAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-    public static final String DUMP_NAME = "db_copy.db";
-    private static final int BUFFER_SIZE = 16384;
-
-    /**
-     * Copy the database to external storage
-     */
-    public static void dumpDatabase() {
-        final DumpDatabaseAction action = new DumpDatabaseAction();
-        action.start();
-    }
-
-    private DumpDatabaseAction() {
-    }
-
-    @Override
-    protected Object executeAction() {
-        final Context context = Factory.get().getApplicationContext();
-        final String dbName = DatabaseHelper.DATABASE_NAME;
-        BufferedOutputStream bos = null;
-        BufferedInputStream bis = null;
-
-        long originalSize = 0;
-        final File inFile = context.getDatabasePath(dbName);
-        if (inFile.exists() && inFile.isFile()) {
-            originalSize = inFile.length();
-        }
-        final File outFile = DebugUtils.getDebugFile(DUMP_NAME, true);
-        if (outFile != null) {
-            int totalBytes = 0;
-            try {
-                bos = new BufferedOutputStream(new FileOutputStream(outFile));
-                bis = new BufferedInputStream(new FileInputStream(inFile));
-
-                final byte[] buffer = new byte[BUFFER_SIZE];
-                int bytesRead;
-                while ((bytesRead = bis.read(buffer)) > 0) {
-                    bos.write(buffer, 0, bytesRead);
-                    totalBytes += bytesRead;
-                }
-            } catch (final IOException e) {
-                LogUtil.w(TAG, "Exception copying the database;"
-                        + " destination may not be complete.", e);
-            } finally {
-                if (bos != null) {
-                    try {
-                        bos.close();
-                    } catch (final IOException e) {
-                        // Nothing to do
-                    }
-                }
-
-                if (bis != null) {
-                    try {
-                        bis.close();
-                    } catch (final IOException e) {
-                        // Nothing to do
-                    }
-                }
-                DebugUtils.ensureReadable(outFile);
-                LogUtil.i(TAG, "Dump complete; orig size: " + originalSize +
-                        ", copy size: " + totalBytes);
-            }
-        }
-        return null;
-    }
-
-    private DumpDatabaseAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<DumpDatabaseAction> CREATOR
-            = new Parcelable.Creator<DumpDatabaseAction>() {
-        @Override
-        public DumpDatabaseAction createFromParcel(final Parcel in) {
-            return new DumpDatabaseAction(in);
-        }
-
-        @Override
-        public DumpDatabaseAction[] newArray(final int size) {
-            return new DumpDatabaseAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/FixupMessageStatusOnStartupAction.java b/src/com/android/messaging/datamodel/action/FixupMessageStatusOnStartupAction.java
deleted file mode 100644
index 45e2474..0000000
--- a/src/com/android/messaging/datamodel/action/FixupMessageStatusOnStartupAction.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentValues;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Action used to fixup actively downloading or sending status at startup - just in case we
- * crash - never run this when a message might actually be sending or downloading.
- */
-public class FixupMessageStatusOnStartupAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    public static void fixupMessageStatus() {
-        final FixupMessageStatusOnStartupAction action = new FixupMessageStatusOnStartupAction();
-        action.start();
-    }
-
-    private FixupMessageStatusOnStartupAction() {
-    }
-
-    @Override
-    protected Object executeAction() {
-        // Now mark any messages in active sending or downloading state as inactive
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        db.beginTransaction();
-        int downloadFailedCnt = 0;
-        int sendFailedCnt = 0;
-        try {
-            // For both sending and downloading messages, let's assume they failed.
-            // For MMS sent/downloaded via platform, the sent/downloaded pending intent
-            // may come back. That will update the message. User may see the message
-            // in wrong status within a short window if that happens. But this should
-            // rarely happen. This is a simple solution to situations like app gets killed
-            // while the pending intent is still in the fly. Alternatively, we could
-            // keep the status for platform sent/downloaded MMS and timeout these messages.
-            // But that is much more complex.
-            final ContentValues values = new ContentValues();
-            values.put(DatabaseHelper.MessageColumns.STATUS,
-                    MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED);
-            downloadFailedCnt = db.update(DatabaseHelper.MESSAGES_TABLE, values,
-                    DatabaseHelper.MessageColumns.STATUS + " IN (?, ?)",
-                    new String[]{
-                            Integer.toString(MessageData.BUGLE_STATUS_INCOMING_AUTO_DOWNLOADING),
-                            Integer.toString(MessageData.BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING)
-                    });
-
-            values.clear();
-            values.put(DatabaseHelper.MessageColumns.STATUS,
-                    MessageData.BUGLE_STATUS_OUTGOING_FAILED);
-            sendFailedCnt = db.update(DatabaseHelper.MESSAGES_TABLE, values,
-                    DatabaseHelper.MessageColumns.STATUS + " IN (?, ?)",
-                    new String[]{
-                            Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_SENDING),
-                            Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_RESENDING)
-                    });
-
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-
-        LogUtil.i(TAG, "Fixup: Send failed - " + sendFailedCnt
-                + " Download failed - " + downloadFailedCnt);
-
-        // Don't send contentObserver notifications as displayed text should not change
-        return null;
-    }
-
-    private FixupMessageStatusOnStartupAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<FixupMessageStatusOnStartupAction> CREATOR
-            = new Parcelable.Creator<FixupMessageStatusOnStartupAction>() {
-        @Override
-        public FixupMessageStatusOnStartupAction createFromParcel(final Parcel in) {
-            return new FixupMessageStatusOnStartupAction(in);
-        }
-
-        @Override
-        public FixupMessageStatusOnStartupAction[] newArray(final int size) {
-            return new FixupMessageStatusOnStartupAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/GetOrCreateConversationAction.java b/src/com/android/messaging/datamodel/action/GetOrCreateConversationAction.java
deleted file mode 100644
index b262141..0000000
--- a/src/com/android/messaging/datamodel/action/GetOrCreateConversationAction.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.action.ActionMonitor.ActionCompletedListener;
-import com.android.messaging.datamodel.data.LaunchConversationData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.RunsOnMainThread;
-import com.android.messaging.util.LogUtil;
-
-import java.util.ArrayList;
-
-/**
- * Action used to get or create a conversation for a list of conversation participants.
- */
-public class GetOrCreateConversationAction extends Action implements Parcelable {
-    /**
-     * Interface for GetOrCreateConversationAction listeners
-     */
-    public interface GetOrCreateConversationActionListener {
-        @RunsOnMainThread
-        abstract void onGetOrCreateConversationSucceeded(final ActionMonitor monitor,
-                final Object data, final String conversationId);
-
-        @RunsOnMainThread
-        abstract void onGetOrCreateConversationFailed(final ActionMonitor monitor,
-                final Object data);
-    }
-
-    public static GetOrCreateConversationActionMonitor getOrCreateConversation(
-            final ArrayList<ParticipantData> participants, final Object data,
-            final GetOrCreateConversationActionListener listener) {
-        final GetOrCreateConversationActionMonitor monitor = new
-                GetOrCreateConversationActionMonitor(data, listener);
-        final GetOrCreateConversationAction action = new GetOrCreateConversationAction(participants,
-                monitor.getActionKey());
-        action.start(monitor);
-        return monitor;
-    }
-
-
-    public static GetOrCreateConversationActionMonitor getOrCreateConversation(
-            final String[] recipients, final Object data, final LaunchConversationData listener) {
-        final ArrayList<ParticipantData> participants = new ArrayList<>();
-        for (String recipient : recipients) {
-            recipient = recipient.trim();
-            if (!TextUtils.isEmpty(recipient)) {
-                participants.add(ParticipantData.getFromRawPhoneBySystemLocale(recipient));
-            } else {
-                LogUtil.w(LogUtil.BUGLE_TAG, "getOrCreateConversation hit empty recipient");
-            }
-        }
-        return getOrCreateConversation(participants, data, listener);
-    }
-
-    private static final String KEY_PARTICIPANTS_LIST = "participants_list";
-
-    private GetOrCreateConversationAction(final ArrayList<ParticipantData> participants,
-            final String actionKey) {
-        super(actionKey);
-        actionParameters.putParcelableArrayList(KEY_PARTICIPANTS_LIST, participants);
-    }
-
-    /**
-     * Lookup the conversation or create a new one.
-     */
-    @Override
-    protected Object executeAction() {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        // First find the thread id for this list of participants.
-        final ArrayList<ParticipantData> participants =
-                actionParameters.getParcelableArrayList(KEY_PARTICIPANTS_LIST);
-        BugleDatabaseOperations.sanitizeConversationParticipants(participants);
-        final ArrayList<String> recipients =
-                BugleDatabaseOperations.getRecipientsFromConversationParticipants(participants);
-
-        final long threadId = MmsUtils.getOrCreateThreadId(Factory.get().getApplicationContext(),
-                recipients);
-
-        if (threadId < 0) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Couldn't create a threadId in SMS db for numbers : " +
-                    LogUtil.sanitizePII(recipients.toString()));
-            // TODO: Add a better way to indicate an error from executeAction.
-            return null;
-        }
-
-        final String conversationId = BugleDatabaseOperations.getOrCreateConversation(db, threadId,
-                false, participants, false, false, null);
-
-        return conversationId;
-    }
-
-    /**
-     * A monitor that notifies a listener upon completion
-     */
-    public static class GetOrCreateConversationActionMonitor extends ActionMonitor
-            implements ActionCompletedListener {
-        private final GetOrCreateConversationActionListener mListener;
-
-        GetOrCreateConversationActionMonitor(final Object data,
-                final GetOrCreateConversationActionListener listener) {
-            super(STATE_CREATED, generateUniqueActionKey("GetOrCreateConversationAction"), data);
-            setCompletedListener(this);
-            mListener = listener;
-        }
-
-        @Override
-        public void onActionSucceeded(final ActionMonitor monitor,
-                final Action action, final Object data, final Object result) {
-            if (result == null) {
-                mListener.onGetOrCreateConversationFailed(monitor, data);
-            } else {
-                mListener.onGetOrCreateConversationSucceeded(monitor, data, (String) result);
-            }
-        }
-
-        @Override
-        public void onActionFailed(final ActionMonitor monitor,
-                final Action action, final Object data, final Object result) {
-            // TODO: Currently onActionFailed is only called if there is an error in
-            // processing requests, not for errors in the local processing.
-            Assert.fail("Unreachable");
-            mListener.onGetOrCreateConversationFailed(monitor, data);
-        }
-    }
-
-    private GetOrCreateConversationAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<GetOrCreateConversationAction> CREATOR
-            = new Parcelable.Creator<GetOrCreateConversationAction>() {
-        @Override
-        public GetOrCreateConversationAction createFromParcel(final Parcel in) {
-            return new GetOrCreateConversationAction(in);
-        }
-
-        @Override
-        public GetOrCreateConversationAction[] newArray(final int size) {
-            return new GetOrCreateConversationAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/HandleLowStorageAction.java b/src/com/android/messaging/datamodel/action/HandleLowStorageAction.java
deleted file mode 100644
index 7bfcfe0..0000000
--- a/src/com/android/messaging/datamodel/action/HandleLowStorageAction.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.sms.SmsReleaseStorage;
-import com.android.messaging.util.Assert;
-
-/**
- * Action used to handle low storage related issues on the device.
- */
-public class HandleLowStorageAction extends Action implements Parcelable {
-    private static final int SUB_OP_CODE_CLEAR_MEDIA_MESSAGES = 100;
-    private static final int SUB_OP_CODE_CLEAR_OLD_MESSAGES = 101;
-
-    public static void handleDeleteMediaMessages(final long durationInMillis) {
-        final HandleLowStorageAction action = new HandleLowStorageAction(
-                SUB_OP_CODE_CLEAR_MEDIA_MESSAGES, durationInMillis);
-        action.start();
-    }
-
-    public static void handleDeleteOldMessages(final long durationInMillis) {
-        final HandleLowStorageAction action = new HandleLowStorageAction(
-                SUB_OP_CODE_CLEAR_OLD_MESSAGES, durationInMillis);
-        action.start();
-    }
-
-    private static final String KEY_SUB_OP_CODE = "sub_op_code";
-    private static final String KEY_CUTOFF_DURATION_MILLIS = "cutoff_duration_millis";
-
-    private HandleLowStorageAction(final int subOpcode, final long durationInMillis) {
-        super();
-        actionParameters.putInt(KEY_SUB_OP_CODE, subOpcode);
-        actionParameters.putLong(KEY_CUTOFF_DURATION_MILLIS, durationInMillis);
-    }
-
-    @Override
-    protected Object executeAction() {
-        final int subOpCode = actionParameters.getInt(KEY_SUB_OP_CODE);
-        final long durationInMillis = actionParameters.getLong(KEY_CUTOFF_DURATION_MILLIS);
-        switch (subOpCode) {
-            case SUB_OP_CODE_CLEAR_MEDIA_MESSAGES:
-                SmsReleaseStorage.deleteMessages(0, durationInMillis);
-                break;
-
-            case SUB_OP_CODE_CLEAR_OLD_MESSAGES:
-                SmsReleaseStorage.deleteMessages(1, durationInMillis);
-                break;
-
-            default:
-                Assert.fail("Unsupported action type!");
-                break;
-        }
-        return true;
-    }
-
-    private HandleLowStorageAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<HandleLowStorageAction> CREATOR
-            = new Parcelable.Creator<HandleLowStorageAction>() {
-        @Override
-        public HandleLowStorageAction createFromParcel(final Parcel in) {
-            return new HandleLowStorageAction(in);
-        }
-
-        @Override
-        public HandleLowStorageAction[] newArray(final int size) {
-            return new HandleLowStorageAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/InsertNewMessageAction.java b/src/com/android/messaging/datamodel/action/InsertNewMessageAction.java
deleted file mode 100644
index 8bf6d5e..0000000
--- a/src/com/android/messaging/datamodel/action/InsertNewMessageAction.java
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Context;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.Telephony;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Action used to convert a draft message to an outgoing message. Its writes SMS messages to
- * the telephony db, but {@link SendMessageAction} is responsible for inserting MMS message into
- * the telephony DB. The latter also does the actual sending of the message in the background.
- * The latter is also responsible for re-sending a failed message.
- */
-public class InsertNewMessageAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    private static long sLastSentMessageTimestamp = -1;
-
-    /**
-     * Insert message (no listener)
-     */
-    public static void insertNewMessage(final MessageData message) {
-        final InsertNewMessageAction action = new InsertNewMessageAction(message);
-        action.start();
-    }
-
-    /**
-     * Insert message (no listener) with a given non-default subId.
-     */
-    public static void insertNewMessage(final MessageData message, final int subId) {
-        Assert.isFalse(subId == ParticipantData.DEFAULT_SELF_SUB_ID);
-        final InsertNewMessageAction action = new InsertNewMessageAction(message, subId);
-        action.start();
-    }
-
-    /**
-     * Insert message (no listener)
-     */
-    public static void insertNewMessage(final int subId, final String recipients,
-            final String messageText, final String subject) {
-        final InsertNewMessageAction action = new InsertNewMessageAction(
-                subId, recipients, messageText, subject);
-        action.start();
-    }
-
-    public static long getLastSentMessageTimestamp() {
-        return sLastSentMessageTimestamp;
-    }
-
-    private static final String KEY_SUB_ID = "sub_id";
-    private static final String KEY_MESSAGE = "message";
-    private static final String KEY_RECIPIENTS = "recipients";
-    private static final String KEY_MESSAGE_TEXT = "message_text";
-    private static final String KEY_SUBJECT_TEXT = "subject_text";
-
-    private InsertNewMessageAction(final MessageData message) {
-        this(message, ParticipantData.DEFAULT_SELF_SUB_ID);
-        actionParameters.putParcelable(KEY_MESSAGE, message);
-    }
-
-    private InsertNewMessageAction(final MessageData message, final int subId) {
-        super();
-        actionParameters.putParcelable(KEY_MESSAGE, message);
-        actionParameters.putInt(KEY_SUB_ID, subId);
-    }
-
-    private InsertNewMessageAction(final int subId, final String recipients,
-            final String messageText, final String subject) {
-        super();
-        if (TextUtils.isEmpty(recipients) || TextUtils.isEmpty(messageText)) {
-            Assert.fail("InsertNewMessageAction: Can't have empty recipients or message");
-        }
-        actionParameters.putInt(KEY_SUB_ID, subId);
-        actionParameters.putString(KEY_RECIPIENTS, recipients);
-        actionParameters.putString(KEY_MESSAGE_TEXT, messageText);
-        actionParameters.putString(KEY_SUBJECT_TEXT, subject);
-    }
-
-    /**
-     * Add message to database in pending state and queue actual sending
-     */
-    @Override
-    protected Object executeAction() {
-        MessageData message = actionParameters.getParcelable(KEY_MESSAGE);
-        if (message == null) {
-            LogUtil.i(TAG, "InsertNewMessageAction: Creating MessageData with provided data");
-            message = createMessage();
-            if (message == null) {
-                LogUtil.w(TAG, "InsertNewMessageAction: Could not create MessageData");
-                return null;
-            }
-        }
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final String conversationId = message.getConversationId();
-
-        final ParticipantData self = getSelf(db, conversationId, message);
-        if (self == null) {
-            return null;
-        }
-        message.bindSelfId(self.getId());
-        // If the user taps the Send button before the conversation draft is created/loaded by
-        // ReadDraftDataAction (maybe the action service thread was busy), the MessageData may not
-        // have the participant id set. It should be equal to the self id, so we'll use that.
-        if (message.getParticipantId() == null) {
-            message.bindParticipantId(self.getId());
-        }
-
-        final long timestamp = System.currentTimeMillis();
-        final ArrayList<String> recipients =
-                BugleDatabaseOperations.getRecipientsForConversation(db, conversationId);
-        if (recipients.size() < 1) {
-            LogUtil.w(TAG, "InsertNewMessageAction: message recipients is empty");
-            return null;
-        }
-        final int subId = self.getSubId();
-        LogUtil.i(TAG, "InsertNewMessageAction: inserting new message for subId " + subId);
-        actionParameters.putInt(KEY_SUB_ID, subId);
-
-        // TODO: Work out whether to send with SMS or MMS (taking into account recipients)?
-        final boolean isSms = (message.getProtocol() == MessageData.PROTOCOL_SMS);
-        if (isSms) {
-            String sendingConversationId = conversationId;
-            if (recipients.size() > 1) {
-                // Broadcast SMS - put message in "fake conversation" before farming out to real 1:1
-                final long laterTimestamp = timestamp + 1;
-                // Send a single message
-                insertBroadcastSmsMessage(conversationId, message, subId,
-                        laterTimestamp, recipients);
-
-                sendingConversationId = null;
-            }
-
-            for (final String recipient : recipients) {
-                // Start actual sending
-                insertSendingSmsMessage(message, subId, recipient,
-                        timestamp, sendingConversationId);
-            }
-
-            // Can now clear draft from conversation (deleting attachments if necessary)
-            BugleDatabaseOperations.updateDraftMessageData(db, conversationId,
-                    null /* message */, BugleDatabaseOperations.UPDATE_MODE_CLEAR_DRAFT);
-        } else {
-            final long timestampRoundedToSecond = 1000 * ((timestamp + 500) / 1000);
-            // Write place holder message directly referencing parts from the draft
-            final MessageData messageToSend = insertSendingMmsMessage(conversationId,
-                    message, timestampRoundedToSecond);
-
-            // Can now clear draft from conversation (preserving attachments which are now
-            // referenced by messageToSend)
-            BugleDatabaseOperations.updateDraftMessageData(db, conversationId,
-                    messageToSend, BugleDatabaseOperations.UPDATE_MODE_CLEAR_DRAFT);
-        }
-        MessagingContentProvider.notifyConversationListChanged();
-        ProcessPendingMessagesAction.scheduleProcessPendingMessagesAction(false, this);
-
-        return message;
-    }
-
-    private ParticipantData getSelf(
-            final DatabaseWrapper db, final String conversationId, final MessageData message) {
-        ParticipantData self;
-        // Check if we are asked to bind to a non-default subId. This is directly passed in from
-        // the UI thread so that the sub id may be locked as soon as the user clicks on the Send
-        // button.
-        final int requestedSubId = actionParameters.getInt(
-                KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-        if (requestedSubId != ParticipantData.DEFAULT_SELF_SUB_ID) {
-            self = BugleDatabaseOperations.getOrCreateSelf(db, requestedSubId);
-        } else {
-            String selfId = message.getSelfId();
-            if (selfId == null) {
-                // The conversation draft provides no self id hint, meaning that 1) conversation
-                // self id was not loaded AND 2) the user didn't pick a SIM from the SIM selector.
-                // In this case, use the conversation's self id.
-                final ConversationListItemData conversation =
-                        ConversationListItemData.getExistingConversation(db, conversationId);
-                if (conversation != null) {
-                    selfId = conversation.getSelfId();
-                } else {
-                    LogUtil.w(LogUtil.BUGLE_DATAMODEL_TAG, "Conversation " + conversationId +
-                            "already deleted before sending draft message " +
-                            message.getMessageId() + ". Aborting InsertNewMessageAction.");
-                    return null;
-                }
-            }
-
-            // We do not use SubscriptionManager.DEFAULT_SUB_ID for sending a message, so we need
-            // to bind the message to the system default subscription if it's unbound.
-            final ParticipantData unboundSelf = BugleDatabaseOperations.getExistingParticipant(
-                    db, selfId);
-            if (unboundSelf.getSubId() == ParticipantData.DEFAULT_SELF_SUB_ID
-                    && OsUtil.isAtLeastL_MR1()) {
-                final int defaultSubId = PhoneUtils.getDefault().getDefaultSmsSubscriptionId();
-                self = BugleDatabaseOperations.getOrCreateSelf(db, defaultSubId);
-            } else {
-                self = unboundSelf;
-            }
-        }
-        return self;
-    }
-
-    /** Create MessageData using KEY_RECIPIENTS, KEY_MESSAGE_TEXT and KEY_SUBJECT */
-    private MessageData createMessage() {
-        // First find the thread id for this list of participants.
-        final String recipientsList = actionParameters.getString(KEY_RECIPIENTS);
-        final String messageText = actionParameters.getString(KEY_MESSAGE_TEXT);
-        final String subjectText = actionParameters.getString(KEY_SUBJECT_TEXT);
-        final int subId = actionParameters.getInt(
-                KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-
-        final ArrayList<ParticipantData> participants = new ArrayList<>();
-        for (final String recipient : recipientsList.split(",")) {
-            participants.add(ParticipantData.getFromRawPhoneBySimLocale(recipient, subId));
-        }
-        if (participants.size() == 0) {
-            Assert.fail("InsertNewMessage: Empty participants");
-            return null;
-        }
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        BugleDatabaseOperations.sanitizeConversationParticipants(participants);
-        final ArrayList<String> recipients =
-                BugleDatabaseOperations.getRecipientsFromConversationParticipants(participants);
-        if (recipients.size() == 0) {
-            Assert.fail("InsertNewMessage: Empty recipients");
-            return null;
-        }
-
-        final long threadId = MmsUtils.getOrCreateThreadId(Factory.get().getApplicationContext(),
-                recipients);
-
-        if (threadId < 0) {
-            Assert.fail("InsertNewMessage: Couldn't get threadId in SMS db for these recipients: "
-                    + recipients.toString());
-            // TODO: How do we fail the action?
-            return null;
-        }
-
-        final String conversationId = BugleDatabaseOperations.getOrCreateConversation(db, threadId,
-                false, participants, false, false, null);
-
-        final ParticipantData self = BugleDatabaseOperations.getOrCreateSelf(db, subId);
-
-        if (TextUtils.isEmpty(subjectText)) {
-            return MessageData.createDraftSmsMessage(conversationId, self.getId(), messageText);
-        } else {
-            return MessageData.createDraftMmsMessage(conversationId, self.getId(), messageText,
-                    subjectText);
-        }
-    }
-
-    private void insertBroadcastSmsMessage(final String conversationId,
-            final MessageData message, final int subId, final long laterTimestamp,
-            final ArrayList<String> recipients) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "InsertNewMessageAction: Inserting broadcast SMS message "
-                    + message.getMessageId());
-        }
-        final Context context = Factory.get().getApplicationContext();
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        // Inform sync that message is being added at timestamp
-        final SyncManager syncManager = DataModel.get().getSyncManager();
-        syncManager.onNewMessageInserted(laterTimestamp);
-
-        final long threadId = BugleDatabaseOperations.getThreadId(db, conversationId);
-        final String address = TextUtils.join(" ", recipients);
-
-        final String messageText = message.getMessageText();
-        // Insert message into telephony database sms message table
-        final Uri messageUri = MmsUtils.insertSmsMessage(context,
-                Telephony.Sms.CONTENT_URI,
-                subId,
-                address,
-                messageText,
-                laterTimestamp,
-                Telephony.Sms.STATUS_COMPLETE,
-                Telephony.Sms.MESSAGE_TYPE_SENT, threadId);
-        if (messageUri != null && !TextUtils.isEmpty(messageUri.toString())) {
-            db.beginTransaction();
-            try {
-                message.updateSendingMessage(conversationId, messageUri, laterTimestamp);
-                message.markMessageSent(laterTimestamp);
-
-                BugleDatabaseOperations.insertNewMessageInTransaction(db, message);
-
-                BugleDatabaseOperations.updateConversationMetadataInTransaction(db,
-                        conversationId, message.getMessageId(), laterTimestamp,
-                        false /* senderBlocked */, false /* shouldAutoSwitchSelfId */);
-                db.setTransactionSuccessful();
-            } finally {
-                db.endTransaction();
-            }
-
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "InsertNewMessageAction: Inserted broadcast SMS message "
-                        + message.getMessageId() + ", uri = " + message.getSmsMessageUri());
-            }
-            MessagingContentProvider.notifyMessagesChanged(conversationId);
-            MessagingContentProvider.notifyPartsChanged();
-        } else {
-            // Ignore error as we only really care about the individual messages?
-            LogUtil.e(TAG,
-                    "InsertNewMessageAction: No uri for broadcast SMS " + message.getMessageId()
-                    + " inserted into telephony DB");
-        }
-    }
-
-    /**
-     * Insert SMS messaging into our database and telephony db.
-     */
-    private MessageData insertSendingSmsMessage(final MessageData content, final int subId,
-            final String recipient, final long timestamp, final String sendingConversationId) {
-        sLastSentMessageTimestamp = timestamp;
-
-        final Context context = Factory.get().getApplicationContext();
-
-        // Inform sync that message is being added at timestamp
-        final SyncManager syncManager = DataModel.get().getSyncManager();
-        syncManager.onNewMessageInserted(timestamp);
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        // Send a single message
-        long threadId;
-        String conversationId;
-        if (sendingConversationId == null) {
-            // For 1:1 message generated sending broadcast need to look up threadId+conversationId
-            threadId = MmsUtils.getOrCreateSmsThreadId(context, recipient);
-            conversationId = BugleDatabaseOperations.getOrCreateConversationFromRecipient(
-                    db, threadId, false /* sender blocked */,
-                    ParticipantData.getFromRawPhoneBySimLocale(recipient, subId));
-        } else {
-            // Otherwise just look up threadId
-            threadId = BugleDatabaseOperations.getThreadId(db, sendingConversationId);
-            conversationId = sendingConversationId;
-        }
-
-        final String messageText = content.getMessageText();
-
-        // Insert message into telephony database sms message table
-        final Uri messageUri = MmsUtils.insertSmsMessage(context,
-                Telephony.Sms.CONTENT_URI,
-                subId,
-                recipient,
-                messageText,
-                timestamp,
-                Telephony.Sms.STATUS_NONE,
-                Telephony.Sms.MESSAGE_TYPE_SENT, threadId);
-
-        MessageData message = null;
-        if (messageUri != null && !TextUtils.isEmpty(messageUri.toString())) {
-            db.beginTransaction();
-            try {
-                message = MessageData.createDraftSmsMessage(conversationId,
-                        content.getSelfId(), messageText);
-                message.updateSendingMessage(conversationId, messageUri, timestamp);
-
-                BugleDatabaseOperations.insertNewMessageInTransaction(db, message);
-
-                // Do not update the conversation summary to reflect autogenerated 1:1 messages
-                if (sendingConversationId != null) {
-                    BugleDatabaseOperations.updateConversationMetadataInTransaction(db,
-                            conversationId, message.getMessageId(), timestamp,
-                            false /* senderBlocked */, false /* shouldAutoSwitchSelfId */);
-                }
-                db.setTransactionSuccessful();
-            } finally {
-                db.endTransaction();
-            }
-
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "InsertNewMessageAction: Inserted SMS message "
-                        + message.getMessageId() + " (uri = " + message.getSmsMessageUri()
-                        + ", timestamp = " + message.getReceivedTimeStamp() + ")");
-            }
-            MessagingContentProvider.notifyMessagesChanged(conversationId);
-            MessagingContentProvider.notifyPartsChanged();
-        } else {
-            LogUtil.e(TAG, "InsertNewMessageAction: No uri for SMS inserted into telephony DB");
-        }
-
-        return message;
-    }
-
-    /**
-     * Insert MMS messaging into our database.
-     */
-    private MessageData insertSendingMmsMessage(final String conversationId,
-            final MessageData message, final long timestamp) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        db.beginTransaction();
-        final List<MessagePartData> attachmentsUpdated = new ArrayList<>();
-        try {
-            sLastSentMessageTimestamp = timestamp;
-
-            // Insert "draft" message as placeholder until the final message is written to
-            // the telephony db
-            message.updateSendingMessage(conversationId, null/*messageUri*/, timestamp);
-
-            // No need to inform SyncManager as message currently has no Uri...
-            BugleDatabaseOperations.insertNewMessageInTransaction(db, message);
-
-            BugleDatabaseOperations.updateConversationMetadataInTransaction(db,
-                    conversationId, message.getMessageId(), timestamp,
-                    false /* senderBlocked */, false /* shouldAutoSwitchSelfId */);
-
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-
-        if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "InsertNewMessageAction: Inserted MMS message "
-                    + message.getMessageId() + " (timestamp = " + timestamp + ")");
-        }
-        MessagingContentProvider.notifyMessagesChanged(conversationId);
-        MessagingContentProvider.notifyPartsChanged();
-
-        return message;
-    }
-
-    private InsertNewMessageAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<InsertNewMessageAction> CREATOR
-            = new Parcelable.Creator<InsertNewMessageAction>() {
-        @Override
-        public InsertNewMessageAction createFromParcel(final Parcel in) {
-            return new InsertNewMessageAction(in);
-        }
-
-        @Override
-        public InsertNewMessageAction[] newArray(final int size) {
-            return new InsertNewMessageAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/LogTelephonyDatabaseAction.java b/src/com/android/messaging/datamodel/action/LogTelephonyDatabaseAction.java
deleted file mode 100644
index 441a5a2..0000000
--- a/src/com/android/messaging/datamodel/action/LogTelephonyDatabaseAction.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.Telephony.Threads;
-import android.provider.Telephony.ThreadsColumns;
-
-import com.android.messaging.Factory;
-import com.android.messaging.mmslib.SqliteWrapper;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.LogUtil;
-
-public class LogTelephonyDatabaseAction extends Action implements Parcelable {
-    // Because we use sanitizePII, we should also use BUGLE_TAG
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static final String[] ALL_THREADS_PROJECTION = {
-        Threads._ID,
-        Threads.DATE,
-        Threads.MESSAGE_COUNT,
-        Threads.RECIPIENT_IDS,
-        Threads.SNIPPET,
-        Threads.SNIPPET_CHARSET,
-        Threads.READ,
-        Threads.ERROR,
-        Threads.HAS_ATTACHMENT };
-
-    // Constants from the Telephony Database
-    private static final int ID               = 0;
-    private static final int DATE             = 1;
-    private static final int MESSAGE_COUNT    = 2;
-    private static final int RECIPIENT_IDS    = 3;
-    private static final int SNIPPET          = 4;
-    private static final int SNIPPET_CHAR_SET = 5;
-    private static final int READ             = 6;
-    private static final int ERROR            = 7;
-    private static final int HAS_ATTACHMENT   = 8;
-
-    /**
-     * Log telephony data to logcat
-     */
-    public static void dumpDatabase() {
-        final LogTelephonyDatabaseAction action = new LogTelephonyDatabaseAction();
-        action.start();
-    }
-
-    private LogTelephonyDatabaseAction() {
-    }
-
-    @Override
-    protected Object executeAction() {
-        final Context context = Factory.get().getApplicationContext();
-
-        if (!DebugUtils.isDebugEnabled()) {
-            LogUtil.e(TAG, "Can't log telephony database unless debugging is enabled");
-            return null;
-        }
-
-        if (!LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.w(TAG, "Can't log telephony database unless DEBUG is turned on for TAG: " +
-                    TAG);
-            return null;
-        }
-
-        LogUtil.d(TAG, "\n");
-        LogUtil.d(TAG, "Dump of canoncial_addresses table");
-        LogUtil.d(TAG, "*********************************");
-
-        Cursor cursor = SqliteWrapper.query(context, context.getContentResolver(),
-                Uri.parse("content://mms-sms/canonical-addresses"), null, null, null, null);
-
-        if (cursor == null) {
-            LogUtil.w(TAG, "null Cursor in content://mms-sms/canonical-addresses");
-        } else {
-            try {
-                while (cursor.moveToNext()) {
-                    long id = cursor.getLong(0);
-                    String number = cursor.getString(1);
-                    LogUtil.d(TAG, LogUtil.sanitizePII("id: " + id + " number: " + number));
-                }
-            } finally {
-                cursor.close();
-            }
-        }
-
-        LogUtil.d(TAG, "\n");
-        LogUtil.d(TAG, "Dump of threads table");
-        LogUtil.d(TAG, "*********************");
-
-        cursor = SqliteWrapper.query(context, context.getContentResolver(),
-                Threads.CONTENT_URI.buildUpon().appendQueryParameter("simple", "true").build(),
-                ALL_THREADS_PROJECTION, null, null, "date ASC");
-        try {
-            while (cursor.moveToNext()) {
-                LogUtil.d(TAG, LogUtil.sanitizePII("threadId: " + cursor.getLong(ID) +
-                        " " + ThreadsColumns.DATE + " : " + cursor.getLong(DATE) +
-                        " " + ThreadsColumns.MESSAGE_COUNT + " : " + cursor.getInt(MESSAGE_COUNT) +
-                        " " + ThreadsColumns.SNIPPET + " : " + cursor.getString(SNIPPET) +
-                        " " + ThreadsColumns.READ + " : " + cursor.getInt(READ) +
-                        " " + ThreadsColumns.ERROR + " : " + cursor.getInt(ERROR) +
-                        " " + ThreadsColumns.HAS_ATTACHMENT + " : " +
-                            cursor.getInt(HAS_ATTACHMENT) +
-                        " " + ThreadsColumns.RECIPIENT_IDS + " : " +
-                            cursor.getString(RECIPIENT_IDS)));
-            }
-        } finally {
-            cursor.close();
-        }
-
-        return null;
-    }
-
-    private LogTelephonyDatabaseAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<LogTelephonyDatabaseAction> CREATOR
-            = new Parcelable.Creator<LogTelephonyDatabaseAction>() {
-        @Override
-        public LogTelephonyDatabaseAction createFromParcel(final Parcel in) {
-            return new LogTelephonyDatabaseAction(in);
-        }
-
-        @Override
-        public LogTelephonyDatabaseAction[] newArray(final int size) {
-            return new LogTelephonyDatabaseAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/MarkAsReadAction.java b/src/com/android/messaging/datamodel/action/MarkAsReadAction.java
deleted file mode 100644
index 31bc59d..0000000
--- a/src/com/android/messaging/datamodel/action/MarkAsReadAction.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentValues;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Action used to mark all the messages in a conversation as read
- */
-public class MarkAsReadAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    private static final String KEY_CONVERSATION_ID = "conversation_id";
-
-    /**
-     * Mark all the messages as read for a particular conversation.
-     */
-    public static void markAsRead(final String conversationId) {
-        final MarkAsReadAction action = new MarkAsReadAction(conversationId);
-        action.start();
-    }
-
-    private MarkAsReadAction(final String conversationId) {
-        actionParameters.putString(KEY_CONVERSATION_ID, conversationId);
-    }
-
-    @Override
-    protected Object executeAction() {
-        final String conversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-
-        // TODO: Consider doing this in background service to avoid delaying other actions
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        // Mark all messages in thread as read in telephony
-        final long threadId = BugleDatabaseOperations.getThreadId(db, conversationId);
-        if (threadId != -1) {
-            MmsUtils.updateSmsReadStatus(threadId, Long.MAX_VALUE);
-        }
-
-        // Update local db
-        db.beginTransaction();
-        try {
-            final ContentValues values = new ContentValues();
-            values.put(MessageColumns.CONVERSATION_ID, conversationId);
-            values.put(MessageColumns.READ, 1);
-            values.put(MessageColumns.SEEN, 1);     // if they read it, they saw it
-
-            final int count = db.update(DatabaseHelper.MESSAGES_TABLE, values,
-                    "(" + MessageColumns.READ + " !=1 OR " +
-                            MessageColumns.SEEN + " !=1 ) AND " +
-                            MessageColumns.CONVERSATION_ID + "=?",
-                    new String[] { conversationId });
-            if (count > 0) {
-                MessagingContentProvider.notifyMessagesChanged(conversationId);
-            }
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-        // After marking messages as read, update the notifications. This will
-        // clear the now stale notifications.
-        BugleNotifications.update(false/*silent*/, BugleNotifications.UPDATE_ALL);
-        return null;
-    }
-
-    private MarkAsReadAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<MarkAsReadAction> CREATOR
-            = new Parcelable.Creator<MarkAsReadAction>() {
-        @Override
-        public MarkAsReadAction createFromParcel(final Parcel in) {
-            return new MarkAsReadAction(in);
-        }
-
-        @Override
-        public MarkAsReadAction[] newArray(final int size) {
-            return new MarkAsReadAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/MarkAsSeenAction.java b/src/com/android/messaging/datamodel/action/MarkAsSeenAction.java
deleted file mode 100644
index 28f55fd..0000000
--- a/src/com/android/messaging/datamodel/action/MarkAsSeenAction.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentValues;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Action used to mark all messages as seen
- */
-public class MarkAsSeenAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-    private static final String KEY_CONVERSATION_ID = "conversation_id";
-
-    /**
-     * Mark all messages as seen.
-     */
-    public static void markAllAsSeen() {
-        final MarkAsSeenAction action = new MarkAsSeenAction((String) null/*conversationId*/);
-        action.start();
-    }
-
-    /**
-     * Mark all messages of a given conversation as seen.
-     */
-    public static void markAsSeen(final String conversationId) {
-        final MarkAsSeenAction action = new MarkAsSeenAction(conversationId);
-        action.start();
-    }
-
-    /**
-     * ctor for MarkAsSeenAction.
-     * @param conversationId the conversation id for which to mark as seen, or null to mark all
-     *        messages as seen
-     */
-    public MarkAsSeenAction(final String conversationId) {
-        actionParameters.putString(KEY_CONVERSATION_ID, conversationId);
-    }
-
-    @Override
-    protected Object executeAction() {
-        final String conversationId =
-                actionParameters.getString(KEY_CONVERSATION_ID);
-        final boolean hasSpecificConversation = !TextUtils.isEmpty(conversationId);
-
-        // Everything in telephony should already have the seen bit set.
-        // Possible exception are messages which did not have seen set and
-        // were sync'ed into bugle.
-
-        // Now mark the messages as seen in the bugle db
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        db.beginTransaction();
-
-        try {
-            final ContentValues values = new ContentValues();
-            values.put(MessageColumns.SEEN, 1);
-
-            if (hasSpecificConversation) {
-                final int count = db.update(DatabaseHelper.MESSAGES_TABLE, values,
-                        MessageColumns.SEEN + " != 1 AND " +
-                                MessageColumns.CONVERSATION_ID + "=?",
-                        new String[] { conversationId });
-                if (count > 0) {
-                    MessagingContentProvider.notifyMessagesChanged(conversationId);
-                }
-            } else {
-                db.update(DatabaseHelper.MESSAGES_TABLE, values,
-                        MessageColumns.SEEN + " != 1", null/*selectionArgs*/);
-            }
-
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-        // After marking messages as seen, update the notifications. This will
-        // clear the now stale notifications.
-        BugleNotifications.update(false/*silent*/, BugleNotifications.UPDATE_ALL);
-        return null;
-    }
-
-    private MarkAsSeenAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<MarkAsSeenAction> CREATOR
-            = new Parcelable.Creator<MarkAsSeenAction>() {
-        @Override
-        public MarkAsSeenAction createFromParcel(final Parcel in) {
-            return new MarkAsSeenAction(in);
-        }
-
-        @Override
-        public MarkAsSeenAction[] newArray(final int size) {
-            return new MarkAsSeenAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ProcessDeliveryReportAction.java b/src/com/android/messaging/datamodel/action/ProcessDeliveryReportAction.java
deleted file mode 100644
index fbd4e82..0000000
--- a/src/com/android/messaging/datamodel/action/ProcessDeliveryReportAction.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.Telephony;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-import java.util.concurrent.TimeUnit;
-
-public class ProcessDeliveryReportAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    private static final String KEY_URI = "uri";
-    private static final String KEY_STATUS = "status";
-
-    private ProcessDeliveryReportAction(final Uri uri, final int status) {
-        actionParameters.putParcelable(KEY_URI, uri);
-        actionParameters.putInt(KEY_STATUS, status);
-    }
-
-    public static void deliveryReportReceived(final Uri uri, final int status) {
-        final ProcessDeliveryReportAction action = new ProcessDeliveryReportAction(uri, status);
-        action.start();
-    }
-
-    @Override
-    protected Object executeAction() {
-        final Uri smsMessageUri = actionParameters.getParcelable(KEY_URI);
-        final int status = actionParameters.getInt(KEY_STATUS);
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final long messageRowId = ContentUris.parseId(smsMessageUri);
-        if (messageRowId < 0) {
-            LogUtil.e(TAG, "ProcessDeliveryReportAction: can't find message");
-            return null;
-        }
-        final long timeSentInMillis = System.currentTimeMillis();
-        // Update telephony provider
-        if (smsMessageUri != null) {
-            MmsUtils.updateSmsStatusAndDateSent(smsMessageUri, status, timeSentInMillis);
-        }
-
-        // Update local message
-        db.beginTransaction();
-        try {
-            final ContentValues values = new ContentValues();
-            final int bugleStatus = SyncMessageBatch.bugleStatusForSms(true /*outgoing*/,
-                    Telephony.Sms.MESSAGE_TYPE_SENT /* type */, status);
-            values.put(DatabaseHelper.MessageColumns.STATUS, bugleStatus);
-            values.put(DatabaseHelper.MessageColumns.SENT_TIMESTAMP,
-                    TimeUnit.MILLISECONDS.toMicros(timeSentInMillis));
-
-            final MessageData messageData =
-                    BugleDatabaseOperations.readMessageData(db, smsMessageUri);
-
-            // Check the message was not removed before the delivery report comes in
-            if (messageData !=  null) {
-                Assert.isTrue(smsMessageUri.equals(messageData.getSmsMessageUri()));
-
-                // Row must exist as was just loaded above (on ActionService thread)
-                BugleDatabaseOperations.updateMessageRow(db, messageData.getMessageId(), values);
-
-                MessagingContentProvider.notifyMessagesChanged(messageData.getConversationId());
-            }
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-        return null;
-    }
-
-    private ProcessDeliveryReportAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<ProcessDeliveryReportAction> CREATOR
-            = new Parcelable.Creator<ProcessDeliveryReportAction>() {
-        @Override
-        public ProcessDeliveryReportAction createFromParcel(final Parcel in) {
-            return new ProcessDeliveryReportAction(in);
-        }
-
-        @Override
-        public ProcessDeliveryReportAction[] newArray(final int size) {
-            return new ProcessDeliveryReportAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ProcessDownloadedMmsAction.java b/src/com/android/messaging/datamodel/action/ProcessDownloadedMmsAction.java
deleted file mode 100644
index 60d3e35..0000000
--- a/src/com/android/messaging/datamodel/action/ProcessDownloadedMmsAction.java
+++ /dev/null
@@ -1,584 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.app.Activity;
-import android.content.ContentValues;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.Telephony.Mms;
-import android.telephony.SmsManager;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DataModelException;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.MmsFileProvider;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.mmslib.SqliteWrapper;
-import com.android.messaging.mmslib.pdu.PduHeaders;
-import com.android.messaging.mmslib.pdu.RetrieveConf;
-import com.android.messaging.sms.DatabaseMessages;
-import com.android.messaging.sms.MmsSender;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.google.common.io.Files;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.List;
-
-/**
- * Processes an MMS message after it has been downloaded.
- * NOTE: This action must queue a ProcessPendingMessagesAction when it is done (success or failure).
- */
-public class ProcessDownloadedMmsAction extends Action {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    // Always set when message downloaded
-    private static final String KEY_DOWNLOADED_BY_PLATFORM = "downloaded_by_platform";
-    private static final String KEY_MESSAGE_ID = "message_id";
-    private static final String KEY_NOTIFICATION_URI = "notification_uri";
-    private static final String KEY_CONVERSATION_ID = "conversation_id";
-    private static final String KEY_PARTICIPANT_ID = "participant_id";
-    private static final String KEY_STATUS_IF_FAILED = "status_if_failed";
-
-    // Set when message downloaded by platform (L+)
-    private static final String KEY_RESULT_CODE = "result_code";
-    private static final String KEY_HTTP_STATUS_CODE = "http_status_code";
-    private static final String KEY_CONTENT_URI = "content_uri";
-    private static final String KEY_SUB_ID = "sub_id";
-    private static final String KEY_SUB_PHONE_NUMBER = "sub_phone_number";
-    private static final String KEY_TRANSACTION_ID = "transaction_id";
-    private static final String KEY_CONTENT_LOCATION = "content_location";
-    private static final String KEY_AUTO_DOWNLOAD = "auto_download";
-    private static final String KEY_RECEIVED_TIMESTAMP = "received_timestamp";
-    private static final String KEY_EXPIRY = "expiry";
-
-    // Set when message downloaded by us (legacy)
-    private static final String KEY_STATUS = "status";
-    private static final String KEY_RAW_STATUS = "raw_status";
-    private static final String KEY_MMS_URI = "mms_uri";
-
-    // Used to send a deferred response in response to auto-download failure
-    private static final String KEY_SEND_DEFERRED_RESP_STATUS = "send_deferred_resp_status";
-
-    // Results passed from background worker to processCompletion
-    private static final String BUNDLE_REQUEST_STATUS = "request_status";
-    private static final String BUNDLE_RAW_TELEPHONY_STATUS = "raw_status";
-    private static final String BUNDLE_MMS_URI = "mms_uri";
-
-    // This is called when MMS lib API returns via PendingIntent
-    public static void processMessageDownloaded(final int resultCode, final Bundle extras) {
-        final String messageId = extras.getString(DownloadMmsAction.EXTRA_MESSAGE_ID);
-        final Uri contentUri = extras.getParcelable(DownloadMmsAction.EXTRA_CONTENT_URI);
-        final Uri notificationUri = extras.getParcelable(DownloadMmsAction.EXTRA_NOTIFICATION_URI);
-        final String conversationId = extras.getString(DownloadMmsAction.EXTRA_CONVERSATION_ID);
-        final String participantId = extras.getString(DownloadMmsAction.EXTRA_PARTICIPANT_ID);
-        Assert.notNull(messageId);
-        Assert.notNull(contentUri);
-        Assert.notNull(notificationUri);
-        Assert.notNull(conversationId);
-        Assert.notNull(participantId);
-
-        final ProcessDownloadedMmsAction action = new ProcessDownloadedMmsAction();
-        final Bundle params = action.actionParameters;
-        params.putBoolean(KEY_DOWNLOADED_BY_PLATFORM, true);
-        params.putString(KEY_MESSAGE_ID, messageId);
-        params.putInt(KEY_RESULT_CODE, resultCode);
-        params.putInt(KEY_HTTP_STATUS_CODE,
-                extras.getInt(SmsManager.EXTRA_MMS_HTTP_STATUS, 0));
-        params.putParcelable(KEY_CONTENT_URI, contentUri);
-        params.putParcelable(KEY_NOTIFICATION_URI, notificationUri);
-        params.putInt(KEY_SUB_ID,
-                extras.getInt(DownloadMmsAction.EXTRA_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID));
-        params.putString(KEY_SUB_PHONE_NUMBER,
-                extras.getString(DownloadMmsAction.EXTRA_SUB_PHONE_NUMBER));
-        params.putString(KEY_TRANSACTION_ID,
-                extras.getString(DownloadMmsAction.EXTRA_TRANSACTION_ID));
-        params.putString(KEY_CONTENT_LOCATION,
-                extras.getString(DownloadMmsAction.EXTRA_CONTENT_LOCATION));
-        params.putBoolean(KEY_AUTO_DOWNLOAD,
-                extras.getBoolean(DownloadMmsAction.EXTRA_AUTO_DOWNLOAD));
-        params.putLong(KEY_RECEIVED_TIMESTAMP,
-                extras.getLong(DownloadMmsAction.EXTRA_RECEIVED_TIMESTAMP));
-        params.putString(KEY_CONVERSATION_ID, conversationId);
-        params.putString(KEY_PARTICIPANT_ID, participantId);
-        params.putInt(KEY_STATUS_IF_FAILED,
-                extras.getInt(DownloadMmsAction.EXTRA_STATUS_IF_FAILED));
-        params.putLong(KEY_EXPIRY, extras.getLong(DownloadMmsAction.EXTRA_EXPIRY));
-        action.start();
-    }
-
-    // This is called for fast failing downloading (due to airplane mode or mobile data )
-    public static void processMessageDownloadFastFailed(final String messageId,
-            final Uri notificationUri, final String conversationId, final String participantId,
-            final String contentLocation, final int subId, final String subPhoneNumber,
-            final int statusIfFailed, final boolean autoDownload, final String transactionId,
-            final int resultCode) {
-        Assert.notNull(messageId);
-        Assert.notNull(notificationUri);
-        Assert.notNull(conversationId);
-        Assert.notNull(participantId);
-
-        final ProcessDownloadedMmsAction action = new ProcessDownloadedMmsAction();
-        final Bundle params = action.actionParameters;
-        params.putBoolean(KEY_DOWNLOADED_BY_PLATFORM, true);
-        params.putString(KEY_MESSAGE_ID, messageId);
-        params.putInt(KEY_RESULT_CODE, resultCode);
-        params.putParcelable(KEY_NOTIFICATION_URI, notificationUri);
-        params.putInt(KEY_SUB_ID, subId);
-        params.putString(KEY_SUB_PHONE_NUMBER, subPhoneNumber);
-        params.putString(KEY_CONTENT_LOCATION, contentLocation);
-        params.putBoolean(KEY_AUTO_DOWNLOAD, autoDownload);
-        params.putString(KEY_CONVERSATION_ID, conversationId);
-        params.putString(KEY_PARTICIPANT_ID, participantId);
-        params.putInt(KEY_STATUS_IF_FAILED, statusIfFailed);
-        params.putString(KEY_TRANSACTION_ID, transactionId);
-        action.start();
-    }
-
-    public static void processDownloadActionFailure(final String messageId, final int status,
-            final int rawStatus, final String conversationId, final String participantId,
-            final int statusIfFailed, final int subId, final String transactionId) {
-        Assert.notNull(messageId);
-        Assert.notNull(conversationId);
-        Assert.notNull(participantId);
-
-        final ProcessDownloadedMmsAction action = new ProcessDownloadedMmsAction();
-        final Bundle params = action.actionParameters;
-        params.putBoolean(KEY_DOWNLOADED_BY_PLATFORM, false);
-        params.putString(KEY_MESSAGE_ID, messageId);
-        params.putInt(KEY_STATUS, status);
-        params.putInt(KEY_RAW_STATUS, rawStatus);
-        params.putString(KEY_CONVERSATION_ID, conversationId);
-        params.putString(KEY_PARTICIPANT_ID, participantId);
-        params.putInt(KEY_STATUS_IF_FAILED, statusIfFailed);
-        params.putInt(KEY_SUB_ID, subId);
-        params.putString(KEY_TRANSACTION_ID, transactionId);
-        action.start();
-    }
-
-    public static void sendDeferredRespStatus(final String messageId, final String transactionId,
-            final String contentLocation, final int subId) {
-        final ProcessDownloadedMmsAction action = new ProcessDownloadedMmsAction();
-        final Bundle params = action.actionParameters;
-        params.putString(KEY_MESSAGE_ID, messageId);
-        params.putString(KEY_TRANSACTION_ID, transactionId);
-        params.putString(KEY_CONTENT_LOCATION, contentLocation);
-        params.putBoolean(KEY_SEND_DEFERRED_RESP_STATUS, true);
-        params.putInt(KEY_SUB_ID, subId);
-        action.start();
-    }
-
-    private ProcessDownloadedMmsAction() {
-        // Callers must use one of the static methods above
-    }
-
-    @Override
-    protected Object executeAction() {
-        // Fire up the background worker
-        requestBackgroundWork();
-        return null;
-    }
-
-    @Override
-    protected Bundle doBackgroundWork() throws DataModelException {
-        final Context context = Factory.get().getApplicationContext();
-        final int subId = actionParameters.getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-        final String transactionId = actionParameters.getString(KEY_TRANSACTION_ID);
-        final String contentLocation = actionParameters.getString(KEY_CONTENT_LOCATION);
-        final boolean sendDeferredRespStatus =
-                actionParameters.getBoolean(KEY_SEND_DEFERRED_RESP_STATUS, false);
-
-        // Send a response indicating that auto-download failed
-        if (sendDeferredRespStatus) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "DownloadMmsAction: Auto-download of message " + messageId
-                        + " failed; sending DEFERRED NotifyRespInd");
-            }
-            MmsUtils.sendNotifyResponseForMmsDownload(
-                    context,
-                    subId,
-                    MmsUtils.stringToBytes(transactionId, "UTF-8"),
-                    contentLocation,
-                    PduHeaders.STATUS_DEFERRED);
-            return null;
-        }
-
-        // Processing a real MMS download
-        final boolean downloadedByPlatform = actionParameters.getBoolean(
-                KEY_DOWNLOADED_BY_PLATFORM);
-
-        final int status;
-        int rawStatus = MmsUtils.PDU_HEADER_VALUE_UNDEFINED;
-        Uri mmsUri = null;
-
-        if (downloadedByPlatform) {
-            final int resultCode = actionParameters.getInt(KEY_RESULT_CODE);
-            if (resultCode == Activity.RESULT_OK) {
-                final Uri contentUri = actionParameters.getParcelable(KEY_CONTENT_URI);
-                final File downloadedFile = MmsFileProvider.getFile(contentUri);
-                byte[] downloadedData = null;
-                try {
-                    downloadedData = Files.toByteArray(downloadedFile);
-                } catch (final FileNotFoundException e) {
-                    LogUtil.e(TAG, "ProcessDownloadedMmsAction: MMS download file not found: "
-                            + downloadedFile.getAbsolutePath());
-                } catch (final IOException e) {
-                    LogUtil.e(TAG, "ProcessDownloadedMmsAction: Error reading MMS download file: "
-                            + downloadedFile.getAbsolutePath(), e);
-                }
-
-                // Can delete the temp file now
-                if (downloadedFile.exists()) {
-                    downloadedFile.delete();
-                    if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                        LogUtil.d(TAG, "ProcessDownloadedMmsAction: Deleted temp file with "
-                                + "downloaded MMS pdu: " + downloadedFile.getAbsolutePath());
-                    }
-                }
-
-                if (downloadedData != null) {
-                    final RetrieveConf retrieveConf =
-                            MmsSender.parseRetrieveConf(downloadedData, subId);
-                    if (MmsUtils.isDumpMmsEnabled()) {
-                        MmsUtils.dumpPdu(downloadedData, retrieveConf);
-                    }
-                    if (retrieveConf != null) {
-                        // Insert the downloaded MMS into telephony
-                        final Uri notificationUri = actionParameters.getParcelable(
-                                KEY_NOTIFICATION_URI);
-                        final String subPhoneNumber = actionParameters.getString(
-                                KEY_SUB_PHONE_NUMBER);
-                        final boolean autoDownload = actionParameters.getBoolean(
-                                KEY_AUTO_DOWNLOAD);
-                        final long receivedTimestampInSeconds =
-                                actionParameters.getLong(KEY_RECEIVED_TIMESTAMP);
-                        final long expiry = actionParameters.getLong(KEY_EXPIRY);
-
-                        // Inform sync we're adding a message to telephony
-                        final SyncManager syncManager = DataModel.get().getSyncManager();
-                        syncManager.onNewMessageInserted(receivedTimestampInSeconds * 1000L);
-
-                        final MmsUtils.StatusPlusUri result =
-                                MmsUtils.insertDownloadedMessageAndSendResponse(context,
-                                        notificationUri, subId, subPhoneNumber, transactionId,
-                                        contentLocation, autoDownload, receivedTimestampInSeconds,
-                                        expiry, retrieveConf);
-                        status = result.status;
-                        rawStatus = result.rawStatus;
-                        mmsUri = result.uri;
-                    } else {
-                        // Invalid response PDU
-                        status = MmsUtils.MMS_REQUEST_MANUAL_RETRY;
-                    }
-                } else {
-                    // Failed to read download file
-                    status = MmsUtils.MMS_REQUEST_MANUAL_RETRY;
-                }
-            } else {
-                LogUtil.w(TAG, "ProcessDownloadedMmsAction: Platform returned error resultCode: "
-                        + resultCode);
-                final int httpStatusCode = actionParameters.getInt(KEY_HTTP_STATUS_CODE);
-                status = MmsSender.getErrorResultStatus(resultCode, httpStatusCode);
-            }
-        } else {
-            // Message was already processed by the internal API, or the download action failed.
-            // In either case, we just need to copy the status to the response bundle.
-            status = actionParameters.getInt(KEY_STATUS);
-            rawStatus = actionParameters.getInt(KEY_RAW_STATUS);
-            mmsUri = actionParameters.getParcelable(KEY_MMS_URI);
-        }
-
-        final Bundle response = new Bundle();
-        response.putInt(BUNDLE_REQUEST_STATUS, status);
-        response.putInt(BUNDLE_RAW_TELEPHONY_STATUS, rawStatus);
-        response.putParcelable(BUNDLE_MMS_URI, mmsUri);
-        return response;
-    }
-
-    @Override
-    protected Object processBackgroundResponse(final Bundle response) {
-        if (response == null) {
-            // No message download to process; doBackgroundWork sent a notify deferred response
-            Assert.isTrue(actionParameters.getBoolean(KEY_SEND_DEFERRED_RESP_STATUS));
-            ProcessPendingMessagesAction.scheduleProcessPendingMessagesAction(
-                    true /* failed */, this);
-            return null;
-        }
-
-        final int status = response.getInt(BUNDLE_REQUEST_STATUS);
-        final int rawStatus = response.getInt(BUNDLE_RAW_TELEPHONY_STATUS);
-        final Uri messageUri = response.getParcelable(BUNDLE_MMS_URI);
-        final boolean autoDownload = actionParameters.getBoolean(KEY_AUTO_DOWNLOAD);
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-
-        // Do post-processing on downloaded message
-        final MessageData message = processResult(status, rawStatus, messageUri);
-
-        final int subId = actionParameters.getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-        // If we were trying to auto-download but have failed need to send the deferred response
-        final boolean needToSendDeferredResp =
-                autoDownload && (status == MmsUtils.MMS_REQUEST_MANUAL_RETRY);
-        if (needToSendDeferredResp) {
-            final String transactionId = actionParameters.getString(KEY_TRANSACTION_ID);
-            final String contentLocation = actionParameters.getString(KEY_CONTENT_LOCATION);
-            sendDeferredRespStatus(messageId, transactionId, contentLocation, subId);
-        }
-
-        if (autoDownload) {
-            final DatabaseWrapper db = DataModel.get().getDatabase();
-            MessageData toastMessage = message;
-            if (toastMessage == null) {
-                // If the downloaded failed (message is null), then we should announce the
-                // receiving of the wap push message. Load the wap push message here instead.
-                toastMessage = BugleDatabaseOperations.readMessageData(db, messageId);
-            }
-            if (toastMessage != null) {
-                final ParticipantData sender = ParticipantData.getFromId(
-                        db, toastMessage.getParticipantId());
-                BugleActionToasts.onMessageReceived(
-                        toastMessage.getConversationId(), sender, toastMessage);
-            }
-        } else {
-            final boolean success = message != null && status == MmsUtils.MMS_REQUEST_SUCCEEDED;
-            BugleActionToasts.onSendMessageOrManualDownloadActionCompleted(
-                    // If download failed, use the wap push message's conversation instead
-                    success ? message.getConversationId()
-                            : actionParameters.getString(KEY_CONVERSATION_ID),
-                    success, status, false/*isSms*/, subId, false /*isSend*/);
-        }
-
-        final boolean failed = (messageUri == null);
-        // Scheduling pending messages. If auto downloading is failed and it needs to send the
-        // deferred response, Skip it here and it will be scheduled after sending the response.
-        if (!needToSendDeferredResp) {
-            ProcessPendingMessagesAction.scheduleProcessPendingMessagesAction(failed, this);
-        }
-        if (failed) {
-            BugleNotifications.update(false, BugleNotifications.UPDATE_ERRORS);
-        }
-
-        return message;
-    }
-
-    @Override
-    protected Object processBackgroundFailure() {
-        if (actionParameters.getBoolean(KEY_SEND_DEFERRED_RESP_STATUS)) {
-            // We can early-out for these failures. processResult is only designed to handle
-            // post-processing of MMS downloads (whether successful or not).
-            LogUtil.w(TAG,
-                    "ProcessDownloadedMmsAction: Exception while sending deferred NotifyRespInd");
-            return null;
-        }
-
-        // Background worker threw an exception; require manual retry
-        processResult(MmsUtils.MMS_REQUEST_MANUAL_RETRY, MessageData.RAW_TELEPHONY_STATUS_UNDEFINED,
-                null /* mmsUri */);
-
-        ProcessPendingMessagesAction.scheduleProcessPendingMessagesAction(true /* failed */,
-                this);
-
-        return null;
-    }
-
-    private MessageData processResult(final int status, final int rawStatus, final Uri mmsUri) {
-        final Context context = Factory.get().getApplicationContext();
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-        final Uri mmsNotificationUri = actionParameters.getParcelable(KEY_NOTIFICATION_URI);
-        final String notificationConversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-        final String notificationParticipantId = actionParameters.getString(KEY_PARTICIPANT_ID);
-        final int statusIfFailed = actionParameters.getInt(KEY_STATUS_IF_FAILED);
-        final int subId = actionParameters.getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-
-        Assert.notNull(messageId);
-
-        LogUtil.i(TAG, "ProcessDownloadedMmsAction: Processed MMS download of message " + messageId
-                + "; status is " + MmsUtils.getRequestStatusDescription(status));
-
-        DatabaseMessages.MmsMessage mms = null;
-        if (status == MmsUtils.MMS_REQUEST_SUCCEEDED && mmsUri != null) {
-            // Delete the initial M-Notification.ind from telephony
-            SqliteWrapper.delete(context, context.getContentResolver(),
-                    mmsNotificationUri, null, null);
-
-            // Read the sent MMS from the telephony provider
-            mms = MmsUtils.loadMms(mmsUri);
-        }
-
-        boolean messageInFocusedConversation = false;
-        boolean messageInObservableConversation = false;
-        String conversationId = null;
-        MessageData message = null;
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        db.beginTransaction();
-        try {
-            if (mms != null) {
-                final ParticipantData self = ParticipantData.getSelfParticipant(mms.getSubId());
-                final String selfId =
-                        BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, self);
-
-                final List<String> recipients = MmsUtils.getRecipientsByThread(mms.mThreadId);
-                String from = MmsUtils.getMmsSender(recipients, mms.getUri());
-                if (from == null) {
-                    LogUtil.w(TAG,
-                            "Downloaded an MMS without sender address; using unknown sender.");
-                    from = ParticipantData.getUnknownSenderDestination();
-                }
-                final ParticipantData sender = ParticipantData.getFromRawPhoneBySimLocale(from,
-                        subId);
-                final String senderParticipantId =
-                        BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, sender);
-                if (!senderParticipantId.equals(notificationParticipantId)) {
-                    LogUtil.e(TAG, "ProcessDownloadedMmsAction: Downloaded MMS message "
-                            + messageId + " has different sender (participantId = "
-                            + senderParticipantId + ") than notification ("
-                            + notificationParticipantId + ")");
-                }
-                final boolean blockedSender = BugleDatabaseOperations.isBlockedDestination(
-                        db, sender.getNormalizedDestination());
-                conversationId = BugleDatabaseOperations.getOrCreateConversationFromThreadId(db,
-                        mms.mThreadId, blockedSender, subId);
-
-                messageInFocusedConversation =
-                        DataModel.get().isFocusedConversation(conversationId);
-                messageInObservableConversation =
-                        DataModel.get().isNewMessageObservable(conversationId);
-
-                // TODO: Also write these values to the telephony provider
-                mms.mRead = messageInFocusedConversation;
-                mms.mSeen = messageInObservableConversation;
-
-                // Translate to our format
-                message = MmsUtils.createMmsMessage(mms, conversationId, senderParticipantId,
-                        selfId, MessageData.BUGLE_STATUS_INCOMING_COMPLETE);
-                // Update image sizes.
-                message.updateSizesForImageParts();
-                // Inform sync that message has been added at local received timestamp
-                final SyncManager syncManager = DataModel.get().getSyncManager();
-                syncManager.onNewMessageInserted(message.getReceivedTimeStamp());
-                final MessageData current = BugleDatabaseOperations.readMessageData(db, messageId);
-                if (current == null) {
-                    LogUtil.w(TAG, "Message deleted prior to update");
-                    BugleDatabaseOperations.insertNewMessageInTransaction(db, message);
-                } else {
-                    // Overwrite existing notification message
-                    message.updateMessageId(messageId);
-                    // Write message
-                    BugleDatabaseOperations.updateMessageInTransaction(db, message);
-                }
-
-                if (!TextUtils.equals(notificationConversationId, conversationId)) {
-                    // If this is a group conversation, the message is moved. So the original
-                    // 1v1 conversation (as referenced by notificationConversationId) could
-                    // be left with no non-draft message. Delete the conversation if that
-                    // happens. See the comment for the method below for why we need to do this.
-                    if (!BugleDatabaseOperations.deleteConversationIfEmptyInTransaction(
-                            db, notificationConversationId)) {
-                        BugleDatabaseOperations.maybeRefreshConversationMetadataInTransaction(
-                                db, notificationConversationId, messageId,
-                                true /*shouldAutoSwitchSelfId*/, blockedSender /*keepArchived*/);
-                    }
-                }
-
-                BugleDatabaseOperations.refreshConversationMetadataInTransaction(db, conversationId,
-                        true /*shouldAutoSwitchSelfId*/, blockedSender /*keepArchived*/);
-            } else {
-                messageInFocusedConversation =
-                        DataModel.get().isFocusedConversation(notificationConversationId);
-
-                // Default to retry status unless status indicates otherwise
-                int bugleStatus = statusIfFailed;
-                if (status == MmsUtils.MMS_REQUEST_MANUAL_RETRY) {
-                    bugleStatus = MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED;
-                } else if (status == MmsUtils.MMS_REQUEST_NO_RETRY) {
-                    bugleStatus = MessageData.BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE;
-                }
-                DownloadMmsAction.updateMessageStatus(mmsNotificationUri, messageId,
-                        notificationConversationId, bugleStatus, rawStatus);
-
-                // Log MMS download failed
-                final int resultCode = actionParameters.getInt(KEY_RESULT_CODE);
-                final int httpStatusCode = actionParameters.getInt(KEY_HTTP_STATUS_CODE);
-
-                // Just in case this was the latest message update the summary data
-                BugleDatabaseOperations.refreshConversationMetadataInTransaction(db,
-                        notificationConversationId, true /*shouldAutoSwitchSelfId*/,
-                        false /*keepArchived*/);
-            }
-
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-
-        if (mmsUri != null) {
-            // Update mms table with read status now we know the conversation id
-            final ContentValues values = new ContentValues(1);
-            values.put(Mms.READ, messageInFocusedConversation);
-            SqliteWrapper.update(context, context.getContentResolver(), mmsUri, values,
-                    null, null);
-        }
-
-        // Show a notification to let the user know a new message has arrived
-        BugleNotifications.update(false /*silent*/, conversationId, BugleNotifications.UPDATE_ALL);
-
-        // Messages may have changed in two conversations
-        if (conversationId != null) {
-            MessagingContentProvider.notifyMessagesChanged(conversationId);
-        }
-        MessagingContentProvider.notifyMessagesChanged(notificationConversationId);
-        MessagingContentProvider.notifyPartsChanged();
-
-        return message;
-    }
-
-    private ProcessDownloadedMmsAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<ProcessDownloadedMmsAction> CREATOR
-            = new Parcelable.Creator<ProcessDownloadedMmsAction>() {
-        @Override
-        public ProcessDownloadedMmsAction createFromParcel(final Parcel in) {
-            return new ProcessDownloadedMmsAction(in);
-        }
-
-        @Override
-        public ProcessDownloadedMmsAction[] newArray(final int size) {
-            return new ProcessDownloadedMmsAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ProcessPendingMessagesAction.java b/src/com/android/messaging/datamodel/action/ProcessPendingMessagesAction.java
deleted file mode 100644
index a897ce0..0000000
--- a/src/com/android/messaging/datamodel/action/ProcessPendingMessagesAction.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.telephony.ServiceState;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DataModelImpl;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.BuglePrefsKeys;
-import com.android.messaging.util.ConnectivityUtil;
-import com.android.messaging.util.ConnectivityUtil.ConnectivityListener;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Action used to lookup any messages in the pending send/download state and either fail them or
- * retry their action based on subscriptions. This action only initiates one retry at a time for
- * both sending/downloading. Further retries should be triggered by successful sending/downloading
- * of a message, network status change or exponential backoff timer.
- */
-public class ProcessPendingMessagesAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-    // PENDING_INTENT_BASE_REQUEST_CODE + subId(-1 for pre-L_MR1) is used per subscription uniquely.
-    private static final int PENDING_INTENT_BASE_REQUEST_CODE = 103;
-
-    private static final String KEY_SUB_ID = "sub_id";
-
-    public static void processFirstPendingMessage() {
-        PhoneUtils.forEachActiveSubscription(new PhoneUtils.SubscriptionRunnable() {
-            @Override
-            public void runForSubscription(final int subId) {
-                // Clear any pending alarms or connectivity events
-                unregister(subId);
-                // Clear retry count
-                setRetry(0, subId);
-                // Start action
-                final ProcessPendingMessagesAction action = new ProcessPendingMessagesAction();
-                action.actionParameters.putInt(KEY_SUB_ID, subId);
-                action.start();
-            }
-        });
-    }
-
-    public static void scheduleProcessPendingMessagesAction(final boolean failed,
-            final Action processingAction) {
-        final int subId = processingAction.actionParameters
-                .getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-        LogUtil.i(TAG, "ProcessPendingMessagesAction: Scheduling pending messages"
-                + (failed ? "(message failed)" : "") + " for subId " + subId);
-        // Can safely clear any pending alarms or connectivity events as either an action
-        // is currently running or we will run now or register if pending actions possible.
-        unregister(subId);
-
-        final boolean isDefaultSmsApp = PhoneUtils.getDefault().isDefaultSmsApp();
-        boolean scheduleAlarm = false;
-        // If message succeeded and if Bugle is default SMS app just carry on with next message
-        if (!failed && isDefaultSmsApp) {
-            // Clear retry attempt count as something just succeeded
-            setRetry(0, subId);
-
-            // Lookup and queue next message for each sending/downloading for immediate processing
-            // by background worker. If there are no pending messages, this will do nothing and
-            // return true.
-            final ProcessPendingMessagesAction action = new ProcessPendingMessagesAction();
-            if (action.queueActions(processingAction)) {
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    if (processingAction.hasBackgroundActions()) {
-                        LogUtil.v(TAG, "ProcessPendingMessagesAction: Action queued");
-                    } else {
-                        LogUtil.v(TAG, "ProcessPendingMessagesAction: No actions to queue");
-                    }
-                }
-                // Have queued next action if needed, nothing more to do
-                return;
-            }
-            // In case of error queuing schedule a retry
-            scheduleAlarm = true;
-            LogUtil.w(TAG, "ProcessPendingMessagesAction: Action failed to queue; retrying");
-        }
-        if (getHavePendingMessages(subId) || scheduleAlarm) {
-            // Still have a pending message that needs to be queued for processing
-            final ConnectivityListener listener = new ConnectivityListener() {
-                @Override
-                public void onPhoneStateChanged(final int serviceState) {
-                    if (serviceState == ServiceState.STATE_IN_SERVICE) {
-                        LogUtil.i(TAG, "ProcessPendingMessagesAction: Now connected for subId "
-                                + subId + ", starting action");
-
-                        // Clear any pending alarms or connectivity events but leave attempt count
-                        // alone
-                        unregister(subId);
-
-                        // Start action
-                        final ProcessPendingMessagesAction action =
-                                new ProcessPendingMessagesAction();
-                        action.actionParameters.putInt(KEY_SUB_ID, subId);
-                        action.start();
-                    }
-                }
-            };
-            // Read and increment attempt number from shared prefs
-            final int retryAttempt = getNextRetry(subId);
-            register(listener, retryAttempt, subId);
-        } else {
-            // No more pending messages (presumably the message that failed has expired) or it
-            // may be possible that a send and a download are already in process.
-            // Clear retry attempt count.
-            // TODO Might be premature if send and download in process...
-            // but worst case means we try to send a bit more often.
-            setRetry(0, subId);
-            LogUtil.i(TAG, "ProcessPendingMessagesAction: No more pending messages");
-        }
-    }
-
-    private static void register(final ConnectivityListener listener, final int retryAttempt,
-            int subId) {
-        int retryNumber = retryAttempt;
-
-        // Register to be notified about connectivity changes
-        ConnectivityUtil connectivityUtil = DataModelImpl.getConnectivityUtil(subId);
-        if (connectivityUtil != null) {
-            connectivityUtil.register(listener);
-        }
-
-        final ProcessPendingMessagesAction action = new ProcessPendingMessagesAction();
-        action.actionParameters.putInt(KEY_SUB_ID, subId);
-        final long initialBackoffMs = BugleGservices.get().getLong(
-                BugleGservicesKeys.INITIAL_MESSAGE_RESEND_DELAY_MS,
-                BugleGservicesKeys.INITIAL_MESSAGE_RESEND_DELAY_MS_DEFAULT);
-        final long maxDelayMs = BugleGservices.get().getLong(
-                BugleGservicesKeys.MAX_MESSAGE_RESEND_DELAY_MS,
-                BugleGservicesKeys.MAX_MESSAGE_RESEND_DELAY_MS_DEFAULT);
-        long delayMs;
-        long nextDelayMs = initialBackoffMs;
-        do {
-            delayMs = nextDelayMs;
-            retryNumber--;
-            nextDelayMs = delayMs * 2;
-        }
-        while (retryNumber > 0 && nextDelayMs < maxDelayMs);
-
-        LogUtil.i(TAG, "ProcessPendingMessagesAction: Registering for retry #" + retryAttempt
-                + " in " + delayMs + " ms for subId " + subId);
-
-        action.schedule(PENDING_INTENT_BASE_REQUEST_CODE + subId, delayMs);
-    }
-
-    private static void unregister(final int subId) {
-        // Clear any pending alarms or connectivity events
-        ConnectivityUtil connectivityUtil = DataModelImpl.getConnectivityUtil(subId);
-        if (connectivityUtil != null) {
-            connectivityUtil.unregister();
-        }
-
-        final ProcessPendingMessagesAction action = new ProcessPendingMessagesAction();
-        action.schedule(PENDING_INTENT_BASE_REQUEST_CODE + subId, Long.MAX_VALUE);
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "ProcessPendingMessagesAction: Unregistering for connectivity changed "
-                    + "events and clearing scheduled alarm for subId " + subId);
-        }
-    }
-
-    private static void setRetry(final int retryAttempt, int subId) {
-        final BuglePrefs prefs = Factory.get().getSubscriptionPrefs(subId);
-        prefs.putInt(BuglePrefsKeys.PROCESS_PENDING_MESSAGES_RETRY_COUNT, retryAttempt);
-    }
-
-    private static int getNextRetry(int subId) {
-        final BuglePrefs prefs = Factory.get().getSubscriptionPrefs(subId);
-        final int retryAttempt =
-                prefs.getInt(BuglePrefsKeys.PROCESS_PENDING_MESSAGES_RETRY_COUNT, 0) + 1;
-        prefs.putInt(BuglePrefsKeys.PROCESS_PENDING_MESSAGES_RETRY_COUNT, retryAttempt);
-        return retryAttempt;
-    }
-
-    private ProcessPendingMessagesAction() {
-    }
-
-    /**
-     * Read from the DB and determine if there are any messages we should process
-     *
-     * @param subId the subId
-     * @return true if we have pending messages
-     */
-    private static boolean getHavePendingMessages(final int subId) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final long now = System.currentTimeMillis();
-        final String selfId = ParticipantData.getParticipantId(db, subId);
-        if (selfId == null) {
-            // This could be happened before refreshing participant.
-            LogUtil.w(TAG, "ProcessPendingMessagesAction: selfId is null for subId " + subId);
-            return false;
-        }
-
-        final String toSendMessageId = findNextMessageToSend(db, now, selfId);
-        if (toSendMessageId != null) {
-            return true;
-        } else {
-            final String toDownloadMessageId = findNextMessageToDownload(db, now, selfId);
-            if (toDownloadMessageId != null) {
-                return true;
-            }
-        }
-        // Messages may be in the process of sending/downloading even when there are no pending
-        // messages...
-        return false;
-    }
-
-    /**
-     * Queue any pending actions
-     *
-     * @param actionState
-     * @return true if action queued (or no actions to queue) else false
-     */
-    private boolean queueActions(final Action processingAction) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final long now = System.currentTimeMillis();
-        boolean succeeded = true;
-        final int subId = processingAction.actionParameters
-                .getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-
-        LogUtil.i(TAG, "ProcessPendingMessagesAction: Start queueing for subId " + subId);
-
-        final String selfId = ParticipantData.getParticipantId(db, subId);
-        if (selfId == null) {
-            // This could be happened before refreshing participant.
-            LogUtil.w(TAG, "ProcessPendingMessagesAction: selfId is null");
-            return false;
-        }
-
-        // Will queue no more than one message to send plus one message to download
-        // This keeps outgoing messages "in order" but allow downloads to happen even if sending
-        // gets blocked until messages time out. Manual resend bumps messages to head of queue.
-        final String toSendMessageId = findNextMessageToSend(db, now, selfId);
-        final String toDownloadMessageId = findNextMessageToDownload(db, now, selfId);
-        if (toSendMessageId != null) {
-            LogUtil.i(TAG, "ProcessPendingMessagesAction: Queueing message " + toSendMessageId
-                    + " for sending");
-            // This could queue nothing
-            if (!SendMessageAction.queueForSendInBackground(toSendMessageId, processingAction)) {
-                LogUtil.w(TAG, "ProcessPendingMessagesAction: Failed to queue message "
-                        + toSendMessageId + " for sending");
-                succeeded = false;
-            }
-        }
-        if (toDownloadMessageId != null) {
-            LogUtil.i(TAG, "ProcessPendingMessagesAction: Queueing message " + toDownloadMessageId
-                    + " for download");
-            // This could queue nothing
-            if (!DownloadMmsAction.queueMmsForDownloadInBackground(toDownloadMessageId,
-                    processingAction)) {
-                LogUtil.w(TAG, "ProcessPendingMessagesAction: Failed to queue message "
-                        + toDownloadMessageId + " for download");
-                succeeded = false;
-            }
-        }
-        if (toSendMessageId == null && toDownloadMessageId == null) {
-            LogUtil.i(TAG, "ProcessPendingMessagesAction: No messages to send or download");
-        }
-        return succeeded;
-    }
-
-    @Override
-    protected Object executeAction() {
-        final int subId = actionParameters.getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-        // If triggered by alarm will not have unregistered yet
-        unregister(subId);
-
-        if (PhoneUtils.getDefault().isDefaultSmsApp()) {
-            if (!queueActions(this)) {
-                LogUtil.v(TAG, "ProcessPendingMessagesAction: rescheduling");
-                // TODO: Need to clear retry count here?
-                scheduleProcessPendingMessagesAction(true /* failed */, this);
-            }
-        } else {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "ProcessPendingMessagesAction: Not default SMS app; rescheduling");
-            }
-            scheduleProcessPendingMessagesAction(true /* failed */, this);
-        }
-
-        return null;
-    }
-
-    private static String findNextMessageToSend(final DatabaseWrapper db, final long now,
-            final String selfId) {
-        String toSendMessageId = null;
-        Cursor cursor = null;
-        int sendingCnt = 0;
-        int pendingCnt = 0;
-        int failedCnt = 0;
-        db.beginTransaction();
-        try {
-            // First check to see if we have any messages already sending
-            sendingCnt = (int) db.queryNumEntries(DatabaseHelper.MESSAGES_TABLE,
-                    DatabaseHelper.MessageColumns.STATUS + " IN (?, ?) AND "
-                    + DatabaseHelper.MessageColumns.SELF_PARTICIPANT_ID + " =? ",
-                    new String[] {
-                        Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_SENDING),
-                        Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_RESENDING),
-                        selfId}
-                    );
-
-            // Look for messages we could send
-            cursor = db.query(DatabaseHelper.MESSAGES_TABLE,
-                    MessageData.getProjection(),
-                    DatabaseHelper.MessageColumns.STATUS + " IN (?, ?) AND "
-                    + DatabaseHelper.MessageColumns.SELF_PARTICIPANT_ID + " =? ",
-                    new String[] {
-                        Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND),
-                        Integer.toString(MessageData.BUGLE_STATUS_OUTGOING_AWAITING_RETRY),
-                        selfId
-                    },
-                    null,
-                    null,
-                    DatabaseHelper.MessageColumns.RECEIVED_TIMESTAMP + " ASC");
-            pendingCnt = cursor.getCount();
-
-            final ContentValues values = new ContentValues();
-            values.put(DatabaseHelper.MessageColumns.STATUS,
-                    MessageData.BUGLE_STATUS_OUTGOING_FAILED);
-
-            // Prior to L_MR1, isActiveSubscription is true always
-            boolean isActiveSubscription = true;
-            if (OsUtil.isAtLeastL_MR1()) {
-                final ParticipantData messageSelf =
-                        BugleDatabaseOperations.getExistingParticipant(db, selfId);
-                if (messageSelf == null || !messageSelf.isActiveSubscription()) {
-                    isActiveSubscription = false;
-                }
-            }
-            while (cursor.moveToNext()) {
-                final MessageData message = new MessageData();
-                message.bind(cursor);
-
-                // Mark this message as failed if the message's self is inactive or the message is
-                // outside of resend window
-                if (!isActiveSubscription || !message.getInResendWindow(now)) {
-                    failedCnt++;
-
-                    // Mark message as failed
-                    BugleDatabaseOperations.updateMessageRow(db, message.getMessageId(), values);
-                    MessagingContentProvider.notifyMessagesChanged(message.getConversationId());
-                } else {
-                    // If no messages currently sending
-                    if (sendingCnt == 0) {
-                        // Send this message
-                        toSendMessageId = message.getMessageId();
-                    }
-                    break;
-                }
-            }
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "ProcessPendingMessagesAction: "
-                    + sendingCnt + " messages already sending, "
-                    + pendingCnt + " messages to send, "
-                    + failedCnt + " failed messages");
-        }
-
-        return toSendMessageId;
-    }
-
-    private static String findNextMessageToDownload(final DatabaseWrapper db, final long now,
-            final String selfId) {
-        String toDownloadMessageId = null;
-        Cursor cursor = null;
-        int downloadingCnt = 0;
-        int pendingCnt = 0;
-        db.beginTransaction();
-        try {
-            // First check if we have any messages already downloading
-            downloadingCnt = (int) db.queryNumEntries(DatabaseHelper.MESSAGES_TABLE,
-                    DatabaseHelper.MessageColumns.STATUS + " IN (?, ?) AND "
-                    + DatabaseHelper.MessageColumns.SELF_PARTICIPANT_ID + " =?",
-                    new String[] {
-                        Integer.toString(MessageData.BUGLE_STATUS_INCOMING_AUTO_DOWNLOADING),
-                        Integer.toString(MessageData.BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING),
-                        selfId
-                    });
-
-            // TODO: This query is not actually needed if downloadingCnt == 0.
-            cursor = db.query(DatabaseHelper.MESSAGES_TABLE,
-                    MessageData.getProjection(),
-                    DatabaseHelper.MessageColumns.STATUS + " IN (?, ?) AND "
-                    + DatabaseHelper.MessageColumns.SELF_PARTICIPANT_ID + " =? ",
-                    new String[]{
-                        Integer.toString(MessageData.BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD),
-                        Integer.toString(
-                                MessageData.BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD),
-                        selfId
-                    },
-                    null,
-                    null,
-                    DatabaseHelper.MessageColumns.RECEIVED_TIMESTAMP + " ASC");
-
-            pendingCnt = cursor.getCount();
-
-            // If no messages are currently downloading and there is a download pending,
-            // queue the download of the oldest pending message.
-            if (downloadingCnt == 0 && cursor.moveToNext()) {
-                // Always start the next pending message. We will check if a download has
-                // expired in DownloadMmsAction and mark message failed there.
-                final MessageData message = new MessageData();
-                message.bind(cursor);
-                toDownloadMessageId = message.getMessageId();
-            }
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "ProcessPendingMessagesAction: "
-                    + downloadingCnt + " messages already downloading, "
-                    + pendingCnt + " messages to download");
-        }
-
-        return toDownloadMessageId;
-    }
-
-    private ProcessPendingMessagesAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<ProcessPendingMessagesAction> CREATOR
-            = new Parcelable.Creator<ProcessPendingMessagesAction>() {
-        @Override
-        public ProcessPendingMessagesAction createFromParcel(final Parcel in) {
-            return new ProcessPendingMessagesAction(in);
-        }
-
-        @Override
-        public ProcessPendingMessagesAction[] newArray(final int size) {
-            return new ProcessPendingMessagesAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ProcessSentMessageAction.java b/src/com/android/messaging/datamodel/action/ProcessSentMessageAction.java
deleted file mode 100644
index 489a0f1..0000000
--- a/src/com/android/messaging/datamodel/action/ProcessSentMessageAction.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.app.Activity;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.SmsManager;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MmsFileProvider;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.mmslib.pdu.SendConf;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.sms.MmsSender;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-import java.io.File;
-import java.util.ArrayList;
-
-/**
-* Update message status to reflect success or failure
-* Can also update the message itself if a "final" message is now available from telephony db
-*/
-public class ProcessSentMessageAction extends Action {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    // These are always set
-    private static final String KEY_SMS = "is_sms";
-    private static final String KEY_SENT_BY_PLATFORM = "sent_by_platform";
-
-    // These are set when we're processing a message sent by the user. They are null for messages
-    // sent automatically (e.g. a NotifyRespInd/AcknowledgeInd sent in response to a download).
-    private static final String KEY_MESSAGE_ID = "message_id";
-    private static final String KEY_MESSAGE_URI = "message_uri";
-    private static final String KEY_UPDATED_MESSAGE_URI = "updated_message_uri";
-    private static final String KEY_SUB_ID = "sub_id";
-
-    // These are set for messages sent by the platform (L+)
-    public static final String KEY_RESULT_CODE = "result_code";
-    public static final String KEY_HTTP_STATUS_CODE = "http_status_code";
-    private static final String KEY_CONTENT_URI = "content_uri";
-    private static final String KEY_RESPONSE = "response";
-    private static final String KEY_RESPONSE_IMPORTANT = "response_important";
-
-    // These are set for messages we sent ourself (legacy), or which we fast-failed before sending.
-    private static final String KEY_STATUS = "status";
-    private static final String KEY_RAW_STATUS = "raw_status";
-
-    // This is called when MMS lib API returns via PendingIntent
-    public static void processMmsSent(final int resultCode, final Uri messageUri,
-            final Bundle extras) {
-        final ProcessSentMessageAction action = new ProcessSentMessageAction();
-        final Bundle params = action.actionParameters;
-        params.putBoolean(KEY_SMS, false);
-        params.putBoolean(KEY_SENT_BY_PLATFORM, true);
-        params.putString(KEY_MESSAGE_ID, extras.getString(SendMessageAction.EXTRA_MESSAGE_ID));
-        params.putParcelable(KEY_MESSAGE_URI, messageUri);
-        params.putParcelable(KEY_UPDATED_MESSAGE_URI,
-                extras.getParcelable(SendMessageAction.EXTRA_UPDATED_MESSAGE_URI));
-        params.putInt(KEY_SUB_ID,
-                extras.getInt(SendMessageAction.KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID));
-        params.putInt(KEY_RESULT_CODE, resultCode);
-        params.putInt(KEY_HTTP_STATUS_CODE, extras.getInt(SmsManager.EXTRA_MMS_HTTP_STATUS, 0));
-        params.putParcelable(KEY_CONTENT_URI,
-                extras.getParcelable(SendMessageAction.EXTRA_CONTENT_URI));
-        params.putByteArray(KEY_RESPONSE, extras.getByteArray(SmsManager.EXTRA_MMS_DATA));
-        params.putBoolean(KEY_RESPONSE_IMPORTANT,
-                extras.getBoolean(SendMessageAction.EXTRA_RESPONSE_IMPORTANT));
-        action.start();
-    }
-
-    public static void processMessageSentFastFailed(final String messageId,
-            final Uri messageUri, final Uri updatedMessageUri, final int subId, final boolean isSms,
-            final int status, final int rawStatus, final int resultCode) {
-        final ProcessSentMessageAction action = new ProcessSentMessageAction();
-        final Bundle params = action.actionParameters;
-        params.putBoolean(KEY_SMS, isSms);
-        params.putBoolean(KEY_SENT_BY_PLATFORM, false);
-        params.putString(KEY_MESSAGE_ID, messageId);
-        params.putParcelable(KEY_MESSAGE_URI, messageUri);
-        params.putParcelable(KEY_UPDATED_MESSAGE_URI, updatedMessageUri);
-        params.putInt(KEY_SUB_ID, subId);
-        params.putInt(KEY_STATUS, status);
-        params.putInt(KEY_RAW_STATUS, rawStatus);
-        params.putInt(KEY_RESULT_CODE, resultCode);
-        action.start();
-    }
-
-    private ProcessSentMessageAction() {
-        // Callers must use one of the static methods above
-    }
-
-    /**
-    * Update message status to reflect success or failure
-    * Can also update the message itself if a "final" message is now available from telephony db
-    */
-    @Override
-    protected Object executeAction() {
-        final Context context = Factory.get().getApplicationContext();
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-        final Uri messageUri = actionParameters.getParcelable(KEY_MESSAGE_URI);
-        final Uri updatedMessageUri = actionParameters.getParcelable(KEY_UPDATED_MESSAGE_URI);
-        final boolean isSms = actionParameters.getBoolean(KEY_SMS);
-        final boolean sentByPlatform = actionParameters.getBoolean(KEY_SENT_BY_PLATFORM);
-
-        int status = actionParameters.getInt(KEY_STATUS, MmsUtils.MMS_REQUEST_MANUAL_RETRY);
-        int rawStatus = actionParameters.getInt(KEY_RAW_STATUS,
-                MmsUtils.PDU_HEADER_VALUE_UNDEFINED);
-        final int subId = actionParameters.getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-
-        if (sentByPlatform) {
-            // Delete temporary file backing the contentUri passed to MMS service
-            final Uri contentUri = actionParameters.getParcelable(KEY_CONTENT_URI);
-            Assert.isTrue(contentUri != null);
-            final File tempFile = MmsFileProvider.getFile(contentUri);
-            long messageSize = 0;
-            if (tempFile.exists()) {
-                messageSize = tempFile.length();
-                tempFile.delete();
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "ProcessSentMessageAction: Deleted temp file with outgoing "
-                            + "MMS pdu: " + contentUri);
-                }
-            }
-
-            final int resultCode = actionParameters.getInt(KEY_RESULT_CODE);
-            final boolean responseImportant = actionParameters.getBoolean(KEY_RESPONSE_IMPORTANT);
-            if (resultCode == Activity.RESULT_OK) {
-                if (responseImportant) {
-                    // Get the status from the response PDU and update telephony
-                    final byte[] response = actionParameters.getByteArray(KEY_RESPONSE);
-                    final SendConf sendConf = MmsSender.parseSendConf(response, subId);
-                    if (sendConf != null) {
-                        final MmsUtils.StatusPlusUri result =
-                                MmsUtils.updateSentMmsMessageStatus(context, messageUri, sendConf);
-                        status = result.status;
-                        rawStatus = result.rawStatus;
-                    }
-                }
-            } else {
-                String errorMsg = "ProcessSentMessageAction: Platform returned error resultCode: "
-                        + resultCode;
-                final int httpStatusCode = actionParameters.getInt(KEY_HTTP_STATUS_CODE);
-                if (httpStatusCode != 0) {
-                    errorMsg += (", HTTP status code: " + httpStatusCode);
-                }
-                LogUtil.w(TAG, errorMsg);
-                status = MmsSender.getErrorResultStatus(resultCode, httpStatusCode);
-
-                // Check for MMS messages that failed because they exceeded the maximum size,
-                // indicated by an I/O error from the platform.
-                if (resultCode == SmsManager.MMS_ERROR_IO_ERROR) {
-                    if (messageSize > MmsConfig.get(subId).getMaxMessageSize()) {
-                        rawStatus = MessageData.RAW_TELEPHONY_STATUS_MESSAGE_TOO_BIG;
-                    }
-                }
-            }
-        }
-        if (messageId != null) {
-            final int resultCode = actionParameters.getInt(KEY_RESULT_CODE);
-            final int httpStatusCode = actionParameters.getInt(KEY_HTTP_STATUS_CODE);
-            processResult(
-                    messageId, updatedMessageUri, status, rawStatus, isSms, this, subId,
-                    resultCode, httpStatusCode);
-        } else {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "ProcessSentMessageAction: No sent message to process (it was "
-                        + "probably a notify response for an MMS download)");
-            }
-        }
-        return null;
-    }
-
-    static void processResult(final String messageId, Uri updatedMessageUri, int status,
-            final int rawStatus, final boolean isSms, final Action processingAction,
-            final int subId, final int resultCode, final int httpStatusCode) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        MessageData message = BugleDatabaseOperations.readMessage(db, messageId);
-        final MessageData originalMessage = message;
-        if (message == null) {
-            LogUtil.w(TAG, "ProcessSentMessageAction: Sent message " + messageId
-                    + " missing from local database");
-            ProcessPendingMessagesAction.scheduleProcessPendingMessagesAction(
-                    true /* failed */, processingAction);
-            return;
-        }
-        final String conversationId = message.getConversationId();
-        if (updatedMessageUri != null) {
-            // Update message if we have newly written final message in the telephony db
-            final MessageData update = MmsUtils.readSendingMmsMessage(updatedMessageUri,
-                    conversationId, message.getParticipantId(), message.getSelfId());
-            if (update != null) {
-                // Set message Id of final message to that of the existing place holder.
-                update.updateMessageId(message.getMessageId());
-                // Update image sizes.
-                update.updateSizesForImageParts();
-                // Temp attachments are no longer needed
-                for (final MessagePartData part : message.getParts()) {
-                    part.destroySync();
-                }
-                message = update;
-                // processResult will rewrite the complete message as part of update
-            } else {
-                updatedMessageUri = null;
-                status = MmsUtils.MMS_REQUEST_MANUAL_RETRY;
-                LogUtil.e(TAG, "ProcessSentMessageAction: Unable to read sending message");
-            }
-        }
-
-        final long timestamp = System.currentTimeMillis();
-        boolean failed;
-        if (status == MmsUtils.MMS_REQUEST_SUCCEEDED) {
-            message.markMessageSent(timestamp);
-            failed = false;
-        } else if (status == MmsUtils.MMS_REQUEST_AUTO_RETRY
-                && message.getInResendWindow(timestamp)) {
-            message.markMessageNotSent(timestamp);
-            message.setRawTelephonyStatus(rawStatus);
-            failed = false;
-        } else {
-            message.markMessageFailed(timestamp);
-            message.setRawTelephonyStatus(rawStatus);
-            message.setMessageSeen(false);
-            failed = true;
-        }
-
-        // We have special handling for when a message to an emergency number fails. In this case,
-        // we notify immediately of any failure (even if we auto-retry), and instruct the user to
-        // try calling the emergency number instead.
-        if (status != MmsUtils.MMS_REQUEST_SUCCEEDED) {
-            final ArrayList<String> recipients =
-                    BugleDatabaseOperations.getRecipientsForConversation(db, conversationId);
-            for (final String recipient : recipients) {
-                if (PhoneNumberUtils.isEmergencyNumber(recipient)) {
-                    BugleNotifications.notifyEmergencySmsFailed(recipient, conversationId);
-                    message.markMessageFailedEmergencyNumber(timestamp);
-                    failed = true;
-                    break;
-                }
-            }
-        }
-
-        // Update the message status and optionally refresh the message with final parts/values.
-        if (SendMessageAction.updateMessageAndStatus(isSms, message, updatedMessageUri, failed)) {
-            // We shouldn't show any notifications if we're not allowed to modify Telephony for
-            // this message.
-            if (failed) {
-                BugleNotifications.update(false, BugleNotifications.UPDATE_ERRORS);
-            }
-            BugleActionToasts.onSendMessageOrManualDownloadActionCompleted(
-                    conversationId, !failed, status, isSms, subId, true/*isSend*/);
-        }
-
-        LogUtil.i(TAG, "ProcessSentMessageAction: Done sending " + (isSms ? "SMS" : "MMS")
-                + " message " + message.getMessageId()
-                + " in conversation " + conversationId
-                + "; status is " + MmsUtils.getRequestStatusDescription(status));
-
-        // Whether we succeeded or failed we will check and maybe schedule some more work
-        ProcessPendingMessagesAction.scheduleProcessPendingMessagesAction(
-                status != MmsUtils.MMS_REQUEST_SUCCEEDED, processingAction);
-    }
-
-    private ProcessSentMessageAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<ProcessSentMessageAction> CREATOR
-            = new Parcelable.Creator<ProcessSentMessageAction>() {
-        @Override
-        public ProcessSentMessageAction createFromParcel(final Parcel in) {
-            return new ProcessSentMessageAction(in);
-        }
-
-        @Override
-        public ProcessSentMessageAction[] newArray(final int size) {
-            return new ProcessSentMessageAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ReadDraftDataAction.java b/src/com/android/messaging/datamodel/action/ReadDraftDataAction.java
deleted file mode 100644
index 7ac646b..0000000
--- a/src/com/android/messaging/datamodel/action/ReadDraftDataAction.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.action.ActionMonitor.ActionCompletedListener;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.RunsOnMainThread;
-import com.android.messaging.util.LogUtil;
-import com.google.common.annotations.VisibleForTesting;
-
-public class ReadDraftDataAction extends Action implements Parcelable {
-
-    /**
-     * Interface for ReadDraftDataAction listeners
-     */
-    public interface ReadDraftDataActionListener {
-        @RunsOnMainThread
-        abstract void onReadDraftDataSucceeded(final ReadDraftDataAction action,
-                final Object data, final MessageData message,
-                final ConversationListItemData conversation);
-        @RunsOnMainThread
-        abstract void onReadDraftDataFailed(final ReadDraftDataAction action, final Object data);
-    }
-
-    /**
-     * Read draft message and associated data (with listener)
-     */
-    public static ReadDraftDataActionMonitor readDraftData(final String conversationId,
-            final MessageData incomingDraft, final Object data,
-            final ReadDraftDataActionListener listener) {
-        final ReadDraftDataActionMonitor monitor = new ReadDraftDataActionMonitor(data,
-                listener);
-        final ReadDraftDataAction action = new ReadDraftDataAction(conversationId,
-                incomingDraft, monitor.getActionKey());
-        action.start(monitor);
-        return monitor;
-    }
-
-    private static final String KEY_CONVERSATION_ID = "conversationId";
-    private static final String KEY_INCOMING_DRAFT = "draftMessage";
-
-    private ReadDraftDataAction(final String conversationId, final MessageData incomingDraft,
-            final String actionKey) {
-        super(actionKey);
-        actionParameters.putString(KEY_CONVERSATION_ID, conversationId);
-        actionParameters.putParcelable(KEY_INCOMING_DRAFT, incomingDraft);
-    }
-
-    @VisibleForTesting
-    class DraftData {
-        public final MessageData message;
-        public final ConversationListItemData conversation;
-
-        DraftData(final MessageData message, final ConversationListItemData conversation) {
-            this.message = message;
-            this.conversation = conversation;
-        }
-    }
-
-    @Override
-    protected Object executeAction() {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final String conversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-        final MessageData incomingDraft = actionParameters.getParcelable(KEY_INCOMING_DRAFT);
-        final ConversationListItemData conversation =
-                ConversationListItemData.getExistingConversation(db, conversationId);
-        MessageData message = null;
-        if (conversation != null) {
-            if (incomingDraft == null) {
-                message = BugleDatabaseOperations.readDraftMessageData(db, conversationId,
-                        conversation.getSelfId());
-            }
-            if (message == null) {
-                message = MessageData.createDraftMessage(conversationId, conversation.getSelfId(),
-                        incomingDraft);
-                LogUtil.d(LogUtil.BUGLE_TAG, "ReadDraftMessage: created draft. "
-                        + "conversationId=" + conversationId
-                        + " selfId=" + conversation.getSelfId());
-            } else {
-                LogUtil.d(LogUtil.BUGLE_TAG, "ReadDraftMessage: read draft. "
-                        + "conversationId=" + conversationId
-                        + " selfId=" + conversation.getSelfId());
-            }
-            return new DraftData(message, conversation);
-        }
-        return null;
-    }
-
-    /**
-     * An operation that notifies a listener upon completion
-     */
-    public static class ReadDraftDataActionMonitor extends ActionMonitor
-            implements ActionCompletedListener {
-
-        private final ReadDraftDataActionListener mListener;
-
-        ReadDraftDataActionMonitor(final Object data,
-                final ReadDraftDataActionListener completed) {
-            super(STATE_CREATED, generateUniqueActionKey("ReadDraftDataAction"), data);
-            setCompletedListener(this);
-            mListener = completed;
-        }
-
-        @Override
-        public void onActionSucceeded(final ActionMonitor monitor,
-                final Action action, final Object data, final Object result) {
-            final DraftData draft = (DraftData) result;
-            if (draft == null) {
-                mListener.onReadDraftDataFailed((ReadDraftDataAction) action, data);
-            } else {
-                mListener.onReadDraftDataSucceeded((ReadDraftDataAction) action, data,
-                        draft.message, draft.conversation);
-            }
-        }
-
-        @Override
-        public void onActionFailed(final ActionMonitor monitor,
-                final Action action, final Object data, final Object result) {
-            Assert.fail("Reading draft should not fail");
-        }
-    }
-
-    private ReadDraftDataAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<ReadDraftDataAction> CREATOR
-            = new Parcelable.Creator<ReadDraftDataAction>() {
-        @Override
-        public ReadDraftDataAction createFromParcel(final Parcel in) {
-            return new ReadDraftDataAction(in);
-        }
-
-        @Override
-        public ReadDraftDataAction[] newArray(final int size) {
-            return new ReadDraftDataAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ReceiveMmsMessageAction.java b/src/com/android/messaging/datamodel/action/ReceiveMmsMessageAction.java
deleted file mode 100644
index 6794b17..0000000
--- a/src/com/android/messaging/datamodel/action/ReceiveMmsMessageAction.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DataModelException;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.mmslib.pdu.PduHeaders;
-import com.android.messaging.sms.DatabaseMessages;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.LogUtil;
-
-import java.util.List;
-
-/**
- * Action used to "receive" an incoming message
- */
-public class ReceiveMmsMessageAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    private static final String KEY_SUB_ID = "sub_id";
-    private static final String KEY_PUSH_DATA = "push_data";
-    private static final String KEY_TRANSACTION_ID = "transaction_id";
-    private static final String KEY_CONTENT_LOCATION = "content_location";
-
-    /**
-     * Create a message received from a particular number in a particular conversation
-     */
-    public ReceiveMmsMessageAction(final int subId, final byte[] pushData) {
-        actionParameters.putInt(KEY_SUB_ID, subId);
-        actionParameters.putByteArray(KEY_PUSH_DATA, pushData);
-    }
-
-    @Override
-    protected Object executeAction() {
-        final Context context = Factory.get().getApplicationContext();
-        final int subId = actionParameters.getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-        final byte[] pushData = actionParameters.getByteArray(KEY_PUSH_DATA);
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        // Write received message to telephony DB
-        MessageData message = null;
-        final ParticipantData self = BugleDatabaseOperations.getOrCreateSelf(db, subId);
-
-        final long received = System.currentTimeMillis();
-        // Inform sync that message has been added at local received timestamp
-        final SyncManager syncManager = DataModel.get().getSyncManager();
-        syncManager.onNewMessageInserted(received);
-
-        // TODO: Should use local time to set received time in MMS message
-        final DatabaseMessages.MmsMessage mms = MmsUtils.processReceivedPdu(
-                context, pushData, self.getSubId(), self.getNormalizedDestination());
-
-        if (mms != null) {
-            final List<String> recipients = MmsUtils.getRecipientsByThread(mms.mThreadId);
-            String from = MmsUtils.getMmsSender(recipients, mms.getUri());
-            if (from == null) {
-                LogUtil.w(TAG, "Received an MMS without sender address; using unknown sender.");
-                from = ParticipantData.getUnknownSenderDestination();
-            }
-            final ParticipantData rawSender = ParticipantData.getFromRawPhoneBySimLocale(
-                    from, subId);
-            final boolean blocked = BugleDatabaseOperations.isBlockedDestination(
-                    db, rawSender.getNormalizedDestination());
-            final boolean autoDownload = (!blocked && MmsUtils.allowMmsAutoRetrieve(subId));
-            final String conversationId =
-                    BugleDatabaseOperations.getOrCreateConversationFromThreadId(db, mms.mThreadId,
-                            blocked, subId);
-
-            final boolean messageInFocusedConversation =
-                    DataModel.get().isFocusedConversation(conversationId);
-            final boolean messageInObservableConversation =
-                    DataModel.get().isNewMessageObservable(conversationId);
-
-            // TODO: Also write these values to the telephony provider
-            mms.mRead = messageInFocusedConversation;
-            mms.mSeen = messageInObservableConversation || blocked;
-
-            // Write received placeholder message to our DB
-            db.beginTransaction();
-            try {
-                final String participantId =
-                        BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, rawSender);
-                final String selfId =
-                        BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, self);
-
-                message = MmsUtils.createMmsMessage(mms, conversationId, participantId, selfId,
-                        (autoDownload ? MessageData.BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD :
-                            MessageData.BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD));
-                // Write the message
-                BugleDatabaseOperations.insertNewMessageInTransaction(db, message);
-
-                if (!autoDownload) {
-                    BugleDatabaseOperations.updateConversationMetadataInTransaction(db,
-                            conversationId, message.getMessageId(), message.getReceivedTimeStamp(),
-                            blocked, true /* shouldAutoSwitchSelfId */);
-                    final ParticipantData sender = ParticipantData .getFromId(
-                            db, participantId);
-                    BugleActionToasts.onMessageReceived(conversationId, sender, message);
-                }
-                // else update the conversation once we have downloaded final message (or failed)
-                db.setTransactionSuccessful();
-            } finally {
-                db.endTransaction();
-            }
-
-            // Update conversation if not immediately initiating a download
-            if (!autoDownload) {
-                MessagingContentProvider.notifyMessagesChanged(message.getConversationId());
-                MessagingContentProvider.notifyPartsChanged();
-
-                // Show a notification to let the user know a new message has arrived
-                BugleNotifications.update(false/*silent*/, conversationId,
-                        BugleNotifications.UPDATE_ALL);
-
-                // Send the NotifyRespInd with DEFERRED status since no auto download
-                actionParameters.putString(KEY_TRANSACTION_ID, mms.mTransactionId);
-                actionParameters.putString(KEY_CONTENT_LOCATION, mms.mContentLocation);
-                requestBackgroundWork();
-            }
-
-            LogUtil.i(TAG, "ReceiveMmsMessageAction: Received MMS message " + message.getMessageId()
-                    + " in conversation " + message.getConversationId()
-                    + ", uri = " + message.getSmsMessageUri());
-        } else {
-            LogUtil.e(TAG, "ReceiveMmsMessageAction: Skipping processing of incoming PDU");
-        }
-
-        ProcessPendingMessagesAction.scheduleProcessPendingMessagesAction(false, this);
-
-        return message;
-    }
-
-    @Override
-    protected Bundle doBackgroundWork() throws DataModelException {
-        final Context context = Factory.get().getApplicationContext();
-        final int subId = actionParameters.getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-        final String transactionId = actionParameters.getString(KEY_TRANSACTION_ID);
-        final String contentLocation = actionParameters.getString(KEY_CONTENT_LOCATION);
-        MmsUtils.sendNotifyResponseForMmsDownload(
-                context,
-                subId,
-                MmsUtils.stringToBytes(transactionId, "UTF-8"),
-                contentLocation,
-                PduHeaders.STATUS_DEFERRED);
-        // We don't need to return anything.
-        return null;
-    }
-
-    private ReceiveMmsMessageAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<ReceiveMmsMessageAction> CREATOR
-            = new Parcelable.Creator<ReceiveMmsMessageAction>() {
-        @Override
-        public ReceiveMmsMessageAction createFromParcel(final Parcel in) {
-            return new ReceiveMmsMessageAction(in);
-        }
-
-        @Override
-        public ReceiveMmsMessageAction[] newArray(final int size) {
-            return new ReceiveMmsMessageAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java b/src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java
deleted file mode 100644
index cb7a35d..0000000
--- a/src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.Telephony.Sms;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsSmsUtils;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-
-/**
- * Action used to "receive" an incoming message
- */
-public class ReceiveSmsMessageAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    private static final String KEY_MESSAGE_VALUES = "message_values";
-    private static final String KEY_SUB_ID = "sub_id";
-
-    /**
-     * Create a message received from a particular number in a particular conversation
-     */
-    public ReceiveSmsMessageAction(final ContentValues messageValues) {
-        actionParameters.putParcelable(KEY_MESSAGE_VALUES, messageValues);
-    }
-
-    @Override
-    protected Object executeAction() {
-        final Context context = Factory.get().getApplicationContext();
-        final ContentValues messageValues = actionParameters.getParcelable(KEY_MESSAGE_VALUES);
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        // Get the SIM subscription ID
-        Integer subId = messageValues.getAsInteger(Sms.SUBSCRIPTION_ID);
-        if (subId == null) {
-            subId = ParticipantData.DEFAULT_SELF_SUB_ID;
-        }
-        // Make sure we have a sender address
-        String address = messageValues.getAsString(Sms.ADDRESS);
-        if (TextUtils.isEmpty(address)) {
-            LogUtil.w(TAG, "Received an SMS without an address; using unknown sender.");
-            address = ParticipantData.getUnknownSenderDestination();
-            messageValues.put(Sms.ADDRESS, address);
-        }
-        final ParticipantData rawSender = ParticipantData.getFromRawPhoneBySimLocale(
-                address, subId);
-
-        // TODO: Should use local timestamp for this?
-        final long received = messageValues.getAsLong(Sms.DATE);
-        // Inform sync that message has been added at local received timestamp
-        final SyncManager syncManager = DataModel.get().getSyncManager();
-        syncManager.onNewMessageInserted(received);
-
-        // Make sure we've got a thread id
-        final long threadId = MmsSmsUtils.Threads.getOrCreateThreadId(context, address);
-        messageValues.put(Sms.THREAD_ID, threadId);
-        final boolean blocked = BugleDatabaseOperations.isBlockedDestination(
-                db, rawSender.getNormalizedDestination());
-        final String conversationId = BugleDatabaseOperations.
-                getOrCreateConversationFromRecipient(db, threadId, blocked, rawSender);
-
-        final boolean messageInFocusedConversation =
-                DataModel.get().isFocusedConversation(conversationId);
-        final boolean messageInObservableConversation =
-                DataModel.get().isNewMessageObservable(conversationId);
-
-        MessageData message = null;
-        // Only the primary user gets to insert the message into the telephony db and into bugle's
-        // db. The secondary user goes through this path, but skips doing the actual insert. It
-        // goes through this path because it needs to compute messageInFocusedConversation in order
-        // to calculate whether to skip the notification and play a soft sound if the user is
-        // already in the conversation.
-        if (!OsUtil.isSecondaryUser()) {
-            final boolean read = messageValues.getAsBoolean(Sms.Inbox.READ)
-                    || messageInFocusedConversation;
-            // If you have read it you have seen it
-            final boolean seen = read || messageInObservableConversation || blocked;
-            messageValues.put(Sms.Inbox.READ, read ? Integer.valueOf(1) : Integer.valueOf(0));
-
-            // incoming messages are marked as seen in the telephony db
-            messageValues.put(Sms.Inbox.SEEN, 1);
-
-            // Insert into telephony
-            final Uri messageUri = context.getContentResolver().insert(Sms.Inbox.CONTENT_URI,
-                    messageValues);
-
-            if (messageUri != null) {
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "ReceiveSmsMessageAction: Inserted SMS message into telephony, "
-                            + "uri = " + messageUri);
-                }
-            } else {
-                LogUtil.e(TAG, "ReceiveSmsMessageAction: Failed to insert SMS into telephony!");
-            }
-
-            final String text = messageValues.getAsString(Sms.BODY);
-            final String subject = messageValues.getAsString(Sms.SUBJECT);
-            final long sent = messageValues.getAsLong(Sms.DATE_SENT);
-            final ParticipantData self = ParticipantData.getSelfParticipant(subId);
-            final Integer pathPresent = messageValues.getAsInteger(Sms.REPLY_PATH_PRESENT);
-            final String smsServiceCenter = messageValues.getAsString(Sms.SERVICE_CENTER);
-            String conversationServiceCenter = null;
-            // Only set service center if message REPLY_PATH_PRESENT = 1
-            if (pathPresent != null && pathPresent == 1 && !TextUtils.isEmpty(smsServiceCenter)) {
-                conversationServiceCenter = smsServiceCenter;
-            }
-            db.beginTransaction();
-            try {
-                final String participantId =
-                        BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, rawSender);
-                final String selfId =
-                        BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, self);
-
-                message = MessageData.createReceivedSmsMessage(messageUri, conversationId,
-                        participantId, selfId, text, subject, sent, received, seen, read);
-
-                BugleDatabaseOperations.insertNewMessageInTransaction(db, message);
-
-                BugleDatabaseOperations.updateConversationMetadataInTransaction(db, conversationId,
-                        message.getMessageId(), message.getReceivedTimeStamp(), blocked,
-                        conversationServiceCenter, true /* shouldAutoSwitchSelfId */);
-
-                final ParticipantData sender = ParticipantData.getFromId(db, participantId);
-                BugleActionToasts.onMessageReceived(conversationId, sender, message);
-                db.setTransactionSuccessful();
-            } finally {
-                db.endTransaction();
-            }
-            LogUtil.i(TAG, "ReceiveSmsMessageAction: Received SMS message " + message.getMessageId()
-                    + " in conversation " + message.getConversationId()
-                    + ", uri = " + messageUri);
-
-            actionParameters.putInt(KEY_SUB_ID, subId);
-            ProcessPendingMessagesAction.scheduleProcessPendingMessagesAction(false, this);
-        } else {
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "ReceiveSmsMessageAction: Not inserting received SMS message for "
-                        + "secondary user.");
-            }
-        }
-        // Show a notification to let the user know a new message has arrived
-        BugleNotifications.update(false/*silent*/, conversationId, BugleNotifications.UPDATE_ALL);
-
-        MessagingContentProvider.notifyMessagesChanged(conversationId);
-        MessagingContentProvider.notifyPartsChanged();
-
-        return message;
-    }
-
-    private ReceiveSmsMessageAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<ReceiveSmsMessageAction> CREATOR
-            = new Parcelable.Creator<ReceiveSmsMessageAction>() {
-        @Override
-        public ReceiveSmsMessageAction createFromParcel(final Parcel in) {
-            return new ReceiveSmsMessageAction(in);
-        }
-
-        @Override
-        public ReceiveSmsMessageAction[] newArray(final int size) {
-            return new ReceiveSmsMessageAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/RedownloadMmsAction.java b/src/com/android/messaging/datamodel/action/RedownloadMmsAction.java
deleted file mode 100644
index 69c34da..0000000
--- a/src/com/android/messaging/datamodel/action/RedownloadMmsAction.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.app.PendingIntent;
-import android.content.ContentValues;
-import android.content.Context;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Action to manually start an MMS download (after failed or manual mms download)
- */
-public class RedownloadMmsAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-    private static final int REQUEST_CODE_PENDING_INTENT = 101;
-
-    private static final String KEY_SUB_ID = "sub_id";
-
-    /**
-     * Download an MMS message
-     */
-    public static void redownloadMessage(final String messageId) {
-        final RedownloadMmsAction action = new RedownloadMmsAction(messageId);
-        action.start();
-    }
-
-    /**
-     * Get a pending intent of for downloading an MMS
-     */
-    public static PendingIntent getPendingIntentForRedownloadMms(
-            final Context context, final String messageId) {
-        final Action action = new RedownloadMmsAction(messageId);
-        return ActionService.makeStartActionPendingIntent(context,
-                action, REQUEST_CODE_PENDING_INTENT, false /*launchesAnActivity*/);
-    }
-
-    // Core parameters needed for all types of message
-    private static final String KEY_MESSAGE_ID = "message_id";
-
-    /**
-     * Constructor used for retrying sending in the background (only message id available)
-     */
-    RedownloadMmsAction(final String messageId) {
-        super();
-        actionParameters.putString(KEY_MESSAGE_ID, messageId);
-    }
-
-    /**
-     * Read message from database and change status to allow downloading
-     */
-    @Override
-    protected Object executeAction() {
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        MessageData message = BugleDatabaseOperations.readMessage(db, messageId);
-        // Check message can be redownloaded
-        if (message != null && message.canRedownloadMessage()) {
-            final long timestamp = System.currentTimeMillis();
-
-            final ContentValues values = new ContentValues(2);
-            values.put(DatabaseHelper.MessageColumns.STATUS,
-                    MessageData.BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD);
-            values.put(DatabaseHelper.MessageColumns.RETRY_START_TIMESTAMP, timestamp);
-
-            // Row must exist as was just loaded above (on ActionService thread)
-            BugleDatabaseOperations.updateMessageRow(db, message.getMessageId(), values);
-
-            MessagingContentProvider.notifyMessagesChanged(message.getConversationId());
-            actionParameters.putInt(KEY_SUB_ID,
-                    BugleDatabaseOperations.getSelfSubscriptionId(db, message.getSelfId()));
-            // Whether we succeeded or failed we will check and maybe schedule some more work
-            ProcessPendingMessagesAction.scheduleProcessPendingMessagesAction(false, this);
-        } else {
-            message = null;
-            LogUtil.e(LogUtil.BUGLE_TAG,
-                    "Attempt to download a missing or un-redownloadable message");
-        }
-        // Immediately update the notifications in case we came from the download action from a
-        // heads-up notification. This will dismiss the heads-up notification.
-        BugleNotifications.update(false/*silent*/, BugleNotifications.UPDATE_ALL);
-        return message;
-    }
-
-    private RedownloadMmsAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<RedownloadMmsAction> CREATOR
-            = new Parcelable.Creator<RedownloadMmsAction>() {
-        @Override
-        public RedownloadMmsAction createFromParcel(final Parcel in) {
-            return new RedownloadMmsAction(in);
-        }
-
-        @Override
-        public RedownloadMmsAction[] newArray(final int size) {
-            return new RedownloadMmsAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/ResendMessageAction.java b/src/com/android/messaging/datamodel/action/ResendMessageAction.java
deleted file mode 100644
index b442ae6..0000000
--- a/src/com/android/messaging/datamodel/action/ResendMessageAction.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentValues;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Action used to manually resend an outgoing message
- */
-public class ResendMessageAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    private static final String KEY_SUB_ID = "sub_id";
-
-    /**
-     * Manual send of existing message (no listener)
-     */
-    public static void resendMessage(final String messageId) {
-        final ResendMessageAction action = new ResendMessageAction(messageId);
-        action.start();
-    }
-
-    // Core parameters needed for all types of message
-    private static final String KEY_MESSAGE_ID = "message_id";
-
-    /**
-     * Constructor used for retrying sending in the background (only message id available)
-     */
-    ResendMessageAction(final String messageId) {
-        super();
-        actionParameters.putString(KEY_MESSAGE_ID, messageId);
-    }
-
-    /**
-     * Read message from database and change status to allow sending
-     */
-    @Override
-    protected Object executeAction() {
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final MessageData message = BugleDatabaseOperations.readMessage(db, messageId);
-        // Check message can be resent
-        if (message != null && message.canResendMessage()) {
-            final boolean isMms = message.getIsMms();
-            long timestamp = System.currentTimeMillis();
-            if (isMms) {
-                // MMS expects timestamp rounded to nearest second
-                timestamp = 1000 * ((timestamp + 500) / 1000);
-            }
-
-            LogUtil.i(TAG, "ResendMessageAction: Resending message " + messageId
-                    + "; changed timestamp from " + message.getReceivedTimeStamp() + " to "
-                    + timestamp);
-
-            final ContentValues values = new ContentValues();
-            values.put(MessageColumns.STATUS, MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND);
-            values.put(MessageColumns.RETRY_START_TIMESTAMP, timestamp);
-
-            // Row must exist as was just loaded above (on ActionService thread)
-            BugleDatabaseOperations.updateMessageRow(db, message.getMessageId(), values);
-
-            MessagingContentProvider.notifyMessagesChanged(message.getConversationId());
-
-            actionParameters.putInt(KEY_SUB_ID,
-                    BugleDatabaseOperations.getSelfSubscriptionId(db, message.getSelfId()));
-
-            // Whether we succeeded or failed we will check and maybe schedule some more work
-            ProcessPendingMessagesAction.scheduleProcessPendingMessagesAction(false, this);
-
-            return message;
-        } else {
-            String error = "ResendMessageAction: Cannot resend message " + messageId + "; ";
-            if (message != null) {
-                error += ("status = " + MessageData.getStatusDescription(message.getStatus()));
-            } else {
-                error += "not found in database";
-            }
-            LogUtil.e(TAG, error);
-        }
-
-        return null;
-    }
-
-    private ResendMessageAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<ResendMessageAction> CREATOR
-            = new Parcelable.Creator<ResendMessageAction>() {
-        @Override
-        public ResendMessageAction createFromParcel(final Parcel in) {
-            return new ResendMessageAction(in);
-        }
-
-        @Override
-        public ResendMessageAction[] newArray(final int size) {
-            return new ResendMessageAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/SendMessageAction.java b/src/com/android/messaging/datamodel/action/SendMessageAction.java
deleted file mode 100644
index 44c661d..0000000
--- a/src/com/android/messaging/datamodel/action/SendMessageAction.java
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.Telephony.Mms;
-import android.provider.Telephony.Sms;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-import java.util.ArrayList;
-
-/**
- * Action used to send an outgoing message. It writes MMS messages to the telephony db
- * ({@link InsertNewMessageAction}) writes SMS messages to the telephony db). It also
- * initiates the actual sending. It will all be used for re-sending a failed message.
- * <p>
- * This class is public (not package-private) because the SMS/MMS (e.g. MmsUtils) classes need to
- * access the EXTRA_* fields for setting up the 'sent' pending intent.
- */
-public class SendMessageAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    /**
-     * Queue sending of existing message (can only be called during execute of action)
-     */
-    static boolean queueForSendInBackground(final String messageId,
-            final Action processingAction) {
-        final SendMessageAction action = new SendMessageAction();
-        return action.queueAction(messageId, processingAction);
-    }
-
-    public static final boolean DEFAULT_DELIVERY_REPORT_MODE  = false;
-    public static final int MAX_SMS_RETRY = 3;
-
-    // Core parameters needed for all types of message
-    private static final String KEY_MESSAGE_ID = "message_id";
-    private static final String KEY_MESSAGE = "message";
-    private static final String KEY_MESSAGE_URI = "message_uri";
-    private static final String KEY_SUB_PHONE_NUMBER = "sub_phone_number";
-
-    // For sms messages a few extra values are included in the bundle
-    private static final String KEY_RECIPIENT = "recipient";
-    private static final String KEY_RECIPIENTS = "recipients";
-    private static final String KEY_SMS_SERVICE_CENTER = "sms_service_center";
-
-    // Values we attach to the pending intent that's fired when the message is sent.
-    // Only applicable when sending via the platform APIs on L+.
-    public static final String KEY_SUB_ID = "sub_id";
-    public static final String EXTRA_MESSAGE_ID = "message_id";
-    public static final String EXTRA_UPDATED_MESSAGE_URI = "updated_message_uri";
-    public static final String EXTRA_CONTENT_URI = "content_uri";
-    public static final String EXTRA_RESPONSE_IMPORTANT = "response_important";
-
-    /**
-     * Constructor used for retrying sending in the background (only message id available)
-     */
-    private SendMessageAction() {
-        super();
-    }
-
-    /**
-     * Read message from database and queue actual sending
-     */
-    private boolean queueAction(final String messageId, final Action processingAction) {
-        actionParameters.putString(KEY_MESSAGE_ID, messageId);
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final MessageData message = BugleDatabaseOperations.readMessage(db, messageId);
-        // Check message can be resent
-        if (message != null && message.canSendMessage()) {
-            final boolean isSms = message.getIsSms();
-            long timestamp = System.currentTimeMillis();
-            if (!isSms) {
-                // MMS expects timestamp rounded to nearest second
-                timestamp = 1000 * ((timestamp + 500) / 1000);
-            }
-
-            final ParticipantData self = BugleDatabaseOperations.getExistingParticipant(
-                    db, message.getSelfId());
-            final Uri messageUri = message.getSmsMessageUri();
-            final String conversationId = message.getConversationId();
-
-            // Update message status
-            if (message.getYetToSend()) {
-                if (message.getReceivedTimeStamp() == message.getRetryStartTimestamp()) {
-                    // Initial sending of message
-                    message.markMessageSending(timestamp);
-                } else {
-                    // Manual resend of message
-                    message.markMessageManualResend(timestamp);
-                }
-            } else {
-                // Automatic resend of message
-                message.markMessageResending(timestamp);
-            }
-            if (!updateMessageAndStatus(isSms, message, null /* messageUri */, false /*notify*/)) {
-                // If message is missing in the telephony database we don't need to send it
-                return false;
-            }
-
-            final ArrayList<String> recipients =
-                    BugleDatabaseOperations.getRecipientsForConversation(db, conversationId);
-
-            // Update action state with parameters needed for background sending
-            actionParameters.putParcelable(KEY_MESSAGE_URI, messageUri);
-            actionParameters.putParcelable(KEY_MESSAGE, message);
-            actionParameters.putStringArrayList(KEY_RECIPIENTS, recipients);
-            actionParameters.putInt(KEY_SUB_ID, self.getSubId());
-            actionParameters.putString(KEY_SUB_PHONE_NUMBER, self.getNormalizedDestination());
-
-            if (isSms) {
-                final String smsc = BugleDatabaseOperations.getSmsServiceCenterForConversation(
-                        db, conversationId);
-                actionParameters.putString(KEY_SMS_SERVICE_CENTER, smsc);
-
-                if (recipients.size() == 1) {
-                    final String recipient = recipients.get(0);
-
-                    actionParameters.putString(KEY_RECIPIENT, recipient);
-                    // Queue actual sending for SMS
-                    processingAction.requestBackgroundWork(this);
-
-                    if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                        LogUtil.d(TAG, "SendMessageAction: Queued SMS message " + messageId
-                                + " for sending");
-                    }
-                    return true;
-                } else {
-                    LogUtil.wtf(TAG, "Trying to resend a broadcast SMS - not allowed");
-                }
-            } else {
-                // Queue actual sending for MMS
-                processingAction.requestBackgroundWork(this);
-
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "SendMessageAction: Queued MMS message " + messageId
-                            + " for sending");
-                }
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-
-    /**
-     * Never called
-     */
-    @Override
-    protected Object executeAction() {
-        Assert.fail("SendMessageAction must be queued rather than started");
-        return null;
-    }
-
-    /**
-     * Send message on background worker thread
-     */
-    @Override
-    protected Bundle doBackgroundWork() {
-        final MessageData message = actionParameters.getParcelable(KEY_MESSAGE);
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-        Uri messageUri = actionParameters.getParcelable(KEY_MESSAGE_URI);
-        Uri updatedMessageUri = null;
-        final boolean isSms = message.getProtocol() == MessageData.PROTOCOL_SMS;
-        final int subId = actionParameters.getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-        final String subPhoneNumber = actionParameters.getString(KEY_SUB_PHONE_NUMBER);
-
-        LogUtil.i(TAG, "SendMessageAction: Sending " + (isSms ? "SMS" : "MMS") + " message "
-                + messageId + " in conversation " + message.getConversationId());
-
-        int status;
-        int rawStatus = MessageData.RAW_TELEPHONY_STATUS_UNDEFINED;
-        int resultCode = MessageData.UNKNOWN_RESULT_CODE;
-        if (isSms) {
-            Assert.notNull(messageUri);
-            final String recipient = actionParameters.getString(KEY_RECIPIENT);
-            final String messageText = message.getMessageText();
-            final String smsServiceCenter = actionParameters.getString(KEY_SMS_SERVICE_CENTER);
-            final boolean deliveryReportRequired = MmsUtils.isDeliveryReportRequired(subId);
-
-            status = MmsUtils.sendSmsMessage(recipient, messageText, messageUri, subId,
-                    smsServiceCenter, deliveryReportRequired);
-        } else {
-            final Context context = Factory.get().getApplicationContext();
-            final ArrayList<String> recipients =
-                    actionParameters.getStringArrayList(KEY_RECIPIENTS);
-            if (messageUri == null) {
-                final long timestamp = message.getReceivedTimeStamp();
-
-                // Inform sync that message has been added at local received timestamp
-                final SyncManager syncManager = DataModel.get().getSyncManager();
-                syncManager.onNewMessageInserted(timestamp);
-
-                // For MMS messages first need to write to telephony (resizing images if needed)
-                updatedMessageUri = MmsUtils.insertSendingMmsMessage(context, recipients,
-                        message, subId, subPhoneNumber, timestamp);
-                if (updatedMessageUri != null) {
-                    messageUri = updatedMessageUri;
-                    // To prevent Sync seeing inconsistent state must write to DB on this thread
-                    updateMessageUri(messageId, updatedMessageUri);
-
-                    if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                        LogUtil.v(TAG, "SendMessageAction: Updated message " + messageId
-                                + " with new uri " + messageUri);
-                    }
-                 }
-            }
-            if (messageUri != null) {
-                // Actually send the MMS
-                final Bundle extras = new Bundle();
-                extras.putString(EXTRA_MESSAGE_ID, messageId);
-                extras.putParcelable(EXTRA_UPDATED_MESSAGE_URI, updatedMessageUri);
-                final MmsUtils.StatusPlusUri result = MmsUtils.sendMmsMessage(context, subId,
-                        messageUri, extras);
-                if (result == MmsUtils.STATUS_PENDING) {
-                    // Async send, so no status yet
-                    LogUtil.d(TAG, "SendMessageAction: Sending MMS message " + messageId
-                            + " asynchronously; waiting for callback to finish processing");
-                    return null;
-                }
-                status = result.status;
-                rawStatus = result.rawStatus;
-                resultCode = result.resultCode;
-            } else {
-                status = MmsUtils.MMS_REQUEST_MANUAL_RETRY;
-            }
-        }
-
-        // When we fast-fail before calling the MMS lib APIs (e.g. airplane mode,
-        // sending message is deleted).
-        ProcessSentMessageAction.processMessageSentFastFailed(messageId, messageUri,
-                updatedMessageUri, subId, isSms, status, rawStatus, resultCode);
-        return null;
-    }
-
-    private void updateMessageUri(final String messageId, final Uri updatedMessageUri) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        db.beginTransaction();
-        try {
-            final ContentValues values = new ContentValues();
-            values.put(MessageColumns.SMS_MESSAGE_URI, updatedMessageUri.toString());
-            BugleDatabaseOperations.updateMessageRow(db, messageId, values);
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-    }
-
-    @Override
-    protected Object processBackgroundResponse(final Bundle response) {
-        // Nothing to do here, post-send tasks handled by ProcessSentMessageAction
-        return null;
-    }
-
-    /**
-     * Update message status to reflect success or failure
-     */
-    @Override
-    protected Object processBackgroundFailure() {
-        final String messageId = actionParameters.getString(KEY_MESSAGE_ID);
-        final MessageData message = actionParameters.getParcelable(KEY_MESSAGE);
-        final boolean isSms = message.getProtocol() == MessageData.PROTOCOL_SMS;
-        final int subId = actionParameters.getInt(KEY_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID);
-        final int resultCode = actionParameters.getInt(ProcessSentMessageAction.KEY_RESULT_CODE);
-        final int httpStatusCode =
-                actionParameters.getInt(ProcessSentMessageAction.KEY_HTTP_STATUS_CODE);
-
-        ProcessSentMessageAction.processResult(messageId, null /* updatedMessageUri */,
-                MmsUtils.MMS_REQUEST_MANUAL_RETRY, MessageData.RAW_TELEPHONY_STATUS_UNDEFINED,
-                isSms, this, subId, resultCode, httpStatusCode);
-
-        return null;
-    }
-
-    /**
-     * Update the message status (and message itself if necessary)
-     * @param isSms whether this is an SMS or MMS
-     * @param message message to update
-     * @param updatedMessageUri message uri for newly-inserted messages; null otherwise
-     * @param clearSeen whether the message 'seen' status should be reset if error occurs
-     */
-    public static boolean updateMessageAndStatus(final boolean isSms, final MessageData message,
-            final Uri updatedMessageUri, final boolean clearSeen) {
-        final Context context = Factory.get().getApplicationContext();
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        // TODO: We're optimistically setting the type/box of outgoing messages to
-        // 'SENT' even before they actually are. We should technically be using QUEUED or OUTBOX
-        // instead, but if we do that, it's possible that the Messaging app will try to send them
-        // as part of its clean-up logic that runs when it starts (http://b/18155366).
-        //
-        // We also use the wrong status when inserting queued SMS messages in
-        // InsertNewMessageAction.insertBroadcastSmsMessage and insertSendingSmsMessage (should be
-        // QUEUED or OUTBOX), and in MmsUtils.insertSendReq (should be OUTBOX).
-
-        boolean updatedTelephony = true;
-        int messageBox;
-        int type;
-        switch(message.getStatus()) {
-            case MessageData.BUGLE_STATUS_OUTGOING_COMPLETE:
-            case MessageData.BUGLE_STATUS_OUTGOING_DELIVERED:
-                type = Sms.MESSAGE_TYPE_SENT;
-                messageBox = Mms.MESSAGE_BOX_SENT;
-                break;
-            case MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND:
-            case MessageData.BUGLE_STATUS_OUTGOING_AWAITING_RETRY:
-                type = Sms.MESSAGE_TYPE_SENT;
-                messageBox = Mms.MESSAGE_BOX_SENT;
-                break;
-            case MessageData.BUGLE_STATUS_OUTGOING_SENDING:
-            case MessageData.BUGLE_STATUS_OUTGOING_RESENDING:
-                type = Sms.MESSAGE_TYPE_SENT;
-                messageBox = Mms.MESSAGE_BOX_SENT;
-                break;
-            case MessageData.BUGLE_STATUS_OUTGOING_FAILED:
-            case MessageData.BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER:
-                type = Sms.MESSAGE_TYPE_FAILED;
-                messageBox = Mms.MESSAGE_BOX_FAILED;
-                break;
-            default:
-                type = Sms.MESSAGE_TYPE_ALL;
-                messageBox = Mms.MESSAGE_BOX_ALL;
-                break;
-        }
-        // First in the telephony DB
-        if (isSms) {
-            // Ignore update message Uri
-            if (type != Sms.MESSAGE_TYPE_ALL) {
-                if (!MmsUtils.updateSmsMessageSendingStatus(context, message.getSmsMessageUri(),
-                        type, message.getReceivedTimeStamp())) {
-                    message.markMessageFailed(message.getSentTimeStamp());
-                    updatedTelephony = false;
-                }
-            }
-        } else if (message.getSmsMessageUri() != null) {
-            if (messageBox != Mms.MESSAGE_BOX_ALL) {
-                if (!MmsUtils.updateMmsMessageSendingStatus(context, message.getSmsMessageUri(),
-                        messageBox, message.getReceivedTimeStamp())) {
-                    message.markMessageFailed(message.getSentTimeStamp());
-                    updatedTelephony = false;
-                }
-            }
-        }
-        if (updatedTelephony) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "SendMessageAction: Updated " + (isSms ? "SMS" : "MMS")
-                        + " message " + message.getMessageId()
-                        + " in telephony (" + message.getSmsMessageUri() + ")");
-            }
-        } else {
-            LogUtil.w(TAG, "SendMessageAction: Failed to update " + (isSms ? "SMS" : "MMS")
-                    + " message " + message.getMessageId()
-                    + " in telephony (" + message.getSmsMessageUri() + "); marking message failed");
-        }
-
-        // Update the local DB
-        db.beginTransaction();
-        try {
-            if (updatedMessageUri != null) {
-                // Update all message and part fields
-                BugleDatabaseOperations.updateMessageInTransaction(db, message);
-                BugleDatabaseOperations.refreshConversationMetadataInTransaction(
-                        db, message.getConversationId(), false/* shouldAutoSwitchSelfId */,
-                        false/*archived*/);
-            } else {
-                final ContentValues values = new ContentValues();
-                values.put(MessageColumns.STATUS, message.getStatus());
-
-                if (clearSeen) {
-                    // When a message fails to send, the message needs to
-                    // be unseen to be selected as an error notification.
-                    values.put(MessageColumns.SEEN, 0);
-                }
-                values.put(MessageColumns.RECEIVED_TIMESTAMP, message.getReceivedTimeStamp());
-                values.put(MessageColumns.RAW_TELEPHONY_STATUS, message.getRawTelephonyStatus());
-
-                BugleDatabaseOperations.updateMessageRowIfExists(db, message.getMessageId(),
-                        values);
-            }
-            db.setTransactionSuccessful();
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "SendMessageAction: Updated " + (isSms ? "SMS" : "MMS")
-                        + " message " + message.getMessageId() + " in local db. Timestamp = "
-                        + message.getReceivedTimeStamp());
-            }
-        } finally {
-            db.endTransaction();
-        }
-
-        MessagingContentProvider.notifyMessagesChanged(message.getConversationId());
-        if (updatedMessageUri != null) {
-            MessagingContentProvider.notifyPartsChanged();
-        }
-
-        return updatedTelephony;
-    }
-
-    private SendMessageAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<SendMessageAction> CREATOR
-            = new Parcelable.Creator<SendMessageAction>() {
-        @Override
-        public SendMessageAction createFromParcel(final Parcel in) {
-            return new SendMessageAction(in);
-        }
-
-        @Override
-        public SendMessageAction[] newArray(final int size) {
-            return new SendMessageAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/SyncCursorPair.java b/src/com/android/messaging/datamodel/action/SyncCursorPair.java
deleted file mode 100644
index e2fd7ec..0000000
--- a/src/com/android/messaging/datamodel/action/SyncCursorPair.java
+++ /dev/null
@@ -1,712 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteException;
-import android.provider.Telephony.Mms;
-import android.provider.Telephony.Sms;
-import androidx.collection.LongSparseArray;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.SyncManager.ThreadInfoCache;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.mmslib.SqliteWrapper;
-import com.android.messaging.sms.DatabaseMessages;
-import com.android.messaging.sms.DatabaseMessages.DatabaseMessage;
-import com.android.messaging.sms.DatabaseMessages.LocalDatabaseMessage;
-import com.android.messaging.sms.DatabaseMessages.MmsMessage;
-import com.android.messaging.sms.DatabaseMessages.SmsMessage;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.google.common.collect.Sets;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-
-/**
- * Class holding a pair of cursors - one for local db and one for telephony provider - allowing
- * synchronous stepping through messages as part of sync.
- */
-class SyncCursorPair {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    static final long SYNC_COMPLETE = -1L;
-    static final long SYNC_STARTING = Long.MAX_VALUE;
-
-    private CursorIterator mLocalCursorIterator;
-    private CursorIterator mRemoteCursorsIterator;
-
-    private final String mLocalSelection;
-    private final String mRemoteSmsSelection;
-    private final String mRemoteMmsSelection;
-
-    /**
-     * Check if SMS has been synchronized. We compare the counts of messages on both
-     * sides and return true if they are equal.
-     *
-     * Note that this may not be the most reliable way to tell if messages are in sync.
-     * For example, the local misses one message and has one obsolete message.
-     * However, we have background sms sync once a while, also some other events might
-     * trigger a full sync. So we will eventually catch up. And this should be rare to
-     * happen.
-     *
-     * @return If sms is in sync with telephony sms/mms providers
-     */
-    static boolean allSynchronized(final DatabaseWrapper db) {
-        return isSynchronized(db, LOCAL_MESSAGES_SELECTION, null,
-                getSmsTypeSelectionSql(), null, getMmsTypeSelectionSql(), null);
-    }
-
-    SyncCursorPair(final long lowerBound, final long upperBound) {
-        mLocalSelection = getTimeConstrainedQuery(
-                LOCAL_MESSAGES_SELECTION,
-                MessageColumns.RECEIVED_TIMESTAMP,
-                lowerBound,
-                upperBound,
-                null /* threadColumn */, null /* threadId */);
-        mRemoteSmsSelection = getTimeConstrainedQuery(
-                getSmsTypeSelectionSql(),
-                "date",
-                lowerBound,
-                upperBound,
-                null /* threadColumn */, null /* threadId */);
-        mRemoteMmsSelection = getTimeConstrainedQuery(
-                getMmsTypeSelectionSql(),
-                "date",
-                ((lowerBound < 0) ? lowerBound : (lowerBound + 999) / 1000), /*seconds*/
-                ((upperBound < 0) ? upperBound : (upperBound + 999) / 1000),  /*seconds*/
-                null /* threadColumn */, null /* threadId */);
-    }
-
-    SyncCursorPair(final long threadId, final String conversationId) {
-        mLocalSelection = getTimeConstrainedQuery(
-                LOCAL_MESSAGES_SELECTION,
-                MessageColumns.RECEIVED_TIMESTAMP,
-                -1L,
-                -1L,
-                MessageColumns.CONVERSATION_ID, conversationId);
-        // Find all SMS messages (excluding drafts) within the sync window
-        mRemoteSmsSelection = getTimeConstrainedQuery(
-                getSmsTypeSelectionSql(),
-                "date",
-                -1L,
-                -1L,
-                Sms.THREAD_ID, Long.toString(threadId));
-        mRemoteMmsSelection = getTimeConstrainedQuery(
-                getMmsTypeSelectionSql(),
-                "date",
-                -1L, /*seconds*/
-                -1L,  /*seconds*/
-                Mms.THREAD_ID, Long.toString(threadId));
-    }
-
-    void query(final DatabaseWrapper db) {
-        // Load local messages in the sync window
-        mLocalCursorIterator = new LocalCursorIterator(db, mLocalSelection);
-        // Load remote messages in the sync window
-        mRemoteCursorsIterator = new RemoteCursorsIterator(mRemoteSmsSelection,
-                mRemoteMmsSelection);
-    }
-
-    boolean isSynchronized(final DatabaseWrapper db) {
-        return isSynchronized(db, mLocalSelection, null, mRemoteSmsSelection,
-                null, mRemoteMmsSelection, null);
-    }
-
-    void close() {
-        if (mLocalCursorIterator != null) {
-            mLocalCursorIterator.close();
-        }
-        if (mRemoteCursorsIterator != null) {
-            mRemoteCursorsIterator.close();
-        }
-    }
-
-    long scan(final int maxMessagesToScan,
-            final int maxMessagesToUpdate, final ArrayList<SmsMessage> smsToAdd,
-            final LongSparseArray<MmsMessage> mmsToAdd,
-            final ArrayList<LocalDatabaseMessage> messagesToDelete,
-            final SyncManager.ThreadInfoCache threadInfoCache) {
-        // Set of local messages matched with the timestamp of a remote message
-        final Set<DatabaseMessage> matchedLocalMessages = Sets.newHashSet();
-        // Set of remote messages matched with the timestamp of a local message
-        final Set<DatabaseMessage> matchedRemoteMessages = Sets.newHashSet();
-        long lastTimestampMillis = SYNC_STARTING;
-        // Number of messages scanned local and remote
-        int localCount = 0;
-        int remoteCount = 0;
-        // Seed the initial values of remote and local messages for comparison
-        DatabaseMessage remoteMessage = mRemoteCursorsIterator.next();
-        DatabaseMessage localMessage = mLocalCursorIterator.next();
-        // Iterate through messages on both sides in reverse time order
-        // Import messages in remote not in local, delete messages in local not in remote
-        while (localCount + remoteCount < maxMessagesToScan && smsToAdd.size()
-                + mmsToAdd.size() + messagesToDelete.size() < maxMessagesToUpdate) {
-            if (remoteMessage == null && localMessage == null) {
-                // No more message on both sides - scan complete
-                lastTimestampMillis = SYNC_COMPLETE;
-                break;
-            } else if ((remoteMessage == null && localMessage != null) ||
-                    (localMessage != null && remoteMessage != null &&
-                        localMessage.getTimestampInMillis()
-                            > remoteMessage.getTimestampInMillis())) {
-                // Found a local message that is not in remote db
-                // Delete the local message
-                messagesToDelete.add((LocalDatabaseMessage) localMessage);
-                lastTimestampMillis = Math.min(lastTimestampMillis,
-                        localMessage.getTimestampInMillis());
-                // Advance to next local message
-                localMessage = mLocalCursorIterator.next();
-                localCount += 1;
-            } else if ((localMessage == null && remoteMessage != null) ||
-                    (localMessage != null && remoteMessage != null &&
-                        localMessage.getTimestampInMillis()
-                            < remoteMessage.getTimestampInMillis())) {
-                // Found a remote message that is not in local db
-                // Add the remote message
-                saveMessageToAdd(smsToAdd, mmsToAdd, remoteMessage, threadInfoCache);
-                lastTimestampMillis = Math.min(lastTimestampMillis,
-                        remoteMessage.getTimestampInMillis());
-                // Advance to next remote message
-                remoteMessage = mRemoteCursorsIterator.next();
-                remoteCount += 1;
-            } else {
-                // Found remote and local messages at the same timestamp
-                final long matchedTimestamp = localMessage.getTimestampInMillis();
-                lastTimestampMillis = Math.min(lastTimestampMillis, matchedTimestamp);
-                // Get the next local and remote messages
-                final DatabaseMessage remoteMessagePeek = mRemoteCursorsIterator.next();
-                final DatabaseMessage localMessagePeek = mLocalCursorIterator.next();
-                // Check if only one message on each side matches the current timestamp
-                // by looking at the next messages on both sides. If they are either null
-                // (meaning no more messages) or having a different timestamp. We want
-                // to optimize for this since this is the most common case when majority
-                // of the messages are in sync (so they one-to-one pair up at each timestamp),
-                // by not allocating the data structures required to compare a set of
-                // messages from both sides.
-                if ((remoteMessagePeek == null ||
-                        remoteMessagePeek.getTimestampInMillis() != matchedTimestamp) &&
-                        (localMessagePeek == null ||
-                            localMessagePeek.getTimestampInMillis() != matchedTimestamp)) {
-                    // Optimize the common case where only one message on each side
-                    // that matches the same timestamp
-                    if (!remoteMessage.equals(localMessage)) {
-                        // local != remote
-                        // Delete local message
-                        messagesToDelete.add((LocalDatabaseMessage) localMessage);
-                        // Add remote message
-                        saveMessageToAdd(smsToAdd, mmsToAdd, remoteMessage, threadInfoCache);
-                    }
-                    // Get next local and remote messages
-                    localMessage = localMessagePeek;
-                    remoteMessage = remoteMessagePeek;
-                    localCount += 1;
-                    remoteCount += 1;
-                } else {
-                    // Rare case in which multiple messages are in the same timestamp
-                    // on either or both sides
-                    // Gather all the matched remote messages
-                    matchedRemoteMessages.clear();
-                    matchedRemoteMessages.add(remoteMessage);
-                    remoteCount += 1;
-                    remoteMessage = remoteMessagePeek;
-                    while (remoteMessage != null &&
-                        remoteMessage.getTimestampInMillis() == matchedTimestamp) {
-                        Assert.isTrue(!matchedRemoteMessages.contains(remoteMessage));
-                        matchedRemoteMessages.add(remoteMessage);
-                        remoteCount += 1;
-                        remoteMessage = mRemoteCursorsIterator.next();
-                    }
-                    // Gather all the matched local messages
-                    matchedLocalMessages.clear();
-                    matchedLocalMessages.add(localMessage);
-                    localCount += 1;
-                    localMessage = localMessagePeek;
-                    while (localMessage != null &&
-                            localMessage.getTimestampInMillis() == matchedTimestamp) {
-                        if (matchedLocalMessages.contains(localMessage)) {
-                            // Duplicate message is local database is deleted
-                            messagesToDelete.add((LocalDatabaseMessage) localMessage);
-                        } else {
-                            matchedLocalMessages.add(localMessage);
-                        }
-                        localCount += 1;
-                        localMessage = mLocalCursorIterator.next();
-                    }
-                    // Delete messages local only
-                    for (final DatabaseMessage msg : Sets.difference(
-                            matchedLocalMessages, matchedRemoteMessages)) {
-                        messagesToDelete.add((LocalDatabaseMessage) msg);
-                    }
-                    // Add messages remote only
-                    for (final DatabaseMessage msg : Sets.difference(
-                            matchedRemoteMessages, matchedLocalMessages)) {
-                        saveMessageToAdd(smsToAdd, mmsToAdd, msg, threadInfoCache);
-                    }
-                }
-            }
-        }
-        return lastTimestampMillis;
-    }
-
-    DatabaseMessage getLocalMessage() {
-        return mLocalCursorIterator.next();
-    }
-
-    DatabaseMessage getRemoteMessage() {
-        return mRemoteCursorsIterator.next();
-    }
-
-    int getLocalPosition() {
-        return mLocalCursorIterator.getPosition();
-    }
-
-    int getRemotePosition() {
-        return mRemoteCursorsIterator.getPosition();
-    }
-
-    int getLocalCount() {
-        return mLocalCursorIterator.getCount();
-    }
-
-    int getRemoteCount() {
-        return mRemoteCursorsIterator.getCount();
-    }
-
-    /**
-     * An iterator for a database cursor
-     */
-    interface CursorIterator {
-        /**
-         * Move to next element in the cursor
-         *
-         * @return The next element (which becomes the current)
-         */
-        public DatabaseMessage next();
-        /**
-         * Close the cursor
-         */
-        public void close();
-        /**
-         * Get the position
-         */
-        public int getPosition();
-        /**
-         * Get the count
-         */
-        public int getCount();
-    }
-
-    private static final String ORDER_BY_DATE_DESC = "date DESC";
-
-    // A subquery that selects SMS/MMS messages in Bugle which are also in telephony
-    private static final String LOCAL_MESSAGES_SELECTION = String.format(
-            Locale.US,
-            "(%s NOTNULL)",
-            MessageColumns.SMS_MESSAGE_URI);
-
-    private static final String ORDER_BY_TIMESTAMP_DESC =
-            MessageColumns.RECEIVED_TIMESTAMP + " DESC";
-
-    // TODO : This should move into the provider
-    private static class LocalMessageQuery {
-        private static final String[] PROJECTION = new String[] {
-                MessageColumns._ID,
-                MessageColumns.RECEIVED_TIMESTAMP,
-                MessageColumns.SMS_MESSAGE_URI,
-                MessageColumns.PROTOCOL,
-                MessageColumns.CONVERSATION_ID,
-        };
-        private static final int INDEX_MESSAGE_ID = 0;
-        private static final int INDEX_MESSAGE_TIMESTAMP = 1;
-        private static final int INDEX_SMS_MESSAGE_URI = 2;
-        private static final int INDEX_MESSAGE_SMS_TYPE = 3;
-        private static final int INDEX_CONVERSATION_ID = 4;
-    }
-
-    /**
-     * This class provides the same DatabaseMessage interface over a local SMS db message
-     */
-    private static LocalDatabaseMessage getLocalDatabaseMessage(final Cursor cursor) {
-        if (cursor == null) {
-            return null;
-        }
-        return new LocalDatabaseMessage(
-                cursor.getLong(LocalMessageQuery.INDEX_MESSAGE_ID),
-                cursor.getInt(LocalMessageQuery.INDEX_MESSAGE_SMS_TYPE),
-                cursor.getString(LocalMessageQuery.INDEX_SMS_MESSAGE_URI),
-                cursor.getLong(LocalMessageQuery.INDEX_MESSAGE_TIMESTAMP),
-                cursor.getString(LocalMessageQuery.INDEX_CONVERSATION_ID));
-    }
-
-    /**
-     * The buffered cursor iterator for local SMS
-     */
-    private static class LocalCursorIterator implements CursorIterator {
-        private Cursor mCursor;
-        private final DatabaseWrapper mDatabase;
-
-        LocalCursorIterator(final DatabaseWrapper database, final String selection)
-                throws SQLiteException {
-            mDatabase = database;
-            try {
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "SyncCursorPair: Querying for local messages; selection = "
-                            + selection);
-                }
-                mCursor = mDatabase.query(
-                        DatabaseHelper.MESSAGES_TABLE,
-                        LocalMessageQuery.PROJECTION,
-                        selection,
-                        null /*selectionArgs*/,
-                        null/*groupBy*/,
-                        null/*having*/,
-                        ORDER_BY_TIMESTAMP_DESC);
-            } catch (final SQLiteException e) {
-                LogUtil.e(TAG, "SyncCursorPair: failed to query local sms/mms", e);
-                // Can't query local database. So let's throw up the exception and abort sync
-                // because we may end up import duplicate messages.
-                throw e;
-            }
-        }
-
-        @Override
-        public DatabaseMessage next() {
-            if (mCursor != null && mCursor.moveToNext()) {
-                return getLocalDatabaseMessage(mCursor);
-            }
-            return null;
-        }
-
-        @Override
-        public int getCount() {
-            return (mCursor == null ? 0 : mCursor.getCount());
-        }
-
-        @Override
-        public int getPosition() {
-            return (mCursor == null ? 0 : mCursor.getPosition());
-        }
-
-        @Override
-        public void close() {
-            if (mCursor != null) {
-                mCursor.close();
-                mCursor = null;
-            }
-        }
-    }
-
-    /**
-     * The cursor iterator for remote sms.
-     * Since SMS and MMS are stored in different tables in telephony provider,
-     * this class merges the two cursors and provides a unified view of messages
-     * from both cursors. Note that the order is DESC.
-     */
-    private static class RemoteCursorsIterator implements CursorIterator {
-        private Cursor mSmsCursor;
-        private Cursor mMmsCursor;
-        private DatabaseMessage mNextSms;
-        private DatabaseMessage mNextMms;
-
-        RemoteCursorsIterator(final String smsSelection, final String mmsSelection)
-                throws SQLiteException {
-            mSmsCursor = null;
-            mMmsCursor = null;
-            try {
-                final Context context = Factory.get().getApplicationContext();
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "SyncCursorPair: Querying for remote SMS; selection = "
-                            + smsSelection);
-                }
-                mSmsCursor = SqliteWrapper.query(
-                        context,
-                        context.getContentResolver(),
-                        Sms.CONTENT_URI,
-                        SmsMessage.getProjection(),
-                        smsSelection,
-                        null /* selectionArgs */,
-                        ORDER_BY_DATE_DESC);
-                if (mSmsCursor == null) {
-                    LogUtil.w(TAG, "SyncCursorPair: Remote SMS query returned null cursor; "
-                            + "need to cancel sync");
-                    throw new RuntimeException("Null cursor from remote SMS query");
-                }
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "SyncCursorPair: Querying for remote MMS; selection = "
-                            + mmsSelection);
-                }
-                mMmsCursor = SqliteWrapper.query(
-                        context,
-                        context.getContentResolver(),
-                        Mms.CONTENT_URI,
-                        DatabaseMessages.MmsMessage.getProjection(),
-                        mmsSelection,
-                        null /* selectionArgs */,
-                        ORDER_BY_DATE_DESC);
-                if (mMmsCursor == null) {
-                    LogUtil.w(TAG, "SyncCursorPair: Remote MMS query returned null cursor; "
-                            + "need to cancel sync");
-                    throw new RuntimeException("Null cursor from remote MMS query");
-                }
-                // Move to the first element in the combined stream from both cursors
-                mNextSms = getSmsCursorNext();
-                mNextMms = getMmsCursorNext();
-            } catch (final SQLiteException e) {
-                LogUtil.e(TAG, "SyncCursorPair: failed to query remote messages", e);
-                // If we ignore this, the following code would think there is no remote message
-                // and will delete all the local sms. We should be cautious here. So instead,
-                // let's throw the exception to the caller and abort sms sync. We do the same
-                // thing if either of the remote cursors is null.
-                throw e;
-            }
-        }
-
-        @Override
-        public DatabaseMessage next() {
-            DatabaseMessage result = null;
-            if (mNextSms != null && mNextMms != null) {
-                if (mNextSms.getTimestampInMillis() >= mNextMms.getTimestampInMillis()) {
-                    result = mNextSms;
-                    mNextSms = getSmsCursorNext();
-                } else {
-                    result = mNextMms;
-                    mNextMms = getMmsCursorNext();
-                }
-            } else {
-                if (mNextSms != null) {
-                    result = mNextSms;
-                    mNextSms = getSmsCursorNext();
-                } else {
-                    result = mNextMms;
-                    mNextMms = getMmsCursorNext();
-                }
-            }
-            return result;
-        }
-
-        private DatabaseMessage getSmsCursorNext() {
-            if (mSmsCursor != null && mSmsCursor.moveToNext()) {
-                return SmsMessage.get(mSmsCursor);
-            }
-            return null;
-        }
-
-        private DatabaseMessage getMmsCursorNext() {
-            if (mMmsCursor != null && mMmsCursor.moveToNext()) {
-                return MmsMessage.get(mMmsCursor);
-            }
-            return null;
-        }
-
-        @Override
-        // Return approximate cursor position allowing for read ahead on two cursors (hence -1)
-        public int getPosition() {
-            return (mSmsCursor == null ? 0 : mSmsCursor.getPosition()) +
-                    (mMmsCursor == null ? 0 : mMmsCursor.getPosition()) - 1;
-        }
-
-        @Override
-        public int getCount() {
-            return (mSmsCursor == null ? 0 : mSmsCursor.getCount()) +
-                    (mMmsCursor == null ? 0 : mMmsCursor.getCount());
-        }
-
-        @Override
-        public void close() {
-            if (mSmsCursor != null) {
-                mSmsCursor.close();
-                mSmsCursor = null;
-            }
-            if (mMmsCursor != null) {
-                mMmsCursor.close();
-                mMmsCursor = null;
-            }
-        }
-    }
-
-    /**
-     * Type selection for importing sms messages. Only SENT and INBOX messages are imported.
-     *
-     * @return The SQL selection for importing sms messages
-     */
-    public static String getSmsTypeSelectionSql() {
-        return MmsUtils.getSmsTypeSelectionSql();
-    }
-
-    /**
-     * Type selection for importing mms messages.
-     *
-     * Criteria:
-     * MESSAGE_BOX is INBOX, SENT or OUTBOX
-     * MESSAGE_TYPE is SEND_REQ (sent), RETRIEVE_CONF (received) or NOTIFICATION_IND (download)
-     *
-     * @return The SQL selection for importing mms messages. This selects the message type,
-     * not including the selection on timestamp.
-     */
-    public static String getMmsTypeSelectionSql() {
-        return MmsUtils.getMmsTypeSelectionSql();
-    }
-
-    /**
-     * Get a SQL selection string using an existing selection and time window limits
-     * The limits are not applied if the value is < 0
-     *
-     * @param typeSelection The existing selection
-     * @param from The inclusive lower bound
-     * @param to The exclusive upper bound
-     * @return The created SQL selection
-     */
-    private static String getTimeConstrainedQuery(final String typeSelection,
-            final String timeColumn, final long from, final long to,
-            final String threadColumn, final String threadId) {
-        final StringBuilder queryBuilder = new StringBuilder();
-        queryBuilder.append(typeSelection);
-        if (from > 0) {
-            queryBuilder.append(" AND ").append(timeColumn).append(">=").append(from);
-        }
-        if (to > 0) {
-            queryBuilder.append(" AND ").append(timeColumn).append("<").append(to);
-        }
-        if (!TextUtils.isEmpty(threadColumn) && !TextUtils.isEmpty(threadId)) {
-            queryBuilder.append(" AND ").append(threadColumn).append("=").append(threadId);
-        }
-        return queryBuilder.toString();
-    }
-
-    private static final String[] COUNT_PROJECTION = new String[] { "count()" };
-
-    private static int getCountFromCursor(final Cursor cursor) {
-        if (cursor != null && cursor.moveToFirst()) {
-            return cursor.getInt(0);
-        }
-        // We should only return a number if we were able to read it from the cursor.
-        // Otherwise, we throw an exception to cancel the sync.
-        String cursorDesc = "";
-        if (cursor == null) {
-            cursorDesc = "null";
-        } else if (cursor.getCount() == 0) {
-            cursorDesc = "empty";
-        }
-        throw new IllegalArgumentException("Cannot get count from " + cursorDesc + " cursor");
-    }
-
-    private void saveMessageToAdd(final List<SmsMessage> smsToAdd,
-            final LongSparseArray<MmsMessage> mmsToAdd, final DatabaseMessage message,
-            final ThreadInfoCache threadInfoCache) {
-        long threadId;
-        if (message.getProtocol() == MessageData.PROTOCOL_MMS) {
-            final MmsMessage mms = (MmsMessage) message;
-            mmsToAdd.append(mms.getId(), mms);
-            threadId = mms.mThreadId;
-        } else {
-            final SmsMessage sms = (SmsMessage) message;
-            smsToAdd.add(sms);
-            threadId = sms.mThreadId;
-        }
-        // Cache the lookup and canonicalization of the phone number outside of the transaction...
-        threadInfoCache.getThreadRecipients(threadId);
-    }
-
-    /**
-     * Check if SMS has been synchronized. We compare the counts of messages on both
-     * sides and return true if they are equal.
-     *
-     * Note that this may not be the most reliable way to tell if messages are in sync.
-     * For example, the local misses one message and has one obsolete message.
-     * However, we have background sms sync once a while, also some other events might
-     * trigger a full sync. So we will eventually catch up. And this should be rare to
-     * happen.
-     *
-     * @return If sms is in sync with telephony sms/mms providers
-     */
-    private static boolean isSynchronized(final DatabaseWrapper db, final String localSelection,
-            final String[] localSelectionArgs, final String smsSelection,
-            final String[] smsSelectionArgs, final String mmsSelection,
-            final String[] mmsSelectionArgs) {
-        final Context context = Factory.get().getApplicationContext();
-        Cursor localCursor = null;
-        Cursor remoteSmsCursor = null;
-        Cursor remoteMmsCursor = null;
-        try {
-            localCursor = db.query(
-                    DatabaseHelper.MESSAGES_TABLE,
-                    COUNT_PROJECTION,
-                    localSelection,
-                    localSelectionArgs,
-                    null/*groupBy*/,
-                    null/*having*/,
-                    null/*orderBy*/);
-            final int localCount = getCountFromCursor(localCursor);
-            remoteSmsCursor = SqliteWrapper.query(
-                    context,
-                    context.getContentResolver(),
-                    Sms.CONTENT_URI,
-                    COUNT_PROJECTION,
-                    smsSelection,
-                    smsSelectionArgs,
-                    null/*orderBy*/);
-            final int smsCount = getCountFromCursor(remoteSmsCursor);
-            remoteMmsCursor = SqliteWrapper.query(
-                    context,
-                    context.getContentResolver(),
-                    Mms.CONTENT_URI,
-                    COUNT_PROJECTION,
-                    mmsSelection,
-                    mmsSelectionArgs,
-                    null/*orderBy*/);
-            final int mmsCount = getCountFromCursor(remoteMmsCursor);
-            final int remoteCount = smsCount + mmsCount;
-            final boolean isInSync = (localCount == remoteCount);
-            if (isInSync) {
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "SyncCursorPair: Same # of local and remote messages = "
-                            + localCount);
-                }
-            } else {
-                LogUtil.i(TAG, "SyncCursorPair: Not in sync; # local messages = " + localCount
-                        + ", # remote message = " + remoteCount);
-            }
-            return isInSync;
-        } catch (final Exception e) {
-            LogUtil.e(TAG, "SyncCursorPair: failed to query local or remote message counts", e);
-            // If something is wrong in querying database, assume we are synced so
-            // we don't retry indefinitely
-        } finally {
-            if (localCursor != null) {
-                localCursor.close();
-            }
-            if (remoteSmsCursor != null) {
-                remoteSmsCursor.close();
-            }
-            if (remoteMmsCursor != null) {
-                remoteMmsCursor.close();
-            }
-        }
-        return true;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/SyncMessageBatch.java b/src/com/android/messaging/datamodel/action/SyncMessageBatch.java
deleted file mode 100644
index a623666..0000000
--- a/src/com/android/messaging/datamodel/action/SyncMessageBatch.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.database.Cursor;
-import android.database.sqlite.SQLiteConstraintException;
-import android.provider.Telephony;
-import android.provider.Telephony.Mms;
-import android.provider.Telephony.Sms;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.SyncManager.ThreadInfoCache;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.mmslib.pdu.PduHeaders;
-import com.android.messaging.sms.DatabaseMessages.LocalDatabaseMessage;
-import com.android.messaging.sms.DatabaseMessages.MmsMessage;
-import com.android.messaging.sms.DatabaseMessages.SmsMessage;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Update local database with a batch of messages to add/delete in one transaction
- */
-class SyncMessageBatch {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    // Variables used during executeAction
-    private final HashSet<String> mConversationsToUpdate;
-    // Cache of thread->conversationId map
-    private final ThreadInfoCache mCache;
-
-    // Set of SMS messages to add
-    private final ArrayList<SmsMessage> mSmsToAdd;
-    // Set of MMS messages to add
-    private final ArrayList<MmsMessage> mMmsToAdd;
-    // Set of local messages to delete
-    private final ArrayList<LocalDatabaseMessage> mMessagesToDelete;
-
-    SyncMessageBatch(final ArrayList<SmsMessage> smsToAdd,
-            final ArrayList<MmsMessage> mmsToAdd,
-            final ArrayList<LocalDatabaseMessage> messagesToDelete,
-            final ThreadInfoCache cache) {
-        mSmsToAdd = smsToAdd;
-        mMmsToAdd = mmsToAdd;
-        mMessagesToDelete = messagesToDelete;
-        mCache = cache;
-        mConversationsToUpdate = new HashSet<String>();
-    }
-
-    void updateLocalDatabase() {
-        // Perform local database changes in one transaction
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        db.beginTransaction();
-        try {
-            // Store all the SMS messages
-            for (final SmsMessage sms : mSmsToAdd) {
-                storeSms(db, sms);
-            }
-            // Store all the MMS messages
-            for (final MmsMessage mms : mMmsToAdd) {
-                storeMms(db, mms);
-            }
-            // Keep track of conversations with messages deleted
-            for (final LocalDatabaseMessage message : mMessagesToDelete) {
-                mConversationsToUpdate.add(message.getConversationId());
-            }
-            // Batch delete local messages
-            batchDelete(db, DatabaseHelper.MESSAGES_TABLE, MessageColumns._ID,
-                    messageListToIds(mMessagesToDelete));
-
-            for (final LocalDatabaseMessage message : mMessagesToDelete) {
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "SyncMessageBatch: Deleted message " + message.getLocalId()
-                            + " for SMS/MMS " + message.getUri() + " with timestamp "
-                            + message.getTimestampInMillis());
-                }
-            }
-
-            // Update conversation state for imported messages, like snippet,
-            updateConversations(db);
-
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-    }
-
-    private static String[] messageListToIds(final List<LocalDatabaseMessage> messagesToDelete) {
-        final String[] ids = new String[messagesToDelete.size()];
-        for (int i = 0; i < ids.length; i++) {
-            ids[i] = Long.toString(messagesToDelete.get(i).getLocalId());
-        }
-        return ids;
-    }
-
-    /**
-     * Store the SMS message into local database.
-     *
-     * @param sms
-     */
-    private void storeSms(final DatabaseWrapper db, final SmsMessage sms) {
-        if (sms.mBody == null) {
-            LogUtil.w(TAG, "SyncMessageBatch: SMS " + sms.mUri + " has no body; adding empty one");
-            // try to fix it
-            sms.mBody = "";
-        }
-
-        if (TextUtils.isEmpty(sms.mAddress)) {
-            LogUtil.e(TAG, "SyncMessageBatch: SMS has no address; using unknown sender");
-            // try to fix it
-            sms.mAddress = ParticipantData.getUnknownSenderDestination();
-        }
-
-        // TODO : We need to also deal with messages in a failed/retry state
-        final boolean isOutgoing = sms.mType != Sms.MESSAGE_TYPE_INBOX;
-
-        final String otherPhoneNumber = sms.mAddress;
-
-        // A forced resync of all messages should still keep the archived states.
-        // The database upgrade code notifies sync manager of this. We need to
-        // honor the original customization to this conversation if created.
-        final String conversationId = mCache.getOrCreateConversation(db, sms.mThreadId, sms.mSubId,
-                DataModel.get().getSyncManager().getCustomizationForThread(sms.mThreadId));
-        if (conversationId == null) {
-            // Cannot create conversation for this message? This should not happen.
-            LogUtil.e(TAG, "SyncMessageBatch: Failed to create conversation for SMS thread "
-                    + sms.mThreadId);
-            return;
-        }
-        final ParticipantData self = ParticipantData.getSelfParticipant(sms.getSubId());
-        final String selfId =
-                BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, self);
-        final ParticipantData sender = isOutgoing ?
-                self :
-                ParticipantData.getFromRawPhoneBySimLocale(otherPhoneNumber, sms.getSubId());
-        final String participantId = (isOutgoing ? selfId :
-                BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, sender));
-
-        final int bugleStatus = bugleStatusForSms(isOutgoing, sms.mType, sms.mStatus);
-
-        final MessageData message = MessageData.createSmsMessage(
-                sms.mUri,
-                participantId,
-                selfId,
-                conversationId,
-                bugleStatus,
-                sms.mSeen,
-                sms.mRead,
-                sms.mTimestampSentInMillis,
-                sms.mTimestampInMillis,
-                sms.mBody);
-
-        // Inserting sms content into messages table
-        try {
-            BugleDatabaseOperations.insertNewMessageInTransaction(db, message);
-        } catch (SQLiteConstraintException e) {
-            rethrowSQLiteConstraintExceptionWithDetails(e, db, sms.mUri, sms.mThreadId,
-                    conversationId, selfId, participantId);
-        }
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "SyncMessageBatch: Inserted new message " + message.getMessageId()
-                    + " for SMS " + message.getSmsMessageUri() + " received at "
-                    + message.getReceivedTimeStamp());
-        }
-
-        // Keep track of updated conversation for later updating the conversation snippet, etc.
-        mConversationsToUpdate.add(conversationId);
-    }
-
-    public static int bugleStatusForSms(final boolean isOutgoing, final int type,
-            final int status) {
-        int bugleStatus = MessageData.BUGLE_STATUS_UNKNOWN;
-        // For a message we sync either
-        if (isOutgoing) {
-            // Outgoing message not yet been sent
-            if (type == Telephony.Sms.MESSAGE_TYPE_FAILED
-                    || type == Telephony.Sms.MESSAGE_TYPE_OUTBOX
-                    || type == Telephony.Sms.MESSAGE_TYPE_QUEUED
-                    || (type == Telephony.Sms.MESSAGE_TYPE_SENT
-                            && status >= Telephony.Sms.STATUS_FAILED)) {
-                // Not sent counts as failed and available for manual resend
-                bugleStatus = MessageData.BUGLE_STATUS_OUTGOING_FAILED;
-            } else if (status == Sms.STATUS_COMPLETE) {
-                bugleStatus = MessageData.BUGLE_STATUS_OUTGOING_DELIVERED;
-            } else {
-                // Otherwise outgoing message is complete
-                bugleStatus = MessageData.BUGLE_STATUS_OUTGOING_COMPLETE;
-            }
-        } else {
-            // All incoming SMS messages are complete
-            bugleStatus = MessageData.BUGLE_STATUS_INCOMING_COMPLETE;
-        }
-        return bugleStatus;
-    }
-
-    /**
-     * Store the MMS message into local database
-     *
-     * @param mms
-     */
-    private void storeMms(final DatabaseWrapper db, final MmsMessage mms) {
-        if (mms.mParts.size() < 1) {
-            LogUtil.w(TAG, "SyncMessageBatch: MMS " + mms.mUri + " has no parts");
-        }
-
-        // TODO : We need to also deal with messages in a failed/retry state
-        final boolean isOutgoing = mms.mType != Mms.MESSAGE_BOX_INBOX;
-        final boolean isNotification = (mms.mMmsMessageType ==
-                PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND);
-
-        final String senderId = mms.mSender;
-
-        // A forced resync of all messages should still keep the archived states.
-        // The database upgrade code notifies sync manager of this. We need to
-        // honor the original customization to this conversation if created.
-        final String conversationId = mCache.getOrCreateConversation(db, mms.mThreadId, mms.mSubId,
-                DataModel.get().getSyncManager().getCustomizationForThread(mms.mThreadId));
-        if (conversationId == null) {
-            LogUtil.e(TAG, "SyncMessageBatch: Failed to create conversation for MMS thread "
-                    + mms.mThreadId);
-            return;
-        }
-        final ParticipantData self = ParticipantData.getSelfParticipant(mms.getSubId());
-        final String selfId =
-                BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, self);
-        final ParticipantData sender = isOutgoing ?
-                self : ParticipantData.getFromRawPhoneBySimLocale(senderId, mms.getSubId());
-        final String participantId = (isOutgoing ? selfId :
-                BugleDatabaseOperations.getOrCreateParticipantInTransaction(db, sender));
-
-        final int bugleStatus = MmsUtils.bugleStatusForMms(isOutgoing, isNotification, mms.mType);
-
-        // Import message and all of the parts.
-        // TODO : For now we are importing these in the order we found them in the MMS
-        // database. Ideally we would load and parse the SMIL which describes how the parts relate
-        // to one another.
-
-        // TODO: Need to set correct status on message
-        final MessageData message = MmsUtils.createMmsMessage(mms, conversationId, participantId,
-                selfId, bugleStatus);
-
-        // Inserting mms content into messages table
-        try {
-            BugleDatabaseOperations.insertNewMessageInTransaction(db, message);
-        } catch (SQLiteConstraintException e) {
-            rethrowSQLiteConstraintExceptionWithDetails(e, db, mms.mUri, mms.mThreadId,
-                    conversationId, selfId, participantId);
-        }
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "SyncMessageBatch: Inserted new message " + message.getMessageId()
-                    + " for MMS " + message.getSmsMessageUri() + " received at "
-                    + message.getReceivedTimeStamp());
-        }
-
-        // Keep track of updated conversation for later updating the conversation snippet, etc.
-        mConversationsToUpdate.add(conversationId);
-    }
-
-    // TODO: Remove this after we no longer see this crash (b/18375758)
-    private static void rethrowSQLiteConstraintExceptionWithDetails(SQLiteConstraintException e,
-            DatabaseWrapper db, String messageUri, long threadId, String conversationId,
-            String selfId, String senderId) {
-        // Add some extra debug information to the exception for tracking down b/18375758.
-        // The default detail message for SQLiteConstraintException tells us that a foreign
-        // key constraint failed, but not which one! Messages have foreign keys to 3 tables:
-        // conversations, participants (self), participants (sender). We'll query each one
-        // to determine which one(s) violated the constraint, and then throw a new exception
-        // with those details.
-
-        String foundConversationId = null;
-        Cursor cursor = null;
-        try {
-            // Look for an existing conversation in the db with the conversation id
-            cursor = db.rawQuery("SELECT " + ConversationColumns._ID
-                    + " FROM " + DatabaseHelper.CONVERSATIONS_TABLE
-                    + " WHERE " + ConversationColumns._ID + "=" + conversationId,
-                    null);
-            if (cursor != null && cursor.moveToFirst()) {
-                Assert.isTrue(cursor.getCount() == 1);
-                foundConversationId = cursor.getString(0);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        ParticipantData foundSelfParticipant =
-                BugleDatabaseOperations.getExistingParticipant(db, selfId);
-        ParticipantData foundSenderParticipant =
-                BugleDatabaseOperations.getExistingParticipant(db, senderId);
-
-        String errorMsg = "SQLiteConstraintException while inserting message for " + messageUri
-                + "; conversation id from getOrCreateConversation = " + conversationId
-                + " (lookup thread = " + threadId + "), found conversation id = "
-                + foundConversationId + ", found self participant = "
-                + LogUtil.sanitizePII(foundSelfParticipant.getNormalizedDestination())
-                + " (lookup id = " + selfId + "), found sender participant = "
-                + LogUtil.sanitizePII(foundSenderParticipant.getNormalizedDestination())
-                + " (lookup id = " + senderId + ")";
-        throw new RuntimeException(errorMsg, e);
-    }
-
-    /**
-     * Use the tracked latest message info to update conversations, including
-     * latest chat message and sort timestamp.
-     */
-    private void updateConversations(final DatabaseWrapper db) {
-        for (final String conversationId : mConversationsToUpdate) {
-            if (BugleDatabaseOperations.deleteConversationIfEmptyInTransaction(db,
-                    conversationId)) {
-                continue;
-            }
-
-            final boolean archived = mCache.isArchived(conversationId);
-            // Always attempt to auto-switch conversation self id for sync/import case.
-            BugleDatabaseOperations.maybeRefreshConversationMetadataInTransaction(db,
-                    conversationId, true /*shouldAutoSwitchSelfId*/, archived /*keepArchived*/);
-        }
-    }
-
-
-    /**
-     * Batch delete database rows by matching a column with a list of values, usually some
-     * kind of IDs.
-     *
-     * @param table
-     * @param column
-     * @param ids
-     * @return Total number of deleted messages
-     */
-    private static int batchDelete(final DatabaseWrapper db, final String table,
-            final String column, final String[] ids) {
-        int totalDeleted = 0;
-        final int totalIds = ids.length;
-        for (int start = 0; start < totalIds; start += MmsUtils.MAX_IDS_PER_QUERY) {
-            final int end = Math.min(start + MmsUtils.MAX_IDS_PER_QUERY, totalIds); //excluding
-            final int count = end - start;
-            final String batchSelection = String.format(
-                    Locale.US,
-                    "%s IN %s",
-                    column,
-                    MmsUtils.getSqlInOperand(count));
-            final String[] batchSelectionArgs = Arrays.copyOfRange(ids, start, end);
-            final int deleted = db.delete(
-                    table,
-                    batchSelection,
-                    batchSelectionArgs);
-            totalDeleted += deleted;
-        }
-        return totalDeleted;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/SyncMessagesAction.java b/src/com/android/messaging/datamodel/action/SyncMessagesAction.java
deleted file mode 100644
index a11d5bb..0000000
--- a/src/com/android/messaging/datamodel/action/SyncMessagesAction.java
+++ /dev/null
@@ -1,637 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteException;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.os.SystemClock;
-import android.provider.Telephony.Mms;
-import androidx.collection.LongSparseArray;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.datamodel.SyncManager.ThreadInfoCache;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.mmslib.SqliteWrapper;
-import com.android.messaging.sms.DatabaseMessages;
-import com.android.messaging.sms.DatabaseMessages.LocalDatabaseMessage;
-import com.android.messaging.sms.DatabaseMessages.MmsMessage;
-import com.android.messaging.sms.DatabaseMessages.SmsMessage;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.BuglePrefsKeys;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Action used to sync messages from smsmms db to local database
- */
-public class SyncMessagesAction extends Action implements Parcelable {
-    static final long SYNC_FAILED = Long.MIN_VALUE;
-
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    private static final String KEY_START_TIMESTAMP = "start_timestamp";
-    private static final String KEY_MAX_UPDATE = "max_update";
-    private static final String KEY_LOWER_BOUND = "lower_bound";
-    private static final String KEY_UPPER_BOUND = "upper_bound";
-    private static final String BUNDLE_KEY_LAST_TIMESTAMP = "last_timestamp";
-    private static final String BUNDLE_KEY_SMS_MESSAGES = "sms_to_add";
-    private static final String BUNDLE_KEY_MMS_MESSAGES = "mms_to_add";
-    private static final String BUNDLE_KEY_MESSAGES_TO_DELETE = "messages_to_delete";
-
-    /**
-     * Start a full sync (backed off a few seconds to avoid pulling sending/receiving messages).
-     */
-    public static void fullSync() {
-        final BugleGservices bugleGservices = BugleGservices.get();
-        final long smsSyncBackoffTimeMillis = bugleGservices.getLong(
-                BugleGservicesKeys.SMS_SYNC_BACKOFF_TIME_MILLIS,
-                BugleGservicesKeys.SMS_SYNC_BACKOFF_TIME_MILLIS_DEFAULT);
-
-        final long now = System.currentTimeMillis();
-        // TODO: Could base this off most recent message in db but now should be okay...
-        final long startTimestamp = now - smsSyncBackoffTimeMillis;
-
-        final SyncMessagesAction action = new SyncMessagesAction(-1L, startTimestamp,
-                0, startTimestamp);
-        action.start();
-    }
-
-    /**
-     * Start an incremental sync to pull messages since last sync (backed off a few seconds)..
-     */
-    public static void sync() {
-        final BugleGservices bugleGservices = BugleGservices.get();
-        final long smsSyncBackoffTimeMillis = bugleGservices.getLong(
-                BugleGservicesKeys.SMS_SYNC_BACKOFF_TIME_MILLIS,
-                BugleGservicesKeys.SMS_SYNC_BACKOFF_TIME_MILLIS_DEFAULT);
-
-        final long now = System.currentTimeMillis();
-        // TODO: Could base this off most recent message in db but now should be okay...
-        final long startTimestamp = now - smsSyncBackoffTimeMillis;
-
-        sync(startTimestamp);
-    }
-
-    /**
-     * Start an incremental sync when the application starts up (no back off as not yet
-     *  sending/receiving).
-     */
-    public static void immediateSync() {
-        final long now = System.currentTimeMillis();
-        // TODO: Could base this off most recent message in db but now should be okay...
-        final long startTimestamp = now;
-
-        sync(startTimestamp);
-    }
-
-    private static void sync(final long startTimestamp) {
-        if (!OsUtil.hasSmsPermission()) {
-            // Sync requires READ_SMS permission
-            return;
-        }
-
-        final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-        // Lower bound is end of previous sync
-        final long syncLowerBoundTimeMillis = prefs.getLong(BuglePrefsKeys.LAST_SYNC_TIME,
-                    BuglePrefsKeys.LAST_SYNC_TIME_DEFAULT);
-
-        final SyncMessagesAction action = new SyncMessagesAction(syncLowerBoundTimeMillis,
-                startTimestamp, 0, startTimestamp);
-        action.start();
-    }
-
-    private SyncMessagesAction(final long lowerBound, final long upperBound,
-            final int maxMessagesToUpdate, final long startTimestamp) {
-        actionParameters.putLong(KEY_LOWER_BOUND, lowerBound);
-        actionParameters.putLong(KEY_UPPER_BOUND, upperBound);
-        actionParameters.putInt(KEY_MAX_UPDATE, maxMessagesToUpdate);
-        actionParameters.putLong(KEY_START_TIMESTAMP, startTimestamp);
-    }
-
-    @Override
-    protected Object executeAction() {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        long lowerBoundTimeMillis = actionParameters.getLong(KEY_LOWER_BOUND);
-        final long upperBoundTimeMillis = actionParameters.getLong(KEY_UPPER_BOUND);
-        final int initialMaxMessagesToUpdate = actionParameters.getInt(KEY_MAX_UPDATE);
-        final long startTimestamp = actionParameters.getLong(KEY_START_TIMESTAMP);
-
-        if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "SyncMessagesAction: Request to sync messages from "
-                    + lowerBoundTimeMillis + " to " + upperBoundTimeMillis + " (start timestamp = "
-                    + startTimestamp + ", message update limit = " + initialMaxMessagesToUpdate
-                    + ")");
-        }
-
-        final SyncManager syncManager = DataModel.get().getSyncManager();
-        if (lowerBoundTimeMillis >= 0) {
-            // Cursors
-            final SyncCursorPair cursors = new SyncCursorPair(-1L, lowerBoundTimeMillis);
-            final boolean inSync = cursors.isSynchronized(db);
-            if (!inSync) {
-                if (syncManager.delayUntilFullSync(startTimestamp) == 0) {
-                    lowerBoundTimeMillis = -1;
-                    actionParameters.putLong(KEY_LOWER_BOUND, lowerBoundTimeMillis);
-
-                    if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                        LogUtil.d(TAG, "SyncMessagesAction: Messages before "
-                                + lowerBoundTimeMillis + " not in sync; promoting to full sync");
-                    }
-                } else if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "SyncMessagesAction: Messages before "
-                            + lowerBoundTimeMillis + " not in sync; will do incremental sync");
-                }
-            } else {
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "SyncMessagesAction: Messages before " + lowerBoundTimeMillis
-                            + " are in sync");
-                }
-            }
-        }
-
-        // Check if sync allowed (can be too soon after last or one is already running)
-        if (syncManager.shouldSync(lowerBoundTimeMillis < 0, startTimestamp)) {
-            syncManager.startSyncBatch(upperBoundTimeMillis);
-            requestBackgroundWork();
-        }
-
-        return null;
-    }
-
-    @Override
-    protected Bundle doBackgroundWork() {
-        final BugleGservices bugleGservices = BugleGservices.get();
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final int maxMessagesToScan = bugleGservices.getInt(
-                BugleGservicesKeys.SMS_SYNC_BATCH_MAX_MESSAGES_TO_SCAN,
-                BugleGservicesKeys.SMS_SYNC_BATCH_MAX_MESSAGES_TO_SCAN_DEFAULT);
-
-        final int initialMaxMessagesToUpdate = actionParameters.getInt(KEY_MAX_UPDATE);
-        final int smsSyncSubsequentBatchSizeMin = bugleGservices.getInt(
-                BugleGservicesKeys.SMS_SYNC_BATCH_SIZE_MIN,
-                BugleGservicesKeys.SMS_SYNC_BATCH_SIZE_MIN_DEFAULT);
-        final int smsSyncSubsequentBatchSizeMax = bugleGservices.getInt(
-                BugleGservicesKeys.SMS_SYNC_BATCH_SIZE_MAX,
-                BugleGservicesKeys.SMS_SYNC_BATCH_SIZE_MAX_DEFAULT);
-
-        // Cap sync size to GServices limits
-        final int maxMessagesToUpdate = Math.max(smsSyncSubsequentBatchSizeMin,
-                Math.min(initialMaxMessagesToUpdate, smsSyncSubsequentBatchSizeMax));
-
-        final long lowerBoundTimeMillis = actionParameters.getLong(KEY_LOWER_BOUND);
-        final long upperBoundTimeMillis = actionParameters.getLong(KEY_UPPER_BOUND);
-
-        LogUtil.i(TAG, "SyncMessagesAction: Starting batch for messages from "
-                + lowerBoundTimeMillis + " to " + upperBoundTimeMillis
-                + " (message update limit = " + maxMessagesToUpdate + ", message scan limit = "
-                + maxMessagesToScan + ")");
-
-        // Clear last change time so that we can work out if this batch is dirty when it completes
-        final SyncManager syncManager = DataModel.get().getSyncManager();
-
-        // Clear the singleton cache that maps threads to recipients and to conversations.
-        final SyncManager.ThreadInfoCache cache = syncManager.getThreadInfoCache();
-        cache.clear();
-
-        // Sms messages to store
-        final ArrayList<SmsMessage> smsToAdd = new ArrayList<SmsMessage>();
-        // Mms messages to store
-        final LongSparseArray<MmsMessage> mmsToAdd = new LongSparseArray<MmsMessage>();
-        // List of local SMS/MMS to remove
-        final ArrayList<LocalDatabaseMessage> messagesToDelete =
-                new ArrayList<LocalDatabaseMessage>();
-
-        long lastTimestampMillis = SYNC_FAILED;
-        if (syncManager.isSyncing(upperBoundTimeMillis)) {
-            // Cursors
-            final SyncCursorPair cursors = new SyncCursorPair(lowerBoundTimeMillis,
-                    upperBoundTimeMillis);
-
-            // Actually compare the messages using cursor pair
-            lastTimestampMillis = syncCursorPair(db, cursors, smsToAdd, mmsToAdd,
-                    messagesToDelete, maxMessagesToScan, maxMessagesToUpdate, cache);
-        }
-        final Bundle response = new Bundle();
-
-        // If comparison succeeds bundle up the changes for processing in ActionService
-        if (lastTimestampMillis > SYNC_FAILED) {
-            final ArrayList<MmsMessage> mmsToAddList = new ArrayList<MmsMessage>();
-            for (int i = 0; i < mmsToAdd.size(); i++) {
-                final MmsMessage mms = mmsToAdd.valueAt(i);
-                mmsToAddList.add(mms);
-            }
-
-            response.putParcelableArrayList(BUNDLE_KEY_SMS_MESSAGES, smsToAdd);
-            response.putParcelableArrayList(BUNDLE_KEY_MMS_MESSAGES, mmsToAddList);
-            response.putParcelableArrayList(BUNDLE_KEY_MESSAGES_TO_DELETE, messagesToDelete);
-        }
-        response.putLong(BUNDLE_KEY_LAST_TIMESTAMP, lastTimestampMillis);
-
-        return response;
-    }
-
-    /**
-     * Compare messages based on timestamp and uri
-     * @param db local database wrapper
-     * @param cursors cursor pair holding references to local and remote messages
-     * @param smsToAdd newly found sms messages to add
-     * @param mmsToAdd newly found mms messages to add
-     * @param messagesToDelete messages not found needing deletion
-     * @param maxMessagesToScan max messages to scan for changes
-     * @param maxMessagesToUpdate max messages to return for updates
-     * @param cache cache for conversation id / thread id / recipient set mapping
-     * @return timestamp of the oldest message seen during the sync scan
-     */
-    private long syncCursorPair(final DatabaseWrapper db, final SyncCursorPair cursors,
-            final ArrayList<SmsMessage> smsToAdd, final LongSparseArray<MmsMessage> mmsToAdd,
-            final ArrayList<LocalDatabaseMessage> messagesToDelete, final int maxMessagesToScan,
-            final int maxMessagesToUpdate, final ThreadInfoCache cache) {
-        long lastTimestampMillis;
-        final long startTimeMillis = SystemClock.elapsedRealtime();
-
-        // Number of messages scanned local and remote
-        int localPos = 0;
-        int remotePos = 0;
-        int localTotal = 0;
-        int remoteTotal = 0;
-        // Scan through the messages on both sides and prepare messages for local message table
-        // changes (including adding and deleting)
-        try {
-            cursors.query(db);
-
-            localTotal = cursors.getLocalCount();
-            remoteTotal = cursors.getRemoteCount();
-
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "SyncMessagesAction: Scanning cursors (local count = " + localTotal
-                        + ", remote count = " + remoteTotal + ", message update limit = "
-                        + maxMessagesToUpdate + ", message scan limit = " + maxMessagesToScan
-                        + ")");
-            }
-
-            lastTimestampMillis = cursors.scan(maxMessagesToScan, maxMessagesToUpdate,
-                    smsToAdd, mmsToAdd, messagesToDelete, cache);
-
-            localPos = cursors.getLocalPosition();
-            remotePos = cursors.getRemotePosition();
-
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "SyncMessagesAction: Scanned cursors (local position = " + localPos
-                        + " of " + localTotal + ", remote position = " + remotePos + " of "
-                        + remoteTotal + ")");
-            }
-
-            // Batch loading the parts of the MMS messages in this batch
-            loadMmsParts(mmsToAdd);
-            // Lookup senders for incoming mms messages
-            setMmsSenders(mmsToAdd, cache);
-        } catch (final SQLiteException e) {
-            LogUtil.e(TAG, "SyncMessagesAction: Database exception", e);
-            // Let's abort
-            lastTimestampMillis = SYNC_FAILED;
-        } catch (final Exception e) {
-            // We want to catch anything unexpected since this is running in a separate thread
-            // and any unexpected exception will just fail this thread silently.
-            // Let's crash for dogfooders!
-            LogUtil.wtf(TAG, "SyncMessagesAction: unexpected failure in scan", e);
-            lastTimestampMillis = SYNC_FAILED;
-        } finally {
-            if (cursors != null) {
-                cursors.close();
-            }
-        }
-
-        final long endTimeMillis = SystemClock.elapsedRealtime();
-
-        if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-            LogUtil.d(TAG, "SyncMessagesAction: Scan complete (took "
-                    + (endTimeMillis - startTimeMillis) + " ms). " + smsToAdd.size()
-                    + " remote SMS to add, " + mmsToAdd.size() + " MMS to add, "
-                    + messagesToDelete.size() + " local messages to delete. "
-                    + "Oldest timestamp seen = " + lastTimestampMillis);
-        }
-
-        return lastTimestampMillis;
-    }
-
-    /**
-     * Perform local database updates and schedule follow on sync actions
-     */
-    @Override
-    protected Object processBackgroundResponse(final Bundle response) {
-        final long lastTimestampMillis = response.getLong(BUNDLE_KEY_LAST_TIMESTAMP);
-        final long lowerBoundTimeMillis = actionParameters.getLong(KEY_LOWER_BOUND);
-        final long upperBoundTimeMillis = actionParameters.getLong(KEY_UPPER_BOUND);
-        final int maxMessagesToUpdate = actionParameters.getInt(KEY_MAX_UPDATE);
-        final long startTimestamp = actionParameters.getLong(KEY_START_TIMESTAMP);
-
-        // Check with the sync manager if any conflicting updates have been made to databases
-        final SyncManager syncManager = DataModel.get().getSyncManager();
-        final boolean orphan = !syncManager.isSyncing(upperBoundTimeMillis);
-
-        // lastTimestampMillis used to indicate failure
-        if (orphan) {
-            // This batch does not match current in progress timestamp.
-            LogUtil.w(TAG, "SyncMessagesAction: Ignoring orphan sync batch for messages from "
-                    + lowerBoundTimeMillis + " to " + upperBoundTimeMillis);
-        } else {
-            final boolean dirty = syncManager.isBatchDirty(lastTimestampMillis);
-            if (lastTimestampMillis == SYNC_FAILED) {
-                LogUtil.e(TAG, "SyncMessagesAction: Sync failed - terminating");
-
-                // Failed - update last sync times to throttle our failure rate
-                final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-                // Save sync completion time so next sync will start from here
-                prefs.putLong(BuglePrefsKeys.LAST_SYNC_TIME, startTimestamp);
-                // Remember last full sync so that don't start background full sync right away
-                prefs.putLong(BuglePrefsKeys.LAST_FULL_SYNC_TIME, startTimestamp);
-
-                syncManager.complete();
-            } else if (dirty) {
-                LogUtil.w(TAG, "SyncMessagesAction: Redoing dirty sync batch of messages from "
-                        + lowerBoundTimeMillis + " to " + upperBoundTimeMillis);
-
-                // Redo this batch
-                final SyncMessagesAction nextBatch =
-                        new SyncMessagesAction(lowerBoundTimeMillis, upperBoundTimeMillis,
-                                maxMessagesToUpdate, startTimestamp);
-
-                syncManager.startSyncBatch(upperBoundTimeMillis);
-                requestBackgroundWork(nextBatch);
-            } else {
-                // Succeeded
-                final ArrayList<SmsMessage> smsToAdd =
-                        response.getParcelableArrayList(BUNDLE_KEY_SMS_MESSAGES);
-                final ArrayList<MmsMessage> mmsToAdd =
-                        response.getParcelableArrayList(BUNDLE_KEY_MMS_MESSAGES);
-                final ArrayList<LocalDatabaseMessage> messagesToDelete =
-                        response.getParcelableArrayList(BUNDLE_KEY_MESSAGES_TO_DELETE);
-
-                final int messagesUpdated = smsToAdd.size() + mmsToAdd.size()
-                        + messagesToDelete.size();
-
-                // Perform local database changes in one transaction
-                long txnTimeMillis = 0;
-                if (messagesUpdated > 0) {
-                    final long startTimeMillis = SystemClock.elapsedRealtime();
-                    final SyncMessageBatch batch = new SyncMessageBatch(smsToAdd, mmsToAdd,
-                            messagesToDelete, syncManager.getThreadInfoCache());
-                    batch.updateLocalDatabase();
-                    final long endTimeMillis = SystemClock.elapsedRealtime();
-                    txnTimeMillis = endTimeMillis - startTimeMillis;
-
-                    LogUtil.i(TAG, "SyncMessagesAction: Updated local database "
-                            + "(took " + txnTimeMillis + " ms). Added "
-                            + smsToAdd.size() + " SMS, added " + mmsToAdd.size() + " MMS, deleted "
-                            + messagesToDelete.size() + " messages.");
-
-                    // TODO: Investigate whether we can make this more fine-grained.
-                    MessagingContentProvider.notifyEverythingChanged();
-                } else {
-                    if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                        LogUtil.d(TAG, "SyncMessagesAction: No local database updates to make");
-                    }
-
-                    if (!syncManager.getHasFirstSyncCompleted()) {
-                        // If we have never completed a sync before (fresh install) and there are
-                        // no messages, still inform the UI of a change so it can update syncing
-                        // messages shown to the user
-                        MessagingContentProvider.notifyConversationListChanged();
-                        MessagingContentProvider.notifyPartsChanged();
-                    }
-                }
-                // Determine if there are more messages that need to be scanned
-                if (lastTimestampMillis >= 0 && lastTimestampMillis >= lowerBoundTimeMillis) {
-                    if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                        LogUtil.d(TAG, "SyncMessagesAction: More messages to sync; scheduling next "
-                                + "sync batch now.");
-                    }
-
-                    // Include final millisecond of last sync in next sync
-                    final long newUpperBoundTimeMillis = lastTimestampMillis + 1;
-                    final int newMaxMessagesToUpdate = nextBatchSize(messagesUpdated,
-                            txnTimeMillis);
-
-                    final SyncMessagesAction nextBatch =
-                            new SyncMessagesAction(lowerBoundTimeMillis, newUpperBoundTimeMillis,
-                                    newMaxMessagesToUpdate, startTimestamp);
-
-                    // Proceed with next batch
-                    syncManager.startSyncBatch(newUpperBoundTimeMillis);
-                    requestBackgroundWork(nextBatch);
-                } else {
-                    final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-                    // Save sync completion time so next sync will start from here
-                    prefs.putLong(BuglePrefsKeys.LAST_SYNC_TIME, startTimestamp);
-                    if (lowerBoundTimeMillis < 0) {
-                        // Remember last full sync so that don't start another full sync right away
-                        prefs.putLong(BuglePrefsKeys.LAST_FULL_SYNC_TIME, startTimestamp);
-                    }
-
-                    final long now = System.currentTimeMillis();
-
-                    // After any sync check if new messages have arrived
-                    final SyncCursorPair recents = new SyncCursorPair(startTimestamp, now);
-                    final SyncCursorPair olders = new SyncCursorPair(-1L, startTimestamp);
-                    final DatabaseWrapper db = DataModel.get().getDatabase();
-                    if (!recents.isSynchronized(db)) {
-                        LogUtil.i(TAG, "SyncMessagesAction: Changed messages after sync; "
-                                + "scheduling an incremental sync now.");
-
-                        // Just add a new batch for recent messages
-                        final SyncMessagesAction nextBatch =
-                                new SyncMessagesAction(startTimestamp, now, 0, startTimestamp);
-                        syncManager.startSyncBatch(now);
-                        requestBackgroundWork(nextBatch);
-                        // After partial sync verify sync state
-                    } else if (lowerBoundTimeMillis >= 0 && !olders.isSynchronized(db)) {
-                        // Add a batch going back to start of time
-                        LogUtil.w(TAG, "SyncMessagesAction: Changed messages before sync batch; "
-                                + "scheduling a full sync now.");
-
-                        final SyncMessagesAction nextBatch =
-                                new SyncMessagesAction(-1L, startTimestamp, 0, startTimestamp);
-
-                        syncManager.startSyncBatch(startTimestamp);
-                        requestBackgroundWork(nextBatch);
-                    } else {
-                        LogUtil.i(TAG, "SyncMessagesAction: All messages now in sync");
-
-                        // All done, in sync
-                        syncManager.complete();
-                    }
-                }
-                // Either sync should be complete or we should have a follow up request
-                Assert.isTrue(hasBackgroundActions() || !syncManager.isSyncing());
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Decide the next batch size based on the stats we collected with past batch
-     * @param messagesUpdated number of messages updated in this batch
-     * @param txnTimeMillis time the transaction took in ms
-     * @return Target number of messages to sync for next batch
-     */
-    private static int nextBatchSize(final int messagesUpdated, final long txnTimeMillis) {
-        final BugleGservices bugleGservices = BugleGservices.get();
-        final long smsSyncSubsequentBatchTimeLimitMillis = bugleGservices.getLong(
-                BugleGservicesKeys.SMS_SYNC_BATCH_TIME_LIMIT_MILLIS,
-                BugleGservicesKeys.SMS_SYNC_BATCH_TIME_LIMIT_MILLIS_DEFAULT);
-
-        if (txnTimeMillis <= 0) {
-            return 0;
-        }
-        // Number of messages we can sync within the batch time limit using
-        // the average sync time calculated based on the stats we collected
-        // in previous batch
-        return (int) ((double) (messagesUpdated) / (double) txnTimeMillis
-                        * smsSyncSubsequentBatchTimeLimitMillis);
-    }
-
-    /**
-     * Batch loading MMS parts for the messages in current batch
-     */
-    private void loadMmsParts(final LongSparseArray<MmsMessage> mmses) {
-        final Context context = Factory.get().getApplicationContext();
-        final int totalIds = mmses.size();
-        for (int start = 0; start < totalIds; start += MmsUtils.MAX_IDS_PER_QUERY) {
-            final int end = Math.min(start + MmsUtils.MAX_IDS_PER_QUERY, totalIds); //excluding
-            final int count = end - start;
-            final String batchSelection = String.format(
-                    Locale.US,
-                    "%s != '%s' AND %s IN %s",
-                    Mms.Part.CONTENT_TYPE,
-                    ContentType.APP_SMIL,
-                    Mms.Part.MSG_ID,
-                    MmsUtils.getSqlInOperand(count));
-            final String[] batchSelectionArgs = new String[count];
-            for (int i = 0; i < count; i++) {
-                batchSelectionArgs[i] = Long.toString(mmses.valueAt(start + i).getId());
-            }
-            final Cursor cursor = SqliteWrapper.query(
-                    context,
-                    context.getContentResolver(),
-                    MmsUtils.MMS_PART_CONTENT_URI,
-                    DatabaseMessages.MmsPart.PROJECTION,
-                    batchSelection,
-                    batchSelectionArgs,
-                    null/*sortOrder*/);
-            if (cursor != null) {
-                try {
-                    while (cursor.moveToNext()) {
-                        // Delay loading the media content for parsing for efficiency
-                        // TODO: load the media and fill in the dimensions when
-                        // we actually display it
-                        final DatabaseMessages.MmsPart part =
-                                DatabaseMessages.MmsPart.get(cursor, false/*loadMedia*/);
-                        final DatabaseMessages.MmsMessage mms = mmses.get(part.mMessageId);
-                        if (mms != null) {
-                            mms.addPart(part);
-                        }
-                    }
-                } finally {
-                    cursor.close();
-                }
-            }
-        }
-    }
-
-    /**
-     * Batch loading MMS sender for the messages in current batch
-     */
-    private void setMmsSenders(final LongSparseArray<MmsMessage> mmses,
-            final ThreadInfoCache cache) {
-        // Store all the MMS messages
-        for (int i = 0; i < mmses.size(); i++) {
-            final MmsMessage mms = mmses.valueAt(i);
-
-            final boolean isOutgoing = mms.mType != Mms.MESSAGE_BOX_INBOX;
-            String senderId = null;
-            if (!isOutgoing) {
-                // We only need to find out sender phone number for received message
-                senderId = getMmsSender(mms, cache);
-                if (senderId == null) {
-                    LogUtil.w(TAG, "SyncMessagesAction: Could not find sender of incoming MMS "
-                            + "message " + mms.getUri() + "; using 'unknown sender' instead");
-                    senderId = ParticipantData.getUnknownSenderDestination();
-                }
-            }
-            mms.setSender(senderId);
-        }
-    }
-
-    /**
-     * Find out the sender of an MMS message
-     */
-    private String getMmsSender(final MmsMessage mms, final ThreadInfoCache cache) {
-        final List<String> recipients = cache.getThreadRecipients(mms.mThreadId);
-        Assert.notNull(recipients);
-        Assert.isTrue(recipients.size() > 0);
-
-        if (recipients.size() == 1
-                && recipients.get(0).equals(ParticipantData.getUnknownSenderDestination())) {
-            LogUtil.w(TAG, "SyncMessagesAction: MMS message " + mms.mUri + " has unknown sender "
-                    + "(thread id = " + mms.mThreadId + ")");
-        }
-
-        return MmsUtils.getMmsSender(recipients, mms.mUri);
-    }
-
-    private SyncMessagesAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<SyncMessagesAction> CREATOR
-            = new Parcelable.Creator<SyncMessagesAction>() {
-        @Override
-        public SyncMessagesAction createFromParcel(final Parcel in) {
-            return new SyncMessagesAction(in);
-        }
-
-        @Override
-        public SyncMessagesAction[] newArray(final int size) {
-            return new SyncMessagesAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/UpdateConversationArchiveStatusAction.java b/src/com/android/messaging/datamodel/action/UpdateConversationArchiveStatusAction.java
deleted file mode 100644
index 066ad74..0000000
--- a/src/com/android/messaging/datamodel/action/UpdateConversationArchiveStatusAction.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.util.Assert;
-
-public class UpdateConversationArchiveStatusAction extends Action {
-
-    public static void archiveConversation(final String conversationId) {
-        final UpdateConversationArchiveStatusAction action =
-                new UpdateConversationArchiveStatusAction(conversationId, true /* isArchive */);
-        action.start();
-    }
-
-    public static void unarchiveConversation(final String conversationId) {
-        final UpdateConversationArchiveStatusAction action =
-                new UpdateConversationArchiveStatusAction(conversationId, false /* isArchive */);
-        action.start();
-    }
-
-    private static final String KEY_CONVERSATION_ID = "conversation_id";
-    private static final String KEY_IS_ARCHIVE = "is_archive";
-
-    protected UpdateConversationArchiveStatusAction(
-            final String conversationId, final boolean isArchive) {
-        Assert.isTrue(!TextUtils.isEmpty(conversationId));
-        actionParameters.putString(KEY_CONVERSATION_ID, conversationId);
-        actionParameters.putBoolean(KEY_IS_ARCHIVE, isArchive);
-    }
-
-    @Override
-    protected Object executeAction() {
-        final String conversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-        final boolean isArchived = actionParameters.getBoolean(KEY_IS_ARCHIVE);
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        db.beginTransaction();
-        try {
-            BugleDatabaseOperations.updateConversationArchiveStatusInTransaction(
-                    db, conversationId, isArchived);
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-
-        MessagingContentProvider.notifyConversationListChanged();
-        MessagingContentProvider.notifyConversationMetadataChanged(conversationId);
-        return null;
-    }
-
-    protected UpdateConversationArchiveStatusAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<UpdateConversationArchiveStatusAction> CREATOR
-            = new Parcelable.Creator<UpdateConversationArchiveStatusAction>() {
-        @Override
-        public UpdateConversationArchiveStatusAction createFromParcel(final Parcel in) {
-            return new UpdateConversationArchiveStatusAction(in);
-        }
-
-        @Override
-        public UpdateConversationArchiveStatusAction[] newArray(final int size) {
-            return new UpdateConversationArchiveStatusAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/UpdateConversationOptionsAction.java b/src/com/android/messaging/datamodel/action/UpdateConversationOptionsAction.java
deleted file mode 100644
index 6c9e739..0000000
--- a/src/com/android/messaging/datamodel/action/UpdateConversationOptionsAction.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentValues;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.util.Assert;
-
-/**
- * Action used to update conversation options such as notification settings.
- */
-public class UpdateConversationOptionsAction extends Action
-        implements Parcelable {
-    /**
-     * Enable/disable conversation notifications.
-     */
-    public static void enableConversationNotifications(final String conversationId,
-            final boolean enableNotification) {
-        Assert.notNull(conversationId);
-
-        final UpdateConversationOptionsAction action = new UpdateConversationOptionsAction(
-                conversationId, enableNotification, null, null);
-        action.start();
-    }
-
-    /**
-     * Sets conversation notification sound.
-     */
-    public static void setConversationNotificationSound(final String conversationId,
-            final String ringtoneUri) {
-        Assert.notNull(conversationId);
-
-        final UpdateConversationOptionsAction action = new UpdateConversationOptionsAction(
-                conversationId, null, ringtoneUri, null);
-        action.start();
-    }
-
-    /**
-     * Enable/disable vibrations for conversation notification.
-     */
-    public static void enableVibrationForConversationNotification(final String conversationId,
-            final boolean enableVibration) {
-        Assert.notNull(conversationId);
-
-        final UpdateConversationOptionsAction action = new UpdateConversationOptionsAction(
-                conversationId, null, null, enableVibration);
-        action.start();
-    }
-
-    private static final String KEY_CONVERSATION_ID = "conversation_id";
-
-    // Keys for all settable settings.
-    private static final String KEY_ENABLE_NOTIFICATION = "enable_notification";
-    private static final String KEY_RINGTONE_URI = "ringtone_uri";
-    private static final String KEY_ENABLE_VIBRATION = "enable_vibration";
-
-    protected UpdateConversationOptionsAction(final String conversationId,
-            final Boolean enableNotification, final String ringtoneUri,
-            final Boolean enableVibration) {
-        Assert.notNull(conversationId);
-        actionParameters.putString(KEY_CONVERSATION_ID, conversationId);
-        if (enableNotification != null) {
-            actionParameters.putBoolean(KEY_ENABLE_NOTIFICATION, enableNotification);
-        }
-
-        if (ringtoneUri != null) {
-            actionParameters.putString(KEY_RINGTONE_URI, ringtoneUri);
-        }
-
-        if (enableVibration != null) {
-            actionParameters.putBoolean(KEY_ENABLE_VIBRATION, enableVibration);
-        }
-    }
-
-    protected void putOptionValuesInTransaction(final ContentValues values,
-            final DatabaseWrapper dbWrapper) {
-        Assert.isTrue(dbWrapper.getDatabase().inTransaction());
-        if (actionParameters.containsKey(KEY_ENABLE_NOTIFICATION)) {
-            values.put(ConversationColumns.NOTIFICATION_ENABLED,
-                    actionParameters.getBoolean(KEY_ENABLE_NOTIFICATION));
-        }
-
-        if (actionParameters.containsKey(KEY_RINGTONE_URI)) {
-            values.put(ConversationColumns.NOTIFICATION_SOUND_URI,
-                    actionParameters.getString(KEY_RINGTONE_URI));
-        }
-
-        if (actionParameters.containsKey(KEY_ENABLE_VIBRATION)) {
-            values.put(ConversationColumns.NOTIFICATION_VIBRATION,
-                    actionParameters.getBoolean(KEY_ENABLE_VIBRATION));
-        }
-    }
-
-    @Override
-    protected Object executeAction() {
-        final String conversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        db.beginTransaction();
-        try {
-            final ContentValues values = new ContentValues();
-            putOptionValuesInTransaction(values, db);
-
-            BugleDatabaseOperations.updateConversationRowIfExists(db, conversationId, values);
-
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-        MessagingContentProvider.notifyConversationMetadataChanged(conversationId);
-        return null;
-    }
-
-    protected UpdateConversationOptionsAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<UpdateConversationOptionsAction> CREATOR
-            = new Parcelable.Creator<UpdateConversationOptionsAction>() {
-        @Override
-        public UpdateConversationOptionsAction createFromParcel(final Parcel in) {
-            return new UpdateConversationOptionsAction(in);
-        }
-
-        @Override
-        public UpdateConversationOptionsAction[] newArray(final int size) {
-            return new UpdateConversationOptionsAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/UpdateDestinationBlockedAction.java b/src/com/android/messaging/datamodel/action/UpdateDestinationBlockedAction.java
deleted file mode 100644
index c74096d..0000000
--- a/src/com/android/messaging/datamodel/action/UpdateDestinationBlockedAction.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.util.Assert;
-
-public class UpdateDestinationBlockedAction extends Action {
-    public interface UpdateDestinationBlockedActionListener {
-        @Assert.RunsOnMainThread
-        abstract void onUpdateDestinationBlockedAction(final UpdateDestinationBlockedAction action,
-                                                       final boolean success,
-                                                       final boolean block,
-                                                       final String destination);
-    }
-
-    public static class UpdateDestinationBlockedActionMonitor extends ActionMonitor
-            implements ActionMonitor.ActionCompletedListener {
-        private final UpdateDestinationBlockedActionListener mListener;
-
-        public UpdateDestinationBlockedActionMonitor(
-                Object data, UpdateDestinationBlockedActionListener mListener) {
-            super(STATE_CREATED, generateUniqueActionKey("UpdateDestinationBlockedAction"), data);
-            setCompletedListener(this);
-            this.mListener = mListener;
-        }
-
-        private void onActionDone(final boolean succeeded,
-                                  final ActionMonitor monitor,
-                                  final Action action,
-                                  final Object data,
-                                  final Object result) {
-            mListener.onUpdateDestinationBlockedAction(
-                    (UpdateDestinationBlockedAction) action,
-                    succeeded,
-                    action.actionParameters.getBoolean(KEY_BLOCKED),
-                    action.actionParameters.getString(KEY_DESTINATION));
-        }
-
-        @Override
-        public void onActionSucceeded(final ActionMonitor monitor,
-                                      final Action action,
-                                      final Object data,
-                                      final Object result) {
-            onActionDone(true, monitor, action, data, result);
-        }
-
-        @Override
-        public void onActionFailed(final ActionMonitor monitor,
-                                   final Action action,
-                                   final Object data,
-                                   final Object result) {
-            onActionDone(false, monitor, action, data, result);
-        }
-    }
-
-
-    public static UpdateDestinationBlockedActionMonitor updateDestinationBlocked(
-            final String destination, final boolean blocked, final String conversationId,
-            final UpdateDestinationBlockedActionListener listener) {
-        Assert.notNull(listener);
-        final UpdateDestinationBlockedActionMonitor monitor =
-                new UpdateDestinationBlockedActionMonitor(null, listener);
-        final UpdateDestinationBlockedAction action =
-                new UpdateDestinationBlockedAction(destination, blocked, conversationId,
-                        monitor.getActionKey());
-        action.start(monitor);
-        return monitor;
-    }
-
-    private static final String KEY_CONVERSATION_ID = "conversation_id";
-    private static final String KEY_DESTINATION = "destination";
-    private static final String KEY_BLOCKED = "blocked";
-
-    protected UpdateDestinationBlockedAction(
-            final String destination, final boolean blocked, final String conversationId,
-            final String actionKey) {
-        super(actionKey);
-        Assert.isTrue(!TextUtils.isEmpty(destination));
-        actionParameters.putString(KEY_DESTINATION, destination);
-        actionParameters.putBoolean(KEY_BLOCKED, blocked);
-        actionParameters.putString(KEY_CONVERSATION_ID, conversationId);
-    }
-
-    @Override
-    protected Object executeAction() {
-        final String destination = actionParameters.getString(KEY_DESTINATION);
-        final boolean isBlocked = actionParameters.getBoolean(KEY_BLOCKED);
-        String conversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        BugleDatabaseOperations.updateDestination(db, destination, isBlocked);
-        if (conversationId == null) {
-            conversationId = BugleDatabaseOperations
-                    .getConversationFromOtherParticipantDestination(db, destination);
-        }
-        if (conversationId != null) {
-            if (isBlocked) {
-                UpdateConversationArchiveStatusAction.archiveConversation(conversationId);
-            } else {
-                UpdateConversationArchiveStatusAction.unarchiveConversation(conversationId);
-            }
-            MessagingContentProvider.notifyParticipantsChanged(conversationId);
-        }
-        return null;
-    }
-
-    protected UpdateDestinationBlockedAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<UpdateDestinationBlockedAction> CREATOR
-            = new Parcelable.Creator<UpdateDestinationBlockedAction>() {
-        @Override
-        public UpdateDestinationBlockedAction createFromParcel(final Parcel in) {
-            return new UpdateDestinationBlockedAction(in);
-        }
-
-        @Override
-        public UpdateDestinationBlockedAction[] newArray(final int size) {
-            return new UpdateDestinationBlockedAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/UpdateMessageNotificationAction.java b/src/com/android/messaging/datamodel/action/UpdateMessageNotificationAction.java
deleted file mode 100644
index 94e6f3b..0000000
--- a/src/com/android/messaging/datamodel/action/UpdateMessageNotificationAction.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.datamodel.BugleNotifications;
-
-/**
- * Updates the message notification (generally, to include voice replies we've
- * made since the notification was first posted).
- */
-public class UpdateMessageNotificationAction extends Action {
-
-    public static void updateMessageNotification() {
-        new UpdateMessageNotificationAction().start();
-    }
-
-    private UpdateMessageNotificationAction() {
-    }
-
-    @Override
-    protected Object executeAction() {
-        BugleNotifications.update(true /* silent */, BugleNotifications.UPDATE_MESSAGES);
-        return null;
-    }
-
-    private UpdateMessageNotificationAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<UpdateMessageNotificationAction> CREATOR
-            = new Parcelable.Creator<UpdateMessageNotificationAction>() {
-        @Override
-        public UpdateMessageNotificationAction createFromParcel(final Parcel in) {
-            return new UpdateMessageNotificationAction(in);
-        }
-
-        @Override
-        public UpdateMessageNotificationAction[] newArray(final int size) {
-            return new UpdateMessageNotificationAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/UpdateMessagePartSizeAction.java b/src/com/android/messaging/datamodel/action/UpdateMessagePartSizeAction.java
deleted file mode 100644
index 273dce9..0000000
--- a/src/com/android/messaging/datamodel/action/UpdateMessagePartSizeAction.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentValues;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.DatabaseHelper.PartColumns;
-import com.android.messaging.util.Assert;
-
-/**
- * Action used to update size fields of a single part
- */
-public class UpdateMessagePartSizeAction extends Action implements Parcelable {
-    /**
-     * Update size of part
-     */
-    public static void updateSize(final String partId, final int width, final int height) {
-        Assert.notNull(partId);
-        Assert.inRange(width, 0, Integer.MAX_VALUE);
-        Assert.inRange(height, 0, Integer.MAX_VALUE);
-
-        final UpdateMessagePartSizeAction action = new UpdateMessagePartSizeAction(
-                partId, width, height);
-        action.start();
-    }
-
-    private static final String KEY_PART_ID = "part_id";
-    private static final String KEY_WIDTH = "width";
-    private static final String KEY_HEIGHT = "height";
-
-    private UpdateMessagePartSizeAction(final String partId, final int width, final int height) {
-        actionParameters.putString(KEY_PART_ID, partId);
-        actionParameters.putInt(KEY_WIDTH, width);
-        actionParameters.putInt(KEY_HEIGHT, height);
-    }
-
-    @Override
-    protected Object executeAction() {
-        final String partId = actionParameters.getString(KEY_PART_ID);
-        final int width = actionParameters.getInt(KEY_WIDTH);
-        final int height = actionParameters.getInt(KEY_HEIGHT);
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        db.beginTransaction();
-        try {
-            final ContentValues values = new ContentValues();
-
-            values.put(PartColumns.WIDTH, width);
-            values.put(PartColumns.HEIGHT, height);
-
-            // Part may have been deleted so allow update to fail without asserting
-            BugleDatabaseOperations.updateRowIfExists(db, DatabaseHelper.PARTS_TABLE,
-                    PartColumns._ID, partId, values);
-
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-        return null;
-    }
-
-    private UpdateMessagePartSizeAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<UpdateMessagePartSizeAction> CREATOR
-            = new Parcelable.Creator<UpdateMessagePartSizeAction>() {
-        @Override
-        public UpdateMessagePartSizeAction createFromParcel(final Parcel in) {
-            return new UpdateMessagePartSizeAction(in);
-        }
-
-        @Override
-        public UpdateMessagePartSizeAction[] newArray(final int size) {
-            return new UpdateMessagePartSizeAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/action/WriteDraftMessageAction.java b/src/com/android/messaging/datamodel/action/WriteDraftMessageAction.java
deleted file mode 100644
index c1f39e1..0000000
--- a/src/com/android/messaging/datamodel/action/WriteDraftMessageAction.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.util.LogUtil;
-
-public class WriteDraftMessageAction extends Action implements Parcelable {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-
-    /**
-     * Set draft message (no listener)
-     */
-    public static void writeDraftMessage(final String conversationId, final MessageData message) {
-        final WriteDraftMessageAction action = new WriteDraftMessageAction(conversationId, message);
-        action.start();
-    }
-
-    private static final String KEY_CONVERSATION_ID = "conversationId";
-    private static final String KEY_MESSAGE = "message";
-
-    private WriteDraftMessageAction(final String conversationId, final MessageData message) {
-        actionParameters.putString(KEY_CONVERSATION_ID, conversationId);
-        actionParameters.putParcelable(KEY_MESSAGE, message);
-    }
-
-    @Override
-    protected Object executeAction() {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final String conversationId = actionParameters.getString(KEY_CONVERSATION_ID);
-        final MessageData message = actionParameters.getParcelable(KEY_MESSAGE);
-        if (message.getSelfId() == null || message.getParticipantId() == null) {
-            // This could happen when this occurs before the draft message is loaded
-            // In this case, we just use the conversation's current self id as draft's
-            // self id and/or participant id
-            final ConversationListItemData conversation =
-                    ConversationListItemData.getExistingConversation(db, conversationId);
-            if (conversation != null) {
-                final String senderAndSelf = conversation.getSelfId();
-                if (message.getSelfId() == null) {
-                    message.bindSelfId(senderAndSelf);
-                }
-                if (message.getParticipantId() == null) {
-                    message.bindParticipantId(senderAndSelf);
-                }
-            } else {
-                LogUtil.w(LogUtil.BUGLE_DATAMODEL_TAG, "Conversation " + conversationId +
-                        "already deleted before saving draft message " +
-                        message.getMessageId() + ". Aborting WriteDraftMessageAction.");
-                return null;
-            }
-        }
-        // Drafts are only kept in the local DB...
-        final String messageId = BugleDatabaseOperations.updateDraftMessageData(
-                db, conversationId, message, BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
-        MessagingContentProvider.notifyConversationListChanged();
-        MessagingContentProvider.notifyConversationMetadataChanged(conversationId);
-        return messageId;
-    }
-
-    private WriteDraftMessageAction(final Parcel in) {
-        super(in);
-    }
-
-    public static final Parcelable.Creator<WriteDraftMessageAction> CREATOR
-            = new Parcelable.Creator<WriteDraftMessageAction>() {
-        @Override
-        public WriteDraftMessageAction createFromParcel(final Parcel in) {
-            return new WriteDraftMessageAction(in);
-        }
-
-        @Override
-        public WriteDraftMessageAction[] newArray(final int size) {
-            return new WriteDraftMessageAction[size];
-        }
-    };
-
-    @Override
-    public void writeToParcel(final Parcel parcel, final int flags) {
-        writeActionToParcel(parcel, flags);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/binding/BindableData.java b/src/com/android/messaging/datamodel/binding/BindableData.java
deleted file mode 100644
index 5446098..0000000
--- a/src/com/android/messaging/datamodel/binding/BindableData.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.binding;
-
-/**
- * Base class for data objects that will be bound to a piece of the UI
- */
-public abstract class BindableData {
-    /**
-     * Called by Binding during unbind to allow data to proactively unregister callbacks
-     * Data instance should release all listeners that may call back to the host UI
-     */
-    protected abstract void unregisterListeners();
-
-    /**
-     * Key used to identify the piece of UI that the data is currently bound to
-     */
-    private String mBindingId;
-
-    /**
-     * Bind this data to the ui host - checks data is currently unbound
-     */
-    public void bind(final String bindingId) {
-        if (isBound() || bindingId == null) {
-            throw new IllegalStateException();
-        }
-        mBindingId = bindingId;
-    }
-
-    /**
-     * Unbind this data from the ui host - checks that the data is currently bound to specified id
-     */
-    public void unbind(final String bindingId) {
-        if (!isBound(bindingId)) {
-            throw new IllegalStateException();
-        }
-        unregisterListeners();
-        mBindingId = null;
-    }
-
-    /**
-     * Check to see if the data is bound to anything
-     *
-     * TODO: This should be package private because it's supposed to only be used by Binding,
-     * however, several classes call this directly.  We want the classes to track what they are
-     * bound to.
-     */
-    protected boolean isBound() {
-        return (mBindingId != null);
-    }
-
-    /**
-     * Check to see if data is still bound with specified bindingId before calling over to ui
-     */
-    public boolean isBound(final String bindingId) {
-        return (bindingId.equals(mBindingId));
-    }
-}
diff --git a/src/com/android/messaging/datamodel/binding/BindableOnceData.java b/src/com/android/messaging/datamodel/binding/BindableOnceData.java
deleted file mode 100644
index 08e11da..0000000
--- a/src/com/android/messaging/datamodel/binding/BindableOnceData.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.binding;
-
-/**
- * A BindableData that's only used to be bound once. If the client needs to rebind, it needs
- * to create a new instance of the BindableOnceData.
- */
-public abstract class BindableOnceData extends BindableData {
-    private boolean boundOnce = false;
-
-    @Override
-    public void bind(final String bindingId) {
-        // Ensures that we can't re-bind again after the first binding.
-        if (boundOnce) {
-            throw new IllegalStateException();
-        }
-        super.bind(bindingId);
-        boundOnce = true;
-    }
-
-    /**
-     * Checks if the instance is bound to anything.
-     */
-    @Override
-    public boolean isBound() {
-        return super.isBound();
-    }
-}
diff --git a/src/com/android/messaging/datamodel/binding/Binding.java b/src/com/android/messaging/datamodel/binding/Binding.java
deleted file mode 100644
index 3ec01dd..0000000
--- a/src/com/android/messaging/datamodel/binding/Binding.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.binding;
-
-import java.util.concurrent.atomic.AtomicLong;
-
-public class Binding<T extends BindableData> extends BindingBase<T> {
-    private static AtomicLong sBindingIdx = new AtomicLong(System.currentTimeMillis() * 1000);
-
-    private String mBindingId;
-    private T mData;
-    private final Object mOwner;
-    private boolean mWasBound;
-
-    /**
-     * Initialize a binding instance - the owner is typically the containing class
-     */
-    Binding(final Object owner) {
-        mOwner = owner;
-    }
-
-    @Override
-    public T getData() {
-        ensureBound();
-        return mData;
-    }
-
-    @Override
-    public boolean isBound() {
-        return (mData != null && mData.isBound(mBindingId));
-    }
-
-    @Override
-    public boolean isBound(final T data) {
-        return (isBound() && data == mData);
-    }
-
-    @Override
-    public void ensureBound() {
-        if (!isBound()) {
-            throw new IllegalStateException("not bound; wasBound = " + mWasBound);
-        }
-    }
-
-    @Override
-    public void ensureBound(final T data) {
-        if (!isBound()) {
-            throw new IllegalStateException("not bound; wasBound = " + mWasBound);
-        } else if (data != mData) {
-            throw new IllegalStateException("not bound to correct data " + data + " vs " + mData);
-        }
-    }
-
-    @Override
-    public String getBindingId() {
-        return mBindingId;
-    }
-
-    public void bind(final T data) {
-        // Check both this binding and the data not already bound
-        if (mData != null || data.isBound()) {
-            throw new IllegalStateException("already bound when binding to " + data);
-        }
-        // Generate a unique identifier for this bind call
-        mBindingId = Long.toHexString(sBindingIdx.getAndIncrement());
-        data.bind(mBindingId);
-        mData = data;
-        mWasBound = true;
-    }
-
-    public void unbind() {
-        // Check this binding is bound and that data is bound to this binding
-        if (mData == null || !mData.isBound(mBindingId)) {
-            throw new IllegalStateException("not bound when unbind");
-        }
-        mData.unbind(mBindingId);
-        mData = null;
-        mBindingId = null;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/binding/BindingBase.java b/src/com/android/messaging/datamodel/binding/BindingBase.java
deleted file mode 100644
index 3d6da9b..0000000
--- a/src/com/android/messaging/datamodel/binding/BindingBase.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.binding;
-
-/**
- * The binding class keeps track of a binding between a ui component and an item of BindableData
- * It allows each side to ensure that when it communicates with the other they are still bound
- * together.
- * NOTE: Ensure that the UI component uses the same binding instance for it's whole lifetime
- *  (DO NOT CREATE A NEW BINDING EACH TIME A NEW PIECE OF DATA IS BOUND)...
- *
- * The ui component owns the binding instance.
- * It can use it [isBound(data)] to see if the binding still binds to the right piece of data
- *
- * Upon binding the data is informed of a unique binding key generated in this class and can use
- * that to ensure that it is still issuing callbacks to the right piece of ui.
- */
-public abstract class BindingBase<T extends BindableData> {
-    /**
-     * Creates a new exclusively owned binding for the owner object.
-     */
-    public static <T extends BindableData> Binding<T> createBinding(final Object owner) {
-        return new Binding<T>(owner);
-    }
-
-    /**
-     * Creates a new read-only binding referencing the source binding object.
-     * TODO: We may want to refcount the Binding references, so that when the binding owner
-     * calls unbind() when there's still outstanding references we can catch it.
-     */
-    public static <T extends BindableData> ImmutableBindingRef<T> createBindingReference(
-            final BindingBase<T> srcBinding) {
-        return new ImmutableBindingRef<T>(srcBinding);
-    }
-
-    /**
-     * Creates a detachable binding for the owner object. Use this if your owner object is a UI
-     * component that may undergo a "detached from window" -> "re-attached to window" transition.
-     */
-    public static <T extends BindableData> DetachableBinding<T> createDetachableBinding(
-            final Object owner) {
-        return new DetachableBinding<T>(owner);
-    }
-
-    public abstract T getData();
-
-    /**
-     * Check if binding connects to the specified data instance
-     */
-    public abstract boolean isBound();
-
-    /**
-     * Check if binding connects to the specified data instance
-     */
-    public abstract boolean isBound(final T data);
-
-    /**
-     * Throw if binding connects to the specified data instance
-     */
-    public abstract void ensureBound();
-
-    /**
-     * Throw if binding connects to the specified data instance
-     */
-    public abstract void ensureBound(final T data);
-
-    /**
-     * Return the binding id for this binding (will be null if not bound)
-     */
-    public abstract String getBindingId();
-}
diff --git a/src/com/android/messaging/datamodel/binding/DetachableBinding.java b/src/com/android/messaging/datamodel/binding/DetachableBinding.java
deleted file mode 100644
index a414c3b..0000000
--- a/src/com/android/messaging/datamodel/binding/DetachableBinding.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.binding;
-
-import com.android.messaging.util.Assert;
-
-/**
- * An extension on {@link Binding} that allows for temporary data detachment from the UI component.
- * This is used when, instead of destruction or data rebinding, the owning UI undergoes a
- * "detached from window" -> "re-attached to window" transition, in which case we want to
- * temporarily unbind the data and remember it so that it can be rebound when the UI is re-attached
- * to window later.
- */
-public class DetachableBinding<T extends BindableData> extends Binding<T> {
-    private T mDetachedData;
-
-    DetachableBinding(Object owner) {
-        super(owner);
-    }
-
-    @Override
-    public void bind(T data) {
-        super.bind(data);
-        // Rebinding before re-attaching. Pre-emptively throw away the detached data because
-        // it's now stale.
-        mDetachedData = null;
-    }
-
-    public void detach() {
-        Assert.isNull(mDetachedData);
-        Assert.isTrue(isBound());
-        mDetachedData = getData();
-        unbind();
-    }
-
-    public void reAttachIfPossible() {
-        if (mDetachedData != null) {
-            Assert.isFalse(isBound());
-            bind(mDetachedData);
-            mDetachedData = null;
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/binding/ImmutableBindingRef.java b/src/com/android/messaging/datamodel/binding/ImmutableBindingRef.java
deleted file mode 100644
index 9a0a3d6..0000000
--- a/src/com/android/messaging/datamodel/binding/ImmutableBindingRef.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.binding;
-
-import com.android.messaging.util.Assert;
-
-/**
- * A immutable wrapper around a Binding object. Callers can only access readonly methods like
- * getData(), isBound() and ensureBound() but not bind() and unbind(). This is used for MVC pattern
- * where both the View and the Controller needs access to a centrally bound Model object. The View
- * is the one that owns the bind/unbind logic of the Binding, whereas controller only serves as a
- * consumer.
- */
-public class ImmutableBindingRef<T extends BindableData> extends BindingBase<T> {
-    /**
-     * The referenced, read-only binding object.
-     */
-    private final BindingBase<T> mBinding;
-
-    /**
-     * Hidden ctor.
-     */
-    ImmutableBindingRef(final BindingBase<T> binding) {
-        mBinding = resolveBinding(binding);
-    }
-
-    @Override
-    public T getData() {
-        return mBinding.getData();
-    }
-
-    @Override
-    public boolean isBound() {
-        return mBinding.isBound();
-    }
-
-    @Override
-    public boolean isBound(final T data) {
-        return mBinding.isBound(data);
-    }
-
-    @Override
-    public void ensureBound() {
-        mBinding.ensureBound();
-    }
-
-    @Override
-    public void ensureBound(final T data) {
-        mBinding.ensureBound(data);
-    }
-
-    @Override
-    public String getBindingId() {
-        return mBinding.getBindingId();
-    }
-
-    /**
-     * Resolve the source binding to the real BindingImpl it's referencing. This avoids the
-     * redundancy of multiple wrapper calls when creating a binding reference from an existing
-     * binding reference.
-     */
-    private BindingBase<T> resolveBinding(final BindingBase<T> binding) {
-        BindingBase<T> resolvedBinding = binding;
-        while (resolvedBinding instanceof ImmutableBindingRef<?>) {
-            resolvedBinding = ((ImmutableBindingRef<T>) resolvedBinding).mBinding;
-        }
-        Assert.isTrue(resolvedBinding instanceof Binding<?>);
-        return resolvedBinding;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/BlockedParticipantsData.java b/src/com/android/messaging/datamodel/data/BlockedParticipantsData.java
deleted file mode 100644
index 4e94ee1..0000000
--- a/src/com/android/messaging/datamodel/data/BlockedParticipantsData.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.app.LoaderManager;
-import android.content.Context;
-import android.content.Loader;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-
-import com.android.messaging.datamodel.BoundCursorLoader;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.binding.BindableData;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.util.Assert;
-
-/**
- * Services data needs for BlockedParticipantsFragment
- */
-public class BlockedParticipantsData extends BindableData implements
-        LoaderManager.LoaderCallbacks<Cursor> {
-    public interface BlockedParticipantsDataListener {
-        public void onBlockedParticipantsCursorUpdated(final Cursor cursor);
-    }
-    private static final String BINDING_ID = "bindingId";
-    private static final int BLOCKED_PARTICIPANTS_LOADER = 1;
-    private final Context mContext;
-    private LoaderManager mLoaderManager;
-    private BlockedParticipantsDataListener mListener;
-
-    public BlockedParticipantsData(final Context context,
-            final BlockedParticipantsDataListener listener) {
-        mContext = context;
-        mListener = listener;
-    }
-
-    @Override
-    public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
-        Assert.isTrue(id == BLOCKED_PARTICIPANTS_LOADER);
-        final String bindingId = args.getString(BINDING_ID);
-        // Check if data still bound to the requesting ui element
-        if (isBound(bindingId)) {
-            final Uri uri = MessagingContentProvider.PARTICIPANTS_URI;
-            return new BoundCursorLoader(bindingId, mContext, uri,
-                    ParticipantData.ParticipantsQuery.PROJECTION,
-                    ParticipantColumns.BLOCKED + "=1", null, null);
-        }
-        return null;
-    }
-
-    @Override
-    public void onLoadFinished(final Loader<Cursor> loader, final Cursor cursor) {
-        Assert.isTrue(loader.getId() == BLOCKED_PARTICIPANTS_LOADER);
-        final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader;
-        Assert.isTrue(isBound(cursorLoader.getBindingId()));
-        mListener.onBlockedParticipantsCursorUpdated(cursor);
-    }
-
-    @Override
-    public void onLoaderReset(final Loader<Cursor> loader) {
-        Assert.isTrue(loader.getId() == BLOCKED_PARTICIPANTS_LOADER);
-        final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader;
-        Assert.isTrue(isBound(cursorLoader.getBindingId()));
-        mListener.onBlockedParticipantsCursorUpdated(null);
-    }
-
-    public void init(final LoaderManager loaderManager,
-            final BindingBase<BlockedParticipantsData> binding) {
-        final Bundle args = new Bundle();
-        args.putString(BINDING_ID, binding.getBindingId());
-        mLoaderManager = loaderManager;
-        mLoaderManager.initLoader(BLOCKED_PARTICIPANTS_LOADER, args, this);
-    }
-
-    @Override
-    protected void unregisterListeners() {
-        mListener = null;
-        if (mLoaderManager != null) {
-            mLoaderManager.destroyLoader(BLOCKED_PARTICIPANTS_LOADER);
-            mLoaderManager = null;
-        }
-    }
-
-    public ParticipantListItemData createParticipantListItemData(Cursor cursor) {
-        return new ParticipantListItemData(ParticipantData.getFromCursor(cursor));
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/ContactListItemData.java b/src/com/android/messaging/datamodel/data/ContactListItemData.java
deleted file mode 100644
index b9c7e85..0000000
--- a/src/com/android/messaging/datamodel/data/ContactListItemData.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract.DisplayNameSources;
-
-import com.android.ex.chips.RecipientEntry;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContactRecipientEntryUtils;
-import com.android.messaging.util.ContactUtil;
-
-/**
- * Data model object used to power ContactListItemViews, which may be displayed either in
- * our contact list, or in the chips UI search drop down presented by ContactDropdownLayouter.
- */
-public class ContactListItemData {
-    // Keeps the contact data in the form of RecipientEntry that RecipientEditTextView can
-    // directly use.
-    private RecipientEntry mRecipientEntry;
-
-    private CharSequence mStyledName;
-    private CharSequence mStyledDestination;
-
-    // If this contact is the first in the list for its first letter, then this will be the
-    // first letter, otherwise this is null.
-    private String mAlphabetHeader;
-
-    // Is the contact the only item in the list (happens when the user clicks on an
-    // existing chip for which we show full contact detail for the selected contact).
-    private boolean mSingleRecipient;
-
-    // Is the contact in managed profile.
-    private boolean mIsWorkContact;
-
-    /**
-     * Bind to a contact cursor in the contact list.
-     */
-    public void bind(final Cursor cursor, final String alphabetHeader) {
-        final long dataId = cursor.getLong(ContactUtil.INDEX_DATA_ID);
-        final long contactId = cursor.getLong(ContactUtil.INDEX_CONTACT_ID);
-        final String lookupKey = cursor.getString(ContactUtil.INDEX_LOOKUP_KEY);
-        final String displayName = cursor.getString(ContactUtil.INDEX_DISPLAY_NAME);
-        final String photoThumbnailUri = cursor.getString(ContactUtil.INDEX_PHOTO_URI);
-        final String destination = cursor.getString(ContactUtil.INDEX_PHONE_EMAIL);
-        final int destinationType = cursor.getInt(ContactUtil.INDEX_PHONE_EMAIL_TYPE);
-        final String destinationLabel = cursor.getString(ContactUtil.INDEX_PHONE_EMAIL_LABEL);
-        mStyledName = null;
-        mStyledDestination = null;
-        mAlphabetHeader = alphabetHeader;
-        mSingleRecipient = false;
-
-        // Check whether this contact is first level (i.e. whether it's the first entry of this
-        // contact in the contact list).
-        boolean isFirstLevel = true;
-        if (!cursor.isFirst() && cursor.moveToPrevious()) {
-            final long contactIdPrevious = cursor.getLong(ContactUtil.INDEX_CONTACT_ID);
-            if (contactId == contactIdPrevious) {
-                isFirstLevel = false;
-            }
-            cursor.moveToNext();
-        }
-
-        mRecipientEntry = ContactUtil.createRecipientEntry(displayName,
-                DisplayNameSources.STRUCTURED_NAME, destination, destinationType, destinationLabel,
-                contactId, lookupKey, dataId, photoThumbnailUri, isFirstLevel);
-
-        mIsWorkContact = ContactUtil.isEnterpriseContactId(contactId);
-    }
-
-    /**
-     * Bind to a RecipientEntry produced by the chips text view in the search drop down, plus
-     * optional styled name & destination for showing bold search match.
-     */
-    public void bind(final RecipientEntry entry, final CharSequence styledName,
-                     final CharSequence styledDestination, final boolean singleRecipient,
-                     final boolean isWorkContact) {
-        Assert.isTrue(entry.isValid());
-        mRecipientEntry = entry;
-        mStyledName = styledName;
-        mStyledDestination = styledDestination;
-        mAlphabetHeader = null;
-        mSingleRecipient = singleRecipient;
-        mIsWorkContact = isWorkContact;
-    }
-
-    public CharSequence getDisplayName() {
-        final CharSequence displayName = mStyledName != null ? mStyledName :
-            ContactRecipientEntryUtils.getDisplayNameForContactList(mRecipientEntry);
-        return displayName == null ? "" : displayName;
-    }
-
-    public Uri getPhotoThumbnailUri() {
-        return mRecipientEntry.getPhotoThumbnailUri() == null ? null :
-            mRecipientEntry.getPhotoThumbnailUri();
-    }
-
-    public CharSequence getDestination() {
-        final CharSequence destination = mStyledDestination != null ?
-                mStyledDestination : ContactRecipientEntryUtils.formatDestination(mRecipientEntry);
-        return destination == null ? "" : destination;
-    }
-
-    public int getDestinationType() {
-        return mRecipientEntry.getDestinationType();
-    }
-
-    public String getDestinationLabel() {
-        return mRecipientEntry.getDestinationLabel();
-    }
-
-    public long getContactId() {
-        return mRecipientEntry.getContactId();
-    }
-
-    public String getLookupKey() {
-        return mRecipientEntry.getLookupKey();
-    }
-
-    /**
-     * Returns if this item is "first-level," i.e. whether it's the first entry of the contact
-     * that it represents in the list. For example, if John Smith has 3 different phone numbers,
-     * then the first number is considered first-level, while the other two are considered
-     * second-level.
-     */
-    public boolean getIsFirstLevel() {
-        // Treat the item as first level if it's a top-level recipient entry, or if it's the only
-        // item in the list.
-        return mRecipientEntry.isFirstLevel() || mSingleRecipient;
-    }
-
-    /**
-     * Returns if this item is simple, i.e. it has only avatar and a display name with phone number
-     * embedded so we can hide everything else.
-     */
-    public boolean getIsSimpleContactItem() {
-        return ContactRecipientEntryUtils.isAvatarAndNumberOnlyContact(mRecipientEntry) ||
-                ContactRecipientEntryUtils.isSendToDestinationContact(mRecipientEntry);
-    }
-
-    public String getAlphabetHeader() {
-        return mAlphabetHeader;
-    }
-
-    /**
-     * Returns a RecipientEntry instance readily usable by the RecipientEditTextView.
-     */
-    public RecipientEntry getRecipientEntry() {
-        return mRecipientEntry;
-    }
-
-    /**
-     * @return whether the contact is in managed profile.
-     */
-    public boolean getIsWorkContact() {
-        return mIsWorkContact;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/ContactPickerData.java b/src/com/android/messaging/datamodel/data/ContactPickerData.java
deleted file mode 100644
index fd6fca0..0000000
--- a/src/com/android/messaging/datamodel/data/ContactPickerData.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.app.LoaderManager;
-import android.content.Context;
-import android.content.Loader;
-import android.database.Cursor;
-import android.os.Bundle;
-
-import com.android.messaging.datamodel.BoundCursorLoader;
-import com.android.messaging.datamodel.FrequentContactsCursorBuilder;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.binding.BindableData;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Class to access phone contacts.
- * The caller is responsible for ensuring that the app has READ_CONTACTS permission (see
- * {@link ContactUtil#hasReadContactsPermission()}) before instantiating this class.
- */
-public class ContactPickerData extends BindableData implements
-        LoaderManager.LoaderCallbacks<Cursor> {
-    public interface ContactPickerDataListener {
-        void onAllContactsCursorUpdated(Cursor data);
-        void onFrequentContactsCursorUpdated(Cursor data);
-        void onContactCustomColorLoaded(ContactPickerData data);
-    }
-
-    private static final String BINDING_ID = "bindingId";
-    private final Context mContext;
-    private LoaderManager mLoaderManager;
-    private ContactPickerDataListener mListener;
-    private final FrequentContactsCursorBuilder mFrequentContactsCursorBuilder;
-
-    public ContactPickerData(final Context context, final ContactPickerDataListener listener) {
-        mListener = listener;
-        mContext = context;
-        mFrequentContactsCursorBuilder = new FrequentContactsCursorBuilder();
-    }
-
-    private static final int ALL_CONTACTS_LOADER = 1;
-    private static final int FREQUENT_CONTACTS_LOADER = 2;
-    private static final int PARTICIPANT_LOADER = 3;
-
-    @Override
-    public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
-        final String bindingId = args.getString(BINDING_ID);
-        // Check if data still bound to the requesting ui element
-        if (isBound(bindingId)) {
-            switch (id) {
-                case ALL_CONTACTS_LOADER:
-                    return ContactUtil.getPhones(mContext)
-                            .createBoundCursorLoader(bindingId);
-                case FREQUENT_CONTACTS_LOADER:
-                    return ContactUtil.getFrequentContacts(mContext)
-                            .createBoundCursorLoader(bindingId);
-                case PARTICIPANT_LOADER:
-                    return new BoundCursorLoader(bindingId, mContext,
-                            MessagingContentProvider.PARTICIPANTS_URI,
-                            ParticipantData.ParticipantsQuery.PROJECTION, null, null, null);
-                default:
-                    Assert.fail("Unknown loader id for contact picker!");
-                    break;
-            }
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Loader created after unbinding the contacts list");
-        }
-        return null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onLoadFinished(final Loader<Cursor> loader, final Cursor data) {
-        final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader;
-        if (isBound(cursorLoader.getBindingId())) {
-            switch (loader.getId()) {
-                case ALL_CONTACTS_LOADER:
-                    mListener.onAllContactsCursorUpdated(data);
-                    mFrequentContactsCursorBuilder.setAllContacts(data);
-                    break;
-                case FREQUENT_CONTACTS_LOADER:
-                    mFrequentContactsCursorBuilder.setFrequents(data);
-                    break;
-                case PARTICIPANT_LOADER:
-                    mListener.onContactCustomColorLoaded(this);
-                    break;
-                default:
-                    Assert.fail("Unknown loader id for contact picker!");
-                    break;
-            }
-
-            if (loader.getId() != PARTICIPANT_LOADER) {
-                // The frequent contacts cursor to be used in the UI depends on results from both
-                // all contacts and frequent contacts loader, and we don't know which will finish
-                // first. Therefore, try to build the cursor and notify the listener if it's
-                // successfully built.
-                final Cursor frequentContactsCursor = mFrequentContactsCursorBuilder.build();
-                if (frequentContactsCursor != null) {
-                    mListener.onFrequentContactsCursorUpdated(frequentContactsCursor);
-                }
-            }
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Loader finished after unbinding the contacts list");
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onLoaderReset(final Loader<Cursor> loader) {
-        final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader;
-        if (isBound(cursorLoader.getBindingId())) {
-            switch (loader.getId()) {
-                case ALL_CONTACTS_LOADER:
-                    mListener.onAllContactsCursorUpdated(null);
-                    mFrequentContactsCursorBuilder.setAllContacts(null);
-                    break;
-                case FREQUENT_CONTACTS_LOADER:
-                    mListener.onFrequentContactsCursorUpdated(null);
-                    mFrequentContactsCursorBuilder.setFrequents(null);
-                    break;
-                case PARTICIPANT_LOADER:
-                    mListener.onContactCustomColorLoaded(this);
-                    break;
-                default:
-                    Assert.fail("Unknown loader id for contact picker!");
-                    break;
-            }
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Loader reset after unbinding the contacts list");
-        }
-    }
-
-    public void init(final LoaderManager loaderManager,
-                     final BindingBase<ContactPickerData> binding) {
-        final Bundle args = new Bundle();
-        args.putString(BINDING_ID, binding.getBindingId());
-        mLoaderManager = loaderManager;
-        mLoaderManager.initLoader(ALL_CONTACTS_LOADER, args, this);
-        mLoaderManager.initLoader(FREQUENT_CONTACTS_LOADER, args, this);
-        mLoaderManager.initLoader(PARTICIPANT_LOADER, args, this);
-    }
-
-    @Override
-    protected void unregisterListeners() {
-        mListener = null;
-
-
-        // This could be null if we bind but the caller doesn't init the BindableData
-        if (mLoaderManager != null) {
-            mLoaderManager.destroyLoader(ALL_CONTACTS_LOADER);
-            mLoaderManager.destroyLoader(FREQUENT_CONTACTS_LOADER);
-            mLoaderManager.destroyLoader(PARTICIPANT_LOADER);
-            mLoaderManager = null;
-        }
-        mFrequentContactsCursorBuilder.resetBuilder();
-    }
-
-    public static boolean isTooManyParticipants(final int participantCount) {
-        // When creating a conversation, the conversation will be created using the system's
-        // default SIM, so use the default MmsConfig's recipient limit.
-        return (participantCount > MmsConfig.get(ParticipantData.DEFAULT_SELF_SUB_ID)
-                .getRecipientLimit());
-    }
-
-    public static boolean getCanAddMoreParticipants(final int participantCount) {
-        // When creating a conversation, the conversation will be created using the system's
-        // default SIM, so use the default MmsConfig's recipient limit.
-        return (participantCount < MmsConfig.get(ParticipantData.DEFAULT_SELF_SUB_ID)
-                .getRecipientLimit());
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/ConversationData.java b/src/com/android/messaging/datamodel/data/ConversationData.java
deleted file mode 100644
index 704e46f..0000000
--- a/src/com/android/messaging/datamodel/data/ConversationData.java
+++ /dev/null
@@ -1,849 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.app.LoaderManager;
-import android.content.Context;
-import android.content.Loader;
-import android.database.Cursor;
-import android.database.CursorWrapper;
-import android.database.sqlite.SQLiteFullException;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.annotation.Nullable;
-import android.text.TextUtils;
-
-import com.android.common.contacts.DataUsageStatUpdater;
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.BoundCursorLoader;
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.action.DeleteConversationAction;
-import com.android.messaging.datamodel.action.DeleteMessageAction;
-import com.android.messaging.datamodel.action.InsertNewMessageAction;
-import com.android.messaging.datamodel.action.RedownloadMmsAction;
-import com.android.messaging.datamodel.action.ResendMessageAction;
-import com.android.messaging.datamodel.action.UpdateConversationArchiveStatusAction;
-import com.android.messaging.datamodel.binding.BindableData;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.SubscriptionListData.SubscriptionListEntry;
-import com.android.messaging.sms.MmsSmsUtils;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.RunsOnMainThread;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.widget.WidgetConversationProvider;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class ConversationData extends BindableData {
-
-    private static final String TAG = "bugle_datamodel";
-    private static final String BINDING_ID = "bindingId";
-    private static final long LAST_MESSAGE_TIMESTAMP_NaN = -1;
-    private static final int MESSAGE_COUNT_NaN = -1;
-
-    /**
-     * Takes a conversation id and a list of message ids and computes the positions
-     * for each message.
-     */
-    public List<Integer> getPositions(final String conversationId, final List<Long> ids) {
-        final ArrayList<Integer> result = new ArrayList<Integer>();
-
-        if (ids.isEmpty()) {
-            return result;
-        }
-
-        final Cursor c = new ConversationData.ReversedCursor(
-                DataModel.get().getDatabase().rawQuery(
-                        ConversationMessageData.getConversationMessageIdsQuerySql(),
-                        new String [] { conversationId }));
-        if (c != null) {
-            try {
-                final Set<Long> idsSet = new HashSet<Long>(ids);
-                if (c.moveToLast()) {
-                    do {
-                        final long messageId = c.getLong(0);
-                        if (idsSet.contains(messageId)) {
-                            result.add(c.getPosition());
-                        }
-                    } while (c.moveToPrevious());
-                }
-            } finally {
-                c.close();
-            }
-        }
-        Collections.sort(result);
-        return result;
-    }
-
-    public interface ConversationDataListener {
-        public void onConversationMessagesCursorUpdated(ConversationData data, Cursor cursor,
-                @Nullable ConversationMessageData newestMessage, boolean isSync);
-        public void onConversationMetadataUpdated(ConversationData data);
-        public void closeConversation(String conversationId);
-        public void onConversationParticipantDataLoaded(ConversationData data);
-        public void onSubscriptionListDataLoaded(ConversationData data);
-    }
-
-    private static class ReversedCursor extends CursorWrapper {
-        final int mCount;
-
-        public ReversedCursor(final Cursor cursor) {
-            super(cursor);
-            mCount = cursor.getCount();
-        }
-
-        @Override
-        public boolean moveToPosition(final int position) {
-            return super.moveToPosition(mCount - position - 1);
-        }
-
-        @Override
-        public int getPosition() {
-            return mCount - super.getPosition() - 1;
-        }
-
-        @Override
-        public boolean isAfterLast() {
-            return super.isBeforeFirst();
-        }
-
-        @Override
-        public boolean isBeforeFirst() {
-            return super.isAfterLast();
-        }
-
-        @Override
-        public boolean isFirst() {
-            return super.isLast();
-        }
-
-        @Override
-        public boolean isLast() {
-            return super.isFirst();
-        }
-
-        @Override
-        public boolean move(final int offset) {
-            return super.move(-offset);
-        }
-
-        @Override
-        public boolean moveToFirst() {
-            return super.moveToLast();
-        }
-
-        @Override
-        public boolean moveToLast() {
-            return super.moveToFirst();
-        }
-
-        @Override
-        public boolean moveToNext() {
-            return super.moveToPrevious();
-        }
-
-        @Override
-        public boolean moveToPrevious() {
-            return super.moveToNext();
-        }
-    }
-
-    /**
-     * A trampoline class so that we can inherit from LoaderManager.LoaderCallbacks multiple times.
-     */
-    private class MetadataLoaderCallbacks implements LoaderManager.LoaderCallbacks<Cursor> {
-        @Override
-        public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
-            Assert.equals(CONVERSATION_META_DATA_LOADER, id);
-            Loader<Cursor> loader = null;
-
-            final String bindingId = args.getString(BINDING_ID);
-            // Check if data still bound to the requesting ui element
-            if (isBound(bindingId)) {
-                final Uri uri =
-                        MessagingContentProvider.buildConversationMetadataUri(mConversationId);
-                loader = new BoundCursorLoader(bindingId, mContext, uri,
-                        ConversationListItemData.PROJECTION, null, null, null);
-            } else {
-                LogUtil.w(TAG, "Creating messages loader after unbinding mConversationId = " +
-                        mConversationId);
-            }
-            return loader;
-        }
-
-        @Override
-        public void onLoadFinished(final Loader<Cursor> generic, final Cursor data) {
-            final BoundCursorLoader loader = (BoundCursorLoader) generic;
-
-            // Check if data still bound to the requesting ui element
-            if (isBound(loader.getBindingId())) {
-                if (data.moveToNext()) {
-                    Assert.isTrue(data.getCount() == 1);
-                    mConversationMetadata.bind(data);
-                    mListeners.onConversationMetadataUpdated(ConversationData.this);
-                } else {
-                    // Close the conversation, no meta data means conversation was deleted
-                    LogUtil.w(TAG, "Meta data loader returned nothing for mConversationId = " +
-                            mConversationId);
-                    mListeners.closeConversation(mConversationId);
-                    // Notify the widget the conversation is deleted so it can go into its
-                    // configure state.
-                    WidgetConversationProvider.notifyConversationDeleted(
-                            Factory.get().getApplicationContext(),
-                            mConversationId);
-                }
-            } else {
-                LogUtil.w(TAG, "Meta data loader finished after unbinding mConversationId = " +
-                        mConversationId);
-            }
-        }
-
-        @Override
-        public void onLoaderReset(final Loader<Cursor> generic) {
-            final BoundCursorLoader loader = (BoundCursorLoader) generic;
-
-            // Check if data still bound to the requesting ui element
-            if (isBound(loader.getBindingId())) {
-                // Clear the conversation meta data
-                mConversationMetadata = new ConversationListItemData();
-                mListeners.onConversationMetadataUpdated(ConversationData.this);
-            } else {
-                LogUtil.w(TAG, "Meta data loader reset after unbinding mConversationId = " +
-                        mConversationId);
-            }
-        }
-    }
-
-    /**
-     * A trampoline class so that we can inherit from LoaderManager.LoaderCallbacks multiple times.
-     */
-    private class MessagesLoaderCallbacks implements LoaderManager.LoaderCallbacks<Cursor> {
-        @Override
-        public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
-            Assert.equals(CONVERSATION_MESSAGES_LOADER, id);
-            Loader<Cursor> loader = null;
-
-            final String bindingId = args.getString(BINDING_ID);
-            // Check if data still bound to the requesting ui element
-            if (isBound(bindingId)) {
-                final Uri uri =
-                        MessagingContentProvider.buildConversationMessagesUri(mConversationId);
-                loader = new BoundCursorLoader(bindingId, mContext, uri,
-                        ConversationMessageData.getProjection(), null, null, null);
-                mLastMessageTimestamp = LAST_MESSAGE_TIMESTAMP_NaN;
-                mMessageCount = MESSAGE_COUNT_NaN;
-            } else {
-                LogUtil.w(TAG, "Creating messages loader after unbinding mConversationId = " +
-                        mConversationId);
-            }
-            return loader;
-        }
-
-        @Override
-        public void onLoadFinished(final Loader<Cursor> generic, final Cursor rawData) {
-            final BoundCursorLoader loader = (BoundCursorLoader) generic;
-
-            // Check if data still bound to the requesting ui element
-            if (isBound(loader.getBindingId())) {
-                // Check if we have a new message, or if we had a message sync.
-                ConversationMessageData newMessage = null;
-                boolean isSync = false;
-                Cursor data = null;
-                if (rawData != null) {
-                    // Note that the cursor is sorted DESC so here we reverse it.
-                    // This is a performance issue (improvement) for large cursors.
-                    data = new ReversedCursor(rawData);
-
-                    final int messageCountOld = mMessageCount;
-                    mMessageCount = data.getCount();
-                    final ConversationMessageData lastMessage = getLastMessage(data);
-                    if (lastMessage != null) {
-                        final long lastMessageTimestampOld = mLastMessageTimestamp;
-                        mLastMessageTimestamp = lastMessage.getReceivedTimeStamp();
-                        final String lastMessageIdOld = mLastMessageId;
-                        mLastMessageId = lastMessage.getMessageId();
-                        if (TextUtils.equals(lastMessageIdOld, mLastMessageId) &&
-                                messageCountOld < mMessageCount) {
-                            // Last message stays the same (no incoming message) but message
-                            // count increased, which means there has been a message sync.
-                            isSync = true;
-                        } else if (messageCountOld != MESSAGE_COUNT_NaN && // Ignore initial load
-                                mLastMessageTimestamp != LAST_MESSAGE_TIMESTAMP_NaN &&
-                                mLastMessageTimestamp > lastMessageTimestampOld) {
-                            newMessage = lastMessage;
-                        }
-                    } else {
-                        mLastMessageTimestamp = LAST_MESSAGE_TIMESTAMP_NaN;
-                    }
-                } else {
-                    mMessageCount = MESSAGE_COUNT_NaN;
-                }
-
-                mListeners.onConversationMessagesCursorUpdated(ConversationData.this, data,
-                        newMessage, isSync);
-            } else {
-                LogUtil.w(TAG, "Messages loader finished after unbinding mConversationId = " +
-                        mConversationId);
-            }
-        }
-
-        @Override
-        public void onLoaderReset(final Loader<Cursor> generic) {
-            final BoundCursorLoader loader = (BoundCursorLoader) generic;
-
-            // Check if data still bound to the requesting ui element
-            if (isBound(loader.getBindingId())) {
-                mListeners.onConversationMessagesCursorUpdated(ConversationData.this, null, null,
-                        false);
-                mLastMessageTimestamp = LAST_MESSAGE_TIMESTAMP_NaN;
-                mMessageCount = MESSAGE_COUNT_NaN;
-            } else {
-                LogUtil.w(TAG, "Messages loader reset after unbinding mConversationId = " +
-                        mConversationId);
-            }
-        }
-
-        private ConversationMessageData getLastMessage(final Cursor cursor) {
-            if (cursor != null && cursor.getCount() > 0) {
-                final int position = cursor.getPosition();
-                if (cursor.moveToLast()) {
-                    final ConversationMessageData messageData = new ConversationMessageData();
-                    messageData.bind(cursor);
-                    cursor.move(position);
-                    return messageData;
-                }
-            }
-            return null;
-        }
-    }
-
-    /**
-     * A trampoline class so that we can inherit from LoaderManager.LoaderCallbacks multiple times.
-     */
-    private class ParticipantLoaderCallbacks implements LoaderManager.LoaderCallbacks<Cursor> {
-        @Override
-        public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
-            Assert.equals(PARTICIPANT_LOADER, id);
-            Loader<Cursor> loader = null;
-
-            final String bindingId = args.getString(BINDING_ID);
-            // Check if data still bound to the requesting ui element
-            if (isBound(bindingId)) {
-                final Uri uri =
-                        MessagingContentProvider.buildConversationParticipantsUri(mConversationId);
-                loader = new BoundCursorLoader(bindingId, mContext, uri,
-                        ParticipantData.ParticipantsQuery.PROJECTION, null, null, null);
-            } else {
-                LogUtil.w(TAG, "Creating participant loader after unbinding mConversationId = " +
-                        mConversationId);
-            }
-            return loader;
-        }
-
-        @Override
-        public void onLoadFinished(final Loader<Cursor> generic, final Cursor data) {
-            final BoundCursorLoader loader = (BoundCursorLoader) generic;
-
-            // Check if data still bound to the requesting ui element
-            if (isBound(loader.getBindingId())) {
-                mParticipantData.bind(data);
-                mListeners.onConversationParticipantDataLoaded(ConversationData.this);
-            } else {
-                LogUtil.w(TAG, "Participant loader finished after unbinding mConversationId = " +
-                        mConversationId);
-            }
-        }
-
-        @Override
-        public void onLoaderReset(final Loader<Cursor> generic) {
-            final BoundCursorLoader loader = (BoundCursorLoader) generic;
-
-            // Check if data still bound to the requesting ui element
-            if (isBound(loader.getBindingId())) {
-                mParticipantData.bind(null);
-            } else {
-                LogUtil.w(TAG, "Participant loader reset after unbinding mConversationId = " +
-                        mConversationId);
-            }
-        }
-    }
-
-    /**
-     * A trampoline class so that we can inherit from LoaderManager.LoaderCallbacks multiple times.
-     */
-    private class SelfParticipantLoaderCallbacks implements LoaderManager.LoaderCallbacks<Cursor> {
-        @Override
-        public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
-            Assert.equals(SELF_PARTICIPANT_LOADER, id);
-            Loader<Cursor> loader = null;
-
-            final String bindingId = args.getString(BINDING_ID);
-            // Check if data still bound to the requesting ui element
-            if (isBound(bindingId)) {
-                loader = new BoundCursorLoader(bindingId, mContext,
-                        MessagingContentProvider.PARTICIPANTS_URI,
-                        ParticipantData.ParticipantsQuery.PROJECTION,
-                        ParticipantColumns.SUB_ID + " <> ?",
-                        new String[] { String.valueOf(ParticipantData.OTHER_THAN_SELF_SUB_ID) },
-                        null);
-            } else {
-                LogUtil.w(TAG, "Creating self loader after unbinding mConversationId = " +
-                        mConversationId);
-            }
-            return loader;
-        }
-
-        @Override
-        public void onLoadFinished(final Loader<Cursor> generic, final Cursor data) {
-            final BoundCursorLoader loader = (BoundCursorLoader) generic;
-
-            // Check if data still bound to the requesting ui element
-            if (isBound(loader.getBindingId())) {
-                mSelfParticipantsData.bind(data);
-                mSubscriptionListData.bind(mSelfParticipantsData.getSelfParticipants(true));
-                mListeners.onSubscriptionListDataLoaded(ConversationData.this);
-            } else {
-                LogUtil.w(TAG, "Self loader finished after unbinding mConversationId = " +
-                        mConversationId);
-            }
-        }
-
-        @Override
-        public void onLoaderReset(final Loader<Cursor> generic) {
-            final BoundCursorLoader loader = (BoundCursorLoader) generic;
-
-            // Check if data still bound to the requesting ui element
-            if (isBound(loader.getBindingId())) {
-                mSelfParticipantsData.bind(null);
-            } else {
-                LogUtil.w(TAG, "Self loader reset after unbinding mConversationId = " +
-                        mConversationId);
-            }
-        }
-    }
-
-    private final ConversationDataEventDispatcher mListeners;
-    private final MetadataLoaderCallbacks mMetadataLoaderCallbacks;
-    private final MessagesLoaderCallbacks mMessagesLoaderCallbacks;
-    private final ParticipantLoaderCallbacks mParticipantsLoaderCallbacks;
-    private final SelfParticipantLoaderCallbacks mSelfParticipantLoaderCallbacks;
-    private final Context mContext;
-    private final String mConversationId;
-    private final ConversationParticipantsData mParticipantData;
-    private final SelfParticipantsData mSelfParticipantsData;
-    private ConversationListItemData mConversationMetadata;
-    private final SubscriptionListData mSubscriptionListData;
-    private LoaderManager mLoaderManager;
-    private long mLastMessageTimestamp = LAST_MESSAGE_TIMESTAMP_NaN;
-    private int mMessageCount = MESSAGE_COUNT_NaN;
-    private String mLastMessageId;
-
-    public ConversationData(final Context context, final ConversationDataListener listener,
-            final String conversationId) {
-        Assert.isTrue(conversationId != null);
-        mContext = context;
-        mConversationId = conversationId;
-        mMetadataLoaderCallbacks = new MetadataLoaderCallbacks();
-        mMessagesLoaderCallbacks = new MessagesLoaderCallbacks();
-        mParticipantsLoaderCallbacks = new ParticipantLoaderCallbacks();
-        mSelfParticipantLoaderCallbacks = new SelfParticipantLoaderCallbacks();
-        mParticipantData = new ConversationParticipantsData();
-        mConversationMetadata = new ConversationListItemData();
-        mSelfParticipantsData = new SelfParticipantsData();
-        mSubscriptionListData = new SubscriptionListData(context);
-
-        mListeners = new ConversationDataEventDispatcher();
-        mListeners.add(listener);
-    }
-
-    @RunsOnMainThread
-    public void addConversationDataListener(final ConversationDataListener listener) {
-        Assert.isMainThread();
-        mListeners.add(listener);
-    }
-
-    public String getConversationName() {
-        return mConversationMetadata.getName();
-    }
-
-    public boolean getIsArchived() {
-        return mConversationMetadata.getIsArchived();
-    }
-
-    public String getIcon() {
-        return mConversationMetadata.getIcon();
-    }
-
-    public String getConversationId() {
-        return mConversationId;
-    }
-
-    public void setFocus() {
-        DataModel.get().setFocusedConversation(mConversationId);
-        // As we are loading the conversation assume the user has read the messages...
-        // Do this late though so that it doesn't get in the way of other actions
-        BugleNotifications.markMessagesAsRead(mConversationId);
-    }
-
-    public void unsetFocus() {
-        DataModel.get().setFocusedConversation(null);
-    }
-
-    public boolean isFocused() {
-        return isBound() && DataModel.get().isFocusedConversation(mConversationId);
-    }
-
-    private static final int CONVERSATION_META_DATA_LOADER = 1;
-    private static final int CONVERSATION_MESSAGES_LOADER = 2;
-    private static final int PARTICIPANT_LOADER = 3;
-    private static final int SELF_PARTICIPANT_LOADER = 4;
-
-    public void init(final LoaderManager loaderManager,
-            final BindingBase<ConversationData> binding) {
-        // Remember the binding id so that loader callbacks can check if data is still bound
-        // to same ui component
-        final Bundle args = new Bundle();
-        args.putString(BINDING_ID, binding.getBindingId());
-        mLoaderManager = loaderManager;
-        mLoaderManager.initLoader(CONVERSATION_META_DATA_LOADER, args, mMetadataLoaderCallbacks);
-        mLoaderManager.initLoader(CONVERSATION_MESSAGES_LOADER, args, mMessagesLoaderCallbacks);
-        mLoaderManager.initLoader(PARTICIPANT_LOADER, args, mParticipantsLoaderCallbacks);
-        mLoaderManager.initLoader(SELF_PARTICIPANT_LOADER, args, mSelfParticipantLoaderCallbacks);
-    }
-
-    @Override
-    protected void unregisterListeners() {
-        mListeners.clear();
-        // Make sure focus has moved away from this conversation
-        // TODO: May false trigger if destroy happens after "new" conversation is focused.
-        //        Assert.isTrue(!DataModel.get().isFocusedConversation(mConversationId));
-
-        // This could be null if we bind but the caller doesn't init the BindableData
-        if (mLoaderManager != null) {
-            mLoaderManager.destroyLoader(CONVERSATION_META_DATA_LOADER);
-            mLoaderManager.destroyLoader(CONVERSATION_MESSAGES_LOADER);
-            mLoaderManager.destroyLoader(PARTICIPANT_LOADER);
-            mLoaderManager.destroyLoader(SELF_PARTICIPANT_LOADER);
-            mLoaderManager = null;
-        }
-    }
-
-    /**
-     * Gets the default self participant in the participant table (NOT the conversation's self).
-     * This is available as soon as self participant data is loaded.
-     */
-    public ParticipantData getDefaultSelfParticipant() {
-        return mSelfParticipantsData.getDefaultSelfParticipant();
-    }
-
-    public List<ParticipantData> getSelfParticipants(final boolean activeOnly) {
-        return mSelfParticipantsData.getSelfParticipants(activeOnly);
-    }
-
-    public int getSelfParticipantsCountExcludingDefault(final boolean activeOnly) {
-        return mSelfParticipantsData.getSelfParticipantsCountExcludingDefault(activeOnly);
-    }
-
-    public ParticipantData getSelfParticipantById(final String selfId) {
-        return mSelfParticipantsData.getSelfParticipantById(selfId);
-    }
-
-    /**
-     * For a 1:1 conversation return the other (not self) participant (else null)
-     */
-    public ParticipantData getOtherParticipant() {
-        return mParticipantData.getOtherParticipant();
-    }
-
-    /**
-     * Return true once the participants are loaded
-     */
-    public boolean getParticipantsLoaded() {
-        return mParticipantData.isLoaded();
-    }
-
-    public void sendMessage(final BindingBase<ConversationData> binding,
-            final MessageData message) {
-        Assert.isTrue(TextUtils.equals(mConversationId, message.getConversationId()));
-        Assert.isTrue(binding.getData() == this);
-
-        if (!OsUtil.isAtLeastL_MR1() || message.getSelfId() == null) {
-            InsertNewMessageAction.insertNewMessage(message);
-        } else {
-            final int systemDefaultSubId = PhoneUtils.getDefault().getDefaultSmsSubscriptionId();
-            if (systemDefaultSubId != ParticipantData.DEFAULT_SELF_SUB_ID &&
-                    mSelfParticipantsData.isDefaultSelf(message.getSelfId())) {
-                // Lock the sub selection to the system default SIM as soon as the user clicks on
-                // the send button to avoid races between this and when InsertNewMessageAction is
-                // actually executed on the data model thread, during which the user can potentially
-                // change the system default SIM in Settings.
-                InsertNewMessageAction.insertNewMessage(message, systemDefaultSubId);
-            } else {
-                InsertNewMessageAction.insertNewMessage(message);
-            }
-        }
-        // Update contacts so Frequents will reflect messaging activity.
-        if (!getParticipantsLoaded()) {
-            return;  // oh well, not critical
-        }
-        final ArrayList<String> phones = new ArrayList<>();
-        final ArrayList<String> emails = new ArrayList<>();
-        for (final ParticipantData participant : mParticipantData) {
-            if (!participant.isSelf()) {
-                if (participant.isEmail()) {
-                    emails.add(participant.getSendDestination());
-                } else {
-                    phones.add(participant.getSendDestination());
-                }
-            }
-        }
-
-        if (ContactUtil.hasReadContactsPermission()) {
-            SafeAsyncTask.executeOnThreadPool(new Runnable() {
-                @Override
-                public void run() {
-                    final DataUsageStatUpdater updater = new DataUsageStatUpdater(
-                            Factory.get().getApplicationContext());
-                    try {
-                        if (!phones.isEmpty()) {
-                            updater.updateWithPhoneNumber(phones);
-                        }
-                        if (!emails.isEmpty()) {
-                            updater.updateWithAddress(emails);
-                        }
-                    } catch (final SQLiteFullException ex) {
-                        LogUtil.w(TAG, "Unable to update contact", ex);
-                    }
-                }
-            });
-        }
-    }
-
-    public void downloadMessage(final BindingBase<ConversationData> binding,
-            final String messageId) {
-        Assert.isTrue(binding.getData() == this);
-        Assert.notNull(messageId);
-        RedownloadMmsAction.redownloadMessage(messageId);
-    }
-
-    public void resendMessage(final BindingBase<ConversationData> binding, final String messageId) {
-        Assert.isTrue(binding.getData() == this);
-        Assert.notNull(messageId);
-        ResendMessageAction.resendMessage(messageId);
-    }
-
-    public void deleteMessage(final BindingBase<ConversationData> binding, final String messageId) {
-        Assert.isTrue(binding.getData() == this);
-        Assert.notNull(messageId);
-        DeleteMessageAction.deleteMessage(messageId);
-    }
-
-    public void deleteConversation(final Binding<ConversationData> binding) {
-        Assert.isTrue(binding.getData() == this);
-        // If possible use timestamp of last message shown to delete only messages user is aware of
-        if (mConversationMetadata == null) {
-            DeleteConversationAction.deleteConversation(mConversationId,
-                    System.currentTimeMillis());
-        } else {
-            mConversationMetadata.deleteConversation();
-        }
-    }
-
-    public void archiveConversation(final BindingBase<ConversationData> binding) {
-        Assert.isTrue(binding.getData() == this);
-        UpdateConversationArchiveStatusAction.archiveConversation(mConversationId);
-    }
-
-    public void unarchiveConversation(final BindingBase<ConversationData> binding) {
-        Assert.isTrue(binding.getData() == this);
-        UpdateConversationArchiveStatusAction.unarchiveConversation(mConversationId);
-    }
-
-    public ConversationParticipantsData getParticipants() {
-        return mParticipantData;
-    }
-
-    /**
-     * Returns a dialable phone number for the participant if we are in a 1-1 conversation.
-     * @return the participant phone number, or null if the phone number is not valid or if there
-     *         are more than one participant.
-     */
-    public String getParticipantPhoneNumber() {
-        final ParticipantData participant = this.getOtherParticipant();
-        if (participant != null) {
-            final String phoneNumber = participant.getSendDestination();
-            if (!TextUtils.isEmpty(phoneNumber) && MmsSmsUtils.isPhoneNumber(phoneNumber)) {
-                return phoneNumber;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Create a message to be forwarded from an existing message.
-     */
-    public MessageData createForwardedMessage(final ConversationMessageData message) {
-        final MessageData forwardedMessage = new MessageData();
-
-        final String originalSubject =
-                MmsUtils.cleanseMmsSubject(mContext.getResources(), message.getMmsSubject());
-        if (!TextUtils.isEmpty(originalSubject)) {
-            forwardedMessage.setMmsSubject(
-                    mContext.getResources().getString(R.string.message_fwd, originalSubject));
-        }
-
-        for (final MessagePartData part : message.getParts()) {
-            MessagePartData forwardedPart;
-
-            // Depending on the part type, if it is text, we can directly create a text part;
-            // if it is attachment, then we need to create a pending attachment data out of it, so
-            // that we may persist the attachment locally in the scratch folder when the user picks
-            // a conversation to forward to.
-            if (part.isText()) {
-                forwardedPart = MessagePartData.createTextMessagePart(part.getText());
-            } else {
-                final PendingAttachmentData pendingAttachmentData = PendingAttachmentData
-                        .createPendingAttachmentData(part.getContentType(), part.getContentUri());
-                forwardedPart = pendingAttachmentData;
-            }
-            forwardedMessage.addPart(forwardedPart);
-        }
-        return forwardedMessage;
-    }
-
-    public int getNumberOfParticipantsExcludingSelf() {
-        return mParticipantData.getNumberOfParticipantsExcludingSelf();
-    }
-
-    /**
-     * Returns {@link com.android.messaging.datamodel.data.SubscriptionListData
-     * .SubscriptionListEntry} for a given self participant so UI can display SIM-related info
-     * (icon, name etc.) for multi-SIM.
-     */
-    public SubscriptionListEntry getSubscriptionEntryForSelfParticipant(
-            final String selfParticipantId, final boolean excludeDefault) {
-        return getSubscriptionEntryForSelfParticipant(selfParticipantId, excludeDefault,
-                mSubscriptionListData, mSelfParticipantsData);
-    }
-
-    /**
-     * Returns {@link com.android.messaging.datamodel.data.SubscriptionListData
-     * .SubscriptionListEntry} for a given self participant so UI can display SIM-related info
-     * (icon, name etc.) for multi-SIM.
-     */
-    public static SubscriptionListEntry getSubscriptionEntryForSelfParticipant(
-            final String selfParticipantId, final boolean excludeDefault,
-            final SubscriptionListData subscriptionListData,
-            final SelfParticipantsData selfParticipantsData) {
-        // SIM indicators are shown in the UI only if:
-        // 1. Framework has MSIM support AND
-        // 2. The device has had multiple *active* subscriptions. AND
-        // 3. The message's subscription is active.
-        if (OsUtil.isAtLeastL_MR1() &&
-                selfParticipantsData.getSelfParticipantsCountExcludingDefault(true) > 1) {
-            return subscriptionListData.getActiveSubscriptionEntryBySelfId(selfParticipantId,
-                    excludeDefault);
-        }
-        return null;
-    }
-
-    public SubscriptionListData getSubscriptionListData() {
-        return mSubscriptionListData;
-    }
-
-    /**
-     * A placeholder implementation of {@link ConversationDataListener} so that subclasses may opt
-     * to implement some, but not all, of the interface methods.
-     */
-    public static class SimpleConversationDataListener implements ConversationDataListener {
-
-        @Override
-        public void onConversationMessagesCursorUpdated(final ConversationData data, final Cursor cursor,
-                @Nullable
-                        final
-                ConversationMessageData newestMessage, final boolean isSync) {}
-
-        @Override
-        public void onConversationMetadataUpdated(final ConversationData data) {}
-
-        @Override
-        public void closeConversation(final String conversationId) {}
-
-        @Override
-        public void onConversationParticipantDataLoaded(final ConversationData data) {}
-
-        @Override
-        public void onSubscriptionListDataLoaded(final ConversationData data) {}
-
-    }
-
-    private class ConversationDataEventDispatcher
-            extends ArrayList<ConversationDataListener>
-            implements ConversationDataListener {
-
-        @Override
-        public void onConversationMessagesCursorUpdated(final ConversationData data, final Cursor cursor,
-                @Nullable
-                        final ConversationMessageData newestMessage, final boolean isSync) {
-            for (final ConversationDataListener listener : this) {
-                listener.onConversationMessagesCursorUpdated(data, cursor, newestMessage, isSync);
-            }
-        }
-
-        @Override
-        public void onConversationMetadataUpdated(final ConversationData data) {
-            for (final ConversationDataListener listener : this) {
-                listener.onConversationMetadataUpdated(data);
-            }
-        }
-
-        @Override
-        public void closeConversation(final String conversationId) {
-            for (final ConversationDataListener listener : this) {
-                listener.closeConversation(conversationId);
-            }
-        }
-
-        @Override
-        public void onConversationParticipantDataLoaded(final ConversationData data) {
-            for (final ConversationDataListener listener : this) {
-                listener.onConversationParticipantDataLoaded(data);
-            }
-        }
-
-        @Override
-        public void onSubscriptionListDataLoaded(final ConversationData data) {
-            for (final ConversationDataListener listener : this) {
-                listener.onSubscriptionListDataLoaded(data);
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/ConversationListData.java b/src/com/android/messaging/datamodel/data/ConversationListData.java
deleted file mode 100644
index 3d27ecd..0000000
--- a/src/com/android/messaging/datamodel/data/ConversationListData.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.app.LoaderManager;
-import android.content.Context;
-import android.content.Loader;
-import android.database.Cursor;
-import android.os.Bundle;
-
-import com.android.messaging.datamodel.BoundCursorLoader;
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.datamodel.binding.BindableData;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.ConversationListItemData.ConversationListViewColumns;
-import com.android.messaging.receiver.SmsReceiver;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-import java.util.HashSet;
-
-public class ConversationListData extends BindableData
-        implements LoaderManager.LoaderCallbacks<Cursor> {
-
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-    private static final String BINDING_ID = "bindingId";
-    public static final String SORT_ORDER =
-            ConversationListViewColumns.SORT_TIMESTAMP + " DESC";
-
-    private static final String WHERE_ARCHIVED =
-            "(" + ConversationListViewColumns.ARCHIVE_STATUS + " = 1)";
-    public static final String WHERE_NOT_ARCHIVED =
-            "(" + ConversationListViewColumns.ARCHIVE_STATUS + " = 0)";
-
-    public interface ConversationListDataListener {
-        public void onConversationListCursorUpdated(ConversationListData data, Cursor cursor);
-        public void setBlockedParticipantsAvailable(boolean blockedAvailable);
-    }
-
-    private ConversationListDataListener mListener;
-    private final Context mContext;
-    private final boolean mArchivedMode;
-    private LoaderManager mLoaderManager;
-
-    public ConversationListData(final Context context, final ConversationListDataListener listener,
-            final boolean archivedMode) {
-        mListener = listener;
-        mContext = context;
-        mArchivedMode = archivedMode;
-    }
-
-    private static final int CONVERSATION_LIST_LOADER = 1;
-    private static final int BLOCKED_PARTICIPANTS_AVAILABLE_LOADER = 2;
-
-    private static final String[] BLOCKED_PARTICIPANTS_PROJECTION = new String[] {
-            ParticipantColumns._ID,
-            ParticipantColumns.NORMALIZED_DESTINATION,
-    };
-    private static final int INDEX_BLOCKED_PARTICIPANTS_ID = 0;
-    private static final int INDEX_BLOCKED_PARTICIPANTS_NORMALIZED_DESTINATION = 1;
-
-    // all blocked participants
-    private final HashSet<String> mBlockedParticipants = new HashSet<String>();
-
-    @Override
-    public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
-        final String bindingId = args.getString(BINDING_ID);
-        Loader<Cursor> loader = null;
-        // Check if data still bound to the requesting ui element
-        if (isBound(bindingId)) {
-            switch (id) {
-                case BLOCKED_PARTICIPANTS_AVAILABLE_LOADER:
-                    loader = new BoundCursorLoader(bindingId, mContext,
-                            MessagingContentProvider.PARTICIPANTS_URI,
-                            BLOCKED_PARTICIPANTS_PROJECTION,
-                            ParticipantColumns.BLOCKED + "=1", null, null);
-                    break;
-                case CONVERSATION_LIST_LOADER:
-                    loader = new BoundCursorLoader(bindingId, mContext,
-                            MessagingContentProvider.CONVERSATIONS_URI,
-                            ConversationListItemData.PROJECTION,
-                            mArchivedMode ? WHERE_ARCHIVED : WHERE_NOT_ARCHIVED,
-                            null,       // selection args
-                            SORT_ORDER);
-                    break;
-                default:
-                    Assert.fail("Unknown loader id");
-                    break;
-            }
-        } else {
-            LogUtil.w(TAG, "Creating loader after unbinding list");
-        }
-        return loader;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onLoadFinished(final Loader<Cursor> generic, final Cursor data) {
-        final BoundCursorLoader loader = (BoundCursorLoader) generic;
-        if (isBound(loader.getBindingId())) {
-            switch (loader.getId()) {
-                case BLOCKED_PARTICIPANTS_AVAILABLE_LOADER:
-                    mBlockedParticipants.clear();
-                    for (int i = 0; i < data.getCount(); i++) {
-                        data.moveToPosition(i);
-                        mBlockedParticipants.add(data.getString(
-                                INDEX_BLOCKED_PARTICIPANTS_NORMALIZED_DESTINATION));
-                    }
-                    mListener.setBlockedParticipantsAvailable(data != null && data.getCount() > 0);
-                    break;
-                case CONVERSATION_LIST_LOADER:
-                    mListener.onConversationListCursorUpdated(this, data);
-                    break;
-                default:
-                    Assert.fail("Unknown loader id");
-                    break;
-            }
-        } else {
-            LogUtil.w(TAG, "Loader finished after unbinding list");
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onLoaderReset(final Loader<Cursor> generic) {
-        final BoundCursorLoader loader = (BoundCursorLoader) generic;
-        if (isBound(loader.getBindingId())) {
-            switch (loader.getId()) {
-                case BLOCKED_PARTICIPANTS_AVAILABLE_LOADER:
-                    mListener.setBlockedParticipantsAvailable(false);
-                    break;
-                case CONVERSATION_LIST_LOADER:
-                    mListener.onConversationListCursorUpdated(this, null);
-                    break;
-                default:
-                    Assert.fail("Unknown loader id");
-                    break;
-            }
-        } else {
-            LogUtil.w(TAG, "Loader reset after unbinding list");
-        }
-    }
-
-    private Bundle mArgs;
-
-    public void init(final LoaderManager loaderManager,
-            final BindingBase<ConversationListData> binding) {
-        mArgs = new Bundle();
-        mArgs.putString(BINDING_ID, binding.getBindingId());
-        mLoaderManager = loaderManager;
-        mLoaderManager.initLoader(CONVERSATION_LIST_LOADER, mArgs, this);
-        mLoaderManager.initLoader(BLOCKED_PARTICIPANTS_AVAILABLE_LOADER, mArgs, this);
-    }
-
-    public void handleMessagesSeen() {
-        BugleNotifications.markAllMessagesAsSeen();
-
-        SmsReceiver.cancelSecondaryUserNotification();
-    }
-
-    @Override
-    protected void unregisterListeners() {
-        mListener = null;
-
-        // This could be null if we bind but the caller doesn't init the BindableData
-        if (mLoaderManager != null) {
-            mLoaderManager.destroyLoader(CONVERSATION_LIST_LOADER);
-            mLoaderManager.destroyLoader(BLOCKED_PARTICIPANTS_AVAILABLE_LOADER);
-            mLoaderManager = null;
-        }
-    }
-
-    public boolean getHasFirstSyncCompleted() {
-        final SyncManager syncManager = DataModel.get().getSyncManager();
-        return syncManager.getHasFirstSyncCompleted();
-    }
-
-    public void setScrolledToNewestConversation(boolean scrolledToNewestConversation) {
-        DataModel.get().setConversationListScrolledToNewestConversation(
-                scrolledToNewestConversation);
-        if (scrolledToNewestConversation) {
-            handleMessagesSeen();
-        }
-    }
-
-    public HashSet<String> getBlockedParticipants() {
-        return mBlockedParticipants;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/ConversationListItemData.java b/src/com/android/messaging/datamodel/data/ConversationListItemData.java
deleted file mode 100644
index f627a09..0000000
--- a/src/com/android/messaging/datamodel/data/ConversationListItemData.java
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.BaseColumns;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.action.DeleteConversationAction;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.Dates;
-import com.google.common.base.Joiner;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Class wrapping the conversation list view used to display each item in conversation list
- */
-public class ConversationListItemData {
-    private String mConversationId;
-    private String mName;
-    private String mIcon;
-    private boolean mIsRead;
-    private long mTimestamp;
-    private String mSnippetText;
-    private Uri mPreviewUri;
-    private String mPreviewContentType;
-    private long mParticipantContactId;
-    private String mParticipantLookupKey;
-    private String mOtherParticipantNormalizedDestination;
-    private String mSelfId;
-    private int mParticipantCount;
-    private boolean mNotificationEnabled;
-    private String mNotificationSoundUri;
-    private boolean mNotificationVibrate;
-    private boolean mIncludeEmailAddress;
-    private int mMessageStatus;
-    private int mMessageRawTelephonyStatus;
-    private boolean mShowDraft;
-    private Uri mDraftPreviewUri;
-    private String mDraftPreviewContentType;
-    private String mDraftSnippetText;
-    private boolean mIsArchived;
-    private String mSubject;
-    private String mDraftSubject;
-    private String mSnippetSenderFirstName;
-    private String mSnippetSenderDisplayDestination;
-    private boolean mIsEnterprise;
-
-    public ConversationListItemData() {
-    }
-
-    public void bind(final Cursor cursor) {
-        bind(cursor, false);
-    }
-
-    public void bind(final Cursor cursor, final boolean ignoreDraft) {
-        mConversationId = cursor.getString(INDEX_ID);
-        mName = cursor.getString(INDEX_CONVERSATION_NAME);
-        mIcon = cursor.getString(INDEX_CONVERSATION_ICON);
-        mSnippetText = cursor.getString(INDEX_SNIPPET_TEXT);
-        mTimestamp = cursor.getLong(INDEX_SORT_TIMESTAMP);
-        mIsRead = cursor.getInt(INDEX_READ) == 1;
-        final String previewUriString = cursor.getString(INDEX_PREVIEW_URI);
-        mPreviewUri = TextUtils.isEmpty(previewUriString) ? null : Uri.parse(previewUriString);
-        mPreviewContentType = cursor.getString(INDEX_PREVIEW_CONTENT_TYPE);
-        mParticipantContactId = cursor.getLong(INDEX_PARTICIPANT_CONTACT_ID);
-        mParticipantLookupKey = cursor.getString(INDEX_PARTICIPANT_LOOKUP_KEY);
-        mOtherParticipantNormalizedDestination = cursor.getString(
-                INDEX_OTHER_PARTICIPANT_NORMALIZED_DESTINATION);
-        mSelfId = cursor.getString(INDEX_SELF_ID);
-        mParticipantCount = cursor.getInt(INDEX_PARTICIPANT_COUNT);
-        mNotificationEnabled = cursor.getInt(INDEX_NOTIFICATION_ENABLED) == 1;
-        mNotificationSoundUri = cursor.getString(INDEX_NOTIFICATION_SOUND_URI);
-        mNotificationVibrate = cursor.getInt(INDEX_NOTIFICATION_VIBRATION) == 1;
-        mIncludeEmailAddress = cursor.getInt(INDEX_INCLUDE_EMAIL_ADDRESS) == 1;
-        mMessageStatus = cursor.getInt(INDEX_MESSAGE_STATUS);
-        mMessageRawTelephonyStatus = cursor.getInt(INDEX_MESSAGE_RAW_TELEPHONY_STATUS);
-        if (!ignoreDraft) {
-            mShowDraft = cursor.getInt(INDEX_SHOW_DRAFT) == 1;
-            final String draftPreviewUriString = cursor.getString(INDEX_DRAFT_PREVIEW_URI);
-            mDraftPreviewUri = TextUtils.isEmpty(draftPreviewUriString) ?
-                    null : Uri.parse(draftPreviewUriString);
-            mDraftPreviewContentType = cursor.getString(INDEX_DRAFT_PREVIEW_CONTENT_TYPE);
-            mDraftSnippetText = cursor.getString(INDEX_DRAFT_SNIPPET_TEXT);
-            mDraftSubject = cursor.getString(INDEX_DRAFT_SUBJECT_TEXT);
-        } else {
-            mShowDraft = false;
-            mDraftPreviewUri = null;
-            mDraftPreviewContentType = null;
-            mDraftSnippetText = null;
-            mDraftSubject = null;
-        }
-
-        mIsArchived = cursor.getInt(INDEX_ARCHIVE_STATUS) == 1;
-        mSubject = cursor.getString(INDEX_SUBJECT_TEXT);
-        mSnippetSenderFirstName = cursor.getString(INDEX_SNIPPET_SENDER_FIRST_NAME);
-        mSnippetSenderDisplayDestination =
-                cursor.getString(INDEX_SNIPPET_SENDER_DISPLAY_DESTINATION);
-        mIsEnterprise = cursor.getInt(INDEX_IS_ENTERPRISE) == 1;
-    }
-
-    public String getConversationId() {
-        return mConversationId;
-    }
-
-    public String getName() {
-        return mName;
-    }
-
-    public String getIcon() {
-        return mIcon;
-    }
-
-    public boolean getIsRead() {
-        return mIsRead;
-    }
-
-    public String getFormattedTimestamp() {
-        return Dates.getConversationTimeString(mTimestamp).toString();
-    }
-
-    public long getTimestamp() {
-        return mTimestamp;
-    }
-
-    public String getSnippetText() {
-        return mSnippetText;
-    }
-
-    public Uri getPreviewUri() {
-        return mPreviewUri;
-    }
-
-    public String getPreviewContentType() {
-        return mPreviewContentType;
-    }
-
-    /**
-      * @see ConversationColumns#PARTICIPANT_CONTACT_ID
-      * @return the contact id of the participant if it is a 1:1 conversation, -1 for group.
-      */
-    public long getParticipantContactId() {
-        return mParticipantContactId;
-    }
-
-    /**
-     * @see ConversationColumns#IS_ENTERPRISE
-     * @return whether the conversation is enterprise.
-     */
-    public boolean isEnterprise() {
-        return mIsEnterprise;
-    }
-
-    public String getParticipantLookupKey() {
-        return mParticipantLookupKey;
-    }
-
-    public String getOtherParticipantNormalizedDestination() {
-        return mOtherParticipantNormalizedDestination;
-    }
-
-    public String getSelfId() {
-        return mSelfId;
-    }
-
-    public int getParticipantCount() {
-        return mParticipantCount;
-    }
-
-    public boolean getIsGroup() {
-        // Participant count excludes self
-        return (mParticipantCount > 1);
-    }
-
-    public boolean getIncludeEmailAddress() {
-        return mIncludeEmailAddress;
-    }
-
-    public boolean getNotificationEnabled() {
-        return mNotificationEnabled;
-    }
-
-    public String getNotificationSoundUri() {
-        return mNotificationSoundUri;
-    }
-
-    public boolean getNotifiationVibrate() {
-        return mNotificationVibrate;
-    }
-
-    public final boolean getIsFailedStatus() {
-        return (mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_FAILED ||
-                mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER ||
-                mMessageStatus == MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED ||
-                mMessageStatus == MessageData.BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE);
-    }
-
-    public final boolean getIsSendRequested() {
-        return (mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND ||
-                mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_AWAITING_RETRY ||
-                mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_SENDING ||
-                mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_RESENDING);
-    }
-
-    public boolean getIsMessageTypeOutgoing() {
-        return !MessageData.getIsIncoming(mMessageStatus);
-    }
-
-    public int getMessageRawTelephonyStatus() {
-        return mMessageRawTelephonyStatus;
-    }
-
-    public int getMessageStatus() {
-        return mMessageStatus;
-    }
-
-    public boolean getShowDraft() {
-        return mShowDraft;
-    }
-
-    public String getDraftSnippetText() {
-        return mDraftSnippetText;
-    }
-
-    public Uri getDraftPreviewUri() {
-        return mDraftPreviewUri;
-    }
-
-    public String getDraftPreviewContentType() {
-        return mDraftPreviewContentType;
-    }
-
-    public boolean getIsArchived() {
-        return mIsArchived;
-    }
-
-    public String getSubject() {
-        return mSubject;
-    }
-
-    public String getDraftSubject() {
-        return mDraftSubject;
-    }
-
-    public String getSnippetSenderName() {
-        if (!TextUtils.isEmpty(mSnippetSenderFirstName)) {
-            return mSnippetSenderFirstName;
-        }
-        return mSnippetSenderDisplayDestination;
-    }
-
-    public void deleteConversation() {
-        DeleteConversationAction.deleteConversation(mConversationId, mTimestamp);
-    }
-
-    /**
-     * Get the name of the view for this data item
-     */
-    public static final String getConversationListView() {
-        return CONVERSATION_LIST_VIEW;
-    }
-
-    public static final String getConversationListViewSql() {
-        return CONVERSATION_LIST_VIEW_SQL;
-    }
-
-    private static final String CONVERSATION_LIST_VIEW = "conversation_list_view";
-
-    private static final String CONVERSATION_LIST_VIEW_PROJECTION =
-            DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns._ID
-            + " as " + ConversationListViewColumns._ID + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NAME
-            + " as " + ConversationListViewColumns.NAME + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.CURRENT_SELF_ID
-            + " as " + ConversationListViewColumns.CURRENT_SELF_ID + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.ARCHIVE_STATUS
-            + " as " + ConversationListViewColumns.ARCHIVE_STATUS + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.READ
-            + " as " + ConversationListViewColumns.READ + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.ICON
-            + " as " + ConversationListViewColumns.ICON + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PARTICIPANT_CONTACT_ID
-            + " as " + ConversationListViewColumns.PARTICIPANT_CONTACT_ID + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PARTICIPANT_LOOKUP_KEY
-            + " as " + ConversationListViewColumns.PARTICIPANT_LOOKUP_KEY + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.'
-                    + ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION
-            + " as " + ConversationListViewColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SORT_TIMESTAMP
-            + " as " + ConversationListViewColumns.SORT_TIMESTAMP + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SHOW_DRAFT
-            + " as " + ConversationListViewColumns.SHOW_DRAFT + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.DRAFT_SNIPPET_TEXT
-            + " as " + ConversationListViewColumns.DRAFT_SNIPPET_TEXT + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.DRAFT_PREVIEW_URI
-            + " as " + ConversationListViewColumns.DRAFT_PREVIEW_URI + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.DRAFT_SUBJECT_TEXT
-            + " as " + ConversationListViewColumns.DRAFT_SUBJECT_TEXT + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.'
-                    + ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE
-            + " as " + ConversationListViewColumns.DRAFT_PREVIEW_CONTENT_TYPE + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PREVIEW_URI
-            + " as " + ConversationListViewColumns.PREVIEW_URI + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PREVIEW_CONTENT_TYPE
-            + " as " + ConversationListViewColumns.PREVIEW_CONTENT_TYPE + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PARTICIPANT_COUNT
-            + " as " + ConversationListViewColumns.PARTICIPANT_COUNT + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_ENABLED
-            + " as " + ConversationListViewColumns.NOTIFICATION_ENABLED + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_SOUND_URI
-            + " as " + ConversationListViewColumns.NOTIFICATION_SOUND_URI + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_VIBRATION
-            + " as " + ConversationListViewColumns.NOTIFICATION_VIBRATION + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' +
-                    ConversationColumns.INCLUDE_EMAIL_ADDRESS
-            + " as " + ConversationListViewColumns.INCLUDE_EMAIL_ADDRESS + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.STATUS
-            + " as " + ConversationListViewColumns.MESSAGE_STATUS + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RAW_TELEPHONY_STATUS
-            + " as " + ConversationListViewColumns.MESSAGE_RAW_TELEPHONY_STATUS + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns._ID
-            + " as " + ConversationListViewColumns.MESSAGE_ID + ", "
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.FIRST_NAME
-            + " as " + ConversationListViewColumns.SNIPPET_SENDER_FIRST_NAME + ", "
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.DISPLAY_DESTINATION
-            + " as " + ConversationListViewColumns.SNIPPET_SENDER_DISPLAY_DESTINATION + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.IS_ENTERPRISE
-            + " as " + ConversationListViewColumns.IS_ENTERPRISE;
-
-    private static final String JOIN_PARTICIPANTS =
-            " LEFT JOIN " + DatabaseHelper.PARTICIPANTS_TABLE + " ON ("
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SENDER_PARTICIPANT_ID
-            + '=' + DatabaseHelper.PARTICIPANTS_TABLE + '.' + DatabaseHelper.ParticipantColumns._ID
-            + ") ";
-
-    // View that makes latest message read flag available with rest of conversation data.
-    private static final String CONVERSATION_LIST_VIEW_SQL = "CREATE VIEW " +
-            CONVERSATION_LIST_VIEW + " AS SELECT "
-            + CONVERSATION_LIST_VIEW_PROJECTION + ", "
-            // Snippet not part of the base projection shared with search view
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SNIPPET_TEXT
-            + " as " + ConversationListViewColumns.SNIPPET_TEXT + ", "
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SUBJECT_TEXT
-            + " as " + ConversationListViewColumns.SUBJECT_TEXT + " "
-            + " FROM " + DatabaseHelper.CONVERSATIONS_TABLE
-            + " LEFT JOIN " + DatabaseHelper.MESSAGES_TABLE + " ON ("
-            + DatabaseHelper.CONVERSATIONS_TABLE + '.' +  ConversationColumns.LATEST_MESSAGE_ID
-            + '=' + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns._ID + ") "
-            + JOIN_PARTICIPANTS
-            + "ORDER BY " + DatabaseHelper.CONVERSATIONS_TABLE + '.'
-            + ConversationColumns.SORT_TIMESTAMP + " DESC";
-
-    public static class ConversationListViewColumns implements BaseColumns {
-        public static final String _ID = ConversationColumns._ID;
-        static final String NAME = ConversationColumns.NAME;
-        static final String ARCHIVE_STATUS = ConversationColumns.ARCHIVE_STATUS;
-        static final String READ = MessageColumns.READ;
-        static final String SORT_TIMESTAMP = ConversationColumns.SORT_TIMESTAMP;
-        static final String PREVIEW_URI = ConversationColumns.PREVIEW_URI;
-        static final String PREVIEW_CONTENT_TYPE = ConversationColumns.PREVIEW_CONTENT_TYPE;
-        static final String SNIPPET_TEXT = ConversationColumns.SNIPPET_TEXT;
-        static final String SUBJECT_TEXT = ConversationColumns.SUBJECT_TEXT;
-        static final String ICON = ConversationColumns.ICON;
-        static final String SHOW_DRAFT = ConversationColumns.SHOW_DRAFT;
-        static final String DRAFT_SUBJECT_TEXT = ConversationColumns.DRAFT_SUBJECT_TEXT;
-        static final String DRAFT_PREVIEW_URI = ConversationColumns.DRAFT_PREVIEW_URI;
-        static final String DRAFT_PREVIEW_CONTENT_TYPE =
-                ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE;
-        static final String DRAFT_SNIPPET_TEXT = ConversationColumns.DRAFT_SNIPPET_TEXT;
-        static final String PARTICIPANT_CONTACT_ID = ConversationColumns.PARTICIPANT_CONTACT_ID;
-        static final String PARTICIPANT_LOOKUP_KEY = ConversationColumns.PARTICIPANT_LOOKUP_KEY;
-        static final String OTHER_PARTICIPANT_NORMALIZED_DESTINATION =
-                ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION;
-        static final String CURRENT_SELF_ID = ConversationColumns.CURRENT_SELF_ID;
-        static final String PARTICIPANT_COUNT = ConversationColumns.PARTICIPANT_COUNT;
-        static final String NOTIFICATION_ENABLED = ConversationColumns.NOTIFICATION_ENABLED;
-        static final String NOTIFICATION_SOUND_URI = ConversationColumns.NOTIFICATION_SOUND_URI;
-        static final String NOTIFICATION_VIBRATION = ConversationColumns.NOTIFICATION_VIBRATION;
-        static final String INCLUDE_EMAIL_ADDRESS =
-                ConversationColumns.INCLUDE_EMAIL_ADDRESS;
-        static final String MESSAGE_STATUS = MessageColumns.STATUS;
-        static final String MESSAGE_RAW_TELEPHONY_STATUS = MessageColumns.RAW_TELEPHONY_STATUS;
-        static final String MESSAGE_ID = "message_id";
-        static final String SNIPPET_SENDER_FIRST_NAME = "snippet_sender_first_name";
-        static final String SNIPPET_SENDER_DISPLAY_DESTINATION =
-                "snippet_sender_display_destination";
-        static final String IS_ENTERPRISE = ConversationColumns.IS_ENTERPRISE;
-    }
-
-    public static final String[] PROJECTION = {
-        ConversationListViewColumns._ID,
-        ConversationListViewColumns.NAME,
-        ConversationListViewColumns.ICON,
-        ConversationListViewColumns.SNIPPET_TEXT,
-        ConversationListViewColumns.SORT_TIMESTAMP,
-        ConversationListViewColumns.READ,
-        ConversationListViewColumns.PREVIEW_URI,
-        ConversationListViewColumns.PREVIEW_CONTENT_TYPE,
-        ConversationListViewColumns.PARTICIPANT_CONTACT_ID,
-        ConversationListViewColumns.PARTICIPANT_LOOKUP_KEY,
-        ConversationListViewColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION,
-        ConversationListViewColumns.PARTICIPANT_COUNT,
-        ConversationListViewColumns.CURRENT_SELF_ID,
-        ConversationListViewColumns.NOTIFICATION_ENABLED,
-        ConversationListViewColumns.NOTIFICATION_SOUND_URI,
-        ConversationListViewColumns.NOTIFICATION_VIBRATION,
-        ConversationListViewColumns.INCLUDE_EMAIL_ADDRESS,
-        ConversationListViewColumns.MESSAGE_STATUS,
-        ConversationListViewColumns.SHOW_DRAFT,
-        ConversationListViewColumns.DRAFT_PREVIEW_URI,
-        ConversationListViewColumns.DRAFT_PREVIEW_CONTENT_TYPE,
-        ConversationListViewColumns.DRAFT_SNIPPET_TEXT,
-        ConversationListViewColumns.ARCHIVE_STATUS,
-        ConversationListViewColumns.MESSAGE_ID,
-        ConversationListViewColumns.SUBJECT_TEXT,
-        ConversationListViewColumns.DRAFT_SUBJECT_TEXT,
-        ConversationListViewColumns.MESSAGE_RAW_TELEPHONY_STATUS,
-        ConversationListViewColumns.SNIPPET_SENDER_FIRST_NAME,
-        ConversationListViewColumns.SNIPPET_SENDER_DISPLAY_DESTINATION,
-        ConversationListViewColumns.IS_ENTERPRISE,
-    };
-
-    private static final int INDEX_ID = 0;
-    private static final int INDEX_CONVERSATION_NAME = 1;
-    private static final int INDEX_CONVERSATION_ICON = 2;
-    private static final int INDEX_SNIPPET_TEXT = 3;
-    private static final int INDEX_SORT_TIMESTAMP = 4;
-    private static final int INDEX_READ = 5;
-    private static final int INDEX_PREVIEW_URI = 6;
-    private static final int INDEX_PREVIEW_CONTENT_TYPE = 7;
-    private static final int INDEX_PARTICIPANT_CONTACT_ID = 8;
-    private static final int INDEX_PARTICIPANT_LOOKUP_KEY = 9;
-    private static final int INDEX_OTHER_PARTICIPANT_NORMALIZED_DESTINATION = 10;
-    private static final int INDEX_PARTICIPANT_COUNT = 11;
-    private static final int INDEX_SELF_ID = 12;
-    private static final int INDEX_NOTIFICATION_ENABLED = 13;
-    private static final int INDEX_NOTIFICATION_SOUND_URI = 14;
-    private static final int INDEX_NOTIFICATION_VIBRATION = 15;
-    private static final int INDEX_INCLUDE_EMAIL_ADDRESS = 16;
-    private static final int INDEX_MESSAGE_STATUS = 17;
-    private static final int INDEX_SHOW_DRAFT = 18;
-    private static final int INDEX_DRAFT_PREVIEW_URI = 19;
-    private static final int INDEX_DRAFT_PREVIEW_CONTENT_TYPE = 20;
-    private static final int INDEX_DRAFT_SNIPPET_TEXT = 21;
-    private static final int INDEX_ARCHIVE_STATUS = 22;
-    private static final int INDEX_MESSAGE_ID = 23;
-    private static final int INDEX_SUBJECT_TEXT = 24;
-    private static final int INDEX_DRAFT_SUBJECT_TEXT = 25;
-    private static final int INDEX_MESSAGE_RAW_TELEPHONY_STATUS = 26;
-    private static final int INDEX_SNIPPET_SENDER_FIRST_NAME = 27;
-    private static final int INDEX_SNIPPET_SENDER_DISPLAY_DESTINATION = 28;
-    private static final int INDEX_IS_ENTERPRISE = 29;
-
-    private static final String DIVIDER_TEXT = ", ";
-
-    public static boolean hasAnyEnterpriseContact(
-             final List<ParticipantData> participants) {
-         for (final ParticipantData participant : participants) {
-             if (ContactUtil.isEnterpriseContactId(participant.getContactId())) {
-                 return true;
-             }
-         }
-         return false;
-     }
-
-    /**
-     * Get a conversation from the local DB based on the conversation id.
-     *
-     * @param dbWrapper       The database
-     * @param conversationId  The conversation Id to read
-     * @return The existing conversation or null
-     */
-    public static ConversationListItemData getExistingConversation(final DatabaseWrapper dbWrapper,
-            final String conversationId) {
-        ConversationListItemData conversation = null;
-
-        // Look for an existing conversation in the db with this conversation id
-        Cursor cursor = null;
-        try {
-            // TODO: Should we be able to read a row from just the conversation table?
-            cursor = dbWrapper.query(getConversationListView(),
-                    PROJECTION,
-                    ConversationColumns._ID + "=?",
-                    new String[] { conversationId },
-                    null, null, null);
-            Assert.inRange(cursor.getCount(), 0, 1);
-            if (cursor.moveToFirst()) {
-                conversation = new ConversationListItemData();
-                conversation.bind(cursor);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        return conversation;
-    }
-
-    public static String generateConversationName(final List<ParticipantData>
-            participants) {
-        if (participants.size() == 1) {
-            // Prefer full name over first name for 1:1 conversation
-            return participants.get(0).getDisplayName(true);
-        }
-
-        final ArrayList<String> participantNames = new ArrayList<String>();
-        for (final ParticipantData participant : participants) {
-            // Prefer first name over full name for group conversation
-            participantNames.add(participant.getDisplayName(false));
-        }
-
-        final Joiner joiner = Joiner.on(DIVIDER_TEXT).skipNulls();
-        return joiner.join(participantNames);
-    }
-
-}
diff --git a/src/com/android/messaging/datamodel/data/ConversationMessageBubbleData.java b/src/com/android/messaging/datamodel/data/ConversationMessageBubbleData.java
deleted file mode 100644
index f329f46..0000000
--- a/src/com/android/messaging/datamodel/data/ConversationMessageBubbleData.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.text.TextUtils;
-
-/**
- * Holds data for conversation message bubble which keeps track of whether it's been bound to
- * a new message.
- */
-public class ConversationMessageBubbleData {
-    private String mMessageId;
-
-    /**
-     * Binds to ConversationMessageData instance.
-     * @return true if we are binding to a different message, false if we are binding to the
-     *         same message (e.g. in order to update the status text)
-     */
-    public boolean bind(final ConversationMessageData data) {
-        final boolean changed = !TextUtils.equals(mMessageId, data.getMessageId());
-        mMessageId = data.getMessageId();
-        return changed;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/ConversationMessageData.java b/src/com/android/messaging/datamodel/data/ConversationMessageData.java
deleted file mode 100644
index 2a85277..0000000
--- a/src/com/android/messaging/datamodel/data/ConversationMessageData.java
+++ /dev/null
@@ -1,919 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.BaseColumns;
-import android.provider.ContactsContract;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseHelper.PartColumns;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.Dates;
-import com.android.messaging.util.LogUtil;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Predicate;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Class representing a message within a conversation sequence. The message parts
- * are available via the getParts() method.
- *
- * TODO: See if we can delegate to MessageData for the logic that this class duplicates
- * (e.g. getIsMms).
- */
-public class ConversationMessageData {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private String mMessageId;
-    private String mConversationId;
-    private String mParticipantId;
-    private int mPartsCount;
-    private List<MessagePartData> mParts;
-    private long mSentTimestamp;
-    private long mReceivedTimestamp;
-    private boolean mSeen;
-    private boolean mRead;
-    private int mProtocol;
-    private int mStatus;
-    private String mSmsMessageUri;
-    private int mSmsPriority;
-    private int mSmsMessageSize;
-    private String mMmsSubject;
-    private long mMmsExpiry;
-    private int mRawTelephonyStatus;
-    private String mSenderFullName;
-    private String mSenderFirstName;
-    private String mSenderDisplayDestination;
-    private String mSenderNormalizedDestination;
-    private String mSenderProfilePhotoUri;
-    private long mSenderContactId;
-    private String mSenderContactLookupKey;
-    private String mSelfParticipantId;
-
-    /** Are we similar enough to the previous/next messages that we can cluster them? */
-    private boolean mCanClusterWithPreviousMessage;
-    private boolean mCanClusterWithNextMessage;
-
-    public ConversationMessageData() {
-    }
-
-    public void bind(final Cursor cursor) {
-        mMessageId = cursor.getString(INDEX_MESSAGE_ID);
-        mConversationId = cursor.getString(INDEX_CONVERSATION_ID);
-        mParticipantId = cursor.getString(INDEX_PARTICIPANT_ID);
-        mPartsCount = cursor.getInt(INDEX_PARTS_COUNT);
-
-        mParts = makeParts(
-                cursor.getString(INDEX_PARTS_IDS),
-                cursor.getString(INDEX_PARTS_CONTENT_TYPES),
-                cursor.getString(INDEX_PARTS_CONTENT_URIS),
-                cursor.getString(INDEX_PARTS_WIDTHS),
-                cursor.getString(INDEX_PARTS_HEIGHTS),
-                cursor.getString(INDEX_PARTS_TEXTS),
-                mPartsCount,
-                mMessageId);
-
-        mSentTimestamp = cursor.getLong(INDEX_SENT_TIMESTAMP);
-        mReceivedTimestamp = cursor.getLong(INDEX_RECEIVED_TIMESTAMP);
-        mSeen = (cursor.getInt(INDEX_SEEN) != 0);
-        mRead = (cursor.getInt(INDEX_READ) != 0);
-        mProtocol = cursor.getInt(INDEX_PROTOCOL);
-        mStatus = cursor.getInt(INDEX_STATUS);
-        mSmsMessageUri = cursor.getString(INDEX_SMS_MESSAGE_URI);
-        mSmsPriority = cursor.getInt(INDEX_SMS_PRIORITY);
-        mSmsMessageSize = cursor.getInt(INDEX_SMS_MESSAGE_SIZE);
-        mMmsSubject = cursor.getString(INDEX_MMS_SUBJECT);
-        mMmsExpiry = cursor.getLong(INDEX_MMS_EXPIRY);
-        mRawTelephonyStatus = cursor.getInt(INDEX_RAW_TELEPHONY_STATUS);
-        mSenderFullName = cursor.getString(INDEX_SENDER_FULL_NAME);
-        mSenderFirstName = cursor.getString(INDEX_SENDER_FIRST_NAME);
-        mSenderDisplayDestination = cursor.getString(INDEX_SENDER_DISPLAY_DESTINATION);
-        mSenderNormalizedDestination = cursor.getString(INDEX_SENDER_NORMALIZED_DESTINATION);
-        mSenderProfilePhotoUri = cursor.getString(INDEX_SENDER_PROFILE_PHOTO_URI);
-        mSenderContactId = cursor.getLong(INDEX_SENDER_CONTACT_ID);
-        mSenderContactLookupKey = cursor.getString(INDEX_SENDER_CONTACT_LOOKUP_KEY);
-        mSelfParticipantId = cursor.getString(INDEX_SELF_PARTICIPIANT_ID);
-
-        if (!cursor.isFirst() && cursor.moveToPrevious()) {
-            mCanClusterWithPreviousMessage = canClusterWithMessage(cursor);
-            cursor.moveToNext();
-        } else {
-            mCanClusterWithPreviousMessage = false;
-        }
-        if (!cursor.isLast() && cursor.moveToNext()) {
-            mCanClusterWithNextMessage = canClusterWithMessage(cursor);
-            cursor.moveToPrevious();
-        } else {
-            mCanClusterWithNextMessage = false;
-        }
-    }
-
-    private boolean canClusterWithMessage(final Cursor cursor) {
-        final String otherParticipantId = cursor.getString(INDEX_PARTICIPANT_ID);
-        if (!TextUtils.equals(getParticipantId(), otherParticipantId)) {
-            return false;
-        }
-        final int otherStatus = cursor.getInt(INDEX_STATUS);
-        final boolean otherIsIncoming = (otherStatus >= MessageData.BUGLE_STATUS_FIRST_INCOMING);
-        if (getIsIncoming() != otherIsIncoming) {
-            return false;
-        }
-        final long otherReceivedTimestamp = cursor.getLong(INDEX_RECEIVED_TIMESTAMP);
-        final long timestampDeltaMillis = Math.abs(mReceivedTimestamp - otherReceivedTimestamp);
-        if (timestampDeltaMillis > DateUtils.MINUTE_IN_MILLIS) {
-            return false;
-        }
-        final String otherSelfId = cursor.getString(INDEX_SELF_PARTICIPIANT_ID);
-        if (!TextUtils.equals(getSelfParticipantId(), otherSelfId)) {
-            return false;
-        }
-        return true;
-    }
-
-    private static final Character QUOTE_CHAR = '\'';
-    private static final char DIVIDER = '|';
-
-    // statics to avoid unnecessary object allocation
-    private static final StringBuilder sUnquoteStringBuilder = new StringBuilder();
-    private static final ArrayList<String> sUnquoteResults = new ArrayList<String>();
-
-    // this lock is used to guard access to the above statics
-    private static final Object sUnquoteLock = new Object();
-
-    private static void addResult(final ArrayList<String> results, final StringBuilder value) {
-        if (value.length() > 0) {
-            results.add(value.toString());
-        } else {
-            results.add(EMPTY_STRING);
-        }
-    }
-
-    @VisibleForTesting
-    static String[] splitUnquotedString(final String inputString) {
-        if (TextUtils.isEmpty(inputString)) {
-            return new String[0];
-        }
-
-        return inputString.split("\\" + DIVIDER);
-    }
-
-    /**
-     * Takes a group-concated and quoted string and decomposes it into its constituent
-     * parts.  A quoted string starts and ends with a single quote.  Actual single quotes
-     * within the string are escaped using a second single quote.  So, for example, an
-     * input string with 3 constituent parts might look like this:
-     *
-     * 'now is the time'|'I can''t do it'|'foo'
-     *
-     * This would be returned as an array of 3 strings as follows:
-     * now is the time
-     * I can't do it
-     * foo
-     *
-     * This is achieved by walking through the inputString, character by character,
-     * ignoring the outer quotes and the divider and replacing any pair of consecutive
-     * single quotes with a single single quote.
-     *
-     * @param inputString
-     * @return array of constituent strings
-     */
-    @VisibleForTesting
-    static String[] splitQuotedString(final String inputString) {
-        if (TextUtils.isEmpty(inputString)) {
-            return new String[0];
-        }
-
-        // this method can be called from multiple threads but it uses a static
-        // string builder
-        synchronized (sUnquoteLock) {
-            final int length = inputString.length();
-            final ArrayList<String> results = sUnquoteResults;
-            results.clear();
-
-            int characterPos = -1;
-            while (++characterPos < length) {
-                final char mustBeQuote = inputString.charAt(characterPos);
-                Assert.isTrue(QUOTE_CHAR == mustBeQuote);
-                while (++characterPos < length) {
-                    final char currentChar = inputString.charAt(characterPos);
-                    if (currentChar == QUOTE_CHAR) {
-                        final char peekAhead = characterPos < length - 1
-                                ? inputString.charAt(characterPos + 1) : 0;
-
-                        if (peekAhead == QUOTE_CHAR) {
-                            characterPos += 1;  // skip the second quote
-                        } else {
-                            addResult(results, sUnquoteStringBuilder);
-                            sUnquoteStringBuilder.setLength(0);
-
-                            Assert.isTrue((peekAhead == DIVIDER) || (peekAhead == (char) 0));
-                            characterPos += 1;  // skip the divider
-                            break;
-                        }
-                    }
-                    sUnquoteStringBuilder.append(currentChar);
-                }
-            }
-            return results.toArray(new String[results.size()]);
-        }
-    }
-
-    static MessagePartData makePartData(
-            final String partId,
-            final String contentType,
-            final String contentUriString,
-            final String contentWidth,
-            final String contentHeight,
-            final String text,
-            final String messageId) {
-        if (ContentType.isTextType(contentType)) {
-            final MessagePartData textPart = MessagePartData.createTextMessagePart(text);
-            textPart.updatePartId(partId);
-            textPart.updateMessageId(messageId);
-            return textPart;
-        } else {
-            final Uri contentUri = Uri.parse(contentUriString);
-            final int width = Integer.parseInt(contentWidth);
-            final int height = Integer.parseInt(contentHeight);
-            final MessagePartData attachmentPart = MessagePartData.createMediaMessagePart(
-                    contentType, contentUri, width, height);
-            attachmentPart.updatePartId(partId);
-            attachmentPart.updateMessageId(messageId);
-            return attachmentPart;
-        }
-    }
-
-    @VisibleForTesting
-    static List<MessagePartData> makeParts(
-            final String rawIds,
-            final String rawContentTypes,
-            final String rawContentUris,
-            final String rawWidths,
-            final String rawHeights,
-            final String rawTexts,
-            final int partsCount,
-            final String messageId) {
-        final List<MessagePartData> parts = new LinkedList<MessagePartData>();
-        if (partsCount == 1) {
-            parts.add(makePartData(
-                    rawIds,
-                    rawContentTypes,
-                    rawContentUris,
-                    rawWidths,
-                    rawHeights,
-                    rawTexts,
-                    messageId));
-        } else {
-            unpackMessageParts(
-                    parts,
-                    splitUnquotedString(rawIds),
-                    splitQuotedString(rawContentTypes),
-                    splitQuotedString(rawContentUris),
-                    splitUnquotedString(rawWidths),
-                    splitUnquotedString(rawHeights),
-                    splitQuotedString(rawTexts),
-                    partsCount,
-                    messageId);
-        }
-        return parts;
-    }
-
-    @VisibleForTesting
-    static void unpackMessageParts(
-            final List<MessagePartData> parts,
-            final String[] ids,
-            final String[] contentTypes,
-            final String[] contentUris,
-            final String[] contentWidths,
-            final String[] contentHeights,
-            final String[] texts,
-            final int partsCount,
-            final String messageId) {
-
-        Assert.equals(partsCount, ids.length);
-        Assert.equals(partsCount, contentTypes.length);
-        Assert.equals(partsCount, contentUris.length);
-        Assert.equals(partsCount, contentWidths.length);
-        Assert.equals(partsCount, contentHeights.length);
-        Assert.equals(partsCount, texts.length);
-
-        for (int i = 0; i < partsCount; i++) {
-            parts.add(makePartData(
-                    ids[i],
-                    contentTypes[i],
-                    contentUris[i],
-                    contentWidths[i],
-                    contentHeights[i],
-                    texts[i],
-                    messageId));
-        }
-
-        if (parts.size() != partsCount) {
-            LogUtil.wtf(TAG, "Only unpacked " + parts.size() + " parts from message (id="
-                    + messageId + "), expected " + partsCount + " parts");
-        }
-    }
-
-    public final String getMessageId() {
-        return mMessageId;
-    }
-
-    public final String getConversationId() {
-        return mConversationId;
-    }
-
-    public final String getParticipantId() {
-        return mParticipantId;
-    }
-
-    public List<MessagePartData> getParts() {
-        return mParts;
-    }
-
-    public boolean hasText() {
-        for (final MessagePartData part : mParts) {
-            if (part.isText()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Get a concatenation of all text parts
-     *
-     * @return the text that is a concatenation of all text parts
-     */
-    public String getText() {
-        // This is optimized for single text part case, which is the majority
-
-        // For single text part, we just return the part without creating the StringBuilder
-        String firstTextPart = null;
-        boolean foundText = false;
-        // For multiple text parts, we need the StringBuilder and the separator for concatenation
-        StringBuilder sb = null;
-        String separator = null;
-        for (final MessagePartData part : mParts) {
-            if (part.isText()) {
-                if (!foundText) {
-                    // First text part
-                    firstTextPart = part.getText();
-                    foundText = true;
-                } else {
-                    // Second and beyond
-                    if (sb == null) {
-                        // Need the StringBuilder and the separator starting from 2nd text part
-                        sb = new StringBuilder();
-                        if (!TextUtils.isEmpty(firstTextPart)) {
-                              sb.append(firstTextPart);
-                        }
-                        separator = BugleGservices.get().getString(
-                                BugleGservicesKeys.MMS_TEXT_CONCAT_SEPARATOR,
-                                BugleGservicesKeys.MMS_TEXT_CONCAT_SEPARATOR_DEFAULT);
-                    }
-                    final String partText = part.getText();
-                    if (!TextUtils.isEmpty(partText)) {
-                        if (!TextUtils.isEmpty(separator) && sb.length() > 0) {
-                            sb.append(separator);
-                        }
-                        sb.append(partText);
-                    }
-                }
-            }
-        }
-        if (sb == null) {
-            // Only one text part
-            return firstTextPart;
-        } else {
-            // More than one
-            return sb.toString();
-        }
-    }
-
-    public boolean hasAttachments() {
-        for (final MessagePartData part : mParts) {
-            if (part.isAttachment()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public List<MessagePartData> getAttachments() {
-        return getAttachments(null);
-    }
-
-    public List<MessagePartData> getAttachments(final Predicate<MessagePartData> filter) {
-        if (mParts.isEmpty()) {
-            return Collections.emptyList();
-        }
-        final List<MessagePartData> attachmentParts = new LinkedList<>();
-        for (final MessagePartData part : mParts) {
-            if (part.isAttachment()) {
-                if (filter == null || filter.apply(part)) {
-                    attachmentParts.add(part);
-                }
-            }
-        }
-        return attachmentParts;
-    }
-
-    public final long getSentTimeStamp() {
-        return mSentTimestamp;
-    }
-
-    public final long getReceivedTimeStamp() {
-        return mReceivedTimestamp;
-    }
-
-    public final String getFormattedReceivedTimeStamp() {
-        return Dates.getMessageTimeString(mReceivedTimestamp).toString();
-    }
-
-    public final boolean getIsSeen() {
-        return mSeen;
-    }
-
-    public final boolean getIsRead() {
-        return mRead;
-    }
-
-    public final boolean getIsMms() {
-        return (mProtocol == MessageData.PROTOCOL_MMS ||
-                mProtocol == MessageData.PROTOCOL_MMS_PUSH_NOTIFICATION);
-    }
-
-    public final boolean getIsMmsNotification() {
-        return (mProtocol == MessageData.PROTOCOL_MMS_PUSH_NOTIFICATION);
-    }
-
-    public final boolean getIsSms() {
-        return mProtocol == (MessageData.PROTOCOL_SMS);
-    }
-
-    final int getProtocol() {
-        return mProtocol;
-    }
-
-    public final int getStatus() {
-        return mStatus;
-    }
-
-    public final String getSmsMessageUri() {
-        return mSmsMessageUri;
-    }
-
-    public final int getSmsPriority() {
-        return mSmsPriority;
-    }
-
-    public final int getSmsMessageSize() {
-        return mSmsMessageSize;
-    }
-
-    public final String getMmsSubject() {
-        return mMmsSubject;
-    }
-
-    public final long getMmsExpiry() {
-        return mMmsExpiry;
-    }
-
-    public final int getRawTelephonyStatus() {
-        return mRawTelephonyStatus;
-    }
-
-    public final String getSelfParticipantId() {
-        return mSelfParticipantId;
-    }
-
-    public boolean getIsIncoming() {
-        return (mStatus >= MessageData.BUGLE_STATUS_FIRST_INCOMING);
-    }
-
-    public boolean hasIncomingErrorStatus() {
-        return (mStatus == MessageData.BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE ||
-                mStatus == MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED);
-    }
-
-    public boolean getIsSendComplete() {
-        return (mStatus == MessageData.BUGLE_STATUS_OUTGOING_COMPLETE
-                || mStatus == MessageData.BUGLE_STATUS_OUTGOING_DELIVERED);
-    }
-
-    public String getSenderFullName() {
-        return mSenderFullName;
-    }
-
-    public String getSenderFirstName() {
-        return mSenderFirstName;
-    }
-
-    public String getSenderDisplayDestination() {
-        return mSenderDisplayDestination;
-    }
-
-    public String getSenderNormalizedDestination() {
-        return mSenderNormalizedDestination;
-    }
-
-    public Uri getSenderProfilePhotoUri() {
-        return mSenderProfilePhotoUri == null ? null : Uri.parse(mSenderProfilePhotoUri);
-    }
-
-    public long getSenderContactId() {
-        return mSenderContactId;
-    }
-
-    public String getSenderDisplayName() {
-        if (!TextUtils.isEmpty(mSenderFullName)) {
-            return mSenderFullName;
-        }
-        if (!TextUtils.isEmpty(mSenderFirstName)) {
-            return mSenderFirstName;
-        }
-        return mSenderDisplayDestination;
-    }
-
-    public String getSenderContactLookupKey() {
-        return mSenderContactLookupKey;
-    }
-
-    public boolean getShowDownloadMessage() {
-        return MessageData.getShowDownloadMessage(mStatus);
-    }
-
-    public boolean getShowResendMessage() {
-        return MessageData.getShowResendMessage(mStatus);
-    }
-
-    public boolean getCanForwardMessage() {
-        // Even for outgoing messages, we only allow forwarding if the message has finished sending
-        // as media often has issues when send isn't complete
-        return (mStatus == MessageData.BUGLE_STATUS_OUTGOING_COMPLETE
-                || mStatus == MessageData.BUGLE_STATUS_OUTGOING_DELIVERED
-                || mStatus == MessageData.BUGLE_STATUS_INCOMING_COMPLETE);
-    }
-
-    public boolean getCanCopyMessageToClipboard() {
-        return (hasText() &&
-                (!getIsIncoming() || mStatus == MessageData.BUGLE_STATUS_INCOMING_COMPLETE));
-    }
-
-    public boolean getOneClickResendMessage() {
-        return MessageData.getOneClickResendMessage(mStatus, mRawTelephonyStatus);
-    }
-
-    /**
-     * Get sender's lookup uri.
-     * This method doesn't support corp contacts.
-     *
-     * @return Lookup uri of sender's contact
-     */
-    public Uri getSenderContactLookupUri() {
-        if (mSenderContactId > ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED
-                && !TextUtils.isEmpty(mSenderContactLookupKey)) {
-            return ContactsContract.Contacts.getLookupUri(mSenderContactId,
-                    mSenderContactLookupKey);
-        }
-        return null;
-    }
-
-    public boolean getCanClusterWithPreviousMessage() {
-        return mCanClusterWithPreviousMessage;
-    }
-
-    public boolean getCanClusterWithNextMessage() {
-        return mCanClusterWithNextMessage;
-    }
-
-    @Override
-    public String toString() {
-        return MessageData.toString(mMessageId, mParts);
-    }
-
-    // Data definitions
-
-    public static final String getConversationMessagesQuerySql() {
-        return CONVERSATION_MESSAGES_QUERY_SQL
-                + " AND "
-                // Inject the conversation id
-                + DatabaseHelper.MESSAGES_TABLE + "." + MessageColumns.CONVERSATION_ID + "=?)"
-                + CONVERSATION_MESSAGES_QUERY_SQL_GROUP_BY;
-    }
-
-    static final String getConversationMessageIdsQuerySql() {
-        return CONVERSATION_MESSAGES_IDS_QUERY_SQL
-                + " AND "
-                // Inject the conversation id
-                + DatabaseHelper.MESSAGES_TABLE + "." + MessageColumns.CONVERSATION_ID + "=?)"
-                + CONVERSATION_MESSAGES_QUERY_SQL_GROUP_BY;
-    }
-
-    public static final String getNotificationQuerySql() {
-        return CONVERSATION_MESSAGES_QUERY_SQL
-                + " AND "
-                + "(" + DatabaseHelper.MessageColumns.STATUS + " in ("
-                + MessageData.BUGLE_STATUS_INCOMING_COMPLETE + ", "
-                + MessageData.BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD + ")"
-                + " AND "
-                + DatabaseHelper.MessageColumns.SEEN + " = 0)"
-                + ")"
-                + NOTIFICATION_QUERY_SQL_GROUP_BY;
-    }
-
-    public static final String getWearableQuerySql() {
-        return CONVERSATION_MESSAGES_QUERY_SQL
-                + " AND "
-                + DatabaseHelper.MESSAGES_TABLE + "." + MessageColumns.CONVERSATION_ID + "=?"
-                + " AND "
-                + DatabaseHelper.MessageColumns.STATUS + " IN ("
-                + MessageData.BUGLE_STATUS_OUTGOING_DELIVERED + ", "
-                + MessageData.BUGLE_STATUS_OUTGOING_COMPLETE + ", "
-                + MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND + ", "
-                + MessageData.BUGLE_STATUS_OUTGOING_SENDING + ", "
-                + MessageData.BUGLE_STATUS_OUTGOING_RESENDING + ", "
-                + MessageData.BUGLE_STATUS_OUTGOING_AWAITING_RETRY + ", "
-                + MessageData.BUGLE_STATUS_INCOMING_COMPLETE + ", "
-                + MessageData.BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD + ")"
-                + ")"
-                + NOTIFICATION_QUERY_SQL_GROUP_BY;
-    }
-
-    /*
-     * Generate a sqlite snippet to call the quote function on the columnName argument.
-     * The columnName doesn't strictly have to be a column name (e.g. it could be an
-     * expression).
-     */
-    private static String quote(final String columnName) {
-        return "quote(" + columnName + ")";
-    }
-
-    private static String makeGroupConcatString(final String column) {
-        return "group_concat(" + column + ", '" + DIVIDER + "')";
-    }
-
-    private static String makeIfNullString(final String column) {
-        return "ifnull(" + column + "," + "''" + ")";
-    }
-
-    private static String makePartsTableColumnString(final String column) {
-        return DatabaseHelper.PARTS_TABLE + '.' + column;
-    }
-
-    private static String makeCaseWhenString(final String column,
-                                             final boolean quote,
-                                             final String asColumn) {
-        final String fullColumn = makeIfNullString(makePartsTableColumnString(column));
-        final String groupConcatTerm = quote
-                ? makeGroupConcatString(quote(fullColumn))
-                : makeGroupConcatString(fullColumn);
-        return "CASE WHEN (" + CONVERSATION_MESSAGE_VIEW_PARTS_COUNT + ">1) THEN " + groupConcatTerm
-                + " ELSE " + makePartsTableColumnString(column) + " END AS " + asColumn;
-    }
-
-    private static final String CONVERSATION_MESSAGE_VIEW_PARTS_COUNT =
-            "count(" + DatabaseHelper.PARTS_TABLE + '.' + PartColumns._ID + ")";
-
-    private static final String EMPTY_STRING = "";
-
-    private static final String CONVERSATION_MESSAGES_QUERY_PROJECTION_SQL =
-            DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns._ID
-            + " as " + ConversationMessageViewColumns._ID + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.CONVERSATION_ID
-            + " as " + ConversationMessageViewColumns.CONVERSATION_ID + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SENDER_PARTICIPANT_ID
-            + " as " + ConversationMessageViewColumns.PARTICIPANT_ID + ", "
-
-            + makeCaseWhenString(PartColumns._ID, false,
-                    ConversationMessageViewColumns.PARTS_IDS) + ", "
-            + makeCaseWhenString(PartColumns.CONTENT_TYPE, true,
-                    ConversationMessageViewColumns.PARTS_CONTENT_TYPES) + ", "
-            + makeCaseWhenString(PartColumns.CONTENT_URI, true,
-                    ConversationMessageViewColumns.PARTS_CONTENT_URIS) + ", "
-            + makeCaseWhenString(PartColumns.WIDTH, false,
-                    ConversationMessageViewColumns.PARTS_WIDTHS) + ", "
-            + makeCaseWhenString(PartColumns.HEIGHT, false,
-                    ConversationMessageViewColumns.PARTS_HEIGHTS) + ", "
-            + makeCaseWhenString(PartColumns.TEXT, true,
-                    ConversationMessageViewColumns.PARTS_TEXTS) + ", "
-
-            + CONVERSATION_MESSAGE_VIEW_PARTS_COUNT
-            + " as " + ConversationMessageViewColumns.PARTS_COUNT + ", "
-
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SENT_TIMESTAMP
-            + " as " + ConversationMessageViewColumns.SENT_TIMESTAMP + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RECEIVED_TIMESTAMP
-            + " as " + ConversationMessageViewColumns.RECEIVED_TIMESTAMP + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SEEN
-            + " as " + ConversationMessageViewColumns.SEEN + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.READ
-            + " as " + ConversationMessageViewColumns.READ + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.PROTOCOL
-            + " as " + ConversationMessageViewColumns.PROTOCOL + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.STATUS
-            + " as " + ConversationMessageViewColumns.STATUS + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SMS_MESSAGE_URI
-            + " as " + ConversationMessageViewColumns.SMS_MESSAGE_URI + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SMS_PRIORITY
-            + " as " + ConversationMessageViewColumns.SMS_PRIORITY + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SMS_MESSAGE_SIZE
-            + " as " + ConversationMessageViewColumns.SMS_MESSAGE_SIZE + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.MMS_SUBJECT
-            + " as " + ConversationMessageViewColumns.MMS_SUBJECT + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.MMS_EXPIRY
-            + " as " + ConversationMessageViewColumns.MMS_EXPIRY + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RAW_TELEPHONY_STATUS
-            + " as " + ConversationMessageViewColumns.RAW_TELEPHONY_STATUS + ", "
-            + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SELF_PARTICIPANT_ID
-            + " as " + ConversationMessageViewColumns.SELF_PARTICIPANT_ID + ", "
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.FULL_NAME
-            + " as " + ConversationMessageViewColumns.SENDER_FULL_NAME + ", "
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.FIRST_NAME
-            + " as " + ConversationMessageViewColumns.SENDER_FIRST_NAME + ", "
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.DISPLAY_DESTINATION
-            + " as " + ConversationMessageViewColumns.SENDER_DISPLAY_DESTINATION + ", "
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.NORMALIZED_DESTINATION
-            + " as " + ConversationMessageViewColumns.SENDER_NORMALIZED_DESTINATION + ", "
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.PROFILE_PHOTO_URI
-            + " as " + ConversationMessageViewColumns.SENDER_PROFILE_PHOTO_URI + ", "
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.CONTACT_ID
-            + " as " + ConversationMessageViewColumns.SENDER_CONTACT_ID + ", "
-            + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.LOOKUP_KEY
-            + " as " + ConversationMessageViewColumns.SENDER_CONTACT_LOOKUP_KEY + " ";
-
-    private static final String CONVERSATION_MESSAGES_QUERY_FROM_WHERE_SQL =
-            " FROM " + DatabaseHelper.MESSAGES_TABLE
-            + " LEFT JOIN " + DatabaseHelper.PARTS_TABLE
-            + " ON (" + DatabaseHelper.MESSAGES_TABLE + "." + MessageColumns._ID
-            + "=" + DatabaseHelper.PARTS_TABLE + "." + PartColumns.MESSAGE_ID + ") "
-            + " LEFT JOIN " + DatabaseHelper.PARTICIPANTS_TABLE
-            + " ON (" + DatabaseHelper.MESSAGES_TABLE + '.' +  MessageColumns.SENDER_PARTICIPANT_ID
-            + '=' + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns._ID + ")"
-            // Exclude draft messages from main view
-            + " WHERE (" + DatabaseHelper.MESSAGES_TABLE + "." + MessageColumns.STATUS
-            + " <> " + MessageData.BUGLE_STATUS_OUTGOING_DRAFT;
-
-    // This query is mostly static, except for the injection of conversation id. This is for
-    // performance reasons, to ensure that the query uses indices and does not trigger full scans
-    // of the messages table. See b/17160946 for more details.
-    private static final String CONVERSATION_MESSAGES_QUERY_SQL = "SELECT "
-            + CONVERSATION_MESSAGES_QUERY_PROJECTION_SQL
-            + CONVERSATION_MESSAGES_QUERY_FROM_WHERE_SQL;
-
-    private static final String CONVERSATION_MESSAGE_IDS_PROJECTION_SQL =
-            DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns._ID
-                    + " as " + ConversationMessageViewColumns._ID + " ";
-
-    private static final String CONVERSATION_MESSAGES_IDS_QUERY_SQL = "SELECT "
-            + CONVERSATION_MESSAGE_IDS_PROJECTION_SQL
-            + CONVERSATION_MESSAGES_QUERY_FROM_WHERE_SQL;
-
-    // Note that we sort DESC and ConversationData reverses the cursor.  This is a performance
-    // issue (improvement) for large cursors.
-    private static final String CONVERSATION_MESSAGES_QUERY_SQL_GROUP_BY =
-            " GROUP BY " + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.MESSAGE_ID
-          + " ORDER BY "
-          + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RECEIVED_TIMESTAMP + " DESC";
-
-    private static final String NOTIFICATION_QUERY_SQL_GROUP_BY =
-            " GROUP BY " + DatabaseHelper.PARTS_TABLE + '.' + PartColumns.MESSAGE_ID
-          + " ORDER BY "
-          + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RECEIVED_TIMESTAMP + " DESC";
-
-    interface ConversationMessageViewColumns extends BaseColumns {
-        static final String _ID = MessageColumns._ID;
-        static final String CONVERSATION_ID = MessageColumns.CONVERSATION_ID;
-        static final String PARTICIPANT_ID = MessageColumns.SENDER_PARTICIPANT_ID;
-        static final String PARTS_COUNT = "parts_count";
-        static final String SENT_TIMESTAMP = MessageColumns.SENT_TIMESTAMP;
-        static final String RECEIVED_TIMESTAMP = MessageColumns.RECEIVED_TIMESTAMP;
-        static final String SEEN = MessageColumns.SEEN;
-        static final String READ = MessageColumns.READ;
-        static final String PROTOCOL = MessageColumns.PROTOCOL;
-        static final String STATUS = MessageColumns.STATUS;
-        static final String SMS_MESSAGE_URI = MessageColumns.SMS_MESSAGE_URI;
-        static final String SMS_PRIORITY = MessageColumns.SMS_PRIORITY;
-        static final String SMS_MESSAGE_SIZE = MessageColumns.SMS_MESSAGE_SIZE;
-        static final String MMS_SUBJECT = MessageColumns.MMS_SUBJECT;
-        static final String MMS_EXPIRY = MessageColumns.MMS_EXPIRY;
-        static final String RAW_TELEPHONY_STATUS = MessageColumns.RAW_TELEPHONY_STATUS;
-        static final String SELF_PARTICIPANT_ID = MessageColumns.SELF_PARTICIPANT_ID;
-        static final String SENDER_FULL_NAME = ParticipantColumns.FULL_NAME;
-        static final String SENDER_FIRST_NAME = ParticipantColumns.FIRST_NAME;
-        static final String SENDER_DISPLAY_DESTINATION = ParticipantColumns.DISPLAY_DESTINATION;
-        static final String SENDER_NORMALIZED_DESTINATION =
-                ParticipantColumns.NORMALIZED_DESTINATION;
-        static final String SENDER_PROFILE_PHOTO_URI = ParticipantColumns.PROFILE_PHOTO_URI;
-        static final String SENDER_CONTACT_ID = ParticipantColumns.CONTACT_ID;
-        static final String SENDER_CONTACT_LOOKUP_KEY = ParticipantColumns.LOOKUP_KEY;
-        static final String PARTS_IDS = "parts_ids";
-        static final String PARTS_CONTENT_TYPES = "parts_content_types";
-        static final String PARTS_CONTENT_URIS = "parts_content_uris";
-        static final String PARTS_WIDTHS = "parts_widths";
-        static final String PARTS_HEIGHTS = "parts_heights";
-        static final String PARTS_TEXTS = "parts_texts";
-    }
-
-    private static int sIndexIncrementer = 0;
-
-    private static final int INDEX_MESSAGE_ID                    = sIndexIncrementer++;
-    private static final int INDEX_CONVERSATION_ID               = sIndexIncrementer++;
-    private static final int INDEX_PARTICIPANT_ID                = sIndexIncrementer++;
-
-    private static final int INDEX_PARTS_IDS                     = sIndexIncrementer++;
-    private static final int INDEX_PARTS_CONTENT_TYPES           = sIndexIncrementer++;
-    private static final int INDEX_PARTS_CONTENT_URIS            = sIndexIncrementer++;
-    private static final int INDEX_PARTS_WIDTHS                  = sIndexIncrementer++;
-    private static final int INDEX_PARTS_HEIGHTS                 = sIndexIncrementer++;
-    private static final int INDEX_PARTS_TEXTS                   = sIndexIncrementer++;
-
-    private static final int INDEX_PARTS_COUNT                   = sIndexIncrementer++;
-
-    private static final int INDEX_SENT_TIMESTAMP                = sIndexIncrementer++;
-    private static final int INDEX_RECEIVED_TIMESTAMP            = sIndexIncrementer++;
-    private static final int INDEX_SEEN                          = sIndexIncrementer++;
-    private static final int INDEX_READ                          = sIndexIncrementer++;
-    private static final int INDEX_PROTOCOL                      = sIndexIncrementer++;
-    private static final int INDEX_STATUS                        = sIndexIncrementer++;
-    private static final int INDEX_SMS_MESSAGE_URI               = sIndexIncrementer++;
-    private static final int INDEX_SMS_PRIORITY                  = sIndexIncrementer++;
-    private static final int INDEX_SMS_MESSAGE_SIZE              = sIndexIncrementer++;
-    private static final int INDEX_MMS_SUBJECT                   = sIndexIncrementer++;
-    private static final int INDEX_MMS_EXPIRY                    = sIndexIncrementer++;
-    private static final int INDEX_RAW_TELEPHONY_STATUS          = sIndexIncrementer++;
-    private static final int INDEX_SELF_PARTICIPIANT_ID          = sIndexIncrementer++;
-    private static final int INDEX_SENDER_FULL_NAME              = sIndexIncrementer++;
-    private static final int INDEX_SENDER_FIRST_NAME             = sIndexIncrementer++;
-    private static final int INDEX_SENDER_DISPLAY_DESTINATION    = sIndexIncrementer++;
-    private static final int INDEX_SENDER_NORMALIZED_DESTINATION = sIndexIncrementer++;
-    private static final int INDEX_SENDER_PROFILE_PHOTO_URI      = sIndexIncrementer++;
-    private static final int INDEX_SENDER_CONTACT_ID             = sIndexIncrementer++;
-    private static final int INDEX_SENDER_CONTACT_LOOKUP_KEY     = sIndexIncrementer++;
-
-
-    private static String[] sProjection = {
-        ConversationMessageViewColumns._ID,
-        ConversationMessageViewColumns.CONVERSATION_ID,
-        ConversationMessageViewColumns.PARTICIPANT_ID,
-
-        ConversationMessageViewColumns.PARTS_IDS,
-        ConversationMessageViewColumns.PARTS_CONTENT_TYPES,
-        ConversationMessageViewColumns.PARTS_CONTENT_URIS,
-        ConversationMessageViewColumns.PARTS_WIDTHS,
-        ConversationMessageViewColumns.PARTS_HEIGHTS,
-        ConversationMessageViewColumns.PARTS_TEXTS,
-
-        ConversationMessageViewColumns.PARTS_COUNT,
-        ConversationMessageViewColumns.SENT_TIMESTAMP,
-        ConversationMessageViewColumns.RECEIVED_TIMESTAMP,
-        ConversationMessageViewColumns.SEEN,
-        ConversationMessageViewColumns.READ,
-        ConversationMessageViewColumns.PROTOCOL,
-        ConversationMessageViewColumns.STATUS,
-        ConversationMessageViewColumns.SMS_MESSAGE_URI,
-        ConversationMessageViewColumns.SMS_PRIORITY,
-        ConversationMessageViewColumns.SMS_MESSAGE_SIZE,
-        ConversationMessageViewColumns.MMS_SUBJECT,
-        ConversationMessageViewColumns.MMS_EXPIRY,
-        ConversationMessageViewColumns.RAW_TELEPHONY_STATUS,
-        ConversationMessageViewColumns.SELF_PARTICIPANT_ID,
-        ConversationMessageViewColumns.SENDER_FULL_NAME,
-        ConversationMessageViewColumns.SENDER_FIRST_NAME,
-        ConversationMessageViewColumns.SENDER_DISPLAY_DESTINATION,
-        ConversationMessageViewColumns.SENDER_NORMALIZED_DESTINATION,
-        ConversationMessageViewColumns.SENDER_PROFILE_PHOTO_URI,
-        ConversationMessageViewColumns.SENDER_CONTACT_ID,
-        ConversationMessageViewColumns.SENDER_CONTACT_LOOKUP_KEY,
-    };
-
-    public static String[] getProjection() {
-        return sProjection;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/ConversationParticipantsData.java b/src/com/android/messaging/datamodel/data/ConversationParticipantsData.java
deleted file mode 100644
index 962cb74..0000000
--- a/src/com/android/messaging/datamodel/data/ConversationParticipantsData.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.database.Cursor;
-import androidx.collection.SimpleArrayMap;
-
-import com.android.messaging.util.Assert;
-
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * A class that contains the list of all participants potentially involved in a conversation.
- * Includes both the participant records for each participant referenced in conversation
- * participants table (i.e. "other" phone numbers) plus all participants representing self
- * (i.e. one per sim recorded in the subscription manager db).
- */
-public class ConversationParticipantsData implements Iterable<ParticipantData> {
-    // A map from a participant id to a participant
-    private final SimpleArrayMap<String, ParticipantData> mConversationParticipantsMap;
-    private int mParticipantCountExcludingSelf = 0;
-
-    public ConversationParticipantsData() {
-        mConversationParticipantsMap = new SimpleArrayMap<String, ParticipantData>();
-    }
-
-    public void bind(final Cursor cursor) {
-        mConversationParticipantsMap.clear();
-        mParticipantCountExcludingSelf = 0;
-        if (cursor != null) {
-            while (cursor.moveToNext()) {
-                final ParticipantData newParticipant = ParticipantData.getFromCursor(cursor);
-                if (!newParticipant.isSelf()) {
-                    mParticipantCountExcludingSelf++;
-                }
-                mConversationParticipantsMap.put(newParticipant.getId(), newParticipant);
-            }
-        }
-    }
-
-    @VisibleForTesting
-    ParticipantData getParticipantById(final String participantId) {
-        return mConversationParticipantsMap.get(participantId);
-    }
-
-    ArrayList<ParticipantData> getParticipantListExcludingSelf() {
-        final ArrayList<ParticipantData> retList =
-                new ArrayList<ParticipantData>(mConversationParticipantsMap.size());
-        for (int i = 0; i < mConversationParticipantsMap.size(); i++) {
-            final ParticipantData participant = mConversationParticipantsMap.valueAt(i);
-            if (!participant.isSelf()) {
-                retList.add(participant);
-            }
-        }
-        return retList;
-    }
-
-    /**
-     * For a 1:1 conversation return the other (not self) participant
-     */
-    public ParticipantData getOtherParticipant() {
-        if (mParticipantCountExcludingSelf == 1) {
-            for (int i = 0; i < mConversationParticipantsMap.size(); i++) {
-                final ParticipantData participant = mConversationParticipantsMap.valueAt(i);
-                if (!participant.isSelf()) {
-                    return participant;
-                }
-            }
-            Assert.fail("Could not find other participant");
-        }
-        return null;
-    }
-
-    public int getNumberOfParticipantsExcludingSelf() {
-        return mParticipantCountExcludingSelf;
-    }
-
-    public boolean isLoaded() {
-        return !mConversationParticipantsMap.isEmpty();
-    }
-
-    @Override
-    public Iterator<ParticipantData> iterator() {
-        return new Iterator<ParticipantData>() {
-            private int mCurrentIndex = -1;
-
-            @Override
-            public boolean hasNext() {
-                return mCurrentIndex < mConversationParticipantsMap.size() - 1;
-            }
-
-            @Override
-            public ParticipantData next() {
-                mCurrentIndex++;
-                if (mCurrentIndex >= mConversationParticipantsMap.size()) {
-                    throw new NoSuchElementException();
-                }
-                return mConversationParticipantsMap.valueAt(mCurrentIndex);
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-        };
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/DraftMessageData.java b/src/com/android/messaging/datamodel/data/DraftMessageData.java
deleted file mode 100644
index f63c27f..0000000
--- a/src/com/android/messaging/datamodel/data/DraftMessageData.java
+++ /dev/null
@@ -1,867 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.net.Uri;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.MessageTextStats;
-import com.android.messaging.datamodel.action.ReadDraftDataAction;
-import com.android.messaging.datamodel.action.ReadDraftDataAction.ReadDraftDataActionListener;
-import com.android.messaging.datamodel.action.ReadDraftDataAction.ReadDraftDataActionMonitor;
-import com.android.messaging.datamodel.action.WriteDraftMessageAction;
-import com.android.messaging.datamodel.binding.BindableData;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.sms.MmsSmsUtils;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.Assert.RunsOnMainThread;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.SafeAsyncTask;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-public class DraftMessageData extends BindableData implements ReadDraftDataActionListener {
-
-    /**
-     * Interface for DraftMessageData listeners
-     */
-    public interface DraftMessageDataListener {
-        @RunsOnMainThread
-        void onDraftChanged(DraftMessageData data, int changeFlags);
-
-        @RunsOnMainThread
-        void onDraftAttachmentLimitReached(DraftMessageData data);
-
-        @RunsOnMainThread
-        void onDraftAttachmentLoadFailed();
-    }
-
-    /**
-     * Interface for providing subscription-related data to DraftMessageData
-     */
-    public interface DraftMessageSubscriptionDataProvider {
-        int getConversationSelfSubId();
-    }
-
-    // Flags sent to onDraftChanged to help the receiver limit the amount of work done
-    public static int ATTACHMENTS_CHANGED  =     0x0001;
-    public static int MESSAGE_TEXT_CHANGED =     0x0002;
-    public static int MESSAGE_SUBJECT_CHANGED =  0x0004;
-    // Whether the self participant data has been loaded
-    public static int SELF_CHANGED =             0x0008;
-    public static int ALL_CHANGED =              0x00FF;
-    // ALL_CHANGED intentionally doesn't include WIDGET_CHANGED. ConversationFragment needs to
-    // be notified if the draft it is looking at is changed externally (by a desktop widget) so it
-    // can reload the draft.
-    public static int WIDGET_CHANGED  =          0x0100;
-
-    private final String mConversationId;
-    private ReadDraftDataActionMonitor mMonitor;
-    private final DraftMessageDataEventDispatcher mListeners;
-    private DraftMessageSubscriptionDataProvider mSubscriptionDataProvider;
-
-    private boolean mIncludeEmailAddress;
-    private boolean mIsGroupConversation;
-    private String mMessageText;
-    private String mMessageSubject;
-    private String mSelfId;
-    private MessageTextStats mMessageTextStats;
-    private boolean mSending;
-
-    /** Keeps track of completed attachments in the message draft. This data is persisted to db */
-    private final List<MessagePartData> mAttachments;
-
-    /** A read-only wrapper on mAttachments surfaced to the UI layer for rendering */
-    private final List<MessagePartData> mReadOnlyAttachments;
-
-    /** Keeps track of pending attachments that are being loaded. The pending attachments are
-     * transient, because they are not persisted to the database and are dropped once we go
-     * to the background (after the UI calls saveToStorage) */
-    private final List<PendingAttachmentData> mPendingAttachments;
-
-    /** A read-only wrapper on mPendingAttachments surfaced to the UI layer for rendering */
-    private final List<PendingAttachmentData> mReadOnlyPendingAttachments;
-
-    /** Is the current draft a cached copy of what's been saved to the database. If so, we
-     * may skip loading from database if we are still bound */
-    private boolean mIsDraftCachedCopy;
-
-    /** Whether we are currently asynchronously validating the draft before sending. */
-    private CheckDraftForSendTask mCheckDraftForSendTask;
-
-    public DraftMessageData(final String conversationId) {
-        mConversationId = conversationId;
-        mAttachments = new ArrayList<MessagePartData>();
-        mReadOnlyAttachments = Collections.unmodifiableList(mAttachments);
-        mPendingAttachments = new ArrayList<PendingAttachmentData>();
-        mReadOnlyPendingAttachments = Collections.unmodifiableList(mPendingAttachments);
-        mListeners = new DraftMessageDataEventDispatcher();
-        mMessageTextStats = new MessageTextStats();
-    }
-
-    public void addListener(final DraftMessageDataListener listener) {
-        mListeners.add(listener);
-    }
-
-    public void setSubscriptionDataProvider(final DraftMessageSubscriptionDataProvider provider) {
-        mSubscriptionDataProvider = provider;
-    }
-
-    public void updateFromMessageData(final MessageData message, final String bindingId) {
-        // New attachments have arrived - only update if the user hasn't already edited
-        Assert.notNull(bindingId);
-        // The draft is now synced with actual MessageData and no longer a cached copy.
-        mIsDraftCachedCopy = false;
-        // Do not use the loaded draft if the user began composing a message before the draft loaded
-        // During config changes (orientation), the text fields preserve their data, so allow them
-        // to be the same and still consider the draft unchanged by the user
-        if (isDraftEmpty() || (TextUtils.equals(mMessageText, message.getMessageText()) &&
-                TextUtils.equals(mMessageSubject, message.getMmsSubject()) &&
-                mAttachments.isEmpty())) {
-            // No need to clear as just checked it was empty or a subset
-            setMessageText(message.getMessageText(), false /* notify */);
-            setMessageSubject(message.getMmsSubject(), false /* notify */);
-            for (final MessagePartData part : message.getParts()) {
-                if (part.isAttachment() && getAttachmentCount() >= getAttachmentLimit()) {
-                    dispatchAttachmentLimitReached();
-                    break;
-                }
-
-                if (part instanceof PendingAttachmentData) {
-                    // This is a pending attachment data from share intent (e.g. an shared image
-                    // that we need to persist locally).
-                    final PendingAttachmentData data = (PendingAttachmentData) part;
-                    Assert.equals(PendingAttachmentData.STATE_PENDING, data.getCurrentState());
-                    addOnePendingAttachmentNoNotify(data, bindingId);
-                } else if (part.isAttachment()) {
-                    addOneAttachmentNoNotify(part);
-                }
-            }
-            dispatchChanged(ALL_CHANGED);
-        } else {
-            // The user has started a new message so we throw out the draft message data if there
-            // is one but we also loaded the self metadata and need to let our listeners know.
-            dispatchChanged(SELF_CHANGED);
-        }
-    }
-
-    /**
-     * Create a MessageData object containing a copy of all the parts in this DraftMessageData.
-     *
-     * @param clearLocalCopy whether we should clear out the in-memory copy of the parts. If we
-     *        are simply pausing/resuming and not sending the message, then we can keep
-     * @return the MessageData for the draft, null if self id is not set
-     */
-    public MessageData createMessageWithCurrentAttachments(final boolean clearLocalCopy) {
-        MessageData message = null;
-        if (getIsMms()) {
-            message = MessageData.createDraftMmsMessage(mConversationId, mSelfId,
-                    mMessageText, mMessageSubject);
-            for (final MessagePartData attachment : mAttachments) {
-                message.addPart(attachment);
-            }
-        } else {
-            message = MessageData.createDraftSmsMessage(mConversationId, mSelfId,
-                    mMessageText);
-        }
-
-        if (clearLocalCopy) {
-            // The message now owns all the attachments and the text...
-            clearLocalDraftCopy();
-            dispatchChanged(ALL_CHANGED);
-        } else {
-            // The draft message becomes a cached copy for UI.
-            mIsDraftCachedCopy = true;
-        }
-        return message;
-    }
-
-    private void clearLocalDraftCopy() {
-        mIsDraftCachedCopy = false;
-        mAttachments.clear();
-        setMessageText("");
-        setMessageSubject("");
-    }
-
-    public String getConversationId() {
-        return mConversationId;
-    }
-
-    public String getMessageText() {
-        return mMessageText;
-    }
-
-    public String getMessageSubject() {
-        return mMessageSubject;
-    }
-
-    public boolean getIsMms() {
-        final int selfSubId = getSelfSubId();
-        return MmsSmsUtils.getRequireMmsForEmailAddress(mIncludeEmailAddress, selfSubId) ||
-                (mIsGroupConversation && MmsUtils.groupMmsEnabled(selfSubId)) ||
-                mMessageTextStats.getMessageLengthRequiresMms() || !mAttachments.isEmpty() ||
-                !TextUtils.isEmpty(mMessageSubject);
-    }
-
-    public boolean getIsGroupMmsConversation() {
-        return getIsMms() && mIsGroupConversation;
-    }
-
-    public String getSelfId() {
-        return mSelfId;
-    }
-
-    public int getNumMessagesToBeSent() {
-        return mMessageTextStats.getNumMessagesToBeSent();
-    }
-
-    public int getCodePointsRemainingInCurrentMessage() {
-        return mMessageTextStats.getCodePointsRemainingInCurrentMessage();
-    }
-
-    public int getSelfSubId() {
-        return mSubscriptionDataProvider == null ? ParticipantData.DEFAULT_SELF_SUB_ID :
-                mSubscriptionDataProvider.getConversationSelfSubId();
-    }
-
-    private void setMessageText(final String messageText, final boolean notify) {
-        mMessageText = messageText;
-        mMessageTextStats.updateMessageTextStats(getSelfSubId(), mMessageText);
-        if (notify) {
-            dispatchChanged(MESSAGE_TEXT_CHANGED);
-        }
-    }
-
-    private void setMessageSubject(final String subject, final boolean notify) {
-        mMessageSubject = subject;
-        if (notify) {
-            dispatchChanged(MESSAGE_SUBJECT_CHANGED);
-        }
-    }
-
-    public void setMessageText(final String messageText) {
-        setMessageText(messageText, false);
-    }
-
-    public void setMessageSubject(final String subject) {
-        setMessageSubject(subject, false);
-    }
-
-    public void addAttachments(final Collection<? extends MessagePartData> attachments) {
-        // If the incoming attachments contains a single-only attachment, we need to clear
-        // the existing attachments.
-        for (final MessagePartData data : attachments) {
-            if (data.isSinglePartOnly()) {
-                // clear any existing attachments because the attachment we're adding can only
-                // exist by itself.
-                destroyAttachments();
-                break;
-            }
-        }
-        // If the existing attachments contain a single-only attachment, we need to clear the
-        // existing attachments to make room for the incoming attachment.
-        for (final MessagePartData data : mAttachments) {
-            if (data.isSinglePartOnly()) {
-                // clear any existing attachments because the single attachment can only exist
-                // by itself
-                destroyAttachments();
-                break;
-            }
-        }
-        // If any of the pending attachments contain a single-only attachment, we need to clear the
-        // existing attachments to make room for the incoming attachment.
-        for (final MessagePartData data : mPendingAttachments) {
-            if (data.isSinglePartOnly()) {
-                // clear any existing attachments because the single attachment can only exist
-                // by itself
-                destroyAttachments();
-                break;
-            }
-        }
-
-        boolean reachedLimit = false;
-        for (final MessagePartData data : attachments) {
-            // Don't break out of loop even if limit has been reached so we can destroy all
-            // of the over-limit attachments.
-            reachedLimit |= addOneAttachmentNoNotify(data);
-        }
-        if (reachedLimit) {
-            dispatchAttachmentLimitReached();
-        }
-        dispatchChanged(ATTACHMENTS_CHANGED);
-    }
-
-    public boolean containsAttachment(final Uri contentUri) {
-        for (final MessagePartData existingAttachment : mAttachments) {
-            if (existingAttachment.getContentUri().equals(contentUri)) {
-                return true;
-            }
-        }
-
-        for (final PendingAttachmentData pendingAttachment : mPendingAttachments) {
-            if (pendingAttachment.getContentUri().equals(contentUri)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Try to add one attachment to the attachment list, while guarding against duplicates and
-     * going over the limit.
-     * @return true if the attachment limit was reached, false otherwise
-     */
-    private boolean addOneAttachmentNoNotify(final MessagePartData attachment) {
-        Assert.isTrue(attachment.isAttachment());
-        // Check duplication.
-        for (final MessagePartData existingAttachment : mAttachments) {
-            if (existingAttachment.getContentUri().equals(attachment.getContentUri())) {
-                // Destroy existing attachment and replace with new attachment instead of destroying
-                // new one so that mSelectedImages in GalleryGridView could be maintained correctly.
-                mAttachments.remove(existingAttachment);
-                existingAttachment.destroyAsync();
-                addAttachment(attachment, null /*pendingAttachment*/);
-                return false;
-            }
-        }
-
-        final boolean reachedLimit = getAttachmentCount() >= getAttachmentLimit();
-        if (reachedLimit) {
-            // Never go over the limit.
-            attachment.destroyAsync();
-            return true;
-        } else {
-            addAttachment(attachment, null /*pendingAttachment*/);
-            return false;
-        }
-    }
-
-    private void addAttachment(final MessagePartData attachment,
-            final PendingAttachmentData pendingAttachment) {
-        if (attachment != null && attachment.isSinglePartOnly()) {
-            // clear any existing attachments because the attachment we're adding can only
-            // exist by itself.
-            destroyAttachments();
-        }
-        if (pendingAttachment != null && pendingAttachment.isSinglePartOnly()) {
-            // clear any existing attachments because the attachment we're adding can only
-            // exist by itself.
-            destroyAttachments();
-        }
-        // If the existing attachments contain a single-only attachment, we need to clear the
-        // existing attachments to make room for the incoming attachment.
-        for (final MessagePartData data : mAttachments) {
-            if (data.isSinglePartOnly()) {
-                // clear any existing attachments because the single attachment can only exist
-                // by itself
-                destroyAttachments();
-                break;
-            }
-        }
-        // If any of the pending attachments contain a single-only attachment, we need to clear the
-        // existing attachments to make room for the incoming attachment.
-        for (final MessagePartData data : mPendingAttachments) {
-            if (data.isSinglePartOnly()) {
-                // clear any existing attachments because the single attachment can only exist
-                // by itself
-                destroyAttachments();
-                break;
-            }
-        }
-        if (attachment != null) {
-            mAttachments.add(attachment);
-        } else if (pendingAttachment != null) {
-            mPendingAttachments.add(pendingAttachment);
-        }
-    }
-
-    public void addPendingAttachment(final PendingAttachmentData pendingAttachment,
-            final BindingBase<DraftMessageData> binding) {
-        final boolean reachedLimit = addOnePendingAttachmentNoNotify(pendingAttachment,
-                binding.getBindingId());
-        if (reachedLimit) {
-            dispatchAttachmentLimitReached();
-        }
-        dispatchChanged(ATTACHMENTS_CHANGED);
-    }
-
-    /**
-     * Try to add one pending attachment, while guarding against duplicates and
-     * going over the limit.
-     * @return true if the attachment limit was reached, false otherwise
-     */
-    private boolean addOnePendingAttachmentNoNotify(final PendingAttachmentData pendingAttachment,
-            final String bindingId) {
-        final boolean reachedLimit = getAttachmentCount() >= getAttachmentLimit();
-        if (reachedLimit || containsAttachment(pendingAttachment.getContentUri())) {
-            // Never go over the limit. Never add duplicated attachments.
-            pendingAttachment.destroyAsync();
-            return reachedLimit;
-        } else {
-            Assert.isTrue(!mPendingAttachments.contains(pendingAttachment));
-            Assert.equals(PendingAttachmentData.STATE_PENDING, pendingAttachment.getCurrentState());
-            addAttachment(null /*attachment*/, pendingAttachment);
-
-            pendingAttachment.loadAttachmentForDraft(this, bindingId);
-            return false;
-        }
-    }
-
-    public void setSelfId(final String selfId, final boolean notify) {
-        LogUtil.d(LogUtil.BUGLE_TAG, "DraftMessageData: set selfId=" + selfId
-                + " for conversationId=" + mConversationId);
-        mSelfId = selfId;
-        if (notify) {
-            dispatchChanged(SELF_CHANGED);
-        }
-    }
-
-    public boolean hasAttachments() {
-        return !mAttachments.isEmpty();
-    }
-
-    public boolean hasPendingAttachments() {
-        return !mPendingAttachments.isEmpty();
-    }
-
-    private int getAttachmentCount() {
-        return mAttachments.size() + mPendingAttachments.size();
-    }
-
-    private int getVideoAttachmentCount() {
-        int count = 0;
-        for (MessagePartData part : mAttachments) {
-            if (part.isVideo()) {
-                count++;
-            }
-        }
-        for (MessagePartData part : mPendingAttachments) {
-            if (part.isVideo()) {
-                count++;
-            }
-        }
-        return count;
-    }
-
-    private int getAttachmentLimit() {
-        return BugleGservices.get().getInt(
-                BugleGservicesKeys.MMS_ATTACHMENT_LIMIT,
-                BugleGservicesKeys.MMS_ATTACHMENT_LIMIT_DEFAULT);
-    }
-
-    public void removeAttachment(final MessagePartData attachment) {
-        for (final MessagePartData existingAttachment : mAttachments) {
-            if (existingAttachment.getContentUri().equals(attachment.getContentUri())) {
-                mAttachments.remove(existingAttachment);
-                existingAttachment.destroyAsync();
-                dispatchChanged(ATTACHMENTS_CHANGED);
-                break;
-            }
-        }
-    }
-
-    public void removeExistingAttachments(final Set<MessagePartData> attachmentsToRemove) {
-        boolean removed = false;
-        final Iterator<MessagePartData> iterator = mAttachments.iterator();
-        while (iterator.hasNext()) {
-            final MessagePartData existingAttachment = iterator.next();
-            if (attachmentsToRemove.contains(existingAttachment)) {
-                iterator.remove();
-                existingAttachment.destroyAsync();
-                removed = true;
-            }
-        }
-
-        if (removed) {
-            dispatchChanged(ATTACHMENTS_CHANGED);
-        }
-    }
-
-    public void removePendingAttachment(final PendingAttachmentData pendingAttachment) {
-        for (final PendingAttachmentData existingAttachment : mPendingAttachments) {
-            if (existingAttachment.getContentUri().equals(pendingAttachment.getContentUri())) {
-                mPendingAttachments.remove(pendingAttachment);
-                pendingAttachment.destroyAsync();
-                dispatchChanged(ATTACHMENTS_CHANGED);
-                break;
-            }
-        }
-    }
-
-    public void updatePendingAttachment(final MessagePartData updatedAttachment,
-            final PendingAttachmentData pendingAttachment) {
-        for (final PendingAttachmentData existingAttachment : mPendingAttachments) {
-            if (existingAttachment.getContentUri().equals(pendingAttachment.getContentUri())) {
-                mPendingAttachments.remove(pendingAttachment);
-                if (pendingAttachment.isSinglePartOnly()) {
-                    updatedAttachment.setSinglePartOnly(true);
-                }
-                mAttachments.add(updatedAttachment);
-                dispatchChanged(ATTACHMENTS_CHANGED);
-                return;
-            }
-        }
-
-        // If we are here, this means the pending attachment has been dropped before the task
-        // to load it was completed. In this case destroy the temporarily staged file since it
-        // is no longer needed.
-        updatedAttachment.destroyAsync();
-    }
-
-    /**
-     * Remove the attachments from the draft and notify any listeners.
-     * @param flags typically this will be ATTACHMENTS_CHANGED. When attachments are cleared in a
-     * widget, flags will also contain WIDGET_CHANGED.
-     */
-    public void clearAttachments(final int flags) {
-        destroyAttachments();
-        dispatchChanged(flags);
-    }
-
-    public List<MessagePartData> getReadOnlyAttachments() {
-        return mReadOnlyAttachments;
-    }
-
-    public List<PendingAttachmentData> getReadOnlyPendingAttachments() {
-        return mReadOnlyPendingAttachments;
-    }
-
-    public boolean loadFromStorage(final BindingBase<DraftMessageData> binding,
-            final MessageData optionalIncomingDraft, boolean clearLocalDraft) {
-        LogUtil.d(LogUtil.BUGLE_TAG, "DraftMessageData: "
-                + (optionalIncomingDraft == null ? "loading" : "setting")
-                + " for conversationId=" + mConversationId);
-        if (clearLocalDraft) {
-            clearLocalDraftCopy();
-        }
-        final boolean isDraftCachedCopy = mIsDraftCachedCopy;
-        mIsDraftCachedCopy = false;
-        // Before reading message from db ensure the caller is bound to us (and knows the id)
-        if (mMonitor == null && !isDraftCachedCopy && isBound(binding.getBindingId())) {
-            mMonitor = ReadDraftDataAction.readDraftData(mConversationId,
-                    optionalIncomingDraft, binding.getBindingId(), this);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Saves the current draft to db. This will save the draft and drop any pending attachments
-     * we have. The UI typically goes into the background when this is called, and instead of
-     * trying to persist the state of the pending attachments (the app may be killed, the activity
-     * may be destroyed), we simply drop the pending attachments for consistency.
-     */
-    public void saveToStorage(final BindingBase<DraftMessageData> binding) {
-        saveToStorageInternal(binding);
-        dropPendingAttachments();
-    }
-
-    private void saveToStorageInternal(final BindingBase<DraftMessageData> binding) {
-        // Create MessageData to store to db, but don't clear the in-memory copy so UI will
-        // continue to display it.
-        // If self id is null then we'll not attempt to change the conversation's self id.
-        final MessageData message = createMessageWithCurrentAttachments(false /* clearLocalCopy */);
-        // Before writing message to db ensure the caller is bound to us (and knows the id)
-        if (isBound(binding.getBindingId())){
-            WriteDraftMessageAction.writeDraftMessage(mConversationId, message);
-        }
-    }
-
-    /**
-     * Called when we are ready to send the message. This will assemble/return the MessageData for
-     * sending and clear the local draft data, both from memory and from DB. This will also bind
-     * the message data with a self Id through which the message will be sent.
-     *
-     * @param binding the binding object from our consumer. We need to make sure we are still bound
-     *        to that binding before saving to storage.
-     */
-    public MessageData prepareMessageForSending(final BindingBase<DraftMessageData> binding) {
-        // We can't send the message while there's still stuff pending.
-        Assert.isTrue(!hasPendingAttachments());
-        mSending = true;
-        // Assembles the message to send and empty working draft data.
-        // If self id is null then message is sent with conversation's self id.
-        final MessageData messageToSend =
-                createMessageWithCurrentAttachments(true /* clearLocalCopy */);
-        // Note sending message will empty the draft data in DB.
-        mSending = false;
-        return messageToSend;
-    }
-
-    public boolean isSending() {
-        return mSending;
-    }
-
-    @Override // ReadDraftMessageActionListener.onReadDraftMessageSucceeded
-    public void onReadDraftDataSucceeded(final ReadDraftDataAction action, final Object data,
-            final MessageData message, final ConversationListItemData conversation) {
-        final String bindingId = (String) data;
-
-        // Before passing draft message on to ui ensure the data is bound to the same bindingid
-        if (isBound(bindingId)) {
-            mSelfId = message.getSelfId();
-            mIsGroupConversation = conversation.getIsGroup();
-            mIncludeEmailAddress = conversation.getIncludeEmailAddress();
-            updateFromMessageData(message, bindingId);
-            LogUtil.d(LogUtil.BUGLE_TAG, "DraftMessageData: draft loaded. "
-                    + "conversationId=" + mConversationId + " selfId=" + mSelfId);
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG, "DraftMessageData: draft loaded but not bound. "
-                    + "conversationId=" + mConversationId);
-        }
-        mMonitor = null;
-    }
-
-    @Override // ReadDraftMessageActionListener.onReadDraftDataFailed
-    public void onReadDraftDataFailed(final ReadDraftDataAction action, final Object data) {
-        LogUtil.w(LogUtil.BUGLE_TAG, "DraftMessageData: draft not loaded. "
-                + "conversationId=" + mConversationId);
-        // The draft is now synced with actual MessageData and no longer a cached copy.
-        mIsDraftCachedCopy = false;
-        // Just clear the monitor - no update to draft data
-        mMonitor = null;
-    }
-
-    /**
-     * Check if Bugle is default sms app
-     * @return
-     */
-    public boolean getIsDefaultSmsApp() {
-        return PhoneUtils.getDefault().isDefaultSmsApp();
-    }
-
-    @Override //BindableData.unregisterListeners
-    protected void unregisterListeners() {
-        if (mMonitor != null) {
-            mMonitor.unregister();
-        }
-        mMonitor = null;
-        mListeners.clear();
-    }
-
-    private void destroyAttachments() {
-        for (final MessagePartData attachment : mAttachments) {
-            attachment.destroyAsync();
-        }
-        mAttachments.clear();
-        mPendingAttachments.clear();
-    }
-
-    private void dispatchChanged(final int changeFlags) {
-        // No change is expected to be made to the draft if it is in cached copy state.
-        if (mIsDraftCachedCopy) {
-            return;
-        }
-        // Any change in the draft will cancel any pending draft checking task, since the
-        // size/status of the draft may have changed.
-        if (mCheckDraftForSendTask != null) {
-            mCheckDraftForSendTask.cancel(true /* mayInterruptIfRunning */);
-            mCheckDraftForSendTask = null;
-        }
-        mListeners.onDraftChanged(this, changeFlags);
-    }
-
-    private void dispatchAttachmentLimitReached() {
-        mListeners.onDraftAttachmentLimitReached(this);
-    }
-
-    /**
-     * Drop any pending attachments that haven't finished. This is called after the UI goes to
-     * the background and we persist the draft data to the database.
-     */
-    private void dropPendingAttachments() {
-        mPendingAttachments.clear();
-    }
-
-    private boolean isDraftEmpty() {
-        return TextUtils.isEmpty(mMessageText) && mAttachments.isEmpty() &&
-                TextUtils.isEmpty(mMessageSubject);
-    }
-
-    public boolean isCheckingDraft() {
-        return mCheckDraftForSendTask != null && !mCheckDraftForSendTask.isCancelled();
-    }
-
-    public void checkDraftForAction(final boolean checkMessageSize, final int selfSubId,
-            final CheckDraftTaskCallback callback, final Binding<DraftMessageData> binding) {
-        new CheckDraftForSendTask(checkMessageSize, selfSubId, callback, binding)
-            .executeOnThreadPool((Void) null);
-    }
-
-    /**
-     * Allows us to have multiple data listeners for DraftMessageData
-     */
-    private class DraftMessageDataEventDispatcher
-        extends ArrayList<DraftMessageDataListener>
-        implements DraftMessageDataListener {
-
-        @Override
-        @RunsOnMainThread
-        public void onDraftChanged(DraftMessageData data, int changeFlags) {
-            Assert.isMainThread();
-            for (final DraftMessageDataListener listener : this) {
-                listener.onDraftChanged(data, changeFlags);
-            }
-        }
-
-        @Override
-        @RunsOnMainThread
-        public void onDraftAttachmentLimitReached(DraftMessageData data) {
-            Assert.isMainThread();
-            for (final DraftMessageDataListener listener : this) {
-                listener.onDraftAttachmentLimitReached(data);
-            }
-        }
-
-        @Override
-        @RunsOnMainThread
-        public void onDraftAttachmentLoadFailed() {
-            Assert.isMainThread();
-            for (final DraftMessageDataListener listener : this) {
-                listener.onDraftAttachmentLoadFailed();
-            }
-        }
-    }
-
-    public interface CheckDraftTaskCallback {
-        void onDraftChecked(DraftMessageData data, int result);
-    }
-
-    public class CheckDraftForSendTask extends SafeAsyncTask<Void, Void, Integer> {
-        public static final int RESULT_PASSED = 0;
-        public static final int RESULT_HAS_PENDING_ATTACHMENTS = 1;
-        public static final int RESULT_NO_SELF_PHONE_NUMBER_IN_GROUP_MMS = 2;
-        public static final int RESULT_MESSAGE_OVER_LIMIT = 3;
-        public static final int RESULT_VIDEO_ATTACHMENT_LIMIT_EXCEEDED = 4;
-        public static final int RESULT_SIM_NOT_READY = 5;
-        private final boolean mCheckMessageSize;
-        private final int mSelfSubId;
-        private final CheckDraftTaskCallback mCallback;
-        private final String mBindingId;
-        private final List<MessagePartData> mAttachmentsCopy;
-        private int mPreExecuteResult = RESULT_PASSED;
-
-        public CheckDraftForSendTask(final boolean checkMessageSize, final int selfSubId,
-                final CheckDraftTaskCallback callback, final Binding<DraftMessageData> binding) {
-            mCheckMessageSize = checkMessageSize;
-            mSelfSubId = selfSubId;
-            mCallback = callback;
-            mBindingId = binding.getBindingId();
-            // Obtain an immutable copy of the attachment list so we can operate on it in the
-            // background thread.
-            mAttachmentsCopy = new ArrayList<MessagePartData>(mAttachments);
-
-            mCheckDraftForSendTask = this;
-        }
-
-        @Override
-        protected void onPreExecute() {
-            // Perform checking work that can happen on the main thread.
-            if (hasPendingAttachments()) {
-                mPreExecuteResult = RESULT_HAS_PENDING_ATTACHMENTS;
-                return;
-            }
-            if (getIsGroupMmsConversation()) {
-                try {
-                    if (TextUtils.isEmpty(PhoneUtils.get(mSelfSubId).getSelfRawNumber(true))) {
-                        mPreExecuteResult = RESULT_NO_SELF_PHONE_NUMBER_IN_GROUP_MMS;
-                        return;
-                    }
-                } catch (IllegalStateException e) {
-                    // This happens when there is no active subscription, e.g. on Nova
-                    // when the phone switches carrier.
-                    mPreExecuteResult = RESULT_SIM_NOT_READY;
-                    return;
-                }
-            }
-            if (getVideoAttachmentCount() > MmsUtils.MAX_VIDEO_ATTACHMENT_COUNT) {
-                mPreExecuteResult = RESULT_VIDEO_ATTACHMENT_LIMIT_EXCEEDED;
-                return;
-            }
-        }
-
-        @Override
-        protected Integer doInBackgroundTimed(Void... params) {
-            if (mPreExecuteResult != RESULT_PASSED) {
-                return mPreExecuteResult;
-            }
-
-            if (mCheckMessageSize && getIsMessageOverLimit()) {
-                return RESULT_MESSAGE_OVER_LIMIT;
-            }
-            return RESULT_PASSED;
-        }
-
-        @Override
-        protected void onPostExecute(Integer result) {
-            mCheckDraftForSendTask = null;
-            // Only call back if we are bound to the original binding.
-            if (isBound(mBindingId) && !isCancelled()) {
-                mCallback.onDraftChecked(DraftMessageData.this, result);
-            } else {
-                if (!isBound(mBindingId)) {
-                    LogUtil.w(LogUtil.BUGLE_TAG, "Message can't be sent: draft not bound");
-                }
-                if (isCancelled()) {
-                    LogUtil.w(LogUtil.BUGLE_TAG, "Message can't be sent: draft is cancelled");
-                }
-            }
-        }
-
-        @Override
-        protected void onCancelled() {
-            mCheckDraftForSendTask = null;
-        }
-
-        /**
-         * 1. Check if the draft message contains too many attachments to send
-         * 2. Computes the minimum size that this message could be compressed/downsampled/encoded
-         * before sending and check if it meets the carrier max size for sending.
-         * @see MessagePartData#getMinimumSizeInBytesForSending()
-         */
-        @DoesNotRunOnMainThread
-        private boolean getIsMessageOverLimit() {
-            Assert.isNotMainThread();
-            if (mAttachmentsCopy.size() > getAttachmentLimit()) {
-                return true;
-            }
-
-            // Aggregate the size from all the attachments.
-            long totalSize = 0;
-            for (final MessagePartData attachment : mAttachmentsCopy) {
-                totalSize += attachment.getMinimumSizeInBytesForSending();
-            }
-            return totalSize > MmsConfig.get(mSelfSubId).getMaxMessageSize();
-        }
-    }
-
-    public void onPendingAttachmentLoadFailed(PendingAttachmentData data) {
-        mListeners.onDraftAttachmentLoadFailed();
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/GalleryGridItemData.java b/src/com/android/messaging/datamodel/data/GalleryGridItemData.java
deleted file mode 100644
index 941d38d..0000000
--- a/src/com/android/messaging/datamodel/data/GalleryGridItemData.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.provider.BaseColumns;
-import android.provider.MediaStore.MediaColumns;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.media.FileImageRequestDescriptor;
-import com.android.messaging.datamodel.media.ImageRequest;
-import com.android.messaging.datamodel.media.UriImageRequestDescriptor;
-import com.android.messaging.datamodel.media.VideoThumbnailRequestDescriptor;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.UriUtil;
-
-/**
- * Provides data for GalleryGridItemView
- */
-public class GalleryGridItemData {
-    public static final String[] MEDIA_PROJECTION = new String[] {
-        MediaColumns._ID,
-        MediaColumns.DATA,
-        MediaColumns.WIDTH,
-        MediaColumns.HEIGHT,
-        MediaColumns.MIME_TYPE,
-        MediaColumns.DATE_MODIFIED,
-        MediaColumns.DISPLAY_NAME};
-
-    public static final String[] SPECIAL_ITEM_COLUMNS = new String[] {
-        BaseColumns._ID
-    };
-
-    private static final int INDEX_ID = 0;
-
-    // For local media gallery.
-    private static final int INDEX_DATA_PATH = 1;
-    private static final int INDEX_WIDTH = 2;
-    private static final int INDEX_HEIGHT = 3;
-    private static final int INDEX_MIME_TYPE = 4;
-    private static final int INDEX_DATE_MODIFIED = 5;
-    private static final int INDEX_DISPLAY_NAME = 6;
-
-    /** A special item's id for picking a media from document picker */
-    public static final String ID_DOCUMENT_PICKER_ITEM = "-1";
-
-    private UriImageRequestDescriptor mImageData;
-    private String mContentType;
-    private boolean mIsDocumentPickerItem;
-    private long mDateSeconds;
-    private String mFileName;
-    private Uri mAudioUri;
-
-    public GalleryGridItemData() {
-    }
-
-    public void bind(final Cursor cursor, final int desiredWidth, final int desiredHeight) {
-        mIsDocumentPickerItem = TextUtils.equals(cursor.getString(INDEX_ID),
-                ID_DOCUMENT_PICKER_ITEM);
-        if (mIsDocumentPickerItem) {
-            mImageData = null;
-            mContentType = null;
-        } else {
-            mContentType = cursor.getString(INDEX_MIME_TYPE);
-            final String filePath = cursor.getString(INDEX_DATA_PATH);
-            final String dateModified = cursor.getString(INDEX_DATE_MODIFIED);
-            mDateSeconds = !TextUtils.isEmpty(dateModified) ? Long.parseLong(dateModified) : -1;
-            if (ContentType.isAudioType(mContentType)) {
-                mImageData = null;
-                mAudioUri = UriUtil.getUriForResourceFile(filePath);
-                mFileName = cursor.getString(INDEX_DISPLAY_NAME);
-            } else { // For image and video types
-                int sourceWidth = cursor.getInt(INDEX_WIDTH);
-                int sourceHeight = cursor.getInt(INDEX_HEIGHT);
-
-                // Guard against bad data
-                if (sourceWidth <= 0) {
-                    sourceWidth = ImageRequest.UNSPECIFIED_SIZE;
-                }
-                if (sourceHeight <= 0) {
-                    sourceHeight = ImageRequest.UNSPECIFIED_SIZE;
-                }
-
-                if (ContentType.isVideoType(mContentType)) {
-                    mImageData = new VideoThumbnailRequestDescriptor(
-                            cursor.getLong(INDEX_ID),
-                            desiredWidth,
-                            desiredHeight,
-                            sourceWidth,
-                            sourceHeight);
-                } else {
-                    mImageData = new FileImageRequestDescriptor(
-                            filePath,
-                            desiredWidth,
-                            desiredHeight,
-                            sourceWidth,
-                            sourceHeight,
-                            true /* canUseThumbnail */,
-                            true /* allowCompression */,
-                            true /* isStatic */);
-                }
-            }
-        }
-    }
-
-    public boolean isDocumentPickerItem() {
-        return mIsDocumentPickerItem;
-    }
-
-    public Uri getImageUri() {
-        return ContentType.isAudioType(mContentType) ? mAudioUri : mImageData.uri;
-    }
-
-    public UriImageRequestDescriptor getImageRequestDescriptor() {
-        return mImageData;
-    }
-
-    public MessagePartData constructMessagePartData(final Rect startRect) {
-        Assert.isTrue(!mIsDocumentPickerItem);
-        return ContentType.isAudioType(mContentType)
-                ? new MediaPickerMessagePartData(startRect, mContentType, mAudioUri, 0, 0)
-                : new MediaPickerMessagePartData(startRect, mContentType, mImageData.uri,
-                        mImageData.sourceWidth, mImageData.sourceHeight);
-    }
-
-    /**
-     * @return The date in seconds. This can be negative if we could not retreive date info
-     */
-    public long getDateSeconds() {
-        return mDateSeconds;
-    }
-
-    public String getContentType() {
-        return mContentType;
-    }
-
-    public String getFileName() {
-        return mFileName;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/LaunchConversationData.java b/src/com/android/messaging/datamodel/data/LaunchConversationData.java
deleted file mode 100644
index 7eea580..0000000
--- a/src/com/android/messaging/datamodel/data/LaunchConversationData.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import com.android.messaging.datamodel.action.ActionMonitor;
-import com.android.messaging.datamodel.action.GetOrCreateConversationAction;
-import com.android.messaging.datamodel.action.GetOrCreateConversationAction.GetOrCreateConversationActionListener;
-import com.android.messaging.datamodel.action.GetOrCreateConversationAction.GetOrCreateConversationActionMonitor;
-import com.android.messaging.datamodel.binding.BindableData;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.RunsOnMainThread;
-import com.android.messaging.util.LogUtil;
-
-public class LaunchConversationData extends BindableData implements
-        GetOrCreateConversationActionListener {
-    public interface LaunchConversationDataListener {
-        void onGetOrCreateNewConversation(String conversationId);
-        void onGetOrCreateNewConversationFailed();
-    }
-
-    private LaunchConversationDataListener mListener;
-    private GetOrCreateConversationActionMonitor mMonitor;
-
-    public LaunchConversationData(final LaunchConversationDataListener listener) {
-        mListener = listener;
-    }
-
-    @Override
-    protected void unregisterListeners() {
-        mListener = null;
-        if (mMonitor != null) {
-            mMonitor.unregister();
-        }
-        mMonitor = null;
-    }
-
-    public void getOrCreateConversation(final BindingBase<LaunchConversationData> binding,
-            final String[] recipients) {
-        final String bindingId = binding.getBindingId();
-
-        // Start a new conversation from the list of contacts.
-        if (isBound(bindingId) && mMonitor == null) {
-            mMonitor = GetOrCreateConversationAction.getOrCreateConversation(recipients,
-                    bindingId, this);
-        }
-    }
-
-    @Override
-    @RunsOnMainThread
-    public void onGetOrCreateConversationSucceeded(final ActionMonitor monitor,
-            final Object data, final String conversationId) {
-        Assert.isTrue(monitor == mMonitor);
-        Assert.isTrue(conversationId != null);
-
-        final String bindingId = (String) data;
-        if (isBound(bindingId) && mListener != null) {
-            mListener.onGetOrCreateNewConversation(conversationId);
-        }
-
-        mMonitor = null;
-    }
-
-    @Override
-    @RunsOnMainThread
-    public void onGetOrCreateConversationFailed(final ActionMonitor monitor,
-            final Object data) {
-        Assert.isTrue(monitor == mMonitor);
-        final String bindingId = (String) data;
-        if (isBound(bindingId) && mListener != null) {
-            mListener.onGetOrCreateNewConversationFailed();
-        }
-        LogUtil.e(LogUtil.BUGLE_TAG, "onGetOrCreateConversationFailed");
-        mMonitor = null;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/MediaPickerData.java b/src/com/android/messaging/datamodel/data/MediaPickerData.java
deleted file mode 100644
index 5a2ef33..0000000
--- a/src/com/android/messaging/datamodel/data/MediaPickerData.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.app.LoaderManager;
-import android.content.Context;
-import android.content.Loader;
-import android.database.Cursor;
-import android.os.Bundle;
-import androidx.annotation.Nullable;
-
-import com.android.messaging.datamodel.BoundCursorLoader;
-import com.android.messaging.datamodel.GalleryBoundCursorLoader;
-import com.android.messaging.datamodel.binding.BindableData;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.BuglePrefsKeys;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Services data needs for MediaPicker.
- */
-public class MediaPickerData extends BindableData {
-    public interface MediaPickerDataListener {
-        void onMediaPickerDataUpdated(MediaPickerData mediaPickerData, Object data, int loaderId);
-    }
-
-    private static final String BINDING_ID = "bindingId";
-    private final Context mContext;
-    private LoaderManager mLoaderManager;
-    private final GalleryLoaderCallbacks mGalleryLoaderCallbacks;
-    private MediaPickerDataListener mListener;
-
-    public MediaPickerData(final Context context) {
-        mContext = context;
-        mGalleryLoaderCallbacks = new GalleryLoaderCallbacks();
-    }
-
-    public static final int GALLERY_MEDIA_LOADER = 1;
-
-    /**
-     * A trampoline class so that we can inherit from LoaderManager.LoaderCallbacks multiple times.
-     */
-    private class GalleryLoaderCallbacks implements LoaderManager.LoaderCallbacks<Cursor> {
-        @Override
-        public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
-            final String bindingId = args.getString(BINDING_ID);
-            // Check if data still bound to the requesting ui element
-            if (isBound(bindingId)) {
-                switch (id) {
-                    case GALLERY_MEDIA_LOADER:
-                        return new GalleryBoundCursorLoader(bindingId, mContext);
-
-                    default:
-                        Assert.fail("Unknown loader id for gallery picker!");
-                        break;
-                }
-            } else {
-                LogUtil.w(LogUtil.BUGLE_TAG, "Loader created after unbinding the media picker");
-            }
-            return null;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        public void onLoadFinished(final Loader<Cursor> loader, final Cursor data) {
-            final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader;
-            if (isBound(cursorLoader.getBindingId())) {
-                switch (loader.getId()) {
-                    case GALLERY_MEDIA_LOADER:
-                        mListener.onMediaPickerDataUpdated(MediaPickerData.this, data,
-                                GALLERY_MEDIA_LOADER);
-                        break;
-
-                    default:
-                        Assert.fail("Unknown loader id for gallery picker!");
-                        break;
-                }
-            } else {
-                LogUtil.w(LogUtil.BUGLE_TAG, "Loader finished after unbinding the media picker");
-            }
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        public void onLoaderReset(final Loader<Cursor> loader) {
-            final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader;
-            if (isBound(cursorLoader.getBindingId())) {
-                switch (loader.getId()) {
-                    case GALLERY_MEDIA_LOADER:
-                        mListener.onMediaPickerDataUpdated(MediaPickerData.this, null,
-                                GALLERY_MEDIA_LOADER);
-                        break;
-
-                    default:
-                        Assert.fail("Unknown loader id for media picker!");
-                        break;
-                }
-            } else {
-                LogUtil.w(LogUtil.BUGLE_TAG, "Loader reset after unbinding the media picker");
-            }
-        }
-    }
-
-
-
-    public void startLoader(final int loaderId, final BindingBase<MediaPickerData> binding,
-            @Nullable Bundle args, final MediaPickerDataListener listener) {
-        if (args == null) {
-            args = new Bundle();
-        }
-        args.putString(BINDING_ID, binding.getBindingId());
-        if (loaderId == GALLERY_MEDIA_LOADER) {
-            mLoaderManager.initLoader(loaderId, args, mGalleryLoaderCallbacks).forceLoad();
-        } else {
-            Assert.fail("Unsupported loader id for media picker!");
-        }
-        mListener = listener;
-    }
-
-    public void destroyLoader(final int loaderId) {
-        mLoaderManager.destroyLoader(loaderId);
-    }
-
-    public void init(final LoaderManager loaderManager) {
-        mLoaderManager = loaderManager;
-    }
-
-    @Override
-    protected void unregisterListeners() {
-        // This could be null if we bind but the caller doesn't init the BindableData
-        if (mLoaderManager != null) {
-            mLoaderManager.destroyLoader(GALLERY_MEDIA_LOADER);
-            mLoaderManager = null;
-        }
-    }
-
-    /**
-     * Gets the last selected chooser index, or -1 if no selection has been saved.
-     */
-    public int getSelectedChooserIndex() {
-        return BuglePrefs.getApplicationPrefs().getInt(
-                BuglePrefsKeys.SELECTED_MEDIA_PICKER_CHOOSER_INDEX,
-                BuglePrefsKeys.SELECTED_MEDIA_PICKER_CHOOSER_INDEX_DEFAULT);
-    }
-
-    /**
-     * Saves the selected media chooser index.
-     * @param selectedIndex the selected media chooser index.
-     */
-    public void saveSelectedChooserIndex(final int selectedIndex) {
-        BuglePrefs.getApplicationPrefs().putInt(BuglePrefsKeys.SELECTED_MEDIA_PICKER_CHOOSER_INDEX,
-                selectedIndex);
-    }
-
-}
diff --git a/src/com/android/messaging/datamodel/data/MediaPickerMessagePartData.java b/src/com/android/messaging/datamodel/data/MediaPickerMessagePartData.java
deleted file mode 100644
index 7de9166..0000000
--- a/src/com/android/messaging/datamodel/data/MediaPickerMessagePartData.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.graphics.Rect;
-import android.net.Uri;
-
-public class MediaPickerMessagePartData extends MessagePartData {
-    private final Rect mStartRect;
-
-    public MediaPickerMessagePartData(final Rect startRect, final String contentType,
-            final Uri contentUri, final int width, final int height) {
-        this(startRect, null /* messageText */, contentType, contentUri, width, height);
-    }
-
-   public MediaPickerMessagePartData(final Rect startRect, final String messageText,
-            final String contentType, final Uri contentUri, final int width, final int height) {
-        this(startRect, messageText, contentType, contentUri, width, height,
-                false /*onlySingleAttachment*/);
-    }
-
-    public MediaPickerMessagePartData(final Rect startRect, final String contentType,
-            final Uri contentUri, final int width, final int height,
-            final boolean onlySingleAttachment) {
-        this(startRect, null /* messageText */, contentType, contentUri, width, height,
-                onlySingleAttachment);
-    }
-
-    public MediaPickerMessagePartData(final Rect startRect, final String messageText,
-            final String contentType, final Uri contentUri, final int width, final int height,
-            final boolean onlySingleAttachment) {
-        super(messageText, contentType, contentUri, width, height, onlySingleAttachment);
-        mStartRect = startRect;
-    }
-
-    /**
-     * @return The starting rect to animate the attachment preview from in order to perform a smooth
-     * transition
-     */
-    public Rect getStartRect() {
-        return mStartRect;
-    }
-
-    /**
-     * Modify the start rect of the attachment.
-     */
-    public void setStartRect(final Rect startRect) {
-        mStartRect.set(startRect);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/MessageData.java b/src/com/android/messaging/datamodel/data/MessageData.java
deleted file mode 100644
index b2cab48..0000000
--- a/src/com/android/messaging/datamodel/data/MessageData.java
+++ /dev/null
@@ -1,928 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteStatement;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.Dates;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.OsUtil;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class MessageData implements Parcelable {
-    private static final String[] sProjection = {
-        MessageColumns._ID,
-        MessageColumns.CONVERSATION_ID,
-        MessageColumns.SENDER_PARTICIPANT_ID,
-        MessageColumns.SELF_PARTICIPANT_ID,
-        MessageColumns.SENT_TIMESTAMP,
-        MessageColumns.RECEIVED_TIMESTAMP,
-        MessageColumns.SEEN,
-        MessageColumns.READ,
-        MessageColumns.PROTOCOL,
-        MessageColumns.STATUS,
-        MessageColumns.SMS_MESSAGE_URI,
-        MessageColumns.SMS_PRIORITY,
-        MessageColumns.SMS_MESSAGE_SIZE,
-        MessageColumns.MMS_SUBJECT,
-        MessageColumns.MMS_TRANSACTION_ID,
-        MessageColumns.MMS_CONTENT_LOCATION,
-        MessageColumns.MMS_EXPIRY,
-        MessageColumns.RAW_TELEPHONY_STATUS,
-        MessageColumns.RETRY_START_TIMESTAMP,
-    };
-
-    private static final int INDEX_ID = 0;
-    private static final int INDEX_CONVERSATION_ID = 1;
-    private static final int INDEX_PARTICIPANT_ID = 2;
-    private static final int INDEX_SELF_ID = 3;
-    private static final int INDEX_SENT_TIMESTAMP = 4;
-    private static final int INDEX_RECEIVED_TIMESTAMP = 5;
-    private static final int INDEX_SEEN = 6;
-    private static final int INDEX_READ = 7;
-    private static final int INDEX_PROTOCOL = 8;
-    private static final int INDEX_BUGLE_STATUS = 9;
-    private static final int INDEX_SMS_MESSAGE_URI = 10;
-    private static final int INDEX_SMS_PRIORITY = 11;
-    private static final int INDEX_SMS_MESSAGE_SIZE = 12;
-    private static final int INDEX_MMS_SUBJECT = 13;
-    private static final int INDEX_MMS_TRANSACTION_ID = 14;
-    private static final int INDEX_MMS_CONTENT_LOCATION = 15;
-    private static final int INDEX_MMS_EXPIRY = 16;
-    private static final int INDEX_RAW_TELEPHONY_STATUS = 17;
-    private static final int INDEX_RETRY_START_TIMESTAMP = 18;
-
-    // SQL statement to insert a "complete" message row (columns based on the projection above).
-    private static final String INSERT_MESSAGE_SQL =
-            "INSERT INTO " + DatabaseHelper.MESSAGES_TABLE + " ( "
-                    + TextUtils.join(", ", Arrays.copyOfRange(sProjection, 1,
-                            INDEX_RETRY_START_TIMESTAMP + 1))
-                    + ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
-
-    private String mMessageId;
-    private String mConversationId;
-    private String mParticipantId;
-    private String mSelfId;
-    private long mSentTimestamp;
-    private long mReceivedTimestamp;
-    private boolean mSeen;
-    private boolean mRead;
-    private int mProtocol;
-    private Uri mSmsMessageUri;
-    private int mSmsPriority;
-    private long mSmsMessageSize;
-    private String mMmsSubject;
-    private String mMmsTransactionId;
-    private String mMmsContentLocation;
-    private long mMmsExpiry;
-    private int mRawStatus;
-    private int mStatus;
-    private final ArrayList<MessagePartData> mParts;
-    private long mRetryStartTimestamp;
-
-    // PROTOCOL Values
-    public static final int PROTOCOL_UNKNOWN = -1;              // Unknown type
-    public static final int PROTOCOL_SMS = 0;                   // SMS message
-    public static final int PROTOCOL_MMS = 1;                   // MMS message
-    public static final int PROTOCOL_MMS_PUSH_NOTIFICATION = 2; // MMS WAP push notification
-
-    // Bugle STATUS Values
-    public static final int BUGLE_STATUS_UNKNOWN = 0;
-
-    // Outgoing
-    public static final int BUGLE_STATUS_OUTGOING_COMPLETE                = 1;
-    public static final int BUGLE_STATUS_OUTGOING_DELIVERED               = 2;
-    // Transitions to either YET_TO_SEND or SEND_AFTER_PROCESSING depending attachments.
-    public static final int BUGLE_STATUS_OUTGOING_DRAFT                   = 3;
-    public static final int BUGLE_STATUS_OUTGOING_YET_TO_SEND             = 4;
-    public static final int BUGLE_STATUS_OUTGOING_SENDING                 = 5;
-    public static final int BUGLE_STATUS_OUTGOING_RESENDING               = 6;
-    public static final int BUGLE_STATUS_OUTGOING_AWAITING_RETRY          = 7;
-    public static final int BUGLE_STATUS_OUTGOING_FAILED                  = 8;
-    public static final int BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER = 9;
-
-    // Incoming
-    public static final int BUGLE_STATUS_INCOMING_COMPLETE                   = 100;
-    public static final int BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD     = 101;
-    public static final int BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD   = 102;
-    public static final int BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING         = 103;
-    public static final int BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD     = 104;
-    public static final int BUGLE_STATUS_INCOMING_AUTO_DOWNLOADING           = 105;
-    public static final int BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED            = 106;
-    public static final int BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE   = 107;
-
-    public static final String getStatusDescription(int status) {
-        switch (status) {
-            case BUGLE_STATUS_UNKNOWN:
-                return "UNKNOWN";
-            case BUGLE_STATUS_OUTGOING_COMPLETE:
-                return "OUTGOING_COMPLETE";
-            case BUGLE_STATUS_OUTGOING_DELIVERED:
-                return "OUTGOING_DELIVERED";
-            case BUGLE_STATUS_OUTGOING_DRAFT:
-                return "OUTGOING_DRAFT";
-            case BUGLE_STATUS_OUTGOING_YET_TO_SEND:
-                return "OUTGOING_YET_TO_SEND";
-            case BUGLE_STATUS_OUTGOING_SENDING:
-                return "OUTGOING_SENDING";
-            case BUGLE_STATUS_OUTGOING_RESENDING:
-                return "OUTGOING_RESENDING";
-            case BUGLE_STATUS_OUTGOING_AWAITING_RETRY:
-                return "OUTGOING_AWAITING_RETRY";
-            case BUGLE_STATUS_OUTGOING_FAILED:
-                return "OUTGOING_FAILED";
-            case BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER:
-                return "OUTGOING_FAILED_EMERGENCY_NUMBER";
-            case BUGLE_STATUS_INCOMING_COMPLETE:
-                return "INCOMING_COMPLETE";
-            case BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD:
-                return "INCOMING_YET_TO_MANUAL_DOWNLOAD";
-            case BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD:
-                return "INCOMING_RETRYING_MANUAL_DOWNLOAD";
-            case BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING:
-                return "INCOMING_MANUAL_DOWNLOADING";
-            case BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD:
-                return "INCOMING_RETRYING_AUTO_DOWNLOAD";
-            case BUGLE_STATUS_INCOMING_AUTO_DOWNLOADING:
-                return "INCOMING_AUTO_DOWNLOADING";
-            case BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED:
-                return "INCOMING_DOWNLOAD_FAILED";
-            case BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE:
-                return "INCOMING_EXPIRED_OR_NOT_AVAILABLE";
-            default:
-                return String.valueOf(status) + " (check MessageData)";
-        }
-    }
-
-    // All incoming messages expect to have status >= BUGLE_STATUS_FIRST_INCOMING
-    public static final int BUGLE_STATUS_FIRST_INCOMING = BUGLE_STATUS_INCOMING_COMPLETE;
-
-    // Detailed MMS failures. Most of the values are defined in PduHeaders. However, a few are
-    // defined here instead. These are never returned in the MMS HTTP response, but are used
-    // internally. The values here must not conflict with any of the existing PduHeader values.
-    public static final int RAW_TELEPHONY_STATUS_UNDEFINED = MmsUtils.PDU_HEADER_VALUE_UNDEFINED;
-    public static final int RAW_TELEPHONY_STATUS_MESSAGE_TOO_BIG = 10000;
-
-    // Unknown result code for MMS sending/downloading. This is used as the default value
-    // for result code returned from platform MMS API.
-    public static final int UNKNOWN_RESULT_CODE = 0;
-
-    /**
-     * Create an "empty" message
-     */
-    public MessageData() {
-        mParts = new ArrayList<MessagePartData>();
-    }
-
-    public static String[] getProjection() {
-        return sProjection;
-    }
-
-    /**
-     * Create a draft message for a particular conversation based on supplied content
-     */
-    public static MessageData createDraftMessage(final String conversationId,
-            final String selfId, final MessageData content) {
-        final MessageData message = new MessageData();
-        message.mStatus = BUGLE_STATUS_OUTGOING_DRAFT;
-        message.mProtocol = PROTOCOL_UNKNOWN;
-        message.mConversationId = conversationId;
-        message.mParticipantId = selfId;
-        message.mReceivedTimestamp = System.currentTimeMillis();
-        if (content == null) {
-            message.mParts.add(MessagePartData.createTextMessagePart(""));
-        } else {
-            if (!TextUtils.isEmpty(content.mParticipantId)) {
-                message.mParticipantId = content.mParticipantId;
-            }
-            if (!TextUtils.isEmpty(content.mMmsSubject)) {
-                message.mMmsSubject = content.mMmsSubject;
-            }
-            for (final MessagePartData part : content.getParts()) {
-                message.mParts.add(part);
-            }
-        }
-        message.mSelfId = selfId;
-        return message;
-    }
-
-    /**
-     * Create a draft sms message for a particular conversation
-     */
-    public static MessageData createDraftSmsMessage(final String conversationId,
-            final String selfId, final String messageText) {
-        final MessageData message = new MessageData();
-        message.mStatus = BUGLE_STATUS_OUTGOING_DRAFT;
-        message.mProtocol = PROTOCOL_SMS;
-        message.mConversationId = conversationId;
-        message.mParticipantId = selfId;
-        message.mSelfId = selfId;
-        message.mParts.add(MessagePartData.createTextMessagePart(messageText));
-        message.mReceivedTimestamp = System.currentTimeMillis();
-        return message;
-    }
-
-    /**
-     * Create a draft mms message for a particular conversation
-     */
-    public static MessageData createDraftMmsMessage(final String conversationId,
-            final String selfId, final String messageText, final String subjectText) {
-        final MessageData message = new MessageData();
-        message.mStatus = BUGLE_STATUS_OUTGOING_DRAFT;
-        message.mProtocol = PROTOCOL_MMS;
-        message.mConversationId = conversationId;
-        message.mParticipantId = selfId;
-        message.mSelfId = selfId;
-        message.mMmsSubject = subjectText;
-        message.mReceivedTimestamp = System.currentTimeMillis();
-        if (!TextUtils.isEmpty(messageText)) {
-            message.mParts.add(MessagePartData.createTextMessagePart(messageText));
-        }
-        return message;
-    }
-
-    /**
-     * Create a message received from a particular number in a particular conversation
-     */
-    public static MessageData createReceivedSmsMessage(final Uri uri, final String conversationId,
-            final String participantId, final String selfId, final String messageText,
-            final String subject, final long sent, final long recieved,
-            final boolean seen, final boolean read) {
-        final MessageData message = new MessageData();
-        message.mSmsMessageUri = uri;
-        message.mConversationId = conversationId;
-        message.mParticipantId = participantId;
-        message.mSelfId = selfId;
-        message.mProtocol = PROTOCOL_SMS;
-        message.mStatus = BUGLE_STATUS_INCOMING_COMPLETE;
-        message.mMmsSubject = subject;
-        message.mReceivedTimestamp = recieved;
-        message.mSentTimestamp = sent;
-        message.mParts.add(MessagePartData.createTextMessagePart(messageText));
-        message.mSeen = seen;
-        message.mRead = read;
-        return message;
-    }
-
-    /**
-     * Create a message not yet associated with a particular conversation
-     */
-    public static MessageData createSharedMessage(final String messageText,
-            final String subjectText) {
-        final MessageData message = new MessageData();
-        message.mStatus = BUGLE_STATUS_OUTGOING_DRAFT;
-        message.mMmsSubject = subjectText;
-        if (!TextUtils.isEmpty(messageText)) {
-            message.mParts.add(MessagePartData.createTextMessagePart(messageText));
-        }
-        return message;
-    }
-
-    /**
-     * Create a message from Sms table fields
-     */
-    public static MessageData createSmsMessage(final String messageUri, final String participantId,
-            final String selfId, final String conversationId, final int bugleStatus,
-            final boolean seen, final boolean read, final long sent,
-            final long recieved, final String messageText) {
-        final MessageData message = new MessageData();
-        message.mParticipantId = participantId;
-        message.mSelfId = selfId;
-        message.mConversationId = conversationId;
-        message.mSentTimestamp = sent;
-        message.mReceivedTimestamp = recieved;
-        message.mSeen = seen;
-        message.mRead = read;
-        message.mProtocol = PROTOCOL_SMS;
-        message.mStatus = bugleStatus;
-        message.mSmsMessageUri = Uri.parse(messageUri);
-        message.mParts.add(MessagePartData.createTextMessagePart(messageText));
-        return message;
-    }
-
-    /**
-     * Create a message from Mms table fields
-     */
-    public static MessageData createMmsMessage(final String messageUri, final String participantId,
-            final String selfId, final String conversationId, final boolean isNotification,
-            final int bugleStatus, final String contentLocation, final String transactionId,
-            final int smsPriority, final String subject, final boolean seen, final boolean read,
-            final long size, final int rawStatus, final long expiry, final long sent,
-            final long received) {
-        final MessageData message = new MessageData();
-        message.mParticipantId = participantId;
-        message.mSelfId = selfId;
-        message.mConversationId = conversationId;
-        message.mSentTimestamp = sent;
-        message.mReceivedTimestamp = received;
-        message.mMmsContentLocation = contentLocation;
-        message.mMmsTransactionId = transactionId;
-        message.mSeen = seen;
-        message.mRead = read;
-        message.mStatus = bugleStatus;
-        message.mProtocol = (isNotification ? PROTOCOL_MMS_PUSH_NOTIFICATION : PROTOCOL_MMS);
-        message.mSmsMessageUri = Uri.parse(messageUri);
-        message.mSmsPriority = smsPriority;
-        message.mSmsMessageSize = size;
-        message.mMmsSubject = subject;
-        message.mMmsExpiry = expiry;
-        message.mRawStatus = rawStatus;
-        if (bugleStatus == BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD ||
-                bugleStatus == BUGLE_STATUS_OUTGOING_RESENDING) {
-            // Set the retry start timestamp if this message is already in process of retrying
-            // Either as autodownload is starting or sending already in progress (MMS update)
-            message.mRetryStartTimestamp = received;
-        }
-        return message;
-    }
-
-    public void addPart(final MessagePartData part) {
-        if (part instanceof PendingAttachmentData) {
-            // Pending attachments may only be added to shared message data that's not associated
-            // with any particular conversation, in order to store shared images.
-            Assert.isTrue(mConversationId == null);
-        }
-        mParts.add(part);
-    }
-
-    public Iterable<MessagePartData> getParts() {
-        return mParts;
-    }
-
-    public void bind(final Cursor cursor) {
-        mMessageId = cursor.getString(INDEX_ID);
-        mConversationId = cursor.getString(INDEX_CONVERSATION_ID);
-        mParticipantId = cursor.getString(INDEX_PARTICIPANT_ID);
-        mSelfId = cursor.getString(INDEX_SELF_ID);
-        mSentTimestamp = cursor.getLong(INDEX_SENT_TIMESTAMP);
-        mReceivedTimestamp = cursor.getLong(INDEX_RECEIVED_TIMESTAMP);
-        mSeen = (cursor.getInt(INDEX_SEEN) != 0);
-        mRead = (cursor.getInt(INDEX_READ) != 0);
-        mProtocol = cursor.getInt(INDEX_PROTOCOL);
-        mStatus = cursor.getInt(INDEX_BUGLE_STATUS);
-        final String smsMessageUri = cursor.getString(INDEX_SMS_MESSAGE_URI);
-        mSmsMessageUri = (smsMessageUri == null) ? null : Uri.parse(smsMessageUri);
-        mSmsPriority = cursor.getInt(INDEX_SMS_PRIORITY);
-        mSmsMessageSize = cursor.getLong(INDEX_SMS_MESSAGE_SIZE);
-        mMmsExpiry = cursor.getLong(INDEX_MMS_EXPIRY);
-        mRawStatus = cursor.getInt(INDEX_RAW_TELEPHONY_STATUS);
-        mMmsSubject = cursor.getString(INDEX_MMS_SUBJECT);
-        mMmsTransactionId = cursor.getString(INDEX_MMS_TRANSACTION_ID);
-        mMmsContentLocation = cursor.getString(INDEX_MMS_CONTENT_LOCATION);
-        mRetryStartTimestamp = cursor.getLong(INDEX_RETRY_START_TIMESTAMP);
-    }
-
-    /**
-     * Bind to the draft message data for a conversation. The conversation's self id is used as
-     * the draft's self id.
-     */
-    public void bindDraft(final Cursor cursor, final String conversationSelfId) {
-        bind(cursor);
-        mSelfId = conversationSelfId;
-    }
-
-    protected static String getParticipantId(final Cursor cursor) {
-        return cursor.getString(INDEX_PARTICIPANT_ID);
-    }
-
-    public void populate(final ContentValues values) {
-        values.put(MessageColumns.CONVERSATION_ID, mConversationId);
-        values.put(MessageColumns.SENDER_PARTICIPANT_ID, mParticipantId);
-        values.put(MessageColumns.SELF_PARTICIPANT_ID, mSelfId);
-        values.put(MessageColumns.SENT_TIMESTAMP, mSentTimestamp);
-        values.put(MessageColumns.RECEIVED_TIMESTAMP, mReceivedTimestamp);
-        values.put(MessageColumns.SEEN, mSeen ? 1 : 0);
-        values.put(MessageColumns.READ, mRead ? 1 : 0);
-        values.put(MessageColumns.PROTOCOL, mProtocol);
-        values.put(MessageColumns.STATUS, mStatus);
-        final String smsMessageUri = ((mSmsMessageUri == null) ? null : mSmsMessageUri.toString());
-        values.put(MessageColumns.SMS_MESSAGE_URI, smsMessageUri);
-        values.put(MessageColumns.SMS_PRIORITY, mSmsPriority);
-        values.put(MessageColumns.SMS_MESSAGE_SIZE, mSmsMessageSize);
-        values.put(MessageColumns.MMS_EXPIRY, mMmsExpiry);
-        values.put(MessageColumns.MMS_SUBJECT, mMmsSubject);
-        values.put(MessageColumns.MMS_TRANSACTION_ID, mMmsTransactionId);
-        values.put(MessageColumns.MMS_CONTENT_LOCATION, mMmsContentLocation);
-        values.put(MessageColumns.RAW_TELEPHONY_STATUS, mRawStatus);
-        values.put(MessageColumns.RETRY_START_TIMESTAMP, mRetryStartTimestamp);
-    }
-
-    /**
-     * Note this is not thread safe so callers need to make sure they own the wrapper + statements
-     * while they call this and use the returned value.
-     */
-    public SQLiteStatement getInsertStatement(final DatabaseWrapper db) {
-        final SQLiteStatement insert = db.getStatementInTransaction(
-                DatabaseWrapper.INDEX_INSERT_MESSAGE, INSERT_MESSAGE_SQL);
-        insert.clearBindings();
-        insert.bindString(INDEX_CONVERSATION_ID, mConversationId);
-        insert.bindString(INDEX_PARTICIPANT_ID, mParticipantId);
-        insert.bindString(INDEX_SELF_ID, mSelfId);
-        insert.bindLong(INDEX_SENT_TIMESTAMP, mSentTimestamp);
-        insert.bindLong(INDEX_RECEIVED_TIMESTAMP, mReceivedTimestamp);
-        insert.bindLong(INDEX_SEEN, mSeen ? 1 : 0);
-        insert.bindLong(INDEX_READ, mRead ? 1 : 0);
-        insert.bindLong(INDEX_PROTOCOL, mProtocol);
-        insert.bindLong(INDEX_BUGLE_STATUS, mStatus);
-        if (mSmsMessageUri != null) {
-            insert.bindString(INDEX_SMS_MESSAGE_URI, mSmsMessageUri.toString());
-        }
-        insert.bindLong(INDEX_SMS_PRIORITY, mSmsPriority);
-        insert.bindLong(INDEX_SMS_MESSAGE_SIZE, mSmsMessageSize);
-        insert.bindLong(INDEX_MMS_EXPIRY, mMmsExpiry);
-        if (mMmsSubject != null) {
-            insert.bindString(INDEX_MMS_SUBJECT, mMmsSubject);
-        }
-        if (mMmsTransactionId != null) {
-            insert.bindString(INDEX_MMS_TRANSACTION_ID, mMmsTransactionId);
-        }
-        if (mMmsContentLocation != null) {
-            insert.bindString(INDEX_MMS_CONTENT_LOCATION, mMmsContentLocation);
-        }
-        insert.bindLong(INDEX_RAW_TELEPHONY_STATUS, mRawStatus);
-        insert.bindLong(INDEX_RETRY_START_TIMESTAMP, mRetryStartTimestamp);
-        return insert;
-    }
-
-    public final String getMessageId() {
-        return mMessageId;
-    }
-
-    public final String getConversationId() {
-        return mConversationId;
-    }
-
-    public final String getParticipantId() {
-        return mParticipantId;
-    }
-
-    public final String getSelfId() {
-        return mSelfId;
-    }
-
-    public final long getSentTimeStamp() {
-        return mSentTimestamp;
-    }
-
-    public final long getReceivedTimeStamp() {
-        return mReceivedTimestamp;
-    }
-
-    public final String getFormattedReceivedTimeStamp() {
-        return Dates.getMessageTimeString(mReceivedTimestamp).toString();
-    }
-
-    public final int getProtocol() {
-        return mProtocol;
-    }
-
-    public final int getStatus() {
-        return mStatus;
-    }
-
-    public final Uri getSmsMessageUri() {
-        return mSmsMessageUri;
-    }
-
-    public final int getSmsPriority() {
-        return mSmsPriority;
-    }
-
-    public final long getSmsMessageSize() {
-        return mSmsMessageSize;
-    }
-
-    public final String getMmsSubject() {
-        return mMmsSubject;
-    }
-
-    public final void setMmsSubject(final String subject) {
-        mMmsSubject = subject;
-    }
-
-    public final String getMmsContentLocation() {
-        return mMmsContentLocation;
-    }
-
-    public final String getMmsTransactionId() {
-        return mMmsTransactionId;
-    }
-
-    public final boolean getMessageSeen() {
-        return mSeen;
-    }
-
-    public final long getMmsExpiry() {
-        return mMmsExpiry;
-    }
-
-    /**
-     * For incoming MMS messages this returns the retrieve-status value
-     * For sent MMS messages this returns the response-status value
-     * See PduHeaders.java for possible values
-     * Otherwise (SMS etc) this is RAW_TELEPHONY_STATUS_UNDEFINED
-     */
-    public final int getRawTelephonyStatus() {
-        return mRawStatus;
-    }
-
-    public final void setMessageSeen(final boolean hasSeen) {
-        mSeen = hasSeen;
-    }
-
-    public final boolean getInResendWindow(final long now) {
-        final long maxAgeToResend = BugleGservices.get().getLong(
-                BugleGservicesKeys.MESSAGE_RESEND_TIMEOUT_MS,
-                BugleGservicesKeys.MESSAGE_RESEND_TIMEOUT_MS_DEFAULT);
-        final long age = now - mRetryStartTimestamp;
-        return age < maxAgeToResend;
-    }
-
-    public final boolean getInDownloadWindow(final long now) {
-        final long maxAgeToRedownload = BugleGservices.get().getLong(
-                BugleGservicesKeys.MESSAGE_DOWNLOAD_TIMEOUT_MS,
-                BugleGservicesKeys.MESSAGE_DOWNLOAD_TIMEOUT_MS_DEFAULT);
-        final long age = now - mRetryStartTimestamp;
-        return age < maxAgeToRedownload;
-    }
-
-    static boolean getShowDownloadMessage(final int status) {
-        if (OsUtil.isSecondaryUser()) {
-            // Secondary users can't download mms's. Mms's are downloaded by bugle running as the
-            // primary user.
-            return false;
-        }
-        // Should show option for manual download if status is manual download or failed
-        return (status == BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED ||
-                status == BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD ||
-                // If debug is enabled, allow to download an expired or unavailable message.
-                (DebugUtils.isDebugEnabled()
-                        && status == BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE));
-    }
-
-    public boolean canDownloadMessage() {
-        if (OsUtil.isSecondaryUser()) {
-            // Secondary users can't download mms's. Mms's are downloaded by bugle running as the
-            // primary user.
-            return false;
-        }
-        // Can download if status is retrying auto/manual downloading
-        return (mStatus == BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD ||
-                mStatus == BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD);
-    }
-
-    public boolean canRedownloadMessage() {
-        if (OsUtil.isSecondaryUser()) {
-            // Secondary users can't download mms's. Mms's are downloaded by bugle running as the
-            // primary user.
-            return false;
-        }
-        // Can redownload if status is manual download not started or download failed
-        return (mStatus == BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED ||
-                mStatus == BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD ||
-                // If debug is enabled, allow to download an expired or unavailable message.
-                (DebugUtils.isDebugEnabled()
-                        && mStatus == BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE));
-    }
-
-    static boolean getShowResendMessage(final int status) {
-        // Should show option to resend if status is failed
-        return (status == BUGLE_STATUS_OUTGOING_FAILED);
-    }
-
-    static boolean getOneClickResendMessage(final int status, final int rawStatus) {
-        // Should show option to resend if status is failed
-        return (status == BUGLE_STATUS_OUTGOING_FAILED
-                && rawStatus == RAW_TELEPHONY_STATUS_UNDEFINED);
-    }
-
-    public boolean canResendMessage() {
-        // Manual retry allowed only from failed
-        return (mStatus == BUGLE_STATUS_OUTGOING_FAILED);
-    }
-
-    public boolean canSendMessage() {
-        // Sending messages must be in yet_to_send or awaiting_retry state
-        return (mStatus == BUGLE_STATUS_OUTGOING_YET_TO_SEND ||
-                mStatus == BUGLE_STATUS_OUTGOING_AWAITING_RETRY);
-    }
-
-    public final boolean getYetToSend() {
-        return (mStatus == BUGLE_STATUS_OUTGOING_YET_TO_SEND);
-    }
-
-    public final boolean getIsMms() {
-        return mProtocol == MessageData.PROTOCOL_MMS
-                || mProtocol == MessageData.PROTOCOL_MMS_PUSH_NOTIFICATION;
-    }
-
-    public static final boolean getIsMmsNotification(final int protocol) {
-        return (protocol == MessageData.PROTOCOL_MMS_PUSH_NOTIFICATION);
-    }
-
-    public final boolean getIsMmsNotification() {
-        return getIsMmsNotification(mProtocol);
-    }
-
-    public static final boolean getIsSms(final int protocol) {
-        return protocol == (MessageData.PROTOCOL_SMS);
-    }
-
-    public final boolean getIsSms() {
-        return getIsSms(mProtocol);
-    }
-
-    public static boolean getIsIncoming(final int status) {
-        return (status >= MessageData.BUGLE_STATUS_FIRST_INCOMING);
-    }
-
-    public boolean getIsIncoming() {
-        return getIsIncoming(mStatus);
-    }
-
-    public long getRetryStartTimestamp() {
-        return mRetryStartTimestamp;
-    }
-
-    public final String getMessageText() {
-        final String separator = System.getProperty("line.separator");
-        final StringBuilder text = new StringBuilder();
-        for (final MessagePartData part : mParts) {
-            if (!part.isAttachment() && !TextUtils.isEmpty(part.getText())) {
-                if (text.length() > 0) {
-                    text.append(separator);
-                }
-                text.append(part.getText());
-            }
-        }
-        return text.toString();
-    }
-
-    /**
-     * Takes all captions from attachments and adds them as a prefix to the first text part or
-     * appends a text part
-     */
-    public final void consolidateText() {
-        final String separator = System.getProperty("line.separator");
-        final StringBuilder captionText = new StringBuilder();
-        MessagePartData firstTextPart = null;
-        int firstTextPartIndex = -1;
-        for (int i = 0; i < mParts.size(); i++) {
-            final MessagePartData part = mParts.get(i);
-            if (firstTextPart == null && !part.isAttachment()) {
-                firstTextPart = part;
-                firstTextPartIndex = i;
-            }
-            if (part.isAttachment() && !TextUtils.isEmpty(part.getText())) {
-                if (captionText.length() > 0) {
-                    captionText.append(separator);
-                }
-                captionText.append(part.getText());
-            }
-        }
-
-        if (captionText.length() == 0) {
-            // Nothing to consolidate
-            return;
-        }
-
-        if (firstTextPart == null) {
-            addPart(MessagePartData.createTextMessagePart(captionText.toString()));
-        } else {
-            final String partText = firstTextPart.getText();
-            if (partText.length() > 0) {
-                captionText.append(separator);
-                captionText.append(partText);
-            }
-            mParts.set(firstTextPartIndex,
-                    MessagePartData.createTextMessagePart(captionText.toString()));
-        }
-    }
-
-    public final MessagePartData getFirstAttachment() {
-        for (final MessagePartData part : mParts) {
-            if (part.isAttachment()) {
-                return part;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Updates the messageId for this message.
-     * Can be used to reset the messageId prior to persisting (which will assign a new messageId)
-     *  or can be called on a message that does not yet have a valid messageId to set it.
-     */
-    public void updateMessageId(final String messageId) {
-        Assert.isTrue(TextUtils.isEmpty(messageId) || TextUtils.isEmpty(mMessageId));
-        mMessageId = messageId;
-
-        // TODO : This should probably also call updateMessageId on the message parts. We
-        // may also want to make messages effectively immutable once they have a valid message id.
-    }
-
-    public final void updateSendingMessage(final String conversationId, final Uri messageUri,
-            final long timestamp) {
-        mConversationId = conversationId;
-        mSmsMessageUri = messageUri;
-        mRead = true;
-        mSeen = true;
-        mReceivedTimestamp = timestamp;
-        mSentTimestamp = timestamp;
-        mStatus = BUGLE_STATUS_OUTGOING_YET_TO_SEND;
-        mRetryStartTimestamp = timestamp;
-    }
-
-    public final void markMessageManualResend(final long timestamp) {
-        // Manual send updates timestamp and transitions back to initial sending status.
-        mReceivedTimestamp = timestamp;
-        mSentTimestamp = timestamp;
-        mStatus = BUGLE_STATUS_OUTGOING_SENDING;
-    }
-
-    public final void markMessageSending(final long timestamp) {
-        // Initial send
-        mStatus = BUGLE_STATUS_OUTGOING_SENDING;
-        mSentTimestamp = timestamp;
-    }
-
-    public final void markMessageResending(final long timestamp) {
-        // Auto resend of message
-        mStatus = BUGLE_STATUS_OUTGOING_RESENDING;
-        mSentTimestamp = timestamp;
-    }
-
-    public final void markMessageSent(final long timestamp) {
-        mSentTimestamp = timestamp;
-        mStatus = BUGLE_STATUS_OUTGOING_COMPLETE;
-    }
-
-    public final void markMessageFailed(final long timestamp) {
-        mSentTimestamp = timestamp;
-        mStatus = BUGLE_STATUS_OUTGOING_FAILED;
-    }
-
-    public final void markMessageFailedEmergencyNumber(final long timestamp) {
-        mSentTimestamp = timestamp;
-        mStatus = BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER;
-    }
-
-    public final void markMessageNotSent(final long timestamp) {
-        mSentTimestamp = timestamp;
-        mStatus = BUGLE_STATUS_OUTGOING_AWAITING_RETRY;
-    }
-
-    public final void updateSizesForImageParts() {
-        for (final MessagePartData part : getParts()) {
-            part.decodeAndSaveSizeIfImage(false /* saveToStorage */);
-        }
-    }
-
-    public final void setRetryStartTimestamp(final long timestamp) {
-        mRetryStartTimestamp = timestamp;
-    }
-
-    public final void setRawTelephonyStatus(final int rawStatus) {
-        mRawStatus = rawStatus;
-    }
-
-    public boolean hasContent() {
-        return !TextUtils.isEmpty(mMmsSubject) ||
-                getFirstAttachment() != null ||
-                !TextUtils.isEmpty(getMessageText());
-    }
-
-    public final void bindSelfId(final String selfId) {
-        mSelfId = selfId;
-    }
-
-    public final void bindParticipantId(final String participantId) {
-        mParticipantId = participantId;
-    }
-
-    protected MessageData(final Parcel in) {
-        mMessageId = in.readString();
-        mConversationId = in.readString();
-        mParticipantId = in.readString();
-        mSelfId = in.readString();
-        mSentTimestamp = in.readLong();
-        mReceivedTimestamp = in.readLong();
-        mSeen = (in.readInt() != 0);
-        mRead = (in.readInt() != 0);
-        mProtocol = in.readInt();
-        mStatus = in.readInt();
-        final String smsMessageUri = in.readString();
-        mSmsMessageUri = (smsMessageUri == null ? null : Uri.parse(smsMessageUri));
-        mSmsPriority = in.readInt();
-        mSmsMessageSize = in.readLong();
-        mMmsExpiry = in.readLong();
-        mMmsSubject = in.readString();
-        mMmsTransactionId = in.readString();
-        mMmsContentLocation = in.readString();
-        mRawStatus = in.readInt();
-        mRetryStartTimestamp = in.readLong();
-
-        // Read parts
-        mParts = new ArrayList<MessagePartData>();
-        final int partCount = in.readInt();
-        for (int i = 0; i < partCount; i++) {
-            mParts.add((MessagePartData) in.readParcelable(MessagePartData.class.getClassLoader()));
-        }
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(final Parcel dest, final int flags) {
-        dest.writeString(mMessageId);
-        dest.writeString(mConversationId);
-        dest.writeString(mParticipantId);
-        dest.writeString(mSelfId);
-        dest.writeLong(mSentTimestamp);
-        dest.writeLong(mReceivedTimestamp);
-        dest.writeInt(mRead ? 1 : 0);
-        dest.writeInt(mSeen ? 1 : 0);
-        dest.writeInt(mProtocol);
-        dest.writeInt(mStatus);
-        final String smsMessageUri = (mSmsMessageUri == null) ? null : mSmsMessageUri.toString();
-        dest.writeString(smsMessageUri);
-        dest.writeInt(mSmsPriority);
-        dest.writeLong(mSmsMessageSize);
-        dest.writeLong(mMmsExpiry);
-        dest.writeString(mMmsSubject);
-        dest.writeString(mMmsTransactionId);
-        dest.writeString(mMmsContentLocation);
-        dest.writeInt(mRawStatus);
-        dest.writeLong(mRetryStartTimestamp);
-
-        // Write parts
-        dest.writeInt(mParts.size());
-        for (final MessagePartData messagePartData : mParts) {
-            dest.writeParcelable(messagePartData, flags);
-        }
-    }
-
-    public static final Parcelable.Creator<MessageData> CREATOR
-            = new Parcelable.Creator<MessageData>() {
-        @Override
-        public MessageData createFromParcel(final Parcel in) {
-            return new MessageData(in);
-        }
-
-        @Override
-        public MessageData[] newArray(final int size) {
-            return new MessageData[size];
-        }
-    };
-
-    @Override
-    public String toString() {
-        return toString(mMessageId, mParts);
-    }
-
-    public static String toString(String messageId, List<MessagePartData> parts) {
-        StringBuilder sb = new StringBuilder();
-        if (messageId != null) {
-            sb.append(messageId);
-            sb.append(": ");
-        }
-        for (MessagePartData part : parts) {
-            sb.append(part.toString());
-            sb.append(" ");
-        }
-        return sb.toString();
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/MessagePartData.java b/src/com/android/messaging/datamodel/data/MessagePartData.java
deleted file mode 100644
index ea24876..0000000
--- a/src/com/android/messaging/datamodel/data/MessagePartData.java
+++ /dev/null
@@ -1,544 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteStatement;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.PartColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.action.UpdateMessagePartSizeAction;
-import com.android.messaging.datamodel.media.ImageRequest;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.GifTranscoder;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.util.UriUtil;
-
-import java.util.Arrays;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Represents a single message part. Messages consist of one or more parts which may contain
- * either text or media.
- */
-public class MessagePartData implements Parcelable {
-    public static final int UNSPECIFIED_SIZE = MessagingContentProvider.UNSPECIFIED_SIZE;
-
-    public static final String[] ACCEPTABLE_GALLERY_MEDIA_TYPES =
-            new String[] {
-                // Acceptable image types
-                ContentType.IMAGE_JPEG, ContentType.IMAGE_JPG, ContentType.IMAGE_PNG,
-                ContentType.IMAGE_GIF, ContentType.IMAGE_WBMP, ContentType.IMAGE_X_MS_BMP,
-                // Acceptable video types
-                ContentType.VIDEO_3GP, ContentType.VIDEO_3GPP, ContentType.VIDEO_3G2,
-                ContentType.VIDEO_H263, ContentType.VIDEO_M4V, ContentType.VIDEO_MP4,
-                ContentType.VIDEO_MPEG, ContentType.VIDEO_MPEG4, ContentType.VIDEO_WEBM,
-                // Acceptable audio types
-                ContentType.AUDIO_MP3, ContentType.AUDIO_MP4, ContentType.AUDIO_MIDI,
-                ContentType.AUDIO_MID, ContentType.AUDIO_AMR, ContentType.AUDIO_X_WAV,
-                ContentType.AUDIO_AAC, ContentType.AUDIO_X_MIDI, ContentType.AUDIO_X_MID,
-                ContentType.AUDIO_X_MP3
-            };
-
-    private static final String[] sProjection = {
-        PartColumns._ID,
-        PartColumns.MESSAGE_ID,
-        PartColumns.TEXT,
-        PartColumns.CONTENT_URI,
-        PartColumns.CONTENT_TYPE,
-        PartColumns.WIDTH,
-        PartColumns.HEIGHT,
-    };
-
-    private static final int INDEX_ID = 0;
-    private static final int INDEX_MESSAGE_ID = 1;
-    private static final int INDEX_TEXT = 2;
-    private static final int INDEX_CONTENT_URI = 3;
-    private static final int INDEX_CONTENT_TYPE = 4;
-    private static final int INDEX_WIDTH = 5;
-    private static final int INDEX_HEIGHT = 6;
-    // This isn't part of the projection
-    private static final int INDEX_CONVERSATION_ID = 7;
-
-    // SQL statement to insert a "complete" message part row (columns based on projection above).
-    private static final String INSERT_MESSAGE_PART_SQL =
-            "INSERT INTO " + DatabaseHelper.PARTS_TABLE + " ( "
-                    + TextUtils.join(",", Arrays.copyOfRange(sProjection, 1, INDEX_CONVERSATION_ID))
-                    + ", " + PartColumns.CONVERSATION_ID
-                    + ") VALUES (?, ?, ?, ?, ?, ?, ?)";
-
-    // Used for stuff that's ignored or arbitrarily compressed.
-    private static final long NO_MINIMUM_SIZE = 0;
-
-    private String mPartId;
-    private String mMessageId;
-    private String mText;
-    private Uri mContentUri;
-    private String mContentType;
-    private int mWidth;
-    private int mHeight;
-    // This kind of part can only be attached once and with no other attachment
-    private boolean mSinglePartOnly;
-
-    /** Transient data: true if destroy was already called */
-    private boolean mDestroyed;
-
-    /**
-     * Create an "empty" message part
-     */
-    protected MessagePartData() {
-        this(null, null, UNSPECIFIED_SIZE, UNSPECIFIED_SIZE);
-    }
-
-    /**
-     * Create a populated text message part
-     */
-    protected MessagePartData(final String messageText) {
-        this(null, messageText, ContentType.TEXT_PLAIN, null, UNSPECIFIED_SIZE, UNSPECIFIED_SIZE,
-                false /*singlePartOnly*/);
-    }
-
-    /**
-     * Create a populated attachment message part
-     */
-    protected MessagePartData(final String contentType, final Uri contentUri,
-            final int width, final int height) {
-        this(null, null, contentType, contentUri, width, height, false /*singlePartOnly*/);
-    }
-
-    /**
-     * Create a populated attachment message part, with additional caption text
-     */
-    protected MessagePartData(final String messageText, final String contentType,
-            final Uri contentUri, final int width, final int height) {
-        this(null, messageText, contentType, contentUri, width, height, false /*singlePartOnly*/);
-    }
-
-    /**
-     * Create a populated attachment message part, with additional caption text, single part only
-     */
-    protected MessagePartData(final String messageText, final String contentType,
-            final Uri contentUri, final int width, final int height, final boolean singlePartOnly) {
-        this(null, messageText, contentType, contentUri, width, height, singlePartOnly);
-    }
-
-    /**
-     * Create a populated message part
-     */
-    private MessagePartData(final String messageId, final String messageText,
-            final String contentType, final Uri contentUri, final int width, final int height,
-            final boolean singlePartOnly) {
-        mMessageId = messageId;
-        mText = messageText;
-        mContentType = contentType;
-        mContentUri = contentUri;
-        mWidth = width;
-        mHeight = height;
-        mSinglePartOnly = singlePartOnly;
-    }
-
-    /**
-     * Create a "text" message part
-     */
-    public static MessagePartData createTextMessagePart(final String messageText) {
-        return new MessagePartData(messageText);
-    }
-
-    /**
-     * Create a "media" message part
-     */
-    public static MessagePartData createMediaMessagePart(final String contentType,
-            final Uri contentUri, final int width, final int height) {
-        return new MessagePartData(contentType, contentUri, width, height);
-    }
-
-    /**
-     * Create a "media" message part with caption
-     */
-    public static MessagePartData createMediaMessagePart(final String caption,
-            final String contentType, final Uri contentUri, final int width, final int height) {
-        return new MessagePartData(null, caption, contentType, contentUri, width, height,
-                false /*singlePartOnly*/
-        );
-    }
-
-    /**
-     * Create an empty "text" message part
-     */
-    public static MessagePartData createEmptyMessagePart() {
-        return new MessagePartData("");
-    }
-
-    /**
-     * Creates a new message part reading from the cursor
-     */
-    public static MessagePartData createFromCursor(final Cursor cursor) {
-        final MessagePartData part = new MessagePartData();
-        part.bind(cursor);
-        return part;
-    }
-
-    public static String[] getProjection() {
-        return sProjection;
-    }
-
-    /**
-     * Updates the part id.
-     * Can be used to reset the partId just prior to persisting (which will assign a new partId)
-     *  or can be called on a part that does not yet have a valid part id to set it.
-     */
-    public void updatePartId(final String partId) {
-        Assert.isTrue(TextUtils.isEmpty(partId) || TextUtils.isEmpty(mPartId));
-        mPartId = partId;
-    }
-
-    /**
-     * Updates the messageId for the part.
-     * Can be used to reset the messageId prior to persisting (which will assign a new messageId)
-     *  or can be called on a part that does not yet have a valid messageId to set it.
-     */
-    public void updateMessageId(final String messageId) {
-        Assert.isTrue(TextUtils.isEmpty(messageId) || TextUtils.isEmpty(mMessageId));
-        mMessageId = messageId;
-    }
-
-    protected static String getMessageId(final Cursor cursor) {
-        return cursor.getString(INDEX_MESSAGE_ID);
-    }
-
-    protected void bind(final Cursor cursor) {
-        mPartId = cursor.getString(INDEX_ID);
-        mMessageId = cursor.getString(INDEX_MESSAGE_ID);
-        mText = cursor.getString(INDEX_TEXT);
-        mContentUri = UriUtil.uriFromString(cursor.getString(INDEX_CONTENT_URI));
-        mContentType = cursor.getString(INDEX_CONTENT_TYPE);
-        mWidth = cursor.getInt(INDEX_WIDTH);
-        mHeight = cursor.getInt(INDEX_HEIGHT);
-    }
-
-    public final void populate(final ContentValues values) {
-        // Must have a valid messageId on a part
-        Assert.isTrue(!TextUtils.isEmpty(mMessageId));
-        values.put(PartColumns.MESSAGE_ID, mMessageId);
-        values.put(PartColumns.TEXT, mText);
-        values.put(PartColumns.CONTENT_URI, UriUtil.stringFromUri(mContentUri));
-        values.put(PartColumns.CONTENT_TYPE, mContentType);
-        if (mWidth != UNSPECIFIED_SIZE) {
-            values.put(PartColumns.WIDTH, mWidth);
-        }
-        if (mHeight != UNSPECIFIED_SIZE) {
-            values.put(PartColumns.HEIGHT, mHeight);
-        }
-    }
-
-    /**
-     * Note this is not thread safe so callers need to make sure they own the wrapper + statements
-     * while they call this and use the returned value.
-     */
-    public SQLiteStatement getInsertStatement(final DatabaseWrapper db,
-                                              final String conversationId) {
-        final SQLiteStatement insert = db.getStatementInTransaction(
-                DatabaseWrapper.INDEX_INSERT_MESSAGE_PART, INSERT_MESSAGE_PART_SQL);
-        insert.clearBindings();
-        insert.bindString(INDEX_MESSAGE_ID, mMessageId);
-        if (mText != null) {
-            insert.bindString(INDEX_TEXT, mText);
-        }
-        if (mContentUri != null) {
-            insert.bindString(INDEX_CONTENT_URI, mContentUri.toString());
-        }
-        if (mContentType != null) {
-            insert.bindString(INDEX_CONTENT_TYPE, mContentType);
-        }
-        insert.bindLong(INDEX_WIDTH, mWidth);
-        insert.bindLong(INDEX_HEIGHT, mHeight);
-        insert.bindString(INDEX_CONVERSATION_ID, conversationId);
-        return insert;
-    }
-
-    public final String getPartId() {
-        return mPartId;
-    }
-
-    public final String getMessageId() {
-        return mMessageId;
-    }
-
-    public final String getText() {
-        return mText;
-    }
-
-    public final Uri getContentUri() {
-        return mContentUri;
-    }
-
-    public boolean isAttachment() {
-        return mContentUri != null;
-    }
-
-    public boolean isText() {
-        return ContentType.isTextType(mContentType);
-    }
-
-    public boolean isImage() {
-        return ContentType.isImageType(mContentType);
-    }
-
-    public boolean isMedia() {
-        return ContentType.isMediaType(mContentType);
-    }
-
-    public boolean isVCard() {
-        return ContentType.isVCardType(mContentType);
-    }
-
-    public boolean isAudio() {
-        return ContentType.isAudioType(mContentType);
-    }
-
-    public boolean isVideo() {
-        return ContentType.isVideoType(mContentType);
-    }
-
-    public final String getContentType() {
-        return mContentType;
-    }
-
-    public final int getWidth() {
-        return mWidth;
-    }
-
-    public final int getHeight() {
-        return mHeight;
-    }
-
-    public static boolean isSupportedMediaType(final String contentType) {
-        return ContentType.isVCardType(contentType)
-                || Arrays.asList(ACCEPTABLE_GALLERY_MEDIA_TYPES).contains(contentType);
-    }
-
-    /**
-    *
-    * @return true if this part can only exist by itself, with no other attachments
-    */
-    public boolean getSinglePartOnly() {
-        return mSinglePartOnly;
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    protected MessagePartData(final Parcel in) {
-        mMessageId = in.readString();
-        mText = in.readString();
-        mContentUri = UriUtil.uriFromString(in.readString());
-        mContentType = in.readString();
-        mWidth = in.readInt();
-        mHeight = in.readInt();
-    }
-
-    @Override
-    public void writeToParcel(final Parcel dest, final int flags) {
-        Assert.isTrue(!mDestroyed);
-        dest.writeString(mMessageId);
-        dest.writeString(mText);
-        dest.writeString(UriUtil.stringFromUri(mContentUri));
-        dest.writeString(mContentType);
-        dest.writeInt(mWidth);
-        dest.writeInt(mHeight);
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-
-        if (!(o instanceof MessagePartData)) {
-          return false;
-        }
-
-        MessagePartData lhs = (MessagePartData) o;
-        return mWidth == lhs.mWidth && mHeight == lhs.mHeight &&
-                TextUtils.equals(mMessageId, lhs.mMessageId) &&
-                TextUtils.equals(mText, lhs.mText) &&
-                TextUtils.equals(mContentType, lhs.mContentType) &&
-                (mContentUri == null ? lhs.mContentUri == null
-                                     : mContentUri.equals(lhs.mContentUri));
-    }
-
-    @Override public int hashCode() {
-        int result = 17;
-        result = 31 * result + mWidth;
-        result = 31 * result + mHeight;
-        result = 31 * result + (mMessageId == null ? 0 : mMessageId.hashCode());
-        result = 31 * result + (mText == null ? 0 : mText.hashCode());
-        result = 31 * result + (mContentType == null ? 0 : mContentType.hashCode());
-        result = 31 * result + (mContentUri == null ? 0 : mContentUri.hashCode());
-        return result;
-      }
-
-    public static final Parcelable.Creator<MessagePartData> CREATOR
-            = new Parcelable.Creator<MessagePartData>() {
-        @Override
-        public MessagePartData createFromParcel(final Parcel in) {
-            return new MessagePartData(in);
-        }
-
-        @Override
-        public MessagePartData[] newArray(final int size) {
-            return new MessagePartData[size];
-        }
-    };
-
-    protected Uri shouldDestroy() {
-        // We should never double-destroy.
-        Assert.isTrue(!mDestroyed);
-        mDestroyed = true;
-        Uri contentUri = mContentUri;
-        mContentUri = null;
-        mContentType = null;
-        // Only destroy the image if it's staged in our scratch space.
-        if (!MediaScratchFileProvider.isMediaScratchSpaceUri(contentUri)) {
-            contentUri = null;
-        }
-        return contentUri;
-    }
-
-    /**
-     * If application owns content associated with this part delete it (on background thread)
-     */
-    public void destroyAsync() {
-        final Uri contentUri = shouldDestroy();
-        if (contentUri != null) {
-            SafeAsyncTask.executeOnThreadPool(new Runnable() {
-                @Override
-                public void run() {
-                    Factory.get().getApplicationContext().getContentResolver().delete(
-                            contentUri, null, null);
-                }
-            });
-        }
-    }
-
-    /**
-     * If application owns content associated with this part delete it
-     */
-    public void destroySync() {
-        final Uri contentUri = shouldDestroy();
-        if (contentUri != null) {
-            Factory.get().getApplicationContext().getContentResolver().delete(
-                    contentUri, null, null);
-        }
-    }
-
-    /**
-     * If this is an image part, decode the image header and potentially save the size to the db.
-     */
-    public void decodeAndSaveSizeIfImage(final boolean saveToStorage) {
-        if (isImage()) {
-            final Rect imageSize = ImageUtils.decodeImageBounds(
-                    Factory.get().getApplicationContext(), mContentUri);
-            if (imageSize.width() != ImageRequest.UNSPECIFIED_SIZE &&
-                    imageSize.height() != ImageRequest.UNSPECIFIED_SIZE) {
-                mWidth = imageSize.width();
-                mHeight = imageSize.height();
-                if (saveToStorage) {
-                    UpdateMessagePartSizeAction.updateSize(mPartId, mWidth, mHeight);
-                }
-            }
-        }
-    }
-
-    /**
-     * Computes the minimum size that this MessagePartData could be compressed/downsampled/encoded
-     * before sending to meet the maximum message size imposed by the carriers. This is used to
-     * determine right before sending a message whether a message could possibly be sent. If not
-     * then the user is given a chance to unselect some/all of the attachments.
-     *
-     * TODO: computing the minimum size could be expensive. Should we cache the
-     * computed value in db to be retrieved later?
-     *
-     * @return the carrier-independent minimum size, in bytes.
-     */
-    @DoesNotRunOnMainThread
-    public long getMinimumSizeInBytesForSending() {
-        Assert.isNotMainThread();
-        if (!isAttachment()) {
-            // No limit is imposed on non-attachment part (i.e. plain text), so treat it as zero.
-            return NO_MINIMUM_SIZE;
-        } else if (isImage()) {
-            // GIFs are resized by the native transcoder (exposed by GifTranscoder).
-            if (ImageUtils.isGif(mContentType, mContentUri)) {
-                final long originalImageSize = UriUtil.getContentSize(mContentUri);
-                // Wish we could save the size here, but we don't have a part id yet
-                decodeAndSaveSizeIfImage(false /* saveToStorage */);
-                return GifTranscoder.canBeTranscoded(mWidth, mHeight) ?
-                        GifTranscoder.estimateFileSizeAfterTranscode(originalImageSize)
-                        : originalImageSize;
-            }
-            // Other images should be arbitrarily resized by ImageResizer before sending.
-            return MmsUtils.MIN_IMAGE_BYTE_SIZE;
-        } else if (isMedia()) {
-            // We can't compress attachments except images.
-            return UriUtil.getContentSize(mContentUri);
-        } else {
-            // This is some unknown media type that we don't know how to handle. Log an error
-            // and try sending it anyway.
-            LogUtil.e(LogUtil.BUGLE_DATAMODEL_TAG, "Unknown attachment type " + getContentType());
-            return NO_MINIMUM_SIZE;
-        }
-    }
-
-    @Override
-    public String toString() {
-        if (isText()) {
-            return LogUtil.sanitizePII(getText());
-        } else {
-            return getContentType() + " (" + getContentUri() + ")";
-        }
-    }
-
-    /**
-     *
-     * @return true if this part can only exist by itself, with no other attachments
-     */
-    public boolean isSinglePartOnly() {
-        return mSinglePartOnly;
-    }
-
-    public void setSinglePartOnly(final boolean isSinglePartOnly) {
-        mSinglePartOnly = isSinglePartOnly;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/ParticipantData.java b/src/com/android/messaging/datamodel/data/ParticipantData.java
deleted file mode 100644
index 95c74e2..0000000
--- a/src/com/android/messaging/datamodel/data/ParticipantData.java
+++ /dev/null
@@ -1,603 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.content.ContentValues;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Color;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.telephony.SubscriptionInfo;
-import android.text.TextUtils;
-
-import androidx.appcompat.mms.MmsManager;
-import androidx.collection.ArrayMap;
-
-import com.android.ex.chips.RecipientEntry;
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.sms.MmsSmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.TextUtil;
-
-/**
- * A class that encapsulates all of the data for a specific participant in a conversation.
- */
-public class ParticipantData implements Parcelable {
-
-    private static final ArrayMap<Integer, String> sSubIdtoParticipantIdCache =
-            new ArrayMap<Integer, String>();
-
-    // We always use -1 as default/invalid sub id although system may give us anything negative
-    public static final int DEFAULT_SELF_SUB_ID = MmsManager.DEFAULT_SUB_ID;
-
-    // This needs to be something apart from valid or DEFAULT_SELF_SUB_ID
-    public static final int OTHER_THAN_SELF_SUB_ID = DEFAULT_SELF_SUB_ID - 1;
-
-    // Active slot ids are non-negative. Using -1 to designate to inactive self participants.
-    public static final int INVALID_SLOT_ID = -1;
-
-    // TODO: may make sense to move this to common place?
-    public static final long PARTICIPANT_CONTACT_ID_NOT_RESOLVED = -1;
-    public static final long PARTICIPANT_CONTACT_ID_NOT_FOUND = -2;
-
-    public static class ParticipantsQuery {
-        public static final String[] PROJECTION = new String[] {
-            ParticipantColumns._ID,
-            ParticipantColumns.SUB_ID,
-            ParticipantColumns.SIM_SLOT_ID,
-            ParticipantColumns.NORMALIZED_DESTINATION,
-            ParticipantColumns.SEND_DESTINATION,
-            ParticipantColumns.DISPLAY_DESTINATION,
-            ParticipantColumns.FULL_NAME,
-            ParticipantColumns.FIRST_NAME,
-            ParticipantColumns.PROFILE_PHOTO_URI,
-            ParticipantColumns.CONTACT_ID,
-            ParticipantColumns.LOOKUP_KEY,
-            ParticipantColumns.BLOCKED,
-            ParticipantColumns.SUBSCRIPTION_COLOR,
-            ParticipantColumns.SUBSCRIPTION_NAME,
-            ParticipantColumns.CONTACT_DESTINATION,
-        };
-
-        public static final int INDEX_ID                        = 0;
-        public static final int INDEX_SUB_ID                    = 1;
-        public static final int INDEX_SIM_SLOT_ID               = 2;
-        public static final int INDEX_NORMALIZED_DESTINATION    = 3;
-        public static final int INDEX_SEND_DESTINATION          = 4;
-        public static final int INDEX_DISPLAY_DESTINATION       = 5;
-        public static final int INDEX_FULL_NAME                 = 6;
-        public static final int INDEX_FIRST_NAME                = 7;
-        public static final int INDEX_PROFILE_PHOTO_URI         = 8;
-        public static final int INDEX_CONTACT_ID                = 9;
-        public static final int INDEX_LOOKUP_KEY                = 10;
-        public static final int INDEX_BLOCKED                   = 11;
-        public static final int INDEX_SUBSCRIPTION_COLOR        = 12;
-        public static final int INDEX_SUBSCRIPTION_NAME         = 13;
-        public static final int INDEX_CONTACT_DESTINATION       = 14;
-    }
-
-    /**
-     * @return The MMS unknown sender participant entity
-     */
-    public static String getUnknownSenderDestination() {
-        // This is a hard coded string rather than a localized one because we don't want it to
-        // change when you change locale.
-        return "\u02BCUNKNOWN_SENDER!\u02BC";
-    }
-
-    private String mParticipantId;
-    private int mSubId;
-    private int mSlotId;
-    private String mNormalizedDestination;
-    private String mSendDestination;
-    private String mDisplayDestination;
-    private String mContactDestination;
-    private String mFullName;
-    private String mFirstName;
-    private String mProfilePhotoUri;
-    private long mContactId;
-    private String mLookupKey;
-    private int mSubscriptionColor;
-    private String mSubscriptionName;
-    private boolean mIsEmailAddress;
-    private boolean mBlocked;
-
-    // Don't call constructor directly
-    private ParticipantData() {
-    }
-
-    public static ParticipantData getFromCursor(final Cursor cursor) {
-        final ParticipantData pd = new ParticipantData();
-        pd.mParticipantId = cursor.getString(ParticipantsQuery.INDEX_ID);
-        pd.mSubId = cursor.getInt(ParticipantsQuery.INDEX_SUB_ID);
-        pd.mSlotId = cursor.getInt(ParticipantsQuery.INDEX_SIM_SLOT_ID);
-        pd.mNormalizedDestination = cursor.getString(
-                ParticipantsQuery.INDEX_NORMALIZED_DESTINATION);
-        pd.mSendDestination = cursor.getString(ParticipantsQuery.INDEX_SEND_DESTINATION);
-        pd.mDisplayDestination = cursor.getString(ParticipantsQuery.INDEX_DISPLAY_DESTINATION);
-        pd.mContactDestination = cursor.getString(ParticipantsQuery.INDEX_CONTACT_DESTINATION);
-        pd.mFullName = cursor.getString(ParticipantsQuery.INDEX_FULL_NAME);
-        pd.mFirstName = cursor.getString(ParticipantsQuery.INDEX_FIRST_NAME);
-        pd.mProfilePhotoUri = cursor.getString(ParticipantsQuery.INDEX_PROFILE_PHOTO_URI);
-        pd.mContactId = cursor.getLong(ParticipantsQuery.INDEX_CONTACT_ID);
-        pd.mLookupKey = cursor.getString(ParticipantsQuery.INDEX_LOOKUP_KEY);
-        pd.mIsEmailAddress = MmsSmsUtils.isEmailAddress(pd.mSendDestination);
-        pd.mBlocked = cursor.getInt(ParticipantsQuery.INDEX_BLOCKED) != 0;
-        pd.mSubscriptionColor = cursor.getInt(ParticipantsQuery.INDEX_SUBSCRIPTION_COLOR);
-        pd.mSubscriptionName = cursor.getString(ParticipantsQuery.INDEX_SUBSCRIPTION_NAME);
-        pd.maybeSetupUnknownSender();
-        return pd;
-    }
-
-    public static ParticipantData getFromId(final DatabaseWrapper dbWrapper,
-            final String participantId) {
-        Cursor cursor = null;
-        try {
-            cursor = dbWrapper.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                    ParticipantsQuery.PROJECTION,
-                    ParticipantColumns._ID + " =?",
-                    new String[] { participantId }, null, null, null);
-
-            if (cursor.moveToFirst()) {
-                return ParticipantData.getFromCursor(cursor);
-            } else {
-                return null;
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-    }
-
-    public static ParticipantData getFromRecipientEntry(final RecipientEntry recipientEntry) {
-        final ParticipantData pd = new ParticipantData();
-        pd.mParticipantId = null;
-        pd.mSubId = OTHER_THAN_SELF_SUB_ID;
-        pd.mSlotId = INVALID_SLOT_ID;
-        pd.mSendDestination = TextUtil.replaceUnicodeDigits(recipientEntry.getDestination());
-        pd.mIsEmailAddress = MmsSmsUtils.isEmailAddress(pd.mSendDestination);
-        pd.mNormalizedDestination = pd.mIsEmailAddress ?
-                pd.mSendDestination :
-                PhoneUtils.getDefault().getCanonicalBySystemLocale(pd.mSendDestination);
-        pd.mDisplayDestination = pd.mIsEmailAddress ?
-                pd.mNormalizedDestination :
-                PhoneUtils.getDefault().formatForDisplay(pd.mNormalizedDestination);
-        pd.mFullName = recipientEntry.getDisplayName();
-        pd.mFirstName = null;
-        pd.mProfilePhotoUri = (recipientEntry.getPhotoThumbnailUri() == null) ? null :
-                recipientEntry.getPhotoThumbnailUri().toString();
-        pd.mContactId = recipientEntry.getContactId();
-        if (pd.mContactId < 0) {
-            // ParticipantData only supports real contact ids (>=0) based on faith that the contacts
-            // provider will continue to only use non-negative ids.  The UI uses contactId < 0 for
-            // special handling. We convert those to 'not resolved'
-            pd.mContactId = PARTICIPANT_CONTACT_ID_NOT_RESOLVED;
-        }
-        pd.mLookupKey = recipientEntry.getLookupKey();
-        pd.mBlocked = false;
-        pd.mSubscriptionColor = Color.TRANSPARENT;
-        pd.mSubscriptionName = null;
-        pd.maybeSetupUnknownSender();
-        return pd;
-    }
-
-    // Shared code for getFromRawPhoneBySystemLocale and getFromRawPhoneBySimLocale
-    private static ParticipantData getFromRawPhone(final String phoneNumber) {
-        Assert.isTrue(phoneNumber != null);
-        final ParticipantData pd = new ParticipantData();
-        pd.mParticipantId = null;
-        pd.mSubId = OTHER_THAN_SELF_SUB_ID;
-        pd.mSlotId = INVALID_SLOT_ID;
-        pd.mSendDestination = TextUtil.replaceUnicodeDigits(phoneNumber);
-        pd.mIsEmailAddress = MmsSmsUtils.isEmailAddress(pd.mSendDestination);
-        pd.mFullName = null;
-        pd.mFirstName = null;
-        pd.mProfilePhotoUri = null;
-        pd.mContactId = PARTICIPANT_CONTACT_ID_NOT_RESOLVED;
-        pd.mLookupKey = null;
-        pd.mBlocked = false;
-        pd.mSubscriptionColor = Color.TRANSPARENT;
-        pd.mSubscriptionName = null;
-        return pd;
-    }
-
-    /**
-     * Get an instance from a raw phone number and using system locale to normalize it.
-     *
-     * Use this when creating a participant that is for displaying UI and not associated
-     * with a specific SIM. For example, when creating a conversation using user entered
-     * phone number.
-     *
-     * @param phoneNumber The raw phone number
-     * @return instance
-     */
-    public static ParticipantData getFromRawPhoneBySystemLocale(final String phoneNumber) {
-        final ParticipantData pd = getFromRawPhone(phoneNumber);
-        pd.mNormalizedDestination = pd.mIsEmailAddress ?
-                pd.mSendDestination :
-                PhoneUtils.getDefault().getCanonicalBySystemLocale(pd.mSendDestination);
-        pd.mDisplayDestination = pd.mIsEmailAddress ?
-                pd.mNormalizedDestination :
-                PhoneUtils.getDefault().formatForDisplay(pd.mNormalizedDestination);
-        pd.maybeSetupUnknownSender();
-        return pd;
-    }
-
-    /**
-     * Get an instance from a raw phone number and using SIM or system locale to normalize it.
-     *
-     * Use this when creating a participant that is associated with a specific SIM. For example,
-     * the sender of a received message or the recipient of a sending message that is already
-     * targeted at a specific SIM.
-     *
-     * @param phoneNumber The raw phone number
-     * @return instance
-     */
-    public static ParticipantData getFromRawPhoneBySimLocale(
-            final String phoneNumber, final int subId) {
-        final ParticipantData pd = getFromRawPhone(phoneNumber);
-        pd.mNormalizedDestination = pd.mIsEmailAddress ?
-                pd.mSendDestination :
-                PhoneUtils.get(subId).getCanonicalBySimLocale(pd.mSendDestination);
-        pd.mDisplayDestination = pd.mIsEmailAddress ?
-                pd.mNormalizedDestination :
-                PhoneUtils.getDefault().formatForDisplay(pd.mNormalizedDestination);
-        pd.maybeSetupUnknownSender();
-        return pd;
-    }
-
-    public static ParticipantData getSelfParticipant(final int subId) {
-        Assert.isTrue(subId != OTHER_THAN_SELF_SUB_ID);
-        final ParticipantData pd = new ParticipantData();
-        pd.mParticipantId = null;
-        pd.mSubId = subId;
-        pd.mSlotId = INVALID_SLOT_ID;
-        pd.mIsEmailAddress = false;
-        pd.mSendDestination = null;
-        pd.mNormalizedDestination = null;
-        pd.mDisplayDestination = null;
-        pd.mFullName = null;
-        pd.mFirstName = null;
-        pd.mProfilePhotoUri = null;
-        pd.mContactId = PARTICIPANT_CONTACT_ID_NOT_RESOLVED;
-        pd.mLookupKey = null;
-        pd.mBlocked = false;
-        pd.mSubscriptionColor = Color.TRANSPARENT;
-        pd.mSubscriptionName = null;
-        return pd;
-    }
-
-    public static String getParticipantId(final DatabaseWrapper db, final int subId) {
-        String id;
-        synchronized (sSubIdtoParticipantIdCache) {
-            id = sSubIdtoParticipantIdCache.get(subId);
-        }
-
-        if (id != null) {
-            return id;
-        }
-
-        try (final Cursor cursor =
-                    db.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                            new String[] {ParticipantColumns._ID},
-                            ParticipantColumns.SUB_ID + " =?",
-                            new String[] {Integer.toString(subId)}, null, null, null)) {
-
-            if (cursor.moveToFirst()) {
-                // We found an existing participant in the database
-                id = cursor.getString(0);
-                synchronized (sSubIdtoParticipantIdCache) {
-                    // Add it to the cache for next time
-                    sSubIdtoParticipantIdCache.put(subId, id);
-                }
-            }
-        }
-        return id;
-    }
-
-    private void maybeSetupUnknownSender() {
-        if (isUnknownSender()) {
-            // Because your locale may change, we setup the display string for the unknown sender
-            // on the fly rather than relying on the version in the database.
-            final Resources resources = Factory.get().getApplicationContext().getResources();
-            mDisplayDestination = resources.getString(R.string.unknown_sender);
-            mFullName = mDisplayDestination;
-        }
-    }
-
-    public String getNormalizedDestination() {
-        return mNormalizedDestination;
-    }
-
-    public String getSendDestination() {
-        return mSendDestination;
-    }
-
-    public String getDisplayDestination() {
-        return mDisplayDestination;
-    }
-
-    public String getContactDestination() {
-        return mContactDestination;
-    }
-
-    public String getFullName() {
-        return mFullName;
-    }
-
-    public String getFirstName() {
-        return mFirstName;
-    }
-
-    public String getDisplayName(final boolean preferFullName) {
-        if (preferFullName) {
-            // Prefer full name over first name
-            if (!TextUtils.isEmpty(mFullName)) {
-                return mFullName;
-            }
-            if (!TextUtils.isEmpty(mFirstName)) {
-                return mFirstName;
-            }
-        } else {
-            // Prefer first name over full name
-            if (!TextUtils.isEmpty(mFirstName)) {
-                return mFirstName;
-            }
-            if (!TextUtils.isEmpty(mFullName)) {
-                return mFullName;
-            }
-        }
-
-        // Fallback to the display destination
-        if (!TextUtils.isEmpty(mDisplayDestination)) {
-            return mDisplayDestination;
-        }
-
-        return Factory.get().getApplicationContext().getResources().getString(
-                R.string.unknown_sender);
-    }
-
-    public String getProfilePhotoUri() {
-        return mProfilePhotoUri;
-    }
-
-    public long getContactId() {
-        return mContactId;
-    }
-
-    public String getLookupKey() {
-        return mLookupKey;
-    }
-
-    public boolean updatePhoneNumberForSelfIfChanged() {
-        final String phoneNumber =
-                PhoneUtils.get(mSubId).getCanonicalForSelf(true/*allowOverride*/);
-        boolean changed = false;
-        if (isSelf() && !TextUtils.equals(phoneNumber, mNormalizedDestination)) {
-            mNormalizedDestination = phoneNumber;
-            mSendDestination = phoneNumber;
-            mDisplayDestination = mIsEmailAddress ?
-                    phoneNumber :
-                    PhoneUtils.getDefault().formatForDisplay(phoneNumber);
-            changed = true;
-        }
-        return changed;
-    }
-
-    public boolean updateSubscriptionInfoForSelfIfChanged(final SubscriptionInfo subscriptionInfo) {
-        boolean changed = false;
-        if (isSelf()) {
-            if (subscriptionInfo == null) {
-                // The subscription is inactive. Check if the participant is still active.
-                if (isActiveSubscription()) {
-                    mSlotId = INVALID_SLOT_ID;
-                    mSubscriptionColor = Color.TRANSPARENT;
-                    mSubscriptionName = "";
-                    changed = true;
-                }
-            } else {
-                final int slotId = subscriptionInfo.getSimSlotIndex();
-                final int color = subscriptionInfo.getIconTint();
-                final CharSequence name = subscriptionInfo.getDisplayName();
-                if (mSlotId != slotId || mSubscriptionColor != color || mSubscriptionName != name) {
-                    mSlotId = slotId;
-                    mSubscriptionColor = color;
-                    mSubscriptionName = name.toString();
-                    changed = true;
-                }
-            }
-        }
-        return changed;
-    }
-
-    public void setFullName(final String fullName) {
-        mFullName = fullName;
-    }
-
-    public void setFirstName(final String firstName) {
-        mFirstName = firstName;
-    }
-
-    public void setProfilePhotoUri(final String profilePhotoUri) {
-        mProfilePhotoUri = profilePhotoUri;
-    }
-
-    public void setContactId(final long contactId) {
-        mContactId = contactId;
-    }
-
-    public void setLookupKey(final String lookupKey) {
-        mLookupKey = lookupKey;
-    }
-
-    public void setSendDestination(final String destination) {
-        mSendDestination = destination;
-    }
-
-    public void setContactDestination(final String destination) {
-        mContactDestination = destination;
-    }
-
-    public int getSubId() {
-        return mSubId;
-    }
-
-    /**
-     * @return whether this sub is active. Note that {@link ParticipantData#DEFAULT_SELF_SUB_ID} is
-     *         is considered as active if there is any active SIM.
-     */
-    public boolean isActiveSubscription() {
-        return mSlotId != INVALID_SLOT_ID;
-    }
-
-    public boolean isDefaultSelf() {
-        return mSubId == ParticipantData.DEFAULT_SELF_SUB_ID;
-    }
-
-    public int getSlotId() {
-        return mSlotId;
-    }
-
-    /**
-     * Slot IDs in the subscription manager is zero-based, but we want to show it
-     * as 1-based in UI.
-     */
-    public int getDisplaySlotId() {
-        return getSlotId() + 1;
-    }
-
-    public int getSubscriptionColor() {
-        Assert.isTrue(isActiveSubscription());
-        // Force the alpha channel to 0xff to ensure the returned color is solid.
-        return mSubscriptionColor | 0xff000000;
-    }
-
-    public String getSubscriptionName() {
-        Assert.isTrue(isActiveSubscription());
-        return mSubscriptionName;
-    }
-
-    public String getId() {
-        return mParticipantId;
-    }
-
-    public boolean isSelf() {
-        return (mSubId != OTHER_THAN_SELF_SUB_ID);
-    }
-
-    public boolean isEmail() {
-        return mIsEmailAddress;
-    }
-
-    public boolean isContactIdResolved() {
-        return (mContactId != PARTICIPANT_CONTACT_ID_NOT_RESOLVED);
-    }
-
-    public boolean isBlocked() {
-        return mBlocked;
-    }
-
-    public boolean isUnknownSender() {
-        final String unknownSender = ParticipantData.getUnknownSenderDestination();
-        return (TextUtils.equals(mSendDestination, unknownSender));
-    }
-
-    public ContentValues toContentValues() {
-        final ContentValues values = new ContentValues();
-        values.put(ParticipantColumns.SUB_ID, mSubId);
-        values.put(ParticipantColumns.SIM_SLOT_ID, mSlotId);
-        values.put(DatabaseHelper.ParticipantColumns.SEND_DESTINATION, mSendDestination);
-
-        if (!isUnknownSender()) {
-            values.put(DatabaseHelper.ParticipantColumns.DISPLAY_DESTINATION, mDisplayDestination);
-            values.put(DatabaseHelper.ParticipantColumns.NORMALIZED_DESTINATION,
-                    mNormalizedDestination);
-            values.put(ParticipantColumns.FULL_NAME, mFullName);
-            values.put(ParticipantColumns.FIRST_NAME, mFirstName);
-        }
-
-        values.put(ParticipantColumns.PROFILE_PHOTO_URI, mProfilePhotoUri);
-        values.put(ParticipantColumns.CONTACT_ID, mContactId);
-        values.put(ParticipantColumns.LOOKUP_KEY, mLookupKey);
-        values.put(ParticipantColumns.BLOCKED, mBlocked);
-        values.put(ParticipantColumns.SUBSCRIPTION_COLOR, mSubscriptionColor);
-        values.put(ParticipantColumns.SUBSCRIPTION_NAME, mSubscriptionName);
-        return values;
-    }
-
-    public ParticipantData(final Parcel in) {
-        mParticipantId = in.readString();
-        mSubId = in.readInt();
-        mSlotId = in.readInt();
-        mNormalizedDestination = in.readString();
-        mSendDestination = in.readString();
-        mDisplayDestination = in.readString();
-        mFullName = in.readString();
-        mFirstName = in.readString();
-        mProfilePhotoUri = in.readString();
-        mContactId = in.readLong();
-        mLookupKey = in.readString();
-        mIsEmailAddress = in.readInt() != 0;
-        mBlocked = in.readInt() != 0;
-        mSubscriptionColor = in.readInt();
-        mSubscriptionName = in.readString();
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(final Parcel dest, final int flags) {
-        dest.writeString(mParticipantId);
-        dest.writeInt(mSubId);
-        dest.writeInt(mSlotId);
-        dest.writeString(mNormalizedDestination);
-        dest.writeString(mSendDestination);
-        dest.writeString(mDisplayDestination);
-        dest.writeString(mFullName);
-        dest.writeString(mFirstName);
-        dest.writeString(mProfilePhotoUri);
-        dest.writeLong(mContactId);
-        dest.writeString(mLookupKey);
-        dest.writeInt(mIsEmailAddress ? 1 : 0);
-        dest.writeInt(mBlocked ? 1 : 0);
-        dest.writeInt(mSubscriptionColor);
-        dest.writeString(mSubscriptionName);
-    }
-
-    public static final Parcelable.Creator<ParticipantData> CREATOR
-    = new Parcelable.Creator<ParticipantData>() {
-        @Override
-        public ParticipantData createFromParcel(final Parcel in) {
-            return new ParticipantData(in);
-        }
-
-        @Override
-        public ParticipantData[] newArray(final int size) {
-            return new ParticipantData[size];
-        }
-    };
-}
diff --git a/src/com/android/messaging/datamodel/data/ParticipantListItemData.java b/src/com/android/messaging/datamodel/data/ParticipantListItemData.java
deleted file mode 100644
index f6c9b5f..0000000
--- a/src/com/android/messaging/datamodel/data/ParticipantListItemData.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.action.BugleActionToasts;
-import com.android.messaging.datamodel.action.UpdateDestinationBlockedAction;
-import com.android.messaging.util.AvatarUriUtil;
-
-/**
- * Helps visualize a ParticipantData in a PersonItemView
- */
-public class ParticipantListItemData extends PersonItemData {
-    private final Uri mAvatarUri;
-    private final String mDisplayName;
-    private final String mDetails;
-    private final long mContactId;
-    private final String mLookupKey;
-    private final String mNormalizedDestination;
-
-    /**
-     * Constructor. Takes necessary info from the incoming ParticipantData.
-     */
-    public ParticipantListItemData(final ParticipantData participant) {
-        mAvatarUri = AvatarUriUtil.createAvatarUri(participant);
-        mContactId = participant.getContactId();
-        mLookupKey = participant.getLookupKey();
-        mNormalizedDestination = participant.getNormalizedDestination();
-        if (TextUtils.isEmpty(participant.getFullName())) {
-            mDisplayName = participant.getSendDestination();
-            mDetails = null;
-        } else {
-            mDisplayName = participant.getFullName();
-            mDetails = (participant.isUnknownSender()) ? null : participant.getSendDestination();
-        }
-    }
-
-    @Override
-    public Uri getAvatarUri() {
-        return mAvatarUri;
-    }
-
-    @Override
-    public String getDisplayName() {
-        return mDisplayName;
-    }
-
-    @Override
-    public String getDetails() {
-        return mDetails;
-    }
-
-    @Override
-    public Intent getClickIntent() {
-        return null;
-    }
-
-    @Override
-    public long getContactId() {
-        return mContactId;
-    }
-
-    @Override
-    public String getLookupKey() {
-        return mLookupKey;
-    }
-
-    @Override
-    public String getNormalizedDestination() {
-        return mNormalizedDestination;
-    }
-
-    public void unblock(final Context context) {
-        UpdateDestinationBlockedAction.updateDestinationBlocked(
-                mNormalizedDestination, false, null,
-                BugleActionToasts.makeUpdateDestinationBlockedActionListener(context));
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/PendingAttachmentData.java b/src/com/android/messaging/datamodel/data/PendingAttachmentData.java
deleted file mode 100644
index a5b5460..0000000
--- a/src/com/android/messaging/datamodel/data/PendingAttachmentData.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import androidx.annotation.NonNull;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.util.UriUtil;
-
-/**
- * Represents a "pending" message part that acts as a placeholder for the actual attachment being
- * loaded. It handles the task to load and persist the attachment from a Uri to local scratch
- * folder. This item is not persisted to the database.
- */
-public class PendingAttachmentData extends MessagePartData {
-    /** The pending state. This is the initial state where we haven't started loading yet */
-    public static final int STATE_PENDING = 0;
-
-    /** The state for when we are currently loading the attachment to the scratch space */
-    public static final int STATE_LOADING = 1;
-
-    /** The attachment has been successfully loaded and no longer pending */
-    public static final int STATE_LOADED = 2;
-
-    /** The attachment failed to load */
-    public static final int STATE_FAILED = 3;
-
-    private static final int LOAD_MEDIA_TIME_LIMIT_MILLIS = 60 * 1000;  // 60s
-
-    /** The current state of the pending attachment. Refer to the STATE_* states above */
-    private int mCurrentState;
-
-    /**
-     * Create a new instance of PendingAttachmentData with an output Uri.
-     * @param sourceUri the source Uri of the attachment. The Uri maybe temporary or remote,
-     * so we need to persist it to local storage.
-     */
-    protected PendingAttachmentData(final String caption, final String contentType,
-            @NonNull final Uri sourceUri, final int width, final int height,
-            final boolean onlySingleAttachment) {
-        super(caption, contentType, sourceUri, width, height, onlySingleAttachment);
-        mCurrentState = STATE_PENDING;
-    }
-
-    /**
-     * Creates a pending attachment data that is able to load from the given source uri and
-     * persist the media resource locally in the scratch folder.
-     */
-    public static PendingAttachmentData createPendingAttachmentData(final String contentType,
-            final Uri sourceUri) {
-        return createPendingAttachmentData(null, contentType, sourceUri, UNSPECIFIED_SIZE,
-                UNSPECIFIED_SIZE);
-    }
-
-    public static PendingAttachmentData createPendingAttachmentData(final String caption,
-            final String contentType, final Uri sourceUri, final int width, final int height) {
-        Assert.isTrue(ContentType.isMediaType(contentType));
-        return new PendingAttachmentData(caption, contentType, sourceUri, width, height,
-                false /*onlySingleAttachment*/);
-    }
-
-    public static PendingAttachmentData createPendingAttachmentData(final String caption,
-            final String contentType, final Uri sourceUri, final int width, final int height,
-            final boolean onlySingleAttachment) {
-        Assert.isTrue(ContentType.isMediaType(contentType));
-        return new PendingAttachmentData(caption, contentType, sourceUri, width, height,
-                onlySingleAttachment);
-    }
-
-    public int getCurrentState() {
-        return mCurrentState;
-    }
-
-    public void loadAttachmentForDraft(final DraftMessageData draftMessageData,
-            final String bindingId) {
-        if (mCurrentState != STATE_PENDING) {
-            return;
-        }
-        mCurrentState = STATE_LOADING;
-
-        // Kick off a SafeAsyncTask to load the content of the media and persist it locally.
-        // Note: we need to persist the media locally even if it's not remote, because we
-        // want to be able to resend the media in case the message failed to send.
-        new SafeAsyncTask<Void, Void, MessagePartData>(LOAD_MEDIA_TIME_LIMIT_MILLIS,
-                true /* cancelExecutionOnTimeout */) {
-            @Override
-            protected MessagePartData doInBackgroundTimed(final Void... params) {
-                final Uri contentUri = getContentUri();
-                final Uri persistedUri = UriUtil.persistContentToScratchSpace(contentUri);
-                if (persistedUri != null) {
-                    return MessagePartData.createMediaMessagePart(
-                            getText(),
-                            getContentType(),
-                            persistedUri,
-                            getWidth(),
-                            getHeight());
-                }
-                return null;
-            }
-
-            @Override
-            protected void onCancelled() {
-                LogUtil.w(LogUtil.BUGLE_TAG, "Timeout while retrieving media");
-                mCurrentState = STATE_FAILED;
-                if (draftMessageData.isBound(bindingId)) {
-                    draftMessageData.removePendingAttachment(PendingAttachmentData.this);
-                }
-            }
-
-            @Override
-            protected void onPostExecute(final MessagePartData attachment) {
-                if (attachment != null) {
-                    mCurrentState = STATE_LOADED;
-                    if (draftMessageData.isBound(bindingId)) {
-                        draftMessageData.updatePendingAttachment(attachment,
-                                PendingAttachmentData.this);
-                    } else {
-                        // The draft message data is no longer bound, drop the loaded attachment.
-                        attachment.destroyAsync();
-                    }
-                } else {
-                    // Media load failed. We already logged in doInBackground() so don't need to
-                    // do that again.
-                    mCurrentState = STATE_FAILED;
-                    if (draftMessageData.isBound(bindingId)) {
-                        draftMessageData.onPendingAttachmentLoadFailed(PendingAttachmentData.this);
-                        draftMessageData.removePendingAttachment(PendingAttachmentData.this);
-                    }
-                }
-            }
-        }.executeOnThreadPool();
-    }
-
-    protected PendingAttachmentData(final Parcel in) {
-        super(in);
-        mCurrentState = in.readInt();
-    }
-
-    @Override
-    public void writeToParcel(final Parcel out, final int flags) {
-        super.writeToParcel(out, flags);
-        out.writeInt(mCurrentState);
-    }
-
-    public static final Parcelable.Creator<PendingAttachmentData> CREATOR
-        = new Parcelable.Creator<PendingAttachmentData>() {
-            @Override
-            public PendingAttachmentData createFromParcel(final Parcel in) {
-                return new PendingAttachmentData(in);
-            }
-
-            @Override
-            public PendingAttachmentData[] newArray(final int size) {
-                return new PendingAttachmentData[size];
-            }
-        };
-}
diff --git a/src/com/android/messaging/datamodel/data/PeopleAndOptionsData.java b/src/com/android/messaging/datamodel/data/PeopleAndOptionsData.java
deleted file mode 100644
index 650a037..0000000
--- a/src/com/android/messaging/datamodel/data/PeopleAndOptionsData.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.app.LoaderManager;
-import android.content.Context;
-import android.content.Loader;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-
-import com.android.messaging.datamodel.BoundCursorLoader;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.action.BugleActionToasts;
-import com.android.messaging.datamodel.action.UpdateConversationOptionsAction;
-import com.android.messaging.datamodel.action.UpdateDestinationBlockedAction;
-import com.android.messaging.datamodel.binding.BindableData;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-import java.util.List;
-
-/**
- * Services data needs for PeopleAndOptionsFragment.
- */
-public class PeopleAndOptionsData extends BindableData implements
-        LoaderManager.LoaderCallbacks<Cursor> {
-    public interface PeopleAndOptionsDataListener {
-        void onOptionsCursorUpdated(PeopleAndOptionsData data, Cursor cursor);
-        void onParticipantsListLoaded(PeopleAndOptionsData data,
-                List<ParticipantData> participants);
-    }
-
-    private static final String BINDING_ID = "bindingId";
-    private final Context mContext;
-    private final String mConversationId;
-    private final ConversationParticipantsData mParticipantData;
-    private LoaderManager mLoaderManager;
-    private PeopleAndOptionsDataListener mListener;
-
-    public PeopleAndOptionsData(final String conversationId, final Context context,
-            final PeopleAndOptionsDataListener listener) {
-        mListener = listener;
-        mContext = context;
-        mConversationId = conversationId;
-        mParticipantData = new ConversationParticipantsData();
-    }
-
-    private static final int CONVERSATION_OPTIONS_LOADER = 1;
-    private static final int PARTICIPANT_LOADER = 2;
-
-    @Override
-    public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
-        final String bindingId = args.getString(BINDING_ID);
-        // Check if data still bound to the requesting ui element
-        if (isBound(bindingId)) {
-            switch (id) {
-                case CONVERSATION_OPTIONS_LOADER: {
-                    final Uri uri =
-                            MessagingContentProvider.buildConversationMetadataUri(mConversationId);
-                    return new BoundCursorLoader(bindingId, mContext, uri,
-                            PeopleOptionsItemData.PROJECTION, null, null, null);
-                }
-
-                case PARTICIPANT_LOADER: {
-                    final Uri uri =
-                            MessagingContentProvider
-                                    .buildConversationParticipantsUri(mConversationId);
-                    return new BoundCursorLoader(bindingId, mContext, uri,
-                            ParticipantData.ParticipantsQuery.PROJECTION, null, null, null);
-                }
-
-                default:
-                    Assert.fail("Unknown loader id for PeopleAndOptionsFragment!");
-                    break;
-            }
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Loader created after unbinding PeopleAndOptionsFragment");
-        }
-        return null;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onLoadFinished(final Loader<Cursor> loader, final Cursor data) {
-        final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader;
-        if (isBound(cursorLoader.getBindingId())) {
-            switch (loader.getId()) {
-                case CONVERSATION_OPTIONS_LOADER:
-                    mListener.onOptionsCursorUpdated(this, data);
-                    break;
-
-                case PARTICIPANT_LOADER:
-                    mParticipantData.bind(data);
-                    mListener.onParticipantsListLoaded(this,
-                            mParticipantData.getParticipantListExcludingSelf());
-                    break;
-
-                default:
-                    Assert.fail("Unknown loader id for PeopleAndOptionsFragment!");
-                    break;
-            }
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG,
-                    "Loader finished after unbinding PeopleAndOptionsFragment");
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void onLoaderReset(final Loader<Cursor> loader) {
-        final BoundCursorLoader cursorLoader = (BoundCursorLoader) loader;
-        if (isBound(cursorLoader.getBindingId())) {
-            switch (loader.getId()) {
-                case CONVERSATION_OPTIONS_LOADER:
-                    mListener.onOptionsCursorUpdated(this, null);
-                    break;
-
-                case PARTICIPANT_LOADER:
-                    mParticipantData.bind(null);
-                    break;
-
-                default:
-                    Assert.fail("Unknown loader id for PeopleAndOptionsFragment!");
-                    break;
-            }
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Loader reset after unbinding PeopleAndOptionsFragment");
-        }
-    }
-
-    public void init(final LoaderManager loaderManager,
-            final BindingBase<PeopleAndOptionsData> binding) {
-        final Bundle args = new Bundle();
-        args.putString(BINDING_ID, binding.getBindingId());
-        mLoaderManager = loaderManager;
-        mLoaderManager.initLoader(CONVERSATION_OPTIONS_LOADER, args, this);
-        mLoaderManager.initLoader(PARTICIPANT_LOADER, args, this);
-    }
-
-    @Override
-    protected void unregisterListeners() {
-        mListener = null;
-
-        // This could be null if we bind but the caller doesn't init the BindableData
-        if (mLoaderManager != null) {
-            mLoaderManager.destroyLoader(CONVERSATION_OPTIONS_LOADER);
-            mLoaderManager.destroyLoader(PARTICIPANT_LOADER);
-            mLoaderManager = null;
-        }
-    }
-
-    public void enableConversationNotifications(final BindingBase<PeopleAndOptionsData> binding,
-            final boolean enable) {
-        final String bindingId = binding.getBindingId();
-        if (isBound(bindingId)) {
-            UpdateConversationOptionsAction.enableConversationNotifications(
-                    mConversationId, enable);
-        }
-    }
-
-    public void setConversationNotificationSound(final BindingBase<PeopleAndOptionsData> binding,
-            final String ringtoneUri) {
-        final String bindingId = binding.getBindingId();
-        if (isBound(bindingId)) {
-            UpdateConversationOptionsAction.setConversationNotificationSound(mConversationId,
-                    ringtoneUri);
-        }
-    }
-
-    public void enableConversationNotificationVibration(
-            final BindingBase<PeopleAndOptionsData> binding, final boolean enable) {
-        final String bindingId = binding.getBindingId();
-        if (isBound(bindingId)) {
-            UpdateConversationOptionsAction.enableVibrationForConversationNotification(
-                    mConversationId, enable);
-        }
-    }
-
-    public void setDestinationBlocked(final BindingBase<PeopleAndOptionsData> binding,
-            final boolean blocked) {
-        final String bindingId = binding.getBindingId();
-        final ParticipantData participantData = mParticipantData.getOtherParticipant();
-        if (isBound(bindingId) && participantData != null) {
-            UpdateDestinationBlockedAction.updateDestinationBlocked(
-                    participantData.getNormalizedDestination(),
-                    blocked, mConversationId,
-                    BugleActionToasts.makeUpdateDestinationBlockedActionListener(mContext));
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/PeopleOptionsItemData.java b/src/com/android/messaging/datamodel/data/PeopleOptionsItemData.java
deleted file mode 100644
index 5af6a30..0000000
--- a/src/com/android/messaging/datamodel/data/PeopleOptionsItemData.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.media.Ringtone;
-import android.media.RingtoneManager;
-import android.net.Uri;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ConversationListItemData.ConversationListViewColumns;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.RingtoneUtil;
-
-public class PeopleOptionsItemData {
-    public static final String[] PROJECTION = {
-        ConversationListViewColumns.NOTIFICATION_ENABLED,
-        ConversationListViewColumns.NOTIFICATION_SOUND_URI,
-        ConversationListViewColumns.NOTIFICATION_VIBRATION,
-    };
-
-    // Column index for query projection.
-    private static final int INDEX_NOTIFICATION_ENABLED = 0;
-    private static final int INDEX_NOTIFICATION_SOUND_URI = 1;
-    private static final int INDEX_NOTIFICATION_VIBRATION = 2;
-
-    // Identification for each setting that's surfaced to the UI layer.
-    public static final int SETTING_NOTIFICATION_ENABLED = 0;
-    public static final int SETTING_NOTIFICATION_SOUND_URI = 1;
-    public static final int SETTING_NOTIFICATION_VIBRATION = 2;
-    public static final int SETTING_BLOCKED = 3;
-    public static final int SETTINGS_COUNT = 4;
-
-    // Type of UI switch to show for the toggle button.
-    public static final int TOGGLE_TYPE_CHECKBOX = 0;
-    public static final int TOGGLE_TYPE_SWITCH = 1;
-
-    private String mTitle;
-    private String mSubtitle;
-    private Uri mRingtoneUri;
-    private boolean mCheckable;
-    private boolean mChecked;
-    private boolean mEnabled;
-    private int mItemId;
-    private ParticipantData mOtherParticipant;
-
-    private final Context mContext;
-
-    public PeopleOptionsItemData(final Context context) {
-        mContext = context;
-    }
-
-    /**
-     * Bind to a specific setting column on conversation metadata cursor. (Note
-     * that it binds to columns because it treats individual columns of the cursor as
-     * separate options to display for the conversation, e.g. notification settings).
-     */
-    public void bind(
-            final Cursor cursor, final ParticipantData otherParticipant, final int settingType) {
-        mSubtitle = null;
-        mRingtoneUri = null;
-        mCheckable = true;
-        mEnabled = true;
-        mItemId = settingType;
-        mOtherParticipant = otherParticipant;
-
-        final boolean notificationEnabled = cursor.getInt(INDEX_NOTIFICATION_ENABLED) == 1;
-        switch (settingType) {
-            case SETTING_NOTIFICATION_ENABLED:
-                mTitle = mContext.getString(R.string.notifications_enabled_conversation_pref_title);
-                mChecked = notificationEnabled;
-                break;
-
-            case SETTING_NOTIFICATION_SOUND_URI:
-                mTitle = mContext.getString(R.string.notification_sound_pref_title);
-                final String ringtoneString = cursor.getString(INDEX_NOTIFICATION_SOUND_URI);
-                Uri ringtoneUri = RingtoneUtil.getNotificationRingtoneUri(ringtoneString);
-
-                mSubtitle = mContext.getString(R.string.silent_ringtone);
-                if (ringtoneUri != null) {
-                    final Ringtone ringtone = RingtoneManager.getRingtone(mContext, ringtoneUri);
-                    if (ringtone != null) {
-                        mSubtitle = ringtone.getTitle(mContext);
-                    }
-                }
-                mCheckable = false;
-                mRingtoneUri = ringtoneUri;
-                mEnabled = notificationEnabled;
-                break;
-
-            case SETTING_NOTIFICATION_VIBRATION:
-                mTitle = mContext.getString(R.string.notification_vibrate_pref_title);
-                mChecked = cursor.getInt(INDEX_NOTIFICATION_VIBRATION) == 1;
-                mEnabled = notificationEnabled;
-                break;
-
-            case SETTING_BLOCKED:
-                Assert.notNull(otherParticipant);
-                final int resourceId = otherParticipant.isBlocked() ?
-                        R.string.unblock_contact_title : R.string.block_contact_title;
-                mTitle = mContext.getString(resourceId, otherParticipant.getDisplayDestination());
-                mCheckable = false;
-                break;
-
-             default:
-                 Assert.fail("Unsupported conversation option type!");
-        }
-    }
-
-    public String getTitle() {
-        return mTitle;
-    }
-
-    public String getSubtitle() {
-        return mSubtitle;
-    }
-
-    public boolean getCheckable() {
-        return mCheckable;
-    }
-
-    public boolean getChecked() {
-        return mChecked;
-    }
-
-    public boolean getEnabled() {
-        return mEnabled;
-    }
-
-    public int getItemId() {
-        return mItemId;
-    }
-
-    public Uri getRingtoneUri() {
-        return mRingtoneUri;
-    }
-
-    public ParticipantData getOtherParticipant() {
-        return mOtherParticipant;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/PersonItemData.java b/src/com/android/messaging/datamodel/data/PersonItemData.java
deleted file mode 100644
index a0a1ce8..0000000
--- a/src/com/android/messaging/datamodel/data/PersonItemData.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.content.Intent;
-import android.net.Uri;
-
-import com.android.messaging.datamodel.binding.BindableData;
-
-/**
- * Bridges between any particpant/contact related data and data displayed in the PersonItemView.
- */
-public abstract class PersonItemData extends BindableData {
-    /**
-     * The UI component that listens for data change and update accordingly.
-     */
-    public interface PersonItemDataListener {
-        void onPersonDataUpdated(PersonItemData data);
-        void onPersonDataFailed(PersonItemData data, Exception exception);
-    }
-
-    private PersonItemDataListener mListener;
-
-    public abstract Uri getAvatarUri();
-    public abstract String getDisplayName();
-    public abstract String getDetails();
-    public abstract Intent getClickIntent();
-    public abstract long getContactId();
-    public abstract String getLookupKey();
-    public abstract String getNormalizedDestination();
-
-    public void setListener(final PersonItemDataListener listener) {
-        if (isBound()) {
-            mListener = listener;
-        }
-    }
-
-    protected void notifyDataUpdated() {
-        if (isBound() && mListener != null) {
-            mListener.onPersonDataUpdated(this);
-        }
-    }
-
-    protected void notifyDataFailed(final Exception exception) {
-        if (isBound() && mListener != null) {
-            mListener.onPersonDataFailed(this, exception);
-        }
-    }
-
-    @Override
-    protected void unregisterListeners() {
-        mListener = null;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/SelfParticipantsData.java b/src/com/android/messaging/datamodel/data/SelfParticipantsData.java
deleted file mode 100644
index f389a78..0000000
--- a/src/com/android/messaging/datamodel/data/SelfParticipantsData.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.database.Cursor;
-import androidx.collection.ArrayMap;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import com.android.messaging.util.OsUtil;
-
-/**
- * A class that contains the list of all self participants potentially involved in a conversation.
- * This class contains both active/inactive self entries when there is multi-SIM support.
- */
-public class SelfParticipantsData {
-    /**
-     * The map from self participant ids to self-participant data entries in the participants table.
-     * This includes both active, inactive and default (with subId ==
-     * {@link ParticipantData#DEFAULT_SELF_SUB_ID}) subscriptions.
-     */
-    private final ArrayMap<String, ParticipantData> mSelfParticipantMap;
-
-    public SelfParticipantsData() {
-        mSelfParticipantMap = new ArrayMap<String, ParticipantData>();
-    }
-
-    public void bind(final Cursor cursor) {
-        mSelfParticipantMap.clear();
-        if (cursor != null) {
-            while (cursor.moveToNext()) {
-                final ParticipantData newParticipant = ParticipantData.getFromCursor(cursor);
-                mSelfParticipantMap.put(newParticipant.getId(), newParticipant);
-            }
-        }
-    }
-
-    /**
-     * Gets the list of self participants for all subscriptions.
-     * @param activeOnly if set, returns active self entries only (i.e. those with SIMs plugged in).
-     */
-    public List<ParticipantData> getSelfParticipants(final boolean activeOnly) {
-         List<ParticipantData> list = new ArrayList<ParticipantData>();
-        for (final ParticipantData self : mSelfParticipantMap.values()) {
-            if (!activeOnly || self.isActiveSubscription()) {
-                list.add(self);
-            }
-        }
-        Collections.sort(
-                list,
-                new Comparator() {
-                    public int compare(Object o1, Object o2) {
-                        int slotId1 = ((ParticipantData) o1).getSlotId();
-                        int slotId2 = ((ParticipantData) o2).getSlotId();
-                        return slotId1 > slotId2 ? 1 : -1;
-                    }
-                });
-        return list;
-    }
-
-    /**
-     * Gets the self participant corresponding to the given self id.
-     */
-    ParticipantData getSelfParticipantById(final String selfId) {
-        return mSelfParticipantMap.get(selfId);
-    }
-
-    /**
-     * Returns if a given self id represents the default self.
-     */
-    boolean isDefaultSelf(final String selfId) {
-        if (!OsUtil.isAtLeastL_MR1()) {
-            return true;
-        }
-        final ParticipantData self = getSelfParticipantById(selfId);
-        return self == null ? false : self.getSubId() == ParticipantData.DEFAULT_SELF_SUB_ID;
-    }
-
-    public int getSelfParticipantsCountExcludingDefault(final boolean activeOnly) {
-        int count = 0;
-        for (final ParticipantData self : mSelfParticipantMap.values()) {
-            if (!self.isDefaultSelf() && (!activeOnly || self.isActiveSubscription())) {
-                count++;
-            }
-        }
-        return count;
-    }
-
-    public ParticipantData getDefaultSelfParticipant() {
-        for (final ParticipantData self : mSelfParticipantMap.values()) {
-            if (self.isDefaultSelf()) {
-                return self;
-            }
-        }
-        return null;
-    }
-
-    boolean isLoaded() {
-        return !mSelfParticipantMap.isEmpty();
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/SettingsData.java b/src/com/android/messaging/datamodel/data/SettingsData.java
deleted file mode 100644
index 7474619..0000000
--- a/src/com/android/messaging/datamodel/data/SettingsData.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.app.LoaderManager;
-import android.content.Context;
-import android.content.Loader;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.text.TextUtils;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.BoundCursorLoader;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.binding.BindableData;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Services SettingsFragment's data needs for loading active self participants to display
- * the list of active subscriptions.
- */
-public class SettingsData extends BindableData implements
-        LoaderManager.LoaderCallbacks<Cursor> {
-    public interface SettingsDataListener {
-        void onSelfParticipantDataLoaded(SettingsData data);
-    }
-
-    public static class SettingsItem {
-        public static final int TYPE_GENERAL_SETTINGS = 1;
-        public static final int TYPE_PER_SUBSCRIPTION_SETTINGS = 2;
-
-        private final String mDisplayName;
-        private final String mDisplayDetail;
-        private final String mActivityTitle;
-        private final int mType;
-        private final int mSubId;
-
-        private SettingsItem(final String displayName, final String displayDetail,
-                final String activityTitle, final int type, final int subId) {
-            mDisplayName = displayName;
-            mDisplayDetail = displayDetail;
-            mActivityTitle = activityTitle;
-            mType = type;
-            mSubId = subId;
-        }
-
-        public String getDisplayName() {
-            return mDisplayName;
-        }
-
-        public String getDisplayDetail() {
-            return mDisplayDetail;
-        }
-
-        public int getType() {
-            return mType;
-        }
-
-        public int getSubId() {
-            return mSubId;
-        }
-
-        public String getActivityTitle() {
-            return mActivityTitle;
-        }
-
-        public static SettingsItem fromSelfParticipant(final Context context,
-                final ParticipantData self) {
-            Assert.isTrue(self.isSelf());
-            Assert.isTrue(self.isActiveSubscription());
-            final String displayDetail = TextUtils.isEmpty(self.getDisplayDestination()) ?
-                    context.getString(R.string.sim_settings_unknown_number) :
-                        self.getDisplayDestination();
-            final String displayName = context.getString(R.string.sim_specific_settings,
-                    self.getSubscriptionName());
-            return new SettingsItem(displayName, displayDetail, displayName,
-                    TYPE_PER_SUBSCRIPTION_SETTINGS, self.getSubId());
-        }
-
-        public static SettingsItem createGeneralSettingsItem(final Context context) {
-            return new SettingsItem(context.getString(R.string.general_settings),
-                    null, context.getString(R.string.general_settings_activity_title),
-                    TYPE_GENERAL_SETTINGS, -1);
-        }
-
-        public static SettingsItem createDefaultMmsSettingsItem(final Context context,
-                final int subId) {
-            return new SettingsItem(context.getString(R.string.advanced_settings),
-                    null, context.getString(R.string.advanced_settings_activity_title),
-                    TYPE_PER_SUBSCRIPTION_SETTINGS, subId);
-        }
-    }
-
-    private static final String BINDING_ID = "bindingId";
-    private final Context mContext;
-    private final SelfParticipantsData mSelfParticipantsData;
-    private LoaderManager mLoaderManager;
-    private SettingsDataListener mListener;
-
-    public SettingsData(final Context context,
-            final SettingsDataListener listener) {
-        mListener = listener;
-        mContext = context;
-        mSelfParticipantsData = new SelfParticipantsData();
-    }
-
-    private static final int SELF_PARTICIPANT_LOADER = 1;
-
-    @Override
-    public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
-        Assert.equals(SELF_PARTICIPANT_LOADER, id);
-        Loader<Cursor> loader = null;
-
-        final String bindingId = args.getString(BINDING_ID);
-        // Check if data still bound to the requesting ui element
-        if (isBound(bindingId)) {
-            loader = new BoundCursorLoader(bindingId, mContext,
-                    MessagingContentProvider.PARTICIPANTS_URI,
-                    ParticipantData.ParticipantsQuery.PROJECTION,
-                    ParticipantColumns.SUB_ID + " <> ?",
-                    new String[] { String.valueOf(ParticipantData.OTHER_THAN_SELF_SUB_ID) },
-                    null);
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Creating self loader after unbinding");
-        }
-        return loader;
-    }
-
-    @Override
-    public void onLoadFinished(final Loader<Cursor> generic, final Cursor data) {
-        final BoundCursorLoader loader = (BoundCursorLoader) generic;
-
-        // Check if data still bound to the requesting ui element
-        if (isBound(loader.getBindingId())) {
-            mSelfParticipantsData.bind(data);
-            mListener.onSelfParticipantDataLoaded(this);
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Self loader finished after unbinding");
-        }
-    }
-
-    @Override
-    public void onLoaderReset(final Loader<Cursor> generic) {
-        final BoundCursorLoader loader = (BoundCursorLoader) generic;
-
-        // Check if data still bound to the requesting ui element
-        if (isBound(loader.getBindingId())) {
-            mSelfParticipantsData.bind(null);
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Self loader reset after unbinding");
-        }
-    }
-
-    public void init(final LoaderManager loaderManager,
-            final BindingBase<SettingsData> binding) {
-        final Bundle args = new Bundle();
-        args.putString(BINDING_ID, binding.getBindingId());
-        mLoaderManager = loaderManager;
-        mLoaderManager.initLoader(SELF_PARTICIPANT_LOADER, args, this);
-    }
-
-    @Override
-    protected void unregisterListeners() {
-        mListener = null;
-
-        // This could be null if we bind but the caller doesn't init the BindableData
-        if (mLoaderManager != null) {
-            mLoaderManager.destroyLoader(SELF_PARTICIPANT_LOADER);
-            mLoaderManager = null;
-        }
-    }
-
-    public List<SettingsItem> getSettingsItems() {
-        final List<ParticipantData> selfs = mSelfParticipantsData.getSelfParticipants(true);
-        final List<SettingsItem> settingsItems = new ArrayList<SettingsItem>();
-        // First goes the general settings, followed by per-subscription settings.
-        settingsItems.add(SettingsItem.createGeneralSettingsItem(mContext));
-        // For per-subscription settings, show the actual SIM name with phone number if the
-        // platorm is at least L-MR1 and there are multiple active SIMs.
-        final int activeSubCountExcludingDefault =
-                mSelfParticipantsData.getSelfParticipantsCountExcludingDefault(true);
-        if (OsUtil.isAtLeastL_MR1() && activeSubCountExcludingDefault > 0) {
-            for (ParticipantData self : selfs) {
-                if (!self.isDefaultSelf()) {
-                    if (activeSubCountExcludingDefault > 1) {
-                        settingsItems.add(SettingsItem.fromSelfParticipant(mContext, self));
-                    } else {
-                        // This is the only active non-default SIM.
-                        settingsItems.add(SettingsItem.createDefaultMmsSettingsItem(mContext,
-                                self.getSubId()));
-                        break;
-                    }
-                }
-            }
-        } else {
-            // Either pre-L-MR1, or there's no active SIM, so show the default MMS settings.
-            settingsItems.add(SettingsItem.createDefaultMmsSettingsItem(mContext,
-                    ParticipantData.DEFAULT_SELF_SUB_ID));
-        }
-        return settingsItems;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/SubscriptionListData.java b/src/com/android/messaging/datamodel/data/SubscriptionListData.java
deleted file mode 100644
index b5d4e4b..0000000
--- a/src/com/android/messaging/datamodel/data/SubscriptionListData.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.content.Context;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * This is a UI facing data model component that holds a list of
- * {@link SubscriptionListData.SubscriptionListEntry}'s, one for each *active* subscriptions.
- *
- * This is used to:
- * 1) Show a list of SIMs in the SIM Selector
- * 2) Show the currently selected SIM in the compose message view
- * 3) Show SIM indicators on conversation message views
- *
- * It builds on top of SelfParticipantsData and performs additional logic such as determining
- * the set of icons to use for the individual Subs.
- */
-public class SubscriptionListData {
-    /**
-     * Represents a single sub that backs UI.
-     */
-    public static class SubscriptionListEntry {
-        public final String selfParticipantId;
-        public final Uri iconUri;
-        public final Uri selectedIconUri;
-        public final String displayName;
-        public final int displayColor;
-        public final String displayDestination;
-
-        private SubscriptionListEntry(final String selfParticipantId, final Uri iconUri,
-                final Uri selectedIconUri, final String displayName, final int displayColor,
-                final String displayDestination) {
-            this.selfParticipantId = selfParticipantId;
-            this.iconUri = iconUri;
-            this.selectedIconUri = selectedIconUri;
-            this.displayName = displayName;
-            this.displayColor = displayColor;
-            this.displayDestination = displayDestination;
-        }
-
-        static SubscriptionListEntry fromSelfParticipantData(
-                final ParticipantData selfParticipantData, final Context context) {
-            Assert.isTrue(selfParticipantData.isSelf());
-            Assert.isTrue(selfParticipantData.isActiveSubscription());
-            final int slotId = selfParticipantData.getDisplaySlotId();
-            final String iconIdentifier = String.format(Locale.getDefault(), "%d", slotId);
-            final String subscriptionName = selfParticipantData.getSubscriptionName();
-            final String displayName = TextUtils.isEmpty(subscriptionName) ?
-                    context.getString(R.string.sim_slot_identifier, slotId) : subscriptionName;
-            return new SubscriptionListEntry(selfParticipantData.getId(),
-                    AvatarUriUtil.createAvatarUri(selfParticipantData, iconIdentifier,
-                            false /* selected */, false /* incoming */),
-                    AvatarUriUtil.createAvatarUri(selfParticipantData, iconIdentifier,
-                            true /* selected */, false /* incoming */),
-                    displayName, selfParticipantData.getSubscriptionColor(),
-                    selfParticipantData.getDisplayDestination());
-        }
-    }
-
-    private final List<SubscriptionListEntry> mEntriesExcludingDefault;
-    private SubscriptionListEntry mDefaultEntry;
-    private final Context mContext;
-
-    public SubscriptionListData(final Context context) {
-        mEntriesExcludingDefault = new ArrayList<SubscriptionListEntry>();
-        mContext = context;
-    }
-
-    public void bind(final List<ParticipantData> subs) {
-        mEntriesExcludingDefault.clear();
-        mDefaultEntry = null;
-        for (final ParticipantData sub : subs) {
-            final SubscriptionListEntry entry =
-                    SubscriptionListEntry.fromSelfParticipantData(sub, mContext);
-            if (!sub.isDefaultSelf()) {
-                mEntriesExcludingDefault.add(entry);
-            } else {
-                mDefaultEntry = entry;
-            }
-        }
-    }
-
-    public List<SubscriptionListEntry> getActiveSubscriptionEntriesExcludingDefault() {
-        return mEntriesExcludingDefault;
-    }
-
-    public SubscriptionListEntry getActiveSubscriptionEntryBySelfId(final String selfId,
-            final boolean excludeDefault) {
-        if (mDefaultEntry != null && TextUtils.equals(mDefaultEntry.selfParticipantId, selfId)) {
-            return excludeDefault ? null : mDefaultEntry;
-        }
-
-        for (final SubscriptionListEntry entry : mEntriesExcludingDefault) {
-            if (TextUtils.equals(entry.selfParticipantId, selfId)) {
-                return entry;
-            }
-        }
-        return null;
-    }
-
-    public boolean hasData() {
-        return !mEntriesExcludingDefault.isEmpty() || mDefaultEntry != null;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/data/VCardContactItemData.java b/src/com/android/messaging/datamodel/data/VCardContactItemData.java
deleted file mode 100644
index 8abf493..0000000
--- a/src/com/android/messaging/datamodel/data/VCardContactItemData.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.media.BindableMediaRequest;
-import com.android.messaging.datamodel.media.MediaRequest;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.datamodel.media.MediaResourceManager.MediaResourceLoadListener;
-import com.android.messaging.datamodel.media.VCardRequestDescriptor;
-import com.android.messaging.datamodel.media.VCardResource;
-import com.android.messaging.datamodel.media.VCardResourceEntry;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.ContactUtil;
-
-import java.util.List;
-
-/**
- * Data class for visualizing and loading data for a VCard contact.
- */
-public class VCardContactItemData extends PersonItemData
-        implements MediaResourceLoadListener<VCardResource> {
-    private final Context mContext;
-    private final Uri mVCardUri;
-    private String mDetails;
-    private final Binding<BindableMediaRequest<VCardResource>> mBinding =
-            BindingBase.createBinding(this);
-    private VCardResource mVCardResource;
-
-    private static final Uri sDefaultAvatarUri =
-            AvatarUriUtil.createAvatarUri(null, null, null, null);
-
-    /**
-     * Constructor. This parses data from the given MessagePartData describing the vcard
-     */
-    public VCardContactItemData(final Context context, final MessagePartData messagePartData) {
-        this(context, messagePartData.getContentUri());
-        Assert.isTrue(messagePartData.isVCard());
-    }
-
-    /**
-     * Constructor. This parses data from the given VCard Uri
-     */
-    public VCardContactItemData(final Context context, final Uri vCardUri) {
-        mContext = context;
-        mDetails = mContext.getString(R.string.loading_vcard);
-        mVCardUri = vCardUri;
-    }
-
-    @Override
-    public Uri getAvatarUri() {
-        if (hasValidVCard()) {
-            final List<VCardResourceEntry> vcards = mVCardResource.getVCards();
-            Assert.isTrue(vcards.size() > 0);
-            if (vcards.size() == 1) {
-                return vcards.get(0).getAvatarUri();
-            }
-        }
-        return sDefaultAvatarUri;
-    }
-
-    @Override
-    public String getDisplayName() {
-        if (hasValidVCard()) {
-            final List<VCardResourceEntry> vcards = mVCardResource.getVCards();
-            Assert.isTrue(vcards.size() > 0);
-            if (vcards.size() == 1) {
-                return vcards.get(0).getDisplayName();
-            } else {
-                return mContext.getResources().getQuantityString(
-                        R.plurals.vcard_multiple_display_name, vcards.size(), vcards.size());
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public String getDetails() {
-        return mDetails;
-    }
-
-    @Override
-    public Intent getClickIntent() {
-        return null;
-    }
-
-    @Override
-    public long getContactId() {
-        return ContactUtil.INVALID_CONTACT_ID;
-    }
-
-    @Override
-    public String getLookupKey() {
-        return null;
-    }
-
-    @Override
-    public String getNormalizedDestination() {
-        return null;
-    }
-
-    public VCardResource getVCardResource() {
-        return hasValidVCard() ? mVCardResource : null;
-    }
-
-    public Uri getVCardUri() {
-        return hasValidVCard() ? mVCardUri : null;
-    }
-
-    public boolean hasValidVCard() {
-        return isBound() && mVCardResource != null;
-    }
-
-    @Override
-    public void bind(final String bindingId) {
-        super.bind(bindingId);
-
-        // Bind and request the VCard from media resource manager.
-        mBinding.bind(new VCardRequestDescriptor(mVCardUri).buildAsyncMediaRequest(mContext, this));
-        MediaResourceManager.get().requestMediaResourceAsync(mBinding.getData());
-    }
-
-    @Override
-    public void unbind(final String bindingId) {
-        super.unbind(bindingId);
-        mBinding.unbind();
-        if (mVCardResource != null) {
-            mVCardResource.release();
-            mVCardResource = null;
-        }
-    }
-
-    @Override
-    public boolean equals(final Object o) {
-        if (this == o) {
-            return true;
-        }
-
-        if (!(o instanceof VCardContactItemData)) {
-            return false;
-        }
-
-        final VCardContactItemData lhs = (VCardContactItemData) o;
-        return mVCardUri.equals(lhs.mVCardUri);
-    }
-
-    @Override
-    public void onMediaResourceLoaded(final MediaRequest<VCardResource> request,
-            final VCardResource resource, final boolean isCached) {
-        Assert.isTrue(mVCardResource == null);
-        mBinding.ensureBound();
-        mDetails = mContext.getString(R.string.vcard_tap_hint);
-        mVCardResource = resource;
-        mVCardResource.addRef();
-        notifyDataUpdated();
-    }
-
-    @Override
-    public void onMediaResourceLoadError(final MediaRequest<VCardResource> request,
-            final Exception exception) {
-        mBinding.ensureBound();
-        mDetails = mContext.getString(R.string.failed_loading_vcard);
-        notifyDataFailed(exception);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/AsyncMediaRequestWrapper.java b/src/com/android/messaging/datamodel/media/AsyncMediaRequestWrapper.java
deleted file mode 100644
index 380d93c..0000000
--- a/src/com/android/messaging/datamodel/media/AsyncMediaRequestWrapper.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import com.android.messaging.datamodel.media.MediaResourceManager.MediaResourceLoadListener;
-
-import java.util.List;
-
-/**
- * A mix-in style class that wraps around a normal, threading-agnostic MediaRequest object with
- * functionalities offered by {@link BindableMediaRequest} to allow for async processing.
- */
-class AsyncMediaRequestWrapper<T extends RefCountedMediaResource> extends BindableMediaRequest<T> {
-
-    /**
-     * Create a new async media request wrapper instance given the listener.
-     */
-    public static <T extends RefCountedMediaResource> AsyncMediaRequestWrapper<T>
-            createWith(final MediaRequest<T> wrappedRequest,
-                    final MediaResourceLoadListener<T> listener) {
-        return new AsyncMediaRequestWrapper<T>(listener, wrappedRequest);
-    }
-
-    private final MediaRequest<T> mWrappedRequest;
-
-    private AsyncMediaRequestWrapper(final MediaResourceLoadListener<T> listener,
-            final MediaRequest<T> wrappedRequest) {
-        super(listener);
-        mWrappedRequest = wrappedRequest;
-    }
-
-    @Override
-    public String getKey() {
-        return mWrappedRequest.getKey();
-    }
-
-    @Override
-    public MediaCache<T> getMediaCache() {
-        return mWrappedRequest.getMediaCache();
-    }
-
-    @Override
-    public int getRequestType() {
-        return mWrappedRequest.getRequestType();
-    }
-
-    @Override
-    public T loadMediaBlocking(List<MediaRequest<T>> chainedTask) throws Exception {
-        return mWrappedRequest.loadMediaBlocking(chainedTask);
-    }
-
-    @Override
-    public int getCacheId() {
-        return mWrappedRequest.getCacheId();
-    }
-
-    @Override
-    public MediaRequestDescriptor<T> getDescriptor() {
-        return mWrappedRequest.getDescriptor();
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/datamodel/media/AvatarGroupRequestDescriptor.java b/src/com/android/messaging/datamodel/media/AvatarGroupRequestDescriptor.java
deleted file mode 100644
index 719b296..0000000
--- a/src/com/android/messaging/datamodel/media/AvatarGroupRequestDescriptor.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.graphics.RectF;
-import android.net.Uri;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class AvatarGroupRequestDescriptor extends CompositeImageRequestDescriptor {
-    private static final int MAX_GROUP_SIZE = 4;
-
-    public AvatarGroupRequestDescriptor(final Uri uri, final int desiredWidth,
-            final int desiredHeight) {
-        this(convertToDescriptor(uri, desiredWidth, desiredHeight), desiredWidth, desiredHeight);
-    }
-
-    public AvatarGroupRequestDescriptor(final List<? extends ImageRequestDescriptor> descriptors,
-            final int desiredWidth, final int desiredHeight) {
-        super(descriptors, desiredWidth, desiredHeight);
-        Assert.isTrue(descriptors.size() <= MAX_GROUP_SIZE);
-    }
-
-    private static List<? extends ImageRequestDescriptor> convertToDescriptor(final Uri uri,
-            final int desiredWidth, final int desiredHeight) {
-        final List<String> participantUriStrings = AvatarUriUtil.getGroupParticipantUris(uri);
-        final List<AvatarRequestDescriptor> avatarDescriptors =
-                new ArrayList<AvatarRequestDescriptor>(participantUriStrings.size());
-        for (final String uriString : participantUriStrings) {
-            final AvatarRequestDescriptor descriptor = new AvatarRequestDescriptor(
-                    Uri.parse(uriString), desiredWidth, desiredHeight);
-            avatarDescriptors.add(descriptor);
-        }
-        return avatarDescriptors;
-    }
-
-    @Override
-    public CompositeImageRequest<?> buildBatchImageRequest(final Context context) {
-        return new CompositeImageRequest<AvatarGroupRequestDescriptor>(context, this);
-    }
-
-    @Override
-    public List<RectF> getChildRequestTargetRects() {
-        return Arrays.asList(generateDestRectArray());
-    }
-
-    /**
-     * Generates an array of {@link RectF} which represents where each of the individual avatar
-     * should be located in the final group avatar image. The location of each avatar depends on
-     * the size of the group and the size of the overall group avatar size.
-     */
-    private RectF[] generateDestRectArray() {
-        final int groupSize = mDescriptors.size();
-        final float width = desiredWidth;
-        final float height = desiredHeight;
-        final float halfWidth = width / 2F;
-        final float halfHeight = height / 2F;
-        final RectF[] destArray = new RectF[groupSize];
-        switch (groupSize) {
-            case 2:
-                /**
-                 * +-------+
-                 * | 0 |   |
-                 * +-------+
-                 * |   | 1 |
-                 * +-------+
-                 *
-                 * We want two circles which touches in the center. To get this we know that the
-                 * diagonal of the overall group avatar is squareRoot(2) * w We also know that the
-                 * two circles touches the at the center of the overall group avatar and the
-                 * distance from the center of the circle to the corner of the group avatar is
-                 * radius * squareRoot(2). Therefore, the following emerges.
-                 *
-                 * w * squareRoot(2) = 2 (radius + radius * squareRoot(2))
-                 * Solving for radius we get:
-                 * d = 2 * radius = ( squareRoot(2) / (squareRoot(2) + 1)) * w
-                 * d = (2 - squareRoot(2)) * w
-                 */
-                final float diameter = (float) ((2 - Math.sqrt(2)) * width);
-                destArray[0] = new RectF(0, 0, diameter, diameter);
-                destArray[1] = new RectF(width - diameter, height - diameter, width, height);
-                break;
-            case 3:
-                /**
-                 * +-------+
-                 * | | 0 | |
-                 * +-------+
-                 * | 1 | 2 |
-                 * +-------+
-                 *   i0
-                 *   |\
-                 * a | \ c
-                 *   --- i2
-                 *    b
-                 *
-                 * a = radius * squareRoot(3) due to the triangle being a 30-60-90 right triangle.
-                 * b = radius of circle
-                 * c = 2 * radius of circle
-                 *
-                 * All three of the images are circles and therefore image zero will not touch
-                 * image one or image two. Move image zero down so it touches image one and image
-                 * two. This can be done by keeping image zero in the center and moving it down
-                 * slightly. The amount to move down can be calculated by solving a right triangle.
-                 * We know that the center x of image two to the center x of image zero is the
-                 * radius of the circle, this is the length of edge b. Also we know that the
-                 * distance from image zero to image two's center is 2 * radius, edge c. From this
-                 * we know that the distance from center y of image two to center y of image one,
-                 * edge a, is equal to radius * squareRoot(3) due to this triangle being a 30-60-90
-                 * right triangle.
-                 */
-                final float quarterWidth = width / 4F;
-                final float threeQuarterWidth = 3 * quarterWidth;
-                final float radius = height / 4F;
-                final float imageTwoCenterY = height - radius;
-                final float lengthOfEdgeA = (float) (radius * Math.sqrt(3));
-                final float imageZeroCenterY = imageTwoCenterY - lengthOfEdgeA;
-                final float imageZeroTop = imageZeroCenterY - radius;
-                final float imageZeroBottom = imageZeroCenterY + radius;
-                destArray[0] = new RectF(
-                        quarterWidth, imageZeroTop, threeQuarterWidth, imageZeroBottom);
-                destArray[1] = new RectF(0, halfHeight, halfWidth, height);
-                destArray[2] = new RectF(halfWidth, halfHeight, width, height);
-                break;
-            default:
-                /**
-                 * +-------+
-                 * | 0 | 1 |
-                 * +-------+
-                 * | 2 | 3 |
-                 * +-------+
-                 */
-                destArray[0] = new RectF(0, 0, halfWidth, halfHeight);
-                destArray[1] = new RectF(halfWidth, 0, width, halfHeight);
-                destArray[2] = new RectF(0, halfHeight, halfWidth, height);
-                destArray[3] = new RectF(halfWidth, halfHeight, width, height);
-                break;
-        }
-        return destArray;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/AvatarRequest.java b/src/com/android/messaging/datamodel/media/AvatarRequest.java
deleted file mode 100644
index 6a738c7..0000000
--- a/src/com/android/messaging/datamodel/media/AvatarRequest.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Typeface;
-import android.graphics.drawable.BitmapDrawable;
-import android.media.ExifInterface;
-import android.net.Uri;
-
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.UriUtil;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-
-public class AvatarRequest extends UriImageRequest<AvatarRequestDescriptor> {
-    private static Bitmap sDefaultPersonBitmap;
-    private static Bitmap sDefaultPersonBitmapLarge;
-
-    public AvatarRequest(final Context context,
-            final AvatarRequestDescriptor descriptor) {
-        super(context, descriptor);
-    }
-
-    @Override
-    protected InputStream getInputStreamForResource() throws FileNotFoundException {
-        if (UriUtil.isLocalResourceUri(mDescriptor.uri)) {
-            return super.getInputStreamForResource();
-        } else {
-            final Uri primaryUri = AvatarUriUtil.getPrimaryUri(mDescriptor.uri);
-            Assert.isTrue(UriUtil.isLocalResourceUri(primaryUri));
-            return mContext.getContentResolver().openInputStream(primaryUri);
-        }
-    }
-
-    /**
-     * We can load multiple types of images for avatars depending on the uri. The uri should be
-     * built by {@link com.android.messaging.util.AvatarUriUtil} which will decide on
-     * what uri to build based on the available profile photo and name. Here we will check if the
-     * image is a local resource (ie profile photo uri), if the resource isn't a local one we will
-     * generate a tile with the first letter of the name.
-     */
-    @Override
-    protected ImageResource loadMediaInternal(List<MediaRequest<ImageResource>> chainedTasks)
-            throws IOException {
-        Assert.isNotMainThread();
-        String avatarType = AvatarUriUtil.getAvatarType(mDescriptor.uri);
-        Bitmap bitmap = null;
-        int orientation = ExifInterface.ORIENTATION_NORMAL;
-        final boolean isLocalResourceUri = UriUtil.isLocalResourceUri(mDescriptor.uri) ||
-                AvatarUriUtil.TYPE_LOCAL_RESOURCE_URI.equals(avatarType);
-        if (isLocalResourceUri) {
-            try {
-                ImageResource imageResource = super.loadMediaInternal(chainedTasks);
-                bitmap = imageResource.getBitmap();
-                orientation = imageResource.mOrientation;
-            } catch (Exception ex) {
-                // If we encountered any exceptions trying to load the local avatar resource,
-                // fall back to generated avatar.
-                LogUtil.w(LogUtil.BUGLE_IMAGE_TAG, "AvatarRequest: failed to load local avatar " +
-                        "resource, switching to fallback rendering", ex);
-            }
-        }
-
-        final int width = mDescriptor.desiredWidth;
-        final int height = mDescriptor.desiredHeight;
-        // Check to see if we already got the bitmap. If not get a fallback avatar
-        if (bitmap == null) {
-            Uri generatedUri = mDescriptor.uri;
-            if (isLocalResourceUri) {
-                // If we are here, we just failed to load the local resource. Use the fallback Uri
-                // if possible.
-                generatedUri = AvatarUriUtil.getFallbackUri(mDescriptor.uri);
-                if (generatedUri == null) {
-                    // No fallback Uri was provided, use the default avatar.
-                    generatedUri = AvatarUriUtil.DEFAULT_BACKGROUND_AVATAR;
-                }
-            }
-
-            avatarType = AvatarUriUtil.getAvatarType(generatedUri);
-            if (AvatarUriUtil.TYPE_LETTER_TILE_URI.equals(avatarType)) {
-                final String name = AvatarUriUtil.getName(generatedUri);
-                bitmap = renderLetterTile(name, width, height);
-            } else {
-                bitmap = renderDefaultAvatar(width, height);
-            }
-        }
-        return new DecodedImageResource(getKey(), bitmap, orientation);
-    }
-
-    private Bitmap renderDefaultAvatar(final int width, final int height) {
-        final Bitmap bitmap = getBitmapPool().createOrReuseBitmap(width, height,
-                getBackgroundColor());
-        final Canvas canvas = new Canvas(bitmap);
-
-        if (sDefaultPersonBitmap == null) {
-            final BitmapDrawable defaultPerson = (BitmapDrawable) mContext.getResources()
-                    .getDrawable(R.drawable.ic_person_light);
-            sDefaultPersonBitmap = defaultPerson.getBitmap();
-        }
-        if (sDefaultPersonBitmapLarge == null) {
-            final BitmapDrawable largeDefaultPerson = (BitmapDrawable) mContext.getResources()
-                    .getDrawable(R.drawable.ic_person_light_large);
-            sDefaultPersonBitmapLarge = largeDefaultPerson.getBitmap();
-        }
-
-        Bitmap defaultPerson = null;
-        if (mDescriptor.isWearBackground) {
-            final BitmapDrawable wearDefaultPerson = (BitmapDrawable) mContext.getResources()
-                    .getDrawable(R.drawable.ic_person_wear);
-            defaultPerson = wearDefaultPerson.getBitmap();
-        } else {
-            final boolean isLargeDefault = (width > sDefaultPersonBitmap.getWidth()) ||
-                    (height > sDefaultPersonBitmap.getHeight());
-            defaultPerson =
-                    isLargeDefault ? sDefaultPersonBitmapLarge : sDefaultPersonBitmap;
-        }
-
-        final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        final Matrix matrix = new Matrix();
-        final RectF source = new RectF(0, 0, defaultPerson.getWidth(), defaultPerson.getHeight());
-        final RectF dest = new RectF(0, 0, width, height);
-        matrix.setRectToRect(source, dest, Matrix.ScaleToFit.FILL);
-
-        canvas.drawBitmap(defaultPerson, matrix, paint);
-
-        return bitmap;
-    }
-
-    private Bitmap renderLetterTile(final String name, final int width, final int height) {
-        final float halfWidth = width / 2;
-        final float halfHeight = height / 2;
-        final int minOfWidthAndHeight = Math.min(width, height);
-        final Bitmap bitmap = getBitmapPool().createOrReuseBitmap(width, height,
-                getBackgroundColor());
-        final Resources resources = mContext.getResources();
-        final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        paint.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
-        paint.setColor(resources.getColor(R.color.letter_tile_font_color));
-        final float letterToTileRatio = resources.getFraction(R.dimen.letter_to_tile_ratio, 1, 1);
-        paint.setTextSize(letterToTileRatio * minOfWidthAndHeight);
-
-        final String firstCharString = name.substring(0, 1).toUpperCase();
-        final Rect textBound = new Rect();
-        paint.getTextBounds(firstCharString, 0, 1, textBound);
-
-        final Canvas canvas = new Canvas(bitmap);
-        final float xOffset = halfWidth - textBound.centerX();
-        final float yOffset = halfHeight - textBound.centerY();
-        canvas.drawText(firstCharString, xOffset, yOffset, paint);
-
-        return bitmap;
-    }
-
-    private int getBackgroundColor() {
-        return mContext.getResources().getColor(R.color.primary_color);
-    }
-
-    @Override
-    public int getCacheId() {
-        return BugleMediaCacheManager.AVATAR_IMAGE_CACHE;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/AvatarRequestDescriptor.java b/src/com/android/messaging/datamodel/media/AvatarRequestDescriptor.java
deleted file mode 100644
index 9afa9ad..0000000
--- a/src/com/android/messaging/datamodel/media/AvatarRequestDescriptor.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.net.Uri;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.UriUtil;
-
-public class AvatarRequestDescriptor extends UriImageRequestDescriptor {
-    final boolean isWearBackground;
-
-    public AvatarRequestDescriptor(final Uri uri, final int desiredWidth,
-            final int desiredHeight) {
-        this(uri, desiredWidth, desiredHeight, true /* cropToCircle */);
-    }
-
-    public AvatarRequestDescriptor(final Uri uri, final int desiredWidth,
-            final int desiredHeight, final boolean cropToCircle) {
-        this(uri, desiredWidth, desiredHeight, cropToCircle, false /* isWearBackground */);
-    }
-
-    public AvatarRequestDescriptor(final Uri uri, final int desiredWidth,
-            final int desiredHeight, boolean cropToCircle, boolean isWearBackground) {
-        super(uri, desiredWidth, desiredHeight, false /* allowCompression */, true /* isStatic */,
-                cropToCircle,
-                ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
-        Assert.isTrue(uri == null || UriUtil.isLocalResourceUri(uri) ||
-                AvatarUriUtil.isAvatarUri(uri));
-        this.isWearBackground = isWearBackground;
-    }
-
-    @Override
-    public MediaRequest<ImageResource> buildSyncMediaRequest(final Context context) {
-        final String avatarType = uri == null ? null : AvatarUriUtil.getAvatarType(uri);
-        if (AvatarUriUtil.TYPE_SIM_SELECTOR_URI.equals(avatarType)) {
-            return new SimSelectorAvatarRequest(context, this);
-        } else {
-            return new AvatarRequest(context, this);
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/BindableMediaRequest.java b/src/com/android/messaging/datamodel/media/BindableMediaRequest.java
deleted file mode 100644
index d979323..0000000
--- a/src/com/android/messaging/datamodel/media/BindableMediaRequest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import com.android.messaging.datamodel.binding.BindableOnceData;
-import com.android.messaging.datamodel.media.MediaResourceManager.MediaResourceLoadListener;
-
-/**
- * The {@link MediaRequest} interface is threading-model-oblivious, allowing the implementations to
- * be processed synchronously or asynchronously.
- * This is a {@link MediaRequest} implementation that includes functionalities such as binding and
- * event callbacks for multi-threaded media request processing.
- */
-public abstract class BindableMediaRequest<T extends RefCountedMediaResource>
-        extends BindableOnceData
-        implements MediaRequest<T>, MediaResourceLoadListener<T> {
-    private MediaResourceLoadListener<T> mListener;
-
-    public BindableMediaRequest(final MediaResourceLoadListener<T> listener) {
-        mListener = listener;
-    }
-
-    /**
-     * Delegates the media resource callback to the listener. Performs binding check to ensure
-     * the listener is still bound to this request.
-     */
-    @Override
-    public void onMediaResourceLoaded(final MediaRequest<T> request, final T resource,
-            final boolean cached) {
-        if (isBound() && mListener != null) {
-            mListener.onMediaResourceLoaded(request, resource, cached);
-        }
-    }
-
-    /**
-     * Delegates the media resource callback to the listener. Performs binding check to ensure
-     * the listener is still bound to this request.
-     */
-    @Override
-    public void onMediaResourceLoadError(final MediaRequest<T> request, final Exception exception) {
-        if (isBound() && mListener != null) {
-            mListener.onMediaResourceLoadError(request, exception);
-        }
-    }
-
-    @Override
-    protected void unregisterListeners() {
-        mListener = null;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/BugleMediaCacheManager.java b/src/com/android/messaging/datamodel/media/BugleMediaCacheManager.java
deleted file mode 100644
index c41ba60..0000000
--- a/src/com/android/messaging/datamodel/media/BugleMediaCacheManager.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import com.android.messaging.util.Assert;
-
-/**
- * An implementation of {@link MediaCacheManager} that creates caches specific to Bugle's needs.
- *
- * To create a new type of cache, add to the list of cache ids and create a new MediaCache<>
- * for your cache id / media resource type in createMediaCacheById().
- */
-public class BugleMediaCacheManager extends MediaCacheManager {
-    // List of available cache ids.
-    public static final int DEFAULT_IMAGE_CACHE = 1;
-    public static final int AVATAR_IMAGE_CACHE = 2;
-    public static final int VCARD_CACHE = 3;
-
-    // VCard cache size - we compute the size by count, not by bytes.
-    private static final int VCARD_CACHE_SIZE = 5;
-    private static final int SHARED_IMAGE_CACHE_SIZE = 1024 * 10;   // 10MB
-
-    @Override
-    protected MediaCache<?> createMediaCacheById(final int id) {
-        switch (id) {
-            case DEFAULT_IMAGE_CACHE:
-                return new PoolableImageCache(SHARED_IMAGE_CACHE_SIZE, id, "DefaultImageCache");
-
-            case AVATAR_IMAGE_CACHE:
-                return new PoolableImageCache(id, "AvatarImageCache");
-
-            case VCARD_CACHE:
-                return new MediaCache<VCardResource>(VCARD_CACHE_SIZE, id, "VCardCache");
-
-            default:
-                Assert.fail("BugleMediaCacheManager: unsupported cache id " + id);
-                break;
-        }
-        return null;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/CompositeImageRequest.java b/src/com/android/messaging/datamodel/media/CompositeImageRequest.java
deleted file mode 100644
index 66f1bff..0000000
--- a/src/com/android/messaging/datamodel/media/CompositeImageRequest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.RectF;
-import android.media.ExifInterface;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ImageUtils;
-
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.util.List;
-
-/**
- * Requests a composite image resource. The composite image resource is constructed by first
- * sequentially requesting a number of sub image resources specified by
- * {@link CompositeImageRequestDescriptor#getChildRequestDescriptors()}. After this, the
- * individual sub images are composed into the final image onto their respective target rects
- * returned by {@link CompositeImageRequestDescriptor#getChildRequestTargetRects()}.
- */
-public class CompositeImageRequest<D extends CompositeImageRequestDescriptor>
-        extends ImageRequest<D> {
-    private final Bitmap mBitmap;
-    private final Canvas mCanvas;
-    private final Paint mPaint;
-
-    public CompositeImageRequest(final Context context, final D descriptor) {
-        super(context, descriptor);
-        mBitmap = getBitmapPool().createOrReuseBitmap(
-                mDescriptor.desiredWidth, mDescriptor.desiredHeight);
-        mCanvas = new Canvas(mBitmap);
-        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
-    }
-
-    @Override
-    protected ImageResource loadMediaInternal(List<MediaRequest<ImageResource>> chainedTask) {
-        final List<? extends ImageRequestDescriptor> descriptors =
-                mDescriptor.getChildRequestDescriptors();
-        final List<RectF> targetRects = mDescriptor.getChildRequestTargetRects();
-        Assert.equals(descriptors.size(), targetRects.size());
-        Assert.isTrue(descriptors.size() > 1);
-
-        for (int i = 0; i < descriptors.size(); i++) {
-            final MediaRequest<ImageResource> request =
-                    descriptors.get(i).buildSyncMediaRequest(mContext);
-            // Synchronously request the child image.
-            final ImageResource resource =
-                    MediaResourceManager.get().requestMediaResourceSync(request);
-            if (resource != null) {
-                try {
-                    final RectF avatarDestOnGroup = targetRects.get(i);
-
-                    // Draw the bitmap into a smaller size with a circle mask.
-                    final Bitmap resourceBitmap = resource.getBitmap();
-                    final RectF resourceRect = new RectF(
-                            0, 0, resourceBitmap.getWidth(), resourceBitmap.getHeight());
-                    final Bitmap smallCircleBitmap = getBitmapPool().createOrReuseBitmap(
-                            Math.round(avatarDestOnGroup.width()),
-                            Math.round(avatarDestOnGroup.height()));
-                    final RectF smallCircleRect = new RectF(
-                            0, 0, smallCircleBitmap.getWidth(), smallCircleBitmap.getHeight());
-                    final Canvas smallCircleCanvas = new Canvas(smallCircleBitmap);
-                    ImageUtils.drawBitmapWithCircleOnCanvas(resource.getBitmap(), smallCircleCanvas,
-                            resourceRect, smallCircleRect, null /* bitmapPaint */,
-                            false /* fillBackground */,
-                            ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                            ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
-                    final Matrix matrix = new Matrix();
-                    matrix.setRectToRect(smallCircleRect, avatarDestOnGroup,
-                            Matrix.ScaleToFit.FILL);
-                    mCanvas.drawBitmap(smallCircleBitmap, matrix, mPaint);
-                } finally {
-                    resource.release();
-                }
-            }
-        }
-
-        return new DecodedImageResource(getKey(), mBitmap, ExifInterface.ORIENTATION_NORMAL);
-    }
-
-    @Override
-    public int getCacheId() {
-        return BugleMediaCacheManager.AVATAR_IMAGE_CACHE;
-    }
-
-    @Override
-    protected InputStream getInputStreamForResource() throws FileNotFoundException {
-        throw new IllegalStateException("Composite image request doesn't support input stream!");
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/CompositeImageRequestDescriptor.java b/src/com/android/messaging/datamodel/media/CompositeImageRequestDescriptor.java
deleted file mode 100644
index 071130e..0000000
--- a/src/com/android/messaging/datamodel/media/CompositeImageRequestDescriptor.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.graphics.RectF;
-
-import com.google.common.base.Joiner;
-
-import java.util.List;
-
-public abstract class CompositeImageRequestDescriptor extends ImageRequestDescriptor {
-    protected final List<? extends ImageRequestDescriptor> mDescriptors;
-    private final String mKey;
-
-    public CompositeImageRequestDescriptor(final List<? extends ImageRequestDescriptor> descriptors,
-            final int desiredWidth, final int desiredHeight) {
-        super(desiredWidth, desiredHeight);
-        mDescriptors = descriptors;
-
-        final String[] keyParts = new String[descriptors.size()];
-        for (int i = 0; i < descriptors.size(); i++) {
-            keyParts[i] = descriptors.get(i).getKey();
-        }
-        mKey = Joiner.on(",").skipNulls().join(keyParts);
-    }
-
-    /**
-     * Gets a key that uniquely identify all the underlying image resource to be loaded (e.g. Uri or
-     * file path).
-     */
-    @Override
-    public String getKey() {
-        return mKey;
-    }
-
-    public List<? extends ImageRequestDescriptor> getChildRequestDescriptors(){
-        return mDescriptors;
-    }
-
-    public abstract List<RectF> getChildRequestTargetRects();
-    public abstract CompositeImageRequest<?> buildBatchImageRequest(final Context context);
-
-    @Override
-    public MediaRequest<ImageResource> buildSyncMediaRequest(final Context context) {
-        return buildBatchImageRequest(context);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/CustomVCardEntry.java b/src/com/android/messaging/datamodel/media/CustomVCardEntry.java
deleted file mode 100644
index 965259f..0000000
--- a/src/com/android/messaging/datamodel/media/CustomVCardEntry.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.accounts.Account;
-import androidx.collection.ArrayMap;
-
-import com.android.vcard.VCardEntry;
-import com.android.vcard.VCardProperty;
-
-import java.util.Map;
-
-/**
- * Class which extends VCardEntry to add support for unknown properties.  Currently there is a TODO
- * to add this in the VCardEntry code, but we have to extend it to add the needed support
- */
-public class CustomVCardEntry extends VCardEntry {
-    // List of properties keyed by their name for easy lookup
-    private final Map<String, VCardProperty> mAllProperties;
-
-    public CustomVCardEntry(int vCardType, Account account) {
-        super(vCardType, account);
-        mAllProperties = new ArrayMap<String, VCardProperty>();
-    }
-
-    @Override
-    public void addProperty(VCardProperty property) {
-        super.addProperty(property);
-        mAllProperties.put(property.getName(), property);
-    }
-
-    public VCardProperty getProperty(String name) {
-        return mAllProperties.get(name);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/CustomVCardEntryConstructor.java b/src/com/android/messaging/datamodel/media/CustomVCardEntryConstructor.java
deleted file mode 100644
index 06b10a3..0000000
--- a/src/com/android/messaging/datamodel/media/CustomVCardEntryConstructor.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.accounts.Account;
-import com.android.vcard.VCardConfig;
-import com.android.vcard.VCardInterpreter;
-import com.android.vcard.VCardProperty;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class CustomVCardEntryConstructor implements VCardInterpreter {
-
-    public interface EntryHandler {
-        /**
-         * Called when the parsing started.
-         */
-        public void onStart();
-
-        /**
-         * The method called when one vCard entry is created. Children come before their parent in
-         * nested vCard files.
-         *
-         * e.g.
-         * In the following vCard, the entry for "entry2" comes before one for "entry1".
-         * <code>
-         * BEGIN:VCARD
-         * N:entry1
-         * BEGIN:VCARD
-         * N:entry2
-         * END:VCARD
-         * END:VCARD
-         * </code>
-         */
-        public void onEntryCreated(final CustomVCardEntry entry);
-
-        /**
-         * Called when the parsing ended.
-         * Able to be use this method for showing performance log, etc.
-         */
-        public void onEnd();
-    }
-
-    /**
-     * Represents current stack of VCardEntry. Used to support nested vCard (vCard 2.1).
-     */
-    private final List<CustomVCardEntry> mEntryStack = new ArrayList<CustomVCardEntry>();
-    private CustomVCardEntry mCurrentEntry;
-
-    private final int mVCardType;
-    private final Account mAccount;
-
-    private final List<EntryHandler> mEntryHandlers = new ArrayList<EntryHandler>();
-
-    public CustomVCardEntryConstructor() {
-        this(VCardConfig.VCARD_TYPE_V21_GENERIC, null);
-    }
-
-    public CustomVCardEntryConstructor(final int vcardType) {
-        this(vcardType, null);
-    }
-
-    public CustomVCardEntryConstructor(final int vcardType, final Account account) {
-        mVCardType = vcardType;
-        mAccount = account;
-    }
-
-    public void addEntryHandler(EntryHandler entryHandler) {
-        mEntryHandlers.add(entryHandler);
-    }
-
-    @Override
-    public void onVCardStarted() {
-        for (EntryHandler entryHandler : mEntryHandlers) {
-            entryHandler.onStart();
-        }
-    }
-
-    @Override
-    public void onVCardEnded() {
-        for (EntryHandler entryHandler : mEntryHandlers) {
-            entryHandler.onEnd();
-        }
-    }
-
-    public void clear() {
-        mCurrentEntry = null;
-        mEntryStack.clear();
-    }
-
-    @Override
-    public void onEntryStarted() {
-        mCurrentEntry = new CustomVCardEntry(mVCardType, mAccount);
-        mEntryStack.add(mCurrentEntry);
-    }
-
-    @Override
-    public void onEntryEnded() {
-        mCurrentEntry.consolidateFields();
-        for (EntryHandler entryHandler : mEntryHandlers) {
-            entryHandler.onEntryCreated(mCurrentEntry);
-        }
-
-        final int size = mEntryStack.size();
-        if (size > 1) {
-            CustomVCardEntry parent = mEntryStack.get(size - 2);
-            parent.addChild(mCurrentEntry);
-            mCurrentEntry = parent;
-        } else {
-            mCurrentEntry = null;
-        }
-        mEntryStack.remove(size - 1);
-    }
-
-    @Override
-    public void onPropertyCreated(VCardProperty property) {
-        mCurrentEntry.addProperty(property);
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/datamodel/media/DecodedImageResource.java b/src/com/android/messaging/datamodel/media/DecodedImageResource.java
deleted file mode 100644
index 3627ba4..0000000
--- a/src/com/android/messaging/datamodel/media/DecodedImageResource.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-
-import com.android.messaging.ui.OrientedBitmapDrawable;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-
-import java.util.List;
-
-
-/**
- * Container class for holding a bitmap resource used by the MediaResourceManager. This resource
- * can both be cached (albeit not very storage-efficiently) and directly used by the UI.
- */
-public class DecodedImageResource extends ImageResource {
-    private static final int BITMAP_QUALITY = 100;
-    private static final int COMPRESS_QUALITY = 50;
-
-    private Bitmap mBitmap;
-    private final int mOrientation;
-    private boolean mCacheable = true;
-
-    public DecodedImageResource(final String key, final Bitmap bitmap, int orientation) {
-        super(key, orientation);
-        mBitmap = bitmap;
-        mOrientation = orientation;
-    }
-
-    /**
-     * Gets the contained bitmap.
-     */
-    @Override
-    public Bitmap getBitmap() {
-        acquireLock();
-        try {
-            return mBitmap;
-        } finally {
-            releaseLock();
-        }
-    }
-
-    /**
-     * Attempt to reuse the bitmap in the image resource and repurpose it for something else.
-     * After this, the image resource will relinquish ownership on the bitmap resource so that
-     * it doesn't try to recycle it when getting closed.
-     */
-    @Override
-    public Bitmap reuseBitmap() {
-        acquireLock();
-        try {
-            assertSingularRefCount();
-            final Bitmap retBitmap = mBitmap;
-            mBitmap = null;
-            return retBitmap;
-        } finally {
-            releaseLock();
-        }
-    }
-
-    @Override
-    public boolean supportsBitmapReuse() {
-        return true;
-    }
-
-    @Override
-    public byte[] getBytes() {
-        acquireLock();
-        try {
-            return ImageUtils.bitmapToBytes(mBitmap, BITMAP_QUALITY);
-        } catch (final Exception e) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Error trying to get the bitmap bytes " + e);
-        } finally {
-            releaseLock();
-        }
-        return null;
-    }
-
-    /**
-     * Gets the orientation of the image as one of the ExifInterface.ORIENTATION_* constants
-     */
-    @Override
-    public int getOrientation() {
-        return mOrientation;
-    }
-
-    @Override
-    public int getMediaSize() {
-        acquireLock();
-        try {
-            Assert.notNull(mBitmap);
-            if (OsUtil.isAtLeastKLP()) {
-                return mBitmap.getAllocationByteCount();
-            } else {
-                return mBitmap.getRowBytes() * mBitmap.getHeight();
-            }
-        } finally {
-            releaseLock();
-        }
-    }
-
-    @Override
-    protected void close() {
-        acquireLock();
-        try {
-            if (mBitmap != null) {
-                mBitmap.recycle();
-                mBitmap = null;
-            }
-        } finally {
-            releaseLock();
-        }
-    }
-
-    @Override
-    public Drawable getDrawable(Resources resources) {
-        acquireLock();
-        try {
-            Assert.notNull(mBitmap);
-            return OrientedBitmapDrawable.create(getOrientation(), resources, mBitmap);
-        } finally {
-            releaseLock();
-        }
-    }
-
-    @Override
-    boolean isCacheable() {
-        return mCacheable;
-    }
-
-    public void setCacheable(final boolean cacheable) {
-        mCacheable = cacheable;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    MediaRequest<? extends RefCountedMediaResource> getMediaEncodingRequest(
-            final MediaRequest<? extends RefCountedMediaResource> originalRequest) {
-        Assert.isFalse(isEncoded());
-        if (getBitmap().hasAlpha()) {
-            // We can't compress images with alpha, as JPEG encoding doesn't support this.
-            return null;
-        }
-        return new EncodeImageRequest((MediaRequest<ImageResource>) originalRequest);
-    }
-
-    /**
-     * A MediaRequest that encodes the contained image resource.
-     */
-    private class EncodeImageRequest implements MediaRequest<ImageResource> {
-        private final MediaRequest<ImageResource> mOriginalImageRequest;
-
-        public EncodeImageRequest(MediaRequest<ImageResource> originalImageRequest) {
-            mOriginalImageRequest = originalImageRequest;
-            // Hold a ref onto the encoded resource before the request finishes.
-            DecodedImageResource.this.addRef();
-        }
-
-        @Override
-        public String getKey() {
-            return DecodedImageResource.this.getKey();
-        }
-
-        @Override
-        @DoesNotRunOnMainThread
-        public ImageResource loadMediaBlocking(List<MediaRequest<ImageResource>> chainedRequests)
-                throws Exception {
-            Assert.isNotMainThread();
-            acquireLock();
-            Bitmap scaledBitmap = null;
-            try {
-                Bitmap bitmap = getBitmap();
-                Assert.isFalse(bitmap.hasAlpha());
-                final int bitmapWidth = bitmap.getWidth();
-                final int bitmapHeight = bitmap.getHeight();
-                // The original bitmap was loaded using sub-sampling which was fast in terms of
-                // loading speed, but not optimized for caching, encoding and rendering (since
-                // bitmap resizing to fit the UI image views happens on the UI thread and should
-                // be avoided if possible). Therefore, try to resize the bitmap to the exact desired
-                // size before compressing it.
-                if (bitmapWidth > 0 && bitmapHeight > 0 &&
-                        mOriginalImageRequest instanceof ImageRequest<?>) {
-                    final ImageRequestDescriptor descriptor =
-                            ((ImageRequest<?>) mOriginalImageRequest).getDescriptor();
-                    final float targetScale = Math.max(
-                            (float) descriptor.desiredWidth / bitmapWidth,
-                            (float) descriptor.desiredHeight / bitmapHeight);
-                    final int targetWidth = (int) (bitmapWidth * targetScale);
-                    final int targetHeight = (int) (bitmapHeight * targetScale);
-                    // Only try to scale down the image to the desired size.
-                    if (targetScale < 1.0f && targetWidth > 0 && targetHeight > 0 &&
-                            targetWidth != bitmapWidth && targetHeight != bitmapHeight) {
-                        scaledBitmap = bitmap =
-                                Bitmap.createScaledBitmap(bitmap, targetWidth, targetHeight, false);
-                    }
-                }
-                byte[] encodedBytes = ImageUtils.bitmapToBytes(bitmap, COMPRESS_QUALITY);
-                return new EncodedImageResource(getKey(), encodedBytes, getOrientation());
-            } catch (Exception ex) {
-                // Something went wrong during bitmap compression, fall back to just using the
-                // original bitmap.
-                LogUtil.e(LogUtil.BUGLE_IMAGE_TAG, "Error compressing bitmap", ex);
-                return DecodedImageResource.this;
-            } finally {
-                if (scaledBitmap != null && scaledBitmap != getBitmap()) {
-                    scaledBitmap.recycle();
-                    scaledBitmap = null;
-                }
-                releaseLock();
-                release();
-            }
-        }
-
-        @Override
-        public MediaCache<ImageResource> getMediaCache() {
-            return mOriginalImageRequest.getMediaCache();
-        }
-
-        @Override
-        public int getCacheId() {
-            return mOriginalImageRequest.getCacheId();
-        }
-
-        @Override
-        public int getRequestType() {
-            return REQUEST_ENCODE_MEDIA;
-        }
-
-        @Override
-        public MediaRequestDescriptor<ImageResource> getDescriptor() {
-            return mOriginalImageRequest.getDescriptor();
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/EncodedImageResource.java b/src/com/android/messaging/datamodel/media/EncodedImageResource.java
deleted file mode 100644
index 0bc94e5..0000000
--- a/src/com/android/messaging/datamodel/media/EncodedImageResource.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.drawable.Drawable;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * A cache-facing image resource that's much more compact than the raw Bitmap objects stored in
- * {@link com.android.messaging.datamodel.media.DecodedImageResource}.
- *
- * This resource is created from a regular Bitmap-based ImageResource before being pushed to
- * {@link com.android.messaging.datamodel.media.MediaCache}, if the image request
- * allows for resource encoding/compression.
- *
- * During resource retrieval on cache hit,
- * {@link #getMediaDecodingRequest(MediaRequest)} is invoked to create a async
- * decode task, which decodes the compressed byte array back to a regular image resource to
- * be consumed by the UI.
- */
-public class EncodedImageResource extends ImageResource {
-    private final byte[] mImageBytes;
-
-    public EncodedImageResource(String key, byte[] imageBytes, int orientation) {
-        super(key, orientation);
-        mImageBytes = imageBytes;
-    }
-
-    @Override
-    @DoesNotRunOnMainThread
-    public Bitmap getBitmap() {
-        acquireLock();
-        try {
-            // This should only be called during the decode request.
-            Assert.isNotMainThread();
-            return BitmapFactory.decodeByteArray(mImageBytes, 0, mImageBytes.length);
-        } finally {
-            releaseLock();
-        }
-    }
-
-    @Override
-    public byte[] getBytes() {
-        acquireLock();
-        try {
-            return Arrays.copyOf(mImageBytes, mImageBytes.length);
-        } finally {
-            releaseLock();
-        }
-    }
-
-    @Override
-    public Bitmap reuseBitmap() {
-        return null;
-    }
-
-    @Override
-    public boolean supportsBitmapReuse() {
-        return false;
-    }
-
-    @Override
-    public int getMediaSize() {
-        return mImageBytes.length;
-    }
-
-    @Override
-    protected void close() {
-    }
-
-    @Override
-    public Drawable getDrawable(Resources resources) {
-        return null;
-    }
-
-    @Override
-    boolean isEncoded() {
-        return true;
-    }
-
-    @Override
-    MediaRequest<? extends RefCountedMediaResource> getMediaDecodingRequest(
-            final MediaRequest<? extends RefCountedMediaResource> originalRequest) {
-        Assert.isTrue(isEncoded());
-        return new DecodeImageRequest();
-    }
-
-    /**
-     * A MediaRequest that decodes the encoded image resource. This class is chained to the
-     * original media request that requested the image, so it inherits the listener and
-     * properties such as binding.
-     */
-    private class DecodeImageRequest implements MediaRequest<ImageResource> {
-        public DecodeImageRequest() {
-            // Hold a ref onto the encoded resource before the request finishes.
-            addRef();
-        }
-
-        @Override
-        public String getKey() {
-            return EncodedImageResource.this.getKey();
-        }
-
-        @Override
-        @DoesNotRunOnMainThread
-        public ImageResource loadMediaBlocking(List<MediaRequest<ImageResource>> chainedTask)
-                throws Exception {
-            Assert.isNotMainThread();
-            acquireLock();
-            try {
-                final Bitmap decodedBitmap = BitmapFactory.decodeByteArray(mImageBytes, 0,
-                        mImageBytes.length);
-                return new DecodedImageResource(getKey(), decodedBitmap, getOrientation());
-            } finally {
-                releaseLock();
-                release();
-            }
-        }
-
-        @Override
-        public MediaCache<ImageResource> getMediaCache() {
-            // Decoded resource is non-cachable, it's for UI consumption only (for now at least)
-            return null;
-        }
-
-        @Override
-        public int getCacheId() {
-            return 0;
-        }
-
-        @Override
-        public int getRequestType() {
-            return REQUEST_DECODE_MEDIA;
-        }
-
-        @Override
-        public MediaRequestDescriptor<ImageResource> getDescriptor() {
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/FileImageRequest.java b/src/com/android/messaging/datamodel/media/FileImageRequest.java
deleted file mode 100644
index 31c053a..0000000
--- a/src/com/android/messaging/datamodel/media/FileImageRequest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.media.ExifInterface;
-
-import com.android.messaging.datamodel.media.PoolableImageCache.ReusableImageResourcePool;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.LogUtil;
-
-import java.io.IOException;
-
-/**
- * Serves file system based image requests. Since file paths can be expressed in Uri form, this
- * extends regular UriImageRequest but performs additional optimizations such as loading thumbnails
- * directly from Exif information.
- */
-public class FileImageRequest extends UriImageRequest {
-    private final String mPath;
-    private final boolean mCanUseThumbnail;
-
-    public FileImageRequest(final Context context,
-            final FileImageRequestDescriptor descriptor) {
-        super(context, descriptor);
-        mPath = descriptor.path;
-        mCanUseThumbnail = descriptor.canUseThumbnail;
-    }
-
-    @Override
-    protected Bitmap loadBitmapInternal()
-            throws IOException {
-        // Before using the FileInputStream, check if the Exif has a thumbnail that we can use.
-        if (mCanUseThumbnail) {
-            byte[] thumbnail = null;
-            try {
-                final ExifInterface exif = new ExifInterface(mPath);
-                if (exif.hasThumbnail()) {
-                    thumbnail = exif.getThumbnail();
-                }
-            } catch (final IOException e) {
-                // Nothing to do
-            }
-
-            if (thumbnail != null) {
-                final BitmapFactory.Options options = PoolableImageCache.getBitmapOptionsForPool(
-                        false /* scaled */, 0 /* inputDensity */, 0 /* targetDensity */);
-                // First, check dimensions of the bitmap.
-                options.inJustDecodeBounds = true;
-                BitmapFactory.decodeByteArray(thumbnail, 0, thumbnail.length, options);
-
-                // Calculate inSampleSize
-                options.inSampleSize = ImageUtils.get().calculateInSampleSize(options,
-                        mDescriptor.desiredWidth, mDescriptor.desiredHeight);
-
-                options.inJustDecodeBounds = false;
-
-                // Actually decode the bitmap, optionally using the bitmap pool.
-                try {
-                    // Get the orientation. We should be able to get the orientation from
-                    // the thumbnail itself but at least on some phones, the thumbnail
-                    // doesn't have an orientation tag. So use the outer image's orientation
-                    // tag and hope for the best.
-                    mOrientation = ImageUtils.getOrientation(getInputStreamForResource());
-                    if (com.android.messaging.util.exif.ExifInterface.
-                            getOrientationParams(mOrientation).invertDimensions) {
-                        mDescriptor.updateSourceDimensions(options.outHeight, options.outWidth);
-                    } else {
-                        mDescriptor.updateSourceDimensions(options.outWidth, options.outHeight);
-                    }
-                    final ReusableImageResourcePool bitmapPool = getBitmapPool();
-                    if (bitmapPool == null) {
-                        return BitmapFactory.decodeByteArray(thumbnail, 0, thumbnail.length,
-                                options);
-                    } else {
-                        final int sampledWidth = options.outWidth / options.inSampleSize;
-                        final int sampledHeight = options.outHeight / options.inSampleSize;
-                        return bitmapPool.decodeByteArray(thumbnail, options, sampledWidth,
-                                sampledHeight);
-                    }
-                } catch (IOException ex) {
-                    // If the thumbnail is broken due to IOException, this will
-                    // fall back to default bitmap loading.
-                    LogUtil.e(LogUtil.BUGLE_IMAGE_TAG, "FileImageRequest: failed to load " +
-                            "thumbnail from Exif", ex);
-                }
-            }
-        }
-
-        // Fall back to default InputStream-based loading if no thumbnails could be retrieved.
-        return super.loadBitmapInternal();
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/FileImageRequestDescriptor.java b/src/com/android/messaging/datamodel/media/FileImageRequestDescriptor.java
deleted file mode 100644
index 00105f5..0000000
--- a/src/com/android/messaging/datamodel/media/FileImageRequestDescriptor.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.UriUtil;
-
-/**
- * Holds image request info about file system based image resource.
- */
-public class FileImageRequestDescriptor extends UriImageRequestDescriptor {
-    public final String path;
-
-    // Can we use the thumbnail image from Exif data?
-    public final boolean canUseThumbnail;
-
-    /**
-     * Convenience constructor for when the image file's dimensions are not known.
-     */
-    public FileImageRequestDescriptor(final String path, final int desiredWidth,
-            final int desiredHeight, final boolean canUseThumbnail, final boolean canCompress,
-            final boolean isStatic) {
-        this(path, desiredWidth, desiredHeight, FileImageRequest.UNSPECIFIED_SIZE,
-                FileImageRequest.UNSPECIFIED_SIZE, canUseThumbnail, canCompress, isStatic);
-    }
-
-    /**
-     * Creates a new file image request with this descriptor. Oftentimes image file metadata
-     * has information such as the size of the image. Provide these metrics if they are known.
-     */
-    public FileImageRequestDescriptor(final String path, final int desiredWidth,
-            final int desiredHeight, final int sourceWidth, final int sourceHeight,
-            final boolean canUseThumbnail, final boolean canCompress, final boolean isStatic) {
-        super(UriUtil.getUriForResourceFile(path), desiredWidth, desiredHeight, sourceWidth,
-                sourceHeight, canCompress,  isStatic, false /* cropToCircle */,
-                ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
-        this.path = path;
-        this.canUseThumbnail = canUseThumbnail;
-    }
-
-    @Override
-    public String getKey() {
-        final String prefixKey = super.getKey();
-        return prefixKey == null ? null : new StringBuilder(prefixKey).append(KEY_PART_DELIMITER)
-                .append(canUseThumbnail).toString();
-    }
-
-    @Override
-    public MediaRequest<ImageResource> buildSyncMediaRequest(final Context context) {
-        return new FileImageRequest(context, this);
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/datamodel/media/GifImageResource.java b/src/com/android/messaging/datamodel/media/GifImageResource.java
deleted file mode 100644
index cbea1ee..0000000
--- a/src/com/android/messaging/datamodel/media/GifImageResource.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import android.media.ExifInterface;
-import android.support.rastermill.FrameSequence;
-import android.support.rastermill.FrameSequenceDrawable;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-public class GifImageResource extends ImageResource {
-    private FrameSequence mFrameSequence;
-
-    public GifImageResource(String key, FrameSequence frameSequence) {
-        // GIF does not support exif tags
-        super(key, ExifInterface.ORIENTATION_NORMAL);
-        mFrameSequence = frameSequence;
-    }
-
-    public static GifImageResource createGifImageResource(String key, InputStream inputStream) {
-        final FrameSequence frameSequence;
-        try {
-            frameSequence = FrameSequence.decodeStream(inputStream);
-        } finally {
-            try {
-                inputStream.close();
-            } catch (IOException e) {
-                // Nothing to do if we fail closing the stream
-            }
-        }
-        if (frameSequence == null) {
-            return null;
-        }
-        return new GifImageResource(key, frameSequence);
-    }
-
-    @Override
-    public Drawable getDrawable(Resources resources) {
-        try {
-            return new FrameSequenceDrawable(mFrameSequence);
-        } catch (final Throwable t) {
-            // Malicious gif images can make the platform throw different kind of throwables, such
-            // as OutOfMemoryError and NullPointerException. Catch them all.
-            LogUtil.e(LogUtil.BUGLE_TAG, "Error getting drawable for GIF", t);
-            return null;
-        }
-    }
-
-    @Override
-    public Bitmap getBitmap() {
-        Assert.fail("GetBitmap() should never be called on a gif.");
-        return null;
-    }
-
-    @Override
-    public byte[] getBytes() {
-        Assert.fail("GetBytes() should never be called on a gif.");
-        return null;
-    }
-
-    @Override
-    public Bitmap reuseBitmap() {
-        return null;
-    }
-
-    @Override
-    public boolean supportsBitmapReuse() {
-        // FrameSequenceDrawable a.) takes two bitmaps and thus does not fit into the current
-        // bitmap pool architecture b.) will rarely use bitmaps from one FrameSequenceDrawable to
-        // the next that are the same sizes since they are used by attachments.
-        return false;
-    }
-
-    @Override
-    public int getMediaSize() {
-        Assert.fail("GifImageResource should not be used by a media cache");
-        // Only used by the media cache, which this does not use.
-        return 0;
-    }
-
-    @Override
-    public boolean isCacheable() {
-        return false;
-    }
-
-    @Override
-    protected void close() {
-        acquireLock();
-        try {
-            if (mFrameSequence != null) {
-                mFrameSequence = null;
-            }
-        } finally {
-            releaseLock();
-        }
-    }
-
-}
diff --git a/src/com/android/messaging/datamodel/media/ImageRequest.java b/src/com/android/messaging/datamodel/media/ImageRequest.java
deleted file mode 100644
index ab8880d..0000000
--- a/src/com/android/messaging/datamodel/media/ImageRequest.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.RectF;
-
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.media.PoolableImageCache.ReusableImageResourcePool;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.exif.ExifInterface;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-
-/**
- * Base class that serves an image request for resolving, retrieving and decoding bitmap resources.
- *
- * Subclasses may choose to load images from different medium, such as from the file system or
- * from the local content resolver, by overriding the abstract getInputStreamForResource() method.
- */
-public abstract class ImageRequest<D extends ImageRequestDescriptor>
-        implements MediaRequest<ImageResource> {
-    public static final int UNSPECIFIED_SIZE = MessagePartData.UNSPECIFIED_SIZE;
-
-    protected final Context mContext;
-    protected final D mDescriptor;
-    protected int mOrientation;
-
-    /**
-     * Creates a new image request with the given descriptor.
-     */
-    public ImageRequest(final Context context, final D descriptor) {
-        mContext = context;
-        mDescriptor = descriptor;
-    }
-
-    /**
-     * Gets a key that uniquely identify the underlying image resource to be loaded (e.g. Uri or
-     * file path).
-     */
-    @Override
-    public String getKey() {
-        return mDescriptor.getKey();
-    }
-
-    /**
-     * Returns the image request descriptor attached to this request.
-     */
-    @Override
-    public D getDescriptor() {
-        return mDescriptor;
-    }
-
-    @Override
-    public int getRequestType() {
-        return MediaRequest.REQUEST_LOAD_MEDIA;
-    }
-
-    /**
-     * Allows sub classes to specify that they want us to call getBitmapForResource rather than
-     * getInputStreamForResource
-     */
-    protected boolean hasBitmapObject() {
-        return false;
-    }
-
-    protected Bitmap getBitmapForResource() throws IOException {
-        return null;
-    }
-
-    /**
-     * Retrieves an input stream from which image resource could be loaded.
-     * @throws FileNotFoundException
-     */
-    protected abstract InputStream getInputStreamForResource() throws FileNotFoundException;
-
-    /**
-     * Loads the image resource. This method is final; to override the media loading behavior
-     * the subclass should override {@link #loadMediaInternal(List)}
-     */
-    @Override
-    public final ImageResource loadMediaBlocking(List<MediaRequest<ImageResource>> chainedTask)
-            throws IOException {
-        Assert.isNotMainThread();
-        final ImageResource loadedResource = loadMediaInternal(chainedTask);
-        return postProcessOnBitmapResourceLoaded(loadedResource);
-    }
-
-    protected ImageResource loadMediaInternal(List<MediaRequest<ImageResource>> chainedTask)
-            throws IOException {
-        if (!mDescriptor.isStatic() && isGif()) {
-            final GifImageResource gifImageResource =
-                    GifImageResource.createGifImageResource(getKey(), getInputStreamForResource());
-            if (gifImageResource == null) {
-                throw new RuntimeException("Error decoding gif");
-            }
-            return gifImageResource;
-        } else {
-            final Bitmap loadedBitmap = loadBitmapInternal();
-            if (loadedBitmap == null) {
-                throw new RuntimeException("failed decoding bitmap");
-            }
-            return new DecodedImageResource(getKey(), loadedBitmap, mOrientation);
-        }
-    }
-
-    protected boolean isGif() throws FileNotFoundException {
-        return ImageUtils.isGif(getInputStreamForResource());
-    }
-
-    /**
-     * The internal routine for loading the image. The caller may optionally provide the width
-     * and height of the source image if known so that we don't need to manually decode those.
-     */
-    protected Bitmap loadBitmapInternal() throws IOException {
-
-        final boolean unknownSize = mDescriptor.sourceWidth == UNSPECIFIED_SIZE ||
-                mDescriptor.sourceHeight == UNSPECIFIED_SIZE;
-
-        // If the ImageRequest has a Bitmap object rather than a stream, there's little to do here
-        if (hasBitmapObject()) {
-            final Bitmap bitmap = getBitmapForResource();
-            if (bitmap != null && unknownSize) {
-                mDescriptor.updateSourceDimensions(bitmap.getWidth(), bitmap.getHeight());
-            }
-            return bitmap;
-        }
-
-        mOrientation = ImageUtils.getOrientation(getInputStreamForResource());
-
-        final BitmapFactory.Options options = PoolableImageCache.getBitmapOptionsForPool(
-                false /* scaled */, 0 /* inputDensity */, 0 /* targetDensity */);
-        // First, check dimensions of the bitmap if not already known.
-        if (unknownSize) {
-            final InputStream inputStream = getInputStreamForResource();
-            if (inputStream != null) {
-                try {
-                    options.inJustDecodeBounds = true;
-                    BitmapFactory.decodeStream(inputStream, null, options);
-                    // This is called when dimensions of image were unknown to allow db update
-                    if (ExifInterface.getOrientationParams(mOrientation).invertDimensions) {
-                        mDescriptor.updateSourceDimensions(options.outHeight, options.outWidth);
-                    } else {
-                        mDescriptor.updateSourceDimensions(options.outWidth, options.outHeight);
-                    }
-                } finally {
-                    inputStream.close();
-                }
-            } else {
-                throw new FileNotFoundException();
-            }
-        } else {
-            options.outWidth = mDescriptor.sourceWidth;
-            options.outHeight = mDescriptor.sourceHeight;
-        }
-
-        // Calculate inSampleSize
-        options.inSampleSize = ImageUtils.get().calculateInSampleSize(options,
-                mDescriptor.desiredWidth, mDescriptor.desiredHeight);
-        Assert.isTrue(options.inSampleSize > 0);
-
-        // Reopen the input stream and actually decode the bitmap. The initial
-        // BitmapFactory.decodeStream() reads the header portion of the bitmap stream and leave
-        // the input stream at the last read position. Since this input stream doesn't support
-        // mark() and reset(), the only viable way to reload the input stream is to re-open it.
-        // Alternatively, we could decode the bitmap into a byte array first and act on the byte
-        // array, but that also means the entire bitmap (for example a 10MB image from the gallery)
-        // without downsampling will have to be loaded into memory up front, which we don't want
-        // as it gives a much bigger possibility of OOM when handling big images. Therefore, the
-        // solution here is to close and reopen the bitmap input stream.
-        // For inline images the size is cached in DB and this hit is only taken once per image
-        final InputStream inputStream = getInputStreamForResource();
-        if (inputStream != null) {
-            try {
-                options.inJustDecodeBounds = false;
-
-                // Actually decode the bitmap, optionally using the bitmap pool.
-                final ReusableImageResourcePool bitmapPool = getBitmapPool();
-                if (bitmapPool == null) {
-                    return BitmapFactory.decodeStream(inputStream, null, options);
-                } else {
-                    final int sampledWidth = (options.outWidth + options.inSampleSize - 1) /
-                            options.inSampleSize;
-                    final int sampledHeight = (options.outHeight + options.inSampleSize - 1) /
-                            options.inSampleSize;
-                    return bitmapPool.decodeSampledBitmapFromInputStream(
-                            inputStream, options, sampledWidth, sampledHeight);
-                }
-            } finally {
-                inputStream.close();
-            }
-        } else {
-            throw new FileNotFoundException();
-        }
-    }
-
-    private ImageResource postProcessOnBitmapResourceLoaded(final ImageResource loadedResource) {
-        if (mDescriptor.cropToCircle && loadedResource instanceof DecodedImageResource) {
-            final int width = mDescriptor.desiredWidth;
-            final int height = mDescriptor.desiredHeight;
-            final Bitmap sourceBitmap = loadedResource.getBitmap();
-            final Bitmap targetBitmap = getBitmapPool().createOrReuseBitmap(width, height);
-            final RectF dest = new RectF(0, 0, width, height);
-            final RectF source = new RectF(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight());
-            final int backgroundColor = mDescriptor.circleBackgroundColor;
-            final int strokeColor = mDescriptor.circleStrokeColor;
-            ImageUtils.drawBitmapWithCircleOnCanvas(sourceBitmap, new Canvas(targetBitmap), source,
-                    dest, null, backgroundColor == 0 ? false : true /* fillBackground */,
-                            backgroundColor, strokeColor);
-            return new DecodedImageResource(getKey(), targetBitmap,
-                    loadedResource.getOrientation());
-        }
-        return loadedResource;
-    }
-
-    /**
-     * Returns the bitmap pool for this image request.
-     */
-    protected ReusableImageResourcePool getBitmapPool() {
-        return MediaCacheManager.get().getOrCreateBitmapPoolForCache(getCacheId());
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public MediaCache<ImageResource> getMediaCache() {
-        return (MediaCache<ImageResource>) MediaCacheManager.get().getOrCreateMediaCacheById(
-                getCacheId());
-    }
-
-    /**
-     * Returns the cache id. Subclasses may override this to use a different cache.
-     */
-    @Override
-    public int getCacheId() {
-        return BugleMediaCacheManager.DEFAULT_IMAGE_CACHE;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/ImageRequestDescriptor.java b/src/com/android/messaging/datamodel/media/ImageRequestDescriptor.java
deleted file mode 100644
index 20cb9af..0000000
--- a/src/com/android/messaging/datamodel/media/ImageRequestDescriptor.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-
-import com.android.messaging.util.Assert;
-
-/**
- * The base ImageRequest descriptor that describes the requirement of the requested image
- * resource, including the desired size. It holds request info that will be consumed by
- * ImageRequest instances. Subclasses of ImageRequest are expected to take
- * more descriptions such as content URI or file path.
- */
-public abstract class ImageRequestDescriptor extends MediaRequestDescriptor<ImageResource> {
-    /** Desired size for the image (if known). This is used for bitmap downsampling */
-    public final int desiredWidth;
-    public final int desiredHeight;
-
-    /** Source size of the image (if known). This is used so that we don't have to manually decode
-     *  the metrics from the image resource */
-    public final int sourceWidth;
-    public final int sourceHeight;
-
-    /**
-     * A static image resource is required, even if the image format supports animation (like Gif).
-     */
-    public final boolean isStatic;
-
-    /**
-     * The loaded image will be cropped to circular shape.
-     */
-    public final boolean cropToCircle;
-
-    /**
-     * The loaded image will be cropped to circular shape with the background color.
-     */
-    public final int circleBackgroundColor;
-
-    /**
-     * The loaded image will be cropped to circular shape with a stroke color.
-     */
-    public final int circleStrokeColor;
-
-    protected static final char KEY_PART_DELIMITER = '|';
-
-    /**
-     * Creates a new image request with unspecified width and height. In this case, the full
-     * bitmap is loaded and decoded, so unless you are sure that the image will be of
-     * reasonable size, you should consider limiting at least one of the two dimensions
-     * (for example, limiting the image width to the width of the ImageView container).
-     */
-    public ImageRequestDescriptor() {
-        this(ImageRequest.UNSPECIFIED_SIZE, ImageRequest.UNSPECIFIED_SIZE,
-                ImageRequest.UNSPECIFIED_SIZE, ImageRequest.UNSPECIFIED_SIZE, false, false, 0, 0);
-    }
-
-    public ImageRequestDescriptor(final int desiredWidth, final int desiredHeight) {
-        this(desiredWidth, desiredHeight,
-                ImageRequest.UNSPECIFIED_SIZE, ImageRequest.UNSPECIFIED_SIZE, false, false, 0, 0);
-    }
-
-    public ImageRequestDescriptor(final int desiredWidth,
-            final int desiredHeight, final int sourceWidth, final int sourceHeight,
-            final boolean isStatic, final boolean cropToCircle, final int circleBackgroundColor,
-            int circleStrokeColor) {
-        Assert.isTrue(desiredWidth == ImageRequest.UNSPECIFIED_SIZE || desiredWidth > 0);
-        Assert.isTrue(desiredHeight == ImageRequest.UNSPECIFIED_SIZE || desiredHeight > 0);
-        Assert.isTrue(sourceWidth == ImageRequest.UNSPECIFIED_SIZE || sourceWidth > 0);
-        Assert.isTrue(sourceHeight == ImageRequest.UNSPECIFIED_SIZE || sourceHeight > 0);
-        this.desiredWidth = desiredWidth;
-        this.desiredHeight = desiredHeight;
-        this.sourceWidth = sourceWidth;
-        this.sourceHeight = sourceHeight;
-        this.isStatic = isStatic;
-        this.cropToCircle = cropToCircle;
-        this.circleBackgroundColor = circleBackgroundColor;
-        this.circleStrokeColor = circleStrokeColor;
-    }
-
-    public String getKey() {
-        return new StringBuilder()
-                .append(desiredWidth).append(KEY_PART_DELIMITER)
-                .append(desiredHeight).append(KEY_PART_DELIMITER)
-                .append(String.valueOf(cropToCircle)).append(KEY_PART_DELIMITER)
-                .append(String.valueOf(circleBackgroundColor)).append(KEY_PART_DELIMITER)
-                .append(String.valueOf(isStatic)).toString();
-    }
-
-    public boolean isStatic() {
-        return isStatic;
-    }
-
-    @Override
-    public abstract MediaRequest<ImageResource> buildSyncMediaRequest(Context context);
-
-    // Called once source dimensions finally determined upon loading the image
-    public void updateSourceDimensions(final int sourceWidth, final int sourceHeight) {
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/datamodel/media/ImageResource.java b/src/com/android/messaging/datamodel/media/ImageResource.java
deleted file mode 100644
index 75d817d..0000000
--- a/src/com/android/messaging/datamodel/media/ImageResource.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-
-/**
- * Base class for holding some form of image resource. The subclass gets to define the specific
- * type of data format it's holding, whether it be Bitmap objects or compressed byte arrays.
- */
-public abstract class ImageResource extends RefCountedMediaResource {
-    protected final int mOrientation;
-
-    public ImageResource(final String key, int orientation) {
-        super(key);
-        mOrientation = orientation;
-    }
-
-    /**
-     * Gets the contained image in drawable format.
-     */
-    public abstract Drawable getDrawable(Resources resources);
-
-    /**
-     * Gets the contained image in bitmap format.
-     */
-    public abstract Bitmap getBitmap();
-
-    /**
-     * Gets the contained image in byte array format.
-     */
-    public abstract byte[] getBytes();
-
-    /**
-     * Attempt to reuse the bitmap in the image resource and re-purpose it for something else.
-     * After this, the image resource will relinquish ownership on the bitmap resource so that
-     * it doesn't try to recycle it when getting closed.
-     */
-    public abstract Bitmap reuseBitmap();
-    public abstract boolean supportsBitmapReuse();
-
-    /**
-     * Gets the orientation of the image as one of the ExifInterface.ORIENTATION_* constants
-     */
-    public int getOrientation() {
-        return mOrientation;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/MediaBytes.java b/src/com/android/messaging/datamodel/media/MediaBytes.java
deleted file mode 100644
index 823bf27..0000000
--- a/src/com/android/messaging/datamodel/media/MediaBytes.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-
-/**
- * Container class for handing around media information used by the MediaResourceManager.
- */
-public class MediaBytes extends RefCountedMediaResource {
-    private final byte[] mBytes;
-
-    public MediaBytes(final String key, final byte[] bytes) {
-        super(key);
-        mBytes = bytes;
-    }
-
-    public byte[] getMediaBytes() {
-        return mBytes;
-    }
-
-    @Override
-    public int getMediaSize() {
-        return mBytes.length;
-    }
-
-    @Override
-    protected void close() {
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/MediaCache.java b/src/com/android/messaging/datamodel/media/MediaCache.java
deleted file mode 100644
index 510da2d..0000000
--- a/src/com/android/messaging/datamodel/media/MediaCache.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.util.LruCache;
-
-import com.android.messaging.util.LogUtil;
-
-/**
- * A modified LruCache that is able to hold RefCountedMediaResource instances. It releases
- * ref on the entries as they are evicted from the cache, and it uses the media resource
- * size in kilobytes, instead of the entry count, as the size of the cache.
- *
- * This class is used by the MediaResourceManager class to maintain a number of caches for
- * holding different types of {@link RefCountedMediaResource}
- */
-public class MediaCache<T extends RefCountedMediaResource> extends LruCache<String, T> {
-    private static final String TAG = LogUtil.BUGLE_IMAGE_TAG;
-
-    // Default memory cache size in kilobytes
-    protected static final int DEFAULT_MEDIA_RESOURCE_CACHE_SIZE_IN_KILOBYTES = 1024 * 5;  // 5MB
-
-    // Unique identifier for the cache.
-    private final int mId;
-    // Descriptive name given to the cache for debugging purposes.
-    private final String mName;
-
-    // Convenience constructor that uses the default cache size.
-    public MediaCache(final int id, final String name) {
-        this(DEFAULT_MEDIA_RESOURCE_CACHE_SIZE_IN_KILOBYTES, id, name);
-    }
-
-    public MediaCache(final int maxSize, final int id, final String name) {
-        super(maxSize);
-        mId = id;
-        mName = name;
-    }
-
-    public void destroy() {
-        evictAll();
-    }
-
-    public String getName() {
-        return mName;
-    }
-
-    public int getId() {
-        return mId;
-    }
-
-    /**
-     * Gets a media resource from this cache. Must use this method to get resource instead of get()
-     * to ensure addRef() on the resource.
-     */
-    public synchronized T fetchResourceFromCache(final String key) {
-        final T ret = get(key);
-        if (ret != null) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "cache hit in mediaCache @ " + getName() +
-                        ", total cache hit = " + hitCount() +
-                        ", total cache miss = " + missCount());
-            }
-            ret.addRef();
-        } else if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "cache miss in mediaCache @ " + getName() +
-                    ", total cache hit = " + hitCount() +
-                    ", total cache miss = " + missCount());
-        }
-        return ret;
-    }
-
-    /**
-     * Add a media resource to this cache. Must use this method to add resource instead of put()
-     * to ensure addRef() on the resource.
-     */
-    public synchronized T addResourceToCache(final String key, final T mediaResource) {
-        mediaResource.addRef();
-        return put(key, mediaResource);
-    }
-
-    /**
-     * Notify the removed entry that is no longer being cached
-     */
-    @Override
-    protected synchronized void entryRemoved(final boolean evicted, final String key,
-            final T oldValue, final T newValue) {
-        oldValue.release();
-    }
-
-    /**
-     * Measure item size in kilobytes rather than units which is more practical
-     * for a media resource cache
-     */
-    @Override
-    protected int sizeOf(final String key, final T value) {
-        final int mediaSizeInKilobytes = value.getMediaSize() / 1024;
-        // Never zero-count any resource, count as at least 1KB.
-        return mediaSizeInKilobytes == 0 ? 1 : mediaSizeInKilobytes;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/datamodel/media/MediaCacheManager.java b/src/com/android/messaging/datamodel/media/MediaCacheManager.java
deleted file mode 100644
index 6e029f2..0000000
--- a/src/com/android/messaging/datamodel/media/MediaCacheManager.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.util.SparseArray;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.MemoryCacheManager;
-import com.android.messaging.datamodel.MemoryCacheManager.MemoryCache;
-import com.android.messaging.datamodel.media.PoolableImageCache.ReusableImageResourcePool;
-
-/**
- * Manages a set of media caches by id.
- */
-public abstract class MediaCacheManager implements MemoryCache {
-    public static MediaCacheManager get() {
-        return Factory.get().getMediaCacheManager();
-    }
-
-    protected final SparseArray<MediaCache<?>> mCaches;
-
-    public MediaCacheManager() {
-        mCaches = new SparseArray<MediaCache<?>>();
-        MemoryCacheManager.get().registerMemoryCache(this);
-    }
-
-    @Override
-    public void reclaim() {
-        final int count = mCaches.size();
-        for (int i = 0; i < count; i++) {
-            mCaches.valueAt(i).destroy();
-        }
-        mCaches.clear();
-    }
-
-    public synchronized MediaCache<?> getOrCreateMediaCacheById(final int id) {
-        MediaCache<?> cache = mCaches.get(id);
-        if (cache == null) {
-            cache = createMediaCacheById(id);
-            if (cache != null) {
-                mCaches.put(id, cache);
-            }
-        }
-        return cache;
-    }
-
-    public ReusableImageResourcePool getOrCreateBitmapPoolForCache(final int cacheId) {
-        final MediaCache<?> cache = getOrCreateMediaCacheById(cacheId);
-        if (cache != null && cache instanceof PoolableImageCache) {
-            return ((PoolableImageCache) cache).asReusableBitmapPool();
-        }
-        return null;
-    }
-
-    protected abstract MediaCache<?> createMediaCacheById(final int id);
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/datamodel/media/MediaRequest.java b/src/com/android/messaging/datamodel/media/MediaRequest.java
deleted file mode 100644
index 78ae85e..0000000
--- a/src/com/android/messaging/datamodel/media/MediaRequest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import java.util.List;
-
-/**
- * Keeps track of a media loading request. MediaResourceManager uses this interface to load, encode,
- * decode, and cache different types of media resource.
- *
- * This interface defines a media request class that's threading-model-oblivious. Wrapper classes
- * (such as {@link AsyncMediaRequestWrapper} wraps around any base media request to offer async
- * extensions).
- */
-public interface MediaRequest<T extends RefCountedMediaResource> {
-    public static final int REQUEST_ENCODE_MEDIA = 1;
-    public static final int REQUEST_DECODE_MEDIA = 2;
-    public static final int REQUEST_LOAD_MEDIA = 3;
-
-    /**
-     * Returns a unique key used for storing and looking up the MediaRequest.
-     */
-    String getKey();
-
-    /**
-     * This method performs the heavy-lifting work of synchronously loading the media bytes for
-     * this MediaRequest on a single threaded executor.
-     * @param chainedTask subsequent tasks to be performed after this request is complete. For
-     * example, an image request may need to compress the image resource before putting it in the
-     * cache
-     */
-    T loadMediaBlocking(List<MediaRequest<T>> chainedTask) throws Exception;
-
-    /**
-     * Returns the media cache where this MediaRequest wants to store the loaded
-     * media resource.
-     */
-    MediaCache<T> getMediaCache();
-
-    /**
-     * Returns the id of the cache where this MediaRequest wants to store the loaded
-     * media resource.
-     */
-    int getCacheId();
-
-    /**
-     * Returns the request type of this media request, i.e. one of {@link #REQUEST_ENCODE_MEDIA},
-     * {@link #REQUEST_DECODE_MEDIA}, or {@link #REQUEST_LOAD_MEDIA}. The default is
-     * {@link #REQUEST_LOAD_MEDIA}
-     */
-    int getRequestType();
-
-    /**
-     * Returns the descriptor defining the request.
-     */
-    MediaRequestDescriptor<T> getDescriptor();
-}
diff --git a/src/com/android/messaging/datamodel/media/MediaRequestDescriptor.java b/src/com/android/messaging/datamodel/media/MediaRequestDescriptor.java
deleted file mode 100644
index 216b2a3..0000000
--- a/src/com/android/messaging/datamodel/media/MediaRequestDescriptor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-
-import com.android.messaging.datamodel.media.MediaResourceManager.MediaResourceLoadListener;
-
-/**
- * The base data holder/builder class for constructing async/sync MediaRequest objects during
- * runtime.
- */
-public abstract class MediaRequestDescriptor<T extends RefCountedMediaResource> {
-    public abstract MediaRequest<T> buildSyncMediaRequest(Context context);
-
-    /**
-     * Builds an async media request to be used with
-     * {@link MediaResourceManager#requestMediaResourceAsync(MediaRequest)}
-     */
-    public BindableMediaRequest<T> buildAsyncMediaRequest(final Context context,
-            final MediaResourceLoadListener<T> listener) {
-        final MediaRequest<T> syncRequest = buildSyncMediaRequest(context);
-        return AsyncMediaRequestWrapper.createWith(syncRequest, listener);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/MediaResourceManager.java b/src/com/android/messaging/datamodel/media/MediaResourceManager.java
deleted file mode 100644
index 13f7291..0000000
--- a/src/com/android/messaging/datamodel/media/MediaResourceManager.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.os.AsyncTask;
-
-import com.android.messaging.Factory;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.RunsOnAnyThread;
-import com.android.messaging.util.LogUtil;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-
-/**
- * <p>Loads and maintains a set of in-memory LRU caches for different types of media resources.
- * Right now we don't utilize any disk cache as all media urls are expected to be resolved to
- * local content.<p/>
- *
- * <p>The MediaResourceManager takes media loading requests through one of two ways:</p>
- *
- * <ol>
- * <li>{@link #requestMediaResourceAsync(MediaRequest)} that takes a MediaRequest, which may be a
- *  regular request if the caller doesn't want to listen for events (fire-and-forget),
- *  or an async request wrapper if event callback is needed.</li>
- * <li>{@link #requestMediaResourceSync(MediaRequest)} which takes a MediaRequest and synchronously
- *  returns the loaded result, or null if failed.</li>
- * </ol>
- *
- * <p>For each media loading task, MediaResourceManager starts an AsyncTask that runs on a
- * dedicated thread, which calls MediaRequest.loadMediaBlocking() to perform the actual media
- * loading work. As the media resources are loaded, MediaResourceManager notifies the callers
- * (which must implement the MediaResourceLoadListener interface) via onMediaResourceLoaded()
- * callback. Meanwhile, MediaResourceManager also pushes the loaded resource onto its dedicated
- * cache.</p>
- *
- * <p>The media resource caches ({@link MediaCache}) are maintained as a set of LRU caches. They are
- * created on demand by the incoming MediaRequest's getCacheId() method. The implementations of
- * MediaRequest (such as {@link ImageRequest}) get to determine the desired cache id. For Bugle,
- * the list of available caches are in {@link BugleMediaCacheManager}</p>
- *
- * <p>Optionally, media loading can support on-demand media encoding and decoding.
- * All {@link MediaRequest}'s can opt to chain additional {@link MediaRequest}'s to be executed
- * after the completion of the main media loading task, by adding new tasks to the chained
- * task list in {@link MediaRequest#loadMediaBlocking(List)}. One possible type of chained task is
- * media encoding task. Loaded media will be encoded on a dedicated single threaded executor
- * *after* the UI is notified of the loaded media. In this case, the encoded media resource will
- * be eventually pushed to the cache, which will later be decoded before posting to the UI thread
- * on cache hit.</p>
- *
- * <p><b>To add support for a new type of media resource,</b></p>
- *
- * <ol>
- * <li>Create a new subclass of {@link RefCountedMediaResource} for the new resource type (example:
- *    {@link ImageResource} class).</li>
- *
- * <li>Implement the {@link MediaRequest} interface (example: {@link ImageRequest}). Perform the
- *    media loading work in loadMediaBlocking() and return a cache id in getCacheId().</li>
- *
- * <li>For the UI component that requests the media resource, let it implement
- *    {@link MediaResourceLoadListener} interface to listen for resource load callback. Let the
- *    UI component call MediaResourceManager.requestMediaResourceAsync() to request a media source.
- *    (example: {@link com.android.messaging.ui.ContactIconView}</li>
- * </ol>
- */
-public class MediaResourceManager {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    public static MediaResourceManager get() {
-        return Factory.get().getMediaResourceManager();
-    }
-
-    /**
-     * Listener for asynchronous callback from media loading events.
-     */
-    public interface MediaResourceLoadListener<T extends RefCountedMediaResource> {
-        void onMediaResourceLoaded(MediaRequest<T> request, T resource, boolean cached);
-        void onMediaResourceLoadError(MediaRequest<T> request, Exception exception);
-    }
-
-    // We use a fixed thread pool for handling media loading tasks. Using a cached thread pool
-    // allows for unlimited thread creation which can lead to OOMs so we limit the threads here.
-    private static final Executor MEDIA_LOADING_EXECUTOR = Executors.newFixedThreadPool(10);
-
-    // A dedicated single thread executor for performing background task after loading the resource
-    // on the media loading executor. This includes work such as encoding loaded media to be cached.
-    // These tasks are run on a single worker thread with low priority so as not to contend with the
-    // media loading tasks.
-    private static final Executor MEDIA_BACKGROUND_EXECUTOR = Executors.newSingleThreadExecutor(
-            new ThreadFactory() {
-                @Override
-                public Thread newThread(final Runnable runnable) {
-                    final Thread encodingThread = new Thread(runnable);
-                    encodingThread.setPriority(Thread.MIN_PRIORITY);
-                    return encodingThread;
-                }
-            });
-
-    /**
-     * Requests a media resource asynchronously. Upon completion of the media loading task,
-     * the listener will be notified of success/failure iff it's still bound. A refcount on the
-     * resource is held and guaranteed for the caller for the duration of the
-     * {@link MediaResourceLoadListener#onMediaResourceLoaded(
-     * MediaRequest, RefCountedMediaResource, boolean)} callback.
-     * @param mediaRequest the media request. May be either an
-     * {@link AsyncMediaRequestWrapper} for listening for event callbacks, or a regular media
-     * request for fire-and-forget type of behavior.
-     */
-    public <T extends RefCountedMediaResource> void requestMediaResourceAsync(
-            final MediaRequest<T> mediaRequest) {
-        scheduleAsyncMediaRequest(mediaRequest, MEDIA_LOADING_EXECUTOR);
-    }
-
-    /**
-     * Requests a media resource synchronously.
-     * @return the loaded resource with a refcount reserved for the caller. The caller must call
-     * release() on the resource once it's done using it (like with Cursors).
-     */
-    public <T extends RefCountedMediaResource> T requestMediaResourceSync(
-            final MediaRequest<T> mediaRequest) {
-        Assert.isNotMainThread();
-        // Block and load media.
-        MediaLoadingResult<T> loadResult = null;
-        try {
-            loadResult = processMediaRequestInternal(mediaRequest);
-            // The loaded resource should have at least one refcount by now reserved for the caller.
-            Assert.isTrue(loadResult.loadedResource.getRefCount() > 0);
-            return loadResult.loadedResource;
-        } catch (final Exception e) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Synchronous media loading failed, key=" +
-                    mediaRequest.getKey(), e);
-            return null;
-        } finally {
-            if (loadResult != null) {
-                // Schedule the background requests chained to the main request.
-                loadResult.scheduleChainedRequests();
-            }
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private <T extends RefCountedMediaResource> MediaLoadingResult<T> processMediaRequestInternal(
-            final MediaRequest<T> mediaRequest)
-                    throws Exception {
-        final List<MediaRequest<T>> chainedRequests = new ArrayList<>();
-        T loadedResource = null;
-        // Try fetching from cache first.
-        final T cachedResource = loadMediaFromCache(mediaRequest);
-        if (cachedResource != null) {
-            if (cachedResource.isEncoded()) {
-                // The resource is encoded, issue a decoding request.
-                final MediaRequest<T> decodeRequest = (MediaRequest<T>) cachedResource
-                        .getMediaDecodingRequest(mediaRequest);
-                Assert.notNull(decodeRequest);
-                cachedResource.release();
-                loadedResource = loadMediaFromRequest(decodeRequest, chainedRequests);
-            } else {
-                // The resource is ready-to-use.
-                loadedResource = cachedResource;
-            }
-        } else {
-            // Actually load the media after cache miss.
-            loadedResource = loadMediaFromRequest(mediaRequest, chainedRequests);
-        }
-        return new MediaLoadingResult<>(loadedResource, cachedResource != null /* fromCache */,
-                chainedRequests);
-    }
-
-    private <T extends RefCountedMediaResource> T loadMediaFromCache(
-            final MediaRequest<T> mediaRequest) {
-        if (mediaRequest.getRequestType() != MediaRequest.REQUEST_LOAD_MEDIA) {
-            // Only look up in the cache if we are loading media.
-            return null;
-        }
-        final MediaCache<T> mediaCache = mediaRequest.getMediaCache();
-        if (mediaCache != null) {
-            final T mediaResource = mediaCache.fetchResourceFromCache(mediaRequest.getKey());
-            if (mediaResource != null) {
-                return mediaResource;
-            }
-        }
-        return null;
-    }
-
-    private <T extends RefCountedMediaResource> T loadMediaFromRequest(
-            final MediaRequest<T> mediaRequest, final List<MediaRequest<T>> chainedRequests)
-                    throws Exception {
-        final T resource = mediaRequest.loadMediaBlocking(chainedRequests);
-        // mediaRequest.loadMediaBlocking() should never return null without
-        // throwing an exception.
-        Assert.notNull(resource);
-        // It's possible for the media to be evicted right after it's added to
-        // the cache (possibly because it's by itself too big for the cache).
-        // It's also possible that, after added to the cache, something else comes
-        // to the cache and evicts this media resource. To prevent this from
-        // recycling the underlying resource objects, make sure to add ref before
-        // adding to cache so that the caller is guaranteed a ref on the resource.
-        resource.addRef();
-        // Don't cache the media request if it is defined as non-cacheable.
-        if (resource.isCacheable()) {
-            addResourceToMemoryCache(mediaRequest, resource);
-        }
-        return resource;
-    }
-
-    /**
-     * Schedule an async media request on the given <code>executor</code>.
-     * @param mediaRequest the media request to be processed asynchronously. May be either an
-     * {@link AsyncMediaRequestWrapper} for listening for event callbacks, or a regular media
-     * request for fire-and-forget type of behavior.
-     */
-    private <T extends RefCountedMediaResource> void scheduleAsyncMediaRequest(
-            final MediaRequest<T> mediaRequest, final Executor executor) {
-        final BindableMediaRequest<T> bindableRequest =
-                (mediaRequest instanceof BindableMediaRequest<?>) ?
-                        (BindableMediaRequest<T>) mediaRequest : null;
-        if (bindableRequest != null && !bindableRequest.isBound()) {
-            return; // Request is obsolete
-        }
-        // We don't use SafeAsyncTask here since it enforces the shared thread pool executor
-        // whereas we want a dedicated thread pool executor.
-        AsyncTask<Void, Void, MediaLoadingResult<T>> mediaLoadingTask =
-                new AsyncTask<Void, Void, MediaLoadingResult<T>>() {
-            private Exception mException;
-
-            @Override
-            protected MediaLoadingResult<T> doInBackground(Void... params) {
-                // Double check the request is still valid by the time we start processing it
-                if (bindableRequest != null && !bindableRequest.isBound()) {
-                    return null; // Request is obsolete
-                }
-                try {
-                    return processMediaRequestInternal(mediaRequest);
-                } catch (Exception e) {
-                    mException = e;
-                    return null;
-                }
-            }
-
-            @Override
-            protected void onPostExecute(final MediaLoadingResult<T> result) {
-                if (result != null) {
-                    Assert.isNull(mException);
-                    Assert.isTrue(result.loadedResource.getRefCount() > 0);
-                    try {
-                        if (bindableRequest != null) {
-                            bindableRequest.onMediaResourceLoaded(
-                                    bindableRequest, result.loadedResource, result.fromCache);
-                        }
-                    } finally {
-                        result.loadedResource.release();
-                        result.scheduleChainedRequests();
-                    }
-                } else if (mException != null) {
-                    LogUtil.e(LogUtil.BUGLE_TAG, "Asynchronous media loading failed, key=" +
-                            mediaRequest.getKey(), mException);
-                    if (bindableRequest != null) {
-                        bindableRequest.onMediaResourceLoadError(bindableRequest, mException);
-                    }
-                } else {
-                    Assert.isTrue(bindableRequest == null || !bindableRequest.isBound());
-                    if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                        LogUtil.v(TAG, "media request not processed, no longer bound; key=" +
-                                LogUtil.sanitizePII(mediaRequest.getKey()) /* key with phone# */);
-                    }
-                }
-            }
-        };
-        mediaLoadingTask.executeOnExecutor(executor, (Void) null);
-    }
-
-    @VisibleForTesting
-    @RunsOnAnyThread
-    <T extends RefCountedMediaResource> void addResourceToMemoryCache(
-            final MediaRequest<T> mediaRequest, final T mediaResource) {
-        Assert.isTrue(mediaResource != null);
-        final MediaCache<T> mediaCache = mediaRequest.getMediaCache();
-        if (mediaCache != null) {
-            mediaCache.addResourceToCache(mediaRequest.getKey(), mediaResource);
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "added media resource to " + mediaCache.getName() + ". key=" +
-                        LogUtil.sanitizePII(mediaRequest.getKey()) /* key can contain phone# */);
-            }
-        }
-    }
-
-    private class MediaLoadingResult<T extends RefCountedMediaResource> {
-        public final T loadedResource;
-        public final boolean fromCache;
-        private final List<MediaRequest<T>> mChainedRequests;
-
-        MediaLoadingResult(final T loadedResource, final boolean fromCache,
-                final List<MediaRequest<T>> chainedRequests) {
-            this.loadedResource = loadedResource;
-            this.fromCache = fromCache;
-            mChainedRequests = chainedRequests;
-        }
-
-        /**
-         * Asynchronously schedule a list of chained requests on the background thread.
-         */
-        public void scheduleChainedRequests() {
-            for (final MediaRequest<T> mediaRequest : mChainedRequests) {
-                scheduleAsyncMediaRequest(mediaRequest, MEDIA_BACKGROUND_EXECUTOR);
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/MessagePartImageRequestDescriptor.java b/src/com/android/messaging/datamodel/media/MessagePartImageRequestDescriptor.java
deleted file mode 100644
index 1871e66..0000000
--- a/src/com/android/messaging/datamodel/media/MessagePartImageRequestDescriptor.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.net.Uri;
-
-import com.android.messaging.datamodel.action.UpdateMessagePartSizeAction;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.util.ImageUtils;
-
-/**
- * Image descriptor attached to a message part.
- * Once image size is determined during loading this descriptor will update the db if necessary.
- */
-public class MessagePartImageRequestDescriptor extends UriImageRequestDescriptor {
-    private final String mMessagePartId;
-
-    /**
-     * Creates a new image request for a message part.
-     */
-    public MessagePartImageRequestDescriptor(final MessagePartData messagePart,
-            final int desiredWidth, final int desiredHeight, boolean isStatic) {
-        // Pull image parameters out of the MessagePart record
-        this(messagePart.getPartId(), messagePart.getContentUri(), desiredWidth, desiredHeight,
-                messagePart.getWidth(), messagePart.getHeight(), isStatic);
-    }
-
-    protected MessagePartImageRequestDescriptor(final String messagePartId, final Uri contentUri,
-            final int desiredWidth, final int desiredHeight, final int sourceWidth,
-            final int sourceHeight, boolean isStatic) {
-        super(contentUri, desiredWidth, desiredHeight, sourceWidth, sourceHeight,
-                true /* allowCompression */, isStatic, false /* cropToCircle */,
-                ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
-        mMessagePartId = messagePartId;
-    }
-
-    @Override
-    public void updateSourceDimensions(final int updatedWidth, final int updatedHeight) {
-        // If the dimensions of the image do not match then queue a DB update with new size.
-        // Don't update if we don't have a part id, which happens if this part is loaded as
-        // draft through actions such as share intent/message forwarding.
-        if (mMessagePartId != null &&
-                updatedWidth != MessagePartData.UNSPECIFIED_SIZE &&
-                updatedHeight != MessagePartData.UNSPECIFIED_SIZE &&
-                updatedWidth != sourceWidth && updatedHeight != sourceHeight) {
-            UpdateMessagePartSizeAction.updateSize(mMessagePartId, updatedWidth, updatedHeight);
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/MessagePartVideoThumbnailRequestDescriptor.java b/src/com/android/messaging/datamodel/media/MessagePartVideoThumbnailRequestDescriptor.java
deleted file mode 100644
index ff11e92..0000000
--- a/src/com/android/messaging/datamodel/media/MessagePartVideoThumbnailRequestDescriptor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.net.Uri;
-
-import com.android.messaging.datamodel.data.MessagePartData;
-
-public class MessagePartVideoThumbnailRequestDescriptor extends MessagePartImageRequestDescriptor {
-    public MessagePartVideoThumbnailRequestDescriptor(MessagePartData messagePart) {
-        super(messagePart, ImageRequest.UNSPECIFIED_SIZE, ImageRequest.UNSPECIFIED_SIZE, false);
-    }
-
-    public MessagePartVideoThumbnailRequestDescriptor(Uri uri) {
-        super(null, uri, ImageRequest.UNSPECIFIED_SIZE, ImageRequest.UNSPECIFIED_SIZE,
-                ImageRequest.UNSPECIFIED_SIZE, ImageRequest.UNSPECIFIED_SIZE, false);
-    }
-
-    @Override
-    public MediaRequest<ImageResource> buildSyncMediaRequest(final Context context) {
-        return new VideoThumbnailRequest(context, this);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/NetworkUriImageRequest.java b/src/com/android/messaging/datamodel/media/NetworkUriImageRequest.java
deleted file mode 100644
index 642e947..0000000
--- a/src/com/android/messaging/datamodel/media/NetworkUriImageRequest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-
-import com.android.messaging.Factory;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-/**
- * Serves network content URI based image requests.
- */
-public class NetworkUriImageRequest<D extends UriImageRequestDescriptor> extends
-        ImageRequest<D> {
-
-    public NetworkUriImageRequest(Context context, D descriptor) {
-        super(context, descriptor);
-        mOrientation = android.media.ExifInterface.ORIENTATION_UNDEFINED;
-    }
-
-    @Override
-    protected InputStream getInputStreamForResource() throws FileNotFoundException {
-        Assert.isNotMainThread();
-        // Since we need to have an open urlConnection to get the stream, but we don't want to keep
-        // that connection open. There is no good way to perform this method.
-        return null;
-    }
-
-    @Override
-    protected boolean isGif() throws FileNotFoundException {
-        Assert.isNotMainThread();
-
-        HttpURLConnection connection = null;
-        try {
-            final URL url = new URL(mDescriptor.uri.toString());
-            connection = (HttpURLConnection) url.openConnection();
-            connection.connect();
-            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
-                return ContentType.IMAGE_GIF.equalsIgnoreCase(connection.getContentType());
-            }
-        } catch (MalformedURLException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG,
-                    "MalformedUrl for image with url: "
-                            + mDescriptor.uri.toString(), e);
-        } catch (IOException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG,
-                    "IOException trying to get inputStream for image with url: "
-                            + mDescriptor.uri.toString(), e);
-        } finally {
-            if (connection != null) {
-                connection.disconnect();
-            }
-        }
-        return false;
-    }
-
-    @SuppressWarnings("deprecation")
-    @Override
-    public Bitmap loadBitmapInternal() throws IOException {
-        Assert.isNotMainThread();
-
-        InputStream inputStream = null;
-        Bitmap bitmap = null;
-        HttpURLConnection connection = null;
-        try {
-            final URL url = new URL(mDescriptor.uri.toString());
-            connection = (HttpURLConnection) url.openConnection();
-            connection.setDoInput(true);
-            connection.connect();
-            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
-                bitmap = BitmapFactory.decodeStream(connection.getInputStream());
-            }
-        } catch (MalformedURLException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG,
-                    "MalformedUrl for image with url: "
-                            + mDescriptor.uri.toString(), e);
-        } catch (final OutOfMemoryError e) {
-            LogUtil.e(LogUtil.BUGLE_TAG,
-                    "OutOfMemoryError for image with url: "
-                            + mDescriptor.uri.toString(), e);
-            Factory.get().reclaimMemory();
-        } catch (IOException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG,
-                    "IOException trying to get inputStream for image with url: "
-                            + mDescriptor.uri.toString(), e);
-        } finally {
-            if (inputStream != null) {
-                inputStream.close();
-            }
-            if (connection != null) {
-                connection.disconnect();
-            }
-        }
-        return bitmap;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/PoolableImageCache.java b/src/com/android/messaging/datamodel/media/PoolableImageCache.java
deleted file mode 100644
index 1d8ebc1..0000000
--- a/src/com/android/messaging/datamodel/media/PoolableImageCache.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Color;
-import android.os.SystemClock;
-import androidx.annotation.NonNull;
-import android.util.SparseArray;
-
-import com.android.messaging.Factory;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.LinkedList;
-
-/**
- * A media cache that holds image resources, which doubles as a bitmap pool that allows the
- * consumer to optionally decode image resources using unused bitmaps stored in the cache.
- */
-public class PoolableImageCache extends MediaCache<ImageResource> {
-    private static final int MIN_TIME_IN_POOL = 5000;
-
-    /** Encapsulates bitmap pool representation of the image cache */
-    private final ReusableImageResourcePool mReusablePoolAccessor = new ReusableImageResourcePool();
-
-    public PoolableImageCache(final int id, final String name) {
-        this(DEFAULT_MEDIA_RESOURCE_CACHE_SIZE_IN_KILOBYTES, id, name);
-    }
-
-    public PoolableImageCache(final int maxSize, final int id, final String name) {
-        super(maxSize, id, name);
-    }
-
-    /**
-     * Creates a new BitmapFactory.Options for using the self-contained bitmap pool.
-     */
-    public static BitmapFactory.Options getBitmapOptionsForPool(final boolean scaled,
-            final int inputDensity, final int targetDensity) {
-        final BitmapFactory.Options options = new BitmapFactory.Options();
-        options.inScaled = scaled;
-        options.inDensity = inputDensity;
-        options.inTargetDensity = targetDensity;
-        options.inSampleSize = 1;
-        options.inJustDecodeBounds = false;
-        options.inMutable = true;
-        return options;
-    }
-
-    @Override
-    public synchronized ImageResource addResourceToCache(final String key,
-            final ImageResource imageResource) {
-        mReusablePoolAccessor.onResourceEnterCache(imageResource);
-        return super.addResourceToCache(key, imageResource);
-    }
-
-    @Override
-    protected synchronized void entryRemoved(final boolean evicted, final String key,
-            final ImageResource oldValue, final ImageResource newValue) {
-        mReusablePoolAccessor.onResourceLeaveCache(oldValue);
-        super.entryRemoved(evicted, key, oldValue, newValue);
-    }
-
-    /**
-     * Returns a representation of the image cache as a reusable bitmap pool.
-     */
-    public ReusableImageResourcePool asReusableBitmapPool() {
-        return mReusablePoolAccessor;
-    }
-
-    /**
-     * A bitmap pool representation built on top of the image cache. It treats the image resources
-     * stored in the image cache as a self-contained bitmap pool and is able to create or
-     * reclaim bitmap resource as needed.
-     */
-    public class ReusableImageResourcePool {
-        private static final int MAX_SUPPORTED_IMAGE_DIMENSION = 0xFFFF;
-        private static final int INVALID_POOL_KEY = 0;
-
-        /**
-         * Number of reuse failures to skip before reporting.
-         * For debugging purposes, change to a lower number for more frequent reporting.
-         */
-        private static final int FAILED_REPORTING_FREQUENCY = 100;
-
-        /**
-         * Count of reuse failures which have occurred.
-         */
-        private volatile int mFailedBitmapReuseCount = 0;
-
-        /**
-         * Count of reuse successes which have occurred.
-         */
-        private volatile int mSucceededBitmapReuseCount = 0;
-
-        /**
-         * A sparse array from bitmap size to a list of image cache entries that match the
-         * given size. This map is used to quickly retrieve a usable bitmap to be reused by an
-         * incoming ImageRequest. We need to ensure that this sparse array always contains only
-         * elements currently in the image cache with no other consumer.
-         */
-        private final SparseArray<LinkedList<ImageResource>> mImageListSparseArray;
-
-        public ReusableImageResourcePool() {
-            mImageListSparseArray = new SparseArray<LinkedList<ImageResource>>();
-        }
-
-        /**
-         * Load an input stream into a bitmap. Uses a bitmap from the pool if possible to reduce
-         * memory turnover.
-         * @param inputStream InputStream load. Cannot be null.
-         * @param optionsTmp Should be the same options returned from getBitmapOptionsForPool().
-         * Cannot be null.
-         * @param width The width of the bitmap.
-         * @param height The height of the bitmap.
-         * @return The decoded Bitmap with the resource drawn in it.
-         * @throws IOException
-         */
-        public Bitmap decodeSampledBitmapFromInputStream(@NonNull final InputStream inputStream,
-                @NonNull final BitmapFactory.Options optionsTmp,
-                final int width, final int height) throws IOException {
-            if (width <= 0 || height <= 0) {
-                // This is an invalid / corrupted image of zero size.
-                LogUtil.w(LogUtil.BUGLE_IMAGE_TAG, "PoolableImageCache: Decoding bitmap with " +
-                        "invalid size");
-                throw new IOException("Invalid size / corrupted image");
-            }
-            Assert.notNull(inputStream);
-            assignPoolBitmap(optionsTmp, width, height);
-            Bitmap b = null;
-            try {
-                b = BitmapFactory.decodeStream(inputStream, null, optionsTmp);
-                mSucceededBitmapReuseCount++;
-            } catch (final IllegalArgumentException e) {
-                // BitmapFactory couldn't decode the file, try again without an inputBufferBitmap.
-                if (optionsTmp.inBitmap != null) {
-                    optionsTmp.inBitmap.recycle();
-                    optionsTmp.inBitmap = null;
-                    b = BitmapFactory.decodeStream(inputStream, null, optionsTmp);
-                    onFailedToReuse();
-                }
-            } catch (final OutOfMemoryError e) {
-                LogUtil.w(LogUtil.BUGLE_IMAGE_TAG, "Oom decoding inputStream");
-                Factory.get().reclaimMemory();
-            }
-            return b;
-        }
-
-        /**
-         * Turn encoded bytes into a bitmap. Uses a bitmap from the pool if possible to reduce
-         * memory turnover.
-         * @param bytes Encoded bytes to draw on the bitmap. Cannot be null.
-         * @param optionsTmp The bitmap will set here and the input should be generated from
-         * getBitmapOptionsForPool(). Cannot be null.
-         * @param width The width of the bitmap.
-         * @param height The height of the bitmap.
-         * @return A Bitmap with the encoded bytes drawn in it.
-         * @throws IOException
-         */
-        public Bitmap decodeByteArray(@NonNull final byte[] bytes,
-                @NonNull final BitmapFactory.Options optionsTmp, final int width,
-                final int height) throws OutOfMemoryError, IOException {
-            if (width <= 0 || height <= 0) {
-                // This is an invalid / corrupted image of zero size.
-                LogUtil.w(LogUtil.BUGLE_IMAGE_TAG, "PoolableImageCache: Decoding bitmap with " +
-                        "invalid size");
-                throw new IOException("Invalid size / corrupted image");
-            }
-            Assert.notNull(bytes);
-            Assert.notNull(optionsTmp);
-            assignPoolBitmap(optionsTmp, width, height);
-            Bitmap b = null;
-            try {
-                b = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, optionsTmp);
-                mSucceededBitmapReuseCount++;
-            } catch (final IllegalArgumentException e) {
-                // BitmapFactory couldn't decode the file, try again without an inputBufferBitmap.
-                // (i.e. without the bitmap from the pool)
-                if (optionsTmp.inBitmap != null) {
-                    optionsTmp.inBitmap.recycle();
-                    optionsTmp.inBitmap = null;
-                    b = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, optionsTmp);
-                    onFailedToReuse();
-                }
-            } catch (final OutOfMemoryError e) {
-                LogUtil.w(LogUtil.BUGLE_IMAGE_TAG, "Oom decoding inputStream");
-                Factory.get().reclaimMemory();
-            }
-            return b;
-        }
-
-        /**
-         * Called when a new image resource is added to the cache. We add the resource to the
-         * pool so it's properly keyed into the pool structure.
-         */
-        void onResourceEnterCache(final ImageResource imageResource) {
-            if (getPoolKey(imageResource) != INVALID_POOL_KEY) {
-                addResourceToPool(imageResource);
-            }
-        }
-
-        /**
-         * Called when an image resource is evicted from the cache. Bitmap pool's entries are
-         * strictly tied to their presence in the image cache. Once an image is evicted from the
-         * cache, it should be removed from the pool.
-         */
-        void onResourceLeaveCache(final ImageResource imageResource) {
-            if (getPoolKey(imageResource) != INVALID_POOL_KEY) {
-                removeResourceFromPool(imageResource);
-            }
-        }
-
-        private void addResourceToPool(final ImageResource imageResource) {
-            synchronized (PoolableImageCache.this) {
-                final int poolKey = getPoolKey(imageResource);
-                Assert.isTrue(poolKey != INVALID_POOL_KEY);
-                LinkedList<ImageResource> imageList = mImageListSparseArray.get(poolKey);
-                if (imageList == null) {
-                    imageList = new LinkedList<ImageResource>();
-                    mImageListSparseArray.put(poolKey, imageList);
-                }
-                imageList.addLast(imageResource);
-            }
-        }
-
-        private void removeResourceFromPool(final ImageResource imageResource) {
-            synchronized (PoolableImageCache.this) {
-                final int poolKey = getPoolKey(imageResource);
-                Assert.isTrue(poolKey != INVALID_POOL_KEY);
-                final LinkedList<ImageResource> imageList = mImageListSparseArray.get(poolKey);
-                if (imageList != null) {
-                    imageList.remove(imageResource);
-                }
-            }
-        }
-
-        /**
-         * Try to get a reusable bitmap from the pool with the given width and height. As a
-         * result of this call, the caller will assume ownership of the returned bitmap.
-         */
-        private Bitmap getReusableBitmapFromPool(final int width, final int height) {
-            synchronized (PoolableImageCache.this) {
-                final int poolKey = getPoolKey(width, height);
-                if (poolKey != INVALID_POOL_KEY) {
-                    final LinkedList<ImageResource> images = mImageListSparseArray.get(poolKey);
-                    if (images != null && images.size() > 0) {
-                        // Try to reuse the first available bitmap from the pool list. We start from
-                        // the least recently added cache entry of the given size.
-                        ImageResource imageToUse = null;
-                        for (int i = 0; i < images.size(); i++) {
-                            final ImageResource image = images.get(i);
-                            if (image.getRefCount() == 1) {
-                                image.acquireLock();
-                                if (image.getRefCount() == 1) {
-                                    // The image is only used by the cache, so it's reusable.
-                                    imageToUse = images.remove(i);
-                                    break;
-                                } else {
-                                    // Logically, this shouldn't happen, because as soon as the
-                                    // cache is the only user of this resource, it will not be
-                                    // used by anyone else until the next cache access, but we
-                                    // currently hold on to the cache lock. But technically
-                                    // future changes may violate this assumption, so warn about
-                                    // this.
-                                    LogUtil.w(LogUtil.BUGLE_IMAGE_TAG, "Image refCount changed " +
-                                            "from 1 in getReusableBitmapFromPool()");
-                                    image.releaseLock();
-                                }
-                            }
-                        }
-
-                        if (imageToUse == null) {
-                            return null;
-                        }
-
-                        try {
-                            imageToUse.assertLockHeldByCurrentThread();
-
-                            // Only reuse the bitmap if the last time we use was greater than 5s.
-                            // This allows the cache a chance to reuse instead of always taking the
-                            // oldest.
-                            final long timeSinceLastRef = SystemClock.elapsedRealtime() -
-                                    imageToUse.getLastRefAddTimestamp();
-                            if (timeSinceLastRef < MIN_TIME_IN_POOL) {
-                                if (LogUtil.isLoggable(LogUtil.BUGLE_IMAGE_TAG, LogUtil.VERBOSE)) {
-                                    LogUtil.v(LogUtil.BUGLE_IMAGE_TAG, "Not reusing reusing " +
-                                            "first available bitmap from the pool because it " +
-                                            "has not been in the pool long enough. " +
-                                            "timeSinceLastRef=" + timeSinceLastRef);
-                                }
-                                // Put back the image and return no reuseable bitmap.
-                                images.addLast(imageToUse);
-                                return null;
-                            }
-
-                            // Add a temp ref on the image resource so it won't be GC'd after
-                            // being removed from the cache.
-                            imageToUse.addRef();
-
-                            // Remove the image resource from the image cache.
-                            final ImageResource removed = remove(imageToUse.getKey());
-                            Assert.isTrue(removed == imageToUse);
-
-                            // Try to reuse the bitmap from the image resource. This will transfer
-                            // ownership of the bitmap object to the caller of this method.
-                            final Bitmap reusableBitmap = imageToUse.reuseBitmap();
-
-                            imageToUse.release();
-                            return reusableBitmap;
-                        } finally {
-                            // We are either done with the reuse operation, or decided not to use
-                            // the image. Either way, release the lock.
-                            imageToUse.releaseLock();
-                        }
-                    }
-                }
-            }
-            return null;
-        }
-
-        /**
-         * Try to locate and return a reusable bitmap from the pool, or create a new bitmap.
-         * @param width desired bitmap width
-         * @param height desired bitmap height
-         * @return the created or reused mutable bitmap that has its background cleared to
-         * {@value Color#TRANSPARENT}
-         */
-        public Bitmap createOrReuseBitmap(final int width, final int height) {
-            return createOrReuseBitmap(width, height, Color.TRANSPARENT);
-        }
-
-        /**
-         * Try to locate and return a reusable bitmap from the pool, or create a new bitmap.
-         * @param width desired bitmap width
-         * @param height desired bitmap height
-         * @param backgroundColor the background color for the returned bitmap
-         * @return the created or reused mutable bitmap with the requested background color
-         */
-        public Bitmap createOrReuseBitmap(final int width, final int height,
-                final int backgroundColor) {
-            Bitmap retBitmap = null;
-            try {
-                final Bitmap poolBitmap = getReusableBitmapFromPool(width, height);
-                retBitmap = (poolBitmap != null) ? poolBitmap :
-                        Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
-                retBitmap.eraseColor(backgroundColor);
-            } catch (final OutOfMemoryError e) {
-                LogUtil.w(LogUtil.BUGLE_IMAGE_TAG, "PoolableImageCache:try to createOrReuseBitmap");
-                Factory.get().reclaimMemory();
-            }
-            return retBitmap;
-        }
-
-        private void assignPoolBitmap(final BitmapFactory.Options optionsTmp, final int width,
-                final int height) {
-            if (optionsTmp.inJustDecodeBounds) {
-                return;
-            }
-            optionsTmp.inBitmap = getReusableBitmapFromPool(width, height);
-        }
-
-        /**
-         * @return The pool key for the provided image dimensions or 0 if either width or height is
-         * greater than the max supported image dimension.
-         */
-        private int getPoolKey(final int width, final int height) {
-            if (width > MAX_SUPPORTED_IMAGE_DIMENSION || height > MAX_SUPPORTED_IMAGE_DIMENSION) {
-                return INVALID_POOL_KEY;
-            }
-            return (width << 16) | height;
-        }
-
-        /**
-         * @return the pool key for a given image resource.
-         */
-        private int getPoolKey(final ImageResource imageResource) {
-            if (imageResource.supportsBitmapReuse()) {
-                final Bitmap bitmap = imageResource.getBitmap();
-                if (bitmap != null && bitmap.isMutable()) {
-                    final int width = bitmap.getWidth();
-                    final int height = bitmap.getHeight();
-                    if (width > 0 && height > 0) {
-                        return getPoolKey(width, height);
-                    }
-                }
-            }
-            return INVALID_POOL_KEY;
-        }
-
-        /**
-         * Called when bitmap reuse fails. Conditionally report the failure with statistics.
-         */
-        private void onFailedToReuse() {
-            mFailedBitmapReuseCount++;
-            if (mFailedBitmapReuseCount % FAILED_REPORTING_FREQUENCY == 0) {
-                LogUtil.w(LogUtil.BUGLE_IMAGE_TAG,
-                        "Pooled bitmap consistently not being reused. Failure count = " +
-                                mFailedBitmapReuseCount + ", success count = " +
-                                mSucceededBitmapReuseCount);
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/RefCountedMediaResource.java b/src/com/android/messaging/datamodel/media/RefCountedMediaResource.java
deleted file mode 100644
index c21f477..0000000
--- a/src/com/android/messaging/datamodel/media/RefCountedMediaResource.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.os.SystemClock;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.google.common.base.Throwables;
-
-import java.util.ArrayList;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * A ref-counted class that holds loaded media resource, be it bitmaps or media bytes.
- * Subclasses must implement the close() method to release any resources (such as bitmaps)
- * when it's no longer used.
- *
- * Instances of the subclasses are:
- * 1. Loaded by their corresponding MediaRequest classes.
- * 2. Maintained by MediaResourceManager in its MediaCache pool.
- * 3. Used by the UI (such as ContactIconViews) to present the content.
- *
- * Note: all synchronized methods in this class (e.g. addRef()) should not attempt to make outgoing
- * calls that could potentially acquire media cache locks due to the potential deadlock this can
- * cause. To synchronize read/write access to shared resource, {@link #acquireLock()} and
- * {@link #releaseLock()} must be used, instead of using synchronized keyword.
- */
-public abstract class RefCountedMediaResource {
-    private final String mKey;
-    private int mRef = 0;
-    private long mLastRefAddTimestamp;
-
-    // Set DEBUG to true to enable detailed stack trace for each addRef() and release() operation
-    // to find out where each ref change happens.
-    private static final boolean DEBUG = false;
-    private static final String TAG = "bugle_media_ref_history";
-    private final ArrayList<String> mRefHistory = new ArrayList<String>();
-
-    // A lock that guards access to shared members in this class (and all its subclasses).
-    private final ReentrantLock mLock = new ReentrantLock();
-
-    public RefCountedMediaResource(final String key) {
-        mKey = key;
-    }
-
-    public String getKey() {
-        return mKey;
-    }
-
-    public void addRef() {
-        acquireLock();
-        try {
-            if (DEBUG) {
-                mRefHistory.add("Added ref current ref = " + mRef);
-                mRefHistory.add(Throwables.getStackTraceAsString(new Exception()));
-            }
-
-            mRef++;
-            mLastRefAddTimestamp = SystemClock.elapsedRealtime();
-        } finally {
-            releaseLock();
-        }
-    }
-
-    public void release() {
-        acquireLock();
-        try {
-            if (DEBUG) {
-                mRefHistory.add("Released ref current ref = " + mRef);
-                mRefHistory.add(Throwables.getStackTraceAsString(new Exception()));
-            }
-
-            mRef--;
-            if (mRef == 0) {
-                close();
-            } else if (mRef < 0) {
-                if (DEBUG) {
-                    LogUtil.i(TAG, "Unwinding ref count history for RefCountedMediaResource "
-                            + this);
-                    for (final String ref : mRefHistory) {
-                        LogUtil.i(TAG, ref);
-                    }
-                }
-                Assert.fail("RefCountedMediaResource has unbalanced ref. Refcount=" + mRef);
-            }
-        } finally {
-            releaseLock();
-        }
-    }
-
-    public int getRefCount() {
-        acquireLock();
-        try {
-            return mRef;
-        } finally {
-            releaseLock();
-        }
-    }
-
-    public long getLastRefAddTimestamp() {
-        acquireLock();
-        try {
-            return mLastRefAddTimestamp;
-        } finally {
-            releaseLock();
-        }
-    }
-
-    public void assertSingularRefCount() {
-        acquireLock();
-        try {
-            Assert.equals(1, mRef);
-        } finally {
-            releaseLock();
-        }
-    }
-
-    void acquireLock() {
-        mLock.lock();
-    }
-
-    void releaseLock() {
-        mLock.unlock();
-    }
-
-    void assertLockHeldByCurrentThread() {
-        Assert.isTrue(mLock.isHeldByCurrentThread());
-    }
-
-    boolean isEncoded() {
-        return false;
-    }
-
-    boolean isCacheable() {
-        return true;
-    }
-
-    MediaRequest<? extends RefCountedMediaResource> getMediaDecodingRequest(
-            final MediaRequest<? extends RefCountedMediaResource> originalRequest) {
-        return null;
-    }
-
-    MediaRequest<? extends RefCountedMediaResource> getMediaEncodingRequest(
-            final MediaRequest<? extends RefCountedMediaResource> originalRequest) {
-        return null;
-    }
-
-    public abstract int getMediaSize();
-    protected abstract void close();
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/datamodel/media/SimSelectorAvatarRequest.java b/src/com/android/messaging/datamodel/media/SimSelectorAvatarRequest.java
deleted file mode 100644
index e4f0334..0000000
--- a/src/com/android/messaging/datamodel/media/SimSelectorAvatarRequest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffColorFilter;
-import android.graphics.Rect;
-import android.graphics.Typeface;
-import android.graphics.drawable.BitmapDrawable;
-import android.media.ExifInterface;
-import android.text.TextUtils;
-
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-
-import java.io.IOException;
-import java.util.List;
-
-public class SimSelectorAvatarRequest extends AvatarRequest {
-    private static Bitmap sRegularSimIcon;
-
-    public SimSelectorAvatarRequest(final Context context,
-            final AvatarRequestDescriptor descriptor) {
-        super(context, descriptor);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected ImageResource loadMediaInternal(List<MediaRequest<ImageResource>> chainedTasks)
-            throws IOException {
-        Assert.isNotMainThread();
-        final String avatarType = AvatarUriUtil.getAvatarType(mDescriptor.uri);
-        if (AvatarUriUtil.TYPE_SIM_SELECTOR_URI.equals(avatarType)){
-            final int width = mDescriptor.desiredWidth;
-            final int height = mDescriptor.desiredHeight;
-            final String identifier = AvatarUriUtil.getIdentifier(mDescriptor.uri);
-            final boolean simSelected = AvatarUriUtil.getSimSelected(mDescriptor.uri);
-            final int simColor = AvatarUriUtil.getSimColor(mDescriptor.uri);
-            final boolean incoming = AvatarUriUtil.getSimIncoming(mDescriptor.uri);
-            return renderSimAvatarInternal(identifier, width, height, simColor, simSelected,
-                    incoming);
-        }
-        return super.loadMediaInternal(chainedTasks);
-    }
-
-    private ImageResource renderSimAvatarInternal(final String identifier, final int width,
-            final int height, final int subColor, final boolean selected, final boolean incoming) {
-        final Resources resources = mContext.getResources();
-        final float halfWidth = width / 2;
-        final float halfHeight = height / 2;
-        final int minOfWidthAndHeight = Math.min(width, height);
-        final int backgroundColor = selected ? subColor : Color.WHITE;
-        final int textColor = selected ? subColor : Color.WHITE;
-        final int simColor = selected ? Color.WHITE : subColor;
-        final Bitmap bitmap = getBitmapPool().createOrReuseBitmap(width, height, backgroundColor);
-        final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        final Canvas canvas = new Canvas(bitmap);
-
-        if (sRegularSimIcon == null) {
-            final BitmapDrawable regularSim = (BitmapDrawable) mContext.getResources()
-                    .getDrawable(R.drawable.ic_sim_card_send);
-            sRegularSimIcon = regularSim.getBitmap();
-        }
-
-        paint.setColorFilter(new PorterDuffColorFilter(simColor, PorterDuff.Mode.SRC_ATOP));
-        paint.setAlpha(0xff);
-        canvas.drawBitmap(sRegularSimIcon, halfWidth - sRegularSimIcon.getWidth() / 2,
-                halfHeight - sRegularSimIcon.getHeight() / 2, paint);
-        paint.setColorFilter(null);
-        paint.setAlpha(0xff);
-
-        if (!TextUtils.isEmpty(identifier)) {
-            paint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL));
-            paint.setColor(textColor);
-            final float letterToTileRatio =
-                    resources.getFraction(R.dimen.sim_identifier_to_tile_ratio, 1, 1);
-            paint.setTextSize(letterToTileRatio * minOfWidthAndHeight);
-
-            final String firstCharString = identifier.substring(0, 1).toUpperCase();
-            final Rect textBound = new Rect();
-            paint.getTextBounds(firstCharString, 0, 1, textBound);
-
-            final float xOffset = halfWidth - textBound.centerX();
-            final float yOffset = halfHeight - textBound.centerY();
-            canvas.drawText(firstCharString, xOffset, yOffset, paint);
-        }
-
-        return new DecodedImageResource(getKey(), bitmap, ExifInterface.ORIENTATION_NORMAL);
-    }
-
-    @Override
-    public int getCacheId() {
-        return BugleMediaCacheManager.AVATAR_IMAGE_CACHE;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/UriImageRequest.java b/src/com/android/messaging/datamodel/media/UriImageRequest.java
deleted file mode 100644
index b4934ca..0000000
--- a/src/com/android/messaging/datamodel/media/UriImageRequest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-
-/**
- * Serves local content URI based image requests.
- */
-public class UriImageRequest<D extends UriImageRequestDescriptor> extends ImageRequest<D> {
-    public UriImageRequest(final Context context, final D descriptor) {
-        super(context, descriptor);
-    }
-
-    @Override
-    protected InputStream getInputStreamForResource() throws FileNotFoundException {
-        return mContext.getContentResolver().openInputStream(mDescriptor.uri);
-    }
-
-    @Override
-    protected ImageResource loadMediaInternal(List<MediaRequest<ImageResource>> chainedTasks)
-            throws IOException {
-        final ImageResource resource = super.loadMediaInternal(chainedTasks);
-        // Check if the caller asked for compression. If so, chain an encoding task if possible.
-        if (mDescriptor.allowCompression && chainedTasks != null) {
-            @SuppressWarnings("unchecked")
-            final MediaRequest<ImageResource> chainedTask = (MediaRequest<ImageResource>)
-                    resource.getMediaEncodingRequest(this);
-            if (chainedTask != null) {
-                chainedTasks.add(chainedTask);
-                // Don't cache decoded image resource since we'll perform compression and cache
-                // the compressed resource.
-                if (resource instanceof DecodedImageResource) {
-                    ((DecodedImageResource) resource).setCacheable(false);
-                }
-            }
-        }
-        return resource;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/UriImageRequestDescriptor.java b/src/com/android/messaging/datamodel/media/UriImageRequestDescriptor.java
deleted file mode 100644
index dae293a..0000000
--- a/src/com/android/messaging/datamodel/media/UriImageRequestDescriptor.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.net.Uri;
-
-import com.android.messaging.util.UriUtil;
-
-public class UriImageRequestDescriptor extends ImageRequestDescriptor {
-    public final Uri uri;
-    public final boolean allowCompression;
-
-    public UriImageRequestDescriptor(final Uri uri) {
-        this(uri, UriImageRequest.UNSPECIFIED_SIZE, UriImageRequest.UNSPECIFIED_SIZE, false, false,
-                false, 0, 0);
-    }
-
-    public UriImageRequestDescriptor(final Uri uri, final int desiredWidth, final int desiredHeight)
-    {
-        this(uri, desiredWidth, desiredHeight, false, false, false, 0, 0);
-    }
-
-    public UriImageRequestDescriptor(final Uri uri, final int desiredWidth, final int desiredHeight,
-            final boolean cropToCircle, final int circleBackgroundColor, int circleStrokeColor)
-    {
-        this(uri, desiredWidth, desiredHeight, false,
-                false, cropToCircle, circleBackgroundColor, circleStrokeColor);
-    }
-
-    public UriImageRequestDescriptor(final Uri uri, final int desiredWidth,
-            final int desiredHeight, final boolean allowCompression, boolean isStatic,
-            boolean cropToCircle, int circleBackgroundColor, int circleStrokeColor) {
-        this(uri, desiredWidth, desiredHeight, UriImageRequest.UNSPECIFIED_SIZE,
-                UriImageRequest.UNSPECIFIED_SIZE, allowCompression, isStatic, cropToCircle,
-                circleBackgroundColor, circleStrokeColor);
-    }
-
-    /**
-     * Creates a new Uri-based image request.
-     * @param uri the content Uri. Currently Bugle only supports local resources Uri (i.e. it has
-     * to begin with content: or android.resource:
-     * @param circleStrokeColor
-     */
-    public UriImageRequestDescriptor(final Uri uri, final int desiredWidth,
-            final int desiredHeight, final int sourceWidth, final int sourceHeight,
-            final boolean allowCompression, final boolean isStatic, final boolean cropToCircle,
-            final int circleBackgroundColor, int circleStrokeColor) {
-        super(desiredWidth, desiredHeight, sourceWidth, sourceHeight, isStatic,
-                cropToCircle, circleBackgroundColor, circleStrokeColor);
-        this.uri = uri;
-        this.allowCompression = allowCompression;
-    }
-
-    @Override
-    public String getKey() {
-        if (uri != null) {
-            final String key = super.getKey();
-            if (key != null) {
-                return new StringBuilder()
-                    .append(uri).append(KEY_PART_DELIMITER)
-                    .append(String.valueOf(allowCompression)).append(KEY_PART_DELIMITER)
-                    .append(key).toString();
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public MediaRequest<ImageResource> buildSyncMediaRequest(final Context context) {
-        if (uri == null || UriUtil.isLocalUri(uri)) {
-            return new UriImageRequest<UriImageRequestDescriptor>(context, this);
-        } else {
-            return new NetworkUriImageRequest<UriImageRequestDescriptor>(context, this);
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/VCardRequest.java b/src/com/android/messaging/datamodel/media/VCardRequest.java
deleted file mode 100644
index d6e992c..0000000
--- a/src/com/android/messaging/datamodel/media/VCardRequest.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.net.Uri;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.UriUtil;
-import com.android.vcard.VCardConfig;
-import com.android.vcard.VCardEntry;
-import com.android.vcard.VCardEntryCounter;
-import com.android.vcard.VCardInterpreter;
-import com.android.vcard.VCardParser;
-import com.android.vcard.VCardParser_V21;
-import com.android.vcard.VCardParser_V30;
-import com.android.vcard.VCardSourceDetector;
-import com.android.vcard.exception.VCardException;
-import com.android.vcard.exception.VCardNestedException;
-import com.android.vcard.exception.VCardNotSupportedException;
-import com.android.vcard.exception.VCardVersionException;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Requests and parses VCard data. In Bugle, we need to display VCard details in the conversation
- * view such as avatar icon and name, which can be expensive if we parse VCard every time.
- * Therefore, we'd like to load the vcard once and cache it in our media cache using the
- * MediaResourceManager component. To load the VCard, we use framework's VCard support to
- * interpret the VCard content, which gives us information such as phone and email list, which
- * we'll put in VCardResource object to be cached.
- *
- * Some particular attention is needed for the avatar icon. If the VCard contains avatar icon,
- * it's in byte array form that can't easily be cached/persisted. Therefore, we persist the
- * image bytes to the scratch directory and generate a content Uri for it, so that ContactIconView
- * may use this Uri to display and cache the image if needed.
- */
-public class VCardRequest implements MediaRequest<VCardResource> {
-    private final Context mContext;
-    private final VCardRequestDescriptor mDescriptor;
-    private final List<VCardResourceEntry> mLoadedVCards;
-    private VCardResource mLoadedResource;
-    private static final int VCARD_LOADING_TIMEOUT_MILLIS = 10000;  // 10s
-    private static final String DEFAULT_VCARD_TYPE = "default";
-
-    VCardRequest(final Context context, final VCardRequestDescriptor descriptor) {
-        mDescriptor = descriptor;
-        mContext = context;
-        mLoadedVCards = new ArrayList<VCardResourceEntry>();
-    }
-
-    @Override
-    public String getKey() {
-        return mDescriptor.vCardUri.toString();
-    }
-
-    @Override
-    @DoesNotRunOnMainThread
-    public VCardResource loadMediaBlocking(List<MediaRequest<VCardResource>> chainedTask)
-            throws Exception {
-        Assert.isNotMainThread();
-        Assert.isTrue(mLoadedResource == null);
-        Assert.equals(0, mLoadedVCards.size());
-
-        // The VCard library doesn't support synchronously loading the media resource. Therefore,
-        // We have to burn the thread waiting for the result to come back.
-        final CountDownLatch signal = new CountDownLatch(1);
-        if (!parseVCard(mDescriptor.vCardUri, signal)) {
-            // Directly fail without actually going through the interpreter, return immediately.
-            throw new VCardException("Invalid vcard");
-        }
-
-        signal.await(VCARD_LOADING_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
-        if (mLoadedResource == null) {
-            // Maybe null if failed or timeout.
-            throw new VCardException("Failure or timeout loading vcard");
-        }
-        return mLoadedResource;
-    }
-
-    @Override
-    public int getCacheId() {
-        return BugleMediaCacheManager.VCARD_CACHE;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public MediaCache<VCardResource> getMediaCache() {
-        return (MediaCache<VCardResource>) MediaCacheManager.get().getOrCreateMediaCacheById(
-                getCacheId());
-    }
-
-    @DoesNotRunOnMainThread
-    private boolean parseVCard(final Uri targetUri, final CountDownLatch signal) {
-        Assert.isNotMainThread();
-        final VCardEntryCounter counter = new VCardEntryCounter();
-        final VCardSourceDetector detector = new VCardSourceDetector();
-        boolean result;
-        try {
-            // We don't know which type should be used to parse the Uri.
-            // It is possible to misinterpret the vCard, but we expect the parser
-            // lets VCardSourceDetector detect the type before the misinterpretation.
-            result = readOneVCardFile(targetUri, VCardConfig.VCARD_TYPE_UNKNOWN,
-                    detector, true, null);
-        } catch (final VCardNestedException e) {
-            try {
-                final int estimatedVCardType = detector.getEstimatedType();
-                // Assume that VCardSourceDetector was able to detect the source.
-                // Try again with the detector.
-                result = readOneVCardFile(targetUri, estimatedVCardType,
-                        counter, false, null);
-            } catch (final VCardNestedException e2) {
-                result = false;
-                LogUtil.e(LogUtil.BUGLE_TAG, "Must not reach here. " + e2);
-            }
-        }
-
-        if (!result) {
-            // Load failure.
-            return false;
-        }
-
-        return doActuallyReadOneVCard(targetUri, true, detector, null, signal);
-    }
-
-    @DoesNotRunOnMainThread
-    private boolean doActuallyReadOneVCard(final Uri uri, final boolean showEntryParseProgress,
-            final VCardSourceDetector detector, final List<String> errorFileNameList,
-            final CountDownLatch signal) {
-        Assert.isNotMainThread();
-        int vcardType = detector.getEstimatedType();
-        if (vcardType == VCardConfig.VCARD_TYPE_UNKNOWN) {
-            vcardType = VCardConfig.getVCardTypeFromString(DEFAULT_VCARD_TYPE);
-        }
-        final CustomVCardEntryConstructor builder =
-                new CustomVCardEntryConstructor(vcardType, null);
-        builder.addEntryHandler(new ContactVCardEntryHandler(signal));
-
-        try {
-            if (!readOneVCardFile(uri, vcardType, builder, false, null)) {
-                return false;
-            }
-        } catch (final VCardNestedException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Must not reach here. " + e);
-            return false;
-        }
-        return true;
-    }
-
-    @DoesNotRunOnMainThread
-    private boolean readOneVCardFile(final Uri uri, final int vcardType,
-            final VCardInterpreter interpreter,
-            final boolean throwNestedException, final List<String> errorFileNameList)
-                    throws VCardNestedException {
-        Assert.isNotMainThread();
-        final ContentResolver resolver = mContext.getContentResolver();
-        VCardParser vCardParser;
-        InputStream is;
-        try {
-            is = resolver.openInputStream(uri);
-            vCardParser = new VCardParser_V21(vcardType);
-            vCardParser.addInterpreter(interpreter);
-
-            try {
-                vCardParser.parse(is);
-            } catch (final VCardVersionException e1) {
-                try {
-                    is.close();
-                } catch (final IOException e) {
-                    // Do nothing.
-                }
-                if (interpreter instanceof CustomVCardEntryConstructor) {
-                    // Let the object clean up internal temporal objects,
-                    ((CustomVCardEntryConstructor) interpreter).clear();
-                }
-
-                is = resolver.openInputStream(uri);
-
-                try {
-                    vCardParser = new VCardParser_V30(vcardType);
-                    vCardParser.addInterpreter(interpreter);
-                    vCardParser.parse(is);
-                } catch (final VCardVersionException e2) {
-                    throw new VCardException("vCard with unspported version.");
-                }
-            } finally {
-                if (is != null) {
-                    try {
-                        is.close();
-                    } catch (final IOException e) {
-                        // Do nothing.
-                    }
-                }
-            }
-        } catch (final IOException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "IOException was emitted: " + e.getMessage());
-
-            if (errorFileNameList != null) {
-                errorFileNameList.add(uri.toString());
-            }
-            return false;
-        } catch (final VCardNotSupportedException e) {
-            if ((e instanceof VCardNestedException) && throwNestedException) {
-                throw (VCardNestedException) e;
-            }
-            if (errorFileNameList != null) {
-                errorFileNameList.add(uri.toString());
-            }
-            return false;
-        } catch (final VCardException e) {
-            if (errorFileNameList != null) {
-                errorFileNameList.add(uri.toString());
-            }
-            return false;
-        }
-        return true;
-    }
-
-    class ContactVCardEntryHandler implements CustomVCardEntryConstructor.EntryHandler {
-        final CountDownLatch mSignal;
-
-        public ContactVCardEntryHandler(final CountDownLatch signal) {
-            mSignal = signal;
-        }
-
-        @Override
-        public void onStart() {
-        }
-
-        @Override
-        @DoesNotRunOnMainThread
-        public void onEntryCreated(final CustomVCardEntry entry) {
-            Assert.isNotMainThread();
-            final String displayName = entry.getDisplayName();
-            final List<VCardEntry.PhotoData> photos = entry.getPhotoList();
-            Uri avatarUri = null;
-            if (photos != null && photos.size() > 0) {
-                // The photo data is in bytes form, so we need to persist it in our temp directory
-                // so that ContactIconView can load it and display it later
-                // (and cache it, of course).
-                for (final VCardEntry.PhotoData photo : photos) {
-                    final byte[] photoBytes = photo.getBytes();
-                    if (photoBytes != null) {
-                        final InputStream inputStream = new ByteArrayInputStream(photoBytes);
-                        try {
-                            avatarUri = UriUtil.persistContentToScratchSpace(inputStream);
-                            if (avatarUri != null) {
-                                // Just load the first avatar and be done. Want more? wait for V2.
-                                break;
-                            }
-                        } finally {
-                            try {
-                                inputStream.close();
-                            } catch (final IOException e) {
-                                // Do nothing.
-                            }
-                        }
-                    }
-                }
-            }
-
-            // Fall back to generated avatar.
-            if (avatarUri == null) {
-                String destination = null;
-                final List<VCardEntry.PhoneData> phones = entry.getPhoneList();
-                if (phones != null && phones.size() > 0) {
-                    destination = PhoneUtils.getDefault().getCanonicalBySystemLocale(
-                            phones.get(0).getNumber());
-                }
-
-                if (destination == null) {
-                    final List<VCardEntry.EmailData> emails = entry.getEmailList();
-                    if (emails != null && emails.size() > 0) {
-                        destination = emails.get(0).getAddress();
-                    }
-                }
-                avatarUri = AvatarUriUtil.createAvatarUri(null, displayName, destination, null);
-            }
-
-            // Add the loaded vcard to the list.
-            mLoadedVCards.add(new VCardResourceEntry(entry, avatarUri));
-        }
-
-        @Override
-        public void onEnd() {
-            // Finished loading all vCard entries, signal the loading thread to proceed with the
-            // result.
-            if (mLoadedVCards.size() > 0) {
-                mLoadedResource = new VCardResource(getKey(), mLoadedVCards);
-            }
-            mSignal.countDown();
-        }
-    }
-
-    @Override
-    public int getRequestType() {
-        return MediaRequest.REQUEST_LOAD_MEDIA;
-    }
-
-    @Override
-    public MediaRequestDescriptor<VCardResource> getDescriptor() {
-        return mDescriptor;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/VCardRequestDescriptor.java b/src/com/android/messaging/datamodel/media/VCardRequestDescriptor.java
deleted file mode 100644
index 4084851..0000000
--- a/src/com/android/messaging/datamodel/media/VCardRequestDescriptor.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.net.Uri;
-
-import com.android.messaging.util.Assert;
-
-public class VCardRequestDescriptor extends MediaRequestDescriptor<VCardResource> {
-    public final Uri vCardUri;
-
-    public VCardRequestDescriptor(final Uri vCardUri) {
-        Assert.notNull(vCardUri);
-        this.vCardUri = vCardUri;
-    }
-
-    @Override
-    public MediaRequest<VCardResource> buildSyncMediaRequest(Context context) {
-        return new VCardRequest(context, this);
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/VCardResource.java b/src/com/android/messaging/datamodel/media/VCardResource.java
deleted file mode 100644
index edf5e88..0000000
--- a/src/com/android/messaging/datamodel/media/VCardResource.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import java.util.List;
-
-/**
- * Holds cached information of VCard contact info.
- * The temporarily persisted avatar icon Uri is tied to the VCardResource. As a result, whenever
- * the VCardResource is no longer used (i.e. close() is called), we need to asynchronously
- * delete the avatar image from temp storage since no one will have reference to the avatar Uri
- * again. The next time the same VCard is displayed, since the old resource has been evicted from
- * the memory cache, we'll load and persist the avatar icon again.
- */
-public class VCardResource extends RefCountedMediaResource {
-    private final List<VCardResourceEntry> mVCards;
-
-    public VCardResource(final String key, final List<VCardResourceEntry> vcards) {
-        super(key);
-        mVCards = vcards;
-    }
-
-    public List<VCardResourceEntry> getVCards() {
-        return mVCards;
-    }
-
-    @Override
-    public int getMediaSize() {
-        // Instead of track VCards by size in kilobytes, we track them by count.
-        return 0;
-    }
-
-    @Override
-    protected void close() {
-        for (final VCardResourceEntry vcard : mVCards) {
-            vcard.close();
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/VCardResourceEntry.java b/src/com/android/messaging/datamodel/media/VCardResourceEntry.java
deleted file mode 100644
index f0f7591..0000000
--- a/src/com/android/messaging/datamodel/media/VCardResourceEntry.java
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Intent;
-import android.content.res.Resources;
-import android.content.res.Resources.NotFoundException;
-import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import androidx.collection.ArrayMap;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.datamodel.data.PersonItemData;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.vcard.VCardEntry;
-import com.android.vcard.VCardEntry.EmailData;
-import com.android.vcard.VCardEntry.ImData;
-import com.android.vcard.VCardEntry.NoteData;
-import com.android.vcard.VCardEntry.OrganizationData;
-import com.android.vcard.VCardEntry.PhoneData;
-import com.android.vcard.VCardEntry.PostalData;
-import com.android.vcard.VCardEntry.WebsiteData;
-import com.android.vcard.VCardProperty;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Holds one entry item (i.e. a single contact) within a VCard resource. It is able to take
- * a VCardEntry and extract relevant information from it.
- */
-public class VCardResourceEntry {
-    public static final String PROPERTY_KIND = "KIND";
-
-    public static final String KIND_LOCATION = "location";
-
-    private final List<VCardResourceEntry.VCardResourceEntryDestinationItem> mContactInfo;
-    private final Uri mAvatarUri;
-    private final String mDisplayName;
-    private final CustomVCardEntry mVCard;
-
-    public VCardResourceEntry(final CustomVCardEntry vcard, final Uri avatarUri) {
-        mContactInfo = getContactInfoFromVCardEntry(vcard);
-        mDisplayName = getDisplayNameFromVCardEntry(vcard);
-        mAvatarUri = avatarUri;
-        mVCard = vcard;
-    }
-
-    void close() {
-        // If the avatar image was temporarily saved in the scratch folder, remove that.
-        if (MediaScratchFileProvider.isMediaScratchSpaceUri(mAvatarUri)) {
-            SafeAsyncTask.executeOnThreadPool(new Runnable() {
-                @Override
-                public void run() {
-                    Factory.get().getApplicationContext().getContentResolver().delete(
-                            mAvatarUri, null, null);
-                }
-            });
-        }
-    }
-
-    public String getKind() {
-        VCardProperty kindProperty = mVCard.getProperty(PROPERTY_KIND);
-        return kindProperty == null ? null : kindProperty.getRawValue();
-    }
-
-    public Uri getAvatarUri() {
-        return mAvatarUri;
-    }
-
-    public String getDisplayName() {
-        return mDisplayName;
-    }
-
-    public String getDisplayAddress() {
-        List<PostalData> postalList = mVCard.getPostalList();
-        if (postalList == null || postalList.size() < 1) {
-            return null;
-        }
-
-        return formatAddress(postalList.get(0));
-    }
-
-    public String getNotes() {
-        List<NoteData> notes = mVCard.getNotes();
-        if (notes == null || notes.size() == 0) {
-            return null;
-        }
-        StringBuilder noteBuilder = new StringBuilder();
-        for (NoteData note : notes) {
-            noteBuilder.append(note.getNote());
-        }
-        return noteBuilder.toString();
-    }
-
-    /**
-     * Returns a UI-facing representation that can be bound and consumed by the UI layer to display
-     * this VCard resource entry.
-     */
-    public PersonItemData getDisplayItem() {
-        return new PersonItemData() {
-            @Override
-            public Uri getAvatarUri() {
-                return VCardResourceEntry.this.getAvatarUri();
-            }
-
-            @Override
-            public String getDisplayName() {
-                return VCardResourceEntry.this.getDisplayName();
-            }
-
-            @Override
-            public String getDetails() {
-                return null;
-            }
-
-            @Override
-            public Intent getClickIntent() {
-                return null;
-            }
-
-            @Override
-            public long getContactId() {
-                return ContactUtil.INVALID_CONTACT_ID;
-            }
-
-            @Override
-            public String getLookupKey() {
-                return null;
-            }
-
-            @Override
-            public String getNormalizedDestination() {
-                return null;
-            }
-        };
-    }
-
-    public List<VCardResourceEntry.VCardResourceEntryDestinationItem> getContactInfo() {
-        return mContactInfo;
-    }
-
-    private static List<VCardResourceEntryDestinationItem> getContactInfoFromVCardEntry(
-            final VCardEntry vcard) {
-        final Resources resources = Factory.get().getApplicationContext().getResources();
-        final List<VCardResourceEntry.VCardResourceEntryDestinationItem> retList =
-                new ArrayList<VCardResourceEntry.VCardResourceEntryDestinationItem>();
-        if (vcard.getPhoneList() != null) {
-            for (final PhoneData phone : vcard.getPhoneList()) {
-                final Intent intent = new Intent(Intent.ACTION_DIAL);
-                intent.setData(Uri.parse("tel:" + phone.getNumber()));
-                retList.add(new VCardResourceEntryDestinationItem(phone.getNumber(),
-                        Phone.getTypeLabel(resources, phone.getType(), phone.getLabel()).toString(),
-                        intent));
-            }
-        }
-
-        if (vcard.getEmailList() != null) {
-            for (final EmailData email : vcard.getEmailList()) {
-                final Intent intent = new Intent(Intent.ACTION_SENDTO);
-                intent.setData(Uri.parse("mailto:"));
-                intent.putExtra(Intent.EXTRA_EMAIL, new String[] { email.getAddress() });
-                retList.add(new VCardResourceEntryDestinationItem(email.getAddress(),
-                        Phone.getTypeLabel(resources, email.getType(),
-                                email.getLabel()).toString(), intent));
-            }
-        }
-
-        if (vcard.getPostalList() != null) {
-            for (final PostalData postalData : vcard.getPostalList()) {
-                String type;
-                try {
-                    type = resources.
-                            getStringArray(android.R.array.postalAddressTypes)
-                            [postalData.getType() - 1];
-                } catch (final NotFoundException ex) {
-                    type = resources.getStringArray(android.R.array.postalAddressTypes)[2];
-                } catch (final Exception e) {
-                    LogUtil.e(LogUtil.BUGLE_TAG, "createContactItem postal Exception:" + e);
-                    type = resources.getStringArray(android.R.array.postalAddressTypes)[2];
-                }
-                Intent intent = new Intent(Intent.ACTION_VIEW);
-                final String address = formatAddress(postalData);
-                try {
-                    intent.setData(Uri.parse("geo:0,0?q=" + URLEncoder.encode(address, "UTF-8")));
-                } catch (UnsupportedEncodingException e) {
-                    intent = null;
-                }
-
-                retList.add(new VCardResourceEntryDestinationItem(address, type, intent));
-            }
-        }
-
-        if (vcard.getImList() != null) {
-            for (final ImData imData : vcard.getImList()) {
-                String type = null;
-                try {
-                    type = resources.
-                            getString(Im.getProtocolLabelResource(imData.getProtocol()));
-                } catch (final NotFoundException ex) {
-                    // Do nothing since this implies an empty label.
-                }
-                retList.add(new VCardResourceEntryDestinationItem(imData.getAddress(), type, null));
-            }
-        }
-
-        if (vcard.getOrganizationList() != null) {
-            for (final OrganizationData organtization : vcard.getOrganizationList()) {
-                String type = null;
-                try {
-                     type = resources.getString(Organization.getTypeLabelResource(
-                                    organtization.getType()));
-                } catch (final NotFoundException ex) {
-                    //set other kind as "other"
-                    type = resources.getStringArray(android.R.array.organizationTypes)[1];
-                } catch (final Exception e) {
-                    LogUtil.e(LogUtil.BUGLE_TAG, "createContactItem org Exception:" + e);
-                    type = resources.getStringArray(android.R.array.organizationTypes)[1];
-                }
-                retList.add(new VCardResourceEntryDestinationItem(
-                        organtization.getOrganizationName(), type, null));
-            }
-        }
-
-        if (vcard.getWebsiteList() != null) {
-            for (final WebsiteData web : vcard.getWebsiteList()) {
-                if (web != null && TextUtils.isGraphic(web.getWebsite())){
-                    String website = web.getWebsite();
-                    if (!website.startsWith("http://") && !website.startsWith("https://")) {
-                        // Prefix required for parsing to end up with a scheme and result in
-                        // navigation
-                        website = "http://" + website;
-                    }
-                    final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(website));
-                    retList.add(new VCardResourceEntryDestinationItem(web.getWebsite(), null,
-                            intent));
-                }
-            }
-        }
-
-        if (vcard.getBirthday() != null) {
-             final String birthday = vcard.getBirthday();
-             if (TextUtils.isGraphic(birthday)){
-                 retList.add(new VCardResourceEntryDestinationItem(birthday,
-                         resources.getString(R.string.vcard_detail_birthday_label), null));
-             }
-        }
-
-        if (vcard.getNotes() != null) {
-            for (final NoteData note : vcard.getNotes()) {
-                 final ArrayMap<String, String> curChildMap = new ArrayMap<String, String>();
-                 if (TextUtils.isGraphic(note.getNote())){
-                     retList.add(new VCardResourceEntryDestinationItem(note.getNote(),
-                             resources.getString(R.string.vcard_detail_notes_label), null));
-                 }
-             }
-        }
-        return retList;
-    }
-
-    private static String formatAddress(final PostalData postalData) {
-        final StringBuilder sb = new StringBuilder();
-        final String poBox = postalData.getPobox();
-        if (!TextUtils.isEmpty(poBox)) {
-            sb.append(poBox);
-            sb.append(" ");
-        }
-        final String extendedAddress = postalData.getExtendedAddress();
-        if (!TextUtils.isEmpty(extendedAddress)) {
-            sb.append(extendedAddress);
-            sb.append(" ");
-        }
-        final String street = postalData.getStreet();
-        if (!TextUtils.isEmpty(street)) {
-            sb.append(street);
-            sb.append(" ");
-        }
-        final String localty = postalData.getLocalty();
-        if (!TextUtils.isEmpty(localty)) {
-            sb.append(localty);
-            sb.append(" ");
-        }
-        final String region = postalData.getRegion();
-        if (!TextUtils.isEmpty(region)) {
-            sb.append(region);
-            sb.append(" ");
-        }
-        final String postalCode = postalData.getPostalCode();
-        if (!TextUtils.isEmpty(postalCode)) {
-            sb.append(postalCode);
-            sb.append(" ");
-        }
-        final String country = postalData.getCountry();
-        if (!TextUtils.isEmpty(country)) {
-            sb.append(country);
-        }
-        return sb.toString();
-    }
-
-    private static String getDisplayNameFromVCardEntry(final VCardEntry vcard) {
-        String name = vcard.getDisplayName();
-        if (name == null) {
-            vcard.consolidateFields();
-            name = vcard.getDisplayName();
-        }
-        return name;
-    }
-
-    /**
-     * Represents one entry line (e.g. phone number and phone label) for a single contact. Each
-     * VCardResourceEntry may hold one or more VCardResourceEntryDestinationItem's.
-     */
-    public static class VCardResourceEntryDestinationItem {
-        private final String mDisplayDestination;
-        private final String mDestinationType;
-        private final Intent mClickIntent;
-        public VCardResourceEntryDestinationItem(final String displayDestination,
-                final String destinationType, final Intent clickIntent) {
-            mDisplayDestination = displayDestination;
-            mDestinationType = destinationType;
-            mClickIntent = clickIntent;
-        }
-
-        /**
-         * Returns a UI-facing representation that can be bound and consumed by the UI layer to
-         * display this VCard resource destination entry.
-         */
-        public PersonItemData getDisplayItem() {
-            return new PersonItemData() {
-                @Override
-                public Uri getAvatarUri() {
-                    return null;
-                }
-
-                @Override
-                public String getDisplayName() {
-                    return mDisplayDestination;
-                }
-
-                @Override
-                public String getDetails() {
-                    return mDestinationType;
-                }
-
-                @Override
-                public Intent getClickIntent() {
-                    return mClickIntent;
-                }
-
-                @Override
-                public long getContactId() {
-                    return ContactUtil.INVALID_CONTACT_ID;
-                }
-
-                @Override
-                public String getLookupKey() {
-                    return null;
-                }
-
-                @Override
-                public String getNormalizedDestination() {
-                    return null;
-                }
-            };
-        }
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/VideoThumbnailRequest.java b/src/com/android/messaging/datamodel/media/VideoThumbnailRequest.java
deleted file mode 100644
index 73ce5e0..0000000
--- a/src/com/android/messaging/datamodel/media/VideoThumbnailRequest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-
-import com.android.messaging.util.MediaMetadataRetrieverWrapper;
-import com.android.messaging.util.MediaUtil;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Class to request a video thumbnail.
- * Users of this class as responsible for checking {@link #shouldShowIncomingVideoThumbnails}
- */
-public class VideoThumbnailRequest extends ImageRequest<UriImageRequestDescriptor> {
-
-    public VideoThumbnailRequest(final Context context,
-            final UriImageRequestDescriptor descriptor) {
-        super(context, descriptor);
-    }
-
-    public static boolean shouldShowIncomingVideoThumbnails() {
-        return MediaUtil.canAutoAccessIncomingMedia();
-    }
-
-    @Override
-    protected InputStream getInputStreamForResource() throws FileNotFoundException {
-        return null;
-    }
-
-    @Override
-    protected boolean hasBitmapObject() {
-        return true;
-    }
-
-    @Override
-    protected Bitmap getBitmapForResource() throws IOException {
-        Bitmap bitmap = null;
-        // Get a thumbnail through MediaMetadataRetriever to get a representative frame at any time
-        // position instead.
-        final MediaMetadataRetrieverWrapper retriever = new MediaMetadataRetrieverWrapper();
-        try {
-            retriever.setDataSource(mDescriptor.uri);
-            bitmap = retriever.getFrameAtTime();
-        } finally {
-            retriever.release();
-        }
-        if (bitmap != null) {
-            mDescriptor.updateSourceDimensions(bitmap.getWidth(), bitmap.getHeight());
-        }
-        return bitmap;
-    }
-}
diff --git a/src/com/android/messaging/datamodel/media/VideoThumbnailRequestDescriptor.java b/src/com/android/messaging/datamodel/media/VideoThumbnailRequestDescriptor.java
deleted file mode 100644
index 22f1871..0000000
--- a/src/com/android/messaging/datamodel/media/VideoThumbnailRequestDescriptor.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.Context;
-
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.UriUtil;
-
-public class VideoThumbnailRequestDescriptor extends UriImageRequestDescriptor {
-    public VideoThumbnailRequestDescriptor(final long id, int desiredWidth, int desiredHeight,
-            int sourceWidth, int sourceHeight) {
-        super(UriUtil.getContentUriForMediaStoreId(id), desiredWidth, desiredHeight, sourceWidth,
-                sourceHeight, false /* canCompress */, false /* isStatic */,
-                false /* cropToCircle */,
-                ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
-    }
-
-    @Override
-    public MediaRequest<ImageResource> buildSyncMediaRequest(Context context) {
-        return new VideoThumbnailRequest(context, this);
-    }
-}
diff --git a/src/com/android/messaging/mmslib/Downloads.java b/src/com/android/messaging/mmslib/Downloads.java
deleted file mode 100644
index 9afc48c..0000000
--- a/src/com/android/messaging/mmslib/Downloads.java
+++ /dev/null
@@ -1,807 +0,0 @@
-/*
- * Copyright (C) 2008 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.android.messaging.mmslib;
-
-import android.app.DownloadManager;
-import android.content.Context;
-import android.net.Uri;
-import android.provider.BaseColumns;
-
-/**
- * The Download Manager
- *
- * @pending
- */
-public final class Downloads {
-    private Downloads() {}
-
-    /**
-     * Implementation details
-     *
-     * Exposes constants used to interact with the download manager's
-     * content provider.
-     * The constants URI ... STATUS are the names of columns in the downloads table.
-     *
-     * @hide
-     */
-    public static final class Impl implements BaseColumns {
-        private Impl() {}
-
-        /**
-         * The permission to access the download manager
-         */
-        public static final String PERMISSION_ACCESS = "android.permission.ACCESS_DOWNLOAD_MANAGER";
-
-        /**
-         * The permission to access the download manager's advanced functions
-         */
-        public static final String PERMISSION_ACCESS_ADVANCED =
-                "android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED";
-
-        /**
-         * The permission to access the all the downloads in the manager.
-         */
-        public static final String PERMISSION_ACCESS_ALL =
-                "android.permission.ACCESS_ALL_DOWNLOADS";
-
-        /**
-         * The permission to directly access the download manager's cache
-         * directory
-         */
-        public static final String PERMISSION_CACHE = "android.permission.ACCESS_CACHE_FILESYSTEM";
-
-        /**
-         * The permission to send broadcasts on download completion
-         */
-        public static final String PERMISSION_SEND_INTENTS =
-                "android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS";
-
-        /**
-         * The permission to download files to the cache partition that won't be automatically
-         * purged when space is needed.
-         */
-        public static final String PERMISSION_CACHE_NON_PURGEABLE =
-                "android.permission.DOWNLOAD_CACHE_NON_PURGEABLE";
-
-        /**
-         * The permission to download files without any system notification being shown.
-         */
-        public static final String PERMISSION_NO_NOTIFICATION =
-                "android.permission.DOWNLOAD_WITHOUT_NOTIFICATION";
-
-        /**
-         * The content:// URI to access downloads owned by the caller's UID.
-         */
-        public static final Uri CONTENT_URI =
-                Uri.parse("content://downloads/my_downloads");
-
-        /**
-         * The content URI for accessing all downloads across all UIDs (requires the
-         * ACCESS_ALL_DOWNLOADS permission).
-         */
-        public static final Uri ALL_DOWNLOADS_CONTENT_URI =
-                Uri.parse("content://downloads/all_downloads");
-
-        /** URI segment to access a publicly accessible downloaded file */
-        public static final String PUBLICLY_ACCESSIBLE_DOWNLOADS_URI_SEGMENT = "public_downloads";
-
-        /**
-         * The content URI for accessing publicly accessible downloads (i.e., it requires no
-         * permissions to access this downloaded file)
-         */
-        public static final Uri PUBLICLY_ACCESSIBLE_DOWNLOADS_URI =
-                Uri.parse("content://downloads/" + PUBLICLY_ACCESSIBLE_DOWNLOADS_URI_SEGMENT);
-
-        /**
-         * Broadcast Action: this is sent by the download manager to the app
-         * that had initiated a download when that download completes. The
-         * download's content: uri is specified in the intent's data.
-         */
-        public static final String ACTION_DOWNLOAD_COMPLETED =
-                "android.intent.action.DOWNLOAD_COMPLETED";
-
-        /**
-         * Broadcast Action: this is sent by the download manager to the app
-         * that had initiated a download when the user selects the notification
-         * associated with that download. The download's content: uri is specified
-         * in the intent's data if the click is associated with a single download,
-         * or Downloads.CONTENT_URI if the notification is associated with
-         * multiple downloads.
-         * Note: this is not currently sent for downloads that have completed
-         * successfully.
-         */
-        public static final String ACTION_NOTIFICATION_CLICKED =
-                "android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED";
-
-        /**
-         * The name of the column containing the URI of the data being downloaded.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init/Read</P>
-         */
-        public static final String COLUMN_URI = "uri";
-
-        /**
-         * The name of the column containing application-specific data.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init/Read/Write</P>
-         */
-        public static final String COLUMN_APP_DATA = "entity";
-
-        /**
-         * The name of the column containing the flags that indicates whether
-         * the initiating application is capable of verifying the integrity of
-         * the downloaded file. When this flag is set, the download manager
-         * performs downloads and reports success even in some situations where
-         * it can't guarantee that the download has completed (e.g. when doing
-         * a byte-range request without an ETag, or when it can't determine
-         * whether a download fully completed).
-         * <P>Type: BOOLEAN</P>
-         * <P>Owner can Init</P>
-         */
-        public static final String COLUMN_NO_INTEGRITY = "no_integrity";
-
-        /**
-         * The name of the column containing the filename that the initiating
-         * application recommends. When possible, the download manager will attempt
-         * to use this filename, or a variation, as the actual name for the file.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init</P>
-         */
-        public static final String COLUMN_FILE_NAME_HINT = "hint";
-
-        /**
-         * The name of the column containing the filename where the downloaded data
-         * was actually stored.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Read</P>
-         */
-        public static final String _DATA = "_data";
-
-        /**
-         * The name of the column containing the MIME type of the downloaded data.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init/Read</P>
-         */
-        public static final String COLUMN_MIME_TYPE = "mimetype";
-
-        /**
-         * The name of the column containing the flag that controls the destination
-         * of the download. See the DESTINATION_* constants for a list of legal values.
-         * <P>Type: INTEGER</P>
-         * <P>Owner can Init</P>
-         */
-        public static final String COLUMN_DESTINATION = "destination";
-
-        /**
-         * The name of the column containing the flags that controls whether the
-         * download is displayed by the UI. See the VISIBILITY_* constants for
-         * a list of legal values.
-         * <P>Type: INTEGER</P>
-         * <P>Owner can Init/Read/Write</P>
-         */
-        public static final String COLUMN_VISIBILITY = "visibility";
-
-        /**
-         * The name of the column containing the current control state  of the download.
-         * Applications can write to this to control (pause/resume) the download.
-         * the CONTROL_* constants for a list of legal values.
-         * <P>Type: INTEGER</P>
-         * <P>Owner can Read</P>
-         */
-        public static final String COLUMN_CONTROL = "control";
-
-        /**
-         * The name of the column containing the current status of the download.
-         * Applications can read this to follow the progress of each download. See
-         * the STATUS_* constants for a list of legal values.
-         * <P>Type: INTEGER</P>
-         * <P>Owner can Read</P>
-         */
-        public static final String COLUMN_STATUS = "status";
-
-        /**
-         * The name of the column containing the date at which some interesting
-         * status changed in the download. Stored as a System.currentTimeMillis()
-         * value.
-         * <P>Type: BIGINT</P>
-         * <P>Owner can Read</P>
-         */
-        public static final String COLUMN_LAST_MODIFICATION = "lastmod";
-
-        /**
-         * The name of the column containing the package name of the application
-         * that initiating the download. The download manager will send
-         * notifications to a component in this package when the download completes.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init/Read</P>
-         */
-        public static final String COLUMN_NOTIFICATION_PACKAGE = "notificationpackage";
-
-        /**
-         * The name of the column containing the component name of the class that
-         * will receive notifications associated with the download. The
-         * package/class combination is passed to
-         * Intent.setClassName(String,String).
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init/Read</P>
-         */
-        public static final String COLUMN_NOTIFICATION_CLASS = "notificationclass";
-
-        /**
-         * If extras are specified when requesting a download they will be provided in the intent
-         * that is sent to the specified class and package when a download has finished.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init</P>
-         */
-        public static final String COLUMN_NOTIFICATION_EXTRAS = "notificationextras";
-
-        /**
-         * The name of the column contain the values of the cookie to be used for
-         * the download. This is used directly as the value for the Cookie: HTTP
-         * header that gets sent with the request.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init</P>
-         */
-        public static final String COLUMN_COOKIE_DATA = "cookiedata";
-
-        /**
-         * The name of the column containing the user agent that the initiating
-         * application wants the download manager to use for this download.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init</P>
-         */
-        public static final String COLUMN_USER_AGENT = "useragent";
-
-        /**
-         * The name of the column containing the referer (sic) that the initiating
-         * application wants the download manager to use for this download.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init</P>
-         */
-        public static final String COLUMN_REFERER = "referer";
-
-        /**
-         * The name of the column containing the total size of the file being
-         * downloaded.
-         * <P>Type: INTEGER</P>
-         * <P>Owner can Read</P>
-         */
-        public static final String COLUMN_TOTAL_BYTES = "total_bytes";
-
-        /**
-         * The name of the column containing the size of the part of the file that
-         * has been downloaded so far.
-         * <P>Type: INTEGER</P>
-         * <P>Owner can Read</P>
-         */
-        public static final String COLUMN_CURRENT_BYTES = "current_bytes";
-
-        /**
-         * The name of the column where the initiating application can provide the
-         * UID of another application that is allowed to access this download. If
-         * multiple applications share the same UID, all those applications will be
-         * allowed to access this download. This column can be updated after the
-         * download is initiated. This requires the permission
-         * android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED.
-         * <P>Type: INTEGER</P>
-         * <P>Owner can Init</P>
-         */
-        public static final String COLUMN_OTHER_UID = "otheruid";
-
-        /**
-         * The name of the column where the initiating application can provided the
-         * title of this download. The title will be displayed ito the user in the
-         * list of downloads.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init/Read/Write</P>
-         */
-        public static final String COLUMN_TITLE = "title";
-
-        /**
-         * The name of the column where the initiating application can provide the
-         * description of this download. The description will be displayed to the
-         * user in the list of downloads.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Init/Read/Write</P>
-         */
-        public static final String COLUMN_DESCRIPTION = "description";
-
-        /**
-         * The name of the column indicating whether the download was requesting through the public
-         * API.  This controls some differences in behavior.
-         * <P>Type: BOOLEAN</P>
-         * <P>Owner can Init/Read</P>
-         */
-        public static final String COLUMN_IS_PUBLIC_API = "is_public_api";
-
-        /**
-         * The name of the column holding a bitmask of allowed network types.  This is only used for
-         * public API downloads.
-         * <P>Type: INTEGER</P>
-         * <P>Owner can Init/Read</P>
-         */
-        public static final String COLUMN_ALLOWED_NETWORK_TYPES = "allowed_network_types";
-
-        /**
-         * The name of the column indicating whether roaming connections can be used.  This is only
-         * used for public API downloads.
-         * <P>Type: BOOLEAN</P>
-         * <P>Owner can Init/Read</P>
-         */
-        public static final String COLUMN_ALLOW_ROAMING = "allow_roaming";
-
-        /**
-         * The name of the column indicating whether metered connections can be used.  This is only
-         * used for public API downloads.
-         * <P>Type: BOOLEAN</P>
-         * <P>Owner can Init/Read</P>
-         */
-        public static final String COLUMN_ALLOW_METERED = "allow_metered";
-
-        /**
-         * Whether or not this download should be displayed in the system's Downloads UI.  Defaults
-         * to true.
-         * <P>Type: INTEGER</P>
-         * <P>Owner can Init/Read</P>
-         */
-        public static final String COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI = "is_visible_in_downloads_ui";
-
-        /**
-         * If true, the user has confirmed that this download can proceed over the mobile network
-         * even though it exceeds the recommended maximum size.
-         * <P>Type: BOOLEAN</P>
-         */
-        public static final String COLUMN_BYPASS_RECOMMENDED_SIZE_LIMIT =
-            "bypass_recommended_size_limit";
-
-        /**
-         * Set to true if this download is deleted. It is completely removed from the database
-         * when MediaProvider database also deletes the metadata asociated with this downloaded
-         * file.
-         * <P>Type: BOOLEAN</P>
-         * <P>Owner can Read</P>
-         */
-        public static final String COLUMN_DELETED = "deleted";
-
-        /**
-         * The URI to the corresponding entry in MediaProvider for this downloaded entry. It is
-         * used to delete the entries from MediaProvider database when it is deleted from the
-         * downloaded list.
-         * <P>Type: TEXT</P>
-         * <P>Owner can Read</P>
-         */
-        public static final String COLUMN_MEDIAPROVIDER_URI = "mediaprovider_uri";
-
-        /**
-         * The column that is used to remember whether the media scanner was invoked.
-         * It can take the values: null or 0(not scanned), 1(scanned), 2 (not scannable).
-         * <P>Type: TEXT</P>
-         */
-        public static final String COLUMN_MEDIA_SCANNED = "scanned";
-
-        /**
-         * The column with errorMsg for a failed downloaded.
-         * Used only for debugging purposes.
-         * <P>Type: TEXT</P>
-         */
-        public static final String COLUMN_ERROR_MSG = "errorMsg";
-
-        /**
-         *  This column stores the source of the last update to this row.
-         *  This column is only for internal use.
-         *  Valid values are indicated by LAST_UPDATESRC_* constants.
-         * <P>Type: INT</P>
-         */
-        public static final String COLUMN_LAST_UPDATESRC = "lastUpdateSrc";
-
-        /** The column that is used to count retries */
-        public static final String COLUMN_FAILED_CONNECTIONS = "numfailed";
-
-        /**
-         * default value for {@link #COLUMN_LAST_UPDATESRC}.
-         * This value is used when this column's value is not relevant.
-         */
-        public static final int LAST_UPDATESRC_NOT_RELEVANT = 0;
-
-        /**
-         * One of the values taken by {@link #COLUMN_LAST_UPDATESRC}.
-         * This value is used when the update is NOT to be relayed to the DownloadService
-         * (and thus spare DownloadService from scanning the database when this change occurs)
-         */
-        public static final int LAST_UPDATESRC_DONT_NOTIFY_DOWNLOADSVC = 1;
-
-        /*
-         * Lists the destinations that an application can specify for a download.
-         */
-
-        /**
-         * This download will be saved to the external storage. This is the
-         * default behavior, and should be used for any file that the user
-         * can freely access, copy, delete. Even with that destination,
-         * unencrypted DRM files are saved in secure internal storage.
-         * Downloads to the external destination only write files for which
-         * there is a registered handler. The resulting files are accessible
-         * by filename to all applications.
-         */
-        public static final int DESTINATION_EXTERNAL = 0;
-
-        /**
-         * This download will be saved to the download manager's private
-         * partition. This is the behavior used by applications that want to
-         * download private files that are used and deleted soon after they
-         * get downloaded. All file types are allowed, and only the initiating
-         * application can access the file (indirectly through a content
-         * provider). This requires the
-         * android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED permission.
-         */
-        public static final int DESTINATION_CACHE_PARTITION = 1;
-
-        /**
-         * This download will be saved to the download manager's private
-         * partition and will be purged as necessary to make space. This is
-         * for private files (similar to CACHE_PARTITION) that aren't deleted
-         * immediately after they are used, and are kept around by the download
-         * manager as long as space is available.
-         */
-        public static final int DESTINATION_CACHE_PARTITION_PURGEABLE = 2;
-
-        /**
-         * This download will be saved to the download manager's private
-         * partition, as with DESTINATION_CACHE_PARTITION, but the download
-         * will not proceed if the user is on a roaming data connection.
-         */
-        public static final int DESTINATION_CACHE_PARTITION_NOROAMING = 3;
-
-        /**
-         * This download will be saved to the location given by the file URI in
-         * {@link #COLUMN_FILE_NAME_HINT}.
-         */
-        public static final int DESTINATION_FILE_URI = 4;
-
-        /**
-         * This download will be saved to the system cache ("/cache")
-         * partition. This option is only used by system apps and so it requires
-         * android.permission.ACCESS_CACHE_FILESYSTEM permission.
-         */
-        public static final int DESTINATION_SYSTEMCACHE_PARTITION = 5;
-
-        /**
-         * This download was completed by the caller (i.e., NOT downloadmanager)
-         * and caller wants to have this download displayed in Downloads App.
-         */
-        public static final int DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD = 6;
-
-        /**
-         * This download is allowed to run.
-         */
-        public static final int CONTROL_RUN = 0;
-
-        /**
-         * This download must pause at the first opportunity.
-         */
-        public static final int CONTROL_PAUSED = 1;
-
-        /*
-         * Lists the states that the download manager can set on a download
-         * to notify applications of the download progress.
-         * The codes follow the HTTP families:<br>
-         * 1xx: informational<br>
-         * 2xx: success<br>
-         * 3xx: redirects (not used by the download manager)<br>
-         * 4xx: client errors<br>
-         * 5xx: server errors
-         */
-
-        /**
-         * Returns whether the status is informational (i.e. 1xx).
-         */
-        public static boolean isStatusInformational(int status) {
-            return (status >= 100 && status < 200);
-        }
-
-        /**
-         * Returns whether the status is a success (i.e. 2xx).
-         */
-        public static boolean isStatusSuccess(int status) {
-            return (status >= 200 && status < 300);
-        }
-
-        /**
-         * Returns whether the status is an error (i.e. 4xx or 5xx).
-         */
-        public static boolean isStatusError(int status) {
-            return (status >= 400 && status < 600);
-        }
-
-        /**
-         * Returns whether the status is a client error (i.e. 4xx).
-         */
-        public static boolean isStatusClientError(int status) {
-            return (status >= 400 && status < 500);
-        }
-
-        /**
-         * Returns whether the status is a server error (i.e. 5xx).
-         */
-        public static boolean isStatusServerError(int status) {
-            return (status >= 500 && status < 600);
-        }
-
-        /**
-         * this method determines if a notification should be displayed for a
-         * given {@link #COLUMN_VISIBILITY} value
-         * @param visibility the value of {@link #COLUMN_VISIBILITY}.
-         * @return true if the notification should be displayed. false otherwise.
-         */
-        public static boolean isNotificationToBeDisplayed(int visibility) {
-            return visibility == DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED ||
-                    visibility == DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION;
-        }
-
-        /**
-         * Returns whether the download has completed (either with success or
-         * error).
-         */
-        public static boolean isStatusCompleted(int status) {
-            return (status >= 200 && status < 300) || (status >= 400 && status < 600);
-        }
-
-        /**
-         * This download hasn't stated yet
-         */
-        public static final int STATUS_PENDING = 190;
-
-        /**
-         * This download has started
-         */
-        public static final int STATUS_RUNNING = 192;
-
-        /**
-         * This download has been paused by the owning app.
-         */
-        public static final int STATUS_PAUSED_BY_APP = 193;
-
-        /**
-         * This download encountered some network error and is waiting before retrying the request.
-         */
-        public static final int STATUS_WAITING_TO_RETRY = 194;
-
-        /**
-         * This download is waiting for network connectivity to proceed.
-         */
-        public static final int STATUS_WAITING_FOR_NETWORK = 195;
-
-        /**
-         * This download exceeded a size limit for mobile networks and is waiting for a Wi-Fi
-         * connection to proceed.
-         */
-        public static final int STATUS_QUEUED_FOR_WIFI = 196;
-
-        /**
-         * This download couldn't be completed due to insufficient storage
-         * space.  Typically, this is because the SD card is full.
-         */
-        public static final int STATUS_INSUFFICIENT_SPACE_ERROR = 198;
-
-        /**
-         * This download couldn't be completed because no external storage
-         * device was found.  Typically, this is because the SD card is not
-         * mounted.
-         */
-        public static final int STATUS_DEVICE_NOT_FOUND_ERROR = 199;
-
-        /**
-         * This download has successfully completed.
-         * Warning: there might be other status values that indicate success
-         * in the future.
-         * Use isSucccess() to capture the entire category.
-         */
-        public static final int STATUS_SUCCESS = 200;
-
-        /**
-         * This request couldn't be parsed. This is also used when processing
-         * requests with unknown/unsupported URI schemes.
-         */
-        public static final int STATUS_BAD_REQUEST = 400;
-
-        /**
-         * This download can't be performed because the content type cannot be
-         * handled.
-         */
-        public static final int STATUS_NOT_ACCEPTABLE = 406;
-
-        /**
-         * This download cannot be performed because the length cannot be
-         * determined accurately. This is the code for the HTTP error "Length
-         * Required", which is typically used when making requests that require
-         * a content length but don't have one, and it is also used in the
-         * client when a response is received whose length cannot be determined
-         * accurately (therefore making it impossible to know when a download
-         * completes).
-         */
-        public static final int STATUS_LENGTH_REQUIRED = 411;
-
-        /**
-         * This download was interrupted and cannot be resumed.
-         * This is the code for the HTTP error "Precondition Failed", and it is
-         * also used in situations where the client doesn't have an ETag at all.
-         */
-        public static final int STATUS_PRECONDITION_FAILED = 412;
-
-        /**
-         * The lowest-valued error status that is not an actual HTTP status code.
-         */
-        public static final int MIN_ARTIFICIAL_ERROR_STATUS = 488;
-
-        /**
-         * The requested destination file already exists.
-         */
-        public static final int STATUS_FILE_ALREADY_EXISTS_ERROR = 488;
-
-        /**
-         * Some possibly transient error occurred, but we can't resume the download.
-         */
-        public static final int STATUS_CANNOT_RESUME = 489;
-
-        /**
-         * This download was canceled
-         */
-        public static final int STATUS_CANCELED = 490;
-
-        /**
-         * This download has completed with an error.
-         * Warning: there will be other status values that indicate errors in
-         * the future. Use isStatusError() to capture the entire category.
-         */
-        public static final int STATUS_UNKNOWN_ERROR = 491;
-
-        /**
-         * This download couldn't be completed because of a storage issue.
-         * Typically, that's because the filesystem is missing or full.
-         * Use the more specific {@link #STATUS_INSUFFICIENT_SPACE_ERROR}
-         * and {@link #STATUS_DEVICE_NOT_FOUND_ERROR} when appropriate.
-         */
-        public static final int STATUS_FILE_ERROR = 492;
-
-        /**
-         * This download couldn't be completed because of an HTTP
-         * redirect response that the download manager couldn't
-         * handle.
-         */
-        public static final int STATUS_UNHANDLED_REDIRECT = 493;
-
-        /**
-         * This download couldn't be completed because of an
-         * unspecified unhandled HTTP code.
-         */
-        public static final int STATUS_UNHANDLED_HTTP_CODE = 494;
-
-        /**
-         * This download couldn't be completed because of an
-         * error receiving or processing data at the HTTP level.
-         */
-        public static final int STATUS_HTTP_DATA_ERROR = 495;
-
-        /**
-         * This download couldn't be completed because of an
-         * HttpException while setting up the request.
-         */
-        public static final int STATUS_HTTP_EXCEPTION = 496;
-
-        /**
-         * This download couldn't be completed because there were
-         * too many redirects.
-         */
-        public static final int STATUS_TOO_MANY_REDIRECTS = 497;
-
-        /**
-         * This download has failed because requesting application has been
-         * blocked by {@link NetworkPolicyManager}.
-         *
-         * @hide
-         * @deprecated since behavior now uses
-         *             {@link #STATUS_WAITING_FOR_NETWORK}
-         */
-        @Deprecated
-        public static final int STATUS_BLOCKED = 498;
-
-        /** {@hide} */
-        public static String statusToString(int status) {
-            switch (status) {
-                case STATUS_PENDING: return "PENDING";
-                case STATUS_RUNNING: return "RUNNING";
-                case STATUS_PAUSED_BY_APP: return "PAUSED_BY_APP";
-                case STATUS_WAITING_TO_RETRY: return "WAITING_TO_RETRY";
-                case STATUS_WAITING_FOR_NETWORK: return "WAITING_FOR_NETWORK";
-                case STATUS_QUEUED_FOR_WIFI: return "QUEUED_FOR_WIFI";
-                case STATUS_INSUFFICIENT_SPACE_ERROR: return "INSUFFICIENT_SPACE_ERROR";
-                case STATUS_DEVICE_NOT_FOUND_ERROR: return "DEVICE_NOT_FOUND_ERROR";
-                case STATUS_SUCCESS: return "SUCCESS";
-                case STATUS_BAD_REQUEST: return "BAD_REQUEST";
-                case STATUS_NOT_ACCEPTABLE: return "NOT_ACCEPTABLE";
-                case STATUS_LENGTH_REQUIRED: return "LENGTH_REQUIRED";
-                case STATUS_PRECONDITION_FAILED: return "PRECONDITION_FAILED";
-                case STATUS_FILE_ALREADY_EXISTS_ERROR: return "FILE_ALREADY_EXISTS_ERROR";
-                case STATUS_CANNOT_RESUME: return "CANNOT_RESUME";
-                case STATUS_CANCELED: return "CANCELED";
-                case STATUS_UNKNOWN_ERROR: return "UNKNOWN_ERROR";
-                case STATUS_FILE_ERROR: return "FILE_ERROR";
-                case STATUS_UNHANDLED_REDIRECT: return "UNHANDLED_REDIRECT";
-                case STATUS_UNHANDLED_HTTP_CODE: return "UNHANDLED_HTTP_CODE";
-                case STATUS_HTTP_DATA_ERROR: return "HTTP_DATA_ERROR";
-                case STATUS_HTTP_EXCEPTION: return "HTTP_EXCEPTION";
-                case STATUS_TOO_MANY_REDIRECTS: return "TOO_MANY_REDIRECTS";
-                case STATUS_BLOCKED: return "BLOCKED";
-                default: return Integer.toString(status);
-            }
-        }
-
-        /**
-         * This download is visible but only shows in the notifications
-         * while it's in progress.
-         */
-        public static final int VISIBILITY_VISIBLE = DownloadManager.Request.VISIBILITY_VISIBLE;
-
-        /**
-         * This download is visible and shows in the notifications while
-         * in progress and after completion.
-         */
-        public static final int VISIBILITY_VISIBLE_NOTIFY_COMPLETED =
-                DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED;
-
-        /**
-         * This download doesn't show in the UI or in the notifications.
-         */
-        public static final int VISIBILITY_HIDDEN = DownloadManager.Request.VISIBILITY_HIDDEN;
-
-        /**
-         * Constants related to HTTP request headers associated with each download.
-         */
-        public static class RequestHeaders {
-            public static final String HEADERS_DB_TABLE = "request_headers";
-            public static final String COLUMN_DOWNLOAD_ID = "download_id";
-            public static final String COLUMN_HEADER = "header";
-            public static final String COLUMN_VALUE = "value";
-
-            /**
-             * Path segment to add to a download URI to retrieve request headers
-             */
-            public static final String URI_SEGMENT = "headers";
-
-            /**
-             * Prefix for ContentValues keys that contain HTTP header lines, to be passed to
-             * DownloadProvider.insert().
-             */
-            public static final String INSERT_KEY_PREFIX = "http_header_";
-        }
-    }
-
-    /**
-     * Query where clause for general querying.
-     */
-    private static final String QUERY_WHERE_CLAUSE = Impl.COLUMN_NOTIFICATION_PACKAGE + "=? AND "
-            + Impl.COLUMN_NOTIFICATION_CLASS + "=?";
-
-    /**
-     * Delete all the downloads for a package/class pair.
-     */
-    public static final void removeAllDownloadsByPackage(
-            Context context, String notificationPackage, String notificationClass) {
-        context.getContentResolver().delete(Impl.CONTENT_URI, QUERY_WHERE_CLAUSE,
-                new String[] { notificationPackage, notificationClass });
-    }
-}
diff --git a/src/com/android/messaging/mmslib/InvalidHeaderValueException.java b/src/com/android/messaging/mmslib/InvalidHeaderValueException.java
deleted file mode 100644
index c141591..0000000
--- a/src/com/android/messaging/mmslib/InvalidHeaderValueException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib;
-
-/**
- * Thrown when an invalid header value was set.
- */
-public class InvalidHeaderValueException extends MmsException {
-    private static final long serialVersionUID = -2053384496042052262L;
-
-    /**
-     * Constructs an InvalidHeaderValueException with no detailed message.
-     */
-    public InvalidHeaderValueException() {
-        super();
-    }
-
-    /**
-     * Constructs an InvalidHeaderValueException with the specified detailed message.
-     *
-     * @param message the detailed message.
-     */
-    public InvalidHeaderValueException(String message) {
-        super(message);
-    }
-}
diff --git a/src/com/android/messaging/mmslib/MmsException.java b/src/com/android/messaging/mmslib/MmsException.java
deleted file mode 100644
index 173511d..0000000
--- a/src/com/android/messaging/mmslib/MmsException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib;
-
-/**
- * A generic exception that is thrown by the Mms client.
- */
-public class MmsException extends Exception {
-    private static final long serialVersionUID = -7323249827281485390L;
-
-    /**
-     * Creates a new MmsException.
-     */
-    public MmsException() {
-        super();
-    }
-
-    /**
-     * Creates a new MmsException with the specified detail message.
-     *
-     * @param message the detail message.
-     */
-    public MmsException(String message) {
-        super(message);
-    }
-
-    /**
-     * Creates a new MmsException with the specified cause.
-     *
-     * @param cause the cause.
-     */
-    public MmsException(Throwable cause) {
-        super(cause);
-    }
-
-    /**
-     * Creates a new MmsException with the specified detail message and cause.
-     *
-     * @param message the detail message.
-     * @param cause the cause.
-     */
-    public MmsException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}
diff --git a/src/com/android/messaging/mmslib/SqliteWrapper.java b/src/com/android/messaging/mmslib/SqliteWrapper.java
deleted file mode 100644
index 8ef0e6f..0000000
--- a/src/com/android/messaging/mmslib/SqliteWrapper.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2008 Esmertec AG.
- * Copyright (C) 2008 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.android.messaging.mmslib;
-
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteException;
-import android.net.Uri;
-
-import com.android.messaging.util.LogUtil;
-
-// Wrapper around content resolver methods to catch exceptions
-public final class SqliteWrapper {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private SqliteWrapper() {
-        // Forbidden being instantiated.
-    }
-
-    public static Cursor query(Context context, ContentResolver resolver, Uri uri,
-            String[] projection, String selection, String[] selectionArgs, String sortOrder) {
-        try {
-            return resolver.query(uri, projection, selection, selectionArgs, sortOrder);
-        } catch (SQLiteException e) {
-            LogUtil.e(TAG, "SqliteWrapper: catch an exception when query", e);
-            return null;
-        } catch (IllegalArgumentException e) {
-            LogUtil.e(TAG, "SqliteWrapper: catch an exception when query", e);
-            return null;
-        }
-    }
-
-    public static int update(Context context, ContentResolver resolver, Uri uri,
-            ContentValues values, String where, String[] selectionArgs) {
-        try {
-            return resolver.update(uri, values, where, selectionArgs);
-        } catch (SQLiteException e) {
-            LogUtil.e(TAG, "SqliteWrapper: catch an exception when update", e);
-            return -1;
-        } catch (IllegalArgumentException e) {
-            LogUtil.e(TAG, "SqliteWrapper: catch an exception when update", e);
-            return -1;
-        }
-    }
-
-    public static int delete(Context context, ContentResolver resolver, Uri uri,
-            String where, String[] selectionArgs) {
-        try {
-            return resolver.delete(uri, where, selectionArgs);
-        } catch (SQLiteException e) {
-            LogUtil.e(TAG, "SqliteWrapper: catch an exception when delete", e);
-            return -1;
-        } catch (IllegalArgumentException e) {
-            LogUtil.e(TAG, "SqliteWrapper: catch an exception when delete", e);
-            return -1;
-        }
-    }
-
-    public static Uri insert(Context context, ContentResolver resolver,
-            Uri uri, ContentValues values) {
-        try {
-            return resolver.insert(uri, values);
-        } catch (SQLiteException e) {
-            LogUtil.e(TAG, "SqliteWrapper: catch an exception when insert", e);
-            return null;
-        } catch (IllegalArgumentException e) {
-            LogUtil.e(TAG, "SqliteWrapper: catch an exception when insert", e);
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/AcknowledgeInd.java b/src/com/android/messaging/mmslib/pdu/AcknowledgeInd.java
deleted file mode 100644
index 05494c0..0000000
--- a/src/com/android/messaging/mmslib/pdu/AcknowledgeInd.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-/**
- * M-Acknowledge.ind PDU.
- */
-public class AcknowledgeInd extends GenericPdu {
-    /**
-     * Constructor, used when composing a M-Acknowledge.ind pdu.
-     *
-     * @param mmsVersion    current viersion of mms
-     * @param transactionId the transaction-id value
-     * @throws InvalidHeaderValueException if parameters are invalid.
-     * @throws NullPointerException if transactionId is null.
-     */
-    public AcknowledgeInd(int mmsVersion, byte[] transactionId)
-            throws InvalidHeaderValueException {
-        super();
-
-        setMessageType(PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND);
-        setMmsVersion(mmsVersion);
-        setTransactionId(transactionId);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    AcknowledgeInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get X-Mms-Report-Allowed field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public int getReportAllowed() {
-        return mPduHeaders.getOctet(PduHeaders.REPORT_ALLOWED);
-    }
-
-    /**
-     * Set X-Mms-Report-Allowed field value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setReportAllowed(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.REPORT_ALLOWED);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id field value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTransactionId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/Base64.java b/src/com/android/messaging/mmslib/pdu/Base64.java
deleted file mode 100644
index 2f27117..0000000
--- a/src/com/android/messaging/mmslib/pdu/Base64.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-public class Base64 {
-    /**
-     * Used to get the number of Quadruples.
-     */
-    static final int FOURBYTE = 4;
-
-    /**
-     * Byte used to pad output.
-     */
-    static final byte PAD = (byte) '=';
-
-    /**
-     * The base length.
-     */
-    static final int BASELENGTH = 255;
-
-    // Create arrays to hold the base64 characters
-    private static byte[] base64Alphabet = new byte[BASELENGTH];
-
-    // Populating the character arrays
-    static {
-        for (int i = 0; i < BASELENGTH; i++) {
-            base64Alphabet[i] = (byte) -1;
-        }
-        for (int i = 'Z'; i >= 'A'; i--) {
-            base64Alphabet[i] = (byte) (i - 'A');
-        }
-        for (int i = 'z'; i >= 'a'; i--) {
-            base64Alphabet[i] = (byte) (i - 'a' + 26);
-        }
-        for (int i = '9'; i >= '0'; i--) {
-            base64Alphabet[i] = (byte) (i - '0' + 52);
-        }
-
-        base64Alphabet['+'] = 62;
-        base64Alphabet['/'] = 63;
-    }
-
-    /**
-     * Decodes Base64 data into octects
-     *
-     * @param base64Data Byte array containing Base64 data
-     * @return Array containing decoded data.
-     */
-    public static byte[] decodeBase64(byte[] base64Data) {
-        // RFC 2045 requires that we discard ALL non-Base64 characters
-        base64Data = discardNonBase64(base64Data);
-
-        // handle the edge case, so we don't have to worry about it later
-        if (base64Data.length == 0) {
-            return new byte[0];
-        }
-
-        int numberQuadruple = base64Data.length / FOURBYTE;
-        byte decodedData[] = null;
-        byte b1 = 0, b2 = 0, b3 = 0, b4 = 0, marker0 = 0, marker1 = 0;
-
-        // Throw away anything not in base64Data
-
-        int encodedIndex = 0;
-        int dataIndex = 0;
-        {
-            // this sizes the output array properly - rlw
-            int lastData = base64Data.length;
-            // ignore the '=' padding
-            while (base64Data[lastData - 1] == PAD) {
-                if (--lastData == 0) {
-                    return new byte[0];
-                }
-            }
-            decodedData = new byte[lastData - numberQuadruple];
-        }
-
-        for (int i = 0; i < numberQuadruple; i++) {
-            dataIndex = i * 4;
-            marker0 = base64Data[dataIndex + 2];
-            marker1 = base64Data[dataIndex + 3];
-
-            b1 = base64Alphabet[base64Data[dataIndex]];
-            b2 = base64Alphabet[base64Data[dataIndex + 1]];
-
-            if (marker0 != PAD && marker1 != PAD) {
-                //No PAD e.g 3cQl
-                b3 = base64Alphabet[marker0];
-                b4 = base64Alphabet[marker1];
-
-                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
-                decodedData[encodedIndex + 1] =
-                        (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
-                decodedData[encodedIndex + 2] = (byte) (b3 << 6 | b4);
-            } else if (marker0 == PAD) {
-                //Two PAD e.g. 3c[Pad][Pad]
-                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
-            } else if (marker1 == PAD) {
-                //One PAD e.g. 3cQ[Pad]
-                b3 = base64Alphabet[marker0];
-
-                decodedData[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
-                decodedData[encodedIndex + 1] =
-                        (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
-            }
-            encodedIndex += 3;
-        }
-        return decodedData;
-    }
-
-    /**
-     * Check octect wheter it is a base64 encoding.
-     *
-     * @param octect to be checked byte
-     * @return ture if it is base64 encoding, false otherwise.
-     */
-    private static boolean isBase64(byte octect) {
-        if (octect == PAD) {
-            return true;
-        } else if (base64Alphabet[octect] == -1) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-
-    /**
-     * Discards any characters outside of the base64 alphabet, per
-     * the requirements on page 25 of RFC 2045 - "Any characters
-     * outside of the base64 alphabet are to be ignored in base64
-     * encoded data."
-     *
-     * @param data The base-64 encoded data to groom
-     * @return The data, less non-base64 characters (see RFC 2045).
-     */
-    static byte[] discardNonBase64(byte[] data) {
-        byte groomedData[] = new byte[data.length];
-        int bytesCopied = 0;
-
-        for (int i = 0; i < data.length; i++) {
-            if (isBase64(data[i])) {
-                groomedData[bytesCopied++] = data[i];
-            }
-        }
-
-        byte packedData[] = new byte[bytesCopied];
-
-        System.arraycopy(groomedData, 0, packedData, 0, bytesCopied);
-
-        return packedData;
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/CharacterSets.java b/src/com/android/messaging/mmslib/pdu/CharacterSets.java
deleted file mode 100644
index 3a49e37..0000000
--- a/src/com/android/messaging/mmslib/pdu/CharacterSets.java
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import androidx.collection.SimpleArrayMap;
-import android.util.SparseArray;
-
-import java.io.UnsupportedEncodingException;
-
-public class CharacterSets {
-    /**
-     * IANA assigned MIB enum numbers.
-     *
-     * From wap-230-wsp-20010705-a.pdf
-     * Any-charset = <Octet 128>
-     * Equivalent to the special RFC2616 charset value "*"
-     *
-     * Link to all the charsets: http://www.iana.org/assignments/character-sets/character-sets.xhtml
-     * Use Charset.availableCharsets() to see if a potential charset is supported in java:
-     *     private void dumpCharsets() {
-     *         logvv("dumpCharsets");
-     *         SortedMap<String, Charset> charsets = Charset.availableCharsets();
-     *         for (Entry<String, Charset> entry : charsets.entrySet()) {
-     *             String key = entry.getKey();
-     *             Charset value = entry.getValue();
-     *             logvv("charset key: " + key + " value: " + value);
-     *         }
-     *     }
-     *
-     * As of March 21, 2014, here is the list from dumpCharsets:
-     * Adobe-Standard-Encoding value: java.nio.charset.CharsetICU[Adobe-Standard-Encoding]
-     * Big5 value: java.nio.charset.CharsetICU[Big5]
-     * Big5-HKSCS value: java.nio.charset.CharsetICU[Big5-HKSCS]
-     * BOCU-1 value: java.nio.charset.CharsetICU[BOCU-1]
-     * CESU-8 value: java.nio.charset.CharsetICU[CESU-8]
-     * cp1363 value: java.nio.charset.CharsetICU[cp1363]
-     * cp851 value: java.nio.charset.CharsetICU[cp851]
-     * cp864 value: java.nio.charset.CharsetICU[cp864]
-     * EUC-JP value: java.nio.charset.CharsetICU[EUC-JP]
-     * EUC-KR value: java.nio.charset.CharsetICU[EUC-KR]
-     * GB18030 value: java.nio.charset.CharsetICU[GB18030]
-     * GBK value: java.nio.charset.CharsetICU[GBK]
-     * hp-roman8 value: java.nio.charset.CharsetICU[hp-roman8]
-     * HZ-GB-2312 value: java.nio.charset.CharsetICU[HZ-GB-2312]
-     * IBM-Thai value: java.nio.charset.CharsetICU[IBM-Thai]
-     * IBM00858 value: java.nio.charset.CharsetICU[IBM00858]
-     * IBM01140 value: java.nio.charset.CharsetICU[IBM01140]
-     * IBM01141 value: java.nio.charset.CharsetICU[IBM01141]
-     * IBM01142 value: java.nio.charset.CharsetICU[IBM01142]
-     * IBM01143 value: java.nio.charset.CharsetICU[IBM01143]
-     * IBM01144 value: java.nio.charset.CharsetICU[IBM01144]
-     * IBM01145 value: java.nio.charset.CharsetICU[IBM01145]
-     * IBM01146 value: java.nio.charset.CharsetICU[IBM01146]
-     * IBM01147 value: java.nio.charset.CharsetICU[IBM01147]
-     * IBM01148 value: java.nio.charset.CharsetICU[IBM01148]
-     * IBM01149 value: java.nio.charset.CharsetICU[IBM01149]
-     * IBM037 value: java.nio.charset.CharsetICU[IBM037]
-     * IBM1026 value: java.nio.charset.CharsetICU[IBM1026]
-     * IBM1047 value: java.nio.charset.CharsetICU[IBM1047]
-     * IBM273 value: java.nio.charset.CharsetICU[IBM273]
-     * IBM277 value: java.nio.charset.CharsetICU[IBM277]
-     * IBM278 value: java.nio.charset.CharsetICU[IBM278]
-     * IBM280 value: java.nio.charset.CharsetICU[IBM280]
-     * IBM284 value: java.nio.charset.CharsetICU[IBM284]
-     * IBM285 value: java.nio.charset.CharsetICU[IBM285]
-     * IBM290 value: java.nio.charset.CharsetICU[IBM290]
-     * IBM297 value: java.nio.charset.CharsetICU[IBM297]
-     * IBM420 value: java.nio.charset.CharsetICU[IBM420]
-     * IBM424 value: java.nio.charset.CharsetICU[IBM424]
-     * IBM437 value: java.nio.charset.CharsetICU[IBM437]
-     * IBM500 value: java.nio.charset.CharsetICU[IBM500]
-     * IBM775 value: java.nio.charset.CharsetICU[IBM775]
-     * IBM850 value: java.nio.charset.CharsetICU[IBM850]
-     * IBM852 value: java.nio.charset.CharsetICU[IBM852]
-     * IBM855 value: java.nio.charset.CharsetICU[IBM855]
-     * IBM857 value: java.nio.charset.CharsetICU[IBM857]
-     * IBM860 value: java.nio.charset.CharsetICU[IBM860]
-     * IBM861 value: java.nio.charset.CharsetICU[IBM861]
-     * IBM862 value: java.nio.charset.CharsetICU[IBM862]
-     * IBM863 value: java.nio.charset.CharsetICU[IBM863]
-     * IBM865 value: java.nio.charset.CharsetICU[IBM865]
-     * IBM866 value: java.nio.charset.CharsetICU[IBM866]
-     * IBM868 value: java.nio.charset.CharsetICU[IBM868]
-     * IBM869 value: java.nio.charset.CharsetICU[IBM869]
-     * IBM870 value: java.nio.charset.CharsetICU[IBM870]
-     * IBM871 value: java.nio.charset.CharsetICU[IBM871]
-     * IBM918 value: java.nio.charset.CharsetICU[IBM918]
-     * ISO-2022-CN value: java.nio.charset.CharsetICU[ISO-2022-CN]
-     * ISO-2022-CN-EXT value: java.nio.charset.CharsetICU[ISO-2022-CN-EXT]
-     * ISO-2022-JP value: java.nio.charset.CharsetICU[ISO-2022-JP]
-     * ISO-2022-JP-1 value: java.nio.charset.CharsetICU[ISO-2022-JP-1]
-     * ISO-2022-JP-2 value: java.nio.charset.CharsetICU[ISO-2022-JP-2]
-     * ISO-2022-KR value: java.nio.charset.CharsetICU[ISO-2022-KR]
-     * ISO-8859-1 value: java.nio.charset.CharsetICU[ISO-8859-1]
-     * ISO-8859-10 value: java.nio.charset.CharsetICU[ISO-8859-10]
-     * ISO-8859-13 value: java.nio.charset.CharsetICU[ISO-8859-13]
-     * ISO-8859-14 value: java.nio.charset.CharsetICU[ISO-8859-14]
-     * ISO-8859-15 value: java.nio.charset.CharsetICU[ISO-8859-15]
-     * ISO-8859-2 value: java.nio.charset.CharsetICU[ISO-8859-2]
-     * ISO-8859-3 value: java.nio.charset.CharsetICU[ISO-8859-3]
-     * ISO-8859-4 value: java.nio.charset.CharsetICU[ISO-8859-4]
-     * ISO-8859-5 value: java.nio.charset.CharsetICU[ISO-8859-5]
-     * ISO-8859-6 value: java.nio.charset.CharsetICU[ISO-8859-6]
-     * ISO-8859-7 value: java.nio.charset.CharsetICU[ISO-8859-7]
-     * ISO-8859-8 value: java.nio.charset.CharsetICU[ISO-8859-8]
-     * ISO-8859-9 value: java.nio.charset.CharsetICU[ISO-8859-9]
-     * KOI8-R value: java.nio.charset.CharsetICU[KOI8-R]
-     * KOI8-U value: java.nio.charset.CharsetICU[KOI8-U]
-     * macintosh value: java.nio.charset.CharsetICU[macintosh]
-     * SCSU value: java.nio.charset.CharsetICU[SCSU]
-     * Shift_JIS value: java.nio.charset.CharsetICU[Shift_JIS]
-     * TIS-620 value: java.nio.charset.CharsetICU[TIS-620]
-     * US-ASCII value: java.nio.charset.CharsetICU[US-ASCII]
-     * UTF-16 value: java.nio.charset.CharsetICU[UTF-16]
-     * UTF-16BE value: java.nio.charset.CharsetICU[UTF-16BE]
-     * UTF-16LE value: java.nio.charset.CharsetICU[UTF-16LE]
-     * UTF-32 value: java.nio.charset.CharsetICU[UTF-32]
-     * UTF-32BE value: java.nio.charset.CharsetICU[UTF-32BE]
-     * UTF-32LE value: java.nio.charset.CharsetICU[UTF-32LE]
-     * UTF-7 value: java.nio.charset.CharsetICU[UTF-7]
-     * UTF-8 value: java.nio.charset.CharsetICU[UTF-8]
-     * windows-1250 value: java.nio.charset.CharsetICU[windows-1250]
-     * windows-1251 value: java.nio.charset.CharsetICU[windows-1251]
-     * windows-1252 value: java.nio.charset.CharsetICU[windows-1252]
-     * windows-1253 value: java.nio.charset.CharsetICU[windows-1253]
-     * windows-1254 value: java.nio.charset.CharsetICU[windows-1254]
-     * windows-1255 value: java.nio.charset.CharsetICU[windows-1255]
-     * windows-1256 value: java.nio.charset.CharsetICU[windows-1256]
-     * windows-1257 value: java.nio.charset.CharsetICU[windows-1257]
-     * windows-1258 value: java.nio.charset.CharsetICU[windows-1258]
-     * x-compound-text value: java.nio.charset.CharsetICU[x-compound-text]
-     * x-ebcdic-xml-us value: java.nio.charset.CharsetICU[x-ebcdic-xml-us]
-     * x-gsm-03.38-2000 value: java.nio.charset.CharsetICU[x-gsm-03.38-2000]
-     * x-ibm-1047-s390 value: java.nio.charset.CharsetICU[x-ibm-1047-s390]
-     * x-ibm-1125_P100-1997 value: java.nio.charset.CharsetICU[x-ibm-1125_P100-1997]
-     * x-ibm-1129_P100-1997 value: java.nio.charset.CharsetICU[x-ibm-1129_P100-1997]
-     * x-ibm-1130_P100-1997 value: java.nio.charset.CharsetICU[x-ibm-1130_P100-1997]
-     * x-ibm-1131_P100-1997 value: java.nio.charset.CharsetICU[x-ibm-1131_P100-1997]
-     * x-ibm-1132_P100-1998 value: java.nio.charset.CharsetICU[x-ibm-1132_P100-1998]
-     * x-ibm-1133_P100-1997 value: java.nio.charset.CharsetICU[x-ibm-1133_P100-1997]
-     * x-ibm-1137_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-1137_P100-1999]
-     * x-ibm-1140-s390 value: java.nio.charset.CharsetICU[x-ibm-1140-s390]
-     * x-ibm-1141-s390 value: java.nio.charset.CharsetICU[x-ibm-1141-s390]
-     * x-ibm-1142-s390 value: java.nio.charset.CharsetICU[x-ibm-1142-s390]
-     * x-ibm-1143-s390 value: java.nio.charset.CharsetICU[x-ibm-1143-s390]
-     * x-ibm-1144-s390 value: java.nio.charset.CharsetICU[x-ibm-1144-s390]
-     * x-ibm-1145-s390 value: java.nio.charset.CharsetICU[x-ibm-1145-s390]
-     * x-ibm-1146-s390 value: java.nio.charset.CharsetICU[x-ibm-1146-s390]
-     * x-ibm-1147-s390 value: java.nio.charset.CharsetICU[x-ibm-1147-s390]
-     * x-ibm-1148-s390 value: java.nio.charset.CharsetICU[x-ibm-1148-s390]
-     * x-ibm-1149-s390 value: java.nio.charset.CharsetICU[x-ibm-1149-s390]
-     * x-ibm-1153-s390 value: java.nio.charset.CharsetICU[x-ibm-1153-s390]
-     * x-ibm-1154_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-1154_P100-1999]
-     * x-ibm-1155_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-1155_P100-1999]
-     * x-ibm-1156_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-1156_P100-1999]
-     * x-ibm-1157_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-1157_P100-1999]
-     * x-ibm-1158_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-1158_P100-1999]
-     * x-ibm-1160_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-1160_P100-1999]
-     * x-ibm-1162_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-1162_P100-1999]
-     * x-ibm-1164_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-1164_P100-1999]
-     * x-ibm-1250_P100-1995 value: java.nio.charset.CharsetICU[x-ibm-1250_P100-1995]
-     * x-ibm-1251_P100-1995 value: java.nio.charset.CharsetICU[x-ibm-1251_P100-1995]
-     * x-ibm-1252_P100-2000 value: java.nio.charset.CharsetICU[x-ibm-1252_P100-2000]
-     * x-ibm-1253_P100-1995 value: java.nio.charset.CharsetICU[x-ibm-1253_P100-1995]
-     * x-ibm-1254_P100-1995 value: java.nio.charset.CharsetICU[x-ibm-1254_P100-1995]
-     * x-ibm-1255_P100-1995 value: java.nio.charset.CharsetICU[x-ibm-1255_P100-1995]
-     * x-ibm-1256_P110-1997 value: java.nio.charset.CharsetICU[x-ibm-1256_P110-1997]
-     * x-ibm-1257_P100-1995 value: java.nio.charset.CharsetICU[x-ibm-1257_P100-1995]
-     * x-ibm-1258_P100-1997 value: java.nio.charset.CharsetICU[x-ibm-1258_P100-1997]
-     * x-ibm-12712-s390 value: java.nio.charset.CharsetICU[x-ibm-12712-s390]
-     * x-ibm-12712_P100-1998 value: java.nio.charset.CharsetICU[x-ibm-12712_P100-1998]
-     * x-ibm-1373_P100-2002 value: java.nio.charset.CharsetICU[x-ibm-1373_P100-2002]
-     * x-ibm-1383_P110-1999 value: java.nio.charset.CharsetICU[x-ibm-1383_P110-1999]
-     * x-ibm-1386_P100-2001 value: java.nio.charset.CharsetICU[x-ibm-1386_P100-2001]
-     * x-ibm-16684_P110-2003 value: java.nio.charset.CharsetICU[x-ibm-16684_P110-2003]
-     * x-ibm-16804-s390 value: java.nio.charset.CharsetICU[x-ibm-16804-s390]
-     * x-ibm-16804_X110-1999 value: java.nio.charset.CharsetICU[x-ibm-16804_X110-1999]
-     * x-ibm-25546 value: java.nio.charset.CharsetICU[x-ibm-25546]
-     * x-ibm-33722_P12A_P12A-2009_U2 value:
-     *     java.nio.charset.CharsetICU[x-ibm-33722_P12A_P12A-2009_U2]
-     * x-ibm-37-s390 value: java.nio.charset.CharsetICU[x-ibm-37-s390]
-     * x-ibm-4517_P100-2005 value: java.nio.charset.CharsetICU[x-ibm-4517_P100-2005]
-     * x-ibm-4899_P100-1998 value: java.nio.charset.CharsetICU[x-ibm-4899_P100-1998]
-     * x-ibm-4909_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-4909_P100-1999]
-     * x-ibm-4971_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-4971_P100-1999]
-     * x-ibm-5123_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-5123_P100-1999]
-     * x-ibm-5351_P100-1998 value: java.nio.charset.CharsetICU[x-ibm-5351_P100-1998]
-     * x-ibm-5352_P100-1998 value: java.nio.charset.CharsetICU[x-ibm-5352_P100-1998]
-     * x-ibm-5353_P100-1998 value: java.nio.charset.CharsetICU[x-ibm-5353_P100-1998]
-     * x-ibm-5478_P100-1995 value: java.nio.charset.CharsetICU[x-ibm-5478_P100-1995]
-     * x-ibm-803_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-803_P100-1999]
-     * x-ibm-813_P100-1995 value: java.nio.charset.CharsetICU[x-ibm-813_P100-1995]
-     * x-ibm-8482_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-8482_P100-1999]
-     * x-ibm-901_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-901_P100-1999]
-     * x-ibm-902_P100-1999 value: java.nio.charset.CharsetICU[x-ibm-902_P100-1999]
-     * x-ibm-9067_X100-2005 value: java.nio.charset.CharsetICU[x-ibm-9067_X100-2005]
-     * x-ibm-916_P100-1995 value: java.nio.charset.CharsetICU[x-ibm-916_P100-1995]
-     * x-IBM1006 value: java.nio.charset.CharsetICU[x-IBM1006]
-     * x-IBM1025 value: java.nio.charset.CharsetICU[x-IBM1025]
-     * x-IBM1097 value: java.nio.charset.CharsetICU[x-IBM1097]
-     * x-IBM1098 value: java.nio.charset.CharsetICU[x-IBM1098]
-     * x-IBM1112 value: java.nio.charset.CharsetICU[x-IBM1112]
-     * x-IBM1122 value: java.nio.charset.CharsetICU[x-IBM1122]
-     * x-IBM1123 value: java.nio.charset.CharsetICU[x-IBM1123]
-     * x-IBM1124 value: java.nio.charset.CharsetICU[x-IBM1124]
-     * x-IBM1153 value: java.nio.charset.CharsetICU[x-IBM1153]
-     * x-IBM1363 value: java.nio.charset.CharsetICU[x-IBM1363]
-     * x-IBM1364 value: java.nio.charset.CharsetICU[x-IBM1364]
-     * x-IBM1371 value: java.nio.charset.CharsetICU[x-IBM1371]
-     * x-IBM1388 value: java.nio.charset.CharsetICU[x-IBM1388]
-     * x-IBM1390 value: java.nio.charset.CharsetICU[x-IBM1390]
-     * x-IBM1399 value: java.nio.charset.CharsetICU[x-IBM1399]
-     * x-IBM33722 value: java.nio.charset.CharsetICU[x-IBM33722]
-     * x-IBM720 value: java.nio.charset.CharsetICU[x-IBM720]
-     * x-IBM737 value: java.nio.charset.CharsetICU[x-IBM737]
-     * x-IBM856 value: java.nio.charset.CharsetICU[x-IBM856]
-     * x-IBM867 value: java.nio.charset.CharsetICU[x-IBM867]
-     * x-IBM875 value: java.nio.charset.CharsetICU[x-IBM875]
-     * x-IBM922 value: java.nio.charset.CharsetICU[x-IBM922]
-     * x-IBM930 value: java.nio.charset.CharsetICU[x-IBM930]
-     * x-IBM933 value: java.nio.charset.CharsetICU[x-IBM933]
-     * x-IBM935 value: java.nio.charset.CharsetICU[x-IBM935]
-     * x-IBM937 value: java.nio.charset.CharsetICU[x-IBM937]
-     * x-IBM939 value: java.nio.charset.CharsetICU[x-IBM939]
-     * x-IBM942 value: java.nio.charset.CharsetICU[x-IBM942]
-     * x-IBM943 value: java.nio.charset.CharsetICU[x-IBM943]
-     * x-IBM949 value: java.nio.charset.CharsetICU[x-IBM949]
-     * x-IBM949C value: java.nio.charset.CharsetICU[x-IBM949C]
-     * x-IBM950 value: java.nio.charset.CharsetICU[x-IBM950]
-     * x-IBM954 value: java.nio.charset.CharsetICU[x-IBM954]
-     * x-IBM964 value: java.nio.charset.CharsetICU[x-IBM964]
-     * x-IBM970 value: java.nio.charset.CharsetICU[x-IBM970]
-     * x-IBM971 value: java.nio.charset.CharsetICU[x-IBM971]
-     * x-IMAP-mailbox-name value: java.nio.charset.CharsetICU[x-IMAP-mailbox-name]
-     * x-iscii-be value: java.nio.charset.CharsetICU[x-iscii-be]
-     * x-iscii-gu value: java.nio.charset.CharsetICU[x-iscii-gu]
-     * x-iscii-ka value: java.nio.charset.CharsetICU[x-iscii-ka]
-     * x-iscii-ma value: java.nio.charset.CharsetICU[x-iscii-ma]
-     * x-iscii-or value: java.nio.charset.CharsetICU[x-iscii-or]
-     * x-iscii-pa value: java.nio.charset.CharsetICU[x-iscii-pa]
-     * x-iscii-ta value: java.nio.charset.CharsetICU[x-iscii-ta]
-     * x-iscii-te value: java.nio.charset.CharsetICU[x-iscii-te]
-     * x-ISCII91 value: java.nio.charset.CharsetICU[x-ISCII91]
-     * x-ISO-2022-CN-CNS value: java.nio.charset.CharsetICU[x-ISO-2022-CN-CNS]
-     * x-iso-8859-11 value: java.nio.charset.CharsetICU[x-iso-8859-11]
-     * x-JavaUnicode value: java.nio.charset.CharsetICU[x-JavaUnicode]
-     * x-JavaUnicode2 value: java.nio.charset.CharsetICU[x-JavaUnicode2]
-     * x-JIS7 value: java.nio.charset.CharsetICU[x-JIS7]
-     * x-JIS8 value: java.nio.charset.CharsetICU[x-JIS8]
-     * x-LMBCS-1 value: java.nio.charset.CharsetICU[x-LMBCS-1]
-     * x-mac-centraleurroman value: java.nio.charset.CharsetICU[x-mac-centraleurroman]
-     * x-mac-cyrillic value: java.nio.charset.CharsetICU[x-mac-cyrillic]
-     * x-mac-greek value: java.nio.charset.CharsetICU[x-mac-greek]
-     * x-mac-turkish value: java.nio.charset.CharsetICU[x-mac-turkish]
-     * x-MS950-HKSCS value: java.nio.charset.CharsetICU[x-MS950-HKSCS]
-     * x-UnicodeBig value: java.nio.charset.CharsetICU[x-UnicodeBig]
-     * x-UTF-16LE-BOM value: java.nio.charset.CharsetICU[x-UTF-16LE-BOM]
-     * x-UTF16_OppositeEndian value: java.nio.charset.CharsetICU[x-UTF16_OppositeEndian]
-     * x-UTF16_PlatformEndian value: java.nio.charset.CharsetICU[x-UTF16_PlatformEndian]
-     * x-UTF32_OppositeEndian value: java.nio.charset.CharsetICU[x-UTF32_OppositeEndian]
-     * x-UTF32_PlatformEndian value: java.nio.charset.CharsetICU[x-UTF32_PlatformEndian]
-     *
-     */
-    public static final int ANY_CHARSET = 0x00;
-    public static final int US_ASCII    = 0x03;
-    public static final int ISO_8859_1  = 0x04;
-    public static final int ISO_8859_2  = 0x05;
-    public static final int ISO_8859_3  = 0x06;
-    public static final int ISO_8859_4  = 0x07;
-    public static final int ISO_8859_5  = 0x08;
-    public static final int ISO_8859_6  = 0x09;
-    public static final int ISO_8859_7  = 0x0A;
-    public static final int ISO_8859_8  = 0x0B;
-    public static final int ISO_8859_9  = 0x0C;
-    public static final int SHIFT_JIS   = 0x11;
-    public static final int EUC_JP      = 0x12;
-    public static final int EUC_KR      = 0x26;
-    public static final int ISO_2022_JP = 0x27;
-    public static final int ISO_2022_JP_2 = 0x28;
-    public static final int UTF_8       = 0x6A;
-    public static final int GBK         = 0x71;
-    public static final int GB18030     = 0x72;
-    public static final int GB2312      = 0x07E9;
-    public static final int BIG5        = 0x07EA;
-    public static final int UCS2        = 0x03E8;
-    public static final int UTF_16      = 0x03F7;
-    public static final int HZ_GB_2312  = 0x0825;
-
-    /**
-     * If the encoding of given data is unsupported, use UTF_8 to decode it.
-     */
-    public static final int DEFAULT_CHARSET = UTF_8;
-
-    /**
-     * Array of MIB enum numbers.
-     */
-    private static final int[] MIBENUM_NUMBERS = {
-            ANY_CHARSET,
-            US_ASCII,
-            ISO_8859_1,
-            ISO_8859_2,
-            ISO_8859_3,
-            ISO_8859_4,
-            ISO_8859_5,
-            ISO_8859_6,
-            ISO_8859_7,
-            ISO_8859_8,
-            ISO_8859_9,
-            SHIFT_JIS,
-            EUC_JP,
-            EUC_KR,
-            ISO_2022_JP,
-            ISO_2022_JP_2,
-            UTF_8,
-            GBK,
-            GB18030,
-            GB2312,
-            BIG5,
-            UCS2,
-            UTF_16,
-            HZ_GB_2312,
-    };
-
-    /**
-     * The Well-known-charset Mime name.
-     */
-    public static final String MIMENAME_ANY_CHARSET = "*";
-    public static final String MIMENAME_US_ASCII    = "us-ascii";
-    public static final String MIMENAME_ISO_8859_1  = "iso-8859-1";
-    public static final String MIMENAME_ISO_8859_2  = "iso-8859-2";
-    public static final String MIMENAME_ISO_8859_3  = "iso-8859-3";
-    public static final String MIMENAME_ISO_8859_4  = "iso-8859-4";
-    public static final String MIMENAME_ISO_8859_5  = "iso-8859-5";
-    public static final String MIMENAME_ISO_8859_6  = "iso-8859-6";
-    public static final String MIMENAME_ISO_8859_7  = "iso-8859-7";
-    public static final String MIMENAME_ISO_8859_8  = "iso-8859-8";
-    public static final String MIMENAME_ISO_8859_9  = "iso-8859-9";
-    public static final String MIMENAME_SHIFT_JIS   = "shift_JIS";
-    public static final String MIMENAME_EUC_JP      = "euc-jp";
-    public static final String MIMENAME_EUC_KR      = "euc-kr";
-    public static final String MIMENAME_ISO_2022_JP = "iso-2022-jp";
-    public static final String MIMENAME_ISO_2022_JP_2 = "iso-2022-jp-2";
-    public static final String MIMENAME_UTF_8       = "utf-8";
-    public static final String MIMENAME_GBK         = "gbk";
-    public static final String MIMENAME_GB18030     = "gb18030";
-    public static final String MIMENAME_GB2312      = "gb2312";
-    public static final String MIMENAME_BIG5        = "big5";
-    public static final String MIMENAME_UCS2        = "iso-10646-ucs-2";
-    public static final String MIMENAME_UTF_16      = "utf-16";
-    public static final String MIMENAME_HZ_GB_2312  = "hz-gb-2312";
-
-    public static final String DEFAULT_CHARSET_NAME = MIMENAME_UTF_8;
-
-    /**
-     * Array of the names of character sets.
-     */
-    private static final String[] MIME_NAMES = {
-            MIMENAME_ANY_CHARSET,
-            MIMENAME_US_ASCII,
-            MIMENAME_ISO_8859_1,
-            MIMENAME_ISO_8859_2,
-            MIMENAME_ISO_8859_3,
-            MIMENAME_ISO_8859_4,
-            MIMENAME_ISO_8859_5,
-            MIMENAME_ISO_8859_6,
-            MIMENAME_ISO_8859_7,
-            MIMENAME_ISO_8859_8,
-            MIMENAME_ISO_8859_9,
-            MIMENAME_SHIFT_JIS,
-            MIMENAME_EUC_JP,
-            MIMENAME_EUC_KR,
-            MIMENAME_ISO_2022_JP,
-            MIMENAME_ISO_2022_JP_2,
-            MIMENAME_UTF_8,
-            MIMENAME_GBK,
-            MIMENAME_GB18030,
-            MIMENAME_GB2312,
-            MIMENAME_BIG5,
-            MIMENAME_UCS2,
-            MIMENAME_UTF_16,
-            MIMENAME_HZ_GB_2312,
-    };
-
-    private static final SparseArray<String> MIBENUM_TO_NAME_MAP;
-
-    private static final SimpleArrayMap<String, Integer> NAME_TO_MIBENUM_MAP;
-
-    static {
-        // Create the HashMaps.
-        MIBENUM_TO_NAME_MAP = new SparseArray<String>();
-        NAME_TO_MIBENUM_MAP = new SimpleArrayMap<String, Integer>();
-        assert (MIBENUM_NUMBERS.length == MIME_NAMES.length);
-        final int count = MIBENUM_NUMBERS.length - 1;
-        for (int i = 0; i <= count; i++) {
-            MIBENUM_TO_NAME_MAP.put(MIBENUM_NUMBERS[i], MIME_NAMES[i]);
-            NAME_TO_MIBENUM_MAP.put(MIME_NAMES[i], MIBENUM_NUMBERS[i]);
-        }
-    }
-
-    private CharacterSets() {
-    } // Non-instantiatable
-
-    /**
-     * Map an MIBEnum number to the name of the charset which this number
-     * is assigned to by IANA.
-     *
-     * @param mibEnumValue An IANA assigned MIBEnum number.
-     * @return The name string of the charset.
-     */
-    public static String getMimeName(final int mibEnumValue)
-            throws UnsupportedEncodingException {
-        final String name = MIBENUM_TO_NAME_MAP.get(mibEnumValue);
-        if (name == null) {
-            throw new UnsupportedEncodingException();
-        }
-        return name;
-    }
-
-    /**
-     * Map a well-known charset name to its assigned MIBEnum number.
-     *
-     * @param mimeName The charset name.
-     * @return The MIBEnum number assigned by IANA for this charset.
-     */
-    public static int getMibEnumValue(final String mimeName)
-            throws UnsupportedEncodingException {
-        if (null == mimeName) {
-            return -1;
-        }
-
-        final Integer mibEnumValue = NAME_TO_MIBENUM_MAP.get(mimeName);
-        if (mibEnumValue == null) {
-            throw new UnsupportedEncodingException();
-        }
-        return mibEnumValue;
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/DeliveryInd.java b/src/com/android/messaging/mmslib/pdu/DeliveryInd.java
deleted file mode 100644
index 5e1d873..0000000
--- a/src/com/android/messaging/mmslib/pdu/DeliveryInd.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-/**
- * M-Delivery.Ind Pdu.
- */
-public class DeliveryInd extends GenericPdu {
-    /**
-     * Empty constructor.
-     * Since the Pdu corresponding to this class is constructed
-     * by the Proxy-Relay server, this class is only instantiated
-     * by the Pdu Parser.
-     *
-     * @throws InvalidHeaderValueException if error occurs.
-     */
-    public DeliveryInd() throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_DELIVERY_IND);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    DeliveryInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get Date value.
-     *
-     * @return the value
-     */
-    public long getDate() {
-        return mPduHeaders.getLongInteger(PduHeaders.DATE);
-    }
-
-    /**
-     * Set Date value.
-     *
-     * @param value the value
-     */
-    public void setDate(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.DATE);
-    }
-
-    /**
-     * Get Message-ID value.
-     *
-     * @return the value
-     */
-    public byte[] getMessageId() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Set Message-ID value.
-     *
-     * @param value the value, should not be null
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Get Status value.
-     *
-     * @return the value
-     */
-    public int getStatus() {
-        return mPduHeaders.getOctet(PduHeaders.STATUS);
-    }
-
-    /**
-     * Set Status value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.STATUS);
-    }
-
-    /**
-     * Get To value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getTo() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
-    }
-
-    /**
-     * set To value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTo(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     *
-     *     public EncodedStringValue getStatusText() {return null;}
-     *     public void setStatusText(EncodedStringValue value) {}
-     */
-}
diff --git a/src/com/android/messaging/mmslib/pdu/EncodedStringValue.java b/src/com/android/messaging/mmslib/pdu/EncodedStringValue.java
deleted file mode 100644
index 5870027..0000000
--- a/src/com/android/messaging/mmslib/pdu/EncodedStringValue.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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.android.messaging.mmslib.pdu;
-
-import android.util.Log;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-
-/**
- * Encoded-string-value = Text-string | Value-length Char-set Text-string
- */
-public class EncodedStringValue implements Cloneable {
-    private static final String TAG = "EncodedStringValue";
-    private static final boolean DEBUG = false;
-    private static final boolean LOCAL_LOGV = false;
-
-    /**
-     * The Char-set value.
-     */
-    private int mCharacterSet;
-
-    /**
-     * The Text-string value.
-     */
-    private byte[] mData;
-
-    /**
-     * Constructor.
-     *
-     * @param charset the Char-set value
-     * @param data    the Text-string value
-     * @throws NullPointerException if Text-string value is null.
-     */
-    public EncodedStringValue(int charset, byte[] data) {
-        // TODO: CharSet needs to be validated against MIBEnum.
-        if (null == data) {
-            throw new NullPointerException("EncodedStringValue: Text-string is null.");
-        }
-
-        mCharacterSet = charset;
-        mData = new byte[data.length];
-        System.arraycopy(data, 0, mData, 0, data.length);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param data the Text-string value
-     * @throws NullPointerException if Text-string value is null.
-     */
-    public EncodedStringValue(byte[] data) {
-        this(CharacterSets.DEFAULT_CHARSET, data);
-    }
-
-    public EncodedStringValue(String data) {
-        this(CharacterSets.DEFAULT_CHARSET, data);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param charset
-     * @param data The text in Java String
-     * @throws NullPointerException if Text-string value is null.
-     */
-    public EncodedStringValue(int charset, String data) {
-        if (null == data) {
-            throw new NullPointerException("EncodedStringValue: Text-string is null");
-        }
-        mCharacterSet = charset;
-        try {
-            mData = data.getBytes(CharacterSets.getMimeName(charset));
-        } catch (UnsupportedEncodingException e) {
-            Log.e(TAG, "Input encoding " + charset + " must be supported.", e);
-            mData = data.getBytes();
-        }
-    }
-
-    /**
-     * Get Char-set value.
-     *
-     * @return the value
-     */
-    public int getCharacterSet() {
-        return mCharacterSet;
-    }
-
-    /**
-     * Set Char-set value.
-     *
-     * @param charset the Char-set value
-     */
-    public void setCharacterSet(int charset) {
-        // TODO: CharSet needs to be validated against MIBEnum.
-        mCharacterSet = charset;
-    }
-
-    /**
-     * Get Text-string value.
-     *
-     * @return the value
-     */
-    public byte[] getTextString() {
-        byte[] byteArray = new byte[mData.length];
-
-        System.arraycopy(mData, 0, byteArray, 0, mData.length);
-        return byteArray;
-    }
-
-    /**
-     * Set Text-string value.
-     *
-     * @param textString the Text-string value
-     * @throws NullPointerException if Text-string value is null.
-     */
-    public void setTextString(byte[] textString) {
-        if (null == textString) {
-            throw new NullPointerException("EncodedStringValue: Text-string is null.");
-        }
-
-        mData = new byte[textString.length];
-        System.arraycopy(textString, 0, mData, 0, textString.length);
-    }
-
-    /**
-     * Convert this object to a {@link java.lang.String}. If the encoding of
-     * the EncodedStringValue is null or unsupported, it will be
-     * treated as iso-8859-1 encoding.
-     *
-     * @return The decoded String.
-     */
-    public String getString() {
-        if (CharacterSets.ANY_CHARSET == mCharacterSet) {
-            return new String(mData); // system default encoding.
-        } else {
-            try {
-                String name = CharacterSets.getMimeName(mCharacterSet);
-                return new String(mData, name);
-            } catch (UnsupportedEncodingException e) {
-                if (LOCAL_LOGV) {
-                    Log.v(TAG, e.getMessage(), e);
-                }
-                try {
-                    return new String(mData, CharacterSets.MIMENAME_ISO_8859_1);
-                } catch (UnsupportedEncodingException exception) {
-                    return new String(mData); // system default encoding.
-                }
-            }
-        }
-    }
-
-    /**
-     * Append to Text-string.
-     *
-     * @param textString the textString to append
-     * @throws NullPointerException if the text String is null
-     *                              or an IOException occured.
-     */
-    public void appendTextString(byte[] textString) {
-        if (null == textString) {
-            throw new NullPointerException("Text-string is null.");
-        }
-
-        if (null == mData) {
-            mData = new byte[textString.length];
-            System.arraycopy(textString, 0, mData, 0, textString.length);
-        } else {
-            ByteArrayOutputStream newTextString = new ByteArrayOutputStream();
-            try {
-                newTextString.write(mData);
-                newTextString.write(textString);
-            } catch (IOException e) {
-                e.printStackTrace();
-                throw new NullPointerException(
-                        "appendTextString: failed when write a new Text-string");
-            }
-
-            mData = newTextString.toByteArray();
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see java.lang.Object#clone()
-     */
-    @Override
-    public Object clone() throws CloneNotSupportedException {
-        int len = mData.length;
-        byte[] dstBytes = new byte[len];
-        System.arraycopy(mData, 0, dstBytes, 0, len);
-
-        try {
-            return new EncodedStringValue(mCharacterSet, dstBytes);
-        } catch (Exception e) {
-            Log.e(TAG, "failed to clone an EncodedStringValue: " + this);
-            e.printStackTrace();
-            throw new CloneNotSupportedException(e.getMessage());
-        }
-    }
-
-    /**
-     * Split this encoded string around matches of the given pattern.
-     *
-     * @param pattern the delimiting pattern
-     * @return the array of encoded strings computed by splitting this encoded
-     *         string around matches of the given pattern
-     */
-    public EncodedStringValue[] split(String pattern) {
-        String[] temp = getString().split(pattern);
-        EncodedStringValue[] ret = new EncodedStringValue[temp.length];
-        for (int i = 0; i < ret.length; ++i) {
-            try {
-                ret[i] = new EncodedStringValue(mCharacterSet,
-                        temp[i].getBytes());
-            } catch (NullPointerException exception) {
-                // Can't arrive here
-                return null;
-            }
-        }
-        return ret;
-    }
-
-    /**
-     * Extract an EncodedStringValue[] from a given String.
-     */
-    public static EncodedStringValue[] extract(String src) {
-        String[] values = src.split(";");
-
-        ArrayList<EncodedStringValue> list = new ArrayList<EncodedStringValue>();
-        for (int i = 0; i < values.length; i++) {
-            if (values[i].length() > 0) {
-                list.add(new EncodedStringValue(values[i]));
-            }
-        }
-
-        int len = list.size();
-        if (len > 0) {
-            return list.toArray(new EncodedStringValue[len]);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Concatenate an EncodedStringValue[] into a single String.
-     */
-    public static String concat(EncodedStringValue[] addr) {
-        StringBuilder sb = new StringBuilder();
-        int maxIndex = addr.length - 1;
-        for (int i = 0; i <= maxIndex; i++) {
-            sb.append(addr[i].getString());
-            if (i < maxIndex) {
-                sb.append(";");
-            }
-        }
-
-        return sb.toString();
-    }
-
-    public static EncodedStringValue copy(EncodedStringValue value) {
-        if (value == null) {
-            return null;
-        }
-
-        return new EncodedStringValue(value.mCharacterSet, value.mData);
-    }
-
-    public static EncodedStringValue[] encodeStrings(String[] array) {
-        int count = array.length;
-        if (count > 0) {
-            EncodedStringValue[] encodedArray = new EncodedStringValue[count];
-            for (int i = 0; i < count; i++) {
-                encodedArray[i] = new EncodedStringValue(array[i]);
-            }
-            return encodedArray;
-        }
-        return null;
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/GenericPdu.java b/src/com/android/messaging/mmslib/pdu/GenericPdu.java
deleted file mode 100644
index 178dc5a..0000000
--- a/src/com/android/messaging/mmslib/pdu/GenericPdu.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-public class GenericPdu {
-    /**
-     * The headers of pdu.
-     */
-    PduHeaders mPduHeaders = null;
-
-    /**
-     * Constructor.
-     */
-    public GenericPdu() {
-        mPduHeaders = new PduHeaders();
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param headers Headers for this PDU.
-     */
-    GenericPdu(PduHeaders headers) {
-        mPduHeaders = headers;
-    }
-
-    /**
-     * Get the headers of this PDU.
-     *
-     * @return A PduHeaders of this PDU.
-     */
-    PduHeaders getPduHeaders() {
-        return mPduHeaders;
-    }
-
-    /**
-     * Get X-Mms-Message-Type field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public int getMessageType() {
-        return mPduHeaders.getOctet(PduHeaders.MESSAGE_TYPE);
-    }
-
-    /**
-     * Set X-Mms-Message-Type field value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     * @throws RuntimeException if field's value is not Octet.
-     */
-    public void setMessageType(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.MESSAGE_TYPE);
-    }
-
-    /**
-     * Get X-Mms-MMS-Version field value.
-     *
-     * @return the X-Mms-MMS-Version value
-     */
-    public int getMmsVersion() {
-        return mPduHeaders.getOctet(PduHeaders.MMS_VERSION);
-    }
-
-    /**
-     * Set X-Mms-MMS-Version field value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     * @throws RuntimeException if field's value is not Octet.
-     */
-    public void setMmsVersion(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.MMS_VERSION);
-    }
-
-    /**
-     * Get From value.
-     * From-value = Value-length
-     *      (Address-present-token Encoded-string-value | Insert-address-token)
-     *
-     * @return the value
-     */
-    public EncodedStringValue getFrom() {
-        return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
-    }
-
-    /**
-     * Set From value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setFrom(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/MultimediaMessagePdu.java b/src/com/android/messaging/mmslib/pdu/MultimediaMessagePdu.java
deleted file mode 100644
index cb8c8c7..0000000
--- a/src/com/android/messaging/mmslib/pdu/MultimediaMessagePdu.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-/**
- * Multimedia message PDU.
- */
-public class MultimediaMessagePdu extends GenericPdu {
-    /**
-     * The body.
-     */
-    private PduBody mMessageBody;
-
-    /**
-     * Constructor.
-     */
-    public MultimediaMessagePdu() {
-        super();
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param header the header of this PDU
-     * @param body   the body of this PDU
-     */
-    public MultimediaMessagePdu(PduHeaders header, PduBody body) {
-        super(header);
-        mMessageBody = body;
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    MultimediaMessagePdu(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get body of the PDU.
-     *
-     * @return the body
-     */
-    public PduBody getBody() {
-        return mMessageBody;
-    }
-
-    /**
-     * Set body of the PDU.
-     *
-     * @param body the body
-     */
-    public void setBody(PduBody body) {
-        mMessageBody = body;
-    }
-
-    /**
-     * Get subject.
-     *
-     * @return the value
-     */
-    public EncodedStringValue getSubject() {
-        return mPduHeaders.getEncodedStringValue(PduHeaders.SUBJECT);
-    }
-
-    /**
-     * Set subject.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setSubject(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.SUBJECT);
-    }
-
-    /**
-     * Get To value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getTo() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
-    }
-
-    /**
-     * Add a "To" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void addTo(EncodedStringValue value) {
-        mPduHeaders.appendEncodedStringValue(value, PduHeaders.TO);
-    }
-
-    /**
-     * Get X-Mms-Priority value.
-     *
-     * @return the value
-     */
-    public int getPriority() {
-        return mPduHeaders.getOctet(PduHeaders.PRIORITY);
-    }
-
-    /**
-     * Set X-Mms-Priority value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setPriority(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.PRIORITY);
-    }
-
-    /**
-     * Get Date value.
-     *
-     * @return the value
-     */
-    public long getDate() {
-        return mPduHeaders.getLongInteger(PduHeaders.DATE);
-    }
-
-    /**
-     * Set Date value in seconds.
-     *
-     * @param value the value
-     */
-    public void setDate(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.DATE);
-    }
-
-    /**
-     * Get the message size
-     *
-     * @return the size of the message
-     */
-    public long getMessageSize() {
-        return mPduHeaders.getLongInteger(PduHeaders.MESSAGE_SIZE);
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/NotificationInd.java b/src/com/android/messaging/mmslib/pdu/NotificationInd.java
deleted file mode 100644
index 4cbbd30..0000000
--- a/src/com/android/messaging/mmslib/pdu/NotificationInd.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-/**
- * M-Notification.ind PDU.
- */
-public class NotificationInd extends GenericPdu {
-    /**
-     * Empty constructor.
-     * Since the Pdu corresponding to this class is constructed
-     * by the Proxy-Relay server, this class is only instantiated
-     * by the Pdu Parser.
-     *
-     * @throws InvalidHeaderValueException if error occurs.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public NotificationInd() throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    NotificationInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get X-Mms-Content-Class Value.
-     *
-     * @return the value
-     */
-    public int getContentClass() {
-        return mPduHeaders.getOctet(PduHeaders.CONTENT_CLASS);
-    }
-
-    /**
-     * Set X-Mms-Content-Class Value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setContentClass(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.CONTENT_CLASS);
-    }
-
-    /**
-     * Get X-Mms-Content-Location value.
-     * When used in a PDU other than M-Mbox-Delete.conf and M-Delete.conf:
-     * Content-location-value = Uri-value
-     *
-     * @return the value
-     */
-    public byte[] getContentLocation() {
-        return mPduHeaders.getTextString(PduHeaders.CONTENT_LOCATION);
-    }
-
-    /**
-     * Set X-Mms-Content-Location value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setContentLocation(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.CONTENT_LOCATION);
-    }
-
-    /**
-     * Get X-Mms-Expiry value.
-     *
-     * Expiry-value = Value-length
-     *      (Absolute-token Date-value | Relative-token Delta-seconds-value)
-     *
-     * @return the value
-     */
-    public long getExpiry() {
-        return mPduHeaders.getLongInteger(PduHeaders.EXPIRY);
-    }
-
-    /**
-     * Set X-Mms-Expiry value.
-     *
-     * @param value the value
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setExpiry(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.EXPIRY);
-    }
-
-    /**
-     * Get From value.
-     * From-value = Value-length
-     *      (Address-present-token Encoded-string-value | Insert-address-token)
-     *
-     * @return the value
-     */
-    public EncodedStringValue getFrom() {
-        return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
-    }
-
-    /**
-     * Set From value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setFrom(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
-    }
-
-    /**
-     * Get X-Mms-Message-Class value.
-     * Message-class-value = Class-identifier | Token-text
-     * Class-identifier = Personal | Advertisement | Informational | Auto
-     *
-     * @return the value
-     */
-    public byte[] getMessageClass() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Set X-Mms-Message-Class value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setMessageClass(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Get X-Mms-Message-Size value.
-     * Message-size-value = Long-integer
-     *
-     * @return the value
-     */
-    public long getMessageSize() {
-        return mPduHeaders.getLongInteger(PduHeaders.MESSAGE_SIZE);
-    }
-
-    /**
-     * Set X-Mms-Message-Size value.
-     *
-     * @param value the value
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setMessageSize(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.MESSAGE_SIZE);
-    }
-
-    /**
-     * Get subject.
-     *
-     * @return the value
-     */
-    public EncodedStringValue getSubject() {
-        return mPduHeaders.getEncodedStringValue(PduHeaders.SUBJECT);
-    }
-
-    /**
-     * Set subject.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setSubject(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.SUBJECT);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id.
-     *
-     * @return the value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setTransactionId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Get X-Mms-Delivery-Report Value.
-     *
-     * @return the value
-     */
-    public int getDeliveryReport() {
-        return mPduHeaders.getOctet(PduHeaders.DELIVERY_REPORT);
-    }
-
-    /**
-     * Set X-Mms-Delivery-Report Value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setDeliveryReport(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.DELIVERY_REPORT);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte getDrmContent() {return 0x00;}
-     *     public void setDrmContent(byte value) {}
-     *
-     *     public byte getDistributionIndicator() {return 0x00;}
-     *     public void setDistributionIndicator(byte value) {}
-     *
-     *     public ElementDescriptorValue getElementDescriptor() {return null;}
-     *     public void getElementDescriptor(ElementDescriptorValue value) {}
-     *
-     *     public byte getPriority() {return 0x00;}
-     *     public void setPriority(byte value) {}
-     *
-     *     public byte getRecommendedRetrievalMode() {return 0x00;}
-     *     public void setRecommendedRetrievalMode(byte value) {}
-     *
-     *     public byte getRecommendedRetrievalModeText() {return 0x00;}
-     *     public void setRecommendedRetrievalModeText(byte value) {}
-     *
-     *     public byte[] getReplaceId() {return 0x00;}
-     *     public void setReplaceId(byte[] value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     *
-     *     public byte getReplyCharging() {return 0x00;}
-     *     public void setReplyCharging(byte value) {}
-     *
-     *     public byte getReplyChargingDeadline() {return 0x00;}
-     *     public void setReplyChargingDeadline(byte value) {}
-     *
-     *     public byte[] getReplyChargingId() {return 0x00;}
-     *     public void setReplyChargingId(byte[] value) {}
-     *
-     *     public long getReplyChargingSize() {return 0;}
-     *     public void setReplyChargingSize(long value) {}
-     *
-     *     public byte getStored() {return 0x00;}
-     *     public void setStored(byte value) {}
-     */
-}
diff --git a/src/com/android/messaging/mmslib/pdu/NotifyRespInd.java b/src/com/android/messaging/mmslib/pdu/NotifyRespInd.java
deleted file mode 100644
index 7dabd89..0000000
--- a/src/com/android/messaging/mmslib/pdu/NotifyRespInd.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-/**
- * M-NofifyResp.ind PDU.
- */
-public class NotifyRespInd extends GenericPdu {
-    /**
-     * Constructor, used when composing a M-NotifyResp.ind pdu.
-     *
-     * @param mmsVersion    current version of mms
-     * @param transactionId the transaction-id value
-     * @param status        the status value
-     * @throws InvalidHeaderValueException if parameters are invalid.
-     * @throws NullPointerException if transactionId is null.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public NotifyRespInd(int mmsVersion,
-            byte[] transactionId,
-            int status) throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND);
-        setMmsVersion(mmsVersion);
-        setTransactionId(transactionId);
-        setStatus(status);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    NotifyRespInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get X-Mms-Report-Allowed field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public int getReportAllowed() {
-        return mPduHeaders.getOctet(PduHeaders.REPORT_ALLOWED);
-    }
-
-    /**
-     * Set X-Mms-Report-Allowed field value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setReportAllowed(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.REPORT_ALLOWED);
-    }
-
-    /**
-     * Set X-Mms-Status field value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.STATUS);
-    }
-
-    /**
-     * GetX-Mms-Status field value.
-     *
-     * @return the X-Mms-Status value
-     */
-    public int getStatus() {
-        return mPduHeaders.getOctet(PduHeaders.STATUS);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id field value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     * @throws RuntimeException if an undeclared error occurs.
-     */
-    public void setTransactionId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/PduBody.java b/src/com/android/messaging/mmslib/pdu/PduBody.java
deleted file mode 100644
index 8cbb2e6..0000000
--- a/src/com/android/messaging/mmslib/pdu/PduBody.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import java.util.Vector;
-
-public class PduBody {
-    private Vector<PduPart> mParts = null;
-
-    /**
-     * Constructor.
-     */
-    public PduBody() {
-        mParts = new Vector<PduPart>();
-    }
-
-    /**
-     * Appends the specified part to the end of this body.
-     *
-     * @param part part to be appended
-     * @return true when success, false when fail
-     * @throws NullPointerException when part is null
-     */
-    public boolean addPart(PduPart part) {
-        if (null == part) {
-            throw new NullPointerException();
-        }
-
-        return mParts.add(part);
-    }
-
-    /**
-     * Inserts the specified part at the specified position.
-     *
-     * @param index index at which the specified part is to be inserted
-     * @param part  part to be inserted
-     * @throws NullPointerException when part is null
-     */
-    public void addPart(int index, PduPart part) {
-        if (null == part) {
-            throw new NullPointerException();
-        }
-
-        mParts.add(index, part);
-    }
-
-    /**
-     * Remove all of the parts.
-     */
-    public void removeAll() {
-        mParts.clear();
-    }
-
-    /**
-     * Get the part at the specified position.
-     *
-     * @param index index of the part to return
-     * @return part at the specified index
-     */
-    public PduPart getPart(int index) {
-        return mParts.get(index);
-    }
-
-    /**
-     * Get the number of parts.
-     *
-     * @return the number of parts
-     */
-    public int getPartsNum() {
-        return mParts.size();
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/PduComposer.java b/src/com/android/messaging/mmslib/pdu/PduComposer.java
deleted file mode 100644
index ace49d1..0000000
--- a/src/com/android/messaging/mmslib/pdu/PduComposer.java
+++ /dev/null
@@ -1,1260 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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.android.messaging.mmslib.pdu;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import androidx.collection.SimpleArrayMap;
-import android.text.TextUtils;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Arrays;
-
-public class PduComposer {
-    /**
-     * Address type.
-     */
-    private static final int PDU_PHONE_NUMBER_ADDRESS_TYPE = 1;
-    private static final int PDU_EMAIL_ADDRESS_TYPE = 2;
-    private static final int PDU_IPV4_ADDRESS_TYPE = 3;
-    private static final int PDU_IPV6_ADDRESS_TYPE = 4;
-    private static final int PDU_UNKNOWN_ADDRESS_TYPE = 5;
-
-    /**
-     * Address regular expression string.
-     */
-    static final String REGEXP_PHONE_NUMBER_ADDRESS_TYPE = "\\+?[0-9|\\.|\\-]+";
-
-    static final String REGEXP_EMAIL_ADDRESS_TYPE = "[a-zA-Z| ]*\\<{0,1}[a-zA-Z| ]+@{1}" +
-            "[a-zA-Z| ]+\\.{1}[a-zA-Z| ]+\\>{0,1}";
-
-    static final String REGEXP_IPV6_ADDRESS_TYPE =
-            "[a-fA-F]{4}\\:{1}[a-fA-F0-9]{4}\\:{1}[a-fA-F0-9]{4}\\:{1}" +
-                    "[a-fA-F0-9]{4}\\:{1}[a-fA-F0-9]{4}\\:{1}[a-fA-F0-9]{4}\\:{1}" +
-                    "[a-fA-F0-9]{4}\\:{1}[a-fA-F0-9]{4}";
-
-    static final String REGEXP_IPV4_ADDRESS_TYPE = "[0-9]{1,3}\\.{1}[0-9]{1,3}\\.{1}" +
-            "[0-9]{1,3}\\.{1}[0-9]{1,3}";
-
-    /**
-     * The postfix strings of address.
-     */
-    static final String STRING_PHONE_NUMBER_ADDRESS_TYPE = "/TYPE=PLMN";
-    static final String STRING_IPV4_ADDRESS_TYPE = "/TYPE=IPV4";
-    static final String STRING_IPV6_ADDRESS_TYPE = "/TYPE=IPV6";
-
-    /**
-     * Error values.
-     */
-    private static final int PDU_COMPOSE_SUCCESS = 0;
-    private static final int PDU_COMPOSE_CONTENT_ERROR = 1;
-    private static final int PDU_COMPOSE_FIELD_NOT_SET = 2;
-    private static final int PDU_COMPOSE_FIELD_NOT_SUPPORTED = 3;
-
-    /**
-     * WAP values defined in WSP spec.
-     */
-    private static final int QUOTED_STRING_FLAG = 34;
-    private static final int END_STRING_FLAG = 0;
-    private static final int LENGTH_QUOTE = 31;
-    private static final int TEXT_MAX = 127;
-    private static final int SHORT_INTEGER_MAX = 127;
-    private static final int LONG_INTEGER_LENGTH_MAX = 8;
-
-    /**
-     * Block size when read data from InputStream.
-     */
-    private static final int PDU_COMPOSER_BLOCK_SIZE = 1024;
-
-    /**
-     * The output message.
-     */
-    protected ByteArrayOutputStream mMessage = null;
-
-    /**
-     * The PDU.
-     */
-    private GenericPdu mPdu = null;
-
-    /**
-     * Current visiting position of the mMessage.
-     */
-    protected int mPosition = 0;
-
-    /**
-     * Message compose buffer stack.
-     */
-    private BufferStack mStack = null;
-
-    /**
-     * Content resolver.
-     */
-    private final ContentResolver mResolver;
-
-    /**
-     * Header of this pdu.
-     */
-    private PduHeaders mPduHeader = null;
-
-    /**
-     * Map of all content type
-     */
-    private static SimpleArrayMap<String, Integer> mContentTypeMap = null;
-
-    static {
-        mContentTypeMap = new SimpleArrayMap<String, Integer>();
-
-        int i;
-        for (i = 0; i < PduContentTypes.contentTypes.length; i++) {
-            mContentTypeMap.put(PduContentTypes.contentTypes[i], i);
-        }
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param context the context
-     * @param pdu     the pdu to be composed
-     */
-    public PduComposer(final Context context, final GenericPdu pdu) {
-        mPdu = pdu;
-        mResolver = context.getContentResolver();
-        mPduHeader = pdu.getPduHeaders();
-        mStack = new BufferStack();
-        mMessage = new ByteArrayOutputStream();
-        mPosition = 0;
-    }
-
-    /**
-     * Make the message. No need to check whether mandatory fields are set,
-     * because the constructors of outgoing pdus are taking care of this.
-     *
-     * @return OutputStream of maked message. Return null if
-     * the PDU is invalid.
-     */
-    public byte[] make() {
-        // Get Message-type.
-        final int type = mPdu.getMessageType();
-
-        /* make the message */
-        switch (type) {
-            case PduHeaders.MESSAGE_TYPE_SEND_REQ:
-                if (makeSendReqPdu() != PDU_COMPOSE_SUCCESS) {
-                    return null;
-                }
-                break;
-            case PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND:
-                if (makeNotifyResp() != PDU_COMPOSE_SUCCESS) {
-                    return null;
-                }
-                break;
-            case PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND:
-                if (makeAckInd() != PDU_COMPOSE_SUCCESS) {
-                    return null;
-                }
-                break;
-            case PduHeaders.MESSAGE_TYPE_READ_REC_IND:
-                if (makeReadRecInd() != PDU_COMPOSE_SUCCESS) {
-                    return null;
-                }
-                break;
-            case PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND:
-                if (makeNotificationInd() != PDU_COMPOSE_SUCCESS) {
-                    return null;
-                }
-                break;
-            default:
-                return null;
-        }
-
-        return mMessage.toByteArray();
-    }
-
-    /**
-     * Copy buf to mMessage.
-     */
-    protected void arraycopy(final byte[] buf, final int pos, final int length) {
-        mMessage.write(buf, pos, length);
-        mPosition = mPosition + length;
-    }
-
-    /**
-     * Append a byte to mMessage.
-     */
-    protected void append(final int value) {
-        mMessage.write(value);
-        mPosition++;
-    }
-
-    /**
-     * Append short integer value to mMessage.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendShortInteger(final int value) {
-        /*
-         * From WAP-230-WSP-20010705-a:
-         * Short-integer = OCTET
-         * ; Integers in range 0-127 shall be encoded as a one octet value
-         * ; with the most significant bit set to one (1xxx xxxx) and with
-         * ; the value in the remaining least significant bits.
-         * In our implementation, only low 7 bits are stored and otherwise
-         * bits are ignored.
-         */
-        append((value | 0x80) & 0xff);
-    }
-
-    /**
-     * Append an octet number between 128 and 255 into mMessage.
-     * NOTE:
-     * A value between 0 and 127 should be appended by using appendShortInteger.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendOctet(final int number) {
-        append(number);
-    }
-
-    /**
-     * Append a short length into mMessage.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendShortLength(final int value) {
-        /*
-         * From WAP-230-WSP-20010705-a:
-         * Short-length = <Any octet 0-30>
-         */
-        append(value);
-    }
-
-    /**
-     * Append long integer into mMessage. it's used for really long integers.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendLongInteger(final long longInt) {
-        /*
-         * From WAP-230-WSP-20010705-a:
-         * Long-integer = Short-length Multi-octet-integer
-         * ; The Short-length indicates the length of the Multi-octet-integer
-         * Multi-octet-integer = 1*30 OCTET
-         * ; The content octets shall be an unsigned integer value with the
-         * ; most significant octet encoded first (big-endian representation).
-         * ; The minimum number of octets must be used to encode the value.
-         */
-        int size;
-        long temp = longInt;
-
-        // Count the length of the long integer.
-        for (size = 0; (temp != 0) && (size < LONG_INTEGER_LENGTH_MAX); size++) {
-            temp = (temp >>> 8);
-        }
-
-        // Set Length.
-        appendShortLength(size);
-
-        // Count and set the long integer.
-        int i;
-        int shift = (size - 1) * 8;
-
-        for (i = 0; i < size; i++) {
-            append((int) ((longInt >>> shift) & 0xff));
-            shift = shift - 8;
-        }
-    }
-
-    /**
-     * Append text string into mMessage.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendTextString(final byte[] text) {
-        /*
-         * From WAP-230-WSP-20010705-a:
-         * Text-string = [Quote] *TEXT End-of-string
-         * ; If the first character in the TEXT is in the range of 128-255,
-         * ; a Quote character must precede it. Otherwise the Quote character
-         * ;must be omitted. The Quote is not part of the contents.
-         */
-        if (((text[0]) & 0xff) > TEXT_MAX) { // No need to check for <= 255
-            append(TEXT_MAX);
-        }
-
-        arraycopy(text, 0, text.length);
-        append(0);
-    }
-
-    /**
-     * Append text string into mMessage.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendTextString(final String str) {
-        /*
-         * From WAP-230-WSP-20010705-a:
-         * Text-string = [Quote] *TEXT End-of-string
-         * ; If the first character in the TEXT is in the range of 128-255,
-         * ; a Quote character must precede it. Otherwise the Quote character
-         * ;must be omitted. The Quote is not part of the contents.
-         */
-        appendTextString(str.getBytes());
-    }
-
-    /**
-     * Append encoded string value to mMessage.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendEncodedString(final EncodedStringValue enStr) {
-        /*
-         * From OMA-TS-MMS-ENC-V1_3-20050927-C:
-         * Encoded-string-value = Text-string | Value-length Char-set Text-string
-         */
-        assert (enStr != null);
-
-        final int charset = enStr.getCharacterSet();
-        final byte[] textString = enStr.getTextString();
-        if (null == textString) {
-            return;
-        }
-
-        /*
-         * In the implementation of EncodedStringValue, the charset field will
-         * never be 0. It will always be composed as
-         * Encoded-string-value = Value-length Char-set Text-string
-         */
-        mStack.newbuf();
-        final PositionMarker start = mStack.mark();
-
-        appendShortInteger(charset);
-        appendTextString(textString);
-
-        final int len = start.getLength();
-        mStack.pop();
-        appendValueLength(len);
-        mStack.copy();
-    }
-
-    /**
-     * Append uintvar integer into mMessage.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendUintvarInteger(final long value) {
-        /*
-         * From WAP-230-WSP-20010705-a:
-         * To encode a large unsigned integer, split it into 7-bit fragments
-         * and place them in the payloads of multiple octets. The most significant
-         * bits are placed in the first octets with the least significant bits
-         * ending up in the last octet. All octets MUST set the Continue bit to 1
-         * except the last octet, which MUST set the Continue bit to 0.
-         */
-        int i;
-        long max = SHORT_INTEGER_MAX;
-
-        for (i = 0; i < 5; i++) {
-            if (value < max) {
-                break;
-            }
-
-            max = (max << 7) | 0x7fL;
-        }
-
-        while (i > 0) {
-            long temp = value >>> (i * 7);
-            temp = temp & 0x7f;
-
-            append((int) ((temp | 0x80) & 0xff));
-
-            i--;
-        }
-
-        append((int) (value & 0x7f));
-    }
-
-    /**
-     * Append date value into mMessage.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendDateValue(final long date) {
-        /*
-         * From OMA-TS-MMS-ENC-V1_3-20050927-C:
-         * Date-value = Long-integer
-         */
-        appendLongInteger(date);
-    }
-
-    /**
-     * Append value length to mMessage.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendValueLength(final long value) {
-        /*
-         * From WAP-230-WSP-20010705-a:
-         * Value-length = Short-length | (Length-quote Length)
-         * ; Value length is used to indicate the length of the value to follow
-         * Short-length = <Any octet 0-30>
-         * Length-quote = <Octet 31>
-         * Length = Uintvar-integer
-         */
-        if (value < LENGTH_QUOTE) {
-            appendShortLength((int) value);
-            return;
-        }
-
-        append(LENGTH_QUOTE);
-        appendUintvarInteger(value);
-    }
-
-    /**
-     * Append quoted string to mMessage.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendQuotedString(final byte[] text) {
-        /*
-         * From WAP-230-WSP-20010705-a:
-         * Quoted-string = <Octet 34> *TEXT End-of-string
-         * ;The TEXT encodes an RFC2616 Quoted-string with the enclosing
-         * ;quotation-marks <"> removed.
-         */
-        append(QUOTED_STRING_FLAG);
-        arraycopy(text, 0, text.length);
-        append(END_STRING_FLAG);
-    }
-
-    /**
-     * Append quoted string to mMessage.
-     * This implementation doesn't check the validity of parameter, since it
-     * assumes that the values are validated in the GenericPdu setter methods.
-     */
-    protected void appendQuotedString(final String str) {
-        /*
-         * From WAP-230-WSP-20010705-a:
-         * Quoted-string = <Octet 34> *TEXT End-of-string
-         * ;The TEXT encodes an RFC2616 Quoted-string with the enclosing
-         * ;quotation-marks <"> removed.
-         */
-        appendQuotedString(str.getBytes());
-    }
-
-    private EncodedStringValue appendAddressType(final EncodedStringValue address) {
-        EncodedStringValue temp = null;
-
-        try {
-            final int addressType = checkAddressType(address.getString());
-            temp = EncodedStringValue.copy(address);
-            if (PDU_PHONE_NUMBER_ADDRESS_TYPE == addressType) {
-                // Phone number.
-                temp.appendTextString(STRING_PHONE_NUMBER_ADDRESS_TYPE.getBytes());
-            } else if (PDU_IPV4_ADDRESS_TYPE == addressType) {
-                // Ipv4 address.
-                temp.appendTextString(STRING_IPV4_ADDRESS_TYPE.getBytes());
-            } else if (PDU_IPV6_ADDRESS_TYPE == addressType) {
-                // Ipv6 address.
-                temp.appendTextString(STRING_IPV6_ADDRESS_TYPE.getBytes());
-            }
-        } catch (final NullPointerException e) {
-            return null;
-        }
-
-        return temp;
-    }
-
-    /**
-     * Append header to mMessage.
-     */
-    private int appendHeader(final int field) {
-        switch (field) {
-            case PduHeaders.MMS_VERSION:
-                appendOctet(field);
-
-                final int version = mPduHeader.getOctet(field);
-                if (0 == version) {
-                    appendShortInteger(PduHeaders.CURRENT_MMS_VERSION);
-                } else {
-                    appendShortInteger(version);
-                }
-
-                break;
-
-            case PduHeaders.MESSAGE_ID:
-            case PduHeaders.TRANSACTION_ID:
-            case PduHeaders.CONTENT_LOCATION:
-                final byte[] textString = mPduHeader.getTextString(field);
-                if (null == textString) {
-                    return PDU_COMPOSE_FIELD_NOT_SET;
-                }
-
-                appendOctet(field);
-                appendTextString(textString);
-                break;
-
-            case PduHeaders.TO:
-            case PduHeaders.BCC:
-            case PduHeaders.CC:
-                final EncodedStringValue[] addr = mPduHeader.getEncodedStringValues(field);
-
-                if (null == addr) {
-                    return PDU_COMPOSE_FIELD_NOT_SET;
-                }
-
-                EncodedStringValue temp;
-                for (int i = 0; i < addr.length; i++) {
-                    temp = appendAddressType(addr[i]);
-                    if (temp == null) {
-                        return PDU_COMPOSE_CONTENT_ERROR;
-                    }
-
-                    appendOctet(field);
-                    appendEncodedString(temp);
-                }
-                break;
-
-            case PduHeaders.FROM:
-                // Value-length (Address-present-token Encoded-string-value | Insert-address-token)
-                appendOctet(field);
-
-                final EncodedStringValue from = mPduHeader.getEncodedStringValue(field);
-                if ((from == null)
-                        || TextUtils.isEmpty(from.getString())
-                        || new String(from.getTextString()).equals(
-                        PduHeaders.FROM_INSERT_ADDRESS_TOKEN_STR)) {
-                    // Length of from = 1
-                    append(1);
-                    // Insert-address-token = <Octet 129>
-                    append(PduHeaders.FROM_INSERT_ADDRESS_TOKEN);
-                } else {
-                    mStack.newbuf();
-                    final PositionMarker fstart = mStack.mark();
-
-                    // Address-present-token = <Octet 128>
-                    append(PduHeaders.FROM_ADDRESS_PRESENT_TOKEN);
-
-                    temp = appendAddressType(from);
-                    if (temp == null) {
-                        return PDU_COMPOSE_CONTENT_ERROR;
-                    }
-
-                    appendEncodedString(temp);
-
-                    final int flen = fstart.getLength();
-                    mStack.pop();
-                    appendValueLength(flen);
-                    mStack.copy();
-                }
-                break;
-
-            case PduHeaders.READ_STATUS:
-            case PduHeaders.STATUS:
-            case PduHeaders.REPORT_ALLOWED:
-            case PduHeaders.PRIORITY:
-            case PduHeaders.DELIVERY_REPORT:
-            case PduHeaders.READ_REPORT:
-                final int octet = mPduHeader.getOctet(field);
-                if (0 == octet) {
-                    return PDU_COMPOSE_FIELD_NOT_SET;
-                }
-
-                appendOctet(field);
-                appendOctet(octet);
-                break;
-
-            case PduHeaders.DATE:
-                final long date = mPduHeader.getLongInteger(field);
-                if (-1 == date) {
-                    return PDU_COMPOSE_FIELD_NOT_SET;
-                }
-
-                appendOctet(field);
-                appendDateValue(date);
-                break;
-
-            case PduHeaders.SUBJECT:
-                final EncodedStringValue enString =
-                        mPduHeader.getEncodedStringValue(field);
-                if (null == enString) {
-                    return PDU_COMPOSE_FIELD_NOT_SET;
-                }
-
-                appendOctet(field);
-                appendEncodedString(enString);
-                break;
-
-            case PduHeaders.MESSAGE_CLASS:
-                final byte[] messageClass = mPduHeader.getTextString(field);
-                if (null == messageClass) {
-                    return PDU_COMPOSE_FIELD_NOT_SET;
-                }
-
-                appendOctet(field);
-                if (Arrays.equals(messageClass,
-                        PduHeaders.MESSAGE_CLASS_ADVERTISEMENT_STR.getBytes())) {
-                    appendOctet(PduHeaders.MESSAGE_CLASS_ADVERTISEMENT);
-                } else if (Arrays.equals(messageClass,
-                        PduHeaders.MESSAGE_CLASS_AUTO_STR.getBytes())) {
-                    appendOctet(PduHeaders.MESSAGE_CLASS_AUTO);
-                } else if (Arrays.equals(messageClass,
-                        PduHeaders.MESSAGE_CLASS_PERSONAL_STR.getBytes())) {
-                    appendOctet(PduHeaders.MESSAGE_CLASS_PERSONAL);
-                } else if (Arrays.equals(messageClass,
-                        PduHeaders.MESSAGE_CLASS_INFORMATIONAL_STR.getBytes())) {
-                    appendOctet(PduHeaders.MESSAGE_CLASS_INFORMATIONAL);
-                } else {
-                    appendTextString(messageClass);
-                }
-                break;
-
-            case PduHeaders.EXPIRY:
-            case PduHeaders.MESSAGE_SIZE:
-                final long value = mPduHeader.getLongInteger(field);
-                if (-1 == value) {
-                    return PDU_COMPOSE_FIELD_NOT_SET;
-                }
-
-                appendOctet(field);
-
-                mStack.newbuf();
-                final PositionMarker valueStart = mStack.mark();
-
-                append(PduHeaders.VALUE_RELATIVE_TOKEN);
-                appendLongInteger(value);
-
-                final int valueLength = valueStart.getLength();
-                mStack.pop();
-                appendValueLength(valueLength);
-                mStack.copy();
-                break;
-
-            default:
-                return PDU_COMPOSE_FIELD_NOT_SUPPORTED;
-        }
-
-        return PDU_COMPOSE_SUCCESS;
-    }
-
-    /**
-     * Make ReadRec.Ind.
-     */
-    private int makeReadRecInd() {
-        if (mMessage == null) {
-            mMessage = new ByteArrayOutputStream();
-            mPosition = 0;
-        }
-
-        // X-Mms-Message-Type
-        appendOctet(PduHeaders.MESSAGE_TYPE);
-        appendOctet(PduHeaders.MESSAGE_TYPE_READ_REC_IND);
-
-        // X-Mms-MMS-Version
-        if (appendHeader(PduHeaders.MMS_VERSION) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // Message-ID
-        if (appendHeader(PduHeaders.MESSAGE_ID) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // To
-        if (appendHeader(PduHeaders.TO) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // From
-        if (appendHeader(PduHeaders.FROM) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // Date Optional
-        appendHeader(PduHeaders.DATE);
-
-        // X-Mms-Read-Status
-        if (appendHeader(PduHeaders.READ_STATUS) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // X-Mms-Applic-ID Optional(not support)
-        // X-Mms-Reply-Applic-ID Optional(not support)
-        // X-Mms-Aux-Applic-Info Optional(not support)
-
-        return PDU_COMPOSE_SUCCESS;
-    }
-
-    /**
-     * Make NotifyResp.Ind.
-     */
-    private int makeNotifyResp() {
-        if (mMessage == null) {
-            mMessage = new ByteArrayOutputStream();
-            mPosition = 0;
-        }
-
-        //    X-Mms-Message-Type
-        appendOctet(PduHeaders.MESSAGE_TYPE);
-        appendOctet(PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND);
-
-        // X-Mms-Transaction-ID
-        if (appendHeader(PduHeaders.TRANSACTION_ID) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // X-Mms-MMS-Version
-        if (appendHeader(PduHeaders.MMS_VERSION) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        //  X-Mms-Status
-        if (appendHeader(PduHeaders.STATUS) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // X-Mms-Report-Allowed Optional (not support)
-        return PDU_COMPOSE_SUCCESS;
-    }
-
-    /**
-     * Make Acknowledge.Ind.
-     */
-    private int makeAckInd() {
-        if (mMessage == null) {
-            mMessage = new ByteArrayOutputStream();
-            mPosition = 0;
-        }
-
-        //    X-Mms-Message-Type
-        appendOctet(PduHeaders.MESSAGE_TYPE);
-        appendOctet(PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND);
-
-        // X-Mms-Transaction-ID
-        if (appendHeader(PduHeaders.TRANSACTION_ID) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        //     X-Mms-MMS-Version
-        if (appendHeader(PduHeaders.MMS_VERSION) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // X-Mms-Report-Allowed Optional
-        appendHeader(PduHeaders.REPORT_ALLOWED);
-
-        return PDU_COMPOSE_SUCCESS;
-    }
-
-    /**
-     * Make Acknowledge.Ind.
-     */
-    private int makeNotificationInd() {
-        if (mMessage == null) {
-            mMessage = new ByteArrayOutputStream();
-            mPosition = 0;
-        }
-
-        //    X-Mms-Message-Type
-        appendOctet(PduHeaders.MESSAGE_TYPE);
-        appendOctet(PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND);
-
-        // X-Mms-Transaction-ID
-        if (appendHeader(PduHeaders.TRANSACTION_ID) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        //     X-Mms-MMS-Version
-        if (appendHeader(PduHeaders.MMS_VERSION) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // From
-        if (appendHeader(PduHeaders.FROM) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // Subject Optional
-        appendHeader(PduHeaders.SUBJECT);
-
-        // Expiry
-        if (appendHeader(PduHeaders.MESSAGE_CLASS) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // Expiry
-        if (appendHeader(PduHeaders.MESSAGE_SIZE) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // Expiry
-        if (appendHeader(PduHeaders.EXPIRY) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // X-Mms-Content-Location
-        if (appendHeader(PduHeaders.CONTENT_LOCATION) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        return PDU_COMPOSE_SUCCESS;
-    }
-
-    /**
-     * Make Send.req.
-     */
-    private int makeSendReqPdu() {
-        if (mMessage == null) {
-            mMessage = new ByteArrayOutputStream();
-            mPosition = 0;
-        }
-
-        // X-Mms-Message-Type
-        appendOctet(PduHeaders.MESSAGE_TYPE);
-        appendOctet(PduHeaders.MESSAGE_TYPE_SEND_REQ);
-
-        // X-Mms-Transaction-ID
-        appendOctet(PduHeaders.TRANSACTION_ID);
-
-        final byte[] trid = mPduHeader.getTextString(PduHeaders.TRANSACTION_ID);
-        if (trid == null) {
-            // Transaction-ID should be set(by Transaction) before make().
-            throw new IllegalArgumentException("Transaction-ID is null.");
-        }
-        appendTextString(trid);
-
-        //  X-Mms-MMS-Version
-        if (appendHeader(PduHeaders.MMS_VERSION) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // Date Date-value Optional.
-        appendHeader(PduHeaders.DATE);
-
-        // From
-        if (appendHeader(PduHeaders.FROM) != PDU_COMPOSE_SUCCESS) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        boolean recipient = false;
-
-        // To
-        if (appendHeader(PduHeaders.TO) != PDU_COMPOSE_CONTENT_ERROR) {
-            recipient = true;
-        }
-
-        // Cc
-        if (appendHeader(PduHeaders.CC) != PDU_COMPOSE_CONTENT_ERROR) {
-            recipient = true;
-        }
-
-        // Bcc
-        if (appendHeader(PduHeaders.BCC) != PDU_COMPOSE_CONTENT_ERROR) {
-            recipient = true;
-        }
-
-        // Need at least one of "cc", "bcc" and "to".
-        if (false == recipient) {
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        // Subject Optional
-        appendHeader(PduHeaders.SUBJECT);
-
-        // X-Mms-Message-Class Optional
-        // Message-class-value = Class-identifier | Token-text
-        appendHeader(PduHeaders.MESSAGE_CLASS);
-
-        // X-Mms-Expiry Optional
-        appendHeader(PduHeaders.EXPIRY);
-
-        // X-Mms-Priority Optional
-        appendHeader(PduHeaders.PRIORITY);
-
-        // X-Mms-Delivery-Report Optional
-        appendHeader(PduHeaders.DELIVERY_REPORT);
-
-        // X-Mms-Read-Report Optional
-        appendHeader(PduHeaders.READ_REPORT);
-
-        //    Content-Type
-        appendOctet(PduHeaders.CONTENT_TYPE);
-
-        //  Message body
-        return makeMessageBody();
-    }
-
-    /**
-     * Make message body.
-     */
-    private int makeMessageBody() {
-        // 1. add body informations
-        mStack.newbuf();  // Switching buffer because we need to
-
-        final PositionMarker ctStart = mStack.mark();
-
-        // This contentTypeIdentifier should be used for type of attachment...
-        final String contentType = new String(mPduHeader.getTextString(PduHeaders.CONTENT_TYPE));
-        final Integer contentTypeIdentifier = mContentTypeMap.get(contentType);
-        if (contentTypeIdentifier == null) {
-            // content type is mandatory
-            return PDU_COMPOSE_CONTENT_ERROR;
-        }
-
-        appendShortInteger(contentTypeIdentifier.intValue());
-
-        // content-type parameter: start
-        final PduBody body = ((SendReq) mPdu).getBody();
-        if (null == body || body.getPartsNum() == 0) {
-            // empty message
-            appendUintvarInteger(0);
-            mStack.pop();
-            mStack.copy();
-            return PDU_COMPOSE_SUCCESS;
-        }
-
-        PduPart part;
-        try {
-            part = body.getPart(0);
-
-            final byte[] start = part.getContentId();
-            if (start != null) {
-                appendOctet(PduPart.P_DEP_START);
-                if (('<' == start[0]) && ('>' == start[start.length - 1])) {
-                    appendTextString(start);
-                } else {
-                    appendTextString("<" + new String(start) + ">");
-                }
-            }
-
-            // content-type parameter: type
-            appendOctet(PduPart.P_CT_MR_TYPE);
-            appendTextString(part.getContentType());
-        } catch (final ArrayIndexOutOfBoundsException e) {
-            e.printStackTrace();
-        }
-
-        final int ctLength = ctStart.getLength();
-        mStack.pop();
-        appendValueLength(ctLength);
-        mStack.copy();
-
-        // 3. add content
-        final int partNum = body.getPartsNum();
-        appendUintvarInteger(partNum);
-        for (int i = 0; i < partNum; i++) {
-            part = body.getPart(i);
-            mStack.newbuf();  // Leaving space for header lengh and data length
-            final PositionMarker attachment = mStack.mark();
-
-            mStack.newbuf();  // Leaving space for Content-Type length
-            final PositionMarker contentTypeBegin = mStack.mark();
-
-            final byte[] partContentType = part.getContentType();
-
-            if (partContentType == null) {
-                // content type is mandatory
-                return PDU_COMPOSE_CONTENT_ERROR;
-            }
-
-            // content-type value
-            final Integer partContentTypeIdentifier =
-                    mContentTypeMap.get(new String(partContentType));
-            if (partContentTypeIdentifier == null) {
-                appendTextString(partContentType);
-            } else {
-                appendShortInteger(partContentTypeIdentifier.intValue());
-            }
-
-            /* Content-type parameter : name.
-             * The value of name, filename, content-location is the same.
-             * Just one of them is enough for this PDU.
-             */
-            byte[] name = part.getName();
-
-            if (null == name) {
-                name = part.getFilename();
-
-                if (null == name) {
-                    name = part.getContentLocation();
-
-                    if (null == name) {
-                        /* at lease one of name, filename, Content-location
-                         * should be available.
-                         */
-                        // I found that an mms received from tmomail.net will include a SMIL part
-                        // that has no name. That would cause the code here to return
-                        // PDU_COMPOSE_CONTENT_ERROR when a user tried to forward the message. The
-                        // message would never send and the user would be stuck in a retry
-                        // situation. Simply jam in any old name here to fix the problem.
-                        name = "smil.xml".getBytes();
-                    }
-                }
-            }
-            appendOctet(PduPart.P_DEP_NAME);
-            appendTextString(name);
-
-            // content-type parameter : charset
-            final int charset = part.getCharset();
-            if (charset != 0) {
-                appendOctet(PduPart.P_CHARSET);
-                appendShortInteger(charset);
-            }
-
-            final int contentTypeLength = contentTypeBegin.getLength();
-            mStack.pop();
-            appendValueLength(contentTypeLength);
-            mStack.copy();
-
-            // content id
-            final byte[] contentId = part.getContentId();
-
-            if (null != contentId) {
-                appendOctet(PduPart.P_CONTENT_ID);
-                if (('<' == contentId[0]) && ('>' == contentId[contentId.length - 1])) {
-                    appendQuotedString(contentId);
-                } else {
-                    appendQuotedString("<" + new String(contentId) + ">");
-                }
-            }
-
-            // content-location
-            final byte[] contentLocation = part.getContentLocation();
-            if (null != contentLocation) {
-                appendOctet(PduPart.P_CONTENT_LOCATION);
-                appendTextString(contentLocation);
-            }
-
-            // content
-            final int headerLength = attachment.getLength();
-
-            int dataLength = 0; // Just for safety...
-            final byte[] partData = part.getData();
-
-            if (partData != null) {
-                arraycopy(partData, 0, partData.length);
-                dataLength = partData.length;
-            } else {
-                InputStream cr = null;
-                try {
-                    final byte[] buffer = new byte[PDU_COMPOSER_BLOCK_SIZE];
-                    cr = mResolver.openInputStream(part.getDataUri());
-                    int len = 0;
-                    while ((len = cr.read(buffer)) != -1) {
-                        mMessage.write(buffer, 0, len);
-                        mPosition += len;
-                        dataLength += len;
-                    }
-                } catch (final FileNotFoundException e) {
-                    return PDU_COMPOSE_CONTENT_ERROR;
-                } catch (final IOException e) {
-                    return PDU_COMPOSE_CONTENT_ERROR;
-                } catch (final RuntimeException e) {
-                    return PDU_COMPOSE_CONTENT_ERROR;
-                } finally {
-                    if (cr != null) {
-                        try {
-                            cr.close();
-                        } catch (final IOException e) {
-                            // Nothing to do
-                        }
-                    }
-                }
-            }
-
-            if (dataLength != (attachment.getLength() - headerLength)) {
-                throw new RuntimeException("BUG: Length check failed");
-            }
-
-            mStack.pop();
-            appendUintvarInteger(headerLength);
-            appendUintvarInteger(dataLength);
-            mStack.copy();
-        }
-
-        return PDU_COMPOSE_SUCCESS;
-    }
-
-    /**
-     * Record current message informations.
-     */
-    private static class LengthRecordNode {
-
-        ByteArrayOutputStream currentMessage = null;
-
-        public int currentPosition = 0;
-
-        public LengthRecordNode next = null;
-    }
-
-    /**
-     * Mark current message position and stact size.
-     */
-    private class PositionMarker {
-
-        private int c_pos;   // Current position
-
-        private int currentStackSize;  // Current stack size
-
-        int getLength() {
-            // If these assert fails, likely that you are finding the
-            // size of buffer that is deep in BufferStack you can only
-            // find the length of the buffer that is on top
-            if (currentStackSize != mStack.stackSize) {
-                throw new RuntimeException("BUG: Invalid call to getLength()");
-            }
-
-            return mPosition - c_pos;
-        }
-    }
-
-    /**
-     * This implementation can be OPTIMIZED to use only
-     * 2 buffers. This optimization involves changing BufferStack
-     * only... Its usage (interface) will not change.
-     */
-    private class BufferStack {
-
-        private LengthRecordNode stack = null;
-
-        private LengthRecordNode toCopy = null;
-
-        int stackSize = 0;
-
-        /**
-         * Create a new message buffer and push it into the stack.
-         */
-        void newbuf() {
-            // You can't create a new buff when toCopy != null
-            // That is after calling pop() and before calling copy()
-            // If you do, it is a bug
-            if (toCopy != null) {
-                throw new RuntimeException("BUG: Invalid newbuf() before copy()");
-            }
-
-            final LengthRecordNode temp = new LengthRecordNode();
-
-            temp.currentMessage = mMessage;
-            temp.currentPosition = mPosition;
-
-            temp.next = stack;
-            stack = temp;
-
-            stackSize = stackSize + 1;
-
-            mMessage = new ByteArrayOutputStream();
-            mPosition = 0;
-        }
-
-        /**
-         * Pop the message before and record current message in the stack.
-         */
-        void pop() {
-            final ByteArrayOutputStream currentMessage = mMessage;
-            final int currentPosition = mPosition;
-
-            mMessage = stack.currentMessage;
-            mPosition = stack.currentPosition;
-
-            toCopy = stack;
-            // Re using the top element of the stack to avoid memory allocation
-
-            stack = stack.next;
-            stackSize = stackSize - 1;
-
-            toCopy.currentMessage = currentMessage;
-            toCopy.currentPosition = currentPosition;
-        }
-
-        /**
-         * Append current message to the message before.
-         */
-        void copy() {
-            arraycopy(toCopy.currentMessage.toByteArray(), 0,
-                    toCopy.currentPosition);
-
-            toCopy = null;
-        }
-
-        /**
-         * Mark current message position
-         */
-        PositionMarker mark() {
-            final PositionMarker m = new PositionMarker();
-
-            m.c_pos = mPosition;
-            m.currentStackSize = stackSize;
-
-            return m;
-        }
-    }
-
-    /**
-     * Check address type.
-     *
-     * @param address address string without the postfix stinng type,
-     *                such as "/TYPE=PLMN", "/TYPE=IPv6" and "/TYPE=IPv4"
-     * @return PDU_PHONE_NUMBER_ADDRESS_TYPE if it is phone number,
-     *         PDU_EMAIL_ADDRESS_TYPE if it is email address,
-     *         PDU_IPV4_ADDRESS_TYPE if it is ipv4 address,
-     *         PDU_IPV6_ADDRESS_TYPE if it is ipv6 address,
-     *         PDU_UNKNOWN_ADDRESS_TYPE if it is unknown.
-     */
-    protected static int checkAddressType(final String address) {
-        /**
-         * From OMA-TS-MMS-ENC-V1_3-20050927-C.pdf, section 8.
-         * address = ( e-mail / device-address / alphanum-shortcode / num-shortcode)
-         * e-mail = mailbox; to the definition of mailbox as described in
-         * section 3.4 of [RFC2822], but excluding the
-         * obsolete definitions as indicated by the "obs-" prefix.
-         * device-address = ( global-phone-number "/TYPE=PLMN" )
-         * / ( ipv4 "/TYPE=IPv4" ) / ( ipv6 "/TYPE=IPv6" )
-         * / ( escaped-value "/TYPE=" address-type )
-         *
-         * global-phone-number = ["+"] 1*( DIGIT / written-sep )
-         * written-sep =("-"/".")
-         *
-         * ipv4 = 1*3DIGIT 3( "." 1*3DIGIT ) ; IPv4 address value
-         *
-         * ipv6 = 4HEXDIG 7( ":" 4HEXDIG ) ; IPv6 address per RFC 2373
-         */
-
-        if (null == address) {
-            return PDU_UNKNOWN_ADDRESS_TYPE;
-        }
-
-        if (address.matches(REGEXP_IPV4_ADDRESS_TYPE)) {
-            // Ipv4 address.
-            return PDU_IPV4_ADDRESS_TYPE;
-        } else if (address.matches(REGEXP_PHONE_NUMBER_ADDRESS_TYPE)) {
-            // Phone number.
-            return PDU_PHONE_NUMBER_ADDRESS_TYPE;
-        } else if (address.matches(REGEXP_EMAIL_ADDRESS_TYPE)) {
-            // Email address.
-            return PDU_EMAIL_ADDRESS_TYPE;
-        } else if (address.matches(REGEXP_IPV6_ADDRESS_TYPE)) {
-            // Ipv6 address.
-            return PDU_IPV6_ADDRESS_TYPE;
-        } else {
-            // Unknown address.
-            return PDU_UNKNOWN_ADDRESS_TYPE;
-        }
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/PduContentTypes.java b/src/com/android/messaging/mmslib/pdu/PduContentTypes.java
deleted file mode 100644
index f2cebf1..0000000
--- a/src/com/android/messaging/mmslib/pdu/PduContentTypes.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-public class PduContentTypes {
-    /**
-     * All content types. From:
-     * http://www.openmobilealliance.org/tech/omna/omna-wsp-content-type.htm
-     */
-    static final String[] contentTypes = {
-            "*/*",                                        /* 0x00 */
-            "text/*",                                     /* 0x01 */
-            "text/html",                                  /* 0x02 */
-            "text/plain",                                 /* 0x03 */
-            "text/x-hdml",                                /* 0x04 */
-            "text/x-ttml",                                /* 0x05 */
-            "text/x-vCalendar",                           /* 0x06 */
-            "text/x-vCard",                               /* 0x07 */
-            "text/vnd.wap.wml",                           /* 0x08 */
-            "text/vnd.wap.wmlscript",                     /* 0x09 */
-            "text/vnd.wap.wta-event",                     /* 0x0A */
-            "multipart/*",                                /* 0x0B */
-            "multipart/mixed",                            /* 0x0C */
-            "multipart/form-data",                        /* 0x0D */
-            "multipart/byterantes",                       /* 0x0E */
-            "multipart/alternative",                      /* 0x0F */
-            "application/*",                              /* 0x10 */
-            "application/java-vm",                        /* 0x11 */
-            "application/x-www-form-urlencoded",          /* 0x12 */
-            "application/x-hdmlc",                        /* 0x13 */
-            "application/vnd.wap.wmlc",                   /* 0x14 */
-            "application/vnd.wap.wmlscriptc",             /* 0x15 */
-            "application/vnd.wap.wta-eventc",             /* 0x16 */
-            "application/vnd.wap.uaprof",                 /* 0x17 */
-            "application/vnd.wap.wtls-ca-certificate",    /* 0x18 */
-            "application/vnd.wap.wtls-user-certificate",  /* 0x19 */
-            "application/x-x509-ca-cert",                 /* 0x1A */
-            "application/x-x509-user-cert",               /* 0x1B */
-            "image/*",                                    /* 0x1C */
-            "image/gif",                                  /* 0x1D */
-            "image/jpeg",                                 /* 0x1E */
-            "image/tiff",                                 /* 0x1F */
-            "image/png",                                  /* 0x20 */
-            "image/vnd.wap.wbmp",                         /* 0x21 */
-            "application/vnd.wap.multipart.*",            /* 0x22 */
-            "application/vnd.wap.multipart.mixed",        /* 0x23 */
-            "application/vnd.wap.multipart.form-data",    /* 0x24 */
-            "application/vnd.wap.multipart.byteranges",   /* 0x25 */
-            "application/vnd.wap.multipart.alternative",  /* 0x26 */
-            "application/xml",                            /* 0x27 */
-            "text/xml",                                   /* 0x28 */
-            "application/vnd.wap.wbxml",                  /* 0x29 */
-            "application/x-x968-cross-cert",              /* 0x2A */
-            "application/x-x968-ca-cert",                 /* 0x2B */
-            "application/x-x968-user-cert",               /* 0x2C */
-            "text/vnd.wap.si",                            /* 0x2D */
-            "application/vnd.wap.sic",                    /* 0x2E */
-            "text/vnd.wap.sl",                            /* 0x2F */
-            "application/vnd.wap.slc",                    /* 0x30 */
-            "text/vnd.wap.co",                            /* 0x31 */
-            "application/vnd.wap.coc",                    /* 0x32 */
-            "application/vnd.wap.multipart.related",      /* 0x33 */
-            "application/vnd.wap.sia",                    /* 0x34 */
-            "text/vnd.wap.connectivity-xml",              /* 0x35 */
-            "application/vnd.wap.connectivity-wbxml",     /* 0x36 */
-            "application/pkcs7-mime",                     /* 0x37 */
-            "application/vnd.wap.hashed-certificate",     /* 0x38 */
-            "application/vnd.wap.signed-certificate",     /* 0x39 */
-            "application/vnd.wap.cert-response",          /* 0x3A */
-            "application/xhtml+xml",                      /* 0x3B */
-            "application/wml+xml",                        /* 0x3C */
-            "text/css",                                   /* 0x3D */
-            "application/vnd.wap.mms-message",            /* 0x3E */
-            "application/vnd.wap.rollover-certificate",   /* 0x3F */
-            "application/vnd.wap.locc+wbxml",             /* 0x40 */
-            "application/vnd.wap.loc+xml",                /* 0x41 */
-            "application/vnd.syncml.dm+wbxml",            /* 0x42 */
-            "application/vnd.syncml.dm+xml",              /* 0x43 */
-            "application/vnd.syncml.notification",        /* 0x44 */
-            "application/vnd.wap.xhtml+xml",              /* 0x45 */
-            "application/vnd.wv.csp.cir",                 /* 0x46 */
-            "application/vnd.oma.dd+xml",                 /* 0x47 */
-            "application/vnd.oma.drm.message",            /* 0x48 */
-            "application/vnd.oma.drm.content",            /* 0x49 */
-            "application/vnd.oma.drm.rights+xml",         /* 0x4A */
-            "application/vnd.oma.drm.rights+wbxml",       /* 0x4B */
-            "application/vnd.wv.csp+xml",                 /* 0x4C */
-            "application/vnd.wv.csp+wbxml",               /* 0x4D */
-            "application/vnd.syncml.ds.notification",     /* 0x4E */
-            "audio/*",                                    /* 0x4F */
-            "video/*",                                    /* 0x50 */
-            "application/vnd.oma.dd2+xml",                /* 0x51 */
-            "application/mikey"                           /* 0x52 */
-    };
-}
diff --git a/src/com/android/messaging/mmslib/pdu/PduHeaders.java b/src/com/android/messaging/mmslib/pdu/PduHeaders.java
deleted file mode 100644
index 96d18ee..0000000
--- a/src/com/android/messaging/mmslib/pdu/PduHeaders.java
+++ /dev/null
@@ -1,743 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import android.util.SparseArray;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-import java.util.ArrayList;
-
-public class PduHeaders {
-    /**
-     * All pdu header fields.
-     */
-    public static final int BCC                             = 0x81;
-    public static final int CC                              = 0x82;
-    public static final int CONTENT_LOCATION                = 0x83;
-    public static final int CONTENT_TYPE                    = 0x84;
-    public static final int DATE                            = 0x85;
-    public static final int DELIVERY_REPORT                 = 0x86;
-    public static final int DELIVERY_TIME                   = 0x87;
-    public static final int EXPIRY                          = 0x88;
-    public static final int FROM                            = 0x89;
-    public static final int MESSAGE_CLASS                   = 0x8A;
-    public static final int MESSAGE_ID                      = 0x8B;
-    public static final int MESSAGE_TYPE                    = 0x8C;
-    public static final int MMS_VERSION                     = 0x8D;
-    public static final int MESSAGE_SIZE                    = 0x8E;
-    public static final int PRIORITY                        = 0x8F;
-
-    public static final int READ_REPLY                      = 0x90;
-    public static final int READ_REPORT                     = 0x90;
-    public static final int REPORT_ALLOWED                  = 0x91;
-    public static final int RESPONSE_STATUS                 = 0x92;
-    public static final int RESPONSE_TEXT                   = 0x93;
-    public static final int SENDER_VISIBILITY               = 0x94;
-    public static final int STATUS                          = 0x95;
-    public static final int SUBJECT                         = 0x96;
-    public static final int TO                              = 0x97;
-    public static final int TRANSACTION_ID                  = 0x98;
-    public static final int RETRIEVE_STATUS                 = 0x99;
-    public static final int RETRIEVE_TEXT                   = 0x9A;
-    public static final int READ_STATUS                     = 0x9B;
-    public static final int REPLY_CHARGING                  = 0x9C;
-    public static final int REPLY_CHARGING_DEADLINE         = 0x9D;
-    public static final int REPLY_CHARGING_ID               = 0x9E;
-    public static final int REPLY_CHARGING_SIZE             = 0x9F;
-
-    public static final int PREVIOUSLY_SENT_BY              = 0xA0;
-    public static final int PREVIOUSLY_SENT_DATE            = 0xA1;
-    public static final int STORE                           = 0xA2;
-    public static final int MM_STATE                        = 0xA3;
-    public static final int MM_FLAGS                        = 0xA4;
-    public static final int STORE_STATUS                    = 0xA5;
-    public static final int STORE_STATUS_TEXT               = 0xA6;
-    public static final int STORED                          = 0xA7;
-    public static final int ATTRIBUTES                      = 0xA8;
-    public static final int TOTALS                          = 0xA9;
-    public static final int MBOX_TOTALS                     = 0xAA;
-    public static final int QUOTAS                          = 0xAB;
-    public static final int MBOX_QUOTAS                     = 0xAC;
-    public static final int MESSAGE_COUNT                   = 0xAD;
-    public static final int CONTENT                         = 0xAE;
-    public static final int START                           = 0xAF;
-
-    public static final int ADDITIONAL_HEADERS              = 0xB0;
-    public static final int DISTRIBUTION_INDICATOR          = 0xB1;
-    public static final int ELEMENT_DESCRIPTOR              = 0xB2;
-    public static final int LIMIT                           = 0xB3;
-    public static final int RECOMMENDED_RETRIEVAL_MODE      = 0xB4;
-    public static final int RECOMMENDED_RETRIEVAL_MODE_TEXT = 0xB5;
-    public static final int STATUS_TEXT                     = 0xB6;
-    public static final int APPLIC_ID                       = 0xB7;
-    public static final int REPLY_APPLIC_ID                 = 0xB8;
-    public static final int AUX_APPLIC_ID                   = 0xB9;
-    public static final int CONTENT_CLASS                   = 0xBA;
-    public static final int DRM_CONTENT                     = 0xBB;
-    public static final int ADAPTATION_ALLOWED              = 0xBC;
-    public static final int REPLACE_ID                      = 0xBD;
-    public static final int CANCEL_ID                       = 0xBE;
-    public static final int CANCEL_STATUS                   = 0xBF;
-
-    /**
-     * X-Mms-Message-Type field types.
-     */
-    public static final int MESSAGE_TYPE_SEND_REQ           = 0x80;
-    public static final int MESSAGE_TYPE_SEND_CONF          = 0x81;
-    public static final int MESSAGE_TYPE_NOTIFICATION_IND   = 0x82;
-    public static final int MESSAGE_TYPE_NOTIFYRESP_IND     = 0x83;
-    public static final int MESSAGE_TYPE_RETRIEVE_CONF      = 0x84;
-    public static final int MESSAGE_TYPE_ACKNOWLEDGE_IND    = 0x85;
-    public static final int MESSAGE_TYPE_DELIVERY_IND       = 0x86;
-    public static final int MESSAGE_TYPE_READ_REC_IND       = 0x87;
-    public static final int MESSAGE_TYPE_READ_ORIG_IND      = 0x88;
-    public static final int MESSAGE_TYPE_FORWARD_REQ        = 0x89;
-    public static final int MESSAGE_TYPE_FORWARD_CONF       = 0x8A;
-    public static final int MESSAGE_TYPE_MBOX_STORE_REQ     = 0x8B;
-    public static final int MESSAGE_TYPE_MBOX_STORE_CONF    = 0x8C;
-    public static final int MESSAGE_TYPE_MBOX_VIEW_REQ      = 0x8D;
-    public static final int MESSAGE_TYPE_MBOX_VIEW_CONF     = 0x8E;
-    public static final int MESSAGE_TYPE_MBOX_UPLOAD_REQ    = 0x8F;
-    public static final int MESSAGE_TYPE_MBOX_UPLOAD_CONF   = 0x90;
-    public static final int MESSAGE_TYPE_MBOX_DELETE_REQ    = 0x91;
-    public static final int MESSAGE_TYPE_MBOX_DELETE_CONF   = 0x92;
-    public static final int MESSAGE_TYPE_MBOX_DESCR         = 0x93;
-    public static final int MESSAGE_TYPE_DELETE_REQ         = 0x94;
-    public static final int MESSAGE_TYPE_DELETE_CONF        = 0x95;
-    public static final int MESSAGE_TYPE_CANCEL_REQ         = 0x96;
-    public static final int MESSAGE_TYPE_CANCEL_CONF        = 0x97;
-
-    /**
-     * X-Mms-Delivery-Report |
-     * X-Mms-Read-Report |
-     * X-Mms-Report-Allowed |
-     * X-Mms-Sender-Visibility |
-     * X-Mms-Store |
-     * X-Mms-Stored |
-     * X-Mms-Totals |
-     * X-Mms-Quotas |
-     * X-Mms-Distribution-Indicator |
-     * X-Mms-DRM-Content |
-     * X-Mms-Adaptation-Allowed |
-     * field types.
-     */
-    public static final int VALUE_YES                       = 0x80;
-    public static final int VALUE_NO                        = 0x81;
-
-    /**
-     * Delivery-Time |
-     * Expiry and Reply-Charging-Deadline |
-     * field type components.
-     */
-    public static final int VALUE_ABSOLUTE_TOKEN            = 0x80;
-    public static final int VALUE_RELATIVE_TOKEN            = 0x81;
-
-    /**
-     * X-Mms-MMS-Version field types.
-     */
-    public static final int MMS_VERSION_1_3                 = ((1 << 4) | 3);
-    public static final int MMS_VERSION_1_2                 = ((1 << 4) | 2);
-    public static final int MMS_VERSION_1_1                 = ((1 << 4) | 1);
-    public static final int MMS_VERSION_1_0                 = ((1 << 4) | 0);
-
-    // Current version is 1.2.
-    public static final int CURRENT_MMS_VERSION             = MMS_VERSION_1_2;
-
-    /**
-     * From field type components.
-     */
-    public static final int FROM_ADDRESS_PRESENT_TOKEN      = 0x80;
-    public static final int FROM_INSERT_ADDRESS_TOKEN       = 0x81;
-
-    public static final String FROM_ADDRESS_PRESENT_TOKEN_STR = "address-present-token";
-
-    public static final String FROM_INSERT_ADDRESS_TOKEN_STR = "insert-address-token";
-
-    /**
-     * X-Mms-Status Field.
-     */
-    public static final int STATUS_EXPIRED                  = 0x80;
-    public static final int STATUS_RETRIEVED                = 0x81;
-    public static final int STATUS_REJECTED                 = 0x82;
-    public static final int STATUS_DEFERRED                 = 0x83;
-    public static final int STATUS_UNRECOGNIZED             = 0x84;
-    public static final int STATUS_INDETERMINATE            = 0x85;
-    public static final int STATUS_FORWARDED                = 0x86;
-    public static final int STATUS_UNREACHABLE              = 0x87;
-
-    /**
-     * MM-Flags field type components.
-     */
-    public static final int MM_FLAGS_ADD_TOKEN              = 0x80;
-    public static final int MM_FLAGS_REMOVE_TOKEN           = 0x81;
-    public static final int MM_FLAGS_FILTER_TOKEN           = 0x82;
-
-    /**
-     * X-Mms-Message-Class field types.
-     */
-    public static final int MESSAGE_CLASS_PERSONAL          = 0x80;
-    public static final int MESSAGE_CLASS_ADVERTISEMENT     = 0x81;
-    public static final int MESSAGE_CLASS_INFORMATIONAL     = 0x82;
-    public static final int MESSAGE_CLASS_AUTO              = 0x83;
-
-    public static final String MESSAGE_CLASS_PERSONAL_STR = "personal";
-
-    public static final String MESSAGE_CLASS_ADVERTISEMENT_STR = "advertisement";
-
-    public static final String MESSAGE_CLASS_INFORMATIONAL_STR = "informational";
-
-    public static final String MESSAGE_CLASS_AUTO_STR = "auto";
-
-    /**
-     * X-Mms-Priority field types.
-     */
-    public static final int PRIORITY_LOW                    = 0x80;
-    public static final int PRIORITY_NORMAL                 = 0x81;
-    public static final int PRIORITY_HIGH                   = 0x82;
-
-    /**
-     * X-Mms-Response-Status field types.
-     */
-    public static final int RESPONSE_STATUS_OK                   = 0x80;
-    public static final int RESPONSE_STATUS_ERROR_UNSPECIFIED    = 0x81;
-    public static final int RESPONSE_STATUS_ERROR_SERVICE_DENIED = 0x82;
-
-    public static final int RESPONSE_STATUS_ERROR_MESSAGE_FORMAT_CORRUPT     = 0x83;
-    public static final int RESPONSE_STATUS_ERROR_SENDING_ADDRESS_UNRESOLVED = 0x84;
-
-    public static final int RESPONSE_STATUS_ERROR_MESSAGE_NOT_FOUND    = 0x85;
-    public static final int RESPONSE_STATUS_ERROR_NETWORK_PROBLEM      = 0x86;
-    public static final int RESPONSE_STATUS_ERROR_CONTENT_NOT_ACCEPTED = 0x87;
-    public static final int RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE  = 0x88;
-    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE    = 0xC0;
-
-    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_SENDNG_ADDRESS_UNRESOLVED = 0xC1;
-    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND         = 0xC2;
-    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM           = 0xC3;
-    public static final int RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS           = 0xC4;
-
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_FAILURE
-            = 0xE0;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_SERVICE_DENIED
-            = 0xE1;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT
-            = 0xE2;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_SENDING_ADDRESS_UNRESOLVED
-            = 0xE3;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND
-            = 0xE4;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_CONTENT_NOT_ACCEPTED
-            = 0xE5;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_LIMITATIONS_NOT_MET
-            = 0xE6;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_REQUEST_NOT_ACCEPTED
-            = 0xE7;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_FORWARDING_DENIED
-            = 0xE8;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_NOT_SUPPORTED
-            = 0xE9;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_ADDRESS_HIDING_NOT_SUPPORTED
-            = 0xEA;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID
-            = 0xEB;
-    public static final int RESPONSE_STATUS_ERROR_PERMANENT_END
-            = 0xFF;
-
-    /**
-     *  X-Mms-Retrieve-Status field types.
-     */
-    public static final int RETRIEVE_STATUS_OK                                  = 0x80;
-    public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE             = 0xC0;
-    public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND   = 0xC1;
-    public static final int RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM     = 0xC2;
-    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE             = 0xE0;
-    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_SERVICE_DENIED      = 0xE1;
-    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND   = 0xE2;
-    public static final int RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED = 0xE3;
-    public static final int RETRIEVE_STATUS_ERROR_END                           = 0xFF;
-
-    /**
-     * X-Mms-Sender-Visibility field types.
-     */
-    public static final int SENDER_VISIBILITY_HIDE          = 0x80;
-    public static final int SENDER_VISIBILITY_SHOW          = 0x81;
-
-    /**
-     * X-Mms-Read-Status field types.
-     */
-    public static final int READ_STATUS_READ                        = 0x80;
-    public static final int READ_STATUS__DELETED_WITHOUT_BEING_READ = 0x81;
-
-    /**
-     * X-Mms-Cancel-Status field types.
-     */
-    public static final int CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED = 0x80;
-    public static final int CANCEL_STATUS_REQUEST_CORRUPTED             = 0x81;
-
-    /**
-     * X-Mms-Reply-Charging field types.
-     */
-    public static final int REPLY_CHARGING_REQUESTED           = 0x80;
-    public static final int REPLY_CHARGING_REQUESTED_TEXT_ONLY = 0x81;
-    public static final int REPLY_CHARGING_ACCEPTED            = 0x82;
-    public static final int REPLY_CHARGING_ACCEPTED_TEXT_ONLY  = 0x83;
-
-    /**
-     * X-Mms-MM-State field types.
-     */
-    public static final int MM_STATE_DRAFT                  = 0x80;
-    public static final int MM_STATE_SENT                   = 0x81;
-    public static final int MM_STATE_NEW                    = 0x82;
-    public static final int MM_STATE_RETRIEVED              = 0x83;
-    public static final int MM_STATE_FORWARDED              = 0x84;
-
-    /**
-     * X-Mms-Recommended-Retrieval-Mode field types.
-     */
-    public static final int RECOMMENDED_RETRIEVAL_MODE_MANUAL = 0x80;
-
-    /**
-     * X-Mms-Content-Class field types.
-     */
-    public static final int CONTENT_CLASS_TEXT              = 0x80;
-    public static final int CONTENT_CLASS_IMAGE_BASIC       = 0x81;
-    public static final int CONTENT_CLASS_IMAGE_RICH        = 0x82;
-    public static final int CONTENT_CLASS_VIDEO_BASIC       = 0x83;
-    public static final int CONTENT_CLASS_VIDEO_RICH        = 0x84;
-    public static final int CONTENT_CLASS_MEGAPIXEL         = 0x85;
-    public static final int CONTENT_CLASS_CONTENT_BASIC     = 0x86;
-    public static final int CONTENT_CLASS_CONTENT_RICH      = 0x87;
-
-    /**
-     * X-Mms-Store-Status field types.
-     */
-    public static final int STORE_STATUS_SUCCESS                                = 0x80;
-    public static final int STORE_STATUS_ERROR_TRANSIENT_FAILURE                = 0xC0;
-    public static final int STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM        = 0xC1;
-    public static final int STORE_STATUS_ERROR_PERMANENT_FAILURE                = 0xE0;
-    public static final int STORE_STATUS_ERROR_PERMANENT_SERVICE_DENIED         = 0xE1;
-    public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT = 0xE2;
-    public static final int STORE_STATUS_ERROR_PERMANENT_MESSAGE_NOT_FOUND      = 0xE3;
-    public static final int STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL             = 0xE4;
-    public static final int STORE_STATUS_ERROR_END                              = 0xFF;
-
-    /**
-     * The map contains the value of all headers.
-     */
-    private SparseArray<Object> mHeaderMap = null;
-
-    /**
-     * Constructor of PduHeaders.
-     */
-    public PduHeaders() {
-        mHeaderMap = new SparseArray<Object>();
-    }
-
-    /**
-     * Get octet value by header field.
-     *
-     * @param field the field
-     * @return the octet value of the pdu header
-     * with specified header field. Return 0 if
-     * the value is not set.
-     */
-    protected int getOctet(int field) {
-        Integer octet = (Integer) mHeaderMap.get(field);
-        if (null == octet) {
-            return 0;
-        }
-
-        return octet;
-    }
-
-    /**
-     * Set octet value to pdu header by header field.
-     *
-     * @param value the value
-     * @param field the field
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    protected void setOctet(int value, int field)
-            throws InvalidHeaderValueException {
-        /**
-         * Check whether this field can be set for specific
-         * header and check validity of the field.
-         */
-        switch (field) {
-            case REPORT_ALLOWED:
-            case ADAPTATION_ALLOWED:
-            case DELIVERY_REPORT:
-            case DRM_CONTENT:
-            case DISTRIBUTION_INDICATOR:
-            case QUOTAS:
-            case READ_REPORT:
-            case STORE:
-            case STORED:
-            case TOTALS:
-            case SENDER_VISIBILITY:
-                if ((VALUE_YES != value) && (VALUE_NO != value)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case READ_STATUS:
-                if ((READ_STATUS_READ != value) &&
-                        (READ_STATUS__DELETED_WITHOUT_BEING_READ != value)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case CANCEL_STATUS:
-                if ((CANCEL_STATUS_REQUEST_SUCCESSFULLY_RECEIVED != value) &&
-                        (CANCEL_STATUS_REQUEST_CORRUPTED != value)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case PRIORITY:
-                if ((value < PRIORITY_LOW) || (value > PRIORITY_HIGH)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case STATUS:
-                if ((value < STATUS_EXPIRED) || (value > STATUS_UNREACHABLE)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case REPLY_CHARGING:
-                if ((value < REPLY_CHARGING_REQUESTED)
-                        || (value > REPLY_CHARGING_ACCEPTED_TEXT_ONLY)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case MM_STATE:
-                if ((value < MM_STATE_DRAFT) || (value > MM_STATE_FORWARDED)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case RECOMMENDED_RETRIEVAL_MODE:
-                if (RECOMMENDED_RETRIEVAL_MODE_MANUAL != value) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case CONTENT_CLASS:
-                if ((value < CONTENT_CLASS_TEXT)
-                        || (value > CONTENT_CLASS_CONTENT_RICH)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            case RETRIEVE_STATUS:
-                // According to oma-ts-mms-enc-v1_3, section 7.3.50, we modify the invalid value.
-                if ((value > RETRIEVE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM) &&
-                        (value < RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE)) {
-                    value = RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE;
-                } else if ((value > RETRIEVE_STATUS_ERROR_PERMANENT_CONTENT_UNSUPPORTED) &&
-                        (value <= RETRIEVE_STATUS_ERROR_END)) {
-                    value = RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE;
-                } else if ((value < RETRIEVE_STATUS_OK) ||
-                        ((value > RETRIEVE_STATUS_OK) &&
-                                (value < RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
-                        (value > RETRIEVE_STATUS_ERROR_END)) {
-                    value = RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE;
-                }
-                break;
-            case STORE_STATUS:
-                // According to oma-ts-mms-enc-v1_3, section 7.3.58, we modify the invalid value.
-                if ((value > STORE_STATUS_ERROR_TRANSIENT_NETWORK_PROBLEM) &&
-                        (value < STORE_STATUS_ERROR_PERMANENT_FAILURE)) {
-                    value = STORE_STATUS_ERROR_TRANSIENT_FAILURE;
-                } else if ((value > STORE_STATUS_ERROR_PERMANENT_MMBOX_FULL) &&
-                        (value <= STORE_STATUS_ERROR_END)) {
-                    value = STORE_STATUS_ERROR_PERMANENT_FAILURE;
-                } else if ((value < STORE_STATUS_SUCCESS) ||
-                        ((value > STORE_STATUS_SUCCESS) &&
-                                (value < STORE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
-                        (value > STORE_STATUS_ERROR_END)) {
-                    value = STORE_STATUS_ERROR_PERMANENT_FAILURE;
-                }
-                break;
-            case RESPONSE_STATUS:
-                // According to oma-ts-mms-enc-v1_3, section 7.3.48, we modify the invalid value.
-                if ((value > RESPONSE_STATUS_ERROR_TRANSIENT_PARTIAL_SUCCESS) &&
-                        (value < RESPONSE_STATUS_ERROR_PERMANENT_FAILURE)) {
-                    value = RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE;
-                } else if (((value > RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID) &&
-                        (value <= RESPONSE_STATUS_ERROR_PERMANENT_END)) ||
-                        (value < RESPONSE_STATUS_OK) ||
-                        ((value > RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE) &&
-                                (value < RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE)) ||
-                        (value > RESPONSE_STATUS_ERROR_PERMANENT_END)) {
-                    value = RESPONSE_STATUS_ERROR_PERMANENT_FAILURE;
-                }
-                break;
-            case MMS_VERSION:
-                if ((value < MMS_VERSION_1_0) || (value > MMS_VERSION_1_3)) {
-                    value = CURRENT_MMS_VERSION; // Current version is the default value.
-                }
-                break;
-            case MESSAGE_TYPE:
-                if ((value < MESSAGE_TYPE_SEND_REQ) || (value > MESSAGE_TYPE_CANCEL_CONF)) {
-                    // Invalid value.
-                    throw new InvalidHeaderValueException("Invalid Octet value!");
-                }
-                break;
-            default:
-                // This header value should not be Octect.
-                throw new RuntimeException("Invalid header field!");
-        }
-        mHeaderMap.put(field, value);
-    }
-
-    /**
-     * Get TextString value by header field.
-     *
-     * @param field the field
-     * @return the TextString value of the pdu header
-     * with specified header field
-     */
-    protected byte[] getTextString(int field) {
-        return (byte[]) mHeaderMap.get(field);
-    }
-
-    /**
-     * Set TextString value to pdu header by header field.
-     *
-     * @param value the value
-     * @param field the field
-     * @return the TextString value of the pdu header
-     * with specified header field
-     * @throws NullPointerException if the value is null.
-     */
-    protected void setTextString(byte[] value, int field) {
-        /**
-         * Check whether this field can be set for specific
-         * header and check validity of the field.
-         */
-        if (null == value) {
-            throw new NullPointerException();
-        }
-
-        switch (field) {
-            case TRANSACTION_ID:
-            case REPLY_CHARGING_ID:
-            case AUX_APPLIC_ID:
-            case APPLIC_ID:
-            case REPLY_APPLIC_ID:
-            case MESSAGE_ID:
-            case REPLACE_ID:
-            case CANCEL_ID:
-            case CONTENT_LOCATION:
-            case MESSAGE_CLASS:
-            case CONTENT_TYPE:
-                break;
-            default:
-                // This header value should not be Text-String.
-                throw new RuntimeException("Invalid header field!");
-        }
-        mHeaderMap.put(field, value);
-    }
-
-    /**
-     * Get EncodedStringValue value by header field.
-     *
-     * @param field the field
-     * @return the EncodedStringValue value of the pdu header
-     * with specified header field
-     */
-    protected EncodedStringValue getEncodedStringValue(int field) {
-        return (EncodedStringValue) mHeaderMap.get(field);
-    }
-
-    /**
-     * Get TO, CC or BCC header value.
-     *
-     * @param field the field
-     * @return the EncodeStringValue array of the pdu header
-     * with specified header field
-     */
-    protected EncodedStringValue[] getEncodedStringValues(int field) {
-        ArrayList<EncodedStringValue> list =
-                (ArrayList<EncodedStringValue>) mHeaderMap.get(field);
-        if (null == list) {
-            return null;
-        }
-        EncodedStringValue[] values = new EncodedStringValue[list.size()];
-        return list.toArray(values);
-    }
-
-    /**
-     * Set EncodedStringValue value to pdu header by header field.
-     *
-     * @param value the value
-     * @param field the field
-     * @return the EncodedStringValue value of the pdu header
-     * with specified header field
-     * @throws NullPointerException if the value is null.
-     */
-    protected void setEncodedStringValue(EncodedStringValue value, int field) {
-        /**
-         * Check whether this field can be set for specific
-         * header and check validity of the field.
-         */
-        if (null == value) {
-            throw new NullPointerException();
-        }
-
-        switch (field) {
-            case SUBJECT:
-            case RECOMMENDED_RETRIEVAL_MODE_TEXT:
-            case RETRIEVE_TEXT:
-            case STATUS_TEXT:
-            case STORE_STATUS_TEXT:
-            case RESPONSE_TEXT:
-            case FROM:
-            case PREVIOUSLY_SENT_BY:
-            case MM_FLAGS:
-                break;
-            default:
-                // This header value should not be Encoded-String-Value.
-                throw new RuntimeException("Invalid header field!");
-        }
-
-        mHeaderMap.put(field, value);
-    }
-
-    /**
-     * Set TO, CC or BCC header value.
-     *
-     * @param value the value
-     * @param field the field
-     * @return the EncodedStringValue value array of the pdu header
-     * with specified header field
-     * @throws NullPointerException if the value is null.
-     */
-    protected void setEncodedStringValues(EncodedStringValue[] value, int field) {
-        /**
-         * Check whether this field can be set for specific
-         * header and check validity of the field.
-         */
-        if (null == value) {
-            throw new NullPointerException();
-        }
-
-        switch (field) {
-            case BCC:
-            case CC:
-            case TO:
-                break;
-            default:
-                // This header value should not be Encoded-String-Value.
-                throw new RuntimeException("Invalid header field!");
-        }
-
-        ArrayList<EncodedStringValue> list = new ArrayList<EncodedStringValue>();
-        for (int i = 0; i < value.length; i++) {
-            list.add(value[i]);
-        }
-        mHeaderMap.put(field, list);
-    }
-
-    /**
-     * Append one EncodedStringValue to another.
-     *
-     * @param value the EncodedStringValue to append
-     * @param field the field
-     * @throws NullPointerException if the value is null.
-     */
-    protected void appendEncodedStringValue(EncodedStringValue value,
-            int field) {
-        if (null == value) {
-            throw new NullPointerException();
-        }
-
-        switch (field) {
-            case BCC:
-            case CC:
-            case TO:
-                break;
-            default:
-                throw new RuntimeException("Invalid header field!");
-        }
-
-        ArrayList<EncodedStringValue> list =
-                (ArrayList<EncodedStringValue>) mHeaderMap.get(field);
-        if (null == list) {
-            list = new ArrayList<EncodedStringValue>();
-        }
-        list.add(value);
-        mHeaderMap.put(field, list);
-    }
-
-    /**
-     * Get LongInteger value by header field.
-     *
-     * @param field the field
-     * @return the LongInteger value of the pdu header
-     * with specified header field. if return -1, the
-     * field is not existed in pdu header.
-     */
-    protected long getLongInteger(int field) {
-        Long longInteger = (Long) mHeaderMap.get(field);
-        if (null == longInteger) {
-            return -1;
-        }
-
-        return longInteger.longValue();
-    }
-
-    /**
-     * Set LongInteger value to pdu header by header field.
-     *
-     * @param value the value
-     * @param field the field
-     */
-    protected void setLongInteger(long value, int field) {
-        /**
-         * Check whether this field can be set for specific
-         * header and check validity of the field.
-         */
-        switch (field) {
-            case DATE:
-            case REPLY_CHARGING_SIZE:
-            case MESSAGE_SIZE:
-            case MESSAGE_COUNT:
-            case START:
-            case LIMIT:
-            case DELIVERY_TIME:
-            case EXPIRY:
-            case REPLY_CHARGING_DEADLINE:
-            case PREVIOUSLY_SENT_DATE:
-                break;
-            default:
-                // This header value should not be LongInteger.
-                throw new RuntimeException("Invalid header field!");
-        }
-        mHeaderMap.put(field, value);
-    }
-
-    public boolean hasHeader(int field) {
-        return mHeaderMap.get(field, null) != null;
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/PduParser.java b/src/com/android/messaging/mmslib/pdu/PduParser.java
deleted file mode 100755
index e392fb5..0000000
--- a/src/com/android/messaging/mmslib/pdu/PduParser.java
+++ /dev/null
@@ -1,2044 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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.android.messaging.mmslib.pdu;
-
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-import com.android.messaging.util.ContentType;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.Arrays;
-
-public class PduParser {
-    /**
-     * The log tag.
-     */
-    private static final String LOG_TAG = "PduParser";
-
-    private static final boolean LOCAL_LOGV = false;
-
-    /**
-     * The next are WAP values defined in WSP specification.
-     */
-    private static final int QUOTE = 127;
-
-    private static final int LENGTH_QUOTE = 31;
-
-    private static final int TEXT_MIN = 32;
-
-    private static final int TEXT_MAX = 127;
-
-    private static final int SHORT_INTEGER_MAX = 127;
-
-    private static final int SHORT_LENGTH_MAX = 30;
-
-    private static final int LONG_INTEGER_LENGTH_MAX = 8;
-
-    private static final int QUOTED_STRING_FLAG = 34;
-
-    private static final int END_STRING_FLAG = 0x00;
-
-    //The next two are used by the interface "parseWapString" to
-    //distinguish Text-String and Quoted-String.
-    private static final int TYPE_TEXT_STRING = 0;
-
-    private static final int TYPE_QUOTED_STRING = 1;
-
-    private static final int TYPE_TOKEN_STRING = 2;
-
-    /**
-     * Specify the part position.
-     */
-    private static final int THE_FIRST_PART = 0;
-
-    private static final int THE_LAST_PART = 1;
-
-    /**
-     * The pdu data.
-     */
-    private ByteArrayInputStream mPduDataStream = null;
-
-    /**
-     * Store pdu headers
-     */
-    private PduHeaders mHeaders = null;
-
-    /**
-     * Store pdu parts.
-     */
-    private PduBody mBody = null;
-
-    /**
-     * Store the "type" parameter in "Content-Type" header field.
-     */
-    private static byte[] mTypeParam = null;
-
-    /**
-     * Store the "start" parameter in "Content-Type" header field.
-     */
-    private static byte[] mStartParam = null;
-
-    /**
-     * Whether to parse content-disposition part header
-     */
-    private final boolean mParseContentDisposition;
-
-    /**
-     * Constructor.
-     *
-     * @param pduDataStream pdu data to be parsed
-     * @param parseContentDisposition whether to parse the Content-Disposition part header
-     */
-    public PduParser(byte[] pduDataStream, boolean parseContentDisposition) {
-        mPduDataStream = new ByteArrayInputStream(pduDataStream);
-        mParseContentDisposition = parseContentDisposition;
-    }
-
-    /**
-     * Parse the pdu.
-     *
-     * @return the pdu structure if parsing successfully.
-     * null if parsing error happened or mandatory fields are not set.
-     */
-    public GenericPdu parse() {
-        if (mPduDataStream == null) {
-            return null;
-        }
-
-        /* parse headers */
-        mHeaders = parseHeaders(mPduDataStream);
-        if (null == mHeaders) {
-            // Parse headers failed.
-            return null;
-        }
-
-        /* get the message type */
-        int messageType = mHeaders.getOctet(PduHeaders.MESSAGE_TYPE);
-
-        /* check mandatory header fields */
-        if (false == checkMandatoryHeader(mHeaders)) {
-            log("check mandatory headers failed!");
-            return null;
-        }
-        /*
-         * Get retrieve status. If the header is not there, assuming it is OK status.
-         * Some carriers may choose to not send this header.
-         */
-        int retrieveStatus = mHeaders.hasHeader(PduHeaders.RETRIEVE_STATUS) ?
-                mHeaders.getOctet(PduHeaders.RETRIEVE_STATUS) : PduHeaders.RETRIEVE_STATUS_OK;
-
-        if ((PduHeaders.MESSAGE_TYPE_SEND_REQ == messageType) ||
-                (PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF == messageType &&
-                retrieveStatus == PduHeaders.RETRIEVE_STATUS_OK)) {
-            /* need to parse the parts */
-            mBody = parseParts(mPduDataStream);
-            if (null == mBody) {
-                // Parse parts failed.
-                return null;
-            }
-        }
-
-        switch (messageType) {
-            case PduHeaders.MESSAGE_TYPE_SEND_REQ:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_SEND_REQ");
-                }
-                SendReq sendReq = new SendReq(mHeaders, mBody);
-                return sendReq;
-            case PduHeaders.MESSAGE_TYPE_SEND_CONF:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_SEND_CONF");
-                }
-                SendConf sendConf = new SendConf(mHeaders);
-                return sendConf;
-            case PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_NOTIFICATION_IND");
-                }
-                NotificationInd notificationInd =
-                        new NotificationInd(mHeaders);
-                return notificationInd;
-            case PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_NOTIFYRESP_IND");
-                }
-                NotifyRespInd notifyRespInd =
-                        new NotifyRespInd(mHeaders);
-                return notifyRespInd;
-            case PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_RETRIEVE_CONF");
-                }
-                RetrieveConf retrieveConf =
-                        new RetrieveConf(mHeaders, mBody);
-                if (retrieveStatus != PduHeaders.RETRIEVE_STATUS_OK) {
-                    // For failure only no need to check content type
-                    return retrieveConf;
-                }
-                byte[] contentType = retrieveConf.getContentType();
-                if (null == contentType) {
-                    return null;
-                }
-                String ctTypeStr = new String(contentType);
-                if (ctTypeStr.equals(ContentType.MMS_MULTIPART_MIXED)
-                        || ctTypeStr.equals(ContentType.MMS_MULTIPART_RELATED)
-                        || ctTypeStr.equals(ContentType.MMS_MULTIPART_ALTERNATIVE)) {
-                    // The MMS content type must be "application/vnd.wap.multipart.mixed"
-                    // or "application/vnd.wap.multipart.related"
-                    // or "application/vnd.wap.multipart.alternative"
-                    return retrieveConf;
-                } else if (ctTypeStr.equals(ContentType.MMS_MULTIPART_ALTERNATIVE)) {
-                    // "application/vnd.wap.multipart.alternative"
-                    // should take only the first part.
-                    PduPart firstPart = mBody.getPart(0);
-                    mBody.removeAll();
-                    mBody.addPart(0, firstPart);
-                    return retrieveConf;
-                }
-                return null;
-            case PduHeaders.MESSAGE_TYPE_DELIVERY_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_DELIVERY_IND");
-                }
-                DeliveryInd deliveryInd =
-                        new DeliveryInd(mHeaders);
-                return deliveryInd;
-            case PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_ACKNOWLEDGE_IND");
-                }
-                AcknowledgeInd acknowledgeInd =
-                        new AcknowledgeInd(mHeaders);
-                return acknowledgeInd;
-            case PduHeaders.MESSAGE_TYPE_READ_ORIG_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_READ_ORIG_IND");
-                }
-                ReadOrigInd readOrigInd =
-                        new ReadOrigInd(mHeaders);
-                return readOrigInd;
-            case PduHeaders.MESSAGE_TYPE_READ_REC_IND:
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "parse: MESSAGE_TYPE_READ_REC_IND");
-                }
-                ReadRecInd readRecInd =
-                        new ReadRecInd(mHeaders);
-                return readRecInd;
-            default:
-                log("Parser doesn't support this message type in this version!");
-                return null;
-        }
-    }
-
-    /**
-     * Parse pdu headers.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return headers in PduHeaders structure, null when parse fail
-     */
-    protected PduHeaders parseHeaders(ByteArrayInputStream pduDataStream) {
-        if (pduDataStream == null) {
-            return null;
-        }
-        boolean keepParsing = true;
-        PduHeaders headers = new PduHeaders();
-
-        while (keepParsing && (pduDataStream.available() > 0)) {
-            pduDataStream.mark(1);
-            int headerField = extractByteValue(pduDataStream);
-            /* parse custom text header */
-            if ((headerField >= TEXT_MIN) && (headerField <= TEXT_MAX)) {
-                pduDataStream.reset();
-                byte[] bVal = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "TextHeader: " + new String(bVal));
-                }
-                /* we should ignore it at the moment */
-                continue;
-            }
-            switch (headerField) {
-                case PduHeaders.MESSAGE_TYPE: {
-                    int messageType = extractByteValue(pduDataStream);
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: messageType: " + messageType +
-                                " (" + Integer.toHexString(headerField) + ")");
-                    }
-                    switch (messageType) {
-                        // We don't support these kind of messages now.
-                        case PduHeaders.MESSAGE_TYPE_FORWARD_REQ:
-                        case PduHeaders.MESSAGE_TYPE_FORWARD_CONF:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_STORE_REQ:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_STORE_CONF:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_VIEW_REQ:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_VIEW_CONF:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_UPLOAD_REQ:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_UPLOAD_CONF:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_DELETE_REQ:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_DELETE_CONF:
-                        case PduHeaders.MESSAGE_TYPE_MBOX_DESCR:
-                        case PduHeaders.MESSAGE_TYPE_DELETE_REQ:
-                        case PduHeaders.MESSAGE_TYPE_DELETE_CONF:
-                        case PduHeaders.MESSAGE_TYPE_CANCEL_REQ:
-                        case PduHeaders.MESSAGE_TYPE_CANCEL_CONF:
-                            return null;
-                    }
-                    try {
-                        headers.setOctet(messageType, headerField);
-                    } catch (InvalidHeaderValueException e) {
-                        log("Set invalid Octet value: " + messageType +
-                                " into the header filed: " + headerField);
-                        return null;
-                    } catch (RuntimeException e) {
-                        log(headerField + "is not Octet header field!");
-                        return null;
-                    }
-                    break;
-                }
-                /* Octect value */
-                case PduHeaders.REPORT_ALLOWED:
-                case PduHeaders.ADAPTATION_ALLOWED:
-                case PduHeaders.DELIVERY_REPORT:
-                case PduHeaders.DRM_CONTENT:
-                case PduHeaders.DISTRIBUTION_INDICATOR:
-                case PduHeaders.QUOTAS:
-                case PduHeaders.READ_REPORT:
-                case PduHeaders.STORE:
-                case PduHeaders.STORED:
-                case PduHeaders.TOTALS:
-                case PduHeaders.SENDER_VISIBILITY:
-                case PduHeaders.READ_STATUS:
-                case PduHeaders.CANCEL_STATUS:
-                case PduHeaders.PRIORITY:
-                case PduHeaders.STATUS:
-                case PduHeaders.REPLY_CHARGING:
-                case PduHeaders.MM_STATE:
-                case PduHeaders.RECOMMENDED_RETRIEVAL_MODE:
-                case PduHeaders.CONTENT_CLASS:
-                case PduHeaders.RETRIEVE_STATUS:
-                case PduHeaders.STORE_STATUS:
-                    /**
-                     * The following field has a different value when
-                     * used in the M-Mbox-Delete.conf and M-Delete.conf PDU.
-                     * For now we ignore this fact, since we do not support these PDUs
-                     */
-                case PduHeaders.RESPONSE_STATUS: {
-                    int value = extractByteValue(pduDataStream);
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                " (" + Integer.toHexString(headerField) + ") Octect value: " +
-                                value);
-                    }
-
-                    try {
-                        headers.setOctet(value, headerField);
-                    } catch (InvalidHeaderValueException e) {
-                        log("Set invalid Octet value: " + value +
-                                " into the header filed: " + headerField);
-                        return null;
-                    } catch (RuntimeException e) {
-                        log(headerField + "is not Octet header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                /* Long-Integer */
-                case PduHeaders.DATE:
-                case PduHeaders.REPLY_CHARGING_SIZE:
-                case PduHeaders.MESSAGE_SIZE: {
-                    try {
-                        long value = parseLongInteger(pduDataStream);
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                    " (" + Integer.toHexString(headerField) + ") longint value: " +
-                                    value);
-                        }
-                        headers.setLongInteger(value, headerField);
-                    } catch (RuntimeException e) {
-                        log(headerField + "is not Long-Integer header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                /* Integer-Value */
-                case PduHeaders.MESSAGE_COUNT:
-                case PduHeaders.START:
-                case PduHeaders.LIMIT: {
-                    try {
-                        long value = parseIntegerValue(pduDataStream);
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                    " (" + Integer.toHexString(headerField) + ") integer value: " +
-                                    value);
-                        }
-                        headers.setLongInteger(value, headerField);
-                    } catch (RuntimeException e) {
-                        log(headerField + "is not Long-Integer header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                /* Text-String */
-                case PduHeaders.TRANSACTION_ID:
-                case PduHeaders.REPLY_CHARGING_ID:
-                case PduHeaders.AUX_APPLIC_ID:
-                case PduHeaders.APPLIC_ID:
-                case PduHeaders.REPLY_APPLIC_ID:
-                    /**
-                     * The next three header fields are email addresses
-                     * as defined in RFC2822,
-                     * not including the characters "<" and ">"
-                     */
-                case PduHeaders.MESSAGE_ID:
-                case PduHeaders.REPLACE_ID:
-                case PduHeaders.CANCEL_ID:
-                    /**
-                     * The following field has a different value when
-                     * used in the M-Mbox-Delete.conf and M-Delete.conf PDU.
-                     * For now we ignore this fact, since we do not support these PDUs
-                     */
-                case PduHeaders.CONTENT_LOCATION: {
-                    byte[] value = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                    if (null != value) {
-                        try {
-                            if (LOCAL_LOGV) {
-                                Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                        " (" + Integer.toHexString(headerField) + ") string value: "
-                                        +
-                                        new String(value));
-                            }
-                            headers.setTextString(value, headerField);
-                        } catch (NullPointerException e) {
-                            log("null pointer error!");
-                        } catch (RuntimeException e) {
-                            log(headerField + "is not Text-String header field!");
-                            return null;
-                        }
-                    }
-                    break;
-                }
-
-                /* Encoded-string-value */
-                case PduHeaders.SUBJECT:
-                case PduHeaders.RECOMMENDED_RETRIEVAL_MODE_TEXT:
-                case PduHeaders.RETRIEVE_TEXT:
-                case PduHeaders.STATUS_TEXT:
-                case PduHeaders.STORE_STATUS_TEXT:
-                    /* the next one is not support
-                     * M-Mbox-Delete.conf and M-Delete.conf now */
-                case PduHeaders.RESPONSE_TEXT: {
-                    EncodedStringValue value =
-                            parseEncodedStringValue(pduDataStream);
-                    if (null != value) {
-                        try {
-                            if (LOCAL_LOGV) {
-                                Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                        " (" + Integer.toHexString(headerField)
-                                        + ") encoded string: " +
-                                        value.getString());
-                            }
-                            headers.setEncodedStringValue(value, headerField);
-                        } catch (NullPointerException e) {
-                            log("null pointer error!");
-                        } catch (RuntimeException e) {
-                            log(headerField + "is not Encoded-String-Value header field!");
-                            return null;
-                        }
-                    }
-                    break;
-                }
-
-                /* Addressing model */
-                case PduHeaders.BCC:
-                case PduHeaders.CC:
-                case PduHeaders.TO: {
-                    EncodedStringValue value =
-                            parseEncodedStringValue(pduDataStream);
-                    if (null != value) {
-                        byte[] address = value.getTextString();
-                        if (null != address) {
-                            String str = new String(address);
-                            if (LOCAL_LOGV) {
-                                Log.v(LOG_TAG, "parseHeaders: (to/cc/bcc) address: " + headerField
-                                        + " value: " + str);
-                            }
-                            int endIndex = str.indexOf("/");
-                            if (endIndex > 0) {
-                                str = str.substring(0, endIndex);
-                            }
-                            try {
-                                value.setTextString(str.getBytes());
-                            } catch (NullPointerException e) {
-                                log("null pointer error!");
-                                return null;
-                            }
-                        }
-
-                        try {
-                            headers.appendEncodedStringValue(value, headerField);
-                        } catch (NullPointerException e) {
-                            log("null pointer error!");
-                        } catch (RuntimeException e) {
-                            log(headerField + "is not Encoded-String-Value header field!");
-                            return null;
-                        }
-                    }
-                    break;
-                }
-
-                /* Value-length
-                 * (Absolute-token Date-value | Relative-token Delta-seconds-value) */
-                case PduHeaders.DELIVERY_TIME:
-                case PduHeaders.EXPIRY:
-                case PduHeaders.REPLY_CHARGING_DEADLINE: {
-                    /* parse Value-length */
-                    parseValueLength(pduDataStream);
-
-                    /* Absolute-token or Relative-token */
-                    int token = extractByteValue(pduDataStream);
-
-                    /* Date-value or Delta-seconds-value */
-                    long timeValue;
-                    try {
-                        timeValue = parseLongInteger(pduDataStream);
-                    } catch (RuntimeException e) {
-                        log(headerField + "is not Long-Integer header field!");
-                        return null;
-                    }
-                    if (PduHeaders.VALUE_RELATIVE_TOKEN == token) {
-                        /* need to convert the Delta-seconds-value
-                         * into Date-value */
-                        timeValue = System.currentTimeMillis() / 1000 + timeValue;
-                    }
-
-                    try {
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                    " (" + Integer.toHexString(headerField) + ") time value: " +
-                                    timeValue);
-                        }
-                        headers.setLongInteger(timeValue, headerField);
-                    } catch (RuntimeException e) {
-                        log(headerField + "is not Long-Integer header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                case PduHeaders.FROM: {
-                    /* From-value =
-                     * Value-length
-                     * (Address-present-token Encoded-string-value | Insert-address-token)
-                     */
-                    EncodedStringValue from = null;
-                    parseValueLength(pduDataStream); /* parse value-length */
-
-                    /* Address-present-token or Insert-address-token */
-                    int fromToken = extractByteValue(pduDataStream);
-
-                    /* Address-present-token or Insert-address-token */
-                    if (PduHeaders.FROM_ADDRESS_PRESENT_TOKEN == fromToken) {
-                        /* Encoded-string-value */
-                        from = parseEncodedStringValue(pduDataStream);
-                        if (null != from) {
-                            byte[] address = from.getTextString();
-                            if (null != address) {
-                                String str = new String(address);
-                                int endIndex = str.indexOf("/");
-                                if (endIndex > 0) {
-                                    str = str.substring(0, endIndex);
-                                }
-                                try {
-                                    from.setTextString(str.getBytes());
-                                } catch (NullPointerException e) {
-                                    log("null pointer error!");
-                                    return null;
-                                }
-                            }
-                        }
-                    } else {
-                        try {
-                            from = new EncodedStringValue(
-                                    PduHeaders.FROM_INSERT_ADDRESS_TOKEN_STR.getBytes());
-                        } catch (NullPointerException e) {
-                            log(headerField + "is not Encoded-String-Value header field!");
-                            return null;
-                        }
-                    }
-
-                    try {
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                    " (" + Integer.toHexString(headerField) + ") from address: " +
-                                    from.getString());
-                        }
-                        headers.setEncodedStringValue(from, PduHeaders.FROM);
-                    } catch (NullPointerException e) {
-                        log("null pointer error!");
-                    } catch (RuntimeException e) {
-                        log(headerField + "is not Encoded-String-Value header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                case PduHeaders.MESSAGE_CLASS: {
-                    /* Message-class-value = Class-identifier | Token-text */
-                    pduDataStream.mark(1);
-                    int messageClass = extractByteValue(pduDataStream);
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                " (" + Integer.toHexString(headerField) + ") MESSAGE_CLASS: " +
-                                messageClass);
-                    }
-
-                    if (messageClass >= PduHeaders.MESSAGE_CLASS_PERSONAL) {
-                        /* Class-identifier */
-                        try {
-                            if (PduHeaders.MESSAGE_CLASS_PERSONAL == messageClass) {
-                                headers.setTextString(
-                                        PduHeaders.MESSAGE_CLASS_PERSONAL_STR.getBytes(),
-                                        PduHeaders.MESSAGE_CLASS);
-                            } else if (PduHeaders.MESSAGE_CLASS_ADVERTISEMENT == messageClass) {
-                                headers.setTextString(
-                                        PduHeaders.MESSAGE_CLASS_ADVERTISEMENT_STR.getBytes(),
-                                        PduHeaders.MESSAGE_CLASS);
-                            } else if (PduHeaders.MESSAGE_CLASS_INFORMATIONAL == messageClass) {
-                                headers.setTextString(
-                                        PduHeaders.MESSAGE_CLASS_INFORMATIONAL_STR.getBytes(),
-                                        PduHeaders.MESSAGE_CLASS);
-                            } else if (PduHeaders.MESSAGE_CLASS_AUTO == messageClass) {
-                                headers.setTextString(
-                                        PduHeaders.MESSAGE_CLASS_AUTO_STR.getBytes(),
-                                        PduHeaders.MESSAGE_CLASS);
-                            }
-                        } catch (NullPointerException e) {
-                            log("null pointer error!");
-                        } catch (RuntimeException e) {
-                            log(headerField + "is not Text-String header field!");
-                            return null;
-                        }
-                    } else {
-                        /* Token-text */
-                        pduDataStream.reset();
-                        byte[] messageClassString = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                        if (null != messageClassString) {
-                            try {
-                                headers.setTextString(messageClassString, PduHeaders.MESSAGE_CLASS);
-                            } catch (NullPointerException e) {
-                                log("null pointer error!");
-                            } catch (RuntimeException e) {
-                                log(headerField + "is not Text-String header field!");
-                                return null;
-                            }
-                        }
-                    }
-                    break;
-                }
-
-                case PduHeaders.MMS_VERSION: {
-                    int version = parseShortInteger(pduDataStream);
-
-                    try {
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                    " (" + Integer.toHexString(headerField) + ") MMS_VERSION: " +
-                                    version);
-                        }
-                        headers.setOctet(version, PduHeaders.MMS_VERSION);
-                    } catch (InvalidHeaderValueException e) {
-                        log("Set invalid Octet value: " + version +
-                                " into the header filed: " + headerField);
-                        return null;
-                    } catch (RuntimeException e) {
-                        log(headerField + "is not Octet header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                case PduHeaders.PREVIOUSLY_SENT_BY: {
-                    /* Previously-sent-by-value =
-                     * Value-length Forwarded-count-value Encoded-string-value */
-                    /* parse value-length */
-                    parseValueLength(pduDataStream);
-
-                    /* parse Forwarded-count-value */
-                    try {
-                        parseIntegerValue(pduDataStream);
-                    } catch (RuntimeException e) {
-                        log(headerField + " is not Integer-Value");
-                        return null;
-                    }
-
-                    /* parse Encoded-string-value */
-                    EncodedStringValue previouslySentBy =
-                            parseEncodedStringValue(pduDataStream);
-                    if (null != previouslySentBy) {
-                        try {
-                            if (LOCAL_LOGV) {
-                                Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                        " (" + Integer.toHexString(headerField) +
-                                        ") PREVIOUSLY_SENT_BY: " + previouslySentBy.getString());
-                            }
-                            headers.setEncodedStringValue(previouslySentBy,
-                                    PduHeaders.PREVIOUSLY_SENT_BY);
-                        } catch (NullPointerException e) {
-                            log("null pointer error!");
-                        } catch (RuntimeException e) {
-                            log(headerField + "is not Encoded-String-Value header field!");
-                            return null;
-                        }
-                    }
-                    break;
-                }
-
-                case PduHeaders.PREVIOUSLY_SENT_DATE: {
-                    /* Previously-sent-date-value =
-                     * Value-length Forwarded-count-value Date-value */
-                    /* parse value-length */
-                    parseValueLength(pduDataStream);
-
-                    /* parse Forwarded-count-value */
-                    try {
-                        parseIntegerValue(pduDataStream);
-                    } catch (RuntimeException e) {
-                        log(headerField + " is not Integer-Value");
-                        return null;
-                    }
-
-                    /* Date-value */
-                    try {
-                        long previouslySentDate = parseLongInteger(pduDataStream);
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                    " (" + Integer.toHexString(headerField) +
-                                    ") PREVIOUSLY_SENT_DATE: " + previouslySentDate);
-                        }
-                        headers.setLongInteger(previouslySentDate,
-                                PduHeaders.PREVIOUSLY_SENT_DATE);
-                    } catch (RuntimeException e) {
-                        log(headerField + "is not Long-Integer header field!");
-                        return null;
-                    }
-                    break;
-                }
-
-                case PduHeaders.MM_FLAGS: {
-                    /* MM-flags-value =
-                     * Value-length
-                     * ( Add-token | Remove-token | Filter-token )
-                     * Encoded-string-value
-                     */
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                " (" + Integer.toHexString(headerField) + ") MM_FLAGS: " +
-                                " NOT REALLY SUPPORTED");
-                    }
-
-                    /* parse Value-length */
-                    parseValueLength(pduDataStream);
-
-                    /* Add-token | Remove-token | Filter-token */
-                    extractByteValue(pduDataStream);
-
-                    /* Encoded-string-value */
-                    parseEncodedStringValue(pduDataStream);
-
-                    /* not store this header filed in "headers",
-                     * because now PduHeaders doesn't support it */
-                    break;
-                }
-
-                /* Value-length
-                 * (Message-total-token | Size-total-token) Integer-Value */
-                case PduHeaders.MBOX_TOTALS:
-                case PduHeaders.MBOX_QUOTAS: {
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                " (" + Integer.toHexString(headerField) + ") MBOX_");
-                    }
-                    /* Value-length */
-                    parseValueLength(pduDataStream);
-
-                    /* Message-total-token | Size-total-token */
-                    extractByteValue(pduDataStream);
-
-                    /*Integer-Value*/
-                    try {
-                        parseIntegerValue(pduDataStream);
-                    } catch (RuntimeException e) {
-                        log(headerField + " is not Integer-Value");
-                        return null;
-                    }
-
-                    /* not store these headers filed in "headers",
-                    because now PduHeaders doesn't support them */
-                    break;
-                }
-
-                case PduHeaders.ELEMENT_DESCRIPTOR: {
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                " (" + Integer.toHexString(headerField) + ") ELEMENT_DESCRIPTOR");
-                    }
-                    parseContentType(pduDataStream, null);
-
-                    /* not store this header filed in "headers",
-                    because now PduHeaders doesn't support it */
-                    break;
-                }
-
-                case PduHeaders.CONTENT_TYPE: {
-                    SparseArray<Object> map = new SparseArray<Object>();
-                    byte[] contentType =
-                            parseContentType(pduDataStream, map);
-
-                    if (null != contentType) {
-                        try {
-                            if (LOCAL_LOGV) {
-                                Log.v(LOG_TAG, "parseHeaders: headerField: " + headerField +
-                                        " (" + Integer.toHexString(headerField) + ") CONTENT_TYPE: "
-                                        + Arrays.toString(contentType));
-                            }
-                            headers.setTextString(contentType, PduHeaders.CONTENT_TYPE);
-                        } catch (NullPointerException e) {
-                            log("null pointer error!");
-                        } catch (RuntimeException e) {
-                            log(headerField + "is not Text-String header field!");
-                            return null;
-                        }
-                    }
-
-                    /* get start parameter */
-                    mStartParam = (byte[]) map.get(PduPart.P_START);
-
-                    /* get charset parameter */
-                    mTypeParam = (byte[]) map.get(PduPart.P_TYPE);
-
-                    keepParsing = false;
-                    break;
-                }
-
-                case PduHeaders.CONTENT:
-                case PduHeaders.ADDITIONAL_HEADERS:
-                case PduHeaders.ATTRIBUTES:
-                default: {
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "parseHeaders: Unknown header: " + headerField +
-                                " (" + Integer.toHexString(headerField) + ")");
-                    }
-                    log("Unknown header");
-                }
-            }
-        }
-
-        return headers;
-    }
-
-    /**
-     * Parse pdu parts.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return parts in PduBody structure
-     */
-    protected PduBody parseParts(ByteArrayInputStream pduDataStream) {
-        if (pduDataStream == null) {
-            return null;
-        }
-
-        int count = parseUnsignedInt(pduDataStream); // get the number of parts
-        PduBody body = new PduBody();
-
-        for (int i = 0; i < count; i++) {
-            int headerLength = parseUnsignedInt(pduDataStream);
-            int dataLength = parseUnsignedInt(pduDataStream);
-            PduPart part = new PduPart();
-            int startPos = pduDataStream.available();
-            if (startPos <= 0) {
-                // Invalid part.
-                return null;
-            }
-
-            /* parse part's content-type */
-            SparseArray<Object> map = new SparseArray<Object>();
-            byte[] contentType = parseContentType(pduDataStream, map);
-            if (null != contentType) {
-                part.setContentType(contentType);
-            } else {
-                part.setContentType((PduContentTypes.contentTypes[0]).getBytes()); //"*/*"
-            }
-
-            /* get name parameter */
-            byte[] name = (byte[]) map.get(PduPart.P_NAME);
-            if (null != name) {
-                part.setName(name);
-            }
-
-            /* get charset parameter */
-            Integer charset = (Integer) map.get(PduPart.P_CHARSET);
-            if (null != charset) {
-                part.setCharset(charset);
-            }
-
-            /* parse part's headers */
-            int endPos = pduDataStream.available();
-            int partHeaderLen = headerLength - (startPos - endPos);
-            if (partHeaderLen > 0) {
-                if (false == parsePartHeaders(pduDataStream, part, partHeaderLen)) {
-                    // Parse part header faild.
-                    return null;
-                }
-            } else if (partHeaderLen < 0) {
-                // Invalid length of content-type.
-                return null;
-            }
-
-            /* TODO: check content-id, name, filename and content location,
-             * if not set anyone of them, generate a default content-location
-             */
-            if ((null == part.getContentLocation())
-                    && (null == part.getName())
-                    && (null == part.getFilename())
-                    && (null == part.getContentId())) {
-                part.setContentLocation(Long.toOctalString(
-                        System.currentTimeMillis()).getBytes());
-            }
-
-            /* get part's data */
-            if (dataLength > 0) {
-                byte[] partData = new byte[dataLength];
-                String partContentType = new String(part.getContentType());
-                pduDataStream.read(partData, 0, dataLength);
-                if (partContentType.equalsIgnoreCase(ContentType.MMS_MULTIPART_ALTERNATIVE)) {
-                    // parse "multipart/vnd.wap.multipart.alternative".
-                    PduBody childBody = parseParts(new ByteArrayInputStream(partData));
-                    // take the first part of children.
-                    part = childBody.getPart(0);
-                } else {
-                    // Check Content-Transfer-Encoding.
-                    byte[] partDataEncoding = part.getContentTransferEncoding();
-                    if (null != partDataEncoding) {
-                        String encoding = new String(partDataEncoding);
-                        if (encoding.equalsIgnoreCase(PduPart.P_BASE64)) {
-                            // Decode "base64" into "binary".
-                            partData = Base64.decodeBase64(partData);
-                        } else if (encoding.equalsIgnoreCase(PduPart.P_QUOTED_PRINTABLE)) {
-                            // Decode "quoted-printable" into "binary".
-                            partData = QuotedPrintable.decodeQuotedPrintable(partData);
-                        } else {
-                            // "binary" is the default encoding.
-                        }
-                    }
-                    if (null == partData) {
-                        log("Decode part data error!");
-                        return null;
-                    }
-                    part.setData(partData);
-                }
-            }
-
-            /* add this part to body */
-            if (THE_FIRST_PART == checkPartPosition(part)) {
-                /* this is the first part */
-                body.addPart(0, part);
-            } else {
-                /* add the part to the end */
-                body.addPart(part);
-            }
-        }
-
-        return body;
-    }
-
-    /**
-     * Log status.
-     *
-     * @param text log information
-     */
-    private static void log(String text) {
-        if (LOCAL_LOGV) {
-            Log.v(LOG_TAG, text);
-        }
-    }
-
-    /**
-     * Parse unsigned integer.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return the integer, -1 when failed
-     */
-    protected static int parseUnsignedInt(ByteArrayInputStream pduDataStream) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * The maximum size of a uintvar is 32 bits.
-         * So it will be encoded in no more than 5 octets.
-         */
-        assert (null != pduDataStream);
-        int result = 0;
-        int temp = pduDataStream.read();
-        if (temp == -1) {
-            return temp;
-        }
-
-        while ((temp & 0x80) != 0) {
-            result = result << 7;
-            result |= temp & 0x7F;
-            temp = pduDataStream.read();
-            if (temp == -1) {
-                return temp;
-            }
-        }
-
-        result = result << 7;
-        result |= temp & 0x7F;
-
-        return result;
-    }
-
-    /**
-     * Parse value length.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return the integer
-     */
-    protected static int parseValueLength(ByteArrayInputStream pduDataStream) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Value-length = Short-length | (Length-quote Length)
-         * Short-length = <Any octet 0-30>
-         * Length-quote = <Octet 31>
-         * Length = Uintvar-integer
-         * Uintvar-integer = 1*5 OCTET
-         */
-        assert (null != pduDataStream);
-        int temp = pduDataStream.read();
-        assert (-1 != temp);
-        int first = temp & 0xFF;
-
-        if (first <= SHORT_LENGTH_MAX) {
-            return first;
-        } else if (first == LENGTH_QUOTE) {
-            return parseUnsignedInt(pduDataStream);
-        }
-
-        throw new RuntimeException("Value length > LENGTH_QUOTE!");
-    }
-
-    /**
-     * Parse encoded string value.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return the EncodedStringValue
-     */
-    protected static EncodedStringValue parseEncodedStringValue(
-            ByteArrayInputStream pduDataStream) {
-        /**
-         * From OMA-TS-MMS-ENC-V1_3-20050927-C.pdf
-         * Encoded-string-value = Text-string | Value-length Char-set Text-string
-         */
-        assert (null != pduDataStream);
-        pduDataStream.mark(1);
-        EncodedStringValue returnValue = null;
-        int charset = 0;
-        int temp = pduDataStream.read();
-        assert (-1 != temp);
-        int first = temp & 0xFF;
-        if (first == 0) {
-            return null;    //  Blank subject, bail.
-        }
-
-        pduDataStream.reset();
-        if (first < TEXT_MIN) {
-            parseValueLength(pduDataStream);
-
-            charset = parseShortInteger(pduDataStream); //get the "Charset"
-        }
-
-        byte[] textString = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-
-        try {
-            if (0 != charset) {
-                returnValue = new EncodedStringValue(charset, textString);
-            } else {
-                returnValue = new EncodedStringValue(textString);
-            }
-        } catch (Exception e) {
-            return null;
-        }
-
-        return returnValue;
-    }
-
-    /**
-     * Parse Text-String or Quoted-String.
-     *
-     * @param pduDataStream pdu data input stream
-     * @param stringType    TYPE_TEXT_STRING or TYPE_QUOTED_STRING
-     * @return the string without End-of-string in byte array
-     */
-    protected static byte[] parseWapString(ByteArrayInputStream pduDataStream,
-            int stringType) {
-        assert (null != pduDataStream);
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Text-string = [Quote] *TEXT End-of-string
-         * If the first character in the TEXT is in the range of 128-255,
-         * a Quote character must precede it.
-         * Otherwise the Quote character must be omitted.
-         * The Quote is not part of the contents.
-         * Quote = <Octet 127>
-         * End-of-string = <Octet 0>
-         *
-         * Quoted-string = <Octet 34> *TEXT End-of-string
-         *
-         * Token-text = Token End-of-string
-         */
-
-        // Mark supposed beginning of Text-string
-        // We will have to mark again if first char is QUOTE or QUOTED_STRING_FLAG
-        pduDataStream.mark(1);
-
-        // Check first char
-        int temp = pduDataStream.read();
-        assert (-1 != temp);
-        if ((TYPE_QUOTED_STRING == stringType) &&
-                (QUOTED_STRING_FLAG == temp)) {
-            // Mark again if QUOTED_STRING_FLAG and ignore it
-            pduDataStream.mark(1);
-        } else if ((TYPE_TEXT_STRING == stringType) &&
-                (QUOTE == temp)) {
-            // Mark again if QUOTE and ignore it
-            pduDataStream.mark(1);
-        } else {
-            // Otherwise go back to origin
-            pduDataStream.reset();
-        }
-
-        // We are now definitely at the beginning of string
-        /**
-         * Return *TOKEN or *TEXT (Text-String without QUOTE,
-         * Quoted-String without QUOTED_STRING_FLAG and without End-of-string)
-         */
-        return getWapString(pduDataStream, stringType);
-    }
-
-    /**
-     * Check TOKEN data defined in RFC2616.
-     *
-     * @param ch checking data
-     * @return true when ch is TOKEN, false when ch is not TOKEN
-     */
-    protected static boolean isTokenCharacter(int ch) {
-        /**
-         * Token      = 1*<any CHAR except CTLs or separators>
-         * separators = "("(40) | ")"(41) | "<"(60) | ">"(62) | "@"(64)
-         *            | ","(44) | ";"(59) | ":"(58) | "\"(92) | <">(34)
-         *            | "/"(47) | "["(91) | "]"(93) | "?"(63) | "="(61)
-         *            | "{"(123) | "}"(125) | SP(32) | HT(9)
-         * CHAR       = <any US-ASCII character (octets 0 - 127)>
-         * CTL        = <any US-ASCII control character
-         *            (octets 0 - 31) and DEL (127)>
-         * SP         = <US-ASCII SP, space (32)>
-         * HT         = <US-ASCII HT, horizontal-tab (9)>
-         */
-        if ((ch < 33) || (ch > 126)) {
-            return false;
-        }
-
-        switch (ch) {
-            case '"': /* '"' */
-            case '(': /* '(' */
-            case ')': /* ')' */
-            case ',': /* ',' */
-            case '/': /* '/' */
-            case ':': /* ':' */
-            case ';': /* ';' */
-            case '<': /* '<' */
-            case '=': /* '=' */
-            case '>': /* '>' */
-            case '?': /* '?' */
-            case '@': /* '@' */
-            case '[': /* '[' */
-            case '\\': /* '\' */
-            case ']': /* ']' */
-            case '{': /* '{' */
-            case '}': /* '}' */
-                return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Check TEXT data defined in RFC2616.
-     *
-     * @param ch checking data
-     * @return true when ch is TEXT, false when ch is not TEXT
-     */
-    protected static boolean isText(int ch) {
-        /**
-         * TEXT = <any OCTET except CTLs,
-         *      but including LWS>
-         * CTL  = <any US-ASCII control character
-         *      (octets 0 - 31) and DEL (127)>
-         * LWS  = [CRLF] 1*( SP | HT )
-         * CRLF = CR LF
-         * CR   = <US-ASCII CR, carriage return (13)>
-         * LF   = <US-ASCII LF, linefeed (10)>
-         */
-        if (((ch >= 32) && (ch <= 126)) || ((ch >= 128) && (ch <= 255))) {
-            return true;
-        }
-
-        switch (ch) {
-            case '\t': /* '\t' */
-            case '\n': /* '\n' */
-            case '\r': /* '\r' */
-                return true;
-        }
-
-        return false;
-    }
-
-    protected static byte[] getWapString(ByteArrayInputStream pduDataStream,
-            int stringType) {
-        assert (null != pduDataStream);
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        int temp = pduDataStream.read();
-        assert (-1 != temp);
-        while ((-1 != temp) && ('\0' != temp)) {
-            // check each of the character
-            if (stringType == TYPE_TOKEN_STRING) {
-                if (isTokenCharacter(temp)) {
-                    out.write(temp);
-                }
-            } else {
-                if (isText(temp)) {
-                    out.write(temp);
-                }
-            }
-
-            temp = pduDataStream.read();
-            assert (-1 != temp);
-        }
-
-        if (out.size() > 0) {
-            return out.toByteArray();
-        }
-
-        return null;
-    }
-
-    /**
-     * Extract a byte value from the input stream.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return the byte
-     */
-    protected static int extractByteValue(ByteArrayInputStream pduDataStream) {
-        assert (null != pduDataStream);
-        int temp = pduDataStream.read();
-        assert (-1 != temp);
-        return temp & 0xFF;
-    }
-
-    /**
-     * Parse Short-Integer.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return the byte
-     */
-    protected static int parseShortInteger(ByteArrayInputStream pduDataStream) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Short-integer = OCTET
-         * Integers in range 0-127 shall be encoded as a one
-         * octet value with the most significant bit set to one (1xxx xxxx)
-         * and with the value in the remaining least significant bits.
-         */
-        assert (null != pduDataStream);
-        int temp = pduDataStream.read();
-        assert (-1 != temp);
-        return temp & 0x7F;
-    }
-
-    /**
-     * Parse Long-Integer.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return long integer
-     */
-    protected static long parseLongInteger(ByteArrayInputStream pduDataStream) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Long-integer = Short-length Multi-octet-integer
-         * The Short-length indicates the length of the Multi-octet-integer
-         * Multi-octet-integer = 1*30 OCTET
-         * The content octets shall be an unsigned integer value
-         * with the most significant octet encoded first (big-endian representation).
-         * The minimum number of octets must be used to encode the value.
-         * Short-length = <Any octet 0-30>
-         */
-        assert (null != pduDataStream);
-        int temp = pduDataStream.read();
-        assert (-1 != temp);
-        int count = temp & 0xFF;
-
-        if (count > LONG_INTEGER_LENGTH_MAX) {
-            throw new RuntimeException("Octet count greater than 8 and I can't represent that!");
-        }
-
-        long result = 0;
-
-        for (int i = 0; i < count; i++) {
-            temp = pduDataStream.read();
-            assert (-1 != temp);
-            result <<= 8;
-            result += (temp & 0xFF);
-        }
-
-        return result;
-    }
-
-    /**
-     * Parse Integer-Value.
-     *
-     * @param pduDataStream pdu data input stream
-     * @return long integer
-     */
-    protected static long parseIntegerValue(ByteArrayInputStream pduDataStream) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Integer-Value = Short-integer | Long-integer
-         */
-        assert (null != pduDataStream);
-        pduDataStream.mark(1);
-        int temp = pduDataStream.read();
-        assert (-1 != temp);
-        pduDataStream.reset();
-        if (temp > SHORT_INTEGER_MAX) {
-            return parseShortInteger(pduDataStream);
-        } else {
-            return parseLongInteger(pduDataStream);
-        }
-    }
-
-    /**
-     * To skip length of the wap value.
-     *
-     * @param pduDataStream pdu data input stream
-     * @param length        area size
-     * @return the values in this area
-     */
-    protected static int skipWapValue(ByteArrayInputStream pduDataStream, int length) {
-        assert (null != pduDataStream);
-        byte[] area = new byte[length];
-        int readLen = pduDataStream.read(area, 0, length);
-        if (readLen < length) { //The actually read length is lower than the length
-            return -1;
-        } else {
-            return readLen;
-        }
-    }
-
-    /**
-     * Parse content type parameters. For now we just support
-     * four parameters used in mms: "type", "start", "name", "charset".
-     *
-     * @param pduDataStream pdu data input stream
-     * @param map           to store parameters of Content-Type field
-     * @param length        length of all the parameters
-     */
-    protected static void parseContentTypeParams(ByteArrayInputStream pduDataStream,
-            SparseArray<Object> map, Integer length) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Parameter = Typed-parameter | Untyped-parameter
-         * Typed-parameter = Well-known-parameter-token Typed-value
-         * the actual expected type of the value is implied by the well-known parameter
-         * Well-known-parameter-token = Integer-value
-         * the code values used for parameters are specified in the Assigned Numbers appendix
-         * Typed-value = Compact-value | Text-value
-         * In addition to the expected type, there may be no value.
-         * If the value cannot be encoded using the expected type, it shall be encoded as text.
-         * Compact-value = Integer-value |
-         * Date-value | Delta-seconds-value | Q-value | Version-value |
-         * Uri-value
-         * Untyped-parameter = Token-text Untyped-value
-         * the type of the value is unknown, but it shall be encoded as an integer,
-         * if that is possible.
-         * Untyped-value = Integer-value | Text-value
-         */
-        assert (null != pduDataStream);
-        assert (length > 0);
-
-        int startPos = pduDataStream.available();
-        int tempPos = 0;
-        int lastLen = length;
-        while (0 < lastLen) {
-            int param = pduDataStream.read();
-            assert (-1 != param);
-            lastLen--;
-
-            switch (param) {
-                /**
-                 * From rfc2387, chapter 3.1
-                 * The type parameter must be specified and its value is the MIME media
-                 * type of the "root" body part. It permits a MIME user agent to
-                 * determine the content-type without reference to the enclosed body
-                 * part. If the value of the type parameter and the root body part's
-                 * content-type differ then the User Agent's behavior is undefined.
-                 *
-                 * From wap-230-wsp-20010705-a.pdf
-                 * type = Constrained-encoding
-                 * Constrained-encoding = Extension-Media | Short-integer
-                 * Extension-media = *TEXT End-of-string
-                 */
-                case PduPart.P_TYPE:
-                case PduPart.P_CT_MR_TYPE:
-                    pduDataStream.mark(1);
-                    int first = extractByteValue(pduDataStream);
-                    pduDataStream.reset();
-                    if (first > TEXT_MAX) {
-                        // Short-integer (well-known type)
-                        int index = parseShortInteger(pduDataStream);
-
-                        if (index < PduContentTypes.contentTypes.length) {
-                            byte[] type = (PduContentTypes.contentTypes[index]).getBytes();
-                            map.put(PduPart.P_TYPE, type);
-                        } else {
-                            //not support this type, ignore it.
-                        }
-                    } else {
-                        // Text-String (extension-media)
-                        byte[] type = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                        if ((null != type) && (null != map)) {
-                            map.put(PduPart.P_TYPE, type);
-                        }
-                    }
-
-                    tempPos = pduDataStream.available();
-                    lastLen = length - (startPos - tempPos);
-                    break;
-
-                    /**
-                     * From oma-ts-mms-conf-v1_3.pdf, chapter 10.2.3.
-                     * Start Parameter Referring to Presentation
-                     *
-                     * From rfc2387, chapter 3.2
-                     * The start parameter, if given, is the content-ID of the compound
-                     * object's "root". If not present the "root" is the first body part in
-                     * the Multipart/Related entity. The "root" is the element the
-                     * applications processes first.
-                     *
-                     * From wap-230-wsp-20010705-a.pdf
-                     * start = Text-String
-                     */
-                case PduPart.P_START:
-                case PduPart.P_DEP_START:
-                    byte[] start = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                    if ((null != start) && (null != map)) {
-                        map.put(PduPart.P_START, start);
-                    }
-
-                    tempPos = pduDataStream.available();
-                    lastLen = length - (startPos - tempPos);
-                    break;
-
-                    /**
-                     * From oma-ts-mms-conf-v1_3.pdf
-                     * In creation, the character set SHALL be either us-ascii
-                     * (IANA MIBenum 3) or utf-8 (IANA MIBenum 106)[Unicode].
-                     * In retrieval, both us-ascii and utf-8 SHALL be supported.
-                     *
-                     * From wap-230-wsp-20010705-a.pdf
-                     * charset = Well-known-charset|Text-String
-                     * Well-known-charset = Any-charset | Integer-value
-                     * Both are encoded using values from Character Set
-                     * Assignments table in Assigned Numbers
-                     * Any-charset = <Octet 128>
-                     * Equivalent to the special RFC2616 charset value "*"
-                     */
-                case PduPart.P_CHARSET:
-                    pduDataStream.mark(1);
-                    int firstValue = extractByteValue(pduDataStream);
-                    pduDataStream.reset();
-                    //Check first char
-                    if (((firstValue > TEXT_MIN) && (firstValue < TEXT_MAX)) ||
-                            (END_STRING_FLAG == firstValue)) {
-                        //Text-String (extension-charset)
-                        byte[] charsetStr = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                        try {
-                            int charsetInt = CharacterSets.getMibEnumValue(
-                                    new String(charsetStr));
-                            map.put(PduPart.P_CHARSET, charsetInt);
-                        } catch (UnsupportedEncodingException e) {
-                            // Not a well-known charset, use "*".
-                            Log.e(LOG_TAG, Arrays.toString(charsetStr), e);
-                            map.put(PduPart.P_CHARSET, CharacterSets.ANY_CHARSET);
-                        }
-                    } else {
-                        //Well-known-charset
-                        int charset = (int) parseIntegerValue(pduDataStream);
-                        if (map != null) {
-                            map.put(PduPart.P_CHARSET, charset);
-                        }
-                    }
-
-                    tempPos = pduDataStream.available();
-                    lastLen = length - (startPos - tempPos);
-                    break;
-
-                    /**
-                     * From oma-ts-mms-conf-v1_3.pdf
-                     * A name for multipart object SHALL be encoded using name-parameter
-                     * for Content-Type header in WSP multipart headers.
-                     *
-                     * From wap-230-wsp-20010705-a.pdf
-                     * name = Text-String
-                     */
-                case PduPart.P_DEP_NAME:
-                case PduPart.P_NAME:
-                    byte[] name = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                    if ((null != name) && (null != map)) {
-                        map.put(PduPart.P_NAME, name);
-                    }
-
-                    tempPos = pduDataStream.available();
-                    lastLen = length - (startPos - tempPos);
-                    break;
-                default:
-                    if (LOCAL_LOGV) {
-                        Log.v(LOG_TAG, "Not supported Content-Type parameter");
-                    }
-                    if (-1 == skipWapValue(pduDataStream, lastLen)) {
-                        Log.e(LOG_TAG, "Corrupt Content-Type");
-                    } else {
-                        lastLen = 0;
-                    }
-                    break;
-            }
-        }
-
-        if (0 != lastLen) {
-            Log.e(LOG_TAG, "Corrupt Content-Type");
-        }
-    }
-
-    /**
-     * Parse content type.
-     *
-     * @param pduDataStream pdu data input stream
-     * @param map           to store parameters in Content-Type header field
-     * @return Content-Type value
-     */
-    protected static byte[] parseContentType(ByteArrayInputStream pduDataStream,
-            SparseArray<Object> map) {
-        /**
-         * From wap-230-wsp-20010705-a.pdf
-         * Content-type-value = Constrained-media | Content-general-form
-         * Content-general-form = Value-length Media-type
-         * Media-type = (Well-known-media | Extension-Media) *(Parameter)
-         */
-        assert (null != pduDataStream);
-
-        byte[] contentType = null;
-        pduDataStream.mark(1);
-        int temp = pduDataStream.read();
-        assert (-1 != temp);
-        pduDataStream.reset();
-
-        int cur = (temp & 0xFF);
-
-        if (cur < TEXT_MIN) {
-            int length = parseValueLength(pduDataStream);
-            int startPos = pduDataStream.available();
-            pduDataStream.mark(1);
-            temp = pduDataStream.read();
-            assert (-1 != temp);
-            pduDataStream.reset();
-            int first = (temp & 0xFF);
-
-            if ((first >= TEXT_MIN) && (first <= TEXT_MAX)) {
-                contentType = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-            } else if (first > TEXT_MAX) {
-                int index = parseShortInteger(pduDataStream);
-
-                if (index < PduContentTypes.contentTypes.length) { //well-known type
-                    contentType = (PduContentTypes.contentTypes[index]).getBytes();
-                } else {
-                    pduDataStream.reset();
-                    contentType = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                }
-            } else {
-                Log.e(LOG_TAG, "Corrupt content-type");
-                return (PduContentTypes.contentTypes[0]).getBytes(); //"*/*"
-            }
-
-            int endPos = pduDataStream.available();
-            int parameterLen = length - (startPos - endPos);
-            if (parameterLen > 0) {//have parameters
-                parseContentTypeParams(pduDataStream, map, parameterLen);
-            }
-
-            if (parameterLen < 0) {
-                Log.e(LOG_TAG, "Corrupt MMS message");
-                return (PduContentTypes.contentTypes[0]).getBytes(); //"*/*"
-            }
-        } else if (cur <= TEXT_MAX) {
-            contentType = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-        } else {
-            contentType =
-                    (PduContentTypes.contentTypes[parseShortInteger(pduDataStream)]).getBytes();
-        }
-
-        return contentType;
-    }
-
-    /**
-     * Parse part's headers.
-     *
-     * @param pduDataStream pdu data input stream
-     * @param part          to store the header informations of the part
-     * @param length        length of the headers
-     * @return true if parse successfully, false otherwise
-     */
-    protected boolean parsePartHeaders(ByteArrayInputStream pduDataStream,
-            PduPart part, int length) {
-        assert (null != pduDataStream);
-        assert (null != part);
-        assert (length > 0);
-
-        /**
-         * From oma-ts-mms-conf-v1_3.pdf, chapter 10.2.
-         * A name for multipart object SHALL be encoded using name-parameter
-         * for Content-Type header in WSP multipart headers.
-         * In decoding, name-parameter of Content-Type SHALL be used if available.
-         * If name-parameter of Content-Type is not available,
-         * filename parameter of Content-Disposition header SHALL be used if available.
-         * If neither name-parameter of Content-Type header nor filename parameter
-         * of Content-Disposition header is available,
-         * Content-Location header SHALL be used if available.
-         *
-         * Within SMIL part the reference to the media object parts SHALL use
-         * either Content-ID or Content-Location mechanism [RFC2557]
-         * and the corresponding WSP part headers in media object parts
-         * contain the corresponding definitions.
-         */
-        int startPos = pduDataStream.available();
-        int tempPos = 0;
-        int lastLen = length;
-        while (0 < lastLen) {
-            int header = pduDataStream.read();
-            assert (-1 != header);
-            lastLen--;
-
-            if (header > TEXT_MAX) {
-                // Number assigned headers.
-                switch (header) {
-                    case PduPart.P_CONTENT_LOCATION:
-                        /**
-                         * From wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21
-                         * Content-location-value = Uri-value
-                         */
-                        byte[] contentLocation = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                        if (null != contentLocation) {
-                            part.setContentLocation(contentLocation);
-                        }
-
-                        tempPos = pduDataStream.available();
-                        lastLen = length - (startPos - tempPos);
-                        break;
-                    case PduPart.P_CONTENT_ID:
-                        /**
-                         * From wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21
-                         * Content-ID-value = Quoted-string
-                         */
-                        byte[] contentId = parseWapString(pduDataStream, TYPE_QUOTED_STRING);
-                        if (null != contentId) {
-                            part.setContentId(contentId);
-                        }
-
-                        tempPos = pduDataStream.available();
-                        lastLen = length - (startPos - tempPos);
-                        break;
-                    case PduPart.P_DEP_CONTENT_DISPOSITION:
-                    case PduPart.P_CONTENT_DISPOSITION:
-                        /*
-                         * From wap-230-wsp-20010705-a.pdf, chapter 8.4.2.21
-                         * Content-disposition-value = Value-length Disposition *(Parameter)
-                         * Disposition = Form-data | Attachment | Inline | Token-text
-                         * Form-data = <Octet 128>
-                         * Attachment = <Octet 129>
-                         * Inline = <Octet 130>
-                         *
-                         * some carrier mmsc servers do not support content_disposition
-                         * field correctly
-                        */
-                        if (mParseContentDisposition) {
-                            int len = parseValueLength(pduDataStream);
-                            pduDataStream.mark(1);
-                            int thisStartPos = pduDataStream.available();
-                            int thisEndPos = 0;
-                            int value = pduDataStream.read();
-
-                            if (value == PduPart.P_DISPOSITION_FROM_DATA) {
-                                part.setContentDisposition(PduPart.DISPOSITION_FROM_DATA);
-                            } else if (value == PduPart.P_DISPOSITION_ATTACHMENT) {
-                                part.setContentDisposition(PduPart.DISPOSITION_ATTACHMENT);
-                            } else if (value == PduPart.P_DISPOSITION_INLINE) {
-                                part.setContentDisposition(PduPart.DISPOSITION_INLINE);
-                            } else {
-                                pduDataStream.reset();
-                                /* Token-text */
-                                part.setContentDisposition(parseWapString(pduDataStream
-                                        , TYPE_TEXT_STRING));
-                            }
-
-                            /* get filename parameter and skip other parameters */
-                            thisEndPos = pduDataStream.available();
-                            if (thisStartPos - thisEndPos < len) {
-                                value = pduDataStream.read();
-                                if (value == PduPart.P_FILENAME) { //filename is text-string
-                                    part.setFilename(parseWapString(pduDataStream
-                                            , TYPE_TEXT_STRING));
-                                }
-
-                                /* skip other parameters */
-                                thisEndPos = pduDataStream.available();
-                                if (thisStartPos - thisEndPos < len) {
-                                    int last = len - (thisStartPos - thisEndPos);
-                                    byte[] temp = new byte[last];
-                                    pduDataStream.read(temp, 0, last);
-                                }
-                            }
-
-                            tempPos = pduDataStream.available();
-                            lastLen = length - (startPos - tempPos);
-                        }
-                        break;
-                    default:
-                        if (LOCAL_LOGV) {
-                            Log.v(LOG_TAG, "Not supported Part headers: " + header);
-                        }
-                        if (-1 == skipWapValue(pduDataStream, lastLen)) {
-                            Log.e(LOG_TAG, "Corrupt Part headers");
-                            return false;
-                        }
-                        lastLen = 0;
-                        break;
-                }
-            } else if ((header >= TEXT_MIN) && (header <= TEXT_MAX)) {
-                // Not assigned header.
-                byte[] tempHeader = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-                byte[] tempValue = parseWapString(pduDataStream, TYPE_TEXT_STRING);
-
-                // Check the header whether it is "Content-Transfer-Encoding".
-                if (true ==
-                        PduPart.CONTENT_TRANSFER_ENCODING
-                                .equalsIgnoreCase(new String(tempHeader))) {
-                    part.setContentTransferEncoding(tempValue);
-                }
-
-                tempPos = pduDataStream.available();
-                lastLen = length - (startPos - tempPos);
-            } else {
-                if (LOCAL_LOGV) {
-                    Log.v(LOG_TAG, "Not supported Part headers: " + header);
-                }
-                // Skip all headers of this part.
-                if (-1 == skipWapValue(pduDataStream, lastLen)) {
-                    Log.e(LOG_TAG, "Corrupt Part headers");
-                    return false;
-                }
-                lastLen = 0;
-            }
-        }
-
-        if (0 != lastLen) {
-            Log.e(LOG_TAG, "Corrupt Part headers");
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Check the position of a specified part.
-     *
-     * @param part the part to be checked
-     * @return part position, THE_FIRST_PART when it's the
-     * first one, THE_LAST_PART when it's the last one.
-     */
-    private static int checkPartPosition(PduPart part) {
-        assert (null != part);
-        if ((null == mTypeParam) &&
-                (null == mStartParam)) {
-            return THE_LAST_PART;
-        }
-
-        /* check part's content-id */
-        if (null != mStartParam) {
-            byte[] contentId = part.getContentId();
-            if (null != contentId) {
-                if (true == Arrays.equals(mStartParam, contentId)) {
-                    return THE_FIRST_PART;
-                }
-            }
-            // This is not the first part, so append to end (keeping the original order)
-            // Check b/19607294 for details of this change
-            return THE_LAST_PART;
-        }
-
-        /* check part's content-type */
-        if (null != mTypeParam) {
-            byte[] contentType = part.getContentType();
-            if (null != contentType) {
-                if (true == Arrays.equals(mTypeParam, contentType)) {
-                    return THE_FIRST_PART;
-                }
-            }
-        }
-
-        return THE_LAST_PART;
-    }
-
-    /**
-     * Check mandatory headers of a pdu.
-     *
-     * @param headers pdu headers
-     * @return true if the pdu has all of the mandatory headers, false otherwise.
-     */
-    protected static boolean checkMandatoryHeader(PduHeaders headers) {
-        if (null == headers) {
-            return false;
-        }
-
-        /* get message type */
-        int messageType = headers.getOctet(PduHeaders.MESSAGE_TYPE);
-
-        /* check Mms-Version field */
-        int mmsVersion = headers.getOctet(PduHeaders.MMS_VERSION);
-        if (0 == mmsVersion) {
-            // Every message should have Mms-Version field.
-            return false;
-        }
-
-        /* check mandatory header fields */
-        switch (messageType) {
-            case PduHeaders.MESSAGE_TYPE_SEND_REQ:
-                // Content-Type field.
-                byte[] srContentType = headers.getTextString(PduHeaders.CONTENT_TYPE);
-                if (null == srContentType) {
-                    return false;
-                }
-
-                // From field.
-                EncodedStringValue srFrom = headers.getEncodedStringValue(PduHeaders.FROM);
-                if (null == srFrom) {
-                    return false;
-                }
-
-                // Transaction-Id field.
-                byte[] srTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
-                if (null == srTransactionId) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_SEND_CONF:
-                // Response-Status field.
-                int scResponseStatus = headers.getOctet(PduHeaders.RESPONSE_STATUS);
-                if (0 == scResponseStatus) {
-                    return false;
-                }
-
-                // Transaction-Id field.
-                byte[] scTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
-                if (null == scTransactionId) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND:
-                // Content-Location field.
-                byte[] niContentLocation = headers.getTextString(PduHeaders.CONTENT_LOCATION);
-                if (null == niContentLocation) {
-                    return false;
-                }
-
-                // Expiry field.
-                long niExpiry = headers.getLongInteger(PduHeaders.EXPIRY);
-                if (-1 == niExpiry) {
-                    return false;
-                }
-
-                // Message-Class field.
-                byte[] niMessageClass = headers.getTextString(PduHeaders.MESSAGE_CLASS);
-                if (null == niMessageClass) {
-                    return false;
-                }
-
-                // Message-Size field.
-                long niMessageSize = headers.getLongInteger(PduHeaders.MESSAGE_SIZE);
-                if (-1 == niMessageSize) {
-                    return false;
-                }
-
-                // Transaction-Id field.
-                byte[] niTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
-                if (null == niTransactionId) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND:
-                // Status field.
-                int nriStatus = headers.getOctet(PduHeaders.STATUS);
-                if (0 == nriStatus) {
-                    return false;
-                }
-
-                // Transaction-Id field.
-                byte[] nriTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
-                if (null == nriTransactionId) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF:
-                // Content-Type field.
-                byte[] rcContentType = headers.getTextString(PduHeaders.CONTENT_TYPE);
-                if (null == rcContentType) {
-                    return false;
-                }
-
-                // Date field.
-                long rcDate = headers.getLongInteger(PduHeaders.DATE);
-                if (-1 == rcDate) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_DELIVERY_IND:
-                // Date field.
-                long diDate = headers.getLongInteger(PduHeaders.DATE);
-                if (-1 == diDate) {
-                    return false;
-                }
-
-                // Message-Id field.
-                byte[] diMessageId = headers.getTextString(PduHeaders.MESSAGE_ID);
-                if (null == diMessageId) {
-                    return false;
-                }
-
-                // Status field.
-                int diStatus = headers.getOctet(PduHeaders.STATUS);
-                if (0 == diStatus) {
-                    return false;
-                }
-
-                // To field.
-                EncodedStringValue[] diTo = headers.getEncodedStringValues(PduHeaders.TO);
-                if (null == diTo) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND:
-                // Transaction-Id field.
-                byte[] aiTransactionId = headers.getTextString(PduHeaders.TRANSACTION_ID);
-                if (null == aiTransactionId) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_READ_ORIG_IND:
-                // Date field.
-                long roDate = headers.getLongInteger(PduHeaders.DATE);
-                if (-1 == roDate) {
-                    return false;
-                }
-
-                // From field.
-                EncodedStringValue roFrom = headers.getEncodedStringValue(PduHeaders.FROM);
-                if (null == roFrom) {
-                    return false;
-                }
-
-                // Message-Id field.
-                byte[] roMessageId = headers.getTextString(PduHeaders.MESSAGE_ID);
-                if (null == roMessageId) {
-                    return false;
-                }
-
-                // Read-Status field.
-                int roReadStatus = headers.getOctet(PduHeaders.READ_STATUS);
-                if (0 == roReadStatus) {
-                    return false;
-                }
-
-                // To field.
-                EncodedStringValue[] roTo = headers.getEncodedStringValues(PduHeaders.TO);
-                if (null == roTo) {
-                    return false;
-                }
-
-                break;
-            case PduHeaders.MESSAGE_TYPE_READ_REC_IND:
-                // From field.
-                EncodedStringValue rrFrom = headers.getEncodedStringValue(PduHeaders.FROM);
-                if (null == rrFrom) {
-                    return false;
-                }
-
-                // Message-Id field.
-                byte[] rrMessageId = headers.getTextString(PduHeaders.MESSAGE_ID);
-                if (null == rrMessageId) {
-                    return false;
-                }
-
-                // Read-Status field.
-                int rrReadStatus = headers.getOctet(PduHeaders.READ_STATUS);
-                if (0 == rrReadStatus) {
-                    return false;
-                }
-
-                // To field.
-                EncodedStringValue[] rrTo = headers.getEncodedStringValues(PduHeaders.TO);
-                if (null == rrTo) {
-                    return false;
-                }
-
-                break;
-            default:
-                // Parser doesn't support this message type in this version.
-                return false;
-        }
-
-        return true;
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/PduPart.java b/src/com/android/messaging/mmslib/pdu/PduPart.java
deleted file mode 100644
index dcdb7a6..0000000
--- a/src/com/android/messaging/mmslib/pdu/PduPart.java
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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.android.messaging.mmslib.pdu;
-
-import android.net.Uri;
-import android.util.SparseArray;
-
-/**
- * The pdu part.
- */
-public class PduPart {
-    /**
-     * Well-Known Parameters.
-     */
-    public static final int P_Q                  = 0x80;
-    public static final int P_CHARSET            = 0x81;
-    public static final int P_LEVEL              = 0x82;
-    public static final int P_TYPE               = 0x83;
-    public static final int P_DEP_NAME           = 0x85;
-    public static final int P_DEP_FILENAME       = 0x86;
-    public static final int P_DIFFERENCES        = 0x87;
-    public static final int P_PADDING            = 0x88;
-    // This value of "TYPE" s used with Content-Type: multipart/related
-    public static final int P_CT_MR_TYPE         = 0x89;
-    public static final int P_DEP_START          = 0x8A;
-    public static final int P_DEP_START_INFO     = 0x8B;
-    public static final int P_DEP_COMMENT        = 0x8C;
-    public static final int P_DEP_DOMAIN         = 0x8D;
-    public static final int P_MAX_AGE            = 0x8E;
-    public static final int P_DEP_PATH           = 0x8F;
-    public static final int P_SECURE             = 0x90;
-    public static final int P_SEC                = 0x91;
-    public static final int P_MAC                = 0x92;
-    public static final int P_CREATION_DATE      = 0x93;
-    public static final int P_MODIFICATION_DATE  = 0x94;
-    public static final int P_READ_DATE          = 0x95;
-    public static final int P_SIZE               = 0x96;
-    public static final int P_NAME               = 0x97;
-    public static final int P_FILENAME           = 0x98;
-    public static final int P_START              = 0x99;
-    public static final int P_START_INFO         = 0x9A;
-    public static final int P_COMMENT            = 0x9B;
-    public static final int P_DOMAIN             = 0x9C;
-    public static final int P_PATH               = 0x9D;
-
-    /**
-     * Header field names.
-     */
-     public static final int P_CONTENT_TYPE       = 0x91;
-     public static final int P_CONTENT_LOCATION   = 0x8E;
-     public static final int P_CONTENT_ID         = 0xC0;
-     public static final int P_DEP_CONTENT_DISPOSITION = 0xAE;
-     public static final int P_CONTENT_DISPOSITION = 0xC5;
-    // The next header is unassigned header, use reserved header(0x48) value.
-    public static final int P_CONTENT_TRANSFER_ENCODING = 0xC8;
-
-    /**
-     * Content=Transfer-Encoding string.
-     */
-    public static final String CONTENT_TRANSFER_ENCODING =
-            "Content-Transfer-Encoding";
-
-    /**
-     * Value of Content-Transfer-Encoding.
-     */
-    public static final String P_BINARY = "binary";
-    public static final String P_7BIT = "7bit";
-    public static final String P_8BIT = "8bit";
-    public static final String P_BASE64 = "base64";
-    public static final String P_QUOTED_PRINTABLE = "quoted-printable";
-
-    /**
-     * Value of disposition can be set to PduPart when the value is octet in
-     * the PDU.
-     * "from-data" instead of Form-data<Octet 128>.
-     * "attachment" instead of Attachment<Octet 129>.
-     * "inline" instead of Inline<Octet 130>.
-     */
-    static final byte[] DISPOSITION_FROM_DATA = "from-data".getBytes();
-    static final byte[] DISPOSITION_ATTACHMENT = "attachment".getBytes();
-    static final byte[] DISPOSITION_INLINE = "inline".getBytes();
-
-    /**
-     * Content-Disposition value.
-     */
-    public static final int P_DISPOSITION_FROM_DATA = 0x80;
-    public static final int P_DISPOSITION_ATTACHMENT = 0x81;
-    public static final int P_DISPOSITION_INLINE = 0x82;
-
-    /**
-     * Header of part.
-     */
-    private SparseArray<Object> mPartHeader = null;
-
-    /**
-     * Data uri.
-     */
-    private Uri mUri = null;
-
-    /**
-     * Part data.
-     */
-    private byte[] mPartData = null;
-
-    private static final String TAG = "PduPart";
-
-    /**
-     * Empty Constructor.
-     */
-    public PduPart() {
-        mPartHeader = new SparseArray<Object>();
-    }
-
-    /**
-     * Set part data. The data are stored as byte array.
-     *
-     * @param data the data
-     */
-    public void setData(final byte[] data) {
-        mPartData = data;
-    }
-
-    /**
-     * @return The part data or null if the data wasn't set or
-     * the data is stored as Uri.
-     * @see #getDataUri
-     */
-    public byte[] getData() {
-        return mPartData;
-    }
-
-    /**
-     * Set data uri. The data are stored as Uri.
-     *
-     * @param uri the uri
-     */
-    public void setDataUri(final Uri uri) {
-        mUri = uri;
-    }
-
-    /**
-     * @return The Uri of the part data or null if the data wasn't set or
-     * the data is stored as byte array.
-     * @see #getData
-     */
-    public Uri getDataUri() {
-        return mUri;
-    }
-
-    /**
-     * Set Content-id value
-     *
-     * @param contentId the content-id value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setContentId(final byte[] contentId) {
-        if ((contentId == null) || (contentId.length == 0)) {
-            throw new IllegalArgumentException(
-                    "Content-Id may not be null or empty.");
-        }
-
-        if ((contentId.length > 1)
-                && ((char) contentId[0] == '<')
-                && ((char) contentId[contentId.length - 1] == '>')) {
-            mPartHeader.put(P_CONTENT_ID, contentId);
-            return;
-        }
-
-        // Insert beginning '<' and trailing '>' for Content-Id.
-        final byte[] buffer = new byte[contentId.length + 2];
-        buffer[0] = (byte) (0xff & '<');
-        buffer[buffer.length - 1] = (byte) (0xff & '>');
-        System.arraycopy(contentId, 0, buffer, 1, contentId.length);
-        mPartHeader.put(P_CONTENT_ID, buffer);
-    }
-
-    /**
-     * Get Content-id value.
-     *
-     * @return the value
-     */
-    public byte[] getContentId() {
-        return (byte[]) mPartHeader.get(P_CONTENT_ID);
-    }
-
-    /**
-     * Set Char-set value.
-     *
-     * @param charset the value
-     */
-    public void setCharset(final int charset) {
-        mPartHeader.put(P_CHARSET, charset);
-    }
-
-    /**
-     * Get Char-set value
-     *
-     * @return the charset value. Return 0 if charset was not set.
-     */
-    public int getCharset() {
-        final Integer charset = (Integer) mPartHeader.get(P_CHARSET);
-        if (charset == null) {
-            return 0;
-        } else {
-            return charset.intValue();
-        }
-    }
-
-    /**
-     * Set Content-Location value.
-     *
-     * @param contentLocation the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setContentLocation(final byte[] contentLocation) {
-        if (contentLocation == null) {
-            throw new NullPointerException("null content-location");
-        }
-
-        mPartHeader.put(P_CONTENT_LOCATION, contentLocation);
-    }
-
-    /**
-     * Get Content-Location value.
-     *
-     * @return the value
-     * return PduPart.disposition[0] instead of <Octet 128> (Form-data).
-     * return PduPart.disposition[1] instead of <Octet 129> (Attachment).
-     * return PduPart.disposition[2] instead of <Octet 130> (Inline).
-     */
-    public byte[] getContentLocation() {
-        return (byte[]) mPartHeader.get(P_CONTENT_LOCATION);
-    }
-
-    /**
-     * Set Content-Disposition value.
-     * Use PduPart.disposition[0] instead of <Octet 128> (Form-data).
-     * Use PduPart.disposition[1] instead of <Octet 129> (Attachment).
-     * Use PduPart.disposition[2] instead of <Octet 130> (Inline).
-     *
-     * @param contentDisposition the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setContentDisposition(final byte[] contentDisposition) {
-        if (contentDisposition == null) {
-            throw new NullPointerException("null content-disposition");
-        }
-
-        mPartHeader.put(P_CONTENT_DISPOSITION, contentDisposition);
-    }
-
-    /**
-     * Get Content-Disposition value.
-     *
-     * @return the value
-     */
-    public byte[] getContentDisposition() {
-        return (byte[]) mPartHeader.get(P_CONTENT_DISPOSITION);
-    }
-
-    /**
-     * Set Content-Type value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setContentType(final byte[] contentType) {
-        if (contentType == null) {
-            throw new NullPointerException("null content-type");
-        }
-
-        mPartHeader.put(P_CONTENT_TYPE, contentType);
-    }
-
-    /**
-     * Get Content-Type value of part.
-     *
-     * @return the value
-     */
-    public byte[] getContentType() {
-        return (byte[]) mPartHeader.get(P_CONTENT_TYPE);
-    }
-
-    /**
-     * Set Content-Transfer-Encoding value
-     *
-     * @param contentId the content-id value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setContentTransferEncoding(final byte[] contentTransferEncoding) {
-        if (contentTransferEncoding == null) {
-            throw new NullPointerException("null content-transfer-encoding");
-        }
-
-        mPartHeader.put(P_CONTENT_TRANSFER_ENCODING, contentTransferEncoding);
-    }
-
-    /**
-     * Get Content-Transfer-Encoding value.
-     *
-     * @return the value
-     */
-    public byte[] getContentTransferEncoding() {
-        return (byte[]) mPartHeader.get(P_CONTENT_TRANSFER_ENCODING);
-    }
-
-    /**
-     * Set Content-type parameter: name.
-     *
-     * @param name the name value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setName(final byte[] name) {
-        if (null == name) {
-            throw new NullPointerException("null content-id");
-        }
-
-        mPartHeader.put(P_NAME, name);
-    }
-
-    /**
-     * Get content-type parameter: name.
-     *
-     * @return the name
-     */
-    public byte[] getName() {
-        return (byte[]) mPartHeader.get(P_NAME);
-    }
-
-    /**
-     * Get Content-disposition parameter: filename
-     *
-     * @param fileName the filename value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setFilename(final byte[] fileName) {
-        if (null == fileName) {
-            throw new NullPointerException("null content-id");
-        }
-
-        mPartHeader.put(P_FILENAME, fileName);
-    }
-
-    /**
-     * Set Content-disposition parameter: filename
-     *
-     * @return the filename
-     */
-    public byte[] getFilename() {
-        return (byte[]) mPartHeader.get(P_FILENAME);
-    }
-
-    public String generateLocation() {
-        // Assumption: At least one of the content-location / name / filename
-        // or content-id should be set. This is guaranteed by the PduParser
-        // for incoming messages and by MM composer for outgoing messages.
-        byte[] location = (byte[]) mPartHeader.get(P_NAME);
-        if (null == location) {
-            location = (byte[]) mPartHeader.get(P_FILENAME);
-
-            if (null == location) {
-                location = (byte[]) mPartHeader.get(P_CONTENT_LOCATION);
-            }
-        }
-
-        if (null == location) {
-            final byte[] contentId = (byte[]) mPartHeader.get(P_CONTENT_ID);
-            return "cid:" + new String(contentId);
-        } else {
-            return new String(location);
-        }
-    }
-}
-
diff --git a/src/com/android/messaging/mmslib/pdu/PduPersister.java b/src/com/android/messaging/mmslib/pdu/PduPersister.java
deleted file mode 100644
index 436867a..0000000
--- a/src/com/android/messaging/mmslib/pdu/PduPersister.java
+++ /dev/null
@@ -1,1692 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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.android.messaging.mmslib.pdu;
-
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.DatabaseUtils;
-import android.database.sqlite.SQLiteException;
-import android.net.Uri;
-import android.provider.MediaStore;
-import android.provider.Telephony.Mms;
-import android.provider.Telephony.Mms.Addr;
-import android.provider.Telephony.Mms.Part;
-import android.provider.Telephony.MmsSms;
-import android.provider.Telephony.MmsSms.PendingMessages;
-import androidx.collection.ArrayMap;
-import androidx.collection.SimpleArrayMap;
-import android.telephony.PhoneNumberUtils;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.SparseArray;
-import android.util.SparseIntArray;
-
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-import com.android.messaging.mmslib.MmsException;
-import com.android.messaging.mmslib.SqliteWrapper;
-import com.android.messaging.mmslib.util.DownloadDrmHelper;
-import com.android.messaging.mmslib.util.DrmConvertSession;
-import com.android.messaging.mmslib.util.PduCache;
-import com.android.messaging.mmslib.util.PduCacheEntry;
-import com.android.messaging.sms.MmsSmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.UriUtil;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Map;
-
-/**
- * This class is the high-level manager of PDU storage.
- */
-public class PduPersister {
-    private static final String TAG = "PduPersister";
-    private static final boolean LOCAL_LOGV = false;
-
-    /**
-     * The uri of temporary drm objects.
-     */
-    public static final String TEMPORARY_DRM_OBJECT_URI =
-            "content://mms/" + Long.MAX_VALUE + "/part";
-
-    /**
-     * Indicate that we transiently failed to process a MM.
-     */
-    public static final int PROC_STATUS_TRANSIENT_FAILURE = 1;
-
-    /**
-     * Indicate that we permanently failed to process a MM.
-     */
-    public static final int PROC_STATUS_PERMANENTLY_FAILURE = 2;
-
-    /**
-     * Indicate that we have successfully processed a MM.
-     */
-    public static final int PROC_STATUS_COMPLETED = 3;
-
-    public static final String BEGIN_VCARD = "BEGIN:VCARD";
-
-    private static PduPersister sPersister;
-
-    private static final PduCache PDU_CACHE_INSTANCE;
-
-    private static final int[] ADDRESS_FIELDS = new int[]{
-            PduHeaders.BCC,
-            PduHeaders.CC,
-            PduHeaders.FROM,
-            PduHeaders.TO
-    };
-
-    public static final String[] PDU_PROJECTION = new String[]{
-            Mms._ID,
-            Mms.MESSAGE_BOX,
-            Mms.THREAD_ID,
-            Mms.RETRIEVE_TEXT,
-            Mms.SUBJECT,
-            Mms.CONTENT_LOCATION,
-            Mms.CONTENT_TYPE,
-            Mms.MESSAGE_CLASS,
-            Mms.MESSAGE_ID,
-            Mms.RESPONSE_TEXT,
-            Mms.TRANSACTION_ID,
-            Mms.CONTENT_CLASS,
-            Mms.DELIVERY_REPORT,
-            Mms.MESSAGE_TYPE,
-            Mms.MMS_VERSION,
-            Mms.PRIORITY,
-            Mms.READ_REPORT,
-            Mms.READ_STATUS,
-            Mms.REPORT_ALLOWED,
-            Mms.RETRIEVE_STATUS,
-            Mms.STATUS,
-            Mms.DATE,
-            Mms.DELIVERY_TIME,
-            Mms.EXPIRY,
-            Mms.MESSAGE_SIZE,
-            Mms.SUBJECT_CHARSET,
-            Mms.RETRIEVE_TEXT_CHARSET,
-            Mms.READ,
-            Mms.SEEN,
-    };
-
-    public static final int PDU_COLUMN_ID                    = 0;
-    public static final int PDU_COLUMN_MESSAGE_BOX           = 1;
-    public static final int PDU_COLUMN_THREAD_ID             = 2;
-    public static final int PDU_COLUMN_RETRIEVE_TEXT         = 3;
-    public static final int PDU_COLUMN_SUBJECT               = 4;
-    public static final int PDU_COLUMN_CONTENT_LOCATION      = 5;
-    public static final int PDU_COLUMN_CONTENT_TYPE          = 6;
-    public static final int PDU_COLUMN_MESSAGE_CLASS         = 7;
-    public static final int PDU_COLUMN_MESSAGE_ID            = 8;
-    public static final int PDU_COLUMN_RESPONSE_TEXT         = 9;
-    public static final int PDU_COLUMN_TRANSACTION_ID        = 10;
-    public static final int PDU_COLUMN_CONTENT_CLASS         = 11;
-    public static final int PDU_COLUMN_DELIVERY_REPORT       = 12;
-    public static final int PDU_COLUMN_MESSAGE_TYPE          = 13;
-    public static final int PDU_COLUMN_MMS_VERSION           = 14;
-    public static final int PDU_COLUMN_PRIORITY              = 15;
-    public static final int PDU_COLUMN_READ_REPORT           = 16;
-    public static final int PDU_COLUMN_READ_STATUS           = 17;
-    public static final int PDU_COLUMN_REPORT_ALLOWED        = 18;
-    public static final int PDU_COLUMN_RETRIEVE_STATUS       = 19;
-    public static final int PDU_COLUMN_STATUS                = 20;
-    public static final int PDU_COLUMN_DATE                  = 21;
-    public static final int PDU_COLUMN_DELIVERY_TIME         = 22;
-    public static final int PDU_COLUMN_EXPIRY                = 23;
-    public static final int PDU_COLUMN_MESSAGE_SIZE          = 24;
-    public static final int PDU_COLUMN_SUBJECT_CHARSET       = 25;
-    public static final int PDU_COLUMN_RETRIEVE_TEXT_CHARSET = 26;
-    public static final int PDU_COLUMN_READ                  = 27;
-    public static final int PDU_COLUMN_SEEN                  = 28;
-
-    private static final String[] PART_PROJECTION = new String[] {
-            Part._ID,
-            Part.CHARSET,
-            Part.CONTENT_DISPOSITION,
-            Part.CONTENT_ID,
-            Part.CONTENT_LOCATION,
-            Part.CONTENT_TYPE,
-            Part.FILENAME,
-            Part.NAME,
-            Part.TEXT
-    };
-
-    private static final int PART_COLUMN_ID                  = 0;
-    private static final int PART_COLUMN_CHARSET             = 1;
-    private static final int PART_COLUMN_CONTENT_DISPOSITION = 2;
-    private static final int PART_COLUMN_CONTENT_ID          = 3;
-    private static final int PART_COLUMN_CONTENT_LOCATION    = 4;
-    private static final int PART_COLUMN_CONTENT_TYPE        = 5;
-    private static final int PART_COLUMN_FILENAME            = 6;
-    private static final int PART_COLUMN_NAME                = 7;
-    private static final int PART_COLUMN_TEXT                = 8;
-
-    private static final SimpleArrayMap<Uri, Integer> MESSAGE_BOX_MAP;
-
-    // These map are used for convenience in persist() and load().
-    private static final SparseIntArray CHARSET_COLUMN_INDEX_MAP;
-
-    private static final SparseIntArray ENCODED_STRING_COLUMN_INDEX_MAP;
-
-    private static final SparseIntArray TEXT_STRING_COLUMN_INDEX_MAP;
-
-    private static final SparseIntArray OCTET_COLUMN_INDEX_MAP;
-
-    private static final SparseIntArray LONG_COLUMN_INDEX_MAP;
-
-    private static final SparseArray<String> CHARSET_COLUMN_NAME_MAP;
-
-    private static final SparseArray<String> ENCODED_STRING_COLUMN_NAME_MAP;
-
-    private static final SparseArray<String> TEXT_STRING_COLUMN_NAME_MAP;
-
-    private static final SparseArray<String> OCTET_COLUMN_NAME_MAP;
-
-    private static final SparseArray<String> LONG_COLUMN_NAME_MAP;
-
-    static {
-        MESSAGE_BOX_MAP = new SimpleArrayMap<Uri, Integer>();
-        MESSAGE_BOX_MAP.put(Mms.Inbox.CONTENT_URI, Mms.MESSAGE_BOX_INBOX);
-        MESSAGE_BOX_MAP.put(Mms.Sent.CONTENT_URI, Mms.MESSAGE_BOX_SENT);
-        MESSAGE_BOX_MAP.put(Mms.Draft.CONTENT_URI, Mms.MESSAGE_BOX_DRAFTS);
-        MESSAGE_BOX_MAP.put(Mms.Outbox.CONTENT_URI, Mms.MESSAGE_BOX_OUTBOX);
-
-        CHARSET_COLUMN_INDEX_MAP = new SparseIntArray();
-        CHARSET_COLUMN_INDEX_MAP.put(PduHeaders.SUBJECT, PDU_COLUMN_SUBJECT_CHARSET);
-        CHARSET_COLUMN_INDEX_MAP.put(PduHeaders.RETRIEVE_TEXT, PDU_COLUMN_RETRIEVE_TEXT_CHARSET);
-
-        CHARSET_COLUMN_NAME_MAP = new SparseArray<String>();
-        CHARSET_COLUMN_NAME_MAP.put(PduHeaders.SUBJECT, Mms.SUBJECT_CHARSET);
-        CHARSET_COLUMN_NAME_MAP.put(PduHeaders.RETRIEVE_TEXT, Mms.RETRIEVE_TEXT_CHARSET);
-
-        // Encoded string field code -> column index/name map.
-        ENCODED_STRING_COLUMN_INDEX_MAP = new SparseIntArray();
-        ENCODED_STRING_COLUMN_INDEX_MAP.put(PduHeaders.RETRIEVE_TEXT, PDU_COLUMN_RETRIEVE_TEXT);
-        ENCODED_STRING_COLUMN_INDEX_MAP.put(PduHeaders.SUBJECT, PDU_COLUMN_SUBJECT);
-
-        ENCODED_STRING_COLUMN_NAME_MAP = new SparseArray<String>();
-        ENCODED_STRING_COLUMN_NAME_MAP.put(PduHeaders.RETRIEVE_TEXT, Mms.RETRIEVE_TEXT);
-        ENCODED_STRING_COLUMN_NAME_MAP.put(PduHeaders.SUBJECT, Mms.SUBJECT);
-
-        // Text string field code -> column index/name map.
-        TEXT_STRING_COLUMN_INDEX_MAP = new SparseIntArray();
-        TEXT_STRING_COLUMN_INDEX_MAP.put(PduHeaders.CONTENT_LOCATION, PDU_COLUMN_CONTENT_LOCATION);
-        TEXT_STRING_COLUMN_INDEX_MAP.put(PduHeaders.CONTENT_TYPE, PDU_COLUMN_CONTENT_TYPE);
-        TEXT_STRING_COLUMN_INDEX_MAP.put(PduHeaders.MESSAGE_CLASS, PDU_COLUMN_MESSAGE_CLASS);
-        TEXT_STRING_COLUMN_INDEX_MAP.put(PduHeaders.MESSAGE_ID, PDU_COLUMN_MESSAGE_ID);
-        TEXT_STRING_COLUMN_INDEX_MAP.put(PduHeaders.RESPONSE_TEXT, PDU_COLUMN_RESPONSE_TEXT);
-        TEXT_STRING_COLUMN_INDEX_MAP.put(PduHeaders.TRANSACTION_ID, PDU_COLUMN_TRANSACTION_ID);
-
-        TEXT_STRING_COLUMN_NAME_MAP = new SparseArray<String>();
-        TEXT_STRING_COLUMN_NAME_MAP.put(PduHeaders.CONTENT_LOCATION, Mms.CONTENT_LOCATION);
-        TEXT_STRING_COLUMN_NAME_MAP.put(PduHeaders.CONTENT_TYPE, Mms.CONTENT_TYPE);
-        TEXT_STRING_COLUMN_NAME_MAP.put(PduHeaders.MESSAGE_CLASS, Mms.MESSAGE_CLASS);
-        TEXT_STRING_COLUMN_NAME_MAP.put(PduHeaders.MESSAGE_ID, Mms.MESSAGE_ID);
-        TEXT_STRING_COLUMN_NAME_MAP.put(PduHeaders.RESPONSE_TEXT, Mms.RESPONSE_TEXT);
-        TEXT_STRING_COLUMN_NAME_MAP.put(PduHeaders.TRANSACTION_ID, Mms.TRANSACTION_ID);
-
-        // Octet field code -> column index/name map.
-        OCTET_COLUMN_INDEX_MAP = new SparseIntArray();
-        OCTET_COLUMN_INDEX_MAP.put(PduHeaders.CONTENT_CLASS, PDU_COLUMN_CONTENT_CLASS);
-        OCTET_COLUMN_INDEX_MAP.put(PduHeaders.DELIVERY_REPORT, PDU_COLUMN_DELIVERY_REPORT);
-        OCTET_COLUMN_INDEX_MAP.put(PduHeaders.MESSAGE_TYPE, PDU_COLUMN_MESSAGE_TYPE);
-        OCTET_COLUMN_INDEX_MAP.put(PduHeaders.MMS_VERSION, PDU_COLUMN_MMS_VERSION);
-        OCTET_COLUMN_INDEX_MAP.put(PduHeaders.PRIORITY, PDU_COLUMN_PRIORITY);
-        OCTET_COLUMN_INDEX_MAP.put(PduHeaders.READ_REPORT, PDU_COLUMN_READ_REPORT);
-        OCTET_COLUMN_INDEX_MAP.put(PduHeaders.READ_STATUS, PDU_COLUMN_READ_STATUS);
-        OCTET_COLUMN_INDEX_MAP.put(PduHeaders.REPORT_ALLOWED, PDU_COLUMN_REPORT_ALLOWED);
-        OCTET_COLUMN_INDEX_MAP.put(PduHeaders.RETRIEVE_STATUS, PDU_COLUMN_RETRIEVE_STATUS);
-        OCTET_COLUMN_INDEX_MAP.put(PduHeaders.STATUS, PDU_COLUMN_STATUS);
-
-        OCTET_COLUMN_NAME_MAP = new SparseArray<String>();
-        OCTET_COLUMN_NAME_MAP.put(PduHeaders.CONTENT_CLASS, Mms.CONTENT_CLASS);
-        OCTET_COLUMN_NAME_MAP.put(PduHeaders.DELIVERY_REPORT, Mms.DELIVERY_REPORT);
-        OCTET_COLUMN_NAME_MAP.put(PduHeaders.MESSAGE_TYPE, Mms.MESSAGE_TYPE);
-        OCTET_COLUMN_NAME_MAP.put(PduHeaders.MMS_VERSION, Mms.MMS_VERSION);
-        OCTET_COLUMN_NAME_MAP.put(PduHeaders.PRIORITY, Mms.PRIORITY);
-        OCTET_COLUMN_NAME_MAP.put(PduHeaders.READ_REPORT, Mms.READ_REPORT);
-        OCTET_COLUMN_NAME_MAP.put(PduHeaders.READ_STATUS, Mms.READ_STATUS);
-        OCTET_COLUMN_NAME_MAP.put(PduHeaders.REPORT_ALLOWED, Mms.REPORT_ALLOWED);
-        OCTET_COLUMN_NAME_MAP.put(PduHeaders.RETRIEVE_STATUS, Mms.RETRIEVE_STATUS);
-        OCTET_COLUMN_NAME_MAP.put(PduHeaders.STATUS, Mms.STATUS);
-
-        // Long field code -> column index/name map.
-        LONG_COLUMN_INDEX_MAP = new SparseIntArray();
-        LONG_COLUMN_INDEX_MAP.put(PduHeaders.DATE, PDU_COLUMN_DATE);
-        LONG_COLUMN_INDEX_MAP.put(PduHeaders.DELIVERY_TIME, PDU_COLUMN_DELIVERY_TIME);
-        LONG_COLUMN_INDEX_MAP.put(PduHeaders.EXPIRY, PDU_COLUMN_EXPIRY);
-        LONG_COLUMN_INDEX_MAP.put(PduHeaders.MESSAGE_SIZE, PDU_COLUMN_MESSAGE_SIZE);
-
-        LONG_COLUMN_NAME_MAP = new SparseArray<String>();
-        LONG_COLUMN_NAME_MAP.put(PduHeaders.DATE, Mms.DATE);
-        LONG_COLUMN_NAME_MAP.put(PduHeaders.DELIVERY_TIME, Mms.DELIVERY_TIME);
-        LONG_COLUMN_NAME_MAP.put(PduHeaders.EXPIRY, Mms.EXPIRY);
-        LONG_COLUMN_NAME_MAP.put(PduHeaders.MESSAGE_SIZE, Mms.MESSAGE_SIZE);
-
-        PDU_CACHE_INSTANCE = PduCache.getInstance();
-    }
-
-    private final Context mContext;
-
-    private final ContentResolver mContentResolver;
-
-    private PduPersister(final Context context) {
-        mContext = context;
-        mContentResolver = context.getContentResolver();
-    }
-
-    /** Get(or create if not exist) an instance of PduPersister */
-    public static PduPersister getPduPersister(final Context context) {
-        if ((sPersister == null) || !context.equals(sPersister.mContext)) {
-            sPersister = new PduPersister(context);
-        }
-        if (LOCAL_LOGV) {
-            LogUtil.v(TAG, "PduPersister getPduPersister");
-        }
-
-        return sPersister;
-    }
-
-    private void setEncodedStringValueToHeaders(
-            final Cursor c, final int columnIndex,
-            final PduHeaders headers, final int mapColumn) {
-        final String s = c.getString(columnIndex);
-        if ((s != null) && (s.length() > 0)) {
-            final int charsetColumnIndex = CHARSET_COLUMN_INDEX_MAP.get(mapColumn);
-            final int charset = c.getInt(charsetColumnIndex);
-            final EncodedStringValue value = new EncodedStringValue(
-                    charset, getBytes(s));
-            headers.setEncodedStringValue(value, mapColumn);
-        }
-    }
-
-    private void setTextStringToHeaders(
-            final Cursor c, final int columnIndex,
-            final PduHeaders headers, final int mapColumn) {
-        final String s = c.getString(columnIndex);
-        if (s != null) {
-            headers.setTextString(getBytes(s), mapColumn);
-        }
-    }
-
-    private void setOctetToHeaders(
-            final Cursor c, final int columnIndex,
-            final PduHeaders headers, final int mapColumn) throws InvalidHeaderValueException {
-        if (!c.isNull(columnIndex)) {
-            final int b = c.getInt(columnIndex);
-            headers.setOctet(b, mapColumn);
-        }
-    }
-
-    private void setLongToHeaders(
-            final Cursor c, final int columnIndex,
-            final PduHeaders headers, final int mapColumn) {
-        if (!c.isNull(columnIndex)) {
-            final long l = c.getLong(columnIndex);
-            headers.setLongInteger(l, mapColumn);
-        }
-    }
-
-    private Integer getIntegerFromPartColumn(final Cursor c, final int columnIndex) {
-        if (!c.isNull(columnIndex)) {
-            return c.getInt(columnIndex);
-        }
-        return null;
-    }
-
-    private byte[] getByteArrayFromPartColumn(final Cursor c, final int columnIndex) {
-        if (!c.isNull(columnIndex)) {
-            return getBytes(c.getString(columnIndex));
-        }
-        return null;
-    }
-
-    private PduPart[] loadParts(final long msgId) throws MmsException {
-        final Cursor c = SqliteWrapper.query(mContext, mContentResolver,
-                Uri.parse("content://mms/" + msgId + "/part"),
-                PART_PROJECTION, null, null, null);
-
-        PduPart[] parts = null;
-
-        try {
-            if ((c == null) || (c.getCount() == 0)) {
-                if (LOCAL_LOGV) {
-                    LogUtil.v(TAG, "loadParts(" + msgId + "): no part to load.");
-                }
-                return null;
-            }
-
-            final int partCount = c.getCount();
-            int partIdx = 0;
-            parts = new PduPart[partCount];
-            while (c.moveToNext()) {
-                final PduPart part = new PduPart();
-                final Integer charset = getIntegerFromPartColumn(
-                        c, PART_COLUMN_CHARSET);
-                if (charset != null) {
-                    part.setCharset(charset);
-                }
-
-                final byte[] contentDisposition = getByteArrayFromPartColumn(
-                        c, PART_COLUMN_CONTENT_DISPOSITION);
-                if (contentDisposition != null) {
-                    part.setContentDisposition(contentDisposition);
-                }
-
-                final byte[] contentId = getByteArrayFromPartColumn(
-                        c, PART_COLUMN_CONTENT_ID);
-                if (contentId != null) {
-                    part.setContentId(contentId);
-                }
-
-                final byte[] contentLocation = getByteArrayFromPartColumn(
-                        c, PART_COLUMN_CONTENT_LOCATION);
-                if (contentLocation != null) {
-                    part.setContentLocation(contentLocation);
-                }
-
-                final byte[] contentType = getByteArrayFromPartColumn(
-                        c, PART_COLUMN_CONTENT_TYPE);
-                if (contentType != null) {
-                    part.setContentType(contentType);
-                } else {
-                    throw new MmsException("Content-Type must be set.");
-                }
-
-                final byte[] fileName = getByteArrayFromPartColumn(
-                        c, PART_COLUMN_FILENAME);
-                if (fileName != null) {
-                    part.setFilename(fileName);
-                }
-
-                final byte[] name = getByteArrayFromPartColumn(
-                        c, PART_COLUMN_NAME);
-                if (name != null) {
-                    part.setName(name);
-                }
-
-                // Construct a Uri for this part.
-                final long partId = c.getLong(PART_COLUMN_ID);
-                final Uri partURI = Uri.parse("content://mms/part/" + partId);
-                part.setDataUri(partURI);
-
-                // For images/audio/video, we won't keep their data in Part
-                // because their renderer accept Uri as source.
-                final String type = toIsoString(contentType);
-                if (!ContentType.isImageType(type)
-                        && !ContentType.isAudioType(type)
-                        && !ContentType.isVideoType(type)) {
-                    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                    InputStream is = null;
-
-                    // Store simple string values directly in the database instead of an
-                    // external file.  This makes the text searchable and retrieval slightly
-                    // faster.
-                    if (ContentType.TEXT_PLAIN.equals(type) || ContentType.APP_SMIL.equals(type)
-                            || ContentType.TEXT_HTML.equals(type)) {
-                        final String text = c.getString(PART_COLUMN_TEXT);
-                        final byte[] blob = new EncodedStringValue(
-                                charset != null ? charset : CharacterSets.DEFAULT_CHARSET,
-                                text != null ? text : "")
-                                .getTextString();
-                        baos.write(blob, 0, blob.length);
-                    } else {
-
-                        try {
-                            is = mContentResolver.openInputStream(partURI);
-
-                            final byte[] buffer = new byte[256];
-                            int len = is.read(buffer);
-                            while (len >= 0) {
-                                baos.write(buffer, 0, len);
-                                len = is.read(buffer);
-                            }
-                        } catch (final IOException e) {
-                            Log.e(TAG, "Failed to load part data", e);
-                            c.close();
-                            throw new MmsException(e);
-                        } finally {
-                            if (is != null) {
-                                try {
-                                    is.close();
-                                } catch (final IOException e) {
-                                    Log.e(TAG, "Failed to close stream", e);
-                                } // Ignore
-                            }
-                        }
-                    }
-                    part.setData(baos.toByteArray());
-                }
-                parts[partIdx++] = part;
-            }
-        } finally {
-            if (c != null) {
-                c.close();
-            }
-        }
-
-        return parts;
-    }
-
-    private void loadAddress(final long msgId, final PduHeaders headers) {
-        final Cursor c = SqliteWrapper.query(mContext, mContentResolver,
-                Uri.parse("content://mms/" + msgId + "/addr"),
-                new String[]{Addr.ADDRESS, Addr.CHARSET, Addr.TYPE},
-                null, null, null);
-
-        if (c != null) {
-            try {
-                while (c.moveToNext()) {
-                    final String addr = c.getString(0);
-                    if (!TextUtils.isEmpty(addr)) {
-                        final int addrType = c.getInt(2);
-                        switch (addrType) {
-                            case PduHeaders.FROM:
-                                headers.setEncodedStringValue(
-                                        new EncodedStringValue(c.getInt(1), getBytes(addr)),
-                                        addrType);
-                                break;
-                            case PduHeaders.TO:
-                            case PduHeaders.CC:
-                            case PduHeaders.BCC:
-                                headers.appendEncodedStringValue(
-                                        new EncodedStringValue(c.getInt(1), getBytes(addr)),
-                                        addrType);
-                                break;
-                            default:
-                                Log.e(TAG, "Unknown address type: " + addrType);
-                                break;
-                        }
-                    }
-                }
-            } finally {
-                c.close();
-            }
-        }
-    }
-
-    /**
-     * Load a PDU from a given cursor
-     *
-     * @param c The cursor
-     * @return A parsed PDU from the database row
-     */
-    public GenericPdu load(final Cursor c) throws MmsException {
-        final PduHeaders headers = new PduHeaders();
-        final long msgId = c.getLong(PDU_COLUMN_ID);
-        // Fill in the headers from the PDU columns
-        loadHeadersFromCursor(c, headers);
-        // Load address information of the MM.
-        loadAddress(msgId, headers);
-        // Load parts for the PDU body
-        final int msgType = headers.getOctet(PduHeaders.MESSAGE_TYPE);
-        final PduBody body = loadBody(msgId, msgType);
-        return createPdu(msgType, headers, body);
-    }
-
-    /**
-     * Load a PDU from storage by given Uri.
-     *
-     * @param uri            The Uri of the PDU to be loaded.
-     * @return A generic PDU object, it may be cast to dedicated PDU.
-     * @throws MmsException Failed to load some fields of a PDU.
-     */
-    public GenericPdu load(final Uri uri) throws MmsException {
-        GenericPdu pdu = null;
-        PduCacheEntry cacheEntry = null;
-        int msgBox = 0;
-        final long threadId = -1;
-        try {
-            synchronized (PDU_CACHE_INSTANCE) {
-                if (PDU_CACHE_INSTANCE.isUpdating(uri)) {
-                    if (LOCAL_LOGV) {
-                        LogUtil.v(TAG, "load: " + uri + " blocked by isUpdating()");
-                    }
-                    try {
-                        PDU_CACHE_INSTANCE.wait();
-                    } catch (final InterruptedException e) {
-                        Log.e(TAG, "load: ", e);
-                    }
-                }
-
-                // Check if the pdu is already loaded
-                cacheEntry = PDU_CACHE_INSTANCE.get(uri);
-                if (cacheEntry != null) {
-                    return cacheEntry.getPdu();
-                }
-
-                // Tell the cache to indicate to other callers that this item
-                // is currently being updated.
-                PDU_CACHE_INSTANCE.setUpdating(uri, true);
-            }
-
-            final Cursor c = SqliteWrapper.query(mContext, mContentResolver, uri,
-                    PDU_PROJECTION, null, null, null);
-            final PduHeaders headers = new PduHeaders();
-            final long msgId = ContentUris.parseId(uri);
-
-            try {
-                if ((c == null) || (c.getCount() != 1) || !c.moveToFirst()) {
-                    return null;  // MMS not found
-                }
-
-                msgBox = c.getInt(PDU_COLUMN_MESSAGE_BOX);
-                //threadId = c.getLong(PDU_COLUMN_THREAD_ID);
-                loadHeadersFromCursor(c, headers);
-            } finally {
-                if (c != null) {
-                    c.close();
-                }
-            }
-
-            // Check whether 'msgId' has been assigned a valid value.
-            if (msgId == -1L) {
-                throw new MmsException("Error! ID of the message: -1.");
-            }
-
-            // Load address information of the MM.
-            loadAddress(msgId, headers);
-
-            final int msgType = headers.getOctet(PduHeaders.MESSAGE_TYPE);
-            final PduBody body = loadBody(msgId, msgType);
-            pdu = createPdu(msgType, headers, body);
-        } finally {
-            synchronized (PDU_CACHE_INSTANCE) {
-                if (pdu != null) {
-                    Assert.isNull(PDU_CACHE_INSTANCE.get(uri), "Pdu exists for " + uri);
-                    // Update the cache entry with the real info
-                    cacheEntry = new PduCacheEntry(pdu, msgBox, threadId);
-                    PDU_CACHE_INSTANCE.put(uri, cacheEntry);
-                }
-                PDU_CACHE_INSTANCE.setUpdating(uri, false);
-                PDU_CACHE_INSTANCE.notifyAll(); // tell anybody waiting on this entry to go ahead
-            }
-        }
-        return pdu;
-    }
-
-    private void loadHeadersFromCursor(final Cursor c, final PduHeaders headers)
-            throws InvalidHeaderValueException {
-        for (int i = ENCODED_STRING_COLUMN_INDEX_MAP.size(); --i >= 0; ) {
-            setEncodedStringValueToHeaders(
-                    c, ENCODED_STRING_COLUMN_INDEX_MAP.valueAt(i), headers,
-                    ENCODED_STRING_COLUMN_INDEX_MAP.keyAt(i));
-        }
-        for (int i = TEXT_STRING_COLUMN_INDEX_MAP.size(); --i >= 0; ) {
-            setTextStringToHeaders(
-                    c, TEXT_STRING_COLUMN_INDEX_MAP.valueAt(i), headers,
-                    TEXT_STRING_COLUMN_INDEX_MAP.keyAt(i));
-        }
-        for (int i = OCTET_COLUMN_INDEX_MAP.size(); --i >= 0; ) {
-            setOctetToHeaders(
-                    c, OCTET_COLUMN_INDEX_MAP.valueAt(i), headers,
-                    OCTET_COLUMN_INDEX_MAP.keyAt(i));
-        }
-        for (int i = LONG_COLUMN_INDEX_MAP.size(); --i >= 0; ) {
-            setLongToHeaders(
-                    c, LONG_COLUMN_INDEX_MAP.valueAt(i), headers,
-                    LONG_COLUMN_INDEX_MAP.keyAt(i));
-        }
-    }
-
-    private GenericPdu createPdu(final int msgType, final PduHeaders headers, final PduBody body)
-            throws MmsException {
-        switch (msgType) {
-            case PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND:
-                return new NotificationInd(headers);
-            case PduHeaders.MESSAGE_TYPE_DELIVERY_IND:
-                return new DeliveryInd(headers);
-            case PduHeaders.MESSAGE_TYPE_READ_ORIG_IND:
-                return new ReadOrigInd(headers);
-            case PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF:
-                return new RetrieveConf(headers, body);
-            case PduHeaders.MESSAGE_TYPE_SEND_REQ:
-                return new SendReq(headers, body);
-            case PduHeaders.MESSAGE_TYPE_ACKNOWLEDGE_IND:
-                return new AcknowledgeInd(headers);
-            case PduHeaders.MESSAGE_TYPE_NOTIFYRESP_IND:
-                return new NotifyRespInd(headers);
-            case PduHeaders.MESSAGE_TYPE_READ_REC_IND:
-                return new ReadRecInd(headers);
-            case PduHeaders.MESSAGE_TYPE_SEND_CONF:
-            case PduHeaders.MESSAGE_TYPE_FORWARD_REQ:
-            case PduHeaders.MESSAGE_TYPE_FORWARD_CONF:
-            case PduHeaders.MESSAGE_TYPE_MBOX_STORE_REQ:
-            case PduHeaders.MESSAGE_TYPE_MBOX_STORE_CONF:
-            case PduHeaders.MESSAGE_TYPE_MBOX_VIEW_REQ:
-            case PduHeaders.MESSAGE_TYPE_MBOX_VIEW_CONF:
-            case PduHeaders.MESSAGE_TYPE_MBOX_UPLOAD_REQ:
-            case PduHeaders.MESSAGE_TYPE_MBOX_UPLOAD_CONF:
-            case PduHeaders.MESSAGE_TYPE_MBOX_DELETE_REQ:
-            case PduHeaders.MESSAGE_TYPE_MBOX_DELETE_CONF:
-            case PduHeaders.MESSAGE_TYPE_MBOX_DESCR:
-            case PduHeaders.MESSAGE_TYPE_DELETE_REQ:
-            case PduHeaders.MESSAGE_TYPE_DELETE_CONF:
-            case PduHeaders.MESSAGE_TYPE_CANCEL_REQ:
-            case PduHeaders.MESSAGE_TYPE_CANCEL_CONF:
-                throw new MmsException(
-                        "Unsupported PDU type: " + Integer.toHexString(msgType));
-
-            default:
-                throw new MmsException(
-                        "Unrecognized PDU type: " + Integer.toHexString(msgType));
-        }
-    }
-
-    private PduBody loadBody(final long msgId, final int msgType) throws MmsException {
-        final PduBody body = new PduBody();
-
-        // For PDU which type is M_retrieve.conf or Send.req, we should
-        // load multiparts and put them into the body of the PDU.
-        if ((msgType == PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF)
-                || (msgType == PduHeaders.MESSAGE_TYPE_SEND_REQ)) {
-            final PduPart[] parts = loadParts(msgId);
-            if (parts != null) {
-                final int partsNum = parts.length;
-                for (int i = 0; i < partsNum; i++) {
-                    body.addPart(parts[i]);
-                }
-            }
-        }
-
-        return body;
-    }
-
-    private void persistAddress(
-            final long msgId, final int type, final EncodedStringValue[] array) {
-        final ContentValues values = new ContentValues(3);
-
-        for (final EncodedStringValue addr : array) {
-            values.clear(); // Clear all values first.
-            values.put(Addr.ADDRESS, toIsoString(addr.getTextString()));
-            values.put(Addr.CHARSET, addr.getCharacterSet());
-            values.put(Addr.TYPE, type);
-
-            final Uri uri = Uri.parse("content://mms/" + msgId + "/addr");
-            SqliteWrapper.insert(mContext, mContentResolver, uri, values);
-        }
-    }
-
-    private static String getPartContentType(final PduPart part) {
-        return part.getContentType() == null ? null : toIsoString(part.getContentType());
-    }
-
-    private static void getValues(final PduPart part, final ContentValues values) {
-        byte[] bytes = part.getFilename();
-        if (bytes != null) {
-            values.put(Part.FILENAME, new String(bytes));
-        }
-
-        bytes = part.getName();
-        if (bytes != null) {
-            values.put(Part.NAME, new String(bytes));
-        }
-
-        bytes = part.getContentDisposition();
-        if (bytes != null) {
-            values.put(Part.CONTENT_DISPOSITION, toIsoString(bytes));
-        }
-
-        bytes = part.getContentId();
-        if (bytes != null) {
-            values.put(Part.CONTENT_ID, toIsoString(bytes));
-        }
-
-        bytes = part.getContentLocation();
-        if (bytes != null) {
-            values.put(Part.CONTENT_LOCATION, toIsoString(bytes));
-        }
-    }
-
-    public Uri persistPart(final PduPart part, final long msgId,
-            final Map<Uri, InputStream> preOpenedFiles) throws MmsException {
-        final Uri uri = Uri.parse("content://mms/" + msgId + "/part");
-        final ContentValues values = new ContentValues(8);
-
-        final int charset = part.getCharset();
-        if (charset != 0) {
-            values.put(Part.CHARSET, charset);
-        }
-
-        String contentType = getPartContentType(part);
-        final byte[] data = part.getData();
-
-        if (LOCAL_LOGV) {
-            LogUtil.v(TAG, "PduPersister.persistPart part: " + uri + " contentType: " +
-                    contentType);
-        }
-
-        if (contentType != null) {
-            // There is no "image/jpg" in Android (and it's an invalid mimetype).
-            // Change it to "image/jpeg"
-            if (ContentType.IMAGE_JPG.equals(contentType)) {
-                contentType = ContentType.IMAGE_JPEG;
-            }
-
-            // On somes phones, a vcard comes in as text/plain instead of text/v-card.
-            // Fix it if necessary.
-            if (ContentType.TEXT_PLAIN.equals(contentType) && data != null) {
-                // There might be a more efficient way to just check the beginning of the string
-                // without encoding the whole thing, but we're concerned that with various
-                // characters sets, just comparing the byte data to BEGIN_VCARD would not be
-                // reliable.
-                final String encodedDataString = new EncodedStringValue(charset, data).getString();
-                if (encodedDataString != null && encodedDataString.startsWith(BEGIN_VCARD)) {
-                    contentType = ContentType.TEXT_VCARD;
-                    part.setContentType(contentType.getBytes());
-                    if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                        LogUtil.d(TAG, "PduPersister.persistPart part: " + uri + " contentType: " +
-                                contentType + " changing to vcard");
-                    }
-                }
-            }
-
-            values.put(Part.CONTENT_TYPE, contentType);
-            // To ensure the SMIL part is always the first part.
-            if (ContentType.APP_SMIL.equals(contentType)) {
-                values.put(Part.SEQ, -1);
-            }
-        } else {
-            throw new MmsException("MIME type of the part must be set.");
-        }
-
-        getValues(part, values);
-
-        Uri res = null;
-
-        try {
-            res = SqliteWrapper.insert(mContext, mContentResolver, uri, values);
-        } catch (IllegalStateException e) {
-            // Currently the MMS provider throws an IllegalStateException when it's out of space
-            LogUtil.e(TAG, "SqliteWrapper.insert threw: ", e);
-        }
-
-        if (res == null) {
-            throw new MmsException("Failed to persist part, return null.");
-        }
-
-        persistData(part, res, contentType, preOpenedFiles);
-        // After successfully store the data, we should update
-        // the dataUri of the part.
-        part.setDataUri(res);
-
-        return res;
-    }
-
-    /**
-     * Save data of the part into storage. The source data may be given
-     * by a byte[] or a Uri. If it's a byte[], directly save it
-     * into storage, otherwise load source data from the dataUri and then
-     * save it. If the data is an image, we may scale down it according
-     * to user preference.
-     *
-     * @param part           The PDU part which contains data to be saved.
-     * @param uri            The URI of the part.
-     * @param contentType    The MIME type of the part.
-     * @param preOpenedFiles if not null, a map of preopened InputStreams for the parts.
-     * @throws MmsException Cannot find source data or error occurred
-     *                      while saving the data.
-     */
-    private void persistData(final PduPart part, final Uri uri,
-            final String contentType, final Map<Uri, InputStream> preOpenedFiles)
-            throws MmsException {
-        OutputStream os = null;
-        InputStream is = null;
-        DrmConvertSession drmConvertSession = null;
-        Uri dataUri = null;
-        String path = null;
-
-        try {
-            final byte[] data = part.getData();
-            final int charset = part.getCharset();
-            if (ContentType.TEXT_PLAIN.equals(contentType)
-                    || ContentType.APP_SMIL.equals(contentType)
-                    || ContentType.TEXT_HTML.equals(contentType)) {
-                // Some phone could send MMS with a text part having empty data
-                // Let's just skip those parts.
-                // EncodedStringValue() throws NPE if data is empty
-                if (data != null) {
-                    final ContentValues cv = new ContentValues();
-                    cv.put(Mms.Part.TEXT, new EncodedStringValue(charset, data).getString());
-                    if (mContentResolver.update(uri, cv, null, null) != 1) {
-                        throw new MmsException("unable to update " + uri.toString());
-                    }
-                }
-            } else {
-                final boolean isDrm = DownloadDrmHelper.isDrmConvertNeeded(contentType);
-                if (isDrm) {
-                    if (uri != null) {
-                        try {
-                            path = convertUriToPath(mContext, uri);
-                            if (LOCAL_LOGV) {
-                                LogUtil.v(TAG, "drm uri: " + uri + " path: " + path);
-                            }
-                            final File f = new File(path);
-                            final long len = f.length();
-                            if (LOCAL_LOGV) {
-                                LogUtil.v(TAG, "drm path: " + path + " len: " + len);
-                            }
-                            if (len > 0) {
-                                // we're not going to re-persist and re-encrypt an already
-                                // converted drm file
-                                return;
-                            }
-                        } catch (final Exception e) {
-                            Log.e(TAG, "Can't get file info for: " + part.getDataUri(), e);
-                        }
-                    }
-                    // We haven't converted the file yet, start the conversion
-                    drmConvertSession = DrmConvertSession.open(mContext, contentType);
-                    if (drmConvertSession == null) {
-                        throw new MmsException("Mimetype " + contentType +
-                                " can not be converted.");
-                    }
-                }
-                // uri can look like:
-                // content://mms/part/98
-                os = mContentResolver.openOutputStream(uri);
-                if (os == null) {
-                    throw new MmsException("Failed to create output stream on " + uri);
-                }
-                if (data == null) {
-                    dataUri = part.getDataUri();
-                    if ((dataUri == null) || (dataUri.equals(uri))) {
-                        Log.w(TAG, "Can't find data for this part.");
-                        return;
-                    }
-                    // dataUri can look like:
-                    // content://com.google.android.gallery3d.provider/picasa/item/5720646660183715
-                    if (preOpenedFiles != null && preOpenedFiles.containsKey(dataUri)) {
-                        is = preOpenedFiles.get(dataUri);
-                    }
-                    if (is == null) {
-                        is = mContentResolver.openInputStream(dataUri);
-                    }
-                    if (is == null) {
-                        throw new MmsException("Failed to create input stream on " + dataUri);
-                    }
-                    if (LOCAL_LOGV) {
-                        LogUtil.v(TAG, "Saving data to: " + uri);
-                    }
-
-                    final byte[] buffer = new byte[8192];
-                    for (int len = 0; (len = is.read(buffer)) != -1; ) {
-                        if (!isDrm) {
-                            os.write(buffer, 0, len);
-                        } else {
-                            final byte[] convertedData = drmConvertSession.convert(buffer, len);
-                            if (convertedData != null) {
-                                os.write(convertedData, 0, convertedData.length);
-                            } else {
-                                throw new MmsException("Error converting drm data.");
-                            }
-                        }
-                    }
-                } else {
-                    if (LOCAL_LOGV) {
-                        LogUtil.v(TAG, "Saving data to: " + uri);
-                    }
-                    if (!isDrm) {
-                        os.write(data);
-                    } else {
-                        dataUri = uri;
-                        final byte[] convertedData = drmConvertSession.convert(data, data.length);
-                        if (convertedData != null) {
-                            os.write(convertedData, 0, convertedData.length);
-                        } else {
-                            throw new MmsException("Error converting drm data.");
-                        }
-                    }
-                }
-            }
-        } catch (final SQLiteException e) {
-            Log.e(TAG, "Failed with SQLiteException.", e);
-            throw new MmsException(e);
-        } catch (final FileNotFoundException e) {
-            Log.e(TAG, "Failed to open Input/Output stream.", e);
-            throw new MmsException(e);
-        } catch (final IOException e) {
-            Log.e(TAG, "Failed to read/write data.", e);
-            throw new MmsException(e);
-        } finally {
-            if (os != null) {
-                try {
-                    os.close();
-                } catch (final IOException e) {
-                    Log.e(TAG, "IOException while closing: " + os, e);
-                } // Ignore
-            }
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (final IOException e) {
-                    Log.e(TAG, "IOException while closing: " + is, e);
-                } // Ignore
-            }
-            if (drmConvertSession != null) {
-                drmConvertSession.close(path);
-
-                // Reset the permissions on the encrypted part file so everyone has only read
-                // permission.
-                final File f = new File(path);
-                final ContentValues values = new ContentValues(0);
-                SqliteWrapper.update(mContext, mContentResolver,
-                        Uri.parse("content://mms/resetFilePerm/" + f.getName()),
-                        values, null, null);
-            }
-        }
-    }
-
-    /**
-     * This method expects uri in the following format
-     *     content://media/<table_name>/<row_index> (or)
-     *     file://sdcard/test.mp4
-     *     http://test.com/test.mp4
-     *
-     * Here <table_name> shall be "video" or "audio" or "images"
-     * <row_index> the index of the content in given table
-     */
-    public static String convertUriToPath(final Context context, final Uri uri) {
-        String path = null;
-        if (null != uri) {
-            final String scheme = uri.getScheme();
-            if (null == scheme || scheme.equals("") || UriUtil.isFileUri(uri)) {
-                path = uri.getPath();
-
-            } else if (scheme.equals("http")) {
-                path = uri.toString();
-
-            } else if (scheme.equals(ContentResolver.SCHEME_CONTENT)) {
-                final String[] projection = new String[] {MediaStore.MediaColumns.DATA};
-                Cursor cursor = null;
-                try {
-                    cursor = context.getContentResolver().query(uri, projection, null,
-                            null, null);
-                    if (null == cursor || 0 == cursor.getCount() || !cursor.moveToFirst()) {
-                        throw new IllegalArgumentException("Given Uri could not be found" +
-                                " in media store");
-                    }
-                    final int pathIndex =
-                            cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
-                    path = cursor.getString(pathIndex);
-                } catch (final SQLiteException e) {
-                    throw new IllegalArgumentException("Given Uri is not formatted in a way " +
-                            "so that it can be found in media store.");
-                } finally {
-                    if (null != cursor) {
-                        cursor.close();
-                    }
-                }
-            } else {
-                throw new IllegalArgumentException("Given Uri scheme is not supported");
-            }
-        }
-        return path;
-    }
-
-    private void updateAddress(
-            final long msgId, final int type, final EncodedStringValue[] array) {
-        // Delete old address information and then insert new ones.
-        SqliteWrapper.delete(mContext, mContentResolver,
-                Uri.parse("content://mms/" + msgId + "/addr"),
-                Addr.TYPE + "=" + type, null);
-
-        persistAddress(msgId, type, array);
-    }
-
-    /**
-     * Update headers of a SendReq.
-     *
-     * @param uri The PDU which need to be updated.
-     * @param pdu New headers.
-     * @throws MmsException Bad URI or updating failed.
-     */
-    public void updateHeaders(final Uri uri, final SendReq sendReq) {
-        synchronized (PDU_CACHE_INSTANCE) {
-            // If the cache item is getting updated, wait until it's done updating before
-            // purging it.
-            if (PDU_CACHE_INSTANCE.isUpdating(uri)) {
-                if (LOCAL_LOGV) {
-                    LogUtil.v(TAG, "updateHeaders: " + uri + " blocked by isUpdating()");
-                }
-                try {
-                    PDU_CACHE_INSTANCE.wait();
-                } catch (final InterruptedException e) {
-                    Log.e(TAG, "updateHeaders: ", e);
-                }
-            }
-        }
-        PDU_CACHE_INSTANCE.purge(uri);
-
-        final ContentValues values = new ContentValues(10);
-        final byte[] contentType = sendReq.getContentType();
-        if (contentType != null) {
-            values.put(Mms.CONTENT_TYPE, toIsoString(contentType));
-        }
-
-        final long date = sendReq.getDate();
-        if (date != -1) {
-            values.put(Mms.DATE, date);
-        }
-
-        final int deliveryReport = sendReq.getDeliveryReport();
-        if (deliveryReport != 0) {
-            values.put(Mms.DELIVERY_REPORT, deliveryReport);
-        }
-
-        final long expiry = sendReq.getExpiry();
-        if (expiry != -1) {
-            values.put(Mms.EXPIRY, expiry);
-        }
-
-        final byte[] msgClass = sendReq.getMessageClass();
-        if (msgClass != null) {
-            values.put(Mms.MESSAGE_CLASS, toIsoString(msgClass));
-        }
-
-        final int priority = sendReq.getPriority();
-        if (priority != 0) {
-            values.put(Mms.PRIORITY, priority);
-        }
-
-        final int readReport = sendReq.getReadReport();
-        if (readReport != 0) {
-            values.put(Mms.READ_REPORT, readReport);
-        }
-
-        final byte[] transId = sendReq.getTransactionId();
-        if (transId != null) {
-            values.put(Mms.TRANSACTION_ID, toIsoString(transId));
-        }
-
-        final EncodedStringValue subject = sendReq.getSubject();
-        if (subject != null) {
-            values.put(Mms.SUBJECT, toIsoString(subject.getTextString()));
-            values.put(Mms.SUBJECT_CHARSET, subject.getCharacterSet());
-        } else {
-            values.put(Mms.SUBJECT, "");
-        }
-
-        final long messageSize = sendReq.getMessageSize();
-        if (messageSize > 0) {
-            values.put(Mms.MESSAGE_SIZE, messageSize);
-        }
-
-        final PduHeaders headers = sendReq.getPduHeaders();
-        final HashSet<String> recipients = new HashSet<String>();
-        for (final int addrType : ADDRESS_FIELDS) {
-            EncodedStringValue[] array = null;
-            if (addrType == PduHeaders.FROM) {
-                final EncodedStringValue v = headers.getEncodedStringValue(addrType);
-                if (v != null) {
-                    array = new EncodedStringValue[1];
-                    array[0] = v;
-                }
-            } else {
-                array = headers.getEncodedStringValues(addrType);
-            }
-
-            if (array != null) {
-                final long msgId = ContentUris.parseId(uri);
-                updateAddress(msgId, addrType, array);
-                if (addrType == PduHeaders.TO) {
-                    for (final EncodedStringValue v : array) {
-                        if (v != null) {
-                            recipients.add(v.getString());
-                        }
-                    }
-                }
-            }
-        }
-        if (!recipients.isEmpty()) {
-            final long threadId = MmsSmsUtils.Threads.getOrCreateThreadId(mContext, recipients);
-            values.put(Mms.THREAD_ID, threadId);
-        }
-
-        SqliteWrapper.update(mContext, mContentResolver, uri, values, null, null);
-    }
-
-
-    private void updatePart(final Uri uri, final PduPart part,
-            final Map<Uri, InputStream> preOpenedFiles)
-            throws MmsException {
-        final ContentValues values = new ContentValues(7);
-
-        final int charset = part.getCharset();
-        if (charset != 0) {
-            values.put(Part.CHARSET, charset);
-        }
-
-        String contentType = null;
-        if (part.getContentType() != null) {
-            contentType = toIsoString(part.getContentType());
-            values.put(Part.CONTENT_TYPE, contentType);
-        } else {
-            throw new MmsException("MIME type of the part must be set.");
-        }
-
-        getValues(part, values);
-
-        SqliteWrapper.update(mContext, mContentResolver, uri, values, null, null);
-
-        // Only update the data when:
-        // 1. New binary data supplied or
-        // 2. The Uri of the part is different from the current one.
-        if ((part.getData() != null)
-                || (!uri.equals(part.getDataUri()))) {
-            persistData(part, uri, contentType, preOpenedFiles);
-        }
-    }
-
-    /**
-     * Update all parts of a PDU.
-     *
-     * @param uri            The PDU which need to be updated.
-     * @param body           New message body of the PDU.
-     * @param preOpenedFiles if not null, a map of preopened InputStreams for the parts.
-     * @throws MmsException Bad URI or updating failed.
-     */
-    public void updateParts(final Uri uri, final PduBody body,
-            final Map<Uri, InputStream> preOpenedFiles)
-            throws MmsException {
-        try {
-            PduCacheEntry cacheEntry;
-            synchronized (PDU_CACHE_INSTANCE) {
-                if (PDU_CACHE_INSTANCE.isUpdating(uri)) {
-                    if (LOCAL_LOGV) {
-                        LogUtil.v(TAG, "updateParts: " + uri + " blocked by isUpdating()");
-                    }
-                    try {
-                        PDU_CACHE_INSTANCE.wait();
-                    } catch (final InterruptedException e) {
-                        Log.e(TAG, "updateParts: ", e);
-                    }
-                    cacheEntry = PDU_CACHE_INSTANCE.get(uri);
-                    if (cacheEntry != null) {
-                        ((MultimediaMessagePdu) cacheEntry.getPdu()).setBody(body);
-                    }
-                }
-                // Tell the cache to indicate to other callers that this item
-                // is currently being updated.
-                PDU_CACHE_INSTANCE.setUpdating(uri, true);
-            }
-
-            final ArrayList<PduPart> toBeCreated = new ArrayList<PduPart>();
-            final ArrayMap<Uri, PduPart> toBeUpdated = new ArrayMap<Uri, PduPart>();
-
-            final int partsNum = body.getPartsNum();
-            final StringBuilder filter = new StringBuilder().append('(');
-            for (int i = 0; i < partsNum; i++) {
-                final PduPart part = body.getPart(i);
-                final Uri partUri = part.getDataUri();
-                if ((partUri == null) || TextUtils.isEmpty(partUri.getAuthority())
-                        || !partUri.getAuthority().startsWith("mms")) {
-                    toBeCreated.add(part);
-                } else {
-                    toBeUpdated.put(partUri, part);
-
-                    // Don't use 'i > 0' to determine whether we should append
-                    // 'AND' since 'i = 0' may be skipped in another branch.
-                    if (filter.length() > 1) {
-                        filter.append(" AND ");
-                    }
-
-                    filter.append(Part._ID);
-                    filter.append("!=");
-                    DatabaseUtils.appendEscapedSQLString(filter, partUri.getLastPathSegment());
-                }
-            }
-            filter.append(')');
-
-            final long msgId = ContentUris.parseId(uri);
-
-            // Remove the parts which doesn't exist anymore.
-            SqliteWrapper.delete(mContext, mContentResolver,
-                    Uri.parse(Mms.CONTENT_URI + "/" + msgId + "/part"),
-                    filter.length() > 2 ? filter.toString() : null, null);
-
-            // Create new parts which didn't exist before.
-            for (final PduPart part : toBeCreated) {
-                persistPart(part, msgId, preOpenedFiles);
-            }
-
-            // Update the modified parts.
-            for (final Map.Entry<Uri, PduPart> e : toBeUpdated.entrySet()) {
-                updatePart(e.getKey(), e.getValue(), preOpenedFiles);
-            }
-        } finally {
-            synchronized (PDU_CACHE_INSTANCE) {
-                PDU_CACHE_INSTANCE.setUpdating(uri, false);
-                PDU_CACHE_INSTANCE.notifyAll();
-            }
-        }
-    }
-
-    /**
-     * Persist a PDU object to specific location in the storage.
-     *
-     * @param pdu             The PDU object to be stored.
-     * @param uri             Where to store the given PDU object.
-     * @param subId           Subscription id associated with this message.
-     * @param subPhoneNumber TODO
-     * @param preOpenedFiles  if not null, a map of preopened InputStreams for the parts.
-     * @return A Uri which can be used to access the stored PDU.
-     */
-    public Uri persist(final GenericPdu pdu, final Uri uri, final int subId,
-            final String subPhoneNumber, final Map<Uri, InputStream> preOpenedFiles)
-            throws MmsException {
-        if (uri == null) {
-            throw new MmsException("Uri may not be null.");
-        }
-        long msgId = -1;
-        try {
-            msgId = ContentUris.parseId(uri);
-        } catch (final NumberFormatException e) {
-            // the uri ends with "inbox" or something else like that
-        }
-        final boolean existingUri = msgId != -1;
-
-        if (!existingUri && MESSAGE_BOX_MAP.get(uri) == null) {
-            throw new MmsException(
-                    "Bad destination, must be one of "
-                            + "content://mms/inbox, content://mms/sent, "
-                            + "content://mms/drafts, content://mms/outbox, "
-                            + "content://mms/temp."
-            );
-        }
-        synchronized (PDU_CACHE_INSTANCE) {
-            // If the cache item is getting updated, wait until it's done updating before
-            // purging it.
-            if (PDU_CACHE_INSTANCE.isUpdating(uri)) {
-                if (LOCAL_LOGV) {
-                    LogUtil.v(TAG, "persist: " + uri + " blocked by isUpdating()");
-                }
-                try {
-                    PDU_CACHE_INSTANCE.wait();
-                } catch (final InterruptedException e) {
-                    Log.e(TAG, "persist1: ", e);
-                }
-            }
-        }
-        PDU_CACHE_INSTANCE.purge(uri);
-
-        final PduHeaders header = pdu.getPduHeaders();
-        PduBody body = null;
-        ContentValues values = new ContentValues();
-
-        // Mark new messages as seen in the telephony database so that we don't have to
-        // do a global "set all messages as seen" since that occasionally seems to be
-        // problematic (i.e. very slow).  See bug 18189471.
-        values.put(Mms.SEEN, 1);
-
-        //Set<Entry<Integer, String>> set;
-
-        for (int i = ENCODED_STRING_COLUMN_NAME_MAP.size(); --i >= 0; ) {
-            final int field = ENCODED_STRING_COLUMN_NAME_MAP.keyAt(i);
-            final EncodedStringValue encodedString = header.getEncodedStringValue(field);
-            if (encodedString != null) {
-                final String charsetColumn = CHARSET_COLUMN_NAME_MAP.get(field);
-                values.put(ENCODED_STRING_COLUMN_NAME_MAP.valueAt(i),
-                        toIsoString(encodedString.getTextString()));
-                values.put(charsetColumn, encodedString.getCharacterSet());
-            }
-        }
-
-        for (int i = TEXT_STRING_COLUMN_NAME_MAP.size(); --i >= 0; ) {
-            final byte[] text = header.getTextString(TEXT_STRING_COLUMN_NAME_MAP.keyAt(i));
-            if (text != null) {
-                values.put(TEXT_STRING_COLUMN_NAME_MAP.valueAt(i), toIsoString(text));
-            }
-        }
-
-        for (int i = OCTET_COLUMN_NAME_MAP.size(); --i >= 0; ) {
-            final int b = header.getOctet(OCTET_COLUMN_NAME_MAP.keyAt(i));
-            if (b != 0) {
-                values.put(OCTET_COLUMN_NAME_MAP.valueAt(i), b);
-            }
-        }
-
-        for (int i = LONG_COLUMN_NAME_MAP.size(); --i >= 0; ) {
-            final long l = header.getLongInteger(LONG_COLUMN_NAME_MAP.keyAt(i));
-            if (l != -1L) {
-                values.put(LONG_COLUMN_NAME_MAP.valueAt(i), l);
-            }
-        }
-
-        final SparseArray<EncodedStringValue[]> addressMap =
-                new SparseArray<EncodedStringValue[]>(ADDRESS_FIELDS.length);
-        // Save address information.
-        for (final int addrType : ADDRESS_FIELDS) {
-            EncodedStringValue[] array = null;
-            if (addrType == PduHeaders.FROM) {
-                final EncodedStringValue v = header.getEncodedStringValue(addrType);
-                if (v != null) {
-                    array = new EncodedStringValue[1];
-                    array[0] = v;
-                }
-            } else {
-                array = header.getEncodedStringValues(addrType);
-            }
-            addressMap.put(addrType, array);
-        }
-
-        final HashSet<String> recipients = new HashSet<String>();
-        final int msgType = pdu.getMessageType();
-        // Here we only allocate thread ID for M-Notification.ind,
-        // M-Retrieve.conf and M-Send.req.
-        // Some of other PDU types may be allocated a thread ID outside
-        // this scope.
-        if ((msgType == PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND)
-                || (msgType == PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF)
-                || (msgType == PduHeaders.MESSAGE_TYPE_SEND_REQ)) {
-            switch (msgType) {
-                case PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND:
-                case PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF:
-                    loadRecipients(PduHeaders.FROM, recipients, addressMap);
-
-                    // For received messages (whether group MMS is enabled or not) we want to
-                    // associate this message with the thread composed of all the recipients
-                    // EXCLUDING our own number. This includes the person who sent the message
-                    // (the FROM field above) in addition to the other people the message was
-                    // addressed TO (or CC fields to address group messaging compatibility issues
-                    // with devices that place numbers in this field). Typically our own number is
-                    // in the TO/CC field so we have to remove it in checkAndLoadToCcRecipients.
-                    checkAndLoadToCcRecipients(recipients, addressMap, subPhoneNumber);
-                    break;
-                case PduHeaders.MESSAGE_TYPE_SEND_REQ:
-                    loadRecipients(PduHeaders.TO, recipients, addressMap);
-                    break;
-            }
-            long threadId = -1L;
-            if (!recipients.isEmpty()) {
-                // Given all the recipients associated with this message, find (or create) the
-                // correct thread.
-                threadId = MmsSmsUtils.Threads.getOrCreateThreadId(mContext, recipients);
-            } else {
-                LogUtil.w(TAG, "PduPersister.persist No recipients; persisting PDU to thread: "
-                        + threadId);
-            }
-            values.put(Mms.THREAD_ID, threadId);
-        }
-
-        // Save parts first to avoid inconsistent message is loaded
-        // while saving the parts.
-        final long placeholderId = System.currentTimeMillis(); // Placeholder ID of the msg.
-
-        // Figure out if this PDU is a text-only message
-        boolean textOnly = true;
-
-        // Get body if the PDU is a RetrieveConf or SendReq.
-        if (pdu instanceof MultimediaMessagePdu) {
-            body = ((MultimediaMessagePdu) pdu).getBody();
-            // Start saving parts if necessary.
-            if (body != null) {
-                final int partsNum = body.getPartsNum();
-                if (LOCAL_LOGV) {
-                    LogUtil.v(TAG, "PduPersister.persist partsNum: " + partsNum);
-                }
-                if (partsNum > 2) {
-                    // For a text-only message there will be two parts: 1-the SMIL, 2-the text.
-                    // Down a few lines below we're checking to make sure we've only got SMIL or
-                    // text. We also have to check then we don't have more than two parts.
-                    // Otherwise, a slideshow with two text slides would be marked as textOnly.
-                    textOnly = false;
-                }
-                for (int i = 0; i < partsNum; i++) {
-                    final PduPart part = body.getPart(i);
-                    persistPart(part, placeholderId, preOpenedFiles);
-
-                    // If we've got anything besides text/plain or SMIL part, then we've got
-                    // an mms message with some other type of attachment.
-                    final String contentType = getPartContentType(part);
-                    if (LOCAL_LOGV) {
-                        LogUtil.v(TAG, "PduPersister.persist part: " + i + " contentType: " +
-                                contentType);
-                    }
-                    if (contentType != null && !ContentType.APP_SMIL.equals(contentType)
-                            && !ContentType.TEXT_PLAIN.equals(contentType)) {
-                        textOnly = false;
-                    }
-                }
-            }
-        }
-        // Record whether this mms message is a simple plain text or not. This is a hint for the
-        // UI.
-        if (OsUtil.isAtLeastJB_MR1()) {
-            values.put(Mms.TEXT_ONLY, textOnly ? 1 : 0);
-        }
-
-        if (OsUtil.isAtLeastL_MR1()) {
-            values.put(Mms.SUBSCRIPTION_ID, subId);
-        } else {
-            Assert.equals(ParticipantData.DEFAULT_SELF_SUB_ID, subId);
-        }
-
-        Uri res = null;
-        if (existingUri) {
-            res = uri;
-            SqliteWrapper.update(mContext, mContentResolver, res, values, null, null);
-        } else {
-            res = SqliteWrapper.insert(mContext, mContentResolver, uri, values);
-            if (res == null) {
-                throw new MmsException("persist() failed: return null.");
-            }
-            // Get the real ID of the PDU and update all parts which were
-            // saved with the placeholder ID.
-            msgId = ContentUris.parseId(res);
-        }
-
-        values = new ContentValues(1);
-        values.put(Part.MSG_ID, msgId);
-        SqliteWrapper.update(mContext, mContentResolver,
-                Uri.parse("content://mms/" + placeholderId + "/part"),
-                values, null, null);
-        // We should return the longest URI of the persisted PDU, for
-        // example, if input URI is "content://mms/inbox" and the _ID of
-        // persisted PDU is '8', we should return "content://mms/inbox/8"
-        // instead of "content://mms/8".
-        // TODO: Should the MmsProvider be responsible for this???
-        if (!existingUri) {
-            res = Uri.parse(uri + "/" + msgId);
-        }
-
-        // Save address information.
-        for (final int addrType : ADDRESS_FIELDS) {
-            final EncodedStringValue[] array = addressMap.get(addrType);
-            if (array != null) {
-                persistAddress(msgId, addrType, array);
-            }
-        }
-
-        return res;
-    }
-
-    /**
-     * For a given address type, extract the recipients from the headers.
-     *
-     * @param addressType     can be PduHeaders.FROM or PduHeaders.TO
-     * @param recipients      a HashSet that is loaded with the recipients from the FROM or TO
-     *                        headers
-     * @param addressMap      a HashMap of the addresses from the ADDRESS_FIELDS header
-     */
-    private void loadRecipients(final int addressType, final HashSet<String> recipients,
-            final SparseArray<EncodedStringValue[]> addressMap) {
-        final EncodedStringValue[] array = addressMap.get(addressType);
-        if (array == null) {
-            return;
-        }
-        for (final EncodedStringValue v : array) {
-            if (v != null) {
-                final String number = v.getString();
-                if (!recipients.contains(number)) {
-                    // Only add numbers which aren't already included.
-                    recipients.add(number);
-                }
-            }
-        }
-    }
-
-    /**
-     * For a given address type, extract the recipients from the headers.
-     *
-     * @param recipients      a HashSet that is loaded with the recipients from the FROM or TO
-     *                        headers
-     * @param addressMap      a HashMap of the addresses from the ADDRESS_FIELDS header
-     * @param selfNumber      self phone number
-     */
-    private void checkAndLoadToCcRecipients(final HashSet<String> recipients,
-            final SparseArray<EncodedStringValue[]> addressMap, final String selfNumber) {
-        final EncodedStringValue[] arrayTo = addressMap.get(PduHeaders.TO);
-        final EncodedStringValue[] arrayCc = addressMap.get(PduHeaders.CC);
-        final ArrayList<String> numbers = new ArrayList<String>();
-        if (arrayTo != null) {
-            for (final EncodedStringValue v : arrayTo) {
-                if (v != null) {
-                    numbers.add(v.getString());
-                }
-            }
-        }
-        if (arrayCc != null) {
-            for (final EncodedStringValue v : arrayCc) {
-                if (v != null) {
-                    numbers.add(v.getString());
-                }
-            }
-        }
-
-        // If selfNumber is unavailable and there is only a single address in all TO and CC, we can
-        // skip adding it into recipients as assuming it is my own phone number.
-        final boolean isSelfNumberUnavailable = TextUtils.isEmpty(selfNumber);
-        if (isSelfNumberUnavailable && numbers.size() == 1) {
-            return;
-        }
-
-        for (final String number : numbers) {
-            // Only add numbers which aren't my own number.
-            if (isSelfNumberUnavailable || !PhoneNumberUtils.compare(number, selfNumber)) {
-                if (!recipients.contains(number)) {
-                    // Only add numbers which aren't already included.
-                    recipients.add(number);
-                }
-            }
-        }
-    }
-
-    /**
-     * Move a PDU object from one location to another.
-     *
-     * @param from Specify the PDU object to be moved.
-     * @param to   The destination location, should be one of the following:
-     *             "content://mms/inbox", "content://mms/sent",
-     *             "content://mms/drafts", "content://mms/outbox",
-     *             "content://mms/trash".
-     * @return New Uri of the moved PDU.
-     * @throws MmsException Error occurred while moving the message.
-     */
-    public Uri move(final Uri from, final Uri to) throws MmsException {
-        // Check whether the 'msgId' has been assigned a valid value.
-        final long msgId = ContentUris.parseId(from);
-        if (msgId == -1L) {
-            throw new MmsException("Error! ID of the message: -1.");
-        }
-
-        // Get corresponding int value of destination box.
-        final Integer msgBox = MESSAGE_BOX_MAP.get(to);
-        if (msgBox == null) {
-            throw new MmsException(
-                    "Bad destination, must be one of "
-                            + "content://mms/inbox, content://mms/sent, "
-                            + "content://mms/drafts, content://mms/outbox, "
-                            + "content://mms/temp."
-            );
-        }
-
-        final ContentValues values = new ContentValues(1);
-        values.put(Mms.MESSAGE_BOX, msgBox);
-        SqliteWrapper.update(mContext, mContentResolver, from, values, null, null);
-        return ContentUris.withAppendedId(to, msgId);
-    }
-
-    /**
-     * Wrap a byte[] into a String.
-     */
-    public static String toIsoString(final byte[] bytes) {
-        try {
-            return new String(bytes, CharacterSets.MIMENAME_ISO_8859_1);
-        } catch (final UnsupportedEncodingException e) {
-            // Impossible to reach here!
-            Log.e(TAG, "ISO_8859_1 must be supported!", e);
-            return "";
-        }
-    }
-
-    /**
-     * Unpack a given String into a byte[].
-     */
-    public static byte[] getBytes(final String data) {
-        try {
-            return data.getBytes(CharacterSets.MIMENAME_ISO_8859_1);
-        } catch (final UnsupportedEncodingException e) {
-            // Impossible to reach here!
-            Log.e(TAG, "ISO_8859_1 must be supported!", e);
-            return new byte[0];
-        }
-    }
-
-    /**
-     * Remove all objects in the temporary path.
-     */
-    public void release() {
-        final Uri uri = Uri.parse(TEMPORARY_DRM_OBJECT_URI);
-        SqliteWrapper.delete(mContext, mContentResolver, uri, null, null);
-    }
-
-    /**
-     * Find all messages to be sent or downloaded before certain time.
-     */
-    public Cursor getPendingMessages(final long dueTime) {
-        final Uri.Builder uriBuilder = PendingMessages.CONTENT_URI.buildUpon();
-        uriBuilder.appendQueryParameter("protocol", "mms");
-
-        final String selection = PendingMessages.ERROR_TYPE + " < ?"
-                + " AND " + PendingMessages.DUE_TIME + " <= ?";
-
-        final String[] selectionArgs = new String[] {
-                String.valueOf(MmsSms.ERR_TYPE_GENERIC_PERMANENT),
-                String.valueOf(dueTime)
-        };
-
-        return SqliteWrapper.query(mContext, mContentResolver,
-                uriBuilder.build(), null, selection, selectionArgs,
-                PendingMessages.DUE_TIME);
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/QuotedPrintable.java b/src/com/android/messaging/mmslib/pdu/QuotedPrintable.java
deleted file mode 100644
index 1ce9dc1..0000000
--- a/src/com/android/messaging/mmslib/pdu/QuotedPrintable.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import java.io.ByteArrayOutputStream;
-
-public class QuotedPrintable {
-    private static byte ESCAPE_CHAR = '=';
-
-    /**
-     * Decodes an array quoted-printable characters into an array of original bytes.
-     * Escaped characters are converted back to their original representation.
-     *
-     * <p>
-     * This function implements a subset of
-     * quoted-printable encoding specification (rule #1 and rule #2)
-     * as defined in RFC 1521.
-     * </p>
-     *
-     * @param bytes array of quoted-printable characters
-     * @return array of original bytes,
-     *         null if quoted-printable decoding is unsuccessful.
-     */
-    public static final byte[] decodeQuotedPrintable(byte[] bytes) {
-        if (bytes == null) {
-            return null;
-        }
-        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-        for (int i = 0; i < bytes.length; i++) {
-            int b = bytes[i];
-            if (b == ESCAPE_CHAR) {
-                try {
-                    if ('\r' == (char) bytes[i + 1] &&
-                            '\n' == (char) bytes[i + 2]) {
-                        i += 2;
-                        continue;
-                    }
-                    int u = Character.digit((char) bytes[++i], 16);
-                    int l = Character.digit((char) bytes[++i], 16);
-                    if (u == -1 || l == -1) {
-                        return null;
-                    }
-                    buffer.write((char) ((u << 4) + l));
-                } catch (ArrayIndexOutOfBoundsException e) {
-                    return null;
-                }
-            } else {
-                buffer.write(b);
-            }
-        }
-        return buffer.toByteArray();
-    }
-}
diff --git a/src/com/android/messaging/mmslib/pdu/ReadOrigInd.java b/src/com/android/messaging/mmslib/pdu/ReadOrigInd.java
deleted file mode 100644
index 198e4c3..0000000
--- a/src/com/android/messaging/mmslib/pdu/ReadOrigInd.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-public class ReadOrigInd extends GenericPdu {
-    /**
-     * Empty constructor.
-     * Since the Pdu corresponding to this class is constructed
-     * by the Proxy-Relay server, this class is only instantiated
-     * by the Pdu Parser.
-     *
-     * @throws InvalidHeaderValueException if error occurs.
-     */
-    public ReadOrigInd() throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_READ_ORIG_IND);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    ReadOrigInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get Date value.
-     *
-     * @return the value
-     */
-    public long getDate() {
-        return mPduHeaders.getLongInteger(PduHeaders.DATE);
-    }
-
-    /**
-     * Set Date value.
-     *
-     * @param value the value
-     */
-    public void setDate(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.DATE);
-    }
-
-    /**
-     * Get From value.
-     * From-value = Value-length
-     *      (Address-present-token Encoded-string-value | Insert-address-token)
-     *
-     * @return the value
-     */
-    public EncodedStringValue getFrom() {
-        return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
-    }
-
-    /**
-     * Set From value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setFrom(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
-    }
-
-    /**
-     * Get Message-ID value.
-     *
-     * @return the value
-     */
-    public byte[] getMessageId() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Set Message-ID value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Get X-MMS-Read-status value.
-     *
-     * @return the value
-     */
-    public int getReadStatus() {
-        return mPduHeaders.getOctet(PduHeaders.READ_STATUS);
-    }
-
-    /**
-     * Set X-MMS-Read-status value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setReadStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.READ_STATUS);
-    }
-
-    /**
-     * Get To value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getTo() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
-    }
-
-    /**
-     * Set To value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTo(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     */
-}
diff --git a/src/com/android/messaging/mmslib/pdu/ReadRecInd.java b/src/com/android/messaging/mmslib/pdu/ReadRecInd.java
deleted file mode 100644
index c1a9ae4..0000000
--- a/src/com/android/messaging/mmslib/pdu/ReadRecInd.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-public class ReadRecInd extends GenericPdu {
-    /**
-     * Constructor, used when composing a M-ReadRec.ind pdu.
-     *
-     * @param from       the from value
-     * @param messageId  the message ID value
-     * @param mmsVersion current viersion of mms
-     * @param readStatus the read status value
-     * @param to         the to value
-     * @throws InvalidHeaderValueException if parameters are invalid.
-     * @throws NullPointerException if messageId or to is null.
-     */
-    public ReadRecInd(EncodedStringValue from,
-            byte[] messageId,
-            int mmsVersion,
-            int readStatus,
-            EncodedStringValue[] to) throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_READ_REC_IND);
-        setFrom(from);
-        setMessageId(messageId);
-        setMmsVersion(mmsVersion);
-        setTo(to);
-        setReadStatus(readStatus);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    ReadRecInd(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get Date value.
-     *
-     * @return the value
-     */
-    public long getDate() {
-        return mPduHeaders.getLongInteger(PduHeaders.DATE);
-    }
-
-    /**
-     * Set Date value.
-     *
-     * @param value the value
-     */
-    public void setDate(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.DATE);
-    }
-
-    /**
-     * Get Message-ID value.
-     *
-     * @return the value
-     */
-    public byte[] getMessageId() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Set Message-ID value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Get To value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getTo() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.TO);
-    }
-
-    /**
-     * Set To value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTo(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
-    }
-
-    /**
-     * Get X-MMS-Read-status value.
-     *
-     * @return the value
-     */
-    public int getReadStatus() {
-        return mPduHeaders.getOctet(PduHeaders.READ_STATUS);
-    }
-
-    /**
-     * Set X-MMS-Read-status value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setReadStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.READ_STATUS);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     */
-}
diff --git a/src/com/android/messaging/mmslib/pdu/RetrieveConf.java b/src/com/android/messaging/mmslib/pdu/RetrieveConf.java
deleted file mode 100644
index 9e0faed..0000000
--- a/src/com/android/messaging/mmslib/pdu/RetrieveConf.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-/**
- * M-Retrive.conf Pdu.
- */
-public class RetrieveConf extends MultimediaMessagePdu {
-    /**
-     * Empty constructor.
-     * Since the Pdu corresponding to this class is constructed
-     * by the Proxy-Relay server, this class is only instantiated
-     * by the Pdu Parser.
-     *
-     * @throws InvalidHeaderValueException if error occurs.
-     */
-    public RetrieveConf() throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    RetrieveConf(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Constructor with given headers and body
-     *
-     * @param headers Headers for this PDU.
-     * @param body    Body of this PDu.
-     */
-    RetrieveConf(PduHeaders headers, PduBody body) {
-        super(headers, body);
-    }
-
-    /**
-     * Get CC value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getCc() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.CC);
-    }
-
-    /**
-     * Add a "CC" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void addCc(EncodedStringValue value) {
-        mPduHeaders.appendEncodedStringValue(value, PduHeaders.CC);
-    }
-
-    /**
-     * Get Content-type value.
-     *
-     * @return the value
-     */
-    public byte[] getContentType() {
-        return mPduHeaders.getTextString(PduHeaders.CONTENT_TYPE);
-    }
-
-    /**
-     * Set Content-type value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setContentType(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.CONTENT_TYPE);
-    }
-
-    /**
-     * Get X-Mms-Delivery-Report value.
-     *
-     * @return the value
-     */
-    public int getDeliveryReport() {
-        return mPduHeaders.getOctet(PduHeaders.DELIVERY_REPORT);
-    }
-
-    /**
-     * Set X-Mms-Delivery-Report value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setDeliveryReport(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.DELIVERY_REPORT);
-    }
-
-    /**
-     * Get From value.
-     * From-value = Value-length
-     *      (Address-present-token Encoded-string-value | Insert-address-token)
-     *
-     * @return the value
-     */
-    public EncodedStringValue getFrom() {
-        return mPduHeaders.getEncodedStringValue(PduHeaders.FROM);
-    }
-
-    /**
-     * Set From value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setFrom(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.FROM);
-    }
-
-    /**
-     * Get X-Mms-Message-Class value.
-     * Message-class-value = Class-identifier | Token-text
-     * Class-identifier = Personal | Advertisement | Informational | Auto
-     *
-     * @return the value
-     */
-    public byte[] getMessageClass() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Set X-Mms-Message-Class value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageClass(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Get Message-ID value.
-     *
-     * @return the value
-     */
-    public byte[] getMessageId() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Set Message-ID value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Get X-Mms-Read-Report value.
-     *
-     * @return the value
-     */
-    public int getReadReport() {
-        return mPduHeaders.getOctet(PduHeaders.READ_REPORT);
-    }
-
-    /**
-     * Set X-Mms-Read-Report value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setReadReport(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.READ_REPORT);
-    }
-
-    /**
-     * Get X-Mms-Retrieve-Status value.
-     *
-     * @return the value
-     */
-    public int getRetrieveStatus() {
-        /*
-         * If the header is not there, assuming it is OK status.
-         * Some carriers may choose to not send this header.
-         */
-        return mPduHeaders.hasHeader(PduHeaders.RETRIEVE_STATUS) ?
-                mPduHeaders.getOctet(PduHeaders.RETRIEVE_STATUS) : PduHeaders.RETRIEVE_STATUS_OK;
-    }
-
-    /**
-     * Set X-Mms-Retrieve-Status value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setRetrieveStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.RETRIEVE_STATUS);
-    }
-
-    /**
-     * Get X-Mms-Retrieve-Text value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue getRetrieveText() {
-        return mPduHeaders.getEncodedStringValue(PduHeaders.RETRIEVE_TEXT);
-    }
-
-    /**
-     * Set X-Mms-Retrieve-Text value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setRetrieveText(EncodedStringValue value) {
-        mPduHeaders.setEncodedStringValue(value, PduHeaders.RETRIEVE_TEXT);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id.
-     *
-     * @return the value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTransactionId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte getContentClass() {return 0x00;}
-     *     public void setApplicId(byte value) {}
-     *
-     *     public byte getDrmContent() {return 0x00;}
-     *     public void setDrmContent(byte value) {}
-     *
-     *     public byte getDistributionIndicator() {return 0x00;}
-     *     public void setDistributionIndicator(byte value) {}
-     *
-     *     public PreviouslySentByValue getPreviouslySentBy() {return null;}
-     *     public void setPreviouslySentBy(PreviouslySentByValue value) {}
-     *
-     *     public PreviouslySentDateValue getPreviouslySentDate() {}
-     *     public void setPreviouslySentDate(PreviouslySentDateValue value) {}
-     *
-     *     public MmFlagsValue getMmFlags() {return null;}
-     *     public void setMmFlags(MmFlagsValue value) {}
-     *
-     *     public MmStateValue getMmState() {return null;}
-     *     public void getMmState(MmStateValue value) {}
-     *
-     *     public byte[] getReplaceId() {return 0x00;}
-     *     public void setReplaceId(byte[] value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     *
-     *     public byte getReplyCharging() {return 0x00;}
-     *     public void setReplyCharging(byte value) {}
-     *
-     *     public byte getReplyChargingDeadline() {return 0x00;}
-     *     public void setReplyChargingDeadline(byte value) {}
-     *
-     *     public byte[] getReplyChargingId() {return 0x00;}
-     *     public void setReplyChargingId(byte[] value) {}
-     *
-     *     public long getReplyChargingSize() {return 0;}
-     *     public void setReplyChargingSize(long value) {}
-     */
-}
diff --git a/src/com/android/messaging/mmslib/pdu/SendConf.java b/src/com/android/messaging/mmslib/pdu/SendConf.java
deleted file mode 100644
index cf1399e..0000000
--- a/src/com/android/messaging/mmslib/pdu/SendConf.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 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.android.messaging.mmslib.pdu;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-public class SendConf extends GenericPdu {
-    /**
-     * Empty constructor.
-     * Since the Pdu corresponding to this class is constructed
-     * by the Proxy-Relay server, this class is only instantiated
-     * by the Pdu Parser.
-     *
-     * @throws InvalidHeaderValueException if error occurs.
-     */
-    public SendConf() throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_SEND_CONF);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    SendConf(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Get Message-ID value.
-     *
-     * @return the value
-     */
-    public byte[] getMessageId() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Set Message-ID value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_ID);
-    }
-
-    /**
-     * Get X-Mms-Response-Status.
-     *
-     * @return the value
-     */
-    public int getResponseStatus() {
-        return mPduHeaders.getOctet(PduHeaders.RESPONSE_STATUS);
-    }
-
-    /**
-     * Set X-Mms-Response-Status.
-     *
-     * @param value the values
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setResponseStatus(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.RESPONSE_STATUS);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id field value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTransactionId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *    public byte[] getContentLocation() {return null;}
-     *    public void setContentLocation(byte[] value) {}
-     *
-     *    public EncodedStringValue getResponseText() {return null;}
-     *    public void setResponseText(EncodedStringValue value) {}
-     *
-     *    public byte getStoreStatus() {return 0x00;}
-     *    public void setStoreStatus(byte value) {}
-     *
-     *    public byte[] getStoreStatusText() {return null;}
-     *    public void setStoreStatusText(byte[] value) {}
-     */
-}
diff --git a/src/com/android/messaging/mmslib/pdu/SendReq.java b/src/com/android/messaging/mmslib/pdu/SendReq.java
deleted file mode 100644
index d173c0b..0000000
--- a/src/com/android/messaging/mmslib/pdu/SendReq.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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.android.messaging.mmslib.pdu;
-
-import android.util.Log;
-
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-
-public class SendReq extends MultimediaMessagePdu {
-    private static final String TAG = "SendReq";
-
-    public SendReq() {
-        super();
-
-        try {
-            setMessageType(PduHeaders.MESSAGE_TYPE_SEND_REQ);
-            setMmsVersion(PduHeaders.CURRENT_MMS_VERSION);
-            // TODO: Content-type must be decided according to whether
-            // SMIL part present.
-            setContentType("application/vnd.wap.multipart.related".getBytes());
-            setFrom(new EncodedStringValue(PduHeaders.FROM_INSERT_ADDRESS_TOKEN_STR.getBytes()));
-            setTransactionId(generateTransactionId());
-        } catch (InvalidHeaderValueException e) {
-            // Impossible to reach here since all headers we set above are valid.
-            Log.e(TAG, "Unexpected InvalidHeaderValueException.", e);
-            throw new RuntimeException(e);
-        }
-    }
-
-    private byte[] generateTransactionId() {
-        String transactionId = "T" + Long.toHexString(System.currentTimeMillis());
-        return transactionId.getBytes();
-    }
-
-    /**
-     * Constructor, used when composing a M-Send.req pdu.
-     *
-     * @param contentType   the content type value
-     * @param from          the from value
-     * @param mmsVersion    current viersion of mms
-     * @param transactionId the transaction-id value
-     * @throws InvalidHeaderValueException if parameters are invalid.
-     *                                     NullPointerException if contentType, form or
-     *                                     transactionId is null.
-     */
-    public SendReq(byte[] contentType,
-            EncodedStringValue from,
-            int mmsVersion,
-            byte[] transactionId) throws InvalidHeaderValueException {
-        super();
-        setMessageType(PduHeaders.MESSAGE_TYPE_SEND_REQ);
-        setContentType(contentType);
-        setFrom(from);
-        setMmsVersion(mmsVersion);
-        setTransactionId(transactionId);
-    }
-
-    /**
-     * Constructor with given headers.
-     *
-     * @param headers Headers for this PDU.
-     */
-    SendReq(PduHeaders headers) {
-        super(headers);
-    }
-
-    /**
-     * Constructor with given headers and body
-     *
-     * @param headers Headers for this PDU.
-     * @param body    Body of this PDu.
-     */
-    SendReq(PduHeaders headers, PduBody body) {
-        super(headers, body);
-    }
-
-    /**
-     * Get Bcc value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getBcc() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.BCC);
-    }
-
-    /**
-     * Add a "BCC" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void addBcc(EncodedStringValue value) {
-        mPduHeaders.appendEncodedStringValue(value, PduHeaders.BCC);
-    }
-
-    /**
-     * Set "BCC" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setBcc(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.BCC);
-    }
-
-    /**
-     * Get CC value.
-     *
-     * @return the value
-     */
-    public EncodedStringValue[] getCc() {
-        return mPduHeaders.getEncodedStringValues(PduHeaders.CC);
-    }
-
-    /**
-     * Add a "CC" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void addCc(EncodedStringValue value) {
-        mPduHeaders.appendEncodedStringValue(value, PduHeaders.CC);
-    }
-
-    /**
-     * Set "CC" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setCc(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.CC);
-    }
-
-    /**
-     * Get Content-type value.
-     *
-     * @return the value
-     */
-    public byte[] getContentType() {
-        return mPduHeaders.getTextString(PduHeaders.CONTENT_TYPE);
-    }
-
-    /**
-     * Set Content-type value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setContentType(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.CONTENT_TYPE);
-    }
-
-    /**
-     * Get X-Mms-Delivery-Report value.
-     *
-     * @return the value
-     */
-    public int getDeliveryReport() {
-        return mPduHeaders.getOctet(PduHeaders.DELIVERY_REPORT);
-    }
-
-    /**
-     * Set X-Mms-Delivery-Report value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setDeliveryReport(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.DELIVERY_REPORT);
-    }
-
-    /**
-     * Get X-Mms-Expiry value.
-     *
-     * Expiry-value = Value-length
-     *      (Absolute-token Date-value | Relative-token Delta-seconds-value)
-     *
-     * @return the value
-     */
-    public long getExpiry() {
-        return mPduHeaders.getLongInteger(PduHeaders.EXPIRY);
-    }
-
-    /**
-     * Set X-Mms-Expiry value.
-     *
-     * @param value the value
-     */
-    public void setExpiry(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.EXPIRY);
-    }
-
-    /**
-     * Get X-Mms-MessageSize value.
-     *
-     * Expiry-value = size of message
-     *
-     * @return the value
-     */
-    public long getMessageSize() {
-        return mPduHeaders.getLongInteger(PduHeaders.MESSAGE_SIZE);
-    }
-
-    /**
-     * Set X-Mms-MessageSize value.
-     *
-     * @param value the value
-     */
-    public void setMessageSize(long value) {
-        mPduHeaders.setLongInteger(value, PduHeaders.MESSAGE_SIZE);
-    }
-
-    /**
-     * Get X-Mms-Message-Class value.
-     * Message-class-value = Class-identifier | Token-text
-     * Class-identifier = Personal | Advertisement | Informational | Auto
-     *
-     * @return the value
-     */
-    public byte[] getMessageClass() {
-        return mPduHeaders.getTextString(PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Set X-Mms-Message-Class value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setMessageClass(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.MESSAGE_CLASS);
-    }
-
-    /**
-     * Get X-Mms-Read-Report value.
-     *
-     * @return the value
-     */
-    public int getReadReport() {
-        return mPduHeaders.getOctet(PduHeaders.READ_REPORT);
-    }
-
-    /**
-     * Set X-Mms-Read-Report value.
-     *
-     * @param value the value
-     * @throws InvalidHeaderValueException if the value is invalid.
-     */
-    public void setReadReport(int value) throws InvalidHeaderValueException {
-        mPduHeaders.setOctet(value, PduHeaders.READ_REPORT);
-    }
-
-    /**
-     * Set "To" value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTo(EncodedStringValue[] value) {
-        mPduHeaders.setEncodedStringValues(value, PduHeaders.TO);
-    }
-
-    /**
-     * Get X-Mms-Transaction-Id field value.
-     *
-     * @return the X-Mms-Report-Allowed value
-     */
-    public byte[] getTransactionId() {
-        return mPduHeaders.getTextString(PduHeaders.TRANSACTION_ID);
-    }
-
-    /**
-     * Set X-Mms-Transaction-Id field value.
-     *
-     * @param value the value
-     * @throws NullPointerException if the value is null.
-     */
-    public void setTransactionId(byte[] value) {
-        mPduHeaders.setTextString(value, PduHeaders.TRANSACTION_ID);
-    }
-
-    /*
-     * Optional, not supported header fields:
-     *
-     *     public byte getAdaptationAllowed() {return 0};
-     *     public void setAdaptationAllowed(btye value) {};
-     *
-     *     public byte[] getApplicId() {return null;}
-     *     public void setApplicId(byte[] value) {}
-     *
-     *     public byte[] getAuxApplicId() {return null;}
-     *     public void getAuxApplicId(byte[] value) {}
-     *
-     *     public byte getContentClass() {return 0x00;}
-     *     public void setApplicId(byte value) {}
-     *
-     *     public long getDeliveryTime() {return 0};
-     *     public void setDeliveryTime(long value) {};
-     *
-     *     public byte getDrmContent() {return 0x00;}
-     *     public void setDrmContent(byte value) {}
-     *
-     *     public MmFlagsValue getMmFlags() {return null;}
-     *     public void setMmFlags(MmFlagsValue value) {}
-     *
-     *     public MmStateValue getMmState() {return null;}
-     *     public void getMmState(MmStateValue value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     *
-     *     public byte getReplyCharging() {return 0x00;}
-     *     public void setReplyCharging(byte value) {}
-     *
-     *     public byte getReplyChargingDeadline() {return 0x00;}
-     *     public void setReplyChargingDeadline(byte value) {}
-     *
-     *     public byte[] getReplyChargingId() {return 0x00;}
-     *     public void setReplyChargingId(byte[] value) {}
-     *
-     *     public long getReplyChargingSize() {return 0;}
-     *     public void setReplyChargingSize(long value) {}
-     *
-     *     public byte[] getReplyApplicId() {return 0x00;}
-     *     public void setReplyApplicId(byte[] value) {}
-     *
-     *     public byte getStore() {return 0x00;}
-     *     public void setStore(byte value) {}
-     */
-}
diff --git a/src/com/android/messaging/mmslib/util/AbstractCache.java b/src/com/android/messaging/mmslib/util/AbstractCache.java
deleted file mode 100644
index a4d678a..0000000
--- a/src/com/android/messaging/mmslib/util/AbstractCache.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2008 Esmertec AG.
- * Copyright (C) 2008 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.android.messaging.mmslib.util;
-
-import androidx.collection.SimpleArrayMap;
-import android.util.Log;
-
-public abstract class AbstractCache<K, V> {
-    private static final String TAG = "AbstractCache";
-    private static final boolean LOCAL_LOGV = false;
-
-    private static final int MAX_CACHED_ITEMS = 500;
-
-    private final SimpleArrayMap<K, CacheEntry<V>> mCacheMap;
-
-    protected AbstractCache() {
-        mCacheMap = new SimpleArrayMap<K, CacheEntry<V>>();
-    }
-
-    public boolean put(K key, V value) {
-        if (LOCAL_LOGV) {
-            Log.v(TAG, "Trying to put " + key + " into cache.");
-        }
-
-        if (mCacheMap.size() >= MAX_CACHED_ITEMS) {
-            // TODO: Should remove the oldest or least hit cached entry
-            // and then cache the new one.
-            if (LOCAL_LOGV) {
-                Log.v(TAG, "Failed! size limitation reached.");
-            }
-            return false;
-        }
-
-        if (key != null) {
-            CacheEntry<V> cacheEntry = new CacheEntry<V>();
-            cacheEntry.value = value;
-            mCacheMap.put(key, cacheEntry);
-
-            if (LOCAL_LOGV) {
-                Log.v(TAG, key + " cached, " + mCacheMap.size() + " items total.");
-            }
-            return true;
-        }
-        return false;
-    }
-
-    public V get(K key) {
-        if (LOCAL_LOGV) {
-            Log.v(TAG, "Trying to get " + key + " from cache.");
-        }
-
-        if (key != null) {
-            CacheEntry<V> cacheEntry = mCacheMap.get(key);
-            if (cacheEntry != null) {
-                cacheEntry.hit++;
-                if (LOCAL_LOGV) {
-                    Log.v(TAG, key + " hit " + cacheEntry.hit + " times.");
-                }
-                return cacheEntry.value;
-            }
-        }
-        return null;
-    }
-
-    public V purge(K key) {
-        if (LOCAL_LOGV) {
-            Log.v(TAG, "Trying to purge " + key);
-        }
-
-        CacheEntry<V> v = mCacheMap.remove(key);
-
-        if (LOCAL_LOGV) {
-            Log.v(TAG, mCacheMap.size() + " items cached.");
-        }
-
-        return v != null ? v.value : null;
-    }
-
-    public void purgeAll() {
-        if (LOCAL_LOGV) {
-            Log.v(TAG, "Purging cache, " + mCacheMap.size()
-                    + " items dropped.");
-        }
-        mCacheMap.clear();
-    }
-
-    public int size() {
-        return mCacheMap.size();
-    }
-
-    private static class CacheEntry<V> {
-
-        int hit;
-
-        V value;
-    }
-}
diff --git a/src/com/android/messaging/mmslib/util/DownloadDrmHelper.java b/src/com/android/messaging/mmslib/util/DownloadDrmHelper.java
deleted file mode 100644
index c38b179..0000000
--- a/src/com/android/messaging/mmslib/util/DownloadDrmHelper.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.mmslib.util;
-
-import android.content.Context;
-import android.drm.DrmManagerClient;
-import android.util.Log;
-
-public class DownloadDrmHelper {
-    private static final String TAG = "DownloadDrmHelper";
-
-    /** The MIME type of special DRM files */
-    public static final String MIMETYPE_DRM_MESSAGE = "application/vnd.oma.drm.message";
-
-    /** The extensions of special DRM files */
-    public static final String EXTENSION_DRM_MESSAGE = ".dm";
-
-    public static final String EXTENSION_INTERNAL_FWDL = ".fl";
-
-    /**
-     * Checks if the Media Type is a DRM Media Type
-     *
-     * @param drmManagerClient A DrmManagerClient
-     * @param mimetype         Media Type to check
-     * @return True if the Media Type is DRM else false
-     */
-    public static boolean isDrmMimeType(Context context, String mimetype) {
-        boolean result = false;
-        if (context != null) {
-            try {
-                DrmManagerClient drmClient = new DrmManagerClient(context);
-                if (drmClient != null && mimetype != null && mimetype.length() > 0) {
-                    result = drmClient.canHandle("", mimetype);
-                }
-            } catch (IllegalArgumentException e) {
-                Log.w(TAG,
-                        "DrmManagerClient instance could not be created, context is Illegal.");
-            } catch (IllegalStateException e) {
-                Log.w(TAG, "DrmManagerClient didn't initialize properly.");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Checks if the Media Type needs to be DRM converted
-     *
-     * @param mimetype Media type of the content
-     * @return True if convert is needed else false
-     */
-    public static boolean isDrmConvertNeeded(String mimetype) {
-        return MIMETYPE_DRM_MESSAGE.equals(mimetype);
-    }
-
-    /**
-     * Modifies the file extension for a DRM Forward Lock file NOTE: This
-     * function shouldn't be called if the file shouldn't be DRM converted
-     */
-    public static String modifyDrmFwLockFileExtension(String filename) {
-        if (filename != null) {
-            int extensionIndex;
-            extensionIndex = filename.lastIndexOf(".");
-            if (extensionIndex != -1) {
-                filename = filename.substring(0, extensionIndex);
-            }
-            filename = filename.concat(EXTENSION_INTERNAL_FWDL);
-        }
-        return filename;
-    }
-
-    /**
-     * Gets the original mime type of DRM protected content.
-     *
-     * @param context        The context
-     * @param path           Path to the file
-     * @param containingMime The current mime type of of the file i.e. the
-     *                       containing mime type
-     * @return The original mime type of the file if DRM protected else the
-     *         currentMime
-     */
-    public static String getOriginalMimeType(Context context, String path, String containingMime) {
-        String result = containingMime;
-        DrmManagerClient drmClient = new DrmManagerClient(context);
-        try {
-            if (drmClient.canHandle(path, null)) {
-                result = drmClient.getOriginalMimeType(path);
-            }
-        } catch (IllegalArgumentException ex) {
-            Log.w(TAG,
-                    "Can't get original mime type since path is null or empty string.");
-        } catch (IllegalStateException ex) {
-            Log.w(TAG, "DrmManagerClient didn't initialize properly.");
-        }
-        return result;
-    }
-}
diff --git a/src/com/android/messaging/mmslib/util/DrmConvertSession.java b/src/com/android/messaging/mmslib/util/DrmConvertSession.java
deleted file mode 100644
index 604e391..0000000
--- a/src/com/android/messaging/mmslib/util/DrmConvertSession.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.mmslib.util;
-
-import android.content.Context;
-import android.drm.DrmConvertedStatus;
-import android.drm.DrmManagerClient;
-import android.util.Log;
-
-import com.android.messaging.mmslib.Downloads;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-
-
-public class DrmConvertSession {
-    private DrmManagerClient mDrmClient;
-    private int mConvertSessionId;
-    private static final String TAG = "DrmConvertSession";
-
-    private DrmConvertSession(DrmManagerClient drmClient, int convertSessionId) {
-        mDrmClient = drmClient;
-        mConvertSessionId = convertSessionId;
-    }
-
-    /**
-     * Start of converting a file.
-     *
-     * @param context  The context of the application running the convert session.
-     * @param mimeType Mimetype of content that shall be converted.
-     * @return A convert session or null in case an error occurs.
-     */
-    public static DrmConvertSession open(Context context, String mimeType) {
-        DrmManagerClient drmClient = null;
-        int convertSessionId = -1;
-        if (context != null && mimeType != null && !mimeType.equals("")) {
-            try {
-                drmClient = new DrmManagerClient(context);
-                try {
-                    convertSessionId = drmClient.openConvertSession(mimeType);
-                } catch (IllegalArgumentException e) {
-                    Log.w(TAG, "Conversion of Mimetype: " + mimeType
-                            + " is not supported.", e);
-                } catch (IllegalStateException e) {
-                    Log.w(TAG, "Could not access Open DrmFramework.", e);
-                }
-            } catch (IllegalArgumentException e) {
-                Log.w(TAG,
-                        "DrmManagerClient instance could not be created, context is Illegal.");
-            } catch (IllegalStateException e) {
-                Log.w(TAG, "DrmManagerClient didn't initialize properly.");
-            }
-        }
-
-        if (drmClient == null || convertSessionId < 0) {
-            return null;
-        } else {
-            return new DrmConvertSession(drmClient, convertSessionId);
-        }
-    }
-
-    /**
-     * Convert a buffer of data to protected format.
-     *
-     * @param buffer Buffer filled with data to convert.
-     * @param size   The number of bytes that shall be converted.
-     * @return A Buffer filled with converted data, if execution is ok, in all
-     * other case null.
-     */
-    public byte[] convert(byte[] inBuffer, int size) {
-        byte[] result = null;
-        if (inBuffer != null) {
-            DrmConvertedStatus convertedStatus = null;
-            try {
-                if (size != inBuffer.length) {
-                    byte[] buf = new byte[size];
-                    System.arraycopy(inBuffer, 0, buf, 0, size);
-                    convertedStatus = mDrmClient.convertData(mConvertSessionId, buf);
-                } else {
-                    convertedStatus = mDrmClient.convertData(mConvertSessionId, inBuffer);
-                }
-
-                if (convertedStatus != null &&
-                        convertedStatus.statusCode == DrmConvertedStatus.STATUS_OK &&
-                        convertedStatus.convertedData != null) {
-                    result = convertedStatus.convertedData;
-                }
-            } catch (IllegalArgumentException e) {
-                Log.w(TAG, "Buffer with data to convert is illegal. Convertsession: "
-                        + mConvertSessionId, e);
-            } catch (IllegalStateException e) {
-                Log.w(TAG, "Could not convert data. Convertsession: " +
-                        mConvertSessionId, e);
-            }
-        } else {
-            throw new IllegalArgumentException("Parameter inBuffer is null");
-        }
-        return result;
-    }
-
-    /**
-     * Ends a conversion session of a file.
-     *
-     * @param fileName The filename of the converted file.
-     * @return Downloads.Impl.STATUS_SUCCESS if execution is ok.
-     *         Downloads.Impl.STATUS_FILE_ERROR in case converted file can not
-     *         be accessed. Downloads.Impl.STATUS_NOT_ACCEPTABLE if a problem
-     *         occurs when accessing drm framework.
-     *         Downloads.Impl.STATUS_UNKNOWN_ERROR if a general error occurred.
-     */
-    public int close(String filename) {
-        DrmConvertedStatus convertedStatus = null;
-        int result = Downloads.Impl.STATUS_UNKNOWN_ERROR;
-        if (mDrmClient != null && mConvertSessionId >= 0) {
-            try {
-                convertedStatus = mDrmClient.closeConvertSession(mConvertSessionId);
-                if (convertedStatus == null ||
-                        convertedStatus.statusCode != DrmConvertedStatus.STATUS_OK ||
-                        convertedStatus.convertedData == null) {
-                    result = Downloads.Impl.STATUS_NOT_ACCEPTABLE;
-                } else {
-                    RandomAccessFile rndAccessFile = null;
-                    try {
-                        rndAccessFile = new RandomAccessFile(filename, "rw");
-                        rndAccessFile.seek(convertedStatus.offset);
-                        rndAccessFile.write(convertedStatus.convertedData);
-                        result = Downloads.Impl.STATUS_SUCCESS;
-                    } catch (FileNotFoundException e) {
-                        result = Downloads.Impl.STATUS_FILE_ERROR;
-                        Log.w(TAG, "File: " + filename + " could not be found.", e);
-                    } catch (IOException e) {
-                        result = Downloads.Impl.STATUS_FILE_ERROR;
-                        Log.w(TAG, "Could not access File: " + filename + " .", e);
-                    } catch (IllegalArgumentException e) {
-                        result = Downloads.Impl.STATUS_FILE_ERROR;
-                        Log.w(TAG, "Could not open file in mode: rw", e);
-                    } catch (SecurityException e) {
-                        Log.w(TAG, "Access to File: " + filename +
-                                " was denied denied by SecurityManager.", e);
-                    } finally {
-                        if (rndAccessFile != null) {
-                            try {
-                                rndAccessFile.close();
-                            } catch (IOException e) {
-                                result = Downloads.Impl.STATUS_FILE_ERROR;
-                                Log.w(TAG, "Failed to close File:" + filename
-                                        + ".", e);
-                            }
-                        }
-                    }
-                }
-            } catch (IllegalStateException e) {
-                Log.w(TAG, "Could not close convertsession. Convertsession: " +
-                        mConvertSessionId, e);
-            }
-        }
-        return result;
-    }
-}
diff --git a/src/com/android/messaging/mmslib/util/PduCache.java b/src/com/android/messaging/mmslib/util/PduCache.java
deleted file mode 100644
index 939e4bd..0000000
--- a/src/com/android/messaging/mmslib/util/PduCache.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (C) 2008 Esmertec AG.
- * Copyright (C) 2008 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.android.messaging.mmslib.util;
-
-import android.content.ContentUris;
-import android.content.UriMatcher;
-import android.net.Uri;
-import android.provider.Telephony.Mms;
-import androidx.collection.SimpleArrayMap;
-import android.util.Log;
-import android.util.SparseArray;
-
-import java.util.HashSet;
-
-public final class PduCache extends AbstractCache<Uri, PduCacheEntry> {
-    private static final String TAG = "PduCache";
-    private static final boolean LOCAL_LOGV = false;
-
-    private static final int MMS_ALL             = 0;
-    private static final int MMS_ALL_ID          = 1;
-    private static final int MMS_INBOX           = 2;
-    private static final int MMS_INBOX_ID        = 3;
-    private static final int MMS_SENT            = 4;
-    private static final int MMS_SENT_ID         = 5;
-    private static final int MMS_DRAFTS          = 6;
-    private static final int MMS_DRAFTS_ID       = 7;
-    private static final int MMS_OUTBOX          = 8;
-    private static final int MMS_OUTBOX_ID       = 9;
-    private static final int MMS_CONVERSATION    = 10;
-    private static final int MMS_CONVERSATION_ID = 11;
-
-    private static final UriMatcher URI_MATCHER;
-    private static final SparseArray<Integer> MATCH_TO_MSGBOX_ID_MAP;
-
-    private static PduCache sInstance;
-
-    static {
-        URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
-        URI_MATCHER.addURI("mms", null,         MMS_ALL);
-        URI_MATCHER.addURI("mms", "#",          MMS_ALL_ID);
-        URI_MATCHER.addURI("mms", "inbox",      MMS_INBOX);
-        URI_MATCHER.addURI("mms", "inbox/#",    MMS_INBOX_ID);
-        URI_MATCHER.addURI("mms", "sent",       MMS_SENT);
-        URI_MATCHER.addURI("mms", "sent/#",     MMS_SENT_ID);
-        URI_MATCHER.addURI("mms", "drafts",     MMS_DRAFTS);
-        URI_MATCHER.addURI("mms", "drafts/#",   MMS_DRAFTS_ID);
-        URI_MATCHER.addURI("mms", "outbox",     MMS_OUTBOX);
-        URI_MATCHER.addURI("mms", "outbox/#",   MMS_OUTBOX_ID);
-        URI_MATCHER.addURI("mms-sms", "conversations",   MMS_CONVERSATION);
-        URI_MATCHER.addURI("mms-sms", "conversations/#", MMS_CONVERSATION_ID);
-
-        MATCH_TO_MSGBOX_ID_MAP = new SparseArray<Integer>();
-        MATCH_TO_MSGBOX_ID_MAP.put(MMS_INBOX,  Mms.MESSAGE_BOX_INBOX);
-        MATCH_TO_MSGBOX_ID_MAP.put(MMS_SENT,   Mms.MESSAGE_BOX_SENT);
-        MATCH_TO_MSGBOX_ID_MAP.put(MMS_DRAFTS, Mms.MESSAGE_BOX_DRAFTS);
-        MATCH_TO_MSGBOX_ID_MAP.put(MMS_OUTBOX, Mms.MESSAGE_BOX_OUTBOX);
-    }
-
-    private final SparseArray<HashSet<Uri>> mMessageBoxes;
-    private final SimpleArrayMap<Long, HashSet<Uri>> mThreads;
-    private final HashSet<Uri> mUpdating;
-
-    private PduCache() {
-        mMessageBoxes = new SparseArray<HashSet<Uri>>();
-        mThreads = new SimpleArrayMap<Long, HashSet<Uri>>();
-        mUpdating = new HashSet<Uri>();
-    }
-
-    public static final synchronized PduCache getInstance() {
-        if (sInstance == null) {
-            if (LOCAL_LOGV) {
-                Log.v(TAG, "Constructing new PduCache instance.");
-            }
-            sInstance = new PduCache();
-        }
-        return sInstance;
-    }
-
-    @Override
-    public synchronized boolean put(Uri uri, PduCacheEntry entry) {
-        int msgBoxId = entry.getMessageBox();
-        HashSet<Uri> msgBox = mMessageBoxes.get(msgBoxId);
-        if (msgBox == null) {
-            msgBox = new HashSet<Uri>();
-            mMessageBoxes.put(msgBoxId, msgBox);
-        }
-
-        long threadId = entry.getThreadId();
-        HashSet<Uri> thread = mThreads.get(threadId);
-        if (thread == null) {
-            thread = new HashSet<Uri>();
-            mThreads.put(threadId, thread);
-        }
-
-        Uri finalKey = normalizeKey(uri);
-        boolean result = super.put(finalKey, entry);
-        if (result) {
-            msgBox.add(finalKey);
-            thread.add(finalKey);
-        }
-        setUpdating(uri, false);
-        return result;
-    }
-
-    public synchronized void setUpdating(Uri uri, boolean updating) {
-        if (updating) {
-            mUpdating.add(uri);
-        } else {
-            mUpdating.remove(uri);
-        }
-    }
-
-    public synchronized boolean isUpdating(Uri uri) {
-        return mUpdating.contains(uri);
-    }
-
-    @Override
-    public synchronized PduCacheEntry purge(Uri uri) {
-        int match = URI_MATCHER.match(uri);
-        switch (match) {
-            case MMS_ALL_ID:
-                return purgeSingleEntry(uri);
-            case MMS_INBOX_ID:
-            case MMS_SENT_ID:
-            case MMS_DRAFTS_ID:
-            case MMS_OUTBOX_ID:
-                String msgId = uri.getLastPathSegment();
-                return purgeSingleEntry(Uri.withAppendedPath(Mms.CONTENT_URI, msgId));
-            // Implicit batch of purge, return null.
-            case MMS_ALL:
-            case MMS_CONVERSATION:
-                purgeAll();
-                return null;
-            case MMS_INBOX:
-            case MMS_SENT:
-            case MMS_DRAFTS:
-            case MMS_OUTBOX:
-                purgeByMessageBox(MATCH_TO_MSGBOX_ID_MAP.get(match));
-                return null;
-            case MMS_CONVERSATION_ID:
-                purgeByThreadId(ContentUris.parseId(uri));
-                return null;
-            default:
-                return null;
-        }
-    }
-
-    private PduCacheEntry purgeSingleEntry(Uri key) {
-        mUpdating.remove(key);
-        PduCacheEntry entry = super.purge(key);
-        if (entry != null) {
-            removeFromThreads(key, entry);
-            removeFromMessageBoxes(key, entry);
-            return entry;
-        }
-        return null;
-    }
-
-    @Override
-    public synchronized void purgeAll() {
-        super.purgeAll();
-
-        mMessageBoxes.clear();
-        mThreads.clear();
-        mUpdating.clear();
-    }
-
-    /**
-     * @param uri The Uri to be normalized.
-     * @return Uri The normalized key of cached entry.
-     */
-    private Uri normalizeKey(Uri uri) {
-        int match = URI_MATCHER.match(uri);
-        Uri normalizedKey = null;
-
-        switch (match) {
-            case MMS_ALL_ID:
-                normalizedKey = uri;
-                break;
-            case MMS_INBOX_ID:
-            case MMS_SENT_ID:
-            case MMS_DRAFTS_ID:
-            case MMS_OUTBOX_ID:
-                String msgId = uri.getLastPathSegment();
-                normalizedKey = Uri.withAppendedPath(Mms.CONTENT_URI, msgId);
-                break;
-            default:
-                return null;
-        }
-
-        if (LOCAL_LOGV) {
-            Log.v(TAG, uri + " -> " + normalizedKey);
-        }
-        return normalizedKey;
-    }
-
-    private void purgeByMessageBox(Integer msgBoxId) {
-        if (LOCAL_LOGV) {
-            Log.v(TAG, "Purge cache in message box: " + msgBoxId);
-        }
-
-        if (msgBoxId != null) {
-            HashSet<Uri> msgBox = mMessageBoxes.get(msgBoxId);
-            mMessageBoxes.remove(msgBoxId);
-            if (msgBox != null) {
-                for (Uri key : msgBox) {
-                    mUpdating.remove(key);
-                    PduCacheEntry entry = super.purge(key);
-                    if (entry != null) {
-                        removeFromThreads(key, entry);
-                    }
-                }
-            }
-        }
-    }
-
-    private void removeFromThreads(Uri key, PduCacheEntry entry) {
-        HashSet<Uri> thread = mThreads.get(entry.getThreadId());
-        if (thread != null) {
-            thread.remove(key);
-        }
-    }
-
-    private void purgeByThreadId(long threadId) {
-        if (LOCAL_LOGV) {
-            Log.v(TAG, "Purge cache in thread: " + threadId);
-        }
-
-        HashSet<Uri> thread = mThreads.remove(threadId);
-        if (thread != null) {
-            for (Uri key : thread) {
-                mUpdating.remove(key);
-                PduCacheEntry entry = super.purge(key);
-                if (entry != null) {
-                    removeFromMessageBoxes(key, entry);
-                }
-            }
-        }
-    }
-
-    private void removeFromMessageBoxes(Uri key, PduCacheEntry entry) {
-        HashSet<Uri> msgBox = mThreads.get(Long.valueOf(entry.getMessageBox()));
-        if (msgBox != null) {
-            msgBox.remove(key);
-        }
-    }
-}
diff --git a/src/com/android/messaging/mmslib/util/PduCacheEntry.java b/src/com/android/messaging/mmslib/util/PduCacheEntry.java
deleted file mode 100644
index b287f00..0000000
--- a/src/com/android/messaging/mmslib/util/PduCacheEntry.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2008 Esmertec AG.
- * Copyright (C) 2008 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.android.messaging.mmslib.util;
-
-import com.android.messaging.mmslib.pdu.GenericPdu;
-
-public final class PduCacheEntry {
-    private final GenericPdu mPdu;
-    private final int mMessageBox;
-    private final long mThreadId;
-
-    public PduCacheEntry(GenericPdu pdu, int msgBox, long threadId) {
-        mPdu = pdu;
-        mMessageBox = msgBox;
-        mThreadId = threadId;
-    }
-
-    public GenericPdu getPdu() {
-        return mPdu;
-    }
-
-    public int getMessageBox() {
-        return mMessageBox;
-    }
-
-    public long getThreadId() {
-        return mThreadId;
-    }
-}
diff --git a/src/com/android/messaging/receiver/AbortMmsWapPushReceiver.java b/src/com/android/messaging/receiver/AbortMmsWapPushReceiver.java
deleted file mode 100644
index 9e09a2a..0000000
--- a/src/com/android/messaging/receiver/AbortMmsWapPushReceiver.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.provider.Telephony;
-
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-/**
- * This receiver is used to abort MMS WAP broadcasts pre-KLP when SMS is enabled.
- */
-public class AbortMmsWapPushReceiver extends BroadcastReceiver {
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        if (Telephony.Sms.Intents.WAP_PUSH_RECEIVED_ACTION.equals(intent.getAction())
-                && ContentType.MMS_MESSAGE.equals(intent.getType())) {
-            // If we are enabled, it's our job to stop the broadcast from continuing. This
-            // receiver is not used on KLP but we do an extra check here just to make sure.
-            if (!OsUtil.isAtLeastKLP() && PhoneUtils.getDefault().isSmsEnabled()) {
-                abortBroadcast();
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/receiver/AbortSmsReceiver.java b/src/com/android/messaging/receiver/AbortSmsReceiver.java
deleted file mode 100644
index f4491d8..0000000
--- a/src/com/android/messaging/receiver/AbortSmsReceiver.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-/**
- * This receiver is used to abort SMS broadcasts pre-KLP when SMS is enabled.
- */
-public final class AbortSmsReceiver extends BroadcastReceiver {
-
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        // If we are enabled, it's our job to stop the broadcast from continuing. This
-        // receiver is not used on KLP but we do an extra check here just to make sure.
-        if (!OsUtil.isAtLeastKLP() && PhoneUtils.getDefault().isSmsEnabled()) {
-            if (!SmsReceiver.shouldIgnoreMessage(intent)) {
-                abortBroadcast();
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/receiver/BootAndPackageReplacedReceiver.java b/src/com/android/messaging/receiver/BootAndPackageReplacedReceiver.java
deleted file mode 100644
index be0d296..0000000
--- a/src/com/android/messaging/receiver/BootAndPackageReplacedReceiver.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-import com.android.messaging.BugleApplication;
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.action.UpdateMessageNotificationAction;
-import com.android.messaging.util.BuglePrefsKeys;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Receives notification of boot completion and package replacement
- */
-public class BootAndPackageReplacedReceiver extends BroadcastReceiver {
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())
-                || Intent.ACTION_MY_PACKAGE_REPLACED.equals(intent.getAction())) {
-            // Repost unseen notifications
-            Factory.get().getApplicationPrefs().putLong(
-                    BuglePrefsKeys.LATEST_NOTIFICATION_MESSAGE_TIMESTAMP, Long.MIN_VALUE);
-            UpdateMessageNotificationAction.updateMessageNotification();
-
-            BugleApplication.updateAppConfig(context);
-        } else {
-            LogUtil.i(LogUtil.BUGLE_TAG, "BootAndPackageReplacedReceiver got unexpected action: "
-                    + intent.getAction());
-        }
-    }
-}
-
diff --git a/src/com/android/messaging/receiver/DefaultSmsSubscriptionChangeReceiver.java b/src/com/android/messaging/receiver/DefaultSmsSubscriptionChangeReceiver.java
deleted file mode 100644
index d5153a0..0000000
--- a/src/com/android/messaging/receiver/DefaultSmsSubscriptionChangeReceiver.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-import com.android.messaging.datamodel.ParticipantRefresh;
-
-/**
- * Responds to default SMS subscription selection changes from system Settings.
- */
-public class DefaultSmsSubscriptionChangeReceiver extends BroadcastReceiver {
-    @Override
-    public void onReceive(Context context, Intent intent) {
-         ParticipantRefresh.refreshSelfParticipants();
-    }
-}
diff --git a/src/com/android/messaging/receiver/MmsWapPushDeliverReceiver.java b/src/com/android/messaging/receiver/MmsWapPushDeliverReceiver.java
deleted file mode 100644
index a5c247c..0000000
--- a/src/com/android/messaging/receiver/MmsWapPushDeliverReceiver.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.provider.Telephony;
-
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.PhoneUtils;
-
-/**
- * Class that handles MMS WAP push intent from telephony on KLP+ Devices.
- */
-public class MmsWapPushDeliverReceiver extends BroadcastReceiver {
-
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        if (Telephony.Sms.Intents.WAP_PUSH_DELIVER_ACTION.equals(intent.getAction())
-                && ContentType.MMS_MESSAGE.equals(intent.getType())) {
-            // Always convert negative subIds into -1
-            int subId = PhoneUtils.getDefault().getEffectiveIncomingSubIdFromSystem(
-                    intent, MmsWapPushReceiver.EXTRA_SUBSCRIPTION);
-            byte[] data = intent.getByteArrayExtra(MmsWapPushReceiver.EXTRA_DATA);
-            MmsWapPushReceiver.mmsReceived(subId, data);
-        }
-    }
-}
diff --git a/src/com/android/messaging/receiver/MmsWapPushReceiver.java b/src/com/android/messaging/receiver/MmsWapPushReceiver.java
deleted file mode 100644
index 29cf0db..0000000
--- a/src/com/android/messaging/receiver/MmsWapPushReceiver.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.provider.Telephony;
-
-import com.android.messaging.datamodel.action.ReceiveMmsMessageAction;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.PhoneUtils;
-
-/**
- * Class that handles MMS WAP push intent from telephony on pre-KLP Devices.
- */
-public class MmsWapPushReceiver extends BroadcastReceiver {
-    static final String EXTRA_SUBSCRIPTION = "subscription";
-    static final String EXTRA_DATA = "data";
-
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        if (Telephony.Sms.Intents.WAP_PUSH_RECEIVED_ACTION.equals(intent.getAction())
-                && ContentType.MMS_MESSAGE.equals(intent.getType())) {
-            if (PhoneUtils.getDefault().isSmsEnabled()) {
-                // Always convert negative subIds into -1
-                final int subId = PhoneUtils.getDefault().getEffectiveIncomingSubIdFromSystem(
-                        intent, MmsWapPushReceiver.EXTRA_SUBSCRIPTION);
-                final byte[] data = intent.getByteArrayExtra(MmsWapPushReceiver.EXTRA_DATA);
-                mmsReceived(subId, data);
-            }
-        }
-    }
-
-    static void mmsReceived(final int subId, final byte[] data) {
-        if (!PhoneUtils.getDefault().isSmsEnabled()) {
-            return;
-        }
-
-        final ReceiveMmsMessageAction action = new ReceiveMmsMessageAction(subId, data);
-        action.start();
-    }
-}
-
diff --git a/src/com/android/messaging/receiver/NotificationReceiver.java b/src/com/android/messaging/receiver/NotificationReceiver.java
deleted file mode 100644
index bbb847d..0000000
--- a/src/com/android/messaging/receiver/NotificationReceiver.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.action.MarkAsSeenAction;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.ConversationIdSet;
-import com.android.messaging.util.LogUtil;
-
-// NotificationReceiver is used to handle delete intents from notifications. When a user
-// clears all notifications or swipes a bugle notification away, the intent we pass in as
-// the delete intent will get handled here.
-public class NotificationReceiver extends BroadcastReceiver {
-    // Logging
-    public static final String TAG = LogUtil.BUGLE_TAG;
-    public static final boolean VERBOSE = false;
-
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        if (VERBOSE) {
-            LogUtil.v(TAG, "NotificationReceiver.onReceive: intent " + intent);
-        }
-        if (intent.getAction().equals(UIIntents.ACTION_RESET_NOTIFICATIONS)) {
-            final String conversationIdSetString =
-                    intent.getStringExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID_SET);
-            final int notificationTargets = intent.getIntExtra(
-                    UIIntents.UI_INTENT_EXTRA_NOTIFICATIONS_UPDATE, BugleNotifications.UPDATE_ALL);
-            if (conversationIdSetString == null) {
-                BugleNotifications.markAllMessagesAsSeen();
-            } else {
-                for (final String conversationId :
-                        ConversationIdSet.createSet(conversationIdSetString)) {
-                    MarkAsSeenAction.markAsSeen(conversationId);
-                    BugleNotifications.resetLastMessageDing(conversationId);
-                }
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/receiver/SendStatusReceiver.java b/src/com/android/messaging/receiver/SendStatusReceiver.java
deleted file mode 100644
index 8d2e10f..0000000
--- a/src/com/android/messaging/receiver/SendStatusReceiver.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.provider.Telephony.Sms;
-import android.telephony.SmsMessage;
-
-import com.android.messaging.datamodel.action.ProcessDeliveryReportAction;
-import com.android.messaging.datamodel.action.ProcessDownloadedMmsAction;
-import com.android.messaging.datamodel.action.ProcessSentMessageAction;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.sms.SmsSender;
-import com.android.messaging.util.LogUtil;
-
-/**
- * The SMS sent and delivery intent receiver.
- *
- * This class just simply forwards the intents to proper recipients for actual handling.
- */
-public class SendStatusReceiver extends BroadcastReceiver {
-    public static final String MESSAGE_SENT_ACTION =
-            "com.android.messaging.receiver.SendStatusReceiver.MESSAGE_SENT";
-    public static final String MESSAGE_DELIVERED_ACTION =
-            "com.android.messaging.receiver.SendStatusReceiver.MESSAGE_DELIVERED";
-    public static final String MMS_SENT_ACTION =
-            "com.android.messaging.receiver.SendStatusReceiver.MMS_SENT";
-    public static final String MMS_DOWNLOADED_ACTION =
-            "com.android.messaging.receiver.SendStatusReceiver.MMS_DOWNLOADED";
-
-    // Defined by platform, but no constant provided. See docs for SmsManager.sendTextMessage.
-    public static final String EXTRA_ERROR_CODE = "errorCode";
-
-    public static final String EXTRA_PART_ID = "partId";
-    public static final String EXTRA_SUB_ID = "subId";
-
-    public static final int NO_ERROR_CODE = -1;
-    public static final int NO_PART_ID = -1;
-
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        // This will be called on the main thread (so it should exit quickly)
-        final String action = intent.getAction();
-        final int resultCode = getResultCode();
-        if (MESSAGE_SENT_ACTION.equals(action)) {
-            final Uri requestId = intent.getData();
-            SmsSender.setResult(
-                    requestId,
-                    resultCode,
-                    intent.getIntExtra(EXTRA_ERROR_CODE, NO_ERROR_CODE),
-                    intent.getIntExtra(EXTRA_PART_ID, NO_PART_ID),
-                    intent.getIntExtra(EXTRA_SUB_ID, ParticipantData.DEFAULT_SELF_SUB_ID));
-        } else if (MMS_SENT_ACTION.equals(action)) {
-            final Uri messageUri = intent.getData();
-            ProcessSentMessageAction.processMmsSent(resultCode, messageUri,
-                    intent.getExtras());
-        } else if (MMS_DOWNLOADED_ACTION.equals(action)) {
-            ProcessDownloadedMmsAction.processMessageDownloaded(resultCode,
-                    intent.getExtras());
-        } else if (MESSAGE_DELIVERED_ACTION.equals(action)) {
-            final SmsMessage smsMessage = MmsUtils.getSmsMessageFromDeliveryReport(intent);
-            final Uri smsMessageUri = intent.getData();
-            if (smsMessage == null) {
-                LogUtil.e(LogUtil.BUGLE_TAG, "SendStatusReceiver: empty report message");
-                return;
-            }
-            int status = Sms.STATUS_COMPLETE;
-            try {
-                final String format = intent.getStringExtra("format");
-                status = smsMessage.getStatus();
-                // Simple matching up CDMA status with GSM status.
-                if ("3gpp2".equals(format)) {
-                    final int errorClass = (status >> 24) & 0x03;
-                    final int statusCode = (status >> 16) & 0x3f;
-                    switch (errorClass) {
-                        case 0: /*ERROR_NONE*/
-                            if (statusCode == 0x02 /*STATUS_DELIVERED*/) {
-                                status = Sms.STATUS_COMPLETE;
-                            } else status = Sms.STATUS_PENDING;
-                            break;
-                        case 2: /*ERROR_TEMPORARY*/
-                            // TODO: Need to check whether SC still trying to deliver the SMS to
-                            // destination and will send the report again?
-                            status = Sms.STATUS_PENDING;
-                            break;
-                        case 3: /*ERROR_PERMANENT*/
-                            status = Sms.STATUS_FAILED;
-                            break;
-                        default:
-                            status = Sms.STATUS_PENDING;
-                    }
-                }
-            } catch (final NullPointerException e) {
-                // Sometimes, SmsMessage.mWrappedSmsMessage is null causing NPE when we access
-                // the methods on it although the SmsMessage itself is not null.
-                LogUtil.e(LogUtil.BUGLE_TAG, "SendStatusReceiver: NPE inside SmsMessage");
-                return;
-            }
-            ProcessDeliveryReportAction.deliveryReportReceived(smsMessageUri, status);
-        }
-    }
-}
diff --git a/src/com/android/messaging/receiver/SmsDeliverReceiver.java b/src/com/android/messaging/receiver/SmsDeliverReceiver.java
deleted file mode 100644
index 6a9b66c..0000000
--- a/src/com/android/messaging/receiver/SmsDeliverReceiver.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-/**
- * Class that receives incoming SMS messages on KLP+ Devices.
- */
-public final class SmsDeliverReceiver extends BroadcastReceiver {
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        SmsReceiver.deliverSmsIntent(context, intent);
-    }
-}
diff --git a/src/com/android/messaging/receiver/SmsReceiver.java b/src/com/android/messaging/receiver/SmsReceiver.java
deleted file mode 100644
index f1f9bcd..0000000
--- a/src/com/android/messaging/receiver/SmsReceiver.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.res.Resources;
-import android.provider.Telephony;
-import android.provider.Telephony.Sms;
-import androidx.core.app.NotificationCompat;
-import androidx.core.app.NotificationCompat.Builder;
-import androidx.core.app.NotificationCompat.Style;
-import androidx.core.app.NotificationManagerCompat;
-
-import java.util.ArrayList;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.BugleNotifications;
-import com.android.messaging.datamodel.MessageNotificationState;
-import com.android.messaging.datamodel.NoConfirmationSmsSendService;
-import com.android.messaging.datamodel.action.ReceiveSmsMessageAction;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PendingIntentConstants;
-import com.android.messaging.util.PhoneUtils;
-
-/**
- * Class that receives incoming SMS messages through android.provider.Telephony.SMS_RECEIVED
- *
- * This class serves two purposes:
- * - Process phone verification SMS messages
- * - Handle SMS messages when the user has enabled us to be the default SMS app (Pre-KLP)
- */
-public final class SmsReceiver extends BroadcastReceiver {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static ArrayList<Pattern> sIgnoreSmsPatterns;
-
-    /**
-     * Enable or disable the SmsReceiver as appropriate. Pre-KLP we use this receiver for
-     * receiving incoming SMS messages. For KLP+ this receiver is not used when running as the
-     * primary user and the SmsDeliverReceiver is used for receiving incoming SMS messages.
-     * When running as a secondary user, this receiver is still used to trigger the incoming
-     * notification.
-     */
-    public static void updateSmsReceiveHandler(final Context context) {
-        boolean smsReceiverEnabled;
-        boolean mmsWapPushReceiverEnabled;
-        boolean respondViaMessageEnabled;
-        boolean broadcastAbortEnabled;
-
-        if (OsUtil.isAtLeastKLP()) {
-            // When we're running as the secondary user, we don't get the new SMS_DELIVER intent,
-            // only the primary user receives that. As secondary, we need to go old-school and
-            // listen for the SMS_RECEIVED intent. For the secondary user, use this SmsReceiver
-            // for both sms and mms notification. For the primary user on KLP (and above), we don't
-            // use the SmsReceiver.
-            smsReceiverEnabled = OsUtil.isSecondaryUser();
-            // On KLP use the new deliver event for mms
-            mmsWapPushReceiverEnabled = false;
-            // On KLP we need to always enable this handler to show in the list of sms apps
-            respondViaMessageEnabled = true;
-            // On KLP we don't need to abort the broadcast
-            broadcastAbortEnabled = false;
-        } else {
-            // On JB we use the sms receiver for both sms/mms delivery
-            final boolean carrierSmsEnabled = PhoneUtils.getDefault().isSmsEnabled();
-            smsReceiverEnabled = carrierSmsEnabled;
-
-            // On JB we use the mms receiver when sms/mms is enabled
-            mmsWapPushReceiverEnabled = carrierSmsEnabled;
-            // On JB this is dynamic to make sure we don't show in dialer if sms is disabled
-            respondViaMessageEnabled = carrierSmsEnabled;
-            // On JB we need to abort broadcasts if SMS is enabled
-            broadcastAbortEnabled = carrierSmsEnabled;
-        }
-
-        final PackageManager packageManager = context.getPackageManager();
-        final boolean logv = LogUtil.isLoggable(TAG, LogUtil.VERBOSE);
-        if (smsReceiverEnabled) {
-            if (logv) {
-                LogUtil.v(TAG, "Enabling SMS message receiving");
-            }
-            packageManager.setComponentEnabledSetting(
-                    new ComponentName(context, SmsReceiver.class),
-                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
-
-        } else {
-            if (logv) {
-                LogUtil.v(TAG, "Disabling SMS message receiving");
-            }
-            packageManager.setComponentEnabledSetting(
-                    new ComponentName(context, SmsReceiver.class),
-                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
-        }
-        if (mmsWapPushReceiverEnabled) {
-            if (logv) {
-                LogUtil.v(TAG, "Enabling MMS message receiving");
-            }
-            packageManager.setComponentEnabledSetting(
-                    new ComponentName(context, MmsWapPushReceiver.class),
-                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
-        } else {
-            if (logv) {
-                LogUtil.v(TAG, "Disabling MMS message receiving");
-            }
-            packageManager.setComponentEnabledSetting(
-                    new ComponentName(context, MmsWapPushReceiver.class),
-                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
-        }
-        if (broadcastAbortEnabled) {
-            if (logv) {
-                LogUtil.v(TAG, "Enabling SMS/MMS broadcast abort");
-            }
-            packageManager.setComponentEnabledSetting(
-                    new ComponentName(context, AbortSmsReceiver.class),
-                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
-            packageManager.setComponentEnabledSetting(
-                    new ComponentName(context, AbortMmsWapPushReceiver.class),
-                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
-        } else {
-            if (logv) {
-                LogUtil.v(TAG, "Disabling SMS/MMS broadcast abort");
-            }
-            packageManager.setComponentEnabledSetting(
-                    new ComponentName(context, AbortSmsReceiver.class),
-                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
-            packageManager.setComponentEnabledSetting(
-                    new ComponentName(context, AbortMmsWapPushReceiver.class),
-                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
-        }
-        if (respondViaMessageEnabled) {
-            if (logv) {
-                LogUtil.v(TAG, "Enabling respond via message intent");
-            }
-            packageManager.setComponentEnabledSetting(
-                    new ComponentName(context, NoConfirmationSmsSendService.class),
-                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
-        } else {
-            if (logv) {
-                LogUtil.v(TAG, "Disabling respond via message intent");
-            }
-            packageManager.setComponentEnabledSetting(
-                    new ComponentName(context, NoConfirmationSmsSendService.class),
-                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
-        }
-    }
-
-    private static final String EXTRA_ERROR_CODE = "errorCode";
-    private static final String EXTRA_SUB_ID = "subscription";
-
-    public static void deliverSmsIntent(final Context context, final Intent intent) {
-        final android.telephony.SmsMessage[] messages = getMessagesFromIntent(intent);
-
-        // Check messages for validity
-        if (messages == null || messages.length < 1) {
-            LogUtil.e(TAG, "processReceivedSms: null or zero or ignored message");
-            return;
-        }
-
-        final int errorCode =
-                intent.getIntExtra(EXTRA_ERROR_CODE, SendStatusReceiver.NO_ERROR_CODE);
-        // Always convert negative subIds into -1
-        int subId = PhoneUtils.getDefault().getEffectiveIncomingSubIdFromSystem(
-                intent, EXTRA_SUB_ID);
-        deliverSmsMessages(context, subId, errorCode, messages);
-        if (MmsUtils.isDumpSmsEnabled()) {
-            final String format = intent.getStringExtra("format");
-            DebugUtils.dumpSms(messages[0].getTimestampMillis(), messages, format);
-        }
-    }
-
-    public static void deliverSmsMessages(final Context context, final int subId,
-            final int errorCode, final android.telephony.SmsMessage[] messages) {
-        final ContentValues messageValues =
-                MmsUtils.parseReceivedSmsMessage(context, messages, errorCode);
-
-        LogUtil.v(TAG, "SmsReceiver.deliverSmsMessages");
-
-        final long nowInMillis =  System.currentTimeMillis();
-        final long receivedTimestampMs = MmsUtils.getMessageDate(messages[0], nowInMillis);
-
-        messageValues.put(Sms.Inbox.DATE, receivedTimestampMs);
-        // Default to unread and unseen for us but ReceiveSmsMessageAction will override
-        // seen for the telephony db.
-        messageValues.put(Sms.Inbox.READ, 0);
-        messageValues.put(Sms.Inbox.SEEN, 0);
-        if (OsUtil.isAtLeastL_MR1()) {
-            messageValues.put(Sms.SUBSCRIPTION_ID, subId);
-        }
-
-        if (messages[0].getMessageClass() == android.telephony.SmsMessage.MessageClass.CLASS_0 ||
-                DebugUtils.debugClassZeroSmsEnabled()) {
-            Factory.get().getUIIntents().launchClassZeroActivity(context, messageValues);
-        } else {
-            final ReceiveSmsMessageAction action = new ReceiveSmsMessageAction(messageValues);
-            action.start();
-        }
-    }
-
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        LogUtil.v(TAG, "SmsReceiver.onReceive " + intent);
-        // On KLP+ we only take delivery of SMS messages in SmsDeliverReceiver.
-        if (PhoneUtils.getDefault().isSmsEnabled()) {
-            final String action = intent.getAction();
-            if (OsUtil.isSecondaryUser() &&
-                    (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(action) ||
-                            // TODO: update this with the actual constant from Telephony
-                            "android.provider.Telephony.MMS_DOWNLOADED".equals(action))) {
-                postNewMessageSecondaryUserNotification();
-            } else if (!OsUtil.isAtLeastKLP()) {
-                deliverSmsIntent(context, intent);
-            }
-        }
-    }
-
-    private static class SecondaryUserNotificationState extends MessageNotificationState {
-        SecondaryUserNotificationState() {
-            super(null);
-        }
-
-        @Override
-        protected Style build(Builder builder) {
-            return null;
-        }
-
-        @Override
-        public boolean getNotificationVibrate() {
-            return true;
-        }
-    }
-
-    public static void postNewMessageSecondaryUserNotification() {
-        final Context context = Factory.get().getApplicationContext();
-        final Resources resources = context.getResources();
-        final PendingIntent pendingIntent = UIIntents.get()
-                .getPendingIntentForSecondaryUserNewMessageNotification(context);
-
-        final NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
-        builder.setContentTitle(resources.getString(R.string.secondary_user_new_message_title))
-                .setTicker(resources.getString(R.string.secondary_user_new_message_ticker))
-                .setSmallIcon(R.drawable.ic_sms_light)
-        // Returning PRIORITY_HIGH causes L to put up a HUD notification. Without it, the ticker
-        // isn't displayed.
-                .setPriority(Notification.PRIORITY_HIGH)
-                .setContentIntent(pendingIntent);
-
-        final NotificationCompat.BigTextStyle bigTextStyle =
-                new NotificationCompat.BigTextStyle(builder);
-        bigTextStyle.bigText(resources.getString(R.string.secondary_user_new_message_title));
-        final Notification notification = bigTextStyle.build();
-
-        final NotificationManagerCompat notificationManager =
-                NotificationManagerCompat.from(Factory.get().getApplicationContext());
-
-        int defaults = Notification.DEFAULT_LIGHTS;
-        if (BugleNotifications.shouldVibrate(new SecondaryUserNotificationState())) {
-            defaults |= Notification.DEFAULT_VIBRATE;
-        }
-        notification.defaults = defaults;
-
-        notificationManager.notify(getNotificationTag(),
-                PendingIntentConstants.SMS_SECONDARY_USER_NOTIFICATION_ID, notification);
-    }
-
-    /**
-     * Cancel the notification
-     */
-    public static void cancelSecondaryUserNotification() {
-        final NotificationManagerCompat notificationManager =
-                NotificationManagerCompat.from(Factory.get().getApplicationContext());
-        notificationManager.cancel(getNotificationTag(),
-                PendingIntentConstants.SMS_SECONDARY_USER_NOTIFICATION_ID);
-    }
-
-    private static String getNotificationTag() {
-        return Factory.get().getApplicationContext().getPackageName() + ":secondaryuser";
-    }
-
-    /**
-     * Compile all of the patterns we check for to ignore system SMS messages.
-     */
-    private static void compileIgnoreSmsPatterns() {
-        // Get the pattern set from GServices
-        final String smsIgnoreRegex = BugleGservices.get().getString(
-                BugleGservicesKeys.SMS_IGNORE_MESSAGE_REGEX,
-                BugleGservicesKeys.SMS_IGNORE_MESSAGE_REGEX_DEFAULT);
-        if (smsIgnoreRegex != null) {
-            final String[] ignoreSmsExpressions = smsIgnoreRegex.split("\n");
-            if (ignoreSmsExpressions.length != 0) {
-                sIgnoreSmsPatterns = new ArrayList<Pattern>();
-                for (int i = 0; i < ignoreSmsExpressions.length; i++) {
-                    try {
-                        sIgnoreSmsPatterns.add(Pattern.compile(ignoreSmsExpressions[i]));
-                    } catch (PatternSyntaxException e) {
-                        LogUtil.e(TAG, "compileIgnoreSmsPatterns: Skipping bad expression: " +
-                                ignoreSmsExpressions[i]);
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Get the SMS messages from the specified SMS intent.
-     * @return the messages. If there is an error or the message should be ignored, return null.
-     */
-    public static android.telephony.SmsMessage[] getMessagesFromIntent(Intent intent) {
-        final android.telephony.SmsMessage[] messages = Sms.Intents.getMessagesFromIntent(intent);
-
-        // Check messages for validity
-        if (messages == null || messages.length < 1) {
-            return null;
-        }
-        // Sometimes, SmsMessage.mWrappedSmsMessage is null causing NPE when we access
-        // the methods on it although the SmsMessage itself is not null. So do this check
-        // before we do anything on the parsed SmsMessages.
-        try {
-            final String messageBody = messages[0].getDisplayMessageBody();
-            if (messageBody != null) {
-                // Compile patterns if necessary
-                if (sIgnoreSmsPatterns == null) {
-                    compileIgnoreSmsPatterns();
-                }
-                // Check against filters
-                for (final Pattern pattern : sIgnoreSmsPatterns) {
-                    if (pattern.matcher(messageBody).matches()) {
-                        return null;
-                    }
-                }
-            }
-        } catch (final NullPointerException e) {
-            LogUtil.e(TAG, "shouldIgnoreMessage: NPE inside SmsMessage");
-            return null;
-        }
-        return messages;
-    }
-
-
-    /**
-     * Check the specified SMS intent to see if the message should be ignored
-     * @return true if the message should be ignored
-     */
-    public static boolean shouldIgnoreMessage(Intent intent) {
-        return getMessagesFromIntent(intent) == null;
-    }
-}
diff --git a/src/com/android/messaging/receiver/StorageStatusReceiver.java b/src/com/android/messaging/receiver/StorageStatusReceiver.java
deleted file mode 100644
index bee899c..0000000
--- a/src/com/android/messaging/receiver/StorageStatusReceiver.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-import com.android.messaging.sms.SmsStorageStatusManager;
-
-/**
- * Receiver that listens on storage status changes
- */
-public class StorageStatusReceiver extends BroadcastReceiver {
-
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        if (Intent.ACTION_DEVICE_STORAGE_LOW.equals(intent.getAction())) {
-            SmsStorageStatusManager.handleStorageLow();
-        } else if (Intent.ACTION_DEVICE_STORAGE_OK.equals(intent.getAction())) {
-            SmsStorageStatusManager.handleStorageOk();
-        }
-    }
-}
diff --git a/src/com/android/messaging/sms/ApnDatabase.java b/src/com/android/messaging/sms/ApnDatabase.java
deleted file mode 100644
index a8d0d0c..0000000
--- a/src/com/android/messaging/sms/ApnDatabase.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.res.Resources;
-import android.content.res.XmlResourceParser;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteException;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.provider.Telephony;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.google.common.collect.Lists;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/*
- * Database helper class for looking up APNs.  This database has a single table
- * which stores the APNs that are initially created from an xml file.
- */
-public class ApnDatabase extends SQLiteOpenHelper {
-    private static final int DB_VERSION = 3; // added sub_id columns
-
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static final boolean DEBUG = false;
-
-    private static Context sContext;
-    private static ApnDatabase sApnDatabase;
-
-    private static final String APN_DATABASE_NAME = "apn.db";
-
-    /** table for carrier APN's */
-    public static final String APN_TABLE = "apn";
-
-    // APN table
-    private static final String APN_TABLE_SQL =
-            "CREATE TABLE " + APN_TABLE +
-                    "(_id INTEGER PRIMARY KEY," +
-                    Telephony.Carriers.NAME + " TEXT," +
-                    Telephony.Carriers.NUMERIC + " TEXT," +
-                    Telephony.Carriers.MCC + " TEXT," +
-                    Telephony.Carriers.MNC + " TEXT," +
-                    Telephony.Carriers.APN + " TEXT," +
-                    Telephony.Carriers.USER + " TEXT," +
-                    Telephony.Carriers.SERVER + " TEXT," +
-                    Telephony.Carriers.PASSWORD + " TEXT," +
-                    Telephony.Carriers.PROXY + " TEXT," +
-                    Telephony.Carriers.PORT + " TEXT," +
-                    Telephony.Carriers.MMSPROXY + " TEXT," +
-                    Telephony.Carriers.MMSPORT + " TEXT," +
-                    Telephony.Carriers.MMSC + " TEXT," +
-                    Telephony.Carriers.AUTH_TYPE + " INTEGER," +
-                    Telephony.Carriers.TYPE + " TEXT," +
-                    Telephony.Carriers.CURRENT + " INTEGER," +
-                    Telephony.Carriers.PROTOCOL + " TEXT," +
-                    Telephony.Carriers.ROAMING_PROTOCOL + " TEXT," +
-                    Telephony.Carriers.CARRIER_ENABLED + " BOOLEAN," +
-                    Telephony.Carriers.BEARER + " INTEGER," +
-                    Telephony.Carriers.MVNO_TYPE + " TEXT," +
-                    Telephony.Carriers.MVNO_MATCH_DATA + " TEXT," +
-                    Telephony.Carriers.SUBSCRIPTION_ID + " INTEGER DEFAULT " +
-                            ParticipantData.DEFAULT_SELF_SUB_ID + ");";
-
-    public static final String[] APN_PROJECTION = {
-            Telephony.Carriers.TYPE,            // 0
-            Telephony.Carriers.MMSC,            // 1
-            Telephony.Carriers.MMSPROXY,        // 2
-            Telephony.Carriers.MMSPORT,         // 3
-            Telephony.Carriers._ID,             // 4
-            Telephony.Carriers.CURRENT,         // 5
-            Telephony.Carriers.NUMERIC,         // 6
-            Telephony.Carriers.NAME,            // 7
-            Telephony.Carriers.MCC,             // 8
-            Telephony.Carriers.MNC,             // 9
-            Telephony.Carriers.APN,             // 10
-            Telephony.Carriers.SUBSCRIPTION_ID  // 11
-    };
-
-    public static final int COLUMN_TYPE         = 0;
-    public static final int COLUMN_MMSC         = 1;
-    public static final int COLUMN_MMSPROXY     = 2;
-    public static final int COLUMN_MMSPORT      = 3;
-    public static final int COLUMN_ID           = 4;
-    public static final int COLUMN_CURRENT      = 5;
-    public static final int COLUMN_NUMERIC      = 6;
-    public static final int COLUMN_NAME         = 7;
-    public static final int COLUMN_MCC          = 8;
-    public static final int COLUMN_MNC          = 9;
-    public static final int COLUMN_APN          = 10;
-    public static final int COLUMN_SUB_ID       = 11;
-
-    public static final String[] APN_FULL_PROJECTION = {
-            Telephony.Carriers.NAME,
-            Telephony.Carriers.MCC,
-            Telephony.Carriers.MNC,
-            Telephony.Carriers.APN,
-            Telephony.Carriers.USER,
-            Telephony.Carriers.SERVER,
-            Telephony.Carriers.PASSWORD,
-            Telephony.Carriers.PROXY,
-            Telephony.Carriers.PORT,
-            Telephony.Carriers.MMSC,
-            Telephony.Carriers.MMSPROXY,
-            Telephony.Carriers.MMSPORT,
-            Telephony.Carriers.AUTH_TYPE,
-            Telephony.Carriers.TYPE,
-            Telephony.Carriers.PROTOCOL,
-            Telephony.Carriers.ROAMING_PROTOCOL,
-            Telephony.Carriers.CARRIER_ENABLED,
-            Telephony.Carriers.BEARER,
-            Telephony.Carriers.MVNO_TYPE,
-            Telephony.Carriers.MVNO_MATCH_DATA,
-            Telephony.Carriers.CURRENT,
-            Telephony.Carriers.SUBSCRIPTION_ID,
-    };
-
-    private static final String CURRENT_SELECTION = Telephony.Carriers.CURRENT + " NOT NULL";
-
-    /**
-     * ApnDatabase is initialized asynchronously from the application.onCreate
-     * To ensure that it works in a testing environment it needs to never access the factory context
-     */
-    public static void initializeAppContext(final Context context) {
-        sContext = context;
-    }
-
-    private ApnDatabase() {
-        super(sContext, APN_DATABASE_NAME, null, DB_VERSION);
-        if (DEBUG) {
-            LogUtil.d(TAG, "ApnDatabase constructor");
-        }
-    }
-
-    public static ApnDatabase getApnDatabase() {
-        if (sApnDatabase == null) {
-            sApnDatabase = new ApnDatabase();
-        }
-        return sApnDatabase;
-    }
-
-    public static boolean doesDatabaseExist() {
-        final File dbFile = sContext.getDatabasePath(APN_DATABASE_NAME);
-        return dbFile.exists();
-    }
-
-    @Override
-    public void onCreate(final SQLiteDatabase db) {
-        if (DEBUG) {
-            LogUtil.d(TAG, "ApnDatabase onCreate");
-        }
-        // Build the table using defaults (apn info bundled with the app)
-        rebuildTables(db);
-    }
-
-    /**
-     * Get a copy of user changes in the old table
-     *
-     * @return The list of user changed apns
-     */
-    public static List<ContentValues> loadUserDataFromOldTable(final SQLiteDatabase db) {
-        Cursor cursor = null;
-        try {
-            cursor = db.query(APN_TABLE,
-                    APN_FULL_PROJECTION, CURRENT_SELECTION,
-                    null/*selectionArgs*/,
-                    null/*groupBy*/, null/*having*/, null/*orderBy*/);
-            if (cursor != null) {
-                final List<ContentValues> result = Lists.newArrayList();
-                while (cursor.moveToNext()) {
-                    final ContentValues row = cursorToValues(cursor);
-                    if (row != null) {
-                        result.add(row);
-                    }
-                }
-                return result;
-            }
-        } catch (final SQLiteException e) {
-            LogUtil.w(TAG, "ApnDatabase.loadUserDataFromOldTable: no old user data: " + e, e);
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return null;
-    }
-
-    private static final String[] ID_PROJECTION = new String[]{Telephony.Carriers._ID};
-
-    private static final String ID_SELECTION = Telephony.Carriers._ID + "=?";
-
-    /**
-     * Store use changes of old table into the new apn table
-     *
-     * @param data The user changes
-     */
-    public static void saveUserDataFromOldTable(
-            final SQLiteDatabase db, final List<ContentValues> data) {
-        if (data == null || data.size() < 1) {
-            return;
-        }
-        for (final ContentValues row : data) {
-            // Build query from the row data. It is an exact match, column by column,
-            // except the CURRENT column
-            final StringBuilder selectionBuilder = new StringBuilder();
-            final ArrayList<String> selectionArgs = Lists.newArrayList();
-            for (final String key : row.keySet()) {
-                if (!Telephony.Carriers.CURRENT.equals(key)) {
-                    if (selectionBuilder.length() > 0) {
-                        selectionBuilder.append(" AND ");
-                    }
-                    final String value = row.getAsString(key);
-                    if (TextUtils.isEmpty(value)) {
-                        selectionBuilder.append(key).append(" IS NULL");
-                    } else {
-                        selectionBuilder.append(key).append("=?");
-                        selectionArgs.add(value);
-                    }
-                }
-            }
-            Cursor cursor = null;
-            try {
-                cursor = db.query(APN_TABLE,
-                        ID_PROJECTION,
-                        selectionBuilder.toString(),
-                        selectionArgs.toArray(new String[0]),
-                        null/*groupBy*/, null/*having*/, null/*orderBy*/);
-                if (cursor != null && cursor.moveToFirst()) {
-                    db.update(APN_TABLE, row, ID_SELECTION, new String[]{cursor.getString(0)});
-                } else {
-                    // User APN does not exist, insert into the new table
-                    row.put(Telephony.Carriers.NUMERIC,
-                            PhoneUtils.canonicalizeMccMnc(
-                                    row.getAsString(Telephony.Carriers.MCC),
-                                    row.getAsString(Telephony.Carriers.MNC))
-                    );
-                    db.insert(APN_TABLE, null/*nullColumnHack*/, row);
-                }
-            } catch (final SQLiteException e) {
-                LogUtil.e(TAG, "ApnDatabase.saveUserDataFromOldTable: query error " + e, e);
-            } finally {
-                if (cursor != null) {
-                    cursor.close();
-                }
-            }
-        }
-    }
-
-    // Convert Cursor to ContentValues
-    private static ContentValues cursorToValues(final Cursor cursor) {
-        final int columnCount = cursor.getColumnCount();
-        if (columnCount > 0) {
-            final ContentValues result = new ContentValues();
-            for (int i = 0; i < columnCount; i++) {
-                final String name = cursor.getColumnName(i);
-                final String value = cursor.getString(i);
-                result.put(name, value);
-            }
-            return result;
-        }
-        return null;
-    }
-
-    @Override
-    public void onOpen(final SQLiteDatabase db) {
-        super.onOpen(db);
-        if (DEBUG) {
-            LogUtil.d(TAG, "ApnDatabase onOpen");
-        }
-    }
-
-    @Override
-    public void close() {
-        super.close();
-        if (DEBUG) {
-            LogUtil.d(TAG, "ApnDatabase close");
-        }
-    }
-
-    private void rebuildTables(final SQLiteDatabase db) {
-        if (DEBUG) {
-            LogUtil.d(TAG, "ApnDatabase rebuildTables");
-        }
-        db.execSQL("DROP TABLE IF EXISTS " + APN_TABLE + ";");
-        db.execSQL(APN_TABLE_SQL);
-        loadApnTable(db);
-    }
-
-    @Override
-    public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
-        if (DEBUG) {
-            LogUtil.d(TAG, "ApnDatabase onUpgrade");
-        }
-        rebuildTables(db);
-    }
-
-    @Override
-    public void onDowngrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) {
-        if (DEBUG) {
-            LogUtil.d(TAG, "ApnDatabase onDowngrade");
-        }
-        rebuildTables(db);
-    }
-
-    /**
-     * Load APN table from app resources
-     */
-    private static void loadApnTable(final SQLiteDatabase db) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "ApnDatabase loadApnTable");
-        }
-        final Resources r = sContext.getResources();
-        final XmlResourceParser parser = r.getXml(R.xml.apns);
-        final ApnsXmlProcessor processor = ApnsXmlProcessor.get(parser);
-        processor.setApnHandler(new ApnsXmlProcessor.ApnHandler() {
-            @Override
-            public void process(final ContentValues apnValues) {
-                db.insert(APN_TABLE, null/*nullColumnHack*/, apnValues);
-            }
-        });
-        try {
-            processor.process();
-        } catch (final Exception e) {
-            Log.e(TAG, "Got exception while loading APN database.", e);
-        } finally {
-            parser.close();
-        }
-    }
-
-    public static void forceBuildAndLoadApnTables() {
-        final SQLiteDatabase db = getApnDatabase().getWritableDatabase();
-        db.execSQL("DROP TABLE IF EXISTS " + APN_TABLE);
-        // Table(s) always need for JB MR1 for APN support for MMS because JB MR1 throws
-        // a SecurityException when trying to access the carriers table (which holds the
-        // APNs). Some JB MR2 devices also throw the security exception, so we're building
-        // the table for JB MR2, too.
-        db.execSQL(APN_TABLE_SQL);
-
-        loadApnTable(db);
-    }
-
-    /**
-     * Clear all tables
-     */
-    public static void clearTables() {
-        final SQLiteDatabase db = getApnDatabase().getWritableDatabase();
-        db.execSQL("DROP TABLE IF EXISTS " + APN_TABLE);
-        db.execSQL(APN_TABLE_SQL);
-    }
-}
diff --git a/src/com/android/messaging/sms/ApnsXmlProcessor.java b/src/com/android/messaging/sms/ApnsXmlProcessor.java
deleted file mode 100644
index 976896c..0000000
--- a/src/com/android/messaging/sms/ApnsXmlProcessor.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.content.ContentValues;
-import android.provider.Telephony;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.google.common.collect.Maps;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.util.Map;
-
-/*
- * XML processor for the following files:
- * 1. res/xml/apns.xml
- * 2. res/xml/mms_config.xml (or related overlay files)
- */
-class ApnsXmlProcessor {
-    public interface ApnHandler {
-        public void process(ContentValues apnValues);
-    }
-
-    public interface MmsConfigHandler {
-        public void process(String mccMnc, String key, String value, String type);
-    }
-
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static final Map<String, String> APN_ATTRIBUTE_MAP = Maps.newHashMap();
-    static {
-        APN_ATTRIBUTE_MAP.put("mcc", Telephony.Carriers.MCC);
-        APN_ATTRIBUTE_MAP.put("mnc", Telephony.Carriers.MNC);
-        APN_ATTRIBUTE_MAP.put("carrier", Telephony.Carriers.NAME);
-        APN_ATTRIBUTE_MAP.put("apn", Telephony.Carriers.APN);
-        APN_ATTRIBUTE_MAP.put("mmsc", Telephony.Carriers.MMSC);
-        APN_ATTRIBUTE_MAP.put("mmsproxy", Telephony.Carriers.MMSPROXY);
-        APN_ATTRIBUTE_MAP.put("mmsport", Telephony.Carriers.MMSPORT);
-        APN_ATTRIBUTE_MAP.put("type", Telephony.Carriers.TYPE);
-        APN_ATTRIBUTE_MAP.put("user", Telephony.Carriers.USER);
-        APN_ATTRIBUTE_MAP.put("password", Telephony.Carriers.PASSWORD);
-        APN_ATTRIBUTE_MAP.put("authtype", Telephony.Carriers.AUTH_TYPE);
-        APN_ATTRIBUTE_MAP.put("mvno_match_data", Telephony.Carriers.MVNO_MATCH_DATA);
-        APN_ATTRIBUTE_MAP.put("mvno_type", Telephony.Carriers.MVNO_TYPE);
-        APN_ATTRIBUTE_MAP.put("protocol", Telephony.Carriers.PROTOCOL);
-        APN_ATTRIBUTE_MAP.put("bearer", Telephony.Carriers.BEARER);
-        APN_ATTRIBUTE_MAP.put("server", Telephony.Carriers.SERVER);
-        APN_ATTRIBUTE_MAP.put("roaming_protocol", Telephony.Carriers.ROAMING_PROTOCOL);
-        APN_ATTRIBUTE_MAP.put("proxy", Telephony.Carriers.PROXY);
-        APN_ATTRIBUTE_MAP.put("port", Telephony.Carriers.PORT);
-        APN_ATTRIBUTE_MAP.put("carrier_enabled", Telephony.Carriers.CARRIER_ENABLED);
-    }
-
-    private static final String TAG_APNS = "apns";
-    private static final String TAG_APN = "apn";
-    private static final String TAG_MMS_CONFIG = "mms_config";
-
-    // Handler to process one apn
-    private ApnHandler mApnHandler;
-    // Handler to process one mms_config key/value pair
-    private MmsConfigHandler mMmsConfigHandler;
-
-    private final StringBuilder mLogStringBuilder = new StringBuilder();
-
-    private final XmlPullParser mInputParser;
-
-    private ApnsXmlProcessor(XmlPullParser parser) {
-        mInputParser = parser;
-        mApnHandler = null;
-        mMmsConfigHandler = null;
-    }
-
-    public static ApnsXmlProcessor get(XmlPullParser parser) {
-        Assert.notNull(parser);
-        return new ApnsXmlProcessor(parser);
-    }
-
-    public ApnsXmlProcessor setApnHandler(ApnHandler handler) {
-        mApnHandler = handler;
-        return this;
-    }
-
-    public ApnsXmlProcessor setMmsConfigHandler(MmsConfigHandler handler) {
-        mMmsConfigHandler = handler;
-        return this;
-    }
-
-    /**
-     * Move XML parser forward to next event type or the end of doc
-     *
-     * @param eventType
-     * @return The final event type we meet
-     * @throws XmlPullParserException
-     * @throws IOException
-     */
-    private int advanceToNextEvent(int eventType) throws XmlPullParserException, IOException {
-        for (;;) {
-            int nextEvent = mInputParser.next();
-            if (nextEvent == eventType
-                    || nextEvent == XmlPullParser.END_DOCUMENT) {
-                return nextEvent;
-            }
-        }
-    }
-
-    public void process() {
-        try {
-            // Find the first element
-            if (advanceToNextEvent(XmlPullParser.START_TAG) != XmlPullParser.START_TAG) {
-                throw new XmlPullParserException("ApnsXmlProcessor: expecting start tag @"
-                        + xmlParserDebugContext());
-            }
-            // A single ContentValues object for holding the parsing result of
-            // an apn element
-            final ContentValues values = new ContentValues();
-            String tagName = mInputParser.getName();
-            // Top level tag can be "apns" (apns.xml)
-            // or "mms_config" (mms_config.xml)
-            if (TAG_APNS.equals(tagName)) {
-                // For "apns", there could be "apn" or both "apn" and "mms_config"
-                for (;;) {
-                    if (advanceToNextEvent(XmlPullParser.START_TAG) != XmlPullParser.START_TAG) {
-                        break;
-                    }
-                    tagName = mInputParser.getName();
-                    if (TAG_APN.equals(tagName)) {
-                        processApn(values);
-                    } else if (TAG_MMS_CONFIG.equals(tagName)) {
-                        processMmsConfig();
-                    }
-                }
-            } else if (TAG_MMS_CONFIG.equals(tagName)) {
-                // mms_config.xml resource
-                processMmsConfig();
-            }
-        } catch (IOException e) {
-            LogUtil.e(TAG, "ApnsXmlProcessor: I/O failure " + e, e);
-        } catch (XmlPullParserException e) {
-            LogUtil.e(TAG, "ApnsXmlProcessor: parsing failure " + e, e);
-        }
-    }
-
-    private Integer parseInt(String text, Integer defaultValue, String logHint) {
-        Integer value = defaultValue;
-        try {
-            value = Integer.parseInt(text);
-        } catch (Exception e) {
-            LogUtil.e(TAG,
-                    "Invalid value " + text + "for" + logHint + " @" + xmlParserDebugContext());
-        }
-        return value;
-    }
-
-    private Boolean parseBoolean(String text, Boolean defaultValue, String logHint) {
-        Boolean value = defaultValue;
-        try {
-            value = Boolean.parseBoolean(text);
-        } catch (Exception e) {
-            LogUtil.e(TAG,
-                    "Invalid value " + text + "for" + logHint + " @" + xmlParserDebugContext());
-        }
-        return value;
-    }
-
-    private static String xmlParserEventString(int event) {
-        switch (event) {
-            case XmlPullParser.START_DOCUMENT: return "START_DOCUMENT";
-            case XmlPullParser.END_DOCUMENT: return "END_DOCUMENT";
-            case XmlPullParser.START_TAG: return "START_TAG";
-            case XmlPullParser.END_TAG: return "END_TAG";
-            case XmlPullParser.TEXT: return "TEXT";
-        }
-        return Integer.toString(event);
-    }
-
-    /**
-     * @return The debugging information of the parser's current position
-     */
-    private String xmlParserDebugContext() {
-        mLogStringBuilder.setLength(0);
-        if (mInputParser != null) {
-            try {
-                final int eventType = mInputParser.getEventType();
-                mLogStringBuilder.append(xmlParserEventString(eventType));
-                if (eventType == XmlPullParser.START_TAG
-                        || eventType == XmlPullParser.END_TAG
-                        || eventType == XmlPullParser.TEXT) {
-                    mLogStringBuilder.append('<').append(mInputParser.getName());
-                    for (int i = 0; i < mInputParser.getAttributeCount(); i++) {
-                        mLogStringBuilder.append(' ')
-                            .append(mInputParser.getAttributeName(i))
-                            .append('=')
-                            .append(mInputParser.getAttributeValue(i));
-                    }
-                    mLogStringBuilder.append("/>");
-                }
-                return mLogStringBuilder.toString();
-            } catch (XmlPullParserException e) {
-                LogUtil.e(TAG, "xmlParserDebugContext: " + e, e);
-            }
-        }
-        return "Unknown";
-    }
-
-    /**
-     * Process one apn
-     *
-     * @param apnValues Where we store the parsed apn
-     * @throws IOException
-     * @throws XmlPullParserException
-     */
-    private void processApn(ContentValues apnValues) throws IOException, XmlPullParserException {
-        Assert.notNull(apnValues);
-        apnValues.clear();
-        // Collect all the attributes
-        for (int i = 0; i < mInputParser.getAttributeCount(); i++) {
-            final String key = APN_ATTRIBUTE_MAP.get(mInputParser.getAttributeName(i));
-            if (key != null) {
-                apnValues.put(key, mInputParser.getAttributeValue(i));
-            }
-        }
-        // Set numeric to be canonicalized mcc/mnc like "310120", always 6 digits
-        final String canonicalMccMnc = PhoneUtils.canonicalizeMccMnc(
-                apnValues.getAsString(Telephony.Carriers.MCC),
-                apnValues.getAsString(Telephony.Carriers.MNC));
-        apnValues.put(Telephony.Carriers.NUMERIC, canonicalMccMnc);
-        // Some of the values should not be string type, converting them to desired types
-        final String authType = apnValues.getAsString(Telephony.Carriers.AUTH_TYPE);
-        if (authType != null) {
-            apnValues.put(Telephony.Carriers.AUTH_TYPE, parseInt(authType, -1, "apn authtype"));
-        }
-        final String carrierEnabled = apnValues.getAsString(Telephony.Carriers.CARRIER_ENABLED);
-        if (carrierEnabled != null) {
-            apnValues.put(Telephony.Carriers.CARRIER_ENABLED,
-                    parseBoolean(carrierEnabled, null, "apn carrierEnabled"));
-        }
-        final String bearer = apnValues.getAsString(Telephony.Carriers.BEARER);
-        if (bearer != null) {
-            apnValues.put(Telephony.Carriers.BEARER, parseInt(bearer, 0, "apn bearer"));
-        }
-        // We are at the end tag
-        if (mInputParser.next() != XmlPullParser.END_TAG) {
-            throw new XmlPullParserException("Apn: expecting end tag @"
-                    + xmlParserDebugContext());
-        }
-        // We are done parsing one APN, call the handler
-        if (mApnHandler != null) {
-            mApnHandler.process(apnValues);
-        }
-    }
-
-    /**
-     * Process one mms_config.
-     *
-     * @throws IOException
-     * @throws XmlPullParserException
-     */
-    private void processMmsConfig()
-            throws IOException, XmlPullParserException {
-        // Get the mcc and mnc attributes
-        final String canonicalMccMnc = PhoneUtils.canonicalizeMccMnc(
-                mInputParser.getAttributeValue(null, "mcc"),
-                mInputParser.getAttributeValue(null, "mnc"));
-        // We are at the start tag
-        for (;;) {
-            int nextEvent;
-            // Skipping spaces
-            while ((nextEvent = mInputParser.next()) == XmlPullParser.TEXT) {
-            }
-            if (nextEvent == XmlPullParser.START_TAG) {
-                // Parse one mms config key/value
-                processMmsConfigKeyValue(canonicalMccMnc);
-            } else if (nextEvent == XmlPullParser.END_TAG) {
-                break;
-            } else {
-                throw new XmlPullParserException("MmsConfig: expecting start or end tag @"
-                        + xmlParserDebugContext());
-            }
-        }
-    }
-
-    /**
-     * Process one mms_config key/value pair
-     *
-     * @param mccMnc The mcc and mnc of this mms_config
-     * @throws IOException
-     * @throws XmlPullParserException
-     */
-    private void processMmsConfigKeyValue(String mccMnc)
-            throws IOException, XmlPullParserException {
-        final String key = mInputParser.getAttributeValue(null, "name");
-        // We are at the start tag, the name of the tag is the type
-        // e.g. <int name="key">value</int>
-        final String type = mInputParser.getName();
-        int nextEvent = mInputParser.next();
-        String value = null;
-        if (nextEvent == XmlPullParser.TEXT) {
-            value = mInputParser.getText();
-            nextEvent = mInputParser.next();
-        }
-        if (nextEvent != XmlPullParser.END_TAG) {
-            throw new XmlPullParserException("ApnsXmlProcessor: expecting end tag @"
-                    + xmlParserDebugContext());
-        }
-        // We are done parsing one mms_config key/value, call the handler
-        if (mMmsConfigHandler != null) {
-            mMmsConfigHandler.process(mccMnc, key, value, type);
-        }
-    }
-}
diff --git a/src/com/android/messaging/sms/BugleApnSettingsLoader.java b/src/com/android/messaging/sms/BugleApnSettingsLoader.java
deleted file mode 100644
index 36820ff..0000000
--- a/src/com/android/messaging/sms/BugleApnSettingsLoader.java
+++ /dev/null
@@ -1,646 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteException;
-import android.net.Uri;
-import android.provider.Telephony;
-import androidx.appcompat.mms.ApnSettingsLoader;
-import androidx.appcompat.mms.MmsManager;
-import android.text.TextUtils;
-import android.util.SparseArray;
-
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.mmslib.SqliteWrapper;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * APN loader for default SMS SIM
- *
- * This loader tries to load APNs from 3 sources in order:
- * 1. Gservices setting
- * 2. System APN table
- * 3. Local APN table
- */
-public class BugleApnSettingsLoader implements ApnSettingsLoader {
-    /**
-     * The base implementation of an APN
-     */
-    private static class BaseApn implements Apn {
-        /**
-         * Create a base APN from parameters
-         *
-         * @param typesIn the APN type field
-         * @param mmscIn the APN mmsc field
-         * @param proxyIn the APN mmsproxy field
-         * @param portIn the APN mmsport field
-         * @return an instance of base APN, or null if any of the parameter is invalid
-         */
-        public static BaseApn from(final String typesIn, final String mmscIn, final String proxyIn,
-                final String portIn) {
-            if (!isValidApnType(trimWithNullCheck(typesIn), APN_TYPE_MMS)) {
-                return null;
-            }
-            String mmsc = trimWithNullCheck(mmscIn);
-            if (TextUtils.isEmpty(mmsc)) {
-                return null;
-            }
-            mmsc = trimV4AddrZeros(mmsc);
-            try {
-                new URI(mmsc);
-            } catch (final URISyntaxException e) {
-                return null;
-            }
-            String mmsProxy = trimWithNullCheck(proxyIn);
-            int mmsProxyPort = 80;
-            if (!TextUtils.isEmpty(mmsProxy)) {
-                mmsProxy = trimV4AddrZeros(mmsProxy);
-                final String portString = trimWithNullCheck(portIn);
-                if (portString != null) {
-                    try {
-                        mmsProxyPort = Integer.parseInt(portString);
-                    } catch (final NumberFormatException e) {
-                        // Ignore, just use 80 to try
-                    }
-                }
-            }
-            return new BaseApn(mmsc, mmsProxy, mmsProxyPort);
-        }
-
-        private final String mMmsc;
-        private final String mMmsProxy;
-        private final int mMmsProxyPort;
-
-        public BaseApn(final String mmsc, final String proxy, final int port) {
-            mMmsc = mmsc;
-            mMmsProxy = proxy;
-            mMmsProxyPort = port;
-        }
-
-        @Override
-        public String getMmsc() {
-            return mMmsc;
-        }
-
-        @Override
-        public String getMmsProxy() {
-            return mMmsProxy;
-        }
-
-        @Override
-        public int getMmsProxyPort() {
-            return mMmsProxyPort;
-        }
-
-        @Override
-        public void setSuccess() {
-            // Do nothing
-        }
-
-        public boolean equals(final BaseApn other) {
-            return TextUtils.equals(mMmsc, other.getMmsc()) &&
-                    TextUtils.equals(mMmsProxy, other.getMmsProxy()) &&
-                    mMmsProxyPort == other.getMmsProxyPort();
-        }
-    }
-
-    /**
-     * The APN represented by the local APN table row
-     */
-    private static class DatabaseApn implements Apn {
-        private static final ContentValues CURRENT_NULL_VALUE;
-        private static final ContentValues CURRENT_SET_VALUE;
-        static {
-            CURRENT_NULL_VALUE = new ContentValues(1);
-            CURRENT_NULL_VALUE.putNull(Telephony.Carriers.CURRENT);
-            CURRENT_SET_VALUE = new ContentValues(1);
-            CURRENT_SET_VALUE.put(Telephony.Carriers.CURRENT, "1"); // 1 for auto selected APN
-        }
-        private static final String CLEAR_UPDATE_SELECTION = Telephony.Carriers.CURRENT + " =?";
-        private static final String[] CLEAR_UPDATE_SELECTION_ARGS = new String[] { "1" };
-        private static final String SET_UPDATE_SELECTION = Telephony.Carriers._ID + " =?";
-
-        /**
-         * Create an APN loaded from local database
-         *
-         * @param apns the in-memory APN list
-         * @param typesIn the APN type field
-         * @param mmscIn the APN mmsc field
-         * @param proxyIn the APN mmsproxy field
-         * @param portIn the APN mmsport field
-         * @param rowId the APN's row ID in database
-         * @param current the value of CURRENT column in database
-         * @return an in-memory APN instance for database APN row, null if parameter invalid
-         */
-        public static DatabaseApn from(final List<Apn> apns, final String typesIn,
-                final String mmscIn, final String proxyIn, final String portIn,
-                final long rowId, final int current) {
-            if (apns == null) {
-                return null;
-            }
-            final BaseApn base = BaseApn.from(typesIn, mmscIn, proxyIn, portIn);
-            if (base == null) {
-                return null;
-            }
-            for (final ApnSettingsLoader.Apn apn : apns) {
-                if (apn instanceof DatabaseApn && ((DatabaseApn) apn).equals(base)) {
-                    return null;
-                }
-            }
-            return new DatabaseApn(apns, base, rowId, current);
-        }
-
-        private final List<Apn> mApns;
-        private final BaseApn mBase;
-        private final long mRowId;
-        private int mCurrent;
-
-        public DatabaseApn(final List<Apn> apns, final BaseApn base, final long rowId,
-                final int current) {
-            mApns = apns;
-            mBase = base;
-            mRowId = rowId;
-            mCurrent = current;
-        }
-
-        @Override
-        public String getMmsc() {
-            return mBase.getMmsc();
-        }
-
-        @Override
-        public String getMmsProxy() {
-            return mBase.getMmsProxy();
-        }
-
-        @Override
-        public int getMmsProxyPort() {
-            return mBase.getMmsProxyPort();
-        }
-
-        @Override
-        public void setSuccess() {
-            moveToListHead();
-            setCurrentInDatabase();
-        }
-
-        /**
-         * Try to move this APN to the head of in-memory list
-         */
-        private void moveToListHead() {
-            // If this is being marked as a successful APN, move it to the top of the list so
-            // next time it will be tried first
-            boolean moved = false;
-            synchronized (mApns) {
-                if (mApns.get(0) != this) {
-                    mApns.remove(this);
-                    mApns.add(0, this);
-                    moved = true;
-                }
-            }
-            if (moved) {
-                LogUtil.d(LogUtil.BUGLE_TAG, "Set APN ["
-                        + "MMSC=" + getMmsc() + ", "
-                        + "PROXY=" + getMmsProxy() + ", "
-                        + "PORT=" + getMmsProxyPort() + "] to be first");
-            }
-        }
-
-        /**
-         * Try to set the APN to be CURRENT in its database table
-         */
-        private void setCurrentInDatabase() {
-            synchronized (this) {
-                if (mCurrent > 0) {
-                    // Already current
-                    return;
-                }
-                mCurrent = 1;
-            }
-            LogUtil.d(LogUtil.BUGLE_TAG, "Set APN @" + mRowId + " to be CURRENT in local db");
-            final SQLiteDatabase database = ApnDatabase.getApnDatabase().getWritableDatabase();
-            database.beginTransaction();
-            try {
-                // clear the previous current=1 apn
-                // we don't clear current=2 apn since it is manually selected by user
-                // and we should not override it.
-                database.update(ApnDatabase.APN_TABLE, CURRENT_NULL_VALUE,
-                        CLEAR_UPDATE_SELECTION, CLEAR_UPDATE_SELECTION_ARGS);
-                // set this one to be current (1)
-                database.update(ApnDatabase.APN_TABLE, CURRENT_SET_VALUE, SET_UPDATE_SELECTION,
-                        new String[] { Long.toString(mRowId) });
-                database.setTransactionSuccessful();
-            } finally {
-                database.endTransaction();
-            }
-        }
-
-        public boolean equals(final BaseApn other) {
-            if (other == null) {
-                return false;
-            }
-            return mBase.equals(other);
-        }
-    }
-
-    /**
-     * APN_TYPE_ALL is a special type to indicate that this APN entry can
-     * service all data connections.
-     */
-    public static final String APN_TYPE_ALL = "*";
-    /** APN type for MMS traffic */
-    public static final String APN_TYPE_MMS = "mms";
-
-    private static final String[] APN_PROJECTION_SYSTEM = {
-            Telephony.Carriers.TYPE,
-            Telephony.Carriers.MMSC,
-            Telephony.Carriers.MMSPROXY,
-            Telephony.Carriers.MMSPORT,
-    };
-    private static final String[] APN_PROJECTION_LOCAL = {
-            Telephony.Carriers.TYPE,
-            Telephony.Carriers.MMSC,
-            Telephony.Carriers.MMSPROXY,
-            Telephony.Carriers.MMSPORT,
-            Telephony.Carriers.CURRENT,
-            Telephony.Carriers._ID,
-    };
-    private static final int COLUMN_TYPE         = 0;
-    private static final int COLUMN_MMSC         = 1;
-    private static final int COLUMN_MMSPROXY     = 2;
-    private static final int COLUMN_MMSPORT      = 3;
-    private static final int COLUMN_CURRENT      = 4;
-    private static final int COLUMN_ID           = 5;
-
-    private static final String SELECTION_APN = Telephony.Carriers.APN + "=?";
-    private static final String SELECTION_CURRENT = Telephony.Carriers.CURRENT + " IS NOT NULL";
-    private static final String SELECTION_NUMERIC = Telephony.Carriers.NUMERIC + "=?";
-    private static final String ORDER_BY = Telephony.Carriers.CURRENT + " DESC";
-
-    private final Context mContext;
-
-    // Cached APNs for subIds
-    private final SparseArray<List<ApnSettingsLoader.Apn>> mApnsCache;
-
-    public BugleApnSettingsLoader(final Context context) {
-        mContext = context;
-        mApnsCache = new SparseArray<>();
-    }
-
-    @Override
-    public List<ApnSettingsLoader.Apn> get(final String apnName) {
-        final int subId = PhoneUtils.getDefault().getEffectiveSubId(
-                ParticipantData.DEFAULT_SELF_SUB_ID);
-        List<ApnSettingsLoader.Apn> apns;
-        boolean didLoad = false;
-        synchronized (this) {
-            apns = mApnsCache.get(subId);
-            if (apns == null) {
-                apns = new ArrayList<>();
-                mApnsCache.put(subId, apns);
-                loadLocked(subId, apnName, apns);
-                didLoad = true;
-            }
-        }
-        if (didLoad) {
-            LogUtil.i(LogUtil.BUGLE_TAG, "Loaded " + apns.size() + " APNs");
-        }
-        return apns;
-    }
-
-    private void loadLocked(final int subId, final String apnName, final List<Apn> apns) {
-        // Try Gservices first
-        loadFromGservices(apns);
-        if (apns.size() > 0) {
-            return;
-        }
-        // Try system APN table
-        loadFromSystem(subId, apnName, apns);
-        if (apns.size() > 0) {
-            return;
-        }
-        // Try local APN table
-        loadFromLocalDatabase(apnName, apns);
-        if (apns.size() <= 0) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Failed to load any APN");
-        }
-    }
-
-    /**
-     * Load from Gservices if APN setting is set in Gservices
-     *
-     * @param apns the list used to return results
-     */
-    private void loadFromGservices(final List<Apn> apns) {
-        final BugleGservices gservices = BugleGservices.get();
-        final String mmsc = gservices.getString(BugleGservicesKeys.MMS_MMSC, null);
-        if (TextUtils.isEmpty(mmsc)) {
-            return;
-        }
-        LogUtil.i(LogUtil.BUGLE_TAG, "Loading APNs from gservices");
-        final String proxy = gservices.getString(BugleGservicesKeys.MMS_PROXY_ADDRESS, null);
-        final int port = gservices.getInt(BugleGservicesKeys.MMS_PROXY_PORT, -1);
-        final Apn apn = BaseApn.from("mms", mmsc, proxy, Integer.toString(port));
-        if (apn != null) {
-            apns.add(apn);
-        }
-    }
-
-    /**
-     * Load matching APNs from telephony provider.
-     * We try different combinations of the query to work around some platform quirks.
-     *
-     * @param subId the SIM subId
-     * @param apnName the APN name to match
-     * @param apns the list used to return results
-     */
-    private void loadFromSystem(final int subId, final String apnName, final List<Apn> apns) {
-        Uri uri;
-        if (OsUtil.isAtLeastL_MR1() && subId != MmsManager.DEFAULT_SUB_ID) {
-            uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "/subId/" + subId);
-        } else {
-            uri = Telephony.Carriers.CONTENT_URI;
-        }
-        Cursor cursor = null;
-        try {
-            for (; ; ) {
-                // Try different combinations of queries. Some would work on some platforms.
-                // So we query each combination until we find one returns non-empty result.
-                cursor = querySystem(uri, true/*checkCurrent*/, apnName);
-                if (cursor != null) {
-                    break;
-                }
-                cursor = querySystem(uri, false/*checkCurrent*/, apnName);
-                if (cursor != null) {
-                    break;
-                }
-                cursor = querySystem(uri, true/*checkCurrent*/, null/*apnName*/);
-                if (cursor != null) {
-                    break;
-                }
-                cursor = querySystem(uri, false/*checkCurrent*/, null/*apnName*/);
-                break;
-            }
-        } catch (final SecurityException e) {
-            // Can't access platform APN table, return directly
-            return;
-        }
-        if (cursor == null) {
-            return;
-        }
-        try {
-            if (cursor.moveToFirst()) {
-                final ApnSettingsLoader.Apn apn = BaseApn.from(
-                        cursor.getString(COLUMN_TYPE),
-                        cursor.getString(COLUMN_MMSC),
-                        cursor.getString(COLUMN_MMSPROXY),
-                        cursor.getString(COLUMN_MMSPORT));
-                if (apn != null) {
-                    apns.add(apn);
-                }
-            }
-        } finally {
-            cursor.close();
-        }
-    }
-
-    /**
-     * Query system APN table
-     *
-     * @param uri The APN query URL to use
-     * @param checkCurrent If add "CURRENT IS NOT NULL" condition
-     * @param apnName The optional APN name for query condition
-     * @return A cursor of the query result. If a cursor is returned as not null, it is
-     *         guaranteed to contain at least one row.
-     */
-    private Cursor querySystem(final Uri uri, final boolean checkCurrent, String apnName) {
-        LogUtil.i(LogUtil.BUGLE_TAG, "Loading APNs from system, "
-                + "checkCurrent=" + checkCurrent + " apnName=" + apnName);
-        final StringBuilder selectionBuilder = new StringBuilder();
-        String[] selectionArgs = null;
-        if (checkCurrent) {
-            selectionBuilder.append(SELECTION_CURRENT);
-        }
-        apnName = trimWithNullCheck(apnName);
-        if (!TextUtils.isEmpty(apnName)) {
-            if (selectionBuilder.length() > 0) {
-                selectionBuilder.append(" AND ");
-            }
-            selectionBuilder.append(SELECTION_APN);
-            selectionArgs = new String[] { apnName };
-        }
-        try {
-            final Cursor cursor = SqliteWrapper.query(
-                    mContext,
-                    mContext.getContentResolver(),
-                    uri,
-                    APN_PROJECTION_SYSTEM,
-                    selectionBuilder.toString(),
-                    selectionArgs,
-                    null/*sortOrder*/);
-            if (cursor == null || cursor.getCount() < 1) {
-                if (cursor != null) {
-                    cursor.close();
-                }
-                LogUtil.w(LogUtil.BUGLE_TAG, "Query " + uri + " with apn " + apnName + " and "
-                        + (checkCurrent ? "checking CURRENT" : "not checking CURRENT")
-                        + " returned empty");
-                return null;
-            }
-            return cursor;
-        } catch (final SQLiteException e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "APN table query exception: " + e);
-        } catch (final SecurityException e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Platform restricts APN table access: " + e);
-            throw e;
-        }
-        return null;
-    }
-
-    /**
-     * Load matching APNs from local APN table.
-     * We try both using the APN name and not using the APN name.
-     *
-     * @param apnName the APN name
-     * @param apns the list of results to return
-     */
-    private void loadFromLocalDatabase(final String apnName, final List<Apn> apns) {
-        LogUtil.i(LogUtil.BUGLE_TAG, "Loading APNs from local APN table");
-        final SQLiteDatabase database = ApnDatabase.getApnDatabase().getWritableDatabase();
-        final String mccMnc = PhoneUtils.getMccMncString(PhoneUtils.getDefault().getMccMnc());
-        Cursor cursor = null;
-        cursor = queryLocalDatabase(database, mccMnc, apnName);
-        if (cursor == null) {
-            cursor = queryLocalDatabase(database, mccMnc, null/*apnName*/);
-        }
-        if (cursor == null) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Could not find any APN in local table");
-            return;
-        }
-        try {
-            while (cursor.moveToNext()) {
-                final Apn apn = DatabaseApn.from(apns,
-                        cursor.getString(COLUMN_TYPE),
-                        cursor.getString(COLUMN_MMSC),
-                        cursor.getString(COLUMN_MMSPROXY),
-                        cursor.getString(COLUMN_MMSPORT),
-                        cursor.getLong(COLUMN_ID),
-                        cursor.getInt(COLUMN_CURRENT));
-                if (apn != null) {
-                    apns.add(apn);
-                }
-            }
-        } finally {
-            cursor.close();
-        }
-    }
-
-    /**
-     * Make a query of local APN table based on MCC/MNC and APN name, sorted by CURRENT
-     * column in descending order
-     *
-     * @param db the local database
-     * @param numeric the MCC/MNC string
-     * @param apnName the optional APN name to match
-     * @return the cursor of the query, null if no result
-     */
-    private static Cursor queryLocalDatabase(final SQLiteDatabase db, final String numeric,
-            final String apnName) {
-        final String selection;
-        final String[] selectionArgs;
-        if (TextUtils.isEmpty(apnName)) {
-            selection = SELECTION_NUMERIC;
-            selectionArgs = new String[] { numeric };
-        } else {
-            selection = SELECTION_NUMERIC + " AND " + SELECTION_APN;
-            selectionArgs = new String[] { numeric, apnName };
-        }
-        Cursor cursor = null;
-        try {
-            cursor = db.query(ApnDatabase.APN_TABLE, APN_PROJECTION_LOCAL, selection, selectionArgs,
-                    null/*groupBy*/, null/*having*/, ORDER_BY, null/*limit*/);
-        } catch (final SQLiteException e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Local APN table does not exist. Try rebuilding.", e);
-            ApnDatabase.forceBuildAndLoadApnTables();
-            cursor = db.query(ApnDatabase.APN_TABLE, APN_PROJECTION_LOCAL, selection, selectionArgs,
-                    null/*groupBy*/, null/*having*/, ORDER_BY, null/*limit*/);
-        }
-        if (cursor == null || cursor.getCount() < 1) {
-            if (cursor != null) {
-                cursor.close();
-            }
-            LogUtil.w(LogUtil.BUGLE_TAG, "Query local APNs with apn " + apnName
-                    + " returned empty");
-            return null;
-        }
-        return cursor;
-    }
-
-    private static String trimWithNullCheck(final String value) {
-        return value != null ? value.trim() : null;
-    }
-
-    /**
-     * Trim leading zeros from IPv4 address strings
-     * Our base libraries will interpret that as octel..
-     * Must leave non v4 addresses and host names alone.
-     * For example, 192.168.000.010 -> 192.168.0.10
-     *
-     * @param addr a string representing an ip addr
-     * @return a string propertly trimmed
-     */
-    private static String trimV4AddrZeros(final String addr) {
-        if (addr == null) {
-            return null;
-        }
-        final String[] octets = addr.split("\\.");
-        if (octets.length != 4) {
-            return addr;
-        }
-        final StringBuilder builder = new StringBuilder(16);
-        String result = null;
-        for (int i = 0; i < 4; i++) {
-            try {
-                if (octets[i].length() > 3) {
-                    return addr;
-                }
-                builder.append(Integer.parseInt(octets[i]));
-            } catch (final NumberFormatException e) {
-                return addr;
-            }
-            if (i < 3) {
-                builder.append('.');
-            }
-        }
-        result = builder.toString();
-        return result;
-    }
-
-    /**
-     * Check if the APN contains the APN type we want
-     *
-     * @param types The string encodes a list of supported types
-     * @param requestType The type we want
-     * @return true if the input types string contains the requestType
-     */
-    public static boolean isValidApnType(final String types, final String requestType) {
-        // If APN type is unspecified, assume APN_TYPE_ALL.
-        if (TextUtils.isEmpty(types)) {
-            return true;
-        }
-        for (final String t : types.split(",")) {
-            if (t.equals(requestType) || t.equals(APN_TYPE_ALL)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Get the ID of first APN to try
-     */
-    public static String getFirstTryApn(final SQLiteDatabase database, final String mccMnc) {
-        String key = null;
-        Cursor cursor = null;
-        try {
-            cursor = queryLocalDatabase(database, mccMnc, null/*apnName*/);
-            if (cursor.moveToFirst()) {
-                key = cursor.getString(ApnDatabase.COLUMN_ID);
-            }
-        } catch (final Exception e) {
-            // Nothing to do
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return key;
-    }
-}
diff --git a/src/com/android/messaging/sms/BugleCarrierConfigValuesLoader.java b/src/com/android/messaging/sms/BugleCarrierConfigValuesLoader.java
deleted file mode 100644
index 51f17cb..0000000
--- a/src/com/android/messaging/sms/BugleCarrierConfigValuesLoader.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.content.res.XmlResourceParser;
-import android.os.Bundle;
-import androidx.appcompat.mms.CarrierConfigValuesLoader;
-import android.util.SparseArray;
-
-import com.android.messaging.R;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-/**
- * Carrier configuration loader
- *
- * Loader tries to load from resources. If there is MMS API available, also
- * load from system.
- */
-public class BugleCarrierConfigValuesLoader implements CarrierConfigValuesLoader {
-    /*
-     * Key types
-     */
-    public static final String KEY_TYPE_INT = "int";
-    public static final String KEY_TYPE_BOOL = "bool";
-    public static final String KEY_TYPE_STRING = "string";
-
-    private final Context mContext;
-
-    // Cached values for subIds
-    private final SparseArray<Bundle> mValuesCache;
-
-    public BugleCarrierConfigValuesLoader(final Context context) {
-        mContext = context;
-        mValuesCache = new SparseArray<>();
-    }
-
-    @Override
-    public Bundle get(int subId) {
-        subId = PhoneUtils.getDefault().getEffectiveSubId(subId);
-        Bundle values;
-        String loadSource = null;
-        synchronized (this) {
-            values = mValuesCache.get(subId);
-            if (values == null) {
-                values = new Bundle();
-                mValuesCache.put(subId, values);
-                loadSource = loadLocked(subId, values);
-            }
-        }
-        if (loadSource != null) {
-            LogUtil.i(LogUtil.BUGLE_TAG, "Carrier configs loaded: " + values
-                    + " from " + loadSource + " for subId=" + subId);
-        }
-        return values;
-    }
-
-    /**
-     * Clear the cache for reloading
-     */
-    public void reset() {
-        synchronized (this) {
-            mValuesCache.clear();
-        }
-    }
-
-    /**
-     * Loading carrier config values
-     *
-     * @param subId which SIM to load for
-     * @param values the result to add to
-     * @return the source of the config, could be "resources" or "resources+system"
-     */
-    private String loadLocked(final int subId, final Bundle values) {
-        // Load from resources in earlier platform
-        loadFromResources(subId, values);
-        if (OsUtil.isAtLeastL()) {
-            // Load from system to override if system API exists
-            loadFromSystem(subId, values);
-            return "resources+system";
-        }
-        return "resources";
-    }
-
-    /**
-     * Load from system, using MMS API
-     *
-     * @param subId which SIM to load for
-     * @param values the result to add to
-     */
-    private static void loadFromSystem(final int subId, final Bundle values) {
-        try {
-            final Bundle systemValues =
-                    PhoneUtils.get(subId).getSmsManager().getCarrierConfigValues();
-            if (systemValues != null) {
-                values.putAll(systemValues);
-            }
-        } catch (final Exception e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Calling system getCarrierConfigValues exception", e);
-        }
-    }
-
-    /**
-     * Load from SIM-dependent resources
-     *
-     * @param subId which SIM to load for
-     * @param values the result to add to
-     */
-    private void loadFromResources(final int subId, final Bundle values) {
-        // Get a subscription-dependent context for loading the mms_config.xml
-        final Context subContext = getSubDepContext(mContext, subId);
-        // Load and parse the XML
-        XmlResourceParser parser = null;
-        try {
-            parser = subContext.getResources().getXml(R.xml.mms_config);
-            final ApnsXmlProcessor processor = ApnsXmlProcessor.get(parser);
-            processor.setMmsConfigHandler(new ApnsXmlProcessor.MmsConfigHandler() {
-                @Override
-                public void process(final String mccMnc, final String key, final String value,
-                        final String type) {
-                    update(values, type, key, value);
-                }
-            });
-            processor.process();
-        } catch (final Resources.NotFoundException e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Can not find mms_config.xml");
-        } finally {
-            if (parser != null) {
-                parser.close();
-            }
-        }
-    }
-
-    /**
-     * Get a subscription's Context so we can load resources from it
-     *
-     * @param context the sub-independent Context
-     * @param subId the SIM's subId
-     * @return the sub-dependent Context
-     */
-    private static Context getSubDepContext(final Context context, final int subId) {
-        if (!OsUtil.isAtLeastL_MR1()) {
-            return context;
-        }
-        final int[] mccMnc = PhoneUtils.get(subId).getMccMnc();
-        final int mcc = mccMnc[0];
-        final int mnc = mccMnc[1];
-        final Configuration subConfig = new Configuration();
-        if (mcc == 0 && mnc == 0) {
-            Configuration config = context.getResources().getConfiguration();
-            subConfig.mcc = config.mcc;
-            subConfig.mnc = config.mnc;
-        } else {
-            subConfig.mcc = mcc;
-            subConfig.mnc = mnc;
-        }
-        return context.createConfigurationContext(subConfig);
-    }
-
-    /**
-     * Add or update a carrier config key/value pair to the Bundle
-     *
-     * @param values the result Bundle to add to
-     * @param type the value type
-     * @param key the key
-     * @param value the value
-     */
-    public static void update(final Bundle values, final String type, final String key,
-            final String value) {
-        try {
-            if (KEY_TYPE_INT.equals(type)) {
-                values.putInt(key, Integer.parseInt(value));
-            } else if (KEY_TYPE_BOOL.equals(type)) {
-                values.putBoolean(key, Boolean.parseBoolean(value));
-            } else if (KEY_TYPE_STRING.equals(type)){
-                values.putString(key, value);
-            }
-        } catch (final NumberFormatException e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Add carrier values: "
-                    + "invalid " + key + "," + value + "," + type);
-        }
-    }
-}
diff --git a/src/com/android/messaging/sms/BugleUserAgentInfoLoader.java b/src/com/android/messaging/sms/BugleUserAgentInfoLoader.java
deleted file mode 100644
index 2b1dcd6..0000000
--- a/src/com/android/messaging/sms/BugleUserAgentInfoLoader.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.content.Context;
-import androidx.appcompat.mms.UserAgentInfoLoader;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.VersionUtil;
-
-/**
- * User agent and UA profile URL loader
- */
-public class BugleUserAgentInfoLoader implements UserAgentInfoLoader {
-    private static final String DEFAULT_USER_AGENT_PREFIX = "Bugle/";
-
-    private Context mContext;
-    private boolean mLoaded;
-
-    private String mUserAgent;
-    private String mUAProfUrl;
-
-    public BugleUserAgentInfoLoader(final Context context) {
-        mContext = context;
-    }
-
-    @Override
-    public String getUserAgent() {
-        load();
-        return mUserAgent;
-    }
-
-    @Override
-    public String getUAProfUrl() {
-        load();
-        return mUAProfUrl;
-    }
-
-    private void load() {
-        if (mLoaded) {
-            return;
-        }
-        boolean didLoad = false;
-        synchronized (this) {
-            if (!mLoaded) {
-                loadLocked();
-                mLoaded = true;
-                didLoad = true;
-            }
-        }
-        if (didLoad) {
-            LogUtil.i(LogUtil.BUGLE_TAG, "Loaded user agent info: "
-                    + "UA=" + mUserAgent + ", UAProfUrl=" + mUAProfUrl);
-        }
-    }
-
-    private void loadLocked() {
-        if (OsUtil.isAtLeastKLP()) {
-            // load the MMS User agent and UaProfUrl from TelephonyManager APIs
-            final TelephonyManager telephonyManager = (TelephonyManager) mContext.getSystemService(
-                    Context.TELEPHONY_SERVICE);
-            mUserAgent = telephonyManager.getMmsUserAgent();
-            mUAProfUrl = telephonyManager.getMmsUAProfUrl();
-        }
-        // if user agent string isn't set, use the format "Bugle/<app_version>".
-        if (TextUtils.isEmpty(mUserAgent)) {
-            final String simpleVersionName = VersionUtil.getInstance(mContext).getSimpleName();
-            mUserAgent = DEFAULT_USER_AGENT_PREFIX + simpleVersionName;
-        }
-        // if the UAProfUrl isn't set, get it from Gservices
-        if (TextUtils.isEmpty(mUAProfUrl)) {
-            mUAProfUrl = BugleGservices.get().getString(
-                    BugleGservicesKeys.MMS_UA_PROFILE_URL,
-                    BugleGservicesKeys.MMS_UA_PROFILE_URL_DEFAULT);
-        }
-    }
-}
diff --git a/src/com/android/messaging/sms/DatabaseMessages.java b/src/com/android/messaging/sms/DatabaseMessages.java
deleted file mode 100644
index 0f662e5..0000000
--- a/src/com/android/messaging/sms/DatabaseMessages.java
+++ /dev/null
@@ -1,1006 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.res.AssetFileDescriptor;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.media.MediaMetadataRetriever;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.Telephony.Mms;
-import android.provider.Telephony.Sms;
-import android.text.TextUtils;
-import android.util.Log;
-import android.webkit.MimeTypeMap;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.media.VideoThumbnailRequest;
-import com.android.messaging.mmslib.pdu.CharacterSets;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.MediaMetadataRetrieverWrapper;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.google.common.collect.Lists;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Class contains various SMS/MMS database entities from telephony provider
- */
-public class DatabaseMessages {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    public abstract static class DatabaseMessage {
-        public abstract int getProtocol();
-        public abstract String getUri();
-        public abstract long getTimestampInMillis();
-
-        @Override
-        public boolean equals(final Object other) {
-            if (other == null || !(other instanceof DatabaseMessage)) {
-                return false;
-            }
-            final DatabaseMessage otherDbMsg = (DatabaseMessage) other;
-            // No need to check timestamp since we only need this when we compare
-            // messages at the same timestamp
-            return TextUtils.equals(getUri(), otherDbMsg.getUri());
-        }
-
-        @Override
-        public int hashCode() {
-            // No need to check timestamp since we only need this when we compare
-            // messages at the same timestamp
-            return getUri().hashCode();
-        }
-    }
-
-    /**
-     * SMS message
-     */
-    public static class SmsMessage extends DatabaseMessage implements Parcelable {
-        private static int sIota = 0;
-        public static final int INDEX_ID = sIota++;
-        public static final int INDEX_TYPE = sIota++;
-        public static final int INDEX_ADDRESS = sIota++;
-        public static final int INDEX_BODY = sIota++;
-        public static final int INDEX_DATE = sIota++;
-        public static final int INDEX_THREAD_ID = sIota++;
-        public static final int INDEX_STATUS = sIota++;
-        public static final int INDEX_READ = sIota++;
-        public static final int INDEX_SEEN = sIota++;
-        public static final int INDEX_DATE_SENT = sIota++;
-        public static final int INDEX_SUB_ID = sIota++;
-
-        private static String[] sProjection;
-
-        public static String[] getProjection() {
-            if (sProjection == null) {
-                String[] projection = new String[] {
-                        Sms._ID,
-                        Sms.TYPE,
-                        Sms.ADDRESS,
-                        Sms.BODY,
-                        Sms.DATE,
-                        Sms.THREAD_ID,
-                        Sms.STATUS,
-                        Sms.READ,
-                        Sms.SEEN,
-                        Sms.DATE_SENT,
-                        Sms.SUBSCRIPTION_ID,
-                    };
-                if (!MmsUtils.hasSmsDateSentColumn()) {
-                    projection[INDEX_DATE_SENT] = Sms.DATE;
-                }
-                if (!OsUtil.isAtLeastL_MR1()) {
-                    Assert.equals(INDEX_SUB_ID, projection.length - 1);
-                    String[] withoutSubId = new String[projection.length - 1];
-                    System.arraycopy(projection, 0, withoutSubId, 0, withoutSubId.length);
-                    projection = withoutSubId;
-                }
-
-                sProjection = projection;
-            }
-
-            return sProjection;
-        }
-
-        public String mUri;
-        public String mAddress;
-        public String mBody;
-        private long mRowId;
-        public long mTimestampInMillis;
-        public long mTimestampSentInMillis;
-        public int mType;
-        public long mThreadId;
-        public int mStatus;
-        public boolean mRead;
-        public boolean mSeen;
-        public int mSubId;
-
-        private SmsMessage() {
-        }
-
-        /**
-         * Load from a cursor of a query that returns the SMS to import
-         *
-         * @param cursor
-         */
-        private void load(final Cursor cursor) {
-            mRowId = cursor.getLong(INDEX_ID);
-            mAddress = cursor.getString(INDEX_ADDRESS);
-            mBody = cursor.getString(INDEX_BODY);
-            mTimestampInMillis = cursor.getLong(INDEX_DATE);
-            // Before ICS, there is no "date_sent" so use copy of "date" value
-            mTimestampSentInMillis = cursor.getLong(INDEX_DATE_SENT);
-            mType = cursor.getInt(INDEX_TYPE);
-            mThreadId = cursor.getLong(INDEX_THREAD_ID);
-            mStatus = cursor.getInt(INDEX_STATUS);
-            mRead = cursor.getInt(INDEX_READ) == 0 ? false : true;
-            mSeen = cursor.getInt(INDEX_SEEN) == 0 ? false : true;
-            mUri = ContentUris.withAppendedId(Sms.CONTENT_URI, mRowId).toString();
-            mSubId = PhoneUtils.getDefault().getSubIdFromTelephony(cursor, INDEX_SUB_ID);
-        }
-
-        /**
-         * Get a new SmsMessage by loading from the cursor of a query
-         * that returns the SMS to import
-         *
-         * @param cursor
-         * @return
-         */
-        public static SmsMessage get(final Cursor cursor) {
-            final SmsMessage msg = new SmsMessage();
-            msg.load(cursor);
-            return msg;
-        }
-
-        @Override
-        public String getUri() {
-            return mUri;
-        }
-
-        public int getSubId() {
-            return mSubId;
-        }
-
-        @Override
-        public int getProtocol() {
-            return MessageData.PROTOCOL_SMS;
-        }
-
-        @Override
-        public long getTimestampInMillis() {
-            return mTimestampInMillis;
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        private SmsMessage(final Parcel in) {
-            mUri = in.readString();
-            mRowId = in.readLong();
-            mTimestampInMillis = in.readLong();
-            mTimestampSentInMillis = in.readLong();
-            mType = in.readInt();
-            mThreadId = in.readLong();
-            mStatus = in.readInt();
-            mRead = in.readInt() != 0;
-            mSeen = in.readInt() != 0;
-            mSubId = in.readInt();
-
-            // SMS specific
-            mAddress = in.readString();
-            mBody = in.readString();
-        }
-
-        public static final Parcelable.Creator<SmsMessage> CREATOR
-                = new Parcelable.Creator<SmsMessage>() {
-            @Override
-            public SmsMessage createFromParcel(final Parcel in) {
-                return new SmsMessage(in);
-            }
-
-            @Override
-            public SmsMessage[] newArray(final int size) {
-                return new SmsMessage[size];
-            }
-        };
-
-        @Override
-        public void writeToParcel(final Parcel out, final int flags) {
-            out.writeString(mUri);
-            out.writeLong(mRowId);
-            out.writeLong(mTimestampInMillis);
-            out.writeLong(mTimestampSentInMillis);
-            out.writeInt(mType);
-            out.writeLong(mThreadId);
-            out.writeInt(mStatus);
-            out.writeInt(mRead ? 1 : 0);
-            out.writeInt(mSeen ? 1 : 0);
-            out.writeInt(mSubId);
-
-            // SMS specific
-            out.writeString(mAddress);
-            out.writeString(mBody);
-        }
-    }
-
-    /**
-     * MMS message
-     */
-    public static class MmsMessage extends DatabaseMessage implements Parcelable {
-        private static int sIota = 0;
-        public static final int INDEX_ID = sIota++;
-        public static final int INDEX_MESSAGE_BOX = sIota++;
-        public static final int INDEX_SUBJECT = sIota++;
-        public static final int INDEX_SUBJECT_CHARSET = sIota++;
-        public static final int INDEX_MESSAGE_SIZE = sIota++;
-        public static final int INDEX_DATE = sIota++;
-        public static final int INDEX_DATE_SENT = sIota++;
-        public static final int INDEX_THREAD_ID = sIota++;
-        public static final int INDEX_PRIORITY = sIota++;
-        public static final int INDEX_STATUS = sIota++;
-        public static final int INDEX_READ = sIota++;
-        public static final int INDEX_SEEN = sIota++;
-        public static final int INDEX_CONTENT_LOCATION = sIota++;
-        public static final int INDEX_TRANSACTION_ID = sIota++;
-        public static final int INDEX_MESSAGE_TYPE = sIota++;
-        public static final int INDEX_EXPIRY = sIota++;
-        public static final int INDEX_RESPONSE_STATUS = sIota++;
-        public static final int INDEX_RETRIEVE_STATUS = sIota++;
-        public static final int INDEX_SUB_ID = sIota++;
-
-        private static String[] sProjection;
-
-        public static String[] getProjection() {
-            if (sProjection == null) {
-                String[] projection = new String[] {
-                    Mms._ID,
-                    Mms.MESSAGE_BOX,
-                    Mms.SUBJECT,
-                    Mms.SUBJECT_CHARSET,
-                    Mms.MESSAGE_SIZE,
-                    Mms.DATE,
-                    Mms.DATE_SENT,
-                    Mms.THREAD_ID,
-                    Mms.PRIORITY,
-                    Mms.STATUS,
-                    Mms.READ,
-                    Mms.SEEN,
-                    Mms.CONTENT_LOCATION,
-                    Mms.TRANSACTION_ID,
-                    Mms.MESSAGE_TYPE,
-                    Mms.EXPIRY,
-                    Mms.RESPONSE_STATUS,
-                    Mms.RETRIEVE_STATUS,
-                    Mms.SUBSCRIPTION_ID,
-                };
-
-                if (!OsUtil.isAtLeastL_MR1()) {
-                    Assert.equals(INDEX_SUB_ID, projection.length - 1);
-                    String[] withoutSubId = new String[projection.length - 1];
-                    System.arraycopy(projection, 0, withoutSubId, 0, withoutSubId.length);
-                    projection = withoutSubId;
-                }
-
-                sProjection = projection;
-            }
-
-            return sProjection;
-        }
-
-        public String mUri;
-        private long mRowId;
-        public int mType;
-        public String mSubject;
-        public int mSubjectCharset;
-        private long mSize;
-        public long mTimestampInMillis;
-        public long mSentTimestampInMillis;
-        public long mThreadId;
-        public int mPriority;
-        public int mStatus;
-        public boolean mRead;
-        public boolean mSeen;
-        public String mContentLocation;
-        public String mTransactionId;
-        public int mMmsMessageType;
-        public long mExpiryInMillis;
-        public int mSubId;
-        public String mSender;
-        public int mResponseStatus;
-        public int mRetrieveStatus;
-
-        public List<MmsPart> mParts = Lists.newArrayList();
-        private boolean mPartsProcessed = false;
-
-        private MmsMessage() {
-        }
-
-        /**
-         * Load from a cursor of a query that returns the MMS to import
-         *
-         * @param cursor
-         */
-        public void load(final Cursor cursor) {
-            mRowId = cursor.getLong(INDEX_ID);
-            mType = cursor.getInt(INDEX_MESSAGE_BOX);
-            mSubject = cursor.getString(INDEX_SUBJECT);
-            mSubjectCharset = cursor.getInt(INDEX_SUBJECT_CHARSET);
-            if (!TextUtils.isEmpty(mSubject)) {
-                // PduPersister stores the subject using ISO_8859_1
-                // Let's load it using that encoding and convert it back to its original
-                // See PduPersister.persist and PduPersister.toIsoString
-                // (Refer to bug b/11162476)
-                mSubject = getDecodedString(
-                        getStringBytes(mSubject, CharacterSets.ISO_8859_1), mSubjectCharset);
-            }
-            mSize = cursor.getLong(INDEX_MESSAGE_SIZE);
-            // MMS db times are in seconds
-            mTimestampInMillis = cursor.getLong(INDEX_DATE) * 1000;
-            mSentTimestampInMillis = cursor.getLong(INDEX_DATE_SENT) * 1000;
-            mThreadId = cursor.getLong(INDEX_THREAD_ID);
-            mPriority = cursor.getInt(INDEX_PRIORITY);
-            mStatus = cursor.getInt(INDEX_STATUS);
-            mRead = cursor.getInt(INDEX_READ) == 0 ? false : true;
-            mSeen = cursor.getInt(INDEX_SEEN) == 0 ? false : true;
-            mContentLocation = cursor.getString(INDEX_CONTENT_LOCATION);
-            mTransactionId = cursor.getString(INDEX_TRANSACTION_ID);
-            mMmsMessageType = cursor.getInt(INDEX_MESSAGE_TYPE);
-            mExpiryInMillis = cursor.getLong(INDEX_EXPIRY) * 1000;
-            mResponseStatus = cursor.getInt(INDEX_RESPONSE_STATUS);
-            mRetrieveStatus = cursor.getInt(INDEX_RETRIEVE_STATUS);
-            // Clear all parts in case we reuse this object
-            mParts.clear();
-            mPartsProcessed = false;
-            mUri = ContentUris.withAppendedId(Mms.CONTENT_URI, mRowId).toString();
-            mSubId = PhoneUtils.getDefault().getSubIdFromTelephony(cursor, INDEX_SUB_ID);
-        }
-
-        /**
-         * Get a new MmsMessage by loading from the cursor of a query
-         * that returns the MMS to import
-         *
-         * @param cursor
-         * @return
-         */
-        public static MmsMessage get(final Cursor cursor) {
-            final MmsMessage msg = new MmsMessage();
-            msg.load(cursor);
-            return msg;
-        }
-        /**
-         * Add a loaded MMS part
-         *
-         * @param part
-         */
-        public void addPart(final MmsPart part) {
-            mParts.add(part);
-        }
-
-        public List<MmsPart> getParts() {
-            return mParts;
-        }
-
-        public long getSize() {
-            if (!mPartsProcessed) {
-                processParts();
-            }
-            return mSize;
-        }
-
-        /**
-         * Process loaded MMS parts to obtain the combined text, the combined attachment url,
-         * the combined content type and the combined size.
-         */
-        private void processParts() {
-            if (mPartsProcessed) {
-                return;
-            }
-            mPartsProcessed = true;
-            // Remember the width and height of the first media part
-            // These are needed when building attachment list
-            long sizeOfParts = 0L;
-            for (final MmsPart part : mParts) {
-                sizeOfParts += part.mSize;
-            }
-            if (mSize <= 0) {
-                mSize = mSubject != null ? mSubject.getBytes().length : 0L;
-                mSize += sizeOfParts;
-            }
-        }
-
-        @Override
-        public String getUri() {
-            return mUri;
-        }
-
-        public long getId() {
-            return mRowId;
-        }
-
-        public int getSubId() {
-            return mSubId;
-        }
-
-        @Override
-        public int getProtocol() {
-            return MessageData.PROTOCOL_MMS;
-        }
-
-        @Override
-        public long getTimestampInMillis() {
-            return mTimestampInMillis;
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        public void setSender(final String sender) {
-            mSender = sender;
-        }
-
-        private MmsMessage(final Parcel in) {
-            mUri = in.readString();
-            mRowId = in.readLong();
-            mTimestampInMillis = in.readLong();
-            mSentTimestampInMillis = in.readLong();
-            mType = in.readInt();
-            mThreadId = in.readLong();
-            mStatus = in.readInt();
-            mRead = in.readInt() != 0;
-            mSeen = in.readInt() != 0;
-            mSubId = in.readInt();
-
-            // MMS specific
-            mSubject = in.readString();
-            mContentLocation = in.readString();
-            mTransactionId = in.readString();
-            mSender = in.readString();
-
-            mSize = in.readLong();
-            mExpiryInMillis = in.readLong();
-
-            mSubjectCharset = in.readInt();
-            mPriority = in.readInt();
-            mMmsMessageType = in.readInt();
-            mResponseStatus = in.readInt();
-            mRetrieveStatus = in.readInt();
-
-            final int nParts = in.readInt();
-            mParts = new ArrayList<MmsPart>();
-            mPartsProcessed = false;
-            for (int i = 0; i < nParts; i++) {
-                mParts.add((MmsPart) in.readParcelable(getClass().getClassLoader()));
-            }
-        }
-
-        public static final Parcelable.Creator<MmsMessage> CREATOR
-                = new Parcelable.Creator<MmsMessage>() {
-            @Override
-            public MmsMessage createFromParcel(final Parcel in) {
-                return new MmsMessage(in);
-            }
-
-            @Override
-            public MmsMessage[] newArray(final int size) {
-                return new MmsMessage[size];
-            }
-        };
-
-        @Override
-        public void writeToParcel(final Parcel out, final int flags) {
-            out.writeString(mUri);
-            out.writeLong(mRowId);
-            out.writeLong(mTimestampInMillis);
-            out.writeLong(mSentTimestampInMillis);
-            out.writeInt(mType);
-            out.writeLong(mThreadId);
-            out.writeInt(mStatus);
-            out.writeInt(mRead ? 1 : 0);
-            out.writeInt(mSeen ? 1 : 0);
-            out.writeInt(mSubId);
-
-            out.writeString(mSubject);
-            out.writeString(mContentLocation);
-            out.writeString(mTransactionId);
-            out.writeString(mSender);
-
-            out.writeLong(mSize);
-            out.writeLong(mExpiryInMillis);
-
-            out.writeInt(mSubjectCharset);
-            out.writeInt(mPriority);
-            out.writeInt(mMmsMessageType);
-            out.writeInt(mResponseStatus);
-            out.writeInt(mRetrieveStatus);
-
-            out.writeInt(mParts.size());
-            for (final MmsPart part : mParts) {
-                out.writeParcelable(part, 0);
-            }
-        }
-    }
-
-    /**
-     * Part of an MMS message
-     */
-    public static class MmsPart implements Parcelable {
-        public static final String[] PROJECTION = new String[] {
-            Mms.Part._ID,
-            Mms.Part.MSG_ID,
-            Mms.Part.CHARSET,
-            Mms.Part.CONTENT_TYPE,
-            Mms.Part.TEXT,
-        };
-        private static int sIota = 0;
-        public static final int INDEX_ID = sIota++;
-        public static final int INDEX_MSG_ID = sIota++;
-        public static final int INDEX_CHARSET = sIota++;
-        public static final int INDEX_CONTENT_TYPE = sIota++;
-        public static final int INDEX_TEXT = sIota++;
-
-        public String mUri;
-        public long mRowId;
-        public long mMessageId;
-        public String mContentType;
-        public String mText;
-        public int mCharset;
-        private int mWidth;
-        private int mHeight;
-        public long mSize;
-
-        private MmsPart() {
-        }
-
-        /**
-         * Load from a cursor of a query that returns the MMS part to import
-         *
-         * @param cursor
-         */
-        public void load(final Cursor cursor, final boolean loadMedia) {
-            mRowId = cursor.getLong(INDEX_ID);
-            mMessageId = cursor.getLong(INDEX_MSG_ID);
-            mContentType = cursor.getString(INDEX_CONTENT_TYPE);
-            mText = cursor.getString(INDEX_TEXT);
-            mCharset = cursor.getInt(INDEX_CHARSET);
-            mWidth = 0;
-            mHeight = 0;
-            mSize = 0;
-            if (isMedia()) {
-                // For importing we don't load media since performance is critical
-                // For loading when we receive mms, we do load media to get enough
-                // information of the media file
-                if (loadMedia) {
-                    if (ContentType.isImageType(mContentType)) {
-                        loadImage();
-                    } else if (ContentType.isVideoType(mContentType)) {
-                        loadVideo();
-                    } // No need to load audio for parsing
-                    mSize = MmsUtils.getMediaFileSize(getDataUri());
-                }
-            } else {
-                // Load text if not media type
-                loadText();
-            }
-            mUri = Uri.withAppendedPath(Mms.CONTENT_URI, cursor.getString(INDEX_ID)).toString();
-        }
-
-        /**
-         * Get content type from file extension
-         */
-        private static String extractContentType(final Context context, final Uri uri) {
-            final String path = uri.getPath();
-            final MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
-            String extension = MimeTypeMap.getFileExtensionFromUrl(path);
-            if (TextUtils.isEmpty(extension)) {
-                // getMimeTypeFromExtension() doesn't handle spaces in filenames nor can it handle
-                // urlEncoded strings. Let's try one last time at finding the extension.
-                final int dotPos = path.lastIndexOf('.');
-                if (0 <= dotPos) {
-                    extension = path.substring(dotPos + 1);
-                }
-            }
-            return mimeTypeMap.getMimeTypeFromExtension(extension);
-        }
-
-        /**
-         * Get text of a text part
-         */
-        private void loadText() {
-            byte[] data = null;
-            if (isEmbeddedTextType()) {
-                // Embedded text, get from the "text" column
-                if (!TextUtils.isEmpty(mText)) {
-                    data = getStringBytes(mText, mCharset);
-                }
-            } else {
-                // Not embedded, load from disk
-                final ContentResolver resolver =
-                        Factory.get().getApplicationContext().getContentResolver();
-                final Uri uri = getDataUri();
-                InputStream is = null;
-                final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                try {
-                    is = resolver.openInputStream(uri);
-                    final byte[] buffer = new byte[256];
-                    int len = is.read(buffer);
-                    while (len >= 0) {
-                        baos.write(buffer, 0, len);
-                        len = is.read(buffer);
-                    }
-                } catch (final IOException e) {
-                    LogUtil.e(TAG,
-                            "DatabaseMessages.MmsPart: loading text from file failed: " + e, e);
-                } finally {
-                    if (is != null) {
-                        try {
-                            is.close();
-                        } catch (final IOException e) {
-                            LogUtil.e(TAG, "DatabaseMessages.MmsPart: close file failed: " + e, e);
-                        }
-                    }
-                }
-                data = baos.toByteArray();
-            }
-            if (data != null && data.length > 0) {
-                mSize = data.length;
-                mText = getDecodedString(data, mCharset);
-            }
-        }
-
-        /**
-         * Load image file of an image part and parse the dimensions and type
-         */
-        private void loadImage() {
-            final Context context = Factory.get().getApplicationContext();
-            final ContentResolver resolver = context.getContentResolver();
-            final Uri uri = getDataUri();
-            // We have to get the width and height of the image -- they're needed when adding
-            // an attachment in bugle.
-            InputStream is = null;
-            try {
-                is = resolver.openInputStream(uri);
-                final BitmapFactory.Options opt = new BitmapFactory.Options();
-                opt.inJustDecodeBounds = true;
-                BitmapFactory.decodeStream(is, null, opt);
-                mContentType = opt.outMimeType;
-                mWidth = opt.outWidth;
-                mHeight = opt.outHeight;
-                if (TextUtils.isEmpty(mContentType)) {
-                    // BitmapFactory couldn't figure out the image type. That's got to be a bad
-                    // sign, but see if we can figure it out from the file extension.
-                    mContentType = extractContentType(context, uri);
-                }
-            } catch (final FileNotFoundException e) {
-                LogUtil.e(TAG, "DatabaseMessages.MmsPart.loadImage: file not found", e);
-            } finally {
-                if (is != null) {
-                    try {
-                        is.close();
-                    } catch (final IOException e) {
-                        Log.e(TAG, "IOException caught while closing stream", e);
-                    }
-                }
-            }
-        }
-
-        /**
-         * Load video file of a video part and parse the dimensions and type
-         */
-        private void loadVideo() {
-            // This is a coarse check, and should not be applied to outgoing messages. However,
-            // currently, this does not cause any problems.
-            if (!VideoThumbnailRequest.shouldShowIncomingVideoThumbnails()) {
-                return;
-            }
-            final Uri uri = getDataUri();
-            final MediaMetadataRetrieverWrapper retriever = new MediaMetadataRetrieverWrapper();
-            try {
-                retriever.setDataSource(uri);
-                // FLAG: This inadvertently fixes a problem with phone receiving audio
-                // messages on some carrier. We should handle this in a less accidental way so that
-                // we don't break it again. (The carrier changes the content type in the wrapper
-                // in-transit from audio/mp4 to video/3gpp without changing the data)
-                // Also note: There is a bug in some OEM device where mmr returns
-                // video/ffmpeg for image files.  That shouldn't happen here but be aware.
-                mContentType =
-                        retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE);
-                final Bitmap bitmap = retriever.getFrameAtTime(-1);
-                if (bitmap != null) {
-                    mWidth = bitmap.getWidth();
-                    mHeight = bitmap.getHeight();
-                } else {
-                    // Get here if it's not actually video (see above)
-                    LogUtil.i(LogUtil.BUGLE_TAG, "loadVideo: Got null bitmap from " + uri);
-                }
-            } catch (IOException e) {
-                LogUtil.i(LogUtil.BUGLE_TAG, "Error extracting metadata from " + uri, e);
-            } finally {
-                retriever.release();
-            }
-        }
-
-        /**
-         * Get media file size
-         */
-        private long getMediaFileSize() {
-            final Context context = Factory.get().getApplicationContext();
-            final Uri uri = getDataUri();
-            AssetFileDescriptor fd = null;
-            try {
-                fd = context.getContentResolver().openAssetFileDescriptor(uri, "r");
-                if (fd != null) {
-                    return fd.getParcelFileDescriptor().getStatSize();
-                }
-            } catch (final FileNotFoundException e) {
-                LogUtil.e(TAG, "DatabaseMessages.MmsPart: cound not find media file: " + e, e);
-            } finally {
-                if (fd != null) {
-                    try {
-                        fd.close();
-                    } catch (final IOException e) {
-                        LogUtil.e(TAG, "DatabaseMessages.MmsPart: failed to close " + e, e);
-                    }
-                }
-            }
-            return 0L;
-        }
-
-        /**
-         * @return If the type is a text type that stores text embedded (i.e. in db table)
-         */
-        private boolean isEmbeddedTextType() {
-            return ContentType.TEXT_PLAIN.equals(mContentType)
-                    || ContentType.APP_SMIL.equals(mContentType)
-                    || ContentType.TEXT_HTML.equals(mContentType);
-        }
-
-        /**
-         * Get an instance of the MMS part from the part table cursor
-         *
-         * @param cursor
-         * @param loadMedia Whether to load the media file of the part
-         * @return
-         */
-        public static MmsPart get(final Cursor cursor, final boolean loadMedia) {
-            final MmsPart part = new MmsPart();
-            part.load(cursor, loadMedia);
-            return part;
-        }
-
-        public boolean isText() {
-            return ContentType.TEXT_PLAIN.equals(mContentType)
-                    || ContentType.TEXT_HTML.equals(mContentType)
-                    || ContentType.APP_WAP_XHTML.equals(mContentType);
-        }
-
-        public boolean isMedia() {
-            return ContentType.isImageType(mContentType)
-                    || ContentType.isVideoType(mContentType)
-                    || ContentType.isAudioType(mContentType)
-                    || ContentType.isVCardType(mContentType);
-        }
-
-        public boolean isImage() {
-            return ContentType.isImageType(mContentType);
-        }
-
-        public Uri getDataUri() {
-            return Uri.parse("content://mms/part/" + mRowId);
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        private MmsPart(final Parcel in) {
-            mUri = in.readString();
-            mRowId = in.readLong();
-            mMessageId = in.readLong();
-            mContentType = in.readString();
-            mText = in.readString();
-            mCharset = in.readInt();
-            mWidth = in.readInt();
-            mHeight = in.readInt();
-            mSize = in.readLong();
-        }
-
-        public static final Parcelable.Creator<MmsPart> CREATOR
-                = new Parcelable.Creator<MmsPart>() {
-            @Override
-            public MmsPart createFromParcel(final Parcel in) {
-                return new MmsPart(in);
-            }
-
-            @Override
-            public MmsPart[] newArray(final int size) {
-                return new MmsPart[size];
-            }
-        };
-
-        @Override
-        public void writeToParcel(final Parcel out, final int flags) {
-            out.writeString(mUri);
-            out.writeLong(mRowId);
-            out.writeLong(mMessageId);
-            out.writeString(mContentType);
-            out.writeString(mText);
-            out.writeInt(mCharset);
-            out.writeInt(mWidth);
-            out.writeInt(mHeight);
-            out.writeLong(mSize);
-        }
-    }
-
-    /**
-     * This class provides the same DatabaseMessage interface over a local SMS db message
-     */
-    public static class LocalDatabaseMessage extends DatabaseMessage implements Parcelable {
-        private final int mProtocol;
-        private final String mUri;
-        private final long mTimestamp;
-        private final long mLocalId;
-        private final String mConversationId;
-
-        public LocalDatabaseMessage(final long localId, final int protocol, final String uri,
-                final long timestamp, final String conversationId) {
-            mLocalId = localId;
-            mProtocol = protocol;
-            mUri = uri;
-            mTimestamp = timestamp;
-            mConversationId = conversationId;
-        }
-
-        @Override
-        public int getProtocol() {
-            return mProtocol;
-        }
-
-        @Override
-        public long getTimestampInMillis() {
-            return mTimestamp;
-        }
-
-        @Override
-        public String getUri() {
-            return mUri;
-        }
-
-        public long getLocalId() {
-            return mLocalId;
-        }
-
-        public String getConversationId() {
-            return mConversationId;
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        private LocalDatabaseMessage(final Parcel in) {
-            mUri = in.readString();
-            mConversationId = in.readString();
-            mLocalId = in.readLong();
-            mTimestamp = in.readLong();
-            mProtocol = in.readInt();
-        }
-
-        public static final Parcelable.Creator<LocalDatabaseMessage> CREATOR
-                = new Parcelable.Creator<LocalDatabaseMessage>() {
-            @Override
-            public LocalDatabaseMessage createFromParcel(final Parcel in) {
-                return new LocalDatabaseMessage(in);
-            }
-
-            @Override
-            public LocalDatabaseMessage[] newArray(final int size) {
-                return new LocalDatabaseMessage[size];
-            }
-        };
-
-        @Override
-        public void writeToParcel(final Parcel out, final int flags) {
-            out.writeString(mUri);
-            out.writeString(mConversationId);
-            out.writeLong(mLocalId);
-            out.writeLong(mTimestamp);
-            out.writeInt(mProtocol);
-        }
-    }
-
-    /**
-     * Address for MMS message
-     */
-    public static class MmsAddr {
-        public static final String[] PROJECTION = new String[] {
-            Mms.Addr.ADDRESS,
-            Mms.Addr.CHARSET,
-        };
-        private static int sIota = 0;
-        public static final int INDEX_ADDRESS = sIota++;
-        public static final int INDEX_CHARSET = sIota++;
-
-        public static String get(final Cursor cursor) {
-            final int charset = cursor.getInt(INDEX_CHARSET);
-            // PduPersister stores the addresses using ISO_8859_1
-            // Let's load it using that encoding and convert it back to its original
-            // See PduPersister.persistAddress
-            return getDecodedString(
-                    getStringBytes(cursor.getString(INDEX_ADDRESS), CharacterSets.ISO_8859_1),
-                    charset);
-        }
-    }
-
-    /**
-     * Decoded string by character set
-     */
-    public static String getDecodedString(final byte[] data, final int charset)  {
-        if (CharacterSets.ANY_CHARSET == charset) {
-            return new String(data); // system default encoding.
-        } else {
-            try {
-                final String name = CharacterSets.getMimeName(charset);
-                return new String(data, name);
-            } catch (final UnsupportedEncodingException e) {
-                try {
-                    return new String(data, CharacterSets.MIMENAME_ISO_8859_1);
-                } catch (final UnsupportedEncodingException exception) {
-                    return new String(data); // system default encoding.
-                }
-            }
-        }
-    }
-
-    /**
-     * Unpack a given String into a byte[].
-     */
-    public static byte[] getStringBytes(final String data, final int charset) {
-        if (CharacterSets.ANY_CHARSET == charset) {
-            return data.getBytes();
-        } else {
-            try {
-                final String name = CharacterSets.getMimeName(charset);
-                return data.getBytes(name);
-            } catch (final UnsupportedEncodingException e) {
-                return data.getBytes();
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/sms/MmsConfig.java b/src/com/android/messaging/sms/MmsConfig.java
deleted file mode 100755
index 187e677..0000000
--- a/src/com/android/messaging/sms/MmsConfig.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.os.Bundle;
-import androidx.appcompat.mms.CarrierConfigValuesLoader;
-import android.telephony.SubscriptionInfo;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.SafeAsyncTask;
-import com.google.common.collect.Maps;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * MMS configuration.
- *
- * This is now a wrapper around the BugleCarrierConfigValuesLoader, which does
- * the actual loading and stores the values in a Bundle. This class provides getter
- * methods for values used in the app, which is easier to use than the raw loader
- * class.
- */
-public class MmsConfig {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static final int DEFAULT_MAX_TEXT_LENGTH = 2000;
-
-    /*
-     * Key types
-     */
-    public static final String KEY_TYPE_INT = "int";
-    public static final String KEY_TYPE_BOOL = "bool";
-    public static final String KEY_TYPE_STRING = "string";
-
-    private static final Map<String, String> sKeyTypeMap = Maps.newHashMap();
-    static {
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLED_MMS, KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLED_TRANS_ID, KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLED_NOTIFY_WAP_MMSC, KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ALIAS_ENABLED, KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ALLOW_ATTACH_AUDIO, KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLE_MULTIPART_SMS, KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLE_SMS_DELIVERY_REPORTS,
-                KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLE_GROUP_MMS, KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION,
-                KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_CELL_BROADCAST_APP_LINKS, KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES,
-                KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLE_MMS_READ_REPORTS, KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ENABLE_MMS_DELIVERY_REPORTS,
-                KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_SUPPORT_HTTP_CHARSET_HEADER,
-                KEY_TYPE_BOOL);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_SIZE, KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_HEIGHT, KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_WIDTH, KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_RECIPIENT_LIMIT, KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_HTTP_SOCKET_TIMEOUT, KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ALIAS_MIN_CHARS, KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_ALIAS_MAX_CHARS, KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_THRESHOLD, KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD,
-                KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_TEXT_SIZE, KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_MAX_SUBJECT_LENGTH, KEY_TYPE_INT);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_UA_PROF_TAG_NAME, KEY_TYPE_STRING);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_HTTP_PARAMS, KEY_TYPE_STRING);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_EMAIL_GATEWAY_NUMBER, KEY_TYPE_STRING);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_NAI_SUFFIX, KEY_TYPE_STRING);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_UA_PROF_URL, KEY_TYPE_STRING);
-        sKeyTypeMap.put(CarrierConfigValuesLoader.CONFIG_USER_AGENT, KEY_TYPE_STRING);
-    }
-
-    // A map that stores all MmsConfigs, one per active subscription. For pre-LMSim, this will
-    // contain just one entry with the default self sub id; for LMSim and above, this will contain
-    // all active sub ids but the default subscription id - the default subscription id will be
-    // resolved to an active sub id during runtime.
-    private static final Map<Integer, MmsConfig> sSubIdToMmsConfigMap = Maps.newHashMap();
-    // The fallback values
-    private static final MmsConfig sFallback =
-            new MmsConfig(ParticipantData.DEFAULT_SELF_SUB_ID, new Bundle());
-
-    // Per-subscription configuration values.
-    private final Bundle mValues;
-    private final int mSubId;
-
-    /**
-     * Retrieves the MmsConfig instance associated with the given {@code subId}
-     */
-    public static MmsConfig get(final int subId) {
-        final int realSubId = PhoneUtils.getDefault().getEffectiveSubId(subId);
-        synchronized (sSubIdToMmsConfigMap) {
-            final MmsConfig mmsConfig = sSubIdToMmsConfigMap.get(realSubId);
-            if (mmsConfig == null) {
-                // The subId is no longer valid. Fall back to the default config.
-                LogUtil.e(LogUtil.BUGLE_TAG, "Get mms config failed: invalid subId. subId=" + subId
-                        + ", real subId=" + realSubId
-                        + ", map=" + sSubIdToMmsConfigMap.keySet());
-                return sFallback;
-            }
-            return mmsConfig;
-        }
-    }
-
-    private MmsConfig(final int subId, final Bundle values) {
-        mSubId = subId;
-        mValues = values;
-    }
-
-    /**
-     * Same as load() but doing it using an async thread from SafeAsyncTask thread pool.
-     */
-    public static void loadAsync() {
-        SafeAsyncTask.executeOnThreadPool(new Runnable() {
-            @Override
-            public void run() {
-                load();
-            }
-        });
-    }
-
-    /**
-     * Reload the device and per-subscription settings.
-     */
-    public static synchronized void load() {
-        final BugleCarrierConfigValuesLoader loader = Factory.get().getCarrierConfigValuesLoader();
-        // Rebuild the entire MmsConfig map.
-        sSubIdToMmsConfigMap.clear();
-        loader.reset();
-        if (OsUtil.isAtLeastL_MR1()) {
-            final List<SubscriptionInfo> subInfoRecords =
-                    PhoneUtils.getDefault().toLMr1().getActiveSubscriptionInfoList();
-            if (subInfoRecords == null) {
-                LogUtil.w(TAG, "Loading mms config failed: no active SIM");
-                return;
-            }
-            for (SubscriptionInfo subInfoRecord : subInfoRecords) {
-                final int subId = subInfoRecord.getSubscriptionId();
-                final Bundle values = loader.get(subId);
-                addMmsConfig(new MmsConfig(subId, values));
-            }
-        } else {
-            final Bundle values = loader.get(ParticipantData.DEFAULT_SELF_SUB_ID);
-            addMmsConfig(new MmsConfig(ParticipantData.DEFAULT_SELF_SUB_ID, values));
-        }
-    }
-
-    private static void addMmsConfig(MmsConfig mmsConfig) {
-        Assert.isTrue(OsUtil.isAtLeastL_MR1() !=
-                (mmsConfig.mSubId == ParticipantData.DEFAULT_SELF_SUB_ID));
-        sSubIdToMmsConfigMap.put(mmsConfig.mSubId, mmsConfig);
-    }
-
-    public int getSmsToMmsTextThreshold() {
-        return mValues.getInt(CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_THRESHOLD,
-                CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_THRESHOLD_DEFAULT);
-    }
-
-    public int getSmsToMmsTextLengthThreshold() {
-        return mValues.getInt(CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD,
-                CarrierConfigValuesLoader.CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_DEFAULT);
-    }
-
-    public int getMaxMessageSize() {
-        return mValues.getInt(CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_SIZE,
-                CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_SIZE_DEFAULT);
-    }
-
-    /**
-     * Return the largest MaxMessageSize for any subid
-     */
-    public static int getMaxMaxMessageSize() {
-        int maxMax = 0;
-        for (MmsConfig config : sSubIdToMmsConfigMap.values()) {
-            maxMax = Math.max(maxMax, config.getMaxMessageSize());
-        }
-        return maxMax > 0 ? maxMax : sFallback.getMaxMessageSize();
-    }
-
-    public boolean getTransIdEnabled() {
-        return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ENABLED_TRANS_ID,
-                CarrierConfigValuesLoader.CONFIG_ENABLED_TRANS_ID_DEFAULT);
-    }
-
-    public String getEmailGateway() {
-        return mValues.getString(CarrierConfigValuesLoader.CONFIG_EMAIL_GATEWAY_NUMBER,
-                CarrierConfigValuesLoader.CONFIG_EMAIL_GATEWAY_NUMBER_DEFAULT);
-    }
-
-    public int getMaxImageHeight() {
-        return mValues.getInt(CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_HEIGHT,
-                CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_HEIGHT_DEFAULT);
-    }
-
-    public int getMaxImageWidth() {
-        return mValues.getInt(CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_WIDTH,
-                CarrierConfigValuesLoader.CONFIG_MAX_IMAGE_WIDTH_DEFAULT);
-    }
-
-    public int getRecipientLimit() {
-        final int limit = mValues.getInt(CarrierConfigValuesLoader.CONFIG_RECIPIENT_LIMIT,
-                CarrierConfigValuesLoader.CONFIG_RECIPIENT_LIMIT_DEFAULT);
-        return limit < 0 ? Integer.MAX_VALUE : limit;
-    }
-
-    public int getMaxTextLimit() {
-        final int max = mValues.getInt(CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_TEXT_SIZE,
-                CarrierConfigValuesLoader.CONFIG_MAX_MESSAGE_TEXT_SIZE_DEFAULT);
-        return max > -1 ? max : DEFAULT_MAX_TEXT_LENGTH;
-    }
-
-    public boolean getMultipartSmsEnabled() {
-        return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ENABLE_MULTIPART_SMS,
-                CarrierConfigValuesLoader.CONFIG_ENABLE_MULTIPART_SMS_DEFAULT);
-    }
-
-    public boolean getSendMultipartSmsAsSeparateMessages() {
-        return mValues.getBoolean(
-                CarrierConfigValuesLoader.CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES,
-                CarrierConfigValuesLoader.CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES_DEFAULT);
-    }
-
-    public boolean getSMSDeliveryReportsEnabled() {
-        return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ENABLE_SMS_DELIVERY_REPORTS,
-                CarrierConfigValuesLoader.CONFIG_ENABLE_SMS_DELIVERY_REPORTS_DEFAULT);
-    }
-
-    public boolean getNotifyWapMMSC() {
-        return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ENABLED_NOTIFY_WAP_MMSC,
-                CarrierConfigValuesLoader.CONFIG_ENABLED_NOTIFY_WAP_MMSC_DEFAULT);
-    }
-
-    public boolean isAliasEnabled() {
-        return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ALIAS_ENABLED,
-                CarrierConfigValuesLoader.CONFIG_ALIAS_ENABLED_DEFAULT);
-    }
-
-    public int getAliasMinChars() {
-        return mValues.getInt(CarrierConfigValuesLoader.CONFIG_ALIAS_MIN_CHARS,
-                CarrierConfigValuesLoader.CONFIG_ALIAS_MIN_CHARS_DEFAULT);
-    }
-
-    public int getAliasMaxChars() {
-        return mValues.getInt(CarrierConfigValuesLoader.CONFIG_ALIAS_MAX_CHARS,
-                CarrierConfigValuesLoader.CONFIG_ALIAS_MAX_CHARS_DEFAULT);
-    }
-
-    public boolean getAllowAttachAudio() {
-        return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ALLOW_ATTACH_AUDIO,
-                CarrierConfigValuesLoader.CONFIG_ALLOW_ATTACH_AUDIO_DEFAULT);
-    }
-
-    public int getMaxSubjectLength() {
-        return mValues.getInt(CarrierConfigValuesLoader.CONFIG_MAX_SUBJECT_LENGTH,
-                CarrierConfigValuesLoader.CONFIG_MAX_SUBJECT_LENGTH_DEFAULT);
-    }
-
-    public boolean getGroupMmsEnabled() {
-        return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_ENABLE_GROUP_MMS,
-                CarrierConfigValuesLoader.CONFIG_ENABLE_GROUP_MMS_DEFAULT);
-    }
-
-    public boolean getSupportMmsContentDisposition() {
-        return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION,
-                CarrierConfigValuesLoader.CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION_DEFAULT);
-    }
-
-    public boolean getShowCellBroadcast() {
-        return mValues.getBoolean(CarrierConfigValuesLoader.CONFIG_CELL_BROADCAST_APP_LINKS,
-                CarrierConfigValuesLoader.CONFIG_CELL_BROADCAST_APP_LINKS_DEFAULT);
-    }
-
-    public Object getValue(final String key) {
-        return mValues.get(key);
-    }
-
-    public Set<String> keySet() {
-        return mValues.keySet();
-    }
-
-    public static String getKeyType(final String key) {
-        return sKeyTypeMap.get(key);
-    }
-
-    public void update(final String type, final String key, final String value) {
-        BugleCarrierConfigValuesLoader.update(mValues, type, key, value);
-    }
-}
diff --git a/src/com/android/messaging/sms/MmsFailureException.java b/src/com/android/messaging/sms/MmsFailureException.java
deleted file mode 100644
index dd702ee..0000000
--- a/src/com/android/messaging/sms/MmsFailureException.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.util.Assert;
-
-/**
- * Exception for MMS failures
- */
-public class MmsFailureException extends Exception {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Hint of how we should retry in case of failure. Take values defined in MmsUtils.
-     */
-    public final int retryHint;
-
-    /**
-     * If set, provides a more detailed reason for the failure.
-     */
-    public final int rawStatus;
-
-    private void checkRetryHint() {
-        Assert.isTrue(retryHint == MmsUtils.MMS_REQUEST_AUTO_RETRY
-                || retryHint == MmsUtils.MMS_REQUEST_MANUAL_RETRY
-                || retryHint == MmsUtils.MMS_REQUEST_NO_RETRY);
-    }
-    /**
-     * Creates a new MmsFailureException.
-     *
-     * @param retryHint Hint for how to retry
-     */
-    public MmsFailureException(final int retryHint) {
-        super();
-        this.retryHint = retryHint;
-        checkRetryHint();
-        this.rawStatus = MessageData.RAW_TELEPHONY_STATUS_UNDEFINED;
-    }
-
-    public MmsFailureException(final int retryHint, final int rawStatus) {
-        super();
-        this.retryHint = retryHint;
-        checkRetryHint();
-        this.rawStatus = rawStatus;
-    }
-
-    /**
-     * Creates a new MmsFailureException with the specified detail message.
-     *
-     * @param retryHint Hint for how to retry
-     * @param message the detail message.
-     */
-    public MmsFailureException(final int retryHint, String message) {
-        super(message);
-        this.retryHint = retryHint;
-        checkRetryHint();
-        this.rawStatus = MessageData.RAW_TELEPHONY_STATUS_UNDEFINED;
-    }
-
-    /**
-     * Creates a new MmsFailureException with the specified cause.
-     *
-     * @param retryHint Hint for how to retry
-     * @param cause the cause.
-     */
-    public MmsFailureException(final int retryHint, Throwable cause) {
-        super(cause);
-        this.retryHint = retryHint;
-        checkRetryHint();
-        this.rawStatus = MessageData.RAW_TELEPHONY_STATUS_UNDEFINED;
-    }
-
-    /**
-     * Creates a new MmsFailureException
-     * with the specified detail message and cause.
-     *
-     * @param retryHint Hint for how to retry
-     * @param message the detail message.
-     * @param cause the cause.
-     */
-    public MmsFailureException(final int retryHint, String message, Throwable cause) {
-        super(message, cause);
-        this.retryHint = retryHint;
-        checkRetryHint();
-        this.rawStatus = MessageData.RAW_TELEPHONY_STATUS_UNDEFINED;
-    }
-}
diff --git a/src/com/android/messaging/sms/MmsSender.java b/src/com/android/messaging/sms/MmsSender.java
deleted file mode 100644
index b881a7f..0000000
--- a/src/com/android/messaging/sms/MmsSender.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.app.Activity;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.appcompat.mms.MmsManager;
-import android.telephony.SmsManager;
-
-import com.android.messaging.datamodel.MmsFileProvider;
-import com.android.messaging.datamodel.action.SendMessageAction;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-import com.android.messaging.mmslib.pdu.AcknowledgeInd;
-import com.android.messaging.mmslib.pdu.EncodedStringValue;
-import com.android.messaging.mmslib.pdu.GenericPdu;
-import com.android.messaging.mmslib.pdu.NotifyRespInd;
-import com.android.messaging.mmslib.pdu.PduComposer;
-import com.android.messaging.mmslib.pdu.PduHeaders;
-import com.android.messaging.mmslib.pdu.PduParser;
-import com.android.messaging.mmslib.pdu.RetrieveConf;
-import com.android.messaging.mmslib.pdu.SendConf;
-import com.android.messaging.mmslib.pdu.SendReq;
-import com.android.messaging.receiver.SendStatusReceiver;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-/**
- * Class that sends chat message via MMS.
- *
- * The interface emulates a blocking send similar to making an HTTP request.
- */
-public class MmsSender {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    /**
-     * Send an MMS message.
-     *
-     * @param context Context
-     * @param messageUri The unique URI of the message for identifying it during sending
-     * @param sendReq The SendReq PDU of the message
-     * @throws MmsFailureException
-     */
-    public static void sendMms(final Context context, final int subId, final Uri messageUri,
-            final SendReq sendReq, final Bundle sentIntentExras) throws MmsFailureException {
-        sendMms(context,
-                subId,
-                messageUri,
-                null /* locationUrl */,
-                sendReq,
-                true /* responseImportant */,
-                sentIntentExras);
-    }
-
-    /**
-     * Send NotifyRespInd (response to mms auto download).
-     *
-     * @param context Context
-     * @param subId subscription to use to send the response
-     * @param transactionId The transaction id of the MMS message
-     * @param contentLocation The url of the MMS message
-     * @param status The status to send with the NotifyRespInd
-     * @throws MmsFailureException
-     * @throws InvalidHeaderValueException
-     */
-    public static void sendNotifyResponseForMmsDownload(final Context context, final int subId,
-            final byte[] transactionId, final String contentLocation, final int status)
-            throws MmsFailureException, InvalidHeaderValueException {
-        // Create the M-NotifyResp.ind
-        final NotifyRespInd notifyRespInd = new NotifyRespInd(
-                PduHeaders.CURRENT_MMS_VERSION, transactionId, status);
-        final Uri messageUri = Uri.parse(contentLocation);
-        // Pack M-NotifyResp.ind and send it
-        sendMms(context,
-                subId,
-                messageUri,
-                MmsConfig.get(subId).getNotifyWapMMSC() ? contentLocation : null,
-                notifyRespInd,
-                false /* responseImportant */,
-                null /* sentIntentExtras */);
-    }
-
-    /**
-     * Send AcknowledgeInd (response to mms manual download). Ignore failures.
-     *
-     * @param context Context
-     * @param subId The SIM's subId we are currently using
-     * @param transactionId The transaction id of the MMS message
-     * @param contentLocation The url of the MMS message
-     * @throws MmsFailureException
-     * @throws InvalidHeaderValueException
-     */
-    public static void sendAcknowledgeForMmsDownload(final Context context, final int subId,
-            final byte[] transactionId, final String contentLocation)
-            throws MmsFailureException, InvalidHeaderValueException {
-        final String selfNumber = PhoneUtils.get(subId).getCanonicalForSelf(true/*allowOverride*/);
-        // Create the M-Acknowledge.ind
-        final AcknowledgeInd acknowledgeInd = new AcknowledgeInd(PduHeaders.CURRENT_MMS_VERSION,
-                transactionId);
-        acknowledgeInd.setFrom(new EncodedStringValue(selfNumber));
-        final Uri messageUri = Uri.parse(contentLocation);
-        // Sending
-        sendMms(context,
-                subId,
-                messageUri,
-                MmsConfig.get(subId).getNotifyWapMMSC() ? contentLocation : null,
-                acknowledgeInd,
-                false /*responseImportant*/,
-                null /* sentIntentExtras */);
-    }
-
-    /**
-     * Send a generic PDU.
-     *
-     * @param context Context
-     * @param messageUri The unique URI of the message for identifying it during sending
-     * @param locationUrl The optional URL to send to
-     * @param pdu The PDU to send
-     * @param responseImportant If the sending response is important. Responses to the
-     * Sending of AcknowledgeInd and NotifyRespInd are not important.
-     * @throws MmsFailureException
-     */
-    private static void sendMms(final Context context, final int subId, final Uri messageUri,
-            final String locationUrl, final GenericPdu pdu, final boolean responseImportant,
-            final Bundle sentIntentExtras) throws MmsFailureException {
-        // Write PDU to temporary file to send to platform
-        final Uri contentUri = writePduToTempFile(context, pdu, subId);
-
-        // Construct PendingIntent that will notify us when message sending is complete
-        final Intent sentIntent = new Intent(SendStatusReceiver.MMS_SENT_ACTION,
-                messageUri,
-                context,
-                SendStatusReceiver.class);
-        sentIntent.putExtra(SendMessageAction.EXTRA_CONTENT_URI, contentUri);
-        sentIntent.putExtra(SendMessageAction.EXTRA_RESPONSE_IMPORTANT, responseImportant);
-        if (sentIntentExtras != null) {
-            sentIntent.putExtras(sentIntentExtras);
-        }
-        final PendingIntent sentPendingIntent = PendingIntent.getBroadcast(
-                context,
-                0 /*request code*/,
-                sentIntent,
-                PendingIntent.FLAG_UPDATE_CURRENT);
-
-        // Send the message
-        MmsManager.sendMultimediaMessage(subId, context, contentUri, locationUrl,
-                sentPendingIntent);
-    }
-
-    private static Uri writePduToTempFile(final Context context, final GenericPdu pdu, int subId)
-            throws MmsFailureException {
-        final Uri contentUri = MmsFileProvider.buildRawMmsUri();
-        final File tempFile = MmsFileProvider.getFile(contentUri);
-        FileOutputStream writer = null;
-        try {
-            // Ensure rawmms directory exists
-            tempFile.getParentFile().mkdirs();
-            writer = new FileOutputStream(tempFile);
-            final byte[] pduBytes = new PduComposer(context, pdu).make();
-            if (pduBytes == null) {
-                throw new MmsFailureException(
-                        MmsUtils.MMS_REQUEST_NO_RETRY, "Failed to compose PDU");
-            }
-            if (pduBytes.length > MmsConfig.get(subId).getMaxMessageSize()) {
-                throw new MmsFailureException(
-                        MmsUtils.MMS_REQUEST_NO_RETRY,
-                        MessageData.RAW_TELEPHONY_STATUS_MESSAGE_TOO_BIG);
-            }
-            writer.write(pduBytes);
-        } catch (final IOException e) {
-            if (tempFile != null) {
-                tempFile.delete();
-            }
-            LogUtil.e(TAG, "Cannot create temporary file " + tempFile.getAbsolutePath(), e);
-            throw new MmsFailureException(
-                    MmsUtils.MMS_REQUEST_AUTO_RETRY, "Cannot create raw mms file");
-        } catch (final OutOfMemoryError e) {
-            if (tempFile != null) {
-                tempFile.delete();
-            }
-            LogUtil.e(TAG, "Out of memory in composing PDU", e);
-            throw new MmsFailureException(
-                    MmsUtils.MMS_REQUEST_MANUAL_RETRY,
-                    MessageData.RAW_TELEPHONY_STATUS_MESSAGE_TOO_BIG);
-        } finally {
-            if (writer != null) {
-                try {
-                    writer.close();
-                } catch (final IOException e) {
-                    // no action we can take here
-                }
-            }
-        }
-        return contentUri;
-    }
-
-    public static SendConf parseSendConf(byte[] response, int subId) {
-        if (response != null) {
-            final GenericPdu respPdu = new PduParser(
-                    response, MmsConfig.get(subId).getSupportMmsContentDisposition()).parse();
-            if (respPdu != null) {
-                if (respPdu instanceof SendConf) {
-                    return (SendConf) respPdu;
-                } else {
-                    LogUtil.e(TAG, "MmsSender: send response not SendConf");
-                }
-            } else {
-                // Invalid PDU
-                LogUtil.e(TAG, "MmsSender: send invalid response");
-            }
-        }
-        // Empty or invalid response
-        return null;
-    }
-
-    /**
-     * Download an MMS message.
-     *
-     * @param context Context
-     * @param contentLocation The url of the MMS message
-     * @throws MmsFailureException
-     * @throws InvalidHeaderValueException
-     */
-    public static void downloadMms(final Context context, final int subId,
-            final String contentLocation, Bundle extras) throws MmsFailureException,
-            InvalidHeaderValueException {
-        final Uri requestUri = Uri.parse(contentLocation);
-        final Uri contentUri = MmsFileProvider.buildRawMmsUri();
-
-        final Intent downloadedIntent = new Intent(SendStatusReceiver.MMS_DOWNLOADED_ACTION,
-                requestUri,
-                context,
-                SendStatusReceiver.class);
-        downloadedIntent.putExtra(SendMessageAction.EXTRA_CONTENT_URI, contentUri);
-        if (extras != null) {
-            downloadedIntent.putExtras(extras);
-        }
-        final PendingIntent downloadedPendingIntent = PendingIntent.getBroadcast(
-                context,
-                0 /*request code*/,
-                downloadedIntent,
-                PendingIntent.FLAG_UPDATE_CURRENT);
-
-        MmsManager.downloadMultimediaMessage(subId, context, contentLocation, contentUri,
-                downloadedPendingIntent);
-    }
-
-    public static RetrieveConf parseRetrieveConf(byte[] data, int subId) {
-        if (data != null) {
-            final GenericPdu pdu = new PduParser(
-                    data, MmsConfig.get(subId).getSupportMmsContentDisposition()).parse();
-            if (pdu != null) {
-                if (pdu instanceof RetrieveConf) {
-                    return (RetrieveConf) pdu;
-                } else {
-                    LogUtil.e(TAG, "MmsSender: downloaded pdu not RetrieveConf: "
-                            + pdu.getClass().getName());
-                }
-            } else {
-                LogUtil.e(TAG, "MmsSender: downloaded pdu could not be parsed (invalid)");
-            }
-        }
-        LogUtil.e(TAG, "MmsSender: downloaded pdu is empty");
-        return null;
-    }
-
-    // Process different result code from platform MMS service
-    public static int getErrorResultStatus(int resultCode, int httpStatusCode) {
-        Assert.isFalse(resultCode == Activity.RESULT_OK);
-        switch (resultCode) {
-            case SmsManager.MMS_ERROR_UNABLE_CONNECT_MMS:
-            case SmsManager.MMS_ERROR_IO_ERROR:
-                return MmsUtils.MMS_REQUEST_AUTO_RETRY;
-            case SmsManager.MMS_ERROR_INVALID_APN:
-            case SmsManager.MMS_ERROR_CONFIGURATION_ERROR:
-            case SmsManager.MMS_ERROR_NO_DATA_NETWORK:
-            case SmsManager.MMS_ERROR_UNSPECIFIED:
-                return MmsUtils.MMS_REQUEST_MANUAL_RETRY;
-            case SmsManager.MMS_ERROR_HTTP_FAILURE:
-                if (httpStatusCode == 404) {
-                    return MmsUtils.MMS_REQUEST_NO_RETRY;
-                } else {
-                    return MmsUtils.MMS_REQUEST_AUTO_RETRY;
-                }
-            default:
-                return MmsUtils.MMS_REQUEST_MANUAL_RETRY;
-        }
-    }
-}
diff --git a/src/com/android/messaging/sms/MmsSmsUtils.java b/src/com/android/messaging/sms/MmsSmsUtils.java
deleted file mode 100644
index 7719359..0000000
--- a/src/com/android/messaging/sms/MmsSmsUtils.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.BaseColumns;
-import android.text.TextUtils;
-import android.util.Patterns;
-
-import com.android.messaging.mmslib.SqliteWrapper;
-import com.android.messaging.util.LogUtil;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Utility functions for the Messaging Service
- */
-public class MmsSmsUtils {
-    private MmsSmsUtils() {
-        // Forbidden being instantiated.
-    }
-
-    // An alias (or commonly called "nickname") is:
-    // Nickname must begin with a letter.
-    // Only letters a-z, numbers 0-9, or . are allowed in Nickname field.
-    public static boolean isAlias(final String string, final int subId) {
-        if (!MmsConfig.get(subId).isAliasEnabled()) {
-            return false;
-        }
-
-        final int len = string == null ? 0 : string.length();
-
-        if (len < MmsConfig.get(subId).getAliasMinChars() ||
-                len > MmsConfig.get(subId).getAliasMaxChars()) {
-            return false;
-        }
-
-        if (!Character.isLetter(string.charAt(0))) {    // Nickname begins with a letter
-            return false;
-        }
-        for (int i = 1; i < len; i++) {
-            final char c = string.charAt(i);
-            if (!(Character.isLetterOrDigit(c) || c == '.')) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * mailbox         =       name-addr
-     * name-addr       =       [display-name] angle-addr
-     * angle-addr      =       [CFWS] "<" addr-spec ">" [CFWS]
-     */
-    public static final Pattern NAME_ADDR_EMAIL_PATTERN =
-            Pattern.compile("\\s*(\"[^\"]*\"|[^<>\"]+)\\s*<([^<>]+)>\\s*");
-
-    public static String extractAddrSpec(final String address) {
-        final Matcher match = NAME_ADDR_EMAIL_PATTERN.matcher(address);
-
-        if (match.matches()) {
-            return match.group(2);
-        }
-        return address;
-    }
-
-    /**
-     * Returns true if the address is an email address
-     *
-     * @param address the input address to be tested
-     * @return true if address is an email address
-     */
-    public static boolean isEmailAddress(final String address) {
-        if (TextUtils.isEmpty(address)) {
-            return false;
-        }
-
-        final String s = extractAddrSpec(address);
-        final Matcher match = Patterns.EMAIL_ADDRESS.matcher(s);
-        return match.matches();
-    }
-
-    /**
-     * This pattern is intended for searching for carrier specific phone numbers starting with star
-     * sign and digits such as the voice mail number.
-     * (e.g. *20 Chile Claro)
-     */
-    private static final Pattern PHONE_NUMBER_STARTING_WITH_STAR_PATTERN =
-            Pattern.compile("\\*[0-9]+");
-
-    /**
-     * Returns true if the number is a Phone number
-     *
-     * @param number the input number to be tested
-     * @return true if number is a Phone number
-     */
-    public static boolean isPhoneNumber(final String number) {
-        if (TextUtils.isEmpty(number)) {
-            return false;
-        }
-
-        Matcher match = Patterns.PHONE.matcher(number);
-        if (!match.matches()) {
-            match = PHONE_NUMBER_STARTING_WITH_STAR_PATTERN.matcher(number);
-            return match.matches();
-        }
-        return true;
-    }
-
-    /**
-     * Check if MMS is required when sending to email address
-     *
-     * @param destinationHasEmailAddress destination includes an email address
-     * @return true if MMS is required.
-     */
-    public static boolean getRequireMmsForEmailAddress(final boolean destinationHasEmailAddress,
-            final int subId) {
-        if (!TextUtils.isEmpty(MmsConfig.get(subId).getEmailGateway())) {
-            return false;
-        } else {
-            return destinationHasEmailAddress;
-        }
-    }
-
-    /**
-     * Helper functions for the "threads" table used by MMS and SMS.
-     */
-    public static final class Threads implements android.provider.Telephony.ThreadsColumns {
-        private static final String[] ID_PROJECTION = { BaseColumns._ID };
-        private static final Uri THREAD_ID_CONTENT_URI = Uri.parse(
-                "content://mms-sms/threadID");
-        public static final Uri CONTENT_URI = Uri.withAppendedPath(
-                android.provider.Telephony.MmsSms.CONTENT_URI, "conversations");
-
-        // No one should construct an instance of this class.
-        private Threads() {
-        }
-
-        /**
-         * This is a single-recipient version of
-         * getOrCreateThreadId.  It's convenient for use with SMS
-         * messages.
-         */
-        public static long getOrCreateThreadId(final Context context, final String recipient) {
-            final Set<String> recipients = new HashSet<String>();
-
-            recipients.add(recipient);
-            return getOrCreateThreadId(context, recipients);
-        }
-
-        /**
-         * Given the recipients list and subject of an unsaved message,
-         * return its thread ID.  If the message starts a new thread,
-         * allocate a new thread ID.  Otherwise, use the appropriate
-         * existing thread ID.
-         *
-         * Find the thread ID of the same set of recipients (in
-         * any order, without any additions). If one
-         * is found, return it.  Otherwise, return a unique thread ID.
-         */
-        public static long getOrCreateThreadId(
-                final Context context, final Set<String> recipients) {
-            final Uri.Builder uriBuilder = THREAD_ID_CONTENT_URI.buildUpon();
-
-            for (String recipient : recipients) {
-                if (isEmailAddress(recipient)) {
-                    recipient = extractAddrSpec(recipient);
-                }
-
-                uriBuilder.appendQueryParameter("recipient", recipient);
-            }
-
-            final Uri uri = uriBuilder.build();
-            //if (DEBUG) Rlog.v(TAG, "getOrCreateThreadId uri: " + uri);
-
-            final Cursor cursor = SqliteWrapper.query(context, context.getContentResolver(),
-                    uri, ID_PROJECTION, null, null, null);
-            if (cursor != null) {
-                try {
-                    if (cursor.moveToFirst()) {
-                        return cursor.getLong(0);
-                    } else {
-                        LogUtil.e(LogUtil.BUGLE_DATAMODEL_TAG,
-                                "getOrCreateThreadId returned no rows!");
-                    }
-                } finally {
-                    cursor.close();
-                }
-            }
-
-            LogUtil.e(LogUtil.BUGLE_DATAMODEL_TAG, "getOrCreateThreadId failed with "
-                    + LogUtil.sanitizePII(recipients.toString()));
-            throw new IllegalArgumentException("Unable to find or allocate a thread ID.");
-        }
-    }
-}
diff --git a/src/com/android/messaging/sms/MmsUtils.java b/src/com/android/messaging/sms/MmsUtils.java
deleted file mode 100644
index 32f0616..0000000
--- a/src/com/android/messaging/sms/MmsUtils.java
+++ /dev/null
@@ -1,2657 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.AssetFileDescriptor;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteException;
-import android.media.MediaMetadataRetriever;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.Settings;
-import android.provider.Telephony;
-import android.provider.Telephony.Mms;
-import android.provider.Telephony.Sms;
-import android.provider.Telephony.Threads;
-import android.telephony.SmsManager;
-import android.telephony.SmsMessage;
-import android.text.TextUtils;
-import android.text.util.Rfc822Token;
-import android.text.util.Rfc822Tokenizer;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.datamodel.action.DownloadMmsAction;
-import com.android.messaging.datamodel.action.SendMessageAction;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.mmslib.InvalidHeaderValueException;
-import com.android.messaging.mmslib.MmsException;
-import com.android.messaging.mmslib.SqliteWrapper;
-import com.android.messaging.mmslib.pdu.CharacterSets;
-import com.android.messaging.mmslib.pdu.EncodedStringValue;
-import com.android.messaging.mmslib.pdu.GenericPdu;
-import com.android.messaging.mmslib.pdu.NotificationInd;
-import com.android.messaging.mmslib.pdu.PduBody;
-import com.android.messaging.mmslib.pdu.PduComposer;
-import com.android.messaging.mmslib.pdu.PduHeaders;
-import com.android.messaging.mmslib.pdu.PduParser;
-import com.android.messaging.mmslib.pdu.PduPart;
-import com.android.messaging.mmslib.pdu.PduPersister;
-import com.android.messaging.mmslib.pdu.RetrieveConf;
-import com.android.messaging.mmslib.pdu.SendConf;
-import com.android.messaging.mmslib.pdu.SendReq;
-import com.android.messaging.sms.SmsSender.SendResult;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.EmailAddress;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.ImageUtils.ImageResizer;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.MediaMetadataRetrieverWrapper;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.google.common.base.Joiner;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-import java.util.UUID;
-
-/**
- * Utils for sending sms/mms messages.
- */
-public class MmsUtils {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    public static final boolean DEFAULT_DELIVERY_REPORT_MODE  = false;
-    public static final boolean DEFAULT_READ_REPORT_MODE = false;
-    public static final long DEFAULT_EXPIRY_TIME_IN_SECONDS = 7 * 24 * 60 * 60;
-    public static final int DEFAULT_PRIORITY = PduHeaders.PRIORITY_NORMAL;
-
-    public static final int MAX_SMS_RETRY = 3;
-
-    /**
-     * MMS request succeeded
-     */
-    public static final int MMS_REQUEST_SUCCEEDED = 0;
-    /**
-     * MMS request failed with a transient error and can be retried automatically
-     */
-    public static final int MMS_REQUEST_AUTO_RETRY = 1;
-    /**
-     * MMS request failed with an error and can be retried manually
-     */
-    public static final int MMS_REQUEST_MANUAL_RETRY = 2;
-    /**
-     * MMS request failed with a specific error and should not be retried
-     */
-    public static final int MMS_REQUEST_NO_RETRY = 3;
-
-    public static final String getRequestStatusDescription(final int status) {
-        switch (status) {
-            case MMS_REQUEST_SUCCEEDED:
-                return "SUCCEEDED";
-            case MMS_REQUEST_AUTO_RETRY:
-                return "AUTO_RETRY";
-            case MMS_REQUEST_MANUAL_RETRY:
-                return "MANUAL_RETRY";
-            case MMS_REQUEST_NO_RETRY:
-                return "NO_RETRY";
-            default:
-                return String.valueOf(status) + " (check MmsUtils)";
-        }
-    }
-
-    public static final int PDU_HEADER_VALUE_UNDEFINED = 0;
-
-    private static final int DEFAULT_DURATION = 5000; //ms
-
-    // amount of space to leave in a MMS for text and overhead.
-    private static final int MMS_MAX_SIZE_SLOP = 1024;
-    public static final long INVALID_TIMESTAMP = 0L;
-    private static String[] sNoSubjectStrings;
-
-    public static class MmsInfo {
-        public Uri mUri;
-        public int mMessageSize;
-        public PduBody mPduBody;
-    }
-
-    // Sync all remote messages apart from drafts
-    private static final String REMOTE_SMS_SELECTION = String.format(
-            Locale.US,
-            "(%s IN (%d, %d, %d, %d, %d))",
-            Sms.TYPE,
-            Sms.MESSAGE_TYPE_INBOX,
-            Sms.MESSAGE_TYPE_OUTBOX,
-            Sms.MESSAGE_TYPE_QUEUED,
-            Sms.MESSAGE_TYPE_FAILED,
-            Sms.MESSAGE_TYPE_SENT);
-
-    private static final String REMOTE_MMS_SELECTION = String.format(
-            Locale.US,
-            "((%s IN (%d, %d, %d, %d)) AND (%s IN (%d, %d, %d)))",
-            Mms.MESSAGE_BOX,
-            Mms.MESSAGE_BOX_INBOX,
-            Mms.MESSAGE_BOX_OUTBOX,
-            Mms.MESSAGE_BOX_SENT,
-            Mms.MESSAGE_BOX_FAILED,
-            Mms.MESSAGE_TYPE,
-            PduHeaders.MESSAGE_TYPE_SEND_REQ,
-            PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND,
-            PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF);
-
-    /**
-     * Type selection for importing sms messages.
-     *
-     * @return The SQL selection for importing sms messages
-     */
-    public static String getSmsTypeSelectionSql() {
-        return REMOTE_SMS_SELECTION;
-    }
-
-    /**
-     * Type selection for importing mms messages.
-     *
-     * @return The SQL selection for importing mms messages. This selects the message type,
-     * not including the selection on timestamp.
-     */
-    public static String getMmsTypeSelectionSql() {
-        return REMOTE_MMS_SELECTION;
-    }
-
-    // SMIL spec: http://www.w3.org/TR/SMIL3
-
-    private static final String sSmilImagePart =
-            "<par dur=\"" + DEFAULT_DURATION + "ms\">" +
-                "<img src=\"%s\" region=\"Image\" />" +
-            "</par>";
-
-    private static final String sSmilVideoPart =
-            "<par dur=\"%2$dms\">" +
-                "<video src=\"%1$s\" dur=\"%2$dms\" region=\"Image\" />" +
-            "</par>";
-
-    private static final String sSmilAudioPart =
-            "<par dur=\"%2$dms\">" +
-                    "<audio src=\"%1$s\" dur=\"%2$dms\" />" +
-            "</par>";
-
-    private static final String sSmilTextPart =
-            "<par dur=\"" + DEFAULT_DURATION + "ms\">" +
-                "<text src=\"%s\" region=\"Text\" />" +
-            "</par>";
-
-    private static final String sSmilPart =
-            "<par dur=\"" + DEFAULT_DURATION + "ms\">" +
-                "<ref src=\"%s\" />" +
-            "</par>";
-
-    private static final String sSmilTextOnly =
-            "<smil>" +
-                "<head>" +
-                    "<layout>" +
-                        "<root-layout/>" +
-                        "<region id=\"Text\" top=\"0\" left=\"0\" "
-                          + "height=\"100%%\" width=\"100%%\"/>" +
-                    "</layout>" +
-                "</head>" +
-                "<body>" +
-                       "%s" +  // constructed body goes here
-                "</body>" +
-            "</smil>";
-
-    private static final String sSmilVisualAttachmentsOnly =
-            "<smil>" +
-                "<head>" +
-                    "<layout>" +
-                        "<root-layout/>" +
-                        "<region id=\"Image\" fit=\"meet\" top=\"0\" left=\"0\" "
-                          + "height=\"100%%\" width=\"100%%\"/>" +
-                    "</layout>" +
-                "</head>" +
-                "<body>" +
-                       "%s" +  // constructed body goes here
-                "</body>" +
-            "</smil>";
-
-    private static final String sSmilVisualAttachmentsWithText =
-            "<smil>" +
-                "<head>" +
-                    "<layout>" +
-                        "<root-layout/>" +
-                        "<region id=\"Image\" fit=\"meet\" top=\"0\" left=\"0\" "
-                          + "height=\"80%%\" width=\"100%%\"/>" +
-                        "<region id=\"Text\" top=\"80%%\" left=\"0\" height=\"20%%\" "
-                          + "width=\"100%%\"/>" +
-                    "</layout>" +
-                "</head>" +
-                "<body>" +
-                       "%s" +  // constructed body goes here
-                "</body>" +
-            "</smil>";
-
-    private static final String sSmilNonVisualAttachmentsOnly =
-            "<smil>" +
-                "<head>" +
-                    "<layout>" +
-                        "<root-layout/>" +
-                    "</layout>" +
-                "</head>" +
-                "<body>" +
-                       "%s" +  // constructed body goes here
-                "</body>" +
-            "</smil>";
-
-    private static final String sSmilNonVisualAttachmentsWithText = sSmilTextOnly;
-
-    public static final String MMS_DUMP_PREFIX = "mmsdump-";
-    public static final String SMS_DUMP_PREFIX = "smsdump-";
-
-    public static final int MIN_VIDEO_BYTES_PER_SECOND = 4 * 1024;
-    public static final int MIN_IMAGE_BYTE_SIZE = 16 * 1024;
-    public static final int MAX_VIDEO_ATTACHMENT_COUNT = 1;
-
-    public static MmsInfo makePduBody(final Context context, final MessageData message,
-            final int subId) {
-        final PduBody pb = new PduBody();
-
-        // Compute data size requirements for this message: count up images and total size of
-        // non-image attachments.
-        int totalLength = 0;
-        int countImage = 0;
-        for (final MessagePartData part : message.getParts()) {
-            if (part.isAttachment()) {
-                final String contentType = part.getContentType();
-                if (ContentType.isImageType(contentType)) {
-                    countImage++;
-                } else if (ContentType.isVCardType(contentType)) {
-                    totalLength += getDataLength(context, part.getContentUri());
-                } else {
-                    totalLength += getMediaFileSize(part.getContentUri());
-                }
-            }
-        }
-        final long minSize = countImage * MIN_IMAGE_BYTE_SIZE;
-        final int byteBudget = MmsConfig.get(subId).getMaxMessageSize() - totalLength
-                - MMS_MAX_SIZE_SLOP;
-        final double budgetFactor =
-                minSize > 0 ? Math.max(1.0, byteBudget / ((double) minSize)) : 1;
-        final int bytesPerImage = (int) (budgetFactor * MIN_IMAGE_BYTE_SIZE);
-        final int widthLimit = MmsConfig.get(subId).getMaxImageWidth();
-        final int heightLimit = MmsConfig.get(subId).getMaxImageHeight();
-
-        // Actually add the attachments, shrinking images appropriately.
-        int index = 0;
-        totalLength = 0;
-        boolean hasVisualAttachment = false;
-        boolean hasNonVisualAttachment = false;
-        boolean hasText = false;
-        final StringBuilder smilBody = new StringBuilder();
-        for (final MessagePartData part : message.getParts()) {
-            String srcName;
-            if (part.isAttachment()) {
-                String contentType = part.getContentType();
-                final String extension = ContentType.getExtensionFromMimeType(contentType);
-                if (ContentType.isImageType(contentType)) {
-                    if (extension != null) {
-                        srcName = String.format("image%06d.%s", index, extension);
-                    } else {
-                        // There's a good chance that if we selected the image from our media picker
-                        // the content type is image/*. Fix the content type here for gifs so that
-                        // we only need to open the input stream once. All other gif vs static image
-                        // checks will only have to do a string comparison which is much cheaper.
-                        final boolean isGif = ImageUtils.isGif(contentType, part.getContentUri());
-                        contentType = isGif ? ContentType.IMAGE_GIF : contentType;
-                        srcName = String.format(isGif ? "image%06d.gif" : "image%06d.jpg", index);
-                    }
-                    smilBody.append(String.format(sSmilImagePart, srcName));
-                    totalLength += addPicturePart(context, pb, index, part,
-                            widthLimit, heightLimit, bytesPerImage, srcName, contentType);
-                    hasVisualAttachment = true;
-                } else if (ContentType.isVideoType(contentType)) {
-                    srcName = String.format("video%06d.%s", index,
-                            extension != null ? extension : "mp4");
-                    final int length = addVideoPart(context, pb, part, srcName);
-                    totalLength += length;
-                    smilBody.append(String.format(sSmilVideoPart, srcName,
-                            getMediaDurationMs(context, part, DEFAULT_DURATION)));
-                    hasVisualAttachment = true;
-                } else if (ContentType.isVCardType(contentType)) {
-                    srcName = String.format("contact%06d.vcf", index);
-                    totalLength += addVCardPart(context, pb, part, srcName);
-                    smilBody.append(String.format(sSmilPart, srcName));
-                    hasNonVisualAttachment = true;
-                } else if (ContentType.isAudioType(contentType)) {
-                    srcName = String.format("recording%06d.%s",
-                            index, extension != null ? extension : "amr");
-                    totalLength += addOtherPart(context, pb, part, srcName);
-                    final int duration = getMediaDurationMs(context, part, -1);
-                    Assert.isTrue(duration != -1);
-                    smilBody.append(String.format(sSmilAudioPart, srcName, duration));
-                    hasNonVisualAttachment = true;
-                } else {
-                    srcName = String.format("other%06d.dat", index);
-                    totalLength += addOtherPart(context, pb, part, srcName);
-                    smilBody.append(String.format(sSmilPart, srcName));
-                }
-                index++;
-            }
-            if (!TextUtils.isEmpty(part.getText())) {
-                hasText = true;
-            }
-        }
-
-        if (hasText) {
-            final String srcName = String.format("text.%06d.txt", index);
-            final String text = message.getMessageText();
-            totalLength += addTextPart(context, pb, text, srcName);
-
-            // Append appropriate SMIL to the body.
-            smilBody.append(String.format(sSmilTextPart, srcName));
-        }
-
-        final String smilTemplate = getSmilTemplate(hasVisualAttachment,
-                hasNonVisualAttachment, hasText);
-        addSmilPart(pb, smilTemplate, smilBody.toString());
-
-        final MmsInfo mmsInfo = new MmsInfo();
-        mmsInfo.mPduBody = pb;
-        mmsInfo.mMessageSize = totalLength;
-
-        return mmsInfo;
-    }
-
-    private static int getMediaDurationMs(final Context context, final MessagePartData part,
-            final int defaultDurationMs) {
-        Assert.notNull(context);
-        Assert.notNull(part);
-        Assert.isTrue(ContentType.isAudioType(part.getContentType()) ||
-                ContentType.isVideoType(part.getContentType()));
-
-        final MediaMetadataRetrieverWrapper retriever = new MediaMetadataRetrieverWrapper();
-        try {
-            retriever.setDataSource(part.getContentUri());
-            return retriever.extractInteger(
-                    MediaMetadataRetriever.METADATA_KEY_DURATION, defaultDurationMs);
-        } catch (final IOException e) {
-            LogUtil.i(LogUtil.BUGLE_TAG, "Error extracting duration from " + part.getContentUri(), e);
-            return defaultDurationMs;
-        } finally {
-            retriever.release();
-        }
-    }
-
-    private static void setPartContentLocationAndId(final PduPart part, final String srcName) {
-        // Set Content-Location.
-        part.setContentLocation(srcName.getBytes());
-
-        // Set Content-Id.
-        final int index = srcName.lastIndexOf(".");
-        final String contentId = (index == -1) ? srcName : srcName.substring(0, index);
-        part.setContentId(contentId.getBytes());
-    }
-
-    private static int addTextPart(final Context context, final PduBody pb,
-            final String text, final String srcName) {
-        final PduPart part = new PduPart();
-
-        // Set Charset if it's a text media.
-        part.setCharset(CharacterSets.UTF_8);
-
-        // Set Content-Type.
-        part.setContentType(ContentType.TEXT_PLAIN.getBytes());
-
-        // Set Content-Location.
-        setPartContentLocationAndId(part, srcName);
-
-        part.setData(text.getBytes());
-
-        pb.addPart(part);
-
-        return part.getData().length;
-    }
-
-    private static int addPicturePart(final Context context, final PduBody pb, final int index,
-            final MessagePartData messagePart, int widthLimit, int heightLimit,
-            final int maxPartSize, final String srcName, final String contentType) {
-        final Uri imageUri = messagePart.getContentUri();
-        final int width = messagePart.getWidth();
-        final int height = messagePart.getHeight();
-
-        // Swap the width and height limits to match the orientation of the image so we scale the
-        // picture as little as possible.
-        if ((height > width) != (heightLimit > widthLimit)) {
-            final int temp = widthLimit;
-            widthLimit = heightLimit;
-            heightLimit = temp;
-        }
-
-        final int orientation = ImageUtils.getOrientation(context, imageUri);
-        int imageSize = getDataLength(context, imageUri);
-        if (imageSize <= 0) {
-            LogUtil.e(TAG, "Can't get image", new Exception());
-            return 0;
-        }
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "addPicturePart size: " + imageSize + " width: "
-                    + width + " widthLimit: " + widthLimit
-                    + " height: " + height
-                    + " heightLimit: " + heightLimit);
-        }
-
-        PduPart part;
-        // Check if we're already within the limits - in which case we don't need to resize.
-        // The size can be zero here, even when the media has content. See the comment in
-        // MediaModel.initMediaSize. Sometimes it'll compute zero and it's costly to read the
-        // whole stream to compute the size. When we call getResizedImageAsPart(), we'll correctly
-        // set the size.
-        if (imageSize <= maxPartSize &&
-                width <= widthLimit &&
-                height <= heightLimit &&
-                (orientation == android.media.ExifInterface.ORIENTATION_UNDEFINED ||
-                orientation == android.media.ExifInterface.ORIENTATION_NORMAL)) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "addPicturePart - already sized");
-            }
-            part = new PduPart();
-            part.setDataUri(imageUri);
-            part.setContentType(contentType.getBytes());
-        } else {
-            part = getResizedImageAsPart(widthLimit, heightLimit, maxPartSize,
-                    width, height, orientation, imageUri, context, contentType);
-            if (part == null) {
-                final OutOfMemoryError e = new OutOfMemoryError();
-                LogUtil.e(TAG, "Can't resize image: not enough memory?", e);
-                throw e;
-            }
-            imageSize = part.getData().length;
-        }
-
-        setPartContentLocationAndId(part, srcName);
-
-        pb.addPart(index, part);
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "addPicturePart size: " + imageSize);
-        }
-
-        return imageSize;
-    }
-
-    private static void addPartForUri(final Context context, final PduBody pb,
-            final String srcName, final Uri uri, final String contentType) {
-        final PduPart part = new PduPart();
-        part.setDataUri(uri);
-        part.setContentType(contentType.getBytes());
-
-        setPartContentLocationAndId(part, srcName);
-
-        pb.addPart(part);
-    }
-
-    private static int addVCardPart(final Context context, final PduBody pb,
-            final MessagePartData messagePart, final String srcName) {
-        final Uri vcardUri = messagePart.getContentUri();
-        final String contentType = messagePart.getContentType();
-        final int vcardSize = getDataLength(context, vcardUri);
-        if (vcardSize <= 0) {
-            LogUtil.e(TAG, "Can't get vcard", new Exception());
-            return 0;
-        }
-
-        addPartForUri(context, pb, srcName, vcardUri, contentType);
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "addVCardPart size: " + vcardSize);
-        }
-
-        return vcardSize;
-    }
-
-    /**
-     * Add video part recompressing video if necessary.  If recompression fails, part is not
-     * added.
-     */
-    private static int addVideoPart(final Context context, final PduBody pb,
-            final MessagePartData messagePart, final String srcName) {
-        final Uri attachmentUri = messagePart.getContentUri();
-        String contentType = messagePart.getContentType();
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "addPart attachmentUrl: " + attachmentUri.toString());
-        }
-
-        if (TextUtils.isEmpty(contentType)) {
-            contentType = ContentType.VIDEO_3G2;
-        }
-
-        addPartForUri(context, pb, srcName, attachmentUri, contentType);
-        return (int) getMediaFileSize(attachmentUri);
-    }
-
-    private static int addOtherPart(final Context context, final PduBody pb,
-            final MessagePartData messagePart, final String srcName) {
-        final Uri attachmentUri = messagePart.getContentUri();
-        final String contentType = messagePart.getContentType();
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "addPart attachmentUrl: " + attachmentUri.toString());
-        }
-
-        final int dataSize = (int) getMediaFileSize(attachmentUri);
-
-        addPartForUri(context, pb, srcName, attachmentUri, contentType);
-
-        return dataSize;
-    }
-
-    private static void addSmilPart(final PduBody pb, final String smilTemplate,
-            final String smilBody) {
-        final PduPart smilPart = new PduPart();
-        smilPart.setContentId("smil".getBytes());
-        smilPart.setContentLocation("smil.xml".getBytes());
-        smilPart.setContentType(ContentType.APP_SMIL.getBytes());
-        final String smil = String.format(smilTemplate, smilBody);
-        smilPart.setData(smil.getBytes());
-        pb.addPart(0, smilPart);
-    }
-
-    private static String getSmilTemplate(final boolean hasVisualAttachments,
-            final boolean hasNonVisualAttachments, final boolean hasText) {
-        if (hasVisualAttachments) {
-            return hasText ? sSmilVisualAttachmentsWithText : sSmilVisualAttachmentsOnly;
-        }
-        if (hasNonVisualAttachments) {
-            return hasText ? sSmilNonVisualAttachmentsWithText : sSmilNonVisualAttachmentsOnly;
-        }
-        return sSmilTextOnly;
-    }
-
-    private static int getDataLength(final Context context, final Uri uri) {
-        InputStream is = null;
-        try {
-            is = context.getContentResolver().openInputStream(uri);
-            try {
-                return is == null ? 0 : is.available();
-            } catch (final IOException e) {
-                LogUtil.e(TAG, "getDataLength couldn't stream: " + uri, e);
-            }
-        } catch (final FileNotFoundException e) {
-            LogUtil.e(TAG, "getDataLength couldn't open: " + uri, e);
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (final IOException e) {
-                    LogUtil.e(TAG, "getDataLength couldn't close: " + uri, e);
-                }
-            }
-        }
-        return 0;
-    }
-
-    /**
-     * Returns {@code true} if group mms is turned on,
-     * {@code false} otherwise.
-     *
-     * For the group mms feature to be enabled, the following must be true:
-     *  1. the feature is enabled in mms_config.xml (currently on by default)
-     *  2. the feature is enabled in the SMS settings page
-     *
-     * @return true if group mms is supported
-     */
-    public static boolean groupMmsEnabled(final int subId) {
-        final Context context = Factory.get().getApplicationContext();
-        final Resources resources = context.getResources();
-        final BuglePrefs prefs = BuglePrefs.getSubscriptionPrefs(subId);
-        final String groupMmsKey = resources.getString(R.string.group_mms_pref_key);
-        final boolean groupMmsEnabledDefault = resources.getBoolean(R.bool.group_mms_pref_default);
-        final boolean groupMmsPrefOn = prefs.getBoolean(groupMmsKey, groupMmsEnabledDefault);
-        return MmsConfig.get(subId).getGroupMmsEnabled() && groupMmsPrefOn;
-    }
-
-    /**
-     * Get a version of this image resized to fit the given dimension and byte-size limits. Note
-     * that the content type of the resulting PduPart may not be the same as the content type of
-     * this UriImage; always call {@link PduPart#getContentType()} to get the new content type.
-     *
-     * @param widthLimit The width limit, in pixels
-     * @param heightLimit The height limit, in pixels
-     * @param byteLimit The binary size limit, in bytes
-     * @param width The image width, in pixels
-     * @param height The image height, in pixels
-     * @param orientation Orientation constant from ExifInterface for rotating or flipping the
-     *                    image
-     * @param imageUri Uri to the image data
-     * @param context Needed to open the image
-     * @return A new PduPart containing the resized image data
-     */
-    private static PduPart getResizedImageAsPart(final int widthLimit,
-            final int heightLimit, final int byteLimit, final int width, final int height,
-            final int orientation, final Uri imageUri, final Context context, final String contentType) {
-        final PduPart part = new PduPart();
-
-        final byte[] data = ImageResizer.getResizedImageData(width, height, orientation,
-                widthLimit, heightLimit, byteLimit, imageUri, context, contentType);
-        if (data == null) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "Resize image failed.");
-            }
-            return null;
-        }
-
-        part.setData(data);
-        // Any static images will be compressed into a jpeg
-        final String contentTypeOfResizedImage = ImageUtils.isGif(contentType, imageUri)
-                ? ContentType.IMAGE_GIF : ContentType.IMAGE_JPEG;
-        part.setContentType(contentTypeOfResizedImage.getBytes());
-
-        return part;
-    }
-
-    /**
-     * Get media file size
-     */
-    public static long getMediaFileSize(final Uri uri) {
-        final Context context = Factory.get().getApplicationContext();
-        AssetFileDescriptor fd = null;
-        try {
-            fd = context.getContentResolver().openAssetFileDescriptor(uri, "r");
-            if (fd != null) {
-                return fd.getParcelFileDescriptor().getStatSize();
-            }
-        } catch (final FileNotFoundException e) {
-            LogUtil.e(TAG, "MmsUtils.getMediaFileSize: cound not find media file: " + e, e);
-        } finally {
-            if (fd != null) {
-                try {
-                    fd.close();
-                } catch (final IOException e) {
-                    LogUtil.e(TAG, "MmsUtils.getMediaFileSize: failed to close " + e, e);
-                }
-            }
-        }
-        return 0L;
-    }
-
-    // Code for extracting the actual phone numbers for the participants in a conversation,
-    // given a thread id.
-
-    private static final Uri ALL_THREADS_URI =
-            Threads.CONTENT_URI.buildUpon().appendQueryParameter("simple", "true").build();
-
-    private static final String[] RECIPIENTS_PROJECTION = {
-        Threads._ID,
-        Threads.RECIPIENT_IDS
-    };
-
-    private static final int RECIPIENT_IDS  = 1;
-
-    public static List<String> getRecipientsByThread(final long threadId) {
-        final String spaceSepIds = getRawRecipientIdsForThread(threadId);
-        if (!TextUtils.isEmpty(spaceSepIds)) {
-            final Context context = Factory.get().getApplicationContext();
-            return getAddresses(context, spaceSepIds);
-        }
-        return null;
-    }
-
-    // NOTE: There are phones on which you can't get the recipients from the thread id for SMS
-    // until you have a message in the conversation!
-    public static String getRawRecipientIdsForThread(final long threadId) {
-        if (threadId <= 0) {
-            return null;
-        }
-        final Context context = Factory.get().getApplicationContext();
-        final ContentResolver cr = context.getContentResolver();
-        final Cursor thread = cr.query(
-                ALL_THREADS_URI,
-                RECIPIENTS_PROJECTION, "_id=?", new String[] { String.valueOf(threadId) }, null);
-        if (thread != null) {
-            try {
-                if (thread.moveToFirst()) {
-                    // recipientIds will be a space-separated list of ids into the
-                    // canonical addresses table.
-                    return thread.getString(RECIPIENT_IDS);
-                }
-            } finally {
-                thread.close();
-            }
-        }
-        return null;
-    }
-
-    private static final Uri SINGLE_CANONICAL_ADDRESS_URI =
-            Uri.parse("content://mms-sms/canonical-address");
-
-    private static List<String> getAddresses(final Context context, final String spaceSepIds) {
-        final List<String> numbers = new ArrayList<String>();
-        final String[] ids = spaceSepIds.split(" ");
-        for (final String id : ids) {
-            long longId;
-
-            try {
-                longId = Long.parseLong(id);
-                if (longId < 0) {
-                    LogUtil.e(TAG, "MmsUtils.getAddresses: invalid id " + longId);
-                    continue;
-                }
-            } catch (final NumberFormatException ex) {
-                LogUtil.e(TAG, "MmsUtils.getAddresses: invalid id. " + ex, ex);
-                // skip this id
-                continue;
-            }
-
-            // TODO: build a single query where we get all the addresses at once.
-            Cursor c = null;
-            try {
-                c = context.getContentResolver().query(
-                        ContentUris.withAppendedId(SINGLE_CANONICAL_ADDRESS_URI, longId),
-                        null, null, null, null);
-            } catch (final Exception e) {
-                LogUtil.e(TAG, "MmsUtils.getAddresses: query failed for id " + longId, e);
-            }
-            if (c != null) {
-                try {
-                    if (c.moveToFirst()) {
-                        final String number = c.getString(0);
-                        if (!TextUtils.isEmpty(number)) {
-                            numbers.add(number);
-                        } else {
-                            LogUtil.w(TAG, "Canonical MMS/SMS address is empty for id: " + longId);
-                        }
-                    }
-                } finally {
-                    c.close();
-                }
-            }
-        }
-        if (numbers.isEmpty()) {
-            LogUtil.w(TAG, "No MMS addresses found from ids string [" + spaceSepIds + "]");
-        }
-        return numbers;
-    }
-
-    // Get telephony SMS thread ID
-    public static long getOrCreateSmsThreadId(final Context context, final String dest) {
-        // use destinations to determine threadId
-        final Set<String> recipients = new HashSet<String>();
-        recipients.add(dest);
-        try {
-            return MmsSmsUtils.Threads.getOrCreateThreadId(context, recipients);
-        } catch (final IllegalArgumentException e) {
-            LogUtil.e(TAG, "MmsUtils: getting thread id failed: " + e);
-            return -1;
-        }
-    }
-
-    // Get telephony SMS thread ID
-    public static long getOrCreateThreadId(final Context context, final List<String> dests) {
-        if (dests == null || dests.size() == 0) {
-            return -1;
-        }
-        // use destinations to determine threadId
-        final Set<String> recipients = new HashSet<String>(dests);
-        try {
-            return MmsSmsUtils.Threads.getOrCreateThreadId(context, recipients);
-        } catch (final IllegalArgumentException e) {
-            LogUtil.e(TAG, "MmsUtils: getting thread id failed: " + e);
-            return -1;
-        }
-    }
-
-    /**
-     * Add an SMS to the given URI with thread_id specified.
-     *
-     * @param resolver the content resolver to use
-     * @param uri the URI to add the message to
-     * @param subId subId for the receiving sim
-     * @param address the address of the sender
-     * @param body the body of the message
-     * @param subject the psuedo-subject of the message
-     * @param date the timestamp for the message
-     * @param read true if the message has been read, false if not
-     * @param threadId the thread_id of the message
-     * @return the URI for the new message
-     */
-    private static Uri addMessageToUri(final ContentResolver resolver,
-            final Uri uri, final int subId, final String address, final String body,
-            final String subject, final Long date, final boolean read, final boolean seen,
-            final int status, final int type, final long threadId) {
-        final ContentValues values = new ContentValues(7);
-
-        values.put(Telephony.Sms.ADDRESS, address);
-        if (date != null) {
-            values.put(Telephony.Sms.DATE, date);
-        }
-        values.put(Telephony.Sms.READ, read ? 1 : 0);
-        values.put(Telephony.Sms.SEEN, seen ? 1 : 0);
-        values.put(Telephony.Sms.SUBJECT, subject);
-        values.put(Telephony.Sms.BODY, body);
-        if (OsUtil.isAtLeastL_MR1()) {
-            values.put(Telephony.Sms.SUBSCRIPTION_ID, subId);
-        }
-        if (status != Telephony.Sms.STATUS_NONE) {
-            values.put(Telephony.Sms.STATUS, status);
-        }
-        if (type != Telephony.Sms.MESSAGE_TYPE_ALL) {
-            values.put(Telephony.Sms.TYPE, type);
-        }
-        if (threadId != -1L) {
-            values.put(Telephony.Sms.THREAD_ID, threadId);
-        }
-        return resolver.insert(uri, values);
-    }
-
-    // Insert an SMS message to telephony
-    public static Uri insertSmsMessage(final Context context, final Uri uri, final int subId,
-            final String dest, final String text, final long timestamp, final int status,
-            final int type, final long threadId) {
-        Uri response = null;
-        try {
-            response = addMessageToUri(context.getContentResolver(), uri, subId, dest,
-                    text, null /* subject */, timestamp, true /* read */,
-                    true /* seen */, status, type, threadId);
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "Mmsutils: Inserted SMS message into telephony (type = " + type + ")"
-                        + ", uri: " + response);
-            }
-        } catch (final SQLiteException e) {
-            LogUtil.e(TAG, "MmsUtils: persist sms message failure " + e, e);
-        } catch (final IllegalArgumentException e) {
-            LogUtil.e(TAG, "MmsUtils: persist sms message failure " + e, e);
-        }
-        return response;
-    }
-
-    // Update SMS message type in telephony; returns true if it succeeded.
-    public static boolean updateSmsMessageSendingStatus(final Context context, final Uri uri,
-            final int type, final long date) {
-        try {
-            final ContentResolver resolver = context.getContentResolver();
-            final ContentValues values = new ContentValues(2);
-
-            values.put(Telephony.Sms.TYPE, type);
-            values.put(Telephony.Sms.DATE, date);
-            final int cnt = resolver.update(uri, values, null, null);
-            if (cnt == 1) {
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "Mmsutils: Updated sending SMS " + uri + "; type = " + type
-                            + ", date = " + date + " (millis since epoch)");
-                }
-                return true;
-            }
-        } catch (final SQLiteException e) {
-            LogUtil.e(TAG, "MmsUtils: update sms message failure " + e, e);
-        } catch (final IllegalArgumentException e) {
-            LogUtil.e(TAG, "MmsUtils: update sms message failure " + e, e);
-        }
-        return false;
-    }
-
-    // Persist a sent MMS message in telephony
-    private static Uri insertSendReq(final Context context, final GenericPdu pdu, final int subId,
-            final String subPhoneNumber) {
-        final PduPersister persister = PduPersister.getPduPersister(context);
-        Uri uri = null;
-        try {
-            // Persist the PDU
-            uri = persister.persist(
-                    pdu,
-                    Mms.Sent.CONTENT_URI,
-                    subId,
-                    subPhoneNumber,
-                    null/*preOpenedFiles*/);
-            // Update mms table to reflect sent messages are always seen and read
-            final ContentValues values = new ContentValues(1);
-            values.put(Mms.READ, 1);
-            values.put(Mms.SEEN, 1);
-            SqliteWrapper.update(context, context.getContentResolver(), uri, values, null, null);
-        } catch (final MmsException e) {
-            LogUtil.e(TAG, "MmsUtils: persist mms sent message failure " + e, e);
-        }
-        return uri;
-    }
-
-    // Persist a received MMS message in telephony
-    public static Uri insertReceivedMmsMessage(final Context context,
-            final RetrieveConf retrieveConf, final int subId, final String subPhoneNumber,
-            final long receivedTimestampInSeconds, final long expiry, final String transactionId) {
-        final PduPersister persister = PduPersister.getPduPersister(context);
-        Uri uri = null;
-        try {
-            uri = persister.persist(
-                    retrieveConf,
-                    Mms.Inbox.CONTENT_URI,
-                    subId,
-                    subPhoneNumber,
-                    null/*preOpenedFiles*/);
-
-            final ContentValues values = new ContentValues(3);
-            // Update mms table with local time instead of PDU time
-            values.put(Mms.DATE, receivedTimestampInSeconds);
-            // Also update the transaction id and the expiry from NotificationInd so that
-            // wap push dedup would work even after the wap push is deleted.
-            values.put(Mms.TRANSACTION_ID, transactionId);
-            values.put(Mms.EXPIRY, expiry);
-            SqliteWrapper.update(context, context.getContentResolver(), uri, values, null, null);
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "MmsUtils: Inserted MMS message into telephony, uri: " + uri);
-            }
-        } catch (final MmsException e) {
-            LogUtil.e(TAG, "MmsUtils: persist mms received message failure " + e, e);
-            // Just returns empty uri to RetrieveMmsRequest, which triggers a permanent failure
-        } catch (final SQLiteException e) {
-            LogUtil.e(TAG, "MmsUtils: update mms received message failure " + e, e);
-            // Time update failure is ignored.
-        }
-        return uri;
-    }
-
-    // Update MMS message type in telephony; returns true if it succeeded.
-    public static boolean updateMmsMessageSendingStatus(final Context context, final Uri uri,
-            final int box, final long timestampInMillis) {
-        try {
-            final ContentResolver resolver = context.getContentResolver();
-            final ContentValues values = new ContentValues();
-
-            final long timestampInSeconds = timestampInMillis / 1000L;
-            values.put(Telephony.Mms.MESSAGE_BOX, box);
-            values.put(Telephony.Mms.DATE, timestampInSeconds);
-            final int cnt = resolver.update(uri, values, null, null);
-            if (cnt == 1) {
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "Mmsutils: Updated sending MMS " + uri + "; box = " + box
-                            + ", date = " + timestampInSeconds + " (secs since epoch)");
-                }
-                return true;
-            }
-        } catch (final SQLiteException e) {
-            LogUtil.e(TAG, "MmsUtils: update mms message failure " + e, e);
-        } catch (final IllegalArgumentException e) {
-            LogUtil.e(TAG, "MmsUtils: update mms message failure " + e, e);
-        }
-        return false;
-    }
-
-    /**
-     * Parse values from a received sms message
-     *
-     * @param context
-     * @param msgs The received sms message content
-     * @param error The received sms error
-     * @return Parsed values from the message
-     */
-    public static ContentValues parseReceivedSmsMessage(
-            final Context context, final SmsMessage[] msgs, final int error) {
-        final SmsMessage sms = msgs[0];
-        final ContentValues values = new ContentValues();
-
-        values.put(Sms.ADDRESS, sms.getDisplayOriginatingAddress());
-        values.put(Sms.BODY, buildMessageBodyFromPdus(msgs));
-        if (MmsUtils.hasSmsDateSentColumn()) {
-            // TODO:: The boxing here seems unnecessary.
-            values.put(Sms.DATE_SENT, Long.valueOf(sms.getTimestampMillis()));
-        }
-        values.put(Sms.PROTOCOL, sms.getProtocolIdentifier());
-        if (sms.getPseudoSubject().length() > 0) {
-            values.put(Sms.SUBJECT, sms.getPseudoSubject());
-        }
-        values.put(Sms.REPLY_PATH_PRESENT, sms.isReplyPathPresent() ? 1 : 0);
-        values.put(Sms.SERVICE_CENTER, sms.getServiceCenterAddress());
-        // Error code
-        values.put(Sms.ERROR_CODE, error);
-
-        return values;
-    }
-
-    // Some providers send formfeeds in their messages. Convert those formfeeds to newlines.
-    private static String replaceFormFeeds(final String s) {
-        return s == null ? "" : s.replace('\f', '\n');
-    }
-
-    // Parse the message body from message PDUs
-    private static String buildMessageBodyFromPdus(final SmsMessage[] msgs) {
-        if (msgs.length == 1) {
-            // There is only one part, so grab the body directly.
-            return replaceFormFeeds(msgs[0].getDisplayMessageBody());
-        } else {
-            // Build up the body from the parts.
-            final StringBuilder body = new StringBuilder();
-            for (final SmsMessage msg : msgs) {
-                try {
-                    // getDisplayMessageBody() can NPE if mWrappedMessage inside is null.
-                    body.append(msg.getDisplayMessageBody());
-                } catch (final NullPointerException e) {
-                    // Nothing to do
-                }
-            }
-            return replaceFormFeeds(body.toString());
-        }
-    }
-
-    // Parse the message date
-    public static Long getMessageDate(final SmsMessage sms, long now) {
-        // Use now for the timestamp to avoid confusion with clock
-        // drift between the handset and the SMSC.
-        // Check to make sure the system is giving us a non-bogus time.
-        final Calendar buildDate = new GregorianCalendar(2011, 8, 18);    // 18 Sep 2011
-        final Calendar nowDate = new GregorianCalendar();
-        nowDate.setTimeInMillis(now);
-        if (nowDate.before(buildDate)) {
-            // It looks like our system clock isn't set yet because the current time right now
-            // is before an arbitrary time we made this build. Instead of inserting a bogus
-            // receive time in this case, use the timestamp of when the message was sent.
-            now = sms.getTimestampMillis();
-        }
-        return now;
-    }
-
-    /**
-     * cleanseMmsSubject will take a subject that's says, "<Subject: no subject>", and return
-     * a null string. Otherwise it will return the original subject string.
-     * @param resources So the function can grab string resources
-     * @param subject the raw subject
-     * @return
-     */
-    public static String cleanseMmsSubject(final Resources resources, final String subject) {
-        if (TextUtils.isEmpty(subject)) {
-            return null;
-        }
-        if (sNoSubjectStrings == null) {
-            sNoSubjectStrings =
-                    resources.getStringArray(R.array.empty_subject_strings);
-        }
-        for (final String noSubjectString : sNoSubjectStrings) {
-            if (subject.equalsIgnoreCase(noSubjectString)) {
-                return null;
-            }
-        }
-        return subject;
-    }
-
-    /**
-     * @return Whether to auto retrieve MMS
-     */
-    public static boolean allowMmsAutoRetrieve(final int subId) {
-        final Context context = Factory.get().getApplicationContext();
-        final Resources resources = context.getResources();
-        final BuglePrefs prefs = BuglePrefs.getSubscriptionPrefs(subId);
-        final boolean autoRetrieve = prefs.getBoolean(
-                resources.getString(R.string.auto_retrieve_mms_pref_key),
-                resources.getBoolean(R.bool.auto_retrieve_mms_pref_default));
-        if (autoRetrieve) {
-            final boolean autoRetrieveInRoaming = prefs.getBoolean(
-                    resources.getString(R.string.auto_retrieve_mms_when_roaming_pref_key),
-                    resources.getBoolean(R.bool.auto_retrieve_mms_when_roaming_pref_default));
-            final PhoneUtils phoneUtils = PhoneUtils.get(subId);
-            if ((autoRetrieveInRoaming && phoneUtils.isDataRoamingEnabled())
-                    || !phoneUtils.isRoaming()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Parse the message row id from a message Uri.
-     *
-     * @param messageUri The input Uri
-     * @return The message row id if valid, otherwise -1
-     */
-    public static long parseRowIdFromMessageUri(final Uri messageUri) {
-        try {
-            if (messageUri != null) {
-                return ContentUris.parseId(messageUri);
-            }
-        } catch (final UnsupportedOperationException e) {
-            // Nothing to do
-        } catch (final NumberFormatException e) {
-            // Nothing to do
-        }
-        return -1;
-    }
-
-    public static SmsMessage getSmsMessageFromDeliveryReport(final Intent intent) {
-        final byte[] pdu = intent.getByteArrayExtra("pdu");
-        final String format = intent.getStringExtra("format");
-        return OsUtil.isAtLeastM()
-                ? SmsMessage.createFromPdu(pdu, format)
-                : SmsMessage.createFromPdu(pdu);
-    }
-
-    /**
-     * Update the status and date_sent column of sms message in telephony provider
-     *
-     * @param smsMessageUri
-     * @param status
-     * @param timeSentInMillis
-     */
-    public static void updateSmsStatusAndDateSent(final Uri smsMessageUri, final int status,
-            final long timeSentInMillis) {
-        if (smsMessageUri == null) {
-            return;
-        }
-        final ContentValues values = new ContentValues();
-        values.put(Sms.STATUS, status);
-        if (MmsUtils.hasSmsDateSentColumn()) {
-            values.put(Sms.DATE_SENT, timeSentInMillis);
-        }
-        final ContentResolver resolver = Factory.get().getApplicationContext().getContentResolver();
-        resolver.update(smsMessageUri, values, null/*where*/, null/*selectionArgs*/);
-    }
-
-    /**
-     * Get the SQL selection statement for matching messages with media.
-     *
-     * Example for MMS part table:
-     * "((ct LIKE 'image/%')
-     *   OR (ct LIKE 'video/%')
-     *   OR (ct LIKE 'audio/%')
-     *   OR (ct='application/ogg'))
-     *
-     * @param contentTypeColumn The content-type column name
-     * @return The SQL selection statement for matching media types: image, video, audio
-     */
-    public static String getMediaTypeSelectionSql(final String contentTypeColumn) {
-        return String.format(
-                Locale.US,
-                "((%s LIKE '%s') OR (%s LIKE '%s') OR (%s LIKE '%s') OR (%s='%s'))",
-                contentTypeColumn,
-                "image/%",
-                contentTypeColumn,
-                "video/%",
-                contentTypeColumn,
-                "audio/%",
-                contentTypeColumn,
-                ContentType.AUDIO_OGG);
-    }
-
-    // Max number of operands per SQL query for deleting SMS messages
-    public static final int MAX_IDS_PER_QUERY = 128;
-
-    /**
-     * Delete MMS messages with media parts.
-     *
-     * Because the telephony provider constraints, we can't use JOIN and delete messages in one
-     * shot. We have to do a query first and then batch delete the messages based on IDs.
-     *
-     * @return The count of messages deleted.
-     */
-    public static int deleteMediaMessages() {
-        // Do a query first
-        //
-        // The WHERE clause has two parts:
-        // The first part is to select the exact same types of MMS messages as when we import them
-        // (so that we don't delete messages that are not in local database)
-        // The second part is to select MMS with media parts, including image, video and audio
-        final String selection = String.format(
-                Locale.US,
-                "%s AND (%s IN (SELECT %s FROM part WHERE %s))",
-                getMmsTypeSelectionSql(),
-                Mms._ID,
-                Mms.Part.MSG_ID,
-                getMediaTypeSelectionSql(Mms.Part.CONTENT_TYPE));
-        final ContentResolver resolver = Factory.get().getApplicationContext().getContentResolver();
-        final Cursor cursor = resolver.query(Mms.CONTENT_URI,
-                new String[]{ Mms._ID },
-                selection,
-                null/*selectionArgs*/,
-                null/*sortOrder*/);
-        int deleted = 0;
-        if (cursor != null) {
-            final long[] messageIds = new long[cursor.getCount()];
-            try {
-                int i = 0;
-                while (cursor.moveToNext()) {
-                    messageIds[i++] = cursor.getLong(0);
-                }
-            } finally {
-                cursor.close();
-            }
-            final int totalIds = messageIds.length;
-            if (totalIds > 0) {
-                // Batch delete the messages using IDs
-                // We don't want to send all IDs at once since there is a limit on SQL statement
-                for (int start = 0; start < totalIds; start += MAX_IDS_PER_QUERY) {
-                    final int end = Math.min(start + MAX_IDS_PER_QUERY, totalIds); // excluding
-                    final int count = end - start;
-                    final String batchSelection = String.format(
-                            Locale.US,
-                            "%s IN %s",
-                            Mms._ID,
-                            getSqlInOperand(count));
-                    final String[] batchSelectionArgs =
-                            getSqlInOperandArgs(messageIds, start, count);
-                    final int deletedForBatch = resolver.delete(
-                            Mms.CONTENT_URI,
-                            batchSelection,
-                            batchSelectionArgs);
-                    if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                        LogUtil.d(TAG, "deleteMediaMessages: deleting IDs = "
-                                + Joiner.on(',').skipNulls().join(batchSelectionArgs)
-                                + ", deleted = " + deletedForBatch);
-                    }
-                    deleted += deletedForBatch;
-                }
-            }
-        }
-        return deleted;
-    }
-
-    /**
-     * Get the (?,?,...) thing for the SQL IN operator by a count
-     *
-     * @param count
-     * @return
-     */
-    public static String getSqlInOperand(final int count) {
-        if (count <= 0) {
-            return null;
-        }
-        final StringBuilder sb = new StringBuilder();
-        sb.append("(?");
-        for (int i = 0; i < count - 1; i++) {
-            sb.append(",?");
-        }
-        sb.append(")");
-        return sb.toString();
-    }
-
-    /**
-     * Get the args for SQL IN operator from a long ID array
-     *
-     * @param ids The original long id array
-     * @param start Start of the ids to fill the args
-     * @param count Number of ids to pack
-     * @return The long array with the id args
-     */
-    private static String[] getSqlInOperandArgs(
-            final long[] ids, final int start, final int count) {
-        if (count <= 0) {
-            return null;
-        }
-        final String[] args = new String[count];
-        for (int i = 0; i < count; i++) {
-            args[i] = Long.toString(ids[start + i]);
-        }
-        return args;
-    }
-
-    /**
-     * Delete SMS and MMS messages that are earlier than a specific timestamp
-     *
-     * @param cutOffTimestampInMillis The cut-off timestamp
-     * @return Total number of messages deleted.
-     */
-    public static int deleteMessagesOlderThan(final long cutOffTimestampInMillis) {
-        int deleted = 0;
-        final ContentResolver resolver = Factory.get().getApplicationContext().getContentResolver();
-        // Delete old SMS
-        final String smsSelection = String.format(
-                Locale.US,
-                "%s AND (%s<=%d)",
-                getSmsTypeSelectionSql(),
-                Sms.DATE,
-                cutOffTimestampInMillis);
-        deleted += resolver.delete(Sms.CONTENT_URI, smsSelection, null/*selectionArgs*/);
-        // Delete old MMS
-        final String mmsSelection = String.format(
-                Locale.US,
-                "%s AND (%s<=%d)",
-                getMmsTypeSelectionSql(),
-                Mms.DATE,
-                cutOffTimestampInMillis / 1000L);
-        deleted += resolver.delete(Mms.CONTENT_URI, mmsSelection, null/*selectionArgs*/);
-        return deleted;
-    }
-
-    /**
-     * Update the read status of SMS/MMS messages by thread and timestamp
-     *
-     * @param threadId The thread of sms/mms to change
-     * @param timestampInMillis Change the status before this timestamp
-     */
-    public static void updateSmsReadStatus(final long threadId, final long timestampInMillis) {
-        final ContentResolver resolver = Factory.get().getApplicationContext().getContentResolver();
-        final ContentValues values = new ContentValues();
-        values.put("read", 1);
-        values.put("seen", 1); /* If you read it you saw it */
-        final String smsSelection = String.format(
-                Locale.US,
-                "%s=%d AND %s<=%d AND %s=0",
-                Sms.THREAD_ID,
-                threadId,
-                Sms.DATE,
-                timestampInMillis,
-                Sms.READ);
-        resolver.update(
-                Sms.CONTENT_URI,
-                values,
-                smsSelection,
-                null/*selectionArgs*/);
-        final String mmsSelection = String.format(
-                Locale.US,
-                "%s=%d AND %s<=%d AND %s=0",
-                Mms.THREAD_ID,
-                threadId,
-                Mms.DATE,
-                timestampInMillis / 1000L,
-                Mms.READ);
-        resolver.update(
-                Mms.CONTENT_URI,
-                values,
-                mmsSelection,
-                null/*selectionArgs*/);
-    }
-
-    /**
-     * Update the read status of a single MMS message by its URI
-     *
-     * @param mmsUri
-     * @param read
-     */
-    public static void updateReadStatusForMmsMessage(final Uri mmsUri, final boolean read) {
-        final ContentResolver resolver = Factory.get().getApplicationContext().getContentResolver();
-        final ContentValues values = new ContentValues();
-        values.put(Mms.READ, read ? 1 : 0);
-        resolver.update(mmsUri, values, null/*where*/, null/*selectionArgs*/);
-    }
-
-    public static class AttachmentInfo {
-        public String mUrl;
-        public String mContentType;
-        public int mWidth;
-        public int mHeight;
-    }
-
-    /**
-     * Convert byte array to Java String using a charset name
-     *
-     * @param bytes
-     * @param charsetName
-     * @return
-     */
-    public static String bytesToString(final byte[] bytes, final String charsetName) {
-        if (bytes == null) {
-            return null;
-        }
-        try {
-            return new String(bytes, charsetName);
-        } catch (final UnsupportedEncodingException e) {
-            LogUtil.e(TAG, "MmsUtils.bytesToString: " + e, e);
-            return new String(bytes);
-        }
-    }
-
-    /**
-     * Convert a Java String to byte array using a charset name
-     *
-     * @param string
-     * @param charsetName
-     * @return
-     */
-    public static byte[] stringToBytes(final String string, final String charsetName) {
-        if (string == null) {
-            return null;
-        }
-        try {
-            return string.getBytes(charsetName);
-        } catch (final UnsupportedEncodingException e) {
-            LogUtil.e(TAG, "MmsUtils.stringToBytes: " + e, e);
-            return string.getBytes();
-        }
-    }
-
-    private static final String[] TEST_DATE_SENT_PROJECTION = new String[] { Sms.DATE_SENT };
-    private static Boolean sHasSmsDateSentColumn = null;
-    /**
-     * Check if date_sent column exists on ICS and above devices. We need to do a test
-     * query to figure that out since on some ICS+ devices, somehow the date_sent column does
-     * not exist. http://b/17629135 tracks the associated compliance test.
-     *
-     * @return Whether "date_sent" column exists in sms table
-     */
-    public static boolean hasSmsDateSentColumn() {
-        if (sHasSmsDateSentColumn == null) {
-            Cursor cursor = null;
-            try {
-                final Context context = Factory.get().getApplicationContext();
-                final ContentResolver resolver = context.getContentResolver();
-                cursor = SqliteWrapper.query(
-                        context,
-                        resolver,
-                        Sms.CONTENT_URI,
-                        TEST_DATE_SENT_PROJECTION,
-                        null/*selection*/,
-                        null/*selectionArgs*/,
-                        Sms.DATE_SENT + " ASC LIMIT 1");
-                sHasSmsDateSentColumn = true;
-            } catch (final SQLiteException e) {
-                LogUtil.w(TAG, "date_sent in sms table does not exist", e);
-                sHasSmsDateSentColumn = false;
-            } finally {
-                if (cursor != null) {
-                    cursor.close();
-                }
-            }
-        }
-        return sHasSmsDateSentColumn;
-    }
-
-    private static final String[] TEST_CARRIERS_PROJECTION =
-            new String[] { Telephony.Carriers.MMSC };
-    private static Boolean sUseSystemApn = null;
-    /**
-     * Check if we can access the APN data in the Telephony provider. Access was restricted in
-     * JB MR1 (and some JB MR2) devices. If we can't access the APN, we have to fall back and use
-     * a private table in our own app.
-     *
-     * @return Whether we can access the system APN table
-     */
-    public static boolean useSystemApnTable() {
-        if (sUseSystemApn == null) {
-            Cursor cursor = null;
-            try {
-                final Context context = Factory.get().getApplicationContext();
-                final ContentResolver resolver = context.getContentResolver();
-                cursor = SqliteWrapper.query(
-                        context,
-                        resolver,
-                        Telephony.Carriers.CONTENT_URI,
-                        TEST_CARRIERS_PROJECTION,
-                        null/*selection*/,
-                        null/*selectionArgs*/,
-                        null);
-                sUseSystemApn = true;
-            } catch (final SecurityException e) {
-                LogUtil.w(TAG, "Can't access system APN, using internal table", e);
-                sUseSystemApn = false;
-            } finally {
-                if (cursor != null) {
-                    cursor.close();
-                }
-            }
-        }
-        return sUseSystemApn;
-    }
-
-    // For the internal debugger only
-    public static void setUseSystemApnTable(final boolean turnOn) {
-        if (!turnOn) {
-            // We're not turning on to the system table. Instead, we're using our internal table.
-            final int osVersion = OsUtil.getApiVersion();
-            if (osVersion != android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
-                // We're turning on local APNs on a device where we wouldn't normally have the
-                // local APN table. Build it here.
-
-                final SQLiteDatabase database = ApnDatabase.getApnDatabase().getWritableDatabase();
-
-                // Do we already have the table?
-                Cursor cursor = null;
-                try {
-                    cursor = database.query(ApnDatabase.APN_TABLE,
-                            ApnDatabase.APN_PROJECTION,
-                            null, null, null, null, null, null);
-                } catch (final Exception e) {
-                    // Apparently there's no table, create it now.
-                    ApnDatabase.forceBuildAndLoadApnTables();
-                } finally {
-                    if (cursor != null) {
-                        cursor.close();
-                    }
-                }
-            }
-        }
-        sUseSystemApn = turnOn;
-    }
-
-    /**
-     * Checks if we should dump sms, based on both the setting and the global debug
-     * flag
-     *
-     * @return if dump sms is enabled
-     */
-    public static boolean isDumpSmsEnabled() {
-        if (!DebugUtils.isDebugEnabled()) {
-            return false;
-        }
-        return getDumpSmsOrMmsPref(R.string.dump_sms_pref_key, R.bool.dump_sms_pref_default);
-    }
-
-    /**
-     * Checks if we should dump mms, based on both the setting and the global debug
-     * flag
-     *
-     * @return if dump mms is enabled
-     */
-    public static boolean isDumpMmsEnabled() {
-        if (!DebugUtils.isDebugEnabled()) {
-            return false;
-        }
-        return getDumpSmsOrMmsPref(R.string.dump_mms_pref_key, R.bool.dump_mms_pref_default);
-    }
-
-    /**
-     * Load the value of dump sms or mms setting preference
-     */
-    private static boolean getDumpSmsOrMmsPref(final int prefKeyRes, final int defaultKeyRes) {
-        final Context context = Factory.get().getApplicationContext();
-        final Resources resources = context.getResources();
-        final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-        final String key = resources.getString(prefKeyRes);
-        final boolean defaultValue = resources.getBoolean(defaultKeyRes);
-        return prefs.getBoolean(key, defaultValue);
-    }
-
-    public static final Uri MMS_PART_CONTENT_URI = Uri.parse("content://mms/part");
-
-    /**
-     * Load MMS from telephony
-     *
-     * @param mmsUri The MMS pdu Uri
-     * @return A memory copy of the MMS pdu including parts (but not addresses)
-     */
-    public static DatabaseMessages.MmsMessage loadMms(final Uri mmsUri) {
-        final Context context = Factory.get().getApplicationContext();
-        final ContentResolver resolver = context.getContentResolver();
-        DatabaseMessages.MmsMessage mms = null;
-        Cursor cursor = null;
-        // Load pdu first
-        try {
-            cursor = SqliteWrapper.query(context, resolver,
-                    mmsUri,
-                    DatabaseMessages.MmsMessage.getProjection(),
-                    null/*selection*/, null/*selectionArgs*/, null/*sortOrder*/);
-            if (cursor != null && cursor.moveToFirst()) {
-                mms = DatabaseMessages.MmsMessage.get(cursor);
-            }
-        } catch (final SQLiteException e) {
-            LogUtil.e(TAG, "MmsLoader: query pdu failure: " + e, e);
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        if (mms == null) {
-            return null;
-        }
-        // Load parts except SMIL
-        // TODO: we may need to load SMIL part in the future.
-        final long rowId = MmsUtils.parseRowIdFromMessageUri(mmsUri);
-        final String selection = String.format(
-                Locale.US,
-                "%s != '%s' AND %s = ?",
-                Mms.Part.CONTENT_TYPE,
-                ContentType.APP_SMIL,
-                Mms.Part.MSG_ID);
-        cursor = null;
-        try {
-            cursor = SqliteWrapper.query(context, resolver,
-                    MMS_PART_CONTENT_URI,
-                    DatabaseMessages.MmsPart.PROJECTION,
-                    selection,
-                    new String[] { Long.toString(rowId) },
-                    null/*sortOrder*/);
-            if (cursor != null) {
-                while (cursor.moveToNext()) {
-                    mms.addPart(DatabaseMessages.MmsPart.get(cursor, true/*loadMedia*/));
-                }
-            }
-        } catch (final SQLiteException e) {
-            LogUtil.e(TAG, "MmsLoader: query parts failure: " + e, e);
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return mms;
-    }
-
-    /**
-     * Get the sender of an MMS message
-     *
-     * @param recipients The recipient list of the message
-     * @param mmsUri The pdu uri of the MMS
-     * @return The sender phone number of the MMS
-     */
-    public static String getMmsSender(final List<String> recipients, final String mmsUri) {
-        final Context context = Factory.get().getApplicationContext();
-        // We try to avoid the database query.
-        // If this is a 1v1 conv., then the other party is the sender
-        if (recipients != null && recipients.size() == 1) {
-            return recipients.get(0);
-        }
-        // Otherwise, we have to query the MMS addr table for sender address
-        // This should only be done for a received group mms message
-        final Cursor cursor = SqliteWrapper.query(
-                context,
-                context.getContentResolver(),
-                Uri.withAppendedPath(Uri.parse(mmsUri), "addr"),
-                new String[] { Mms.Addr.ADDRESS, Mms.Addr.CHARSET },
-                Mms.Addr.TYPE + "=" + PduHeaders.FROM,
-                null/*selectionArgs*/,
-                null/*sortOrder*/);
-        if (cursor != null) {
-            try {
-                if (cursor.moveToFirst()) {
-                    return DatabaseMessages.MmsAddr.get(cursor);
-                }
-            } finally {
-                cursor.close();
-            }
-        }
-        return null;
-    }
-
-    public static int bugleStatusForMms(final boolean isOutgoing, final boolean isNotification,
-            final int messageBox) {
-        int bugleStatus = MessageData.BUGLE_STATUS_UNKNOWN;
-        // For a message we sync either
-        if (isOutgoing) {
-            if (messageBox == Mms.MESSAGE_BOX_OUTBOX || messageBox == Mms.MESSAGE_BOX_FAILED) {
-                // Not sent counts as failed and available for manual resend
-                bugleStatus = MessageData.BUGLE_STATUS_OUTGOING_FAILED;
-            } else {
-                // Otherwise outgoing message is complete
-                bugleStatus = MessageData.BUGLE_STATUS_OUTGOING_COMPLETE;
-            }
-        } else if (isNotification) {
-            // Incoming MMS notifications we sync count as failed and available for manual download
-            bugleStatus = MessageData.BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD;
-        } else {
-            // Other incoming MMS messages are complete
-            bugleStatus = MessageData.BUGLE_STATUS_INCOMING_COMPLETE;
-        }
-        return bugleStatus;
-    }
-
-    public static MessageData createMmsMessage(final DatabaseMessages.MmsMessage mms,
-            final String conversationId, final String participantId, final String selfId,
-            final int bugleStatus) {
-        Assert.notNull(mms);
-        final boolean isNotification = (mms.mMmsMessageType ==
-                PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND);
-        final int rawMmsStatus = (bugleStatus < MessageData.BUGLE_STATUS_FIRST_INCOMING
-                ? mms.mRetrieveStatus : mms.mResponseStatus);
-
-        final MessageData message = MessageData.createMmsMessage(mms.getUri(),
-                participantId, selfId, conversationId, isNotification, bugleStatus,
-                mms.mContentLocation, mms.mTransactionId, mms.mPriority, mms.mSubject,
-                mms.mSeen, mms.mRead, mms.getSize(), rawMmsStatus,
-                mms.mExpiryInMillis, mms.mSentTimestampInMillis, mms.mTimestampInMillis);
-
-        for (final DatabaseMessages.MmsPart part : mms.mParts) {
-            final MessagePartData messagePart = MmsUtils.createMmsMessagePart(part);
-            // Import media and text parts (skip SMIL and others)
-            if (messagePart != null) {
-                message.addPart(messagePart);
-            }
-        }
-
-        if (!message.getParts().iterator().hasNext()) {
-            message.addPart(MessagePartData.createEmptyMessagePart());
-        }
-
-        return message;
-    }
-
-    public static MessagePartData createMmsMessagePart(final DatabaseMessages.MmsPart part) {
-        MessagePartData messagePart = null;
-        if (part.isText()) {
-            final int mmsTextLengthLimit =
-                    BugleGservices.get().getInt(BugleGservicesKeys.MMS_TEXT_LIMIT,
-                            BugleGservicesKeys.MMS_TEXT_LIMIT_DEFAULT);
-            String text = part.mText;
-            if (text != null && text.length() > mmsTextLengthLimit) {
-                // Limit the text to a reasonable value. We ran into a situation where a vcard
-                // with a photo was sent as plain text. The massive amount of text caused the
-                // app to hang, ANR, and eventually crash in native text code.
-                text = text.substring(0, mmsTextLengthLimit);
-            }
-            messagePart = MessagePartData.createTextMessagePart(text);
-        } else if (part.isMedia()) {
-            messagePart = MessagePartData.createMediaMessagePart(part.mContentType,
-                    part.getDataUri(), MessagePartData.UNSPECIFIED_SIZE,
-                    MessagePartData.UNSPECIFIED_SIZE);
-        }
-        return messagePart;
-    }
-
-    public static class StatusPlusUri {
-        // The request status to be as the result of the operation
-        // e.g. MMS_REQUEST_MANUAL_RETRY
-        public final int status;
-        // The raw telephony status
-        public final int rawStatus;
-        // The raw telephony URI
-        public final Uri uri;
-        // The operation result code from system api invocation (sent by system)
-        // or mapped from internal exception (sent by app)
-        public final int resultCode;
-
-        public StatusPlusUri(final int status, final int rawStatus, final Uri uri) {
-            this.status = status;
-            this.rawStatus = rawStatus;
-            this.uri = uri;
-            resultCode = MessageData.UNKNOWN_RESULT_CODE;
-        }
-
-        public StatusPlusUri(final int status, final int rawStatus, final Uri uri,
-                final int resultCode) {
-            this.status = status;
-            this.rawStatus = rawStatus;
-            this.uri = uri;
-            this.resultCode = resultCode;
-        }
-    }
-
-    public static class SendReqResp {
-        public SendReq mSendReq;
-        public SendConf mSendConf;
-
-        public SendReqResp(final SendReq sendReq, final SendConf sendConf) {
-            mSendReq = sendReq;
-            mSendConf = sendConf;
-        }
-    }
-
-    /**
-     * Returned when sending/downloading MMS via platform APIs. In that case, we have to wait to
-     * receive the pending intent to determine status.
-     */
-    public static final StatusPlusUri STATUS_PENDING = new StatusPlusUri(-1, -1, null);
-
-    public static StatusPlusUri downloadMmsMessage(final Context context, final Uri notificationUri,
-            final int subId, final String subPhoneNumber, final String transactionId,
-            final String contentLocation, final boolean autoDownload,
-            final long receivedTimestampInSeconds, final long expiry, Bundle extras) {
-        if (TextUtils.isEmpty(contentLocation)) {
-            LogUtil.e(TAG, "MmsUtils: Download from empty content location URL");
-            return new StatusPlusUri(
-                    MMS_REQUEST_NO_RETRY, MessageData.RAW_TELEPHONY_STATUS_UNDEFINED, null);
-        }
-        if (!isMmsDataAvailable(subId)) {
-            LogUtil.e(TAG,
-                    "MmsUtils: failed to download message, no data available");
-            return new StatusPlusUri(MMS_REQUEST_MANUAL_RETRY,
-                    MessageData.RAW_TELEPHONY_STATUS_UNDEFINED,
-                    null,
-                    SmsManager.MMS_ERROR_NO_DATA_NETWORK);
-        }
-        int status = MMS_REQUEST_MANUAL_RETRY;
-        try {
-            RetrieveConf retrieveConf = null;
-            if (DebugUtils.isDebugEnabled() &&
-                    MediaScratchFileProvider
-                            .isMediaScratchSpaceUri(Uri.parse(contentLocation))) {
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "MmsUtils: Reading MMS from dump file: " + contentLocation);
-                }
-                final String fileName = Uri.parse(contentLocation).getPathSegments().get(1);
-                final byte[] data = DebugUtils.receiveFromDumpFile(fileName);
-                retrieveConf = receiveFromDumpFile(data);
-            } else {
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "MmsUtils: Downloading MMS via MMS lib API; notification "
-                            + "message: " + notificationUri);
-                }
-                if (OsUtil.isAtLeastL_MR1()) {
-                    if (subId < 0) {
-                        LogUtil.e(TAG, "MmsUtils: Incoming MMS came from unknown SIM");
-                        throw new MmsFailureException(MMS_REQUEST_NO_RETRY,
-                                "Message from unknown SIM");
-                    }
-                } else {
-                    Assert.isTrue(subId == ParticipantData.DEFAULT_SELF_SUB_ID);
-                }
-                if (extras == null) {
-                    extras = new Bundle();
-                }
-                extras.putParcelable(DownloadMmsAction.EXTRA_NOTIFICATION_URI, notificationUri);
-                extras.putInt(DownloadMmsAction.EXTRA_SUB_ID, subId);
-                extras.putString(DownloadMmsAction.EXTRA_SUB_PHONE_NUMBER, subPhoneNumber);
-                extras.putString(DownloadMmsAction.EXTRA_TRANSACTION_ID, transactionId);
-                extras.putString(DownloadMmsAction.EXTRA_CONTENT_LOCATION, contentLocation);
-                extras.putBoolean(DownloadMmsAction.EXTRA_AUTO_DOWNLOAD, autoDownload);
-                extras.putLong(DownloadMmsAction.EXTRA_RECEIVED_TIMESTAMP,
-                        receivedTimestampInSeconds);
-                extras.putLong(DownloadMmsAction.EXTRA_EXPIRY, expiry);
-
-                MmsSender.downloadMms(context, subId, contentLocation, extras);
-                return STATUS_PENDING; // Download happens asynchronously; no status to return
-            }
-            return insertDownloadedMessageAndSendResponse(context, notificationUri, subId,
-                    subPhoneNumber, transactionId, contentLocation, autoDownload,
-                    receivedTimestampInSeconds, expiry, retrieveConf);
-
-        } catch (final MmsFailureException e) {
-            LogUtil.e(TAG, "MmsUtils: failed to download message " + notificationUri, e);
-            status = e.retryHint;
-        } catch (final InvalidHeaderValueException e) {
-            LogUtil.e(TAG, "MmsUtils: failed to download message " + notificationUri, e);
-        }
-        return new StatusPlusUri(status, PDU_HEADER_VALUE_UNDEFINED, null);
-    }
-
-    public static StatusPlusUri insertDownloadedMessageAndSendResponse(final Context context,
-            final Uri notificationUri, final int subId, final String subPhoneNumber,
-            final String transactionId, final String contentLocation,
-            final boolean autoDownload, final long receivedTimestampInSeconds,
-            final long expiry, final RetrieveConf retrieveConf) {
-        final byte[] notificationTransactionId = stringToBytes(transactionId, "UTF-8");
-        Uri messageUri = null;
-        final int status;
-        final int retrieveStatus = retrieveConf.getRetrieveStatus();
-
-        if (retrieveStatus == PduHeaders.RETRIEVE_STATUS_OK) {
-            status = MMS_REQUEST_SUCCEEDED;
-        } else if (retrieveStatus >= PduHeaders.RETRIEVE_STATUS_ERROR_TRANSIENT_FAILURE &&
-                retrieveStatus < PduHeaders.RETRIEVE_STATUS_ERROR_PERMANENT_FAILURE) {
-            status = MMS_REQUEST_AUTO_RETRY;
-        } else {
-            // else not meant to retry download
-            status = MMS_REQUEST_NO_RETRY;
-            LogUtil.e(TAG, "MmsUtils: failed to retrieve message; retrieveStatus: "
-                    + retrieveStatus);
-        }
-        final ContentValues values = new ContentValues(1);
-        values.put(Mms.RETRIEVE_STATUS, retrieveConf.getRetrieveStatus());
-        SqliteWrapper.update(context, context.getContentResolver(),
-                notificationUri, values, null, null);
-
-        if (status == MMS_REQUEST_SUCCEEDED) {
-            // Send response of the notification
-            if (autoDownload) {
-                sendNotifyResponseForMmsDownload(
-                        context,
-                        subId,
-                        notificationTransactionId,
-                        contentLocation,
-                        PduHeaders.STATUS_RETRIEVED);
-            } else {
-                sendAcknowledgeForMmsDownload(
-                        context, subId, retrieveConf.getTransactionId(), contentLocation);
-            }
-
-            // Insert downloaded message into telephony
-            final Uri inboxUri = MmsUtils.insertReceivedMmsMessage(context, retrieveConf, subId,
-                    subPhoneNumber, receivedTimestampInSeconds, expiry, transactionId);
-            messageUri = ContentUris.withAppendedId(Mms.CONTENT_URI, ContentUris.parseId(inboxUri));
-        }
-        // Do nothing for MMS_REQUEST_AUTO_RETRY and MMS_REQUEST_NO_RETRY.
-
-        return new StatusPlusUri(status, retrieveStatus, messageUri);
-    }
-
-    /**
-     * Send response for MMS download - catches and ignores errors
-     */
-    public static void sendNotifyResponseForMmsDownload(final Context context, final int subId,
-            final byte[] transactionId, final String contentLocation, final int status) {
-        try {
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "MmsUtils: Sending M-NotifyResp.ind for received MMS, status: "
-                        + String.format("0x%X", status));
-            }
-            if (contentLocation == null) {
-                LogUtil.w(TAG, "MmsUtils: Can't send NotifyResp; contentLocation is null");
-                return;
-            }
-            if (transactionId == null) {
-                LogUtil.w(TAG, "MmsUtils: Can't send NotifyResp; transaction id is null");
-                return;
-            }
-            if (!isMmsDataAvailable(subId)) {
-                LogUtil.w(TAG, "MmsUtils: Can't send NotifyResp; no data available");
-                return;
-            }
-            MmsSender.sendNotifyResponseForMmsDownload(
-                    context, subId, transactionId, contentLocation, status);
-        } catch (final MmsFailureException e) {
-            LogUtil.e(TAG, "sendNotifyResponseForMmsDownload: failed to retrieve message " + e, e);
-        } catch (final InvalidHeaderValueException e) {
-            LogUtil.e(TAG, "sendNotifyResponseForMmsDownload: failed to retrieve message " + e, e);
-        }
-    }
-
-    /**
-     * Send acknowledge for mms download - catched and ignores errors
-     */
-    public static void sendAcknowledgeForMmsDownload(final Context context, final int subId,
-            final byte[] transactionId, final String contentLocation) {
-        try {
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, "MmsUtils: Sending M-Acknowledge.ind for received MMS");
-            }
-            if (contentLocation == null) {
-                LogUtil.w(TAG, "MmsUtils: Can't send AckInd; contentLocation is null");
-                return;
-            }
-            if (transactionId == null) {
-                LogUtil.w(TAG, "MmsUtils: Can't send AckInd; transaction id is null");
-                return;
-            }
-            if (!isMmsDataAvailable(subId)) {
-                LogUtil.w(TAG, "MmsUtils: Can't send AckInd; no data available");
-                return;
-            }
-            MmsSender.sendAcknowledgeForMmsDownload(context, subId, transactionId, contentLocation);
-        } catch (final MmsFailureException e) {
-            LogUtil.e(TAG, "sendAcknowledgeForMmsDownload: failed to retrieve message " + e, e);
-        } catch (final InvalidHeaderValueException e) {
-            LogUtil.e(TAG, "sendAcknowledgeForMmsDownload: failed to retrieve message " + e, e);
-        }
-    }
-
-    /**
-     * Try parsing a PDU without knowing the carrier. This is useful for importing
-     * MMS or storing draft when carrier info is not available
-     *
-     * @param data The PDU data
-     * @return Parsed PDU, null if failed to parse
-     */
-    private static GenericPdu parsePduForAnyCarrier(final byte[] data) {
-        GenericPdu pdu = null;
-        try {
-            pdu = (new PduParser(data, true/*parseContentDisposition*/)).parse();
-        } catch (final RuntimeException e) {
-            LogUtil.d(TAG, "parsePduForAnyCarrier: Failed to parse PDU with content disposition",
-                    e);
-        }
-        if (pdu == null) {
-            try {
-                pdu = (new PduParser(data, false/*parseContentDisposition*/)).parse();
-            } catch (final RuntimeException e) {
-                LogUtil.d(TAG,
-                        "parsePduForAnyCarrier: Failed to parse PDU without content disposition",
-                        e);
-            }
-        }
-        return pdu;
-    }
-
-    private static RetrieveConf receiveFromDumpFile(final byte[] data) throws MmsFailureException {
-        final GenericPdu pdu = parsePduForAnyCarrier(data);
-        if (pdu == null || !(pdu instanceof RetrieveConf)) {
-            LogUtil.e(TAG, "receiveFromDumpFile: Parsing retrieved PDU failure");
-            throw new MmsFailureException(MMS_REQUEST_MANUAL_RETRY, "Failed reading dump file");
-        }
-        return (RetrieveConf) pdu;
-    }
-
-    private static boolean isMmsDataAvailable(final int subId) {
-        if (OsUtil.isAtLeastL_MR1()) {
-            // L_MR1 above may support sending mms via wifi
-            return true;
-        }
-        final PhoneUtils phoneUtils = PhoneUtils.get(subId);
-        return !phoneUtils.isAirplaneModeOn() && phoneUtils.isMobileDataEnabled();
-    }
-
-    private static boolean isSmsDataAvailable(final int subId) {
-        if (OsUtil.isAtLeastL_MR1()) {
-            // L_MR1 above may support sending sms via wifi
-            return true;
-        }
-        final PhoneUtils phoneUtils = PhoneUtils.get(subId);
-        return !phoneUtils.isAirplaneModeOn();
-    }
-
-    public static StatusPlusUri sendMmsMessage(final Context context, final int subId,
-            final Uri messageUri, final Bundle extras) {
-        int status = MMS_REQUEST_MANUAL_RETRY;
-        int rawStatus = MessageData.RAW_TELEPHONY_STATUS_UNDEFINED;
-        if (!isMmsDataAvailable(subId)) {
-            LogUtil.w(TAG, "MmsUtils: failed to send message, no data available");
-            return new StatusPlusUri(MMS_REQUEST_MANUAL_RETRY,
-                    MessageData.RAW_TELEPHONY_STATUS_UNDEFINED,
-                    messageUri,
-                    SmsManager.MMS_ERROR_NO_DATA_NETWORK);
-        }
-        final PduPersister persister = PduPersister.getPduPersister(context);
-        try {
-            final SendReq sendReq = (SendReq) persister.load(messageUri);
-            if (sendReq == null) {
-                LogUtil.w(TAG, "MmsUtils: Sending MMS was deleted; uri = " + messageUri);
-                return new StatusPlusUri(MMS_REQUEST_NO_RETRY,
-                        MessageData.RAW_TELEPHONY_STATUS_UNDEFINED, messageUri);
-            }
-            if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                LogUtil.d(TAG, String.format("MmsUtils: Sending MMS, message uri: %s", messageUri));
-            }
-            extras.putInt(SendMessageAction.KEY_SUB_ID, subId);
-            MmsSender.sendMms(context, subId, messageUri, sendReq, extras);
-            return STATUS_PENDING;
-        } catch (final MmsFailureException e) {
-            status = e.retryHint;
-            rawStatus = e.rawStatus;
-            LogUtil.e(TAG, "MmsUtils: failed to send message " + e, e);
-        } catch (final InvalidHeaderValueException e) {
-            LogUtil.e(TAG, "MmsUtils: failed to send message " + e, e);
-        } catch (final IllegalArgumentException e) {
-            LogUtil.e(TAG, "MmsUtils: invalid message to send " + e, e);
-        } catch (final MmsException e) {
-            LogUtil.e(TAG, "MmsUtils: failed to send message " + e, e);
-        }
-        // If we get here, some exception occurred
-        return new StatusPlusUri(status, rawStatus, messageUri);
-    }
-
-    public static StatusPlusUri updateSentMmsMessageStatus(final Context context,
-            final Uri messageUri, final SendConf sendConf) {
-        final int status;
-        final int respStatus = sendConf.getResponseStatus();
-
-        final ContentValues values = new ContentValues(2);
-        values.put(Mms.RESPONSE_STATUS, respStatus);
-        final byte[] messageId = sendConf.getMessageId();
-        if (messageId != null && messageId.length > 0) {
-            values.put(Mms.MESSAGE_ID, PduPersister.toIsoString(messageId));
-        }
-        SqliteWrapper.update(context, context.getContentResolver(),
-                messageUri, values, null, null);
-        if (respStatus == PduHeaders.RESPONSE_STATUS_OK) {
-            status = MMS_REQUEST_SUCCEEDED;
-        } else if (respStatus >= PduHeaders.RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE
-                && respStatus < PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_FAILURE) {
-            // Only RESPONSE_STATUS_ERROR_TRANSIENT_FAILURE and RESPONSE_STATUS_ERROR_TRANSIENT
-            // _NETWORK_PROBLEM are used in the M-Send.conf. But for others transient failures
-            // including reserved values for future purposes, it should work same as transient
-            // failure always. (OMA-MMS-ENC-V1_2, 7.2.37. X-Mms-Response-Status field)
-            status = MMS_REQUEST_AUTO_RETRY;
-        } else {
-            // else permanent failure
-            status = MMS_REQUEST_MANUAL_RETRY;
-            LogUtil.e(TAG, "MmsUtils: failed to send message; respStatus = "
-                    + String.format("0x%X", respStatus));
-        }
-        return new StatusPlusUri(status, respStatus, messageUri);
-    }
-
-    public static void clearMmsStatus(final Context context, final Uri uri) {
-        // Messaging application can leave invalid values in STATUS field of M-Notification.ind
-        // messages.  Take this opportunity to clear it.
-        // Downloading status just kept in local db and not reflected into telephony.
-        final ContentValues values = new ContentValues(1);
-        values.putNull(Mms.STATUS);
-        SqliteWrapper.update(context, context.getContentResolver(),
-                    uri, values, null, null);
-    }
-
-    // Selection for dedup algorithm:
-    // ((m_type=NOTIFICATION_IND) OR (m_type=RETRIEVE_CONF)) AND (exp>NOW)) AND (t_id=xxxxxx)
-    // i.e. If it is NotificationInd or RetrieveConf and not expired
-    //      AND transaction id is the input id
-    private static final String DUP_NOTIFICATION_QUERY_SELECTION =
-            "((" + Mms.MESSAGE_TYPE + "=?) OR (" + Mms.MESSAGE_TYPE + "=?)) AND ("
-                    + Mms.EXPIRY + ">?) AND (" + Mms.TRANSACTION_ID + "=?)";
-
-    private static final int MAX_RETURN = 32;
-    private static String[] getDupNotifications(final Context context, final NotificationInd nInd) {
-        final byte[] rawTransactionId = nInd.getTransactionId();
-        if (rawTransactionId != null) {
-            // dedup algorithm
-            String selection = DUP_NOTIFICATION_QUERY_SELECTION;
-            final long nowSecs = System.currentTimeMillis() / 1000;
-            String[] selectionArgs = new String[] {
-                    Integer.toString(PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND),
-                    Integer.toString(PduHeaders.MESSAGE_TYPE_RETRIEVE_CONF),
-                    Long.toString(nowSecs),
-                    new String(rawTransactionId)
-            };
-
-            Cursor cursor = null;
-            try {
-                cursor = SqliteWrapper.query(
-                        context, context.getContentResolver(),
-                        Mms.CONTENT_URI, new String[] { Mms._ID },
-                        selection, selectionArgs, null);
-                final int dupCount = cursor.getCount();
-                if (dupCount > 0) {
-                    // We already received the same notification before.
-                    // Don't want to return too many dups. It is only for debugging.
-                    final int returnCount = dupCount < MAX_RETURN ? dupCount : MAX_RETURN;
-                    final String[] dups = new String[returnCount];
-                    for (int i = 0; cursor.moveToNext() && i < returnCount; i++) {
-                        dups[i] = cursor.getString(0);
-                    }
-                    return dups;
-                }
-            } catch (final SQLiteException e) {
-                LogUtil.e(TAG, "query failure: " + e, e);
-            } finally {
-                cursor.close();
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Try parse the address using RFC822 format. If it fails to parse, then return the
-     * original address
-     *
-     * @param address The MMS ind sender address to parse
-     * @return The real address. If in RFC822 format, returns the correct email.
-     */
-    private static String parsePotentialRfc822EmailAddress(final String address) {
-        if (address == null || !address.contains("@") || !address.contains("<")) {
-            return address;
-        }
-        final Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(address);
-        if (tokens != null && tokens.length > 0) {
-            for (final Rfc822Token token : tokens) {
-                if (token != null && !TextUtils.isEmpty(token.getAddress())) {
-                    return token.getAddress();
-                }
-            }
-        }
-        return address;
-    }
-
-    public static DatabaseMessages.MmsMessage processReceivedPdu(final Context context,
-            final byte[] pushData, final int subId, final String subPhoneNumber) {
-        // Parse data
-
-        // Insert placeholder row to telephony and local db
-        // Get raw PDU push-data from the message and parse it
-        final PduParser parser = new PduParser(pushData,
-                MmsConfig.get(subId).getSupportMmsContentDisposition());
-        final GenericPdu pdu = parser.parse();
-
-        if (null == pdu) {
-            LogUtil.e(TAG, "Invalid PUSH data");
-            return null;
-        }
-
-        final PduPersister p = PduPersister.getPduPersister(context);
-        final int type = pdu.getMessageType();
-
-        Uri messageUri = null;
-        switch (type) {
-            case PduHeaders.MESSAGE_TYPE_DELIVERY_IND:
-            case PduHeaders.MESSAGE_TYPE_READ_ORIG_IND: {
-                // TODO: Should this be commented out?
-//                threadId = findThreadId(context, pdu, type);
-//                if (threadId == -1) {
-//                    // The associated SendReq isn't found, therefore skip
-//                    // processing this PDU.
-//                    break;
-//                }
-
-//                Uri uri = p.persist(pdu, Inbox.CONTENT_URI, true,
-//                        MessagingPreferenceActivity.getIsGroupMmsEnabled(mContext), null);
-//                // Update thread ID for ReadOrigInd & DeliveryInd.
-//                ContentValues values = new ContentValues(1);
-//                values.put(Mms.THREAD_ID, threadId);
-//                SqliteWrapper.update(mContext, cr, uri, values, null, null);
-                LogUtil.w(TAG, "Received unsupported WAP Push, type=" + type);
-                break;
-            }
-            case PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND: {
-                final NotificationInd nInd = (NotificationInd) pdu;
-
-                if (MmsConfig.get(subId).getTransIdEnabled()) {
-                    final byte [] contentLocationTemp = nInd.getContentLocation();
-                    if ('=' == contentLocationTemp[contentLocationTemp.length - 1]) {
-                        final byte [] transactionIdTemp = nInd.getTransactionId();
-                        final byte [] contentLocationWithId =
-                                new byte [contentLocationTemp.length
-                                                                  + transactionIdTemp.length];
-                        System.arraycopy(contentLocationTemp, 0, contentLocationWithId,
-                                0, contentLocationTemp.length);
-                        System.arraycopy(transactionIdTemp, 0, contentLocationWithId,
-                                contentLocationTemp.length, transactionIdTemp.length);
-                        nInd.setContentLocation(contentLocationWithId);
-                    }
-                }
-                final String[] dups = getDupNotifications(context, nInd);
-                if (dups == null) {
-                    // TODO: Do we handle Rfc822 Email Addresses?
-                    //final String contentLocation =
-                    //        MmsUtils.bytesToString(nInd.getContentLocation(), "UTF-8");
-                    //final byte[] transactionId = nInd.getTransactionId();
-                    //final long messageSize = nInd.getMessageSize();
-                    //final long expiry = nInd.getExpiry();
-                    //final String transactionIdString =
-                    //        MmsUtils.bytesToString(transactionId, "UTF-8");
-
-                    //final EncodedStringValue fromEncoded = nInd.getFrom();
-                    // An mms ind received from email address will have from address shown as
-                    // "John Doe <johndoe@foobar.com>" but the actual received message will only
-                    // have the email address. So let's try to parse the RFC822 format to get the
-                    // real email. Otherwise we will create two conversations for the MMS
-                    // notification and the actual MMS message if auto retrieve is disabled.
-                    //final String from = parsePotentialRfc822EmailAddress(
-                    //        fromEncoded != null ? fromEncoded.getString() : null);
-
-                    Uri inboxUri = null;
-                    try {
-                        inboxUri = p.persist(pdu, Mms.Inbox.CONTENT_URI, subId, subPhoneNumber,
-                                null);
-                        messageUri = ContentUris.withAppendedId(Mms.CONTENT_URI,
-                                ContentUris.parseId(inboxUri));
-                    } catch (final MmsException e) {
-                        LogUtil.e(TAG, "Failed to save the data from PUSH: type=" + type, e);
-                    }
-                } else {
-                    LogUtil.w(TAG, "Received WAP Push is a dup: " + Joiner.on(',').join(dups));
-                    if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                        LogUtil.w(TAG, "Dup Transaction Id=" + new String(nInd.getTransactionId()));
-                    }
-                }
-                break;
-            }
-            default:
-                LogUtil.e(TAG, "Received unrecognized WAP Push, type=" + type);
-        }
-
-        DatabaseMessages.MmsMessage mms = null;
-        if (messageUri != null) {
-            mms = MmsUtils.loadMms(messageUri);
-        }
-        return mms;
-    }
-
-    public static Uri insertSendingMmsMessage(final Context context, final List<String> recipients,
-            final MessageData content, final int subId, final String subPhoneNumber,
-            final long timestamp) {
-        final SendReq sendReq = createMmsSendReq(
-                context, subId, recipients.toArray(new String[recipients.size()]), content,
-                DEFAULT_DELIVERY_REPORT_MODE,
-                DEFAULT_READ_REPORT_MODE,
-                DEFAULT_EXPIRY_TIME_IN_SECONDS,
-                DEFAULT_PRIORITY,
-                timestamp);
-        Uri messageUri = null;
-        if (sendReq != null) {
-            final Uri outboxUri = MmsUtils.insertSendReq(context, sendReq, subId, subPhoneNumber);
-            if (outboxUri != null) {
-                messageUri = ContentUris.withAppendedId(Telephony.Mms.CONTENT_URI,
-                        ContentUris.parseId(outboxUri));
-                if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "Mmsutils: Inserted sending MMS message into telephony, uri: "
-                            + outboxUri);
-                }
-            } else {
-                LogUtil.e(TAG, "insertSendingMmsMessage: failed to persist message into telephony");
-            }
-        }
-        return messageUri;
-    }
-
-    public static MessageData readSendingMmsMessage(final Uri messageUri,
-            final String conversationId, final String participantId, final String selfId) {
-        MessageData message = null;
-        if (messageUri != null) {
-            final DatabaseMessages.MmsMessage mms = MmsUtils.loadMms(messageUri);
-
-            // Make sure that the message has not been deleted from the Telephony DB
-            if (mms != null) {
-                // Transform the message
-                message = MmsUtils.createMmsMessage(mms, conversationId, participantId, selfId,
-                        MessageData.BUGLE_STATUS_OUTGOING_RESENDING);
-            }
-        }
-        return message;
-    }
-
-    /**
-     * Create an MMS message with subject, text and image
-     *
-     * @return Both the M-Send.req and the M-Send.conf for processing in the caller
-     * @throws MmsException
-     */
-    private static SendReq createMmsSendReq(final Context context, final int subId,
-            final String[] recipients, final MessageData message,
-            final boolean requireDeliveryReport, final boolean requireReadReport,
-            final long expiryTime, final int priority, final long timestampMillis) {
-        Assert.notNull(context);
-        if (recipients == null || recipients.length < 1) {
-            throw new IllegalArgumentException("MMS sendReq no recipient");
-        }
-
-        // Make a copy so we don't propagate changes to recipients to outside of this method
-        final String[] recipientsCopy = new String[recipients.length];
-        // Don't send phone number as is since some received phone number is malformed
-        // for sending. We need to strip the separators.
-        for (int i = 0; i < recipients.length; i++) {
-            final String recipient = recipients[i];
-            if (EmailAddress.isValidEmail(recipients[i])) {
-                // Don't do stripping for emails
-                recipientsCopy[i] = recipient;
-            } else {
-                recipientsCopy[i] = stripPhoneNumberSeparators(recipient);
-            }
-        }
-
-        SendReq sendReq = null;
-        try {
-            sendReq = createSendReq(context, subId, recipientsCopy,
-                    message, requireDeliveryReport,
-                    requireReadReport, expiryTime, priority, timestampMillis);
-        } catch (final InvalidHeaderValueException e) {
-            LogUtil.e(TAG, "InvalidHeaderValue creating sendReq PDU");
-        } catch (final OutOfMemoryError e) {
-            LogUtil.e(TAG, "Out of memory error creating sendReq PDU");
-        }
-        return sendReq;
-    }
-
-    /**
-     * Stripping out the invalid characters in a phone number before sending
-     * MMS. We only keep alphanumeric and '*', '#', '+'.
-     */
-    private static String stripPhoneNumberSeparators(final String phoneNumber) {
-        if (phoneNumber == null) {
-            return null;
-        }
-        final int len = phoneNumber.length();
-        final StringBuilder ret = new StringBuilder(len);
-        for (int i = 0; i < len; i++) {
-            final char c = phoneNumber.charAt(i);
-            if (Character.isLetterOrDigit(c) || c == '+' || c == '*' || c == '#') {
-                ret.append(c);
-            }
-        }
-        return ret.toString();
-    }
-
-    /**
-     * Create M-Send.req for the MMS message to be sent.
-     *
-     * @return the M-Send.req
-     * @throws InvalidHeaderValueException if there is any error in parsing the input
-     */
-    static SendReq createSendReq(final Context context, final int subId,
-            final String[] recipients, final MessageData message,
-            final boolean requireDeliveryReport,
-            final boolean requireReadReport, final long expiryTime, final int priority,
-            final long timestampMillis)
-            throws InvalidHeaderValueException {
-        final SendReq req = new SendReq();
-        // From, per spec
-        final String lineNumber = PhoneUtils.get(subId).getCanonicalForSelf(true/*allowOverride*/);
-        if (!TextUtils.isEmpty(lineNumber)) {
-            req.setFrom(new EncodedStringValue(lineNumber));
-        }
-        // To
-        final EncodedStringValue[] encodedNumbers = EncodedStringValue.encodeStrings(recipients);
-        if (encodedNumbers != null) {
-            req.setTo(encodedNumbers);
-        }
-        // Subject
-        if (!TextUtils.isEmpty(message.getMmsSubject())) {
-            req.setSubject(new EncodedStringValue(message.getMmsSubject()));
-        }
-        // Date
-        req.setDate(timestampMillis / 1000L);
-        // Body
-        final MmsInfo bodyInfo = MmsUtils.makePduBody(context, message, subId);
-        req.setBody(bodyInfo.mPduBody);
-        // Message size
-        req.setMessageSize(bodyInfo.mMessageSize);
-        // Message class
-        req.setMessageClass(PduHeaders.MESSAGE_CLASS_PERSONAL_STR.getBytes());
-        // Expiry
-        req.setExpiry(expiryTime);
-        // Priority
-        req.setPriority(priority);
-        // Delivery report
-        req.setDeliveryReport(requireDeliveryReport ? PduHeaders.VALUE_YES : PduHeaders.VALUE_NO);
-        // Read report
-        req.setReadReport(requireReadReport ? PduHeaders.VALUE_YES : PduHeaders.VALUE_NO);
-        return req;
-    }
-
-    public static boolean isDeliveryReportRequired(final int subId) {
-        if (!MmsConfig.get(subId).getSMSDeliveryReportsEnabled()) {
-            return false;
-        }
-        final Context context = Factory.get().getApplicationContext();
-        final Resources res = context.getResources();
-        final BuglePrefs prefs = BuglePrefs.getSubscriptionPrefs(subId);
-        final String deliveryReportKey = res.getString(R.string.delivery_reports_pref_key);
-        final boolean defaultValue = res.getBoolean(R.bool.delivery_reports_pref_default);
-        return prefs.getBoolean(deliveryReportKey, defaultValue);
-    }
-
-    public static int sendSmsMessage(final String recipient, final String messageText,
-            final Uri requestUri, final int subId,
-            final String smsServiceCenter, final boolean requireDeliveryReport) {
-        if (!isSmsDataAvailable(subId)) {
-            LogUtil.w(TAG, "MmsUtils: can't send SMS without radio");
-            return MMS_REQUEST_MANUAL_RETRY;
-        }
-        final Context context = Factory.get().getApplicationContext();
-        int status = MMS_REQUEST_MANUAL_RETRY;
-        try {
-            // Send a single message
-            final SendResult result = SmsSender.sendMessage(
-                    context,
-                    subId,
-                    recipient,
-                    messageText,
-                    smsServiceCenter,
-                    requireDeliveryReport,
-                    requestUri);
-            if (!result.hasPending()) {
-                // not timed out, check failures
-                final int failureLevel = result.getHighestFailureLevel();
-                switch (failureLevel) {
-                    case SendResult.FAILURE_LEVEL_NONE:
-                        status = MMS_REQUEST_SUCCEEDED;
-                        break;
-                    case SendResult.FAILURE_LEVEL_TEMPORARY:
-                        status = MMS_REQUEST_AUTO_RETRY;
-                        LogUtil.e(TAG, "MmsUtils: SMS temporary failure");
-                        break;
-                    case SendResult.FAILURE_LEVEL_PERMANENT:
-                        LogUtil.e(TAG, "MmsUtils: SMS permanent failure");
-                        break;
-                }
-            } else {
-                // Timed out
-                LogUtil.e(TAG, "MmsUtils: sending SMS timed out");
-            }
-        } catch (final Exception e) {
-            LogUtil.e(TAG, "MmsUtils: failed to send SMS " + e, e);
-        }
-        return status;
-    }
-
-    /**
-     * Delete SMS and MMS messages in a particular thread
-     *
-     * @return the number of messages deleted
-     */
-    public static int deleteThread(final long threadId, final long cutOffTimestampInMillis) {
-        final ContentResolver resolver = Factory.get().getApplicationContext().getContentResolver();
-        final Uri threadUri = ContentUris.withAppendedId(Telephony.Threads.CONTENT_URI, threadId);
-        if (cutOffTimestampInMillis < Long.MAX_VALUE) {
-            return resolver.delete(threadUri, Sms.DATE + "<=?",
-                    new String[] { Long.toString(cutOffTimestampInMillis) });
-        } else {
-            return resolver.delete(threadUri, null /* smsSelection */, null /* selectionArgs */);
-        }
-    }
-
-    /**
-     * Delete single SMS and MMS message
-     *
-     * @return number of rows deleted (should be 1 or 0)
-     */
-    public static int deleteMessage(final Uri messageUri) {
-        final ContentResolver resolver = Factory.get().getApplicationContext().getContentResolver();
-        return resolver.delete(messageUri, null /* selection */, null /* selectionArgs */);
-    }
-
-    public static byte[] createDebugNotificationInd(final String fileName) {
-        byte[] pduData = null;
-        try {
-            final Context context = Factory.get().getApplicationContext();
-            // Load the message file
-            final byte[] data = DebugUtils.receiveFromDumpFile(fileName);
-            final RetrieveConf retrieveConf = receiveFromDumpFile(data);
-            // Create the notification
-            final NotificationInd notification = new NotificationInd();
-            final long expiry = System.currentTimeMillis() / 1000 + 600;
-            notification.setTransactionId(fileName.getBytes());
-            notification.setMmsVersion(retrieveConf.getMmsVersion());
-            notification.setFrom(retrieveConf.getFrom());
-            notification.setSubject(retrieveConf.getSubject());
-            notification.setExpiry(expiry);
-            notification.setMessageSize(data.length);
-            notification.setMessageClass(retrieveConf.getMessageClass());
-
-            final Uri.Builder builder = MediaScratchFileProvider.getUriBuilder();
-            builder.appendPath(fileName);
-            final Uri contentLocation = builder.build();
-            notification.setContentLocation(contentLocation.toString().getBytes());
-
-            // Serialize
-            pduData = new PduComposer(context, notification).make();
-            if (pduData == null || pduData.length < 1) {
-                throw new IllegalArgumentException("Empty or zero length PDU data");
-            }
-        } catch (final MmsFailureException e) {
-            // Nothing to do
-        } catch (final InvalidHeaderValueException e) {
-            // Nothing to do
-        }
-        return pduData;
-    }
-
-    public static int mapRawStatusToErrorResourceId(final int bugleStatus, final int rawStatus) {
-        int stringResId = R.string.message_status_send_failed;
-        switch (rawStatus) {
-            case PduHeaders.RESPONSE_STATUS_ERROR_SERVICE_DENIED:
-            case PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_SERVICE_DENIED:
-            //case PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_LIMITATIONS_NOT_MET:
-            //case PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_REQUEST_NOT_ACCEPTED:
-            //case PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_FORWARDING_DENIED:
-            //case PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_REPLY_CHARGING_NOT_SUPPORTED:
-            //case PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_ADDRESS_HIDING_NOT_SUPPORTED:
-            //case PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_LACK_OF_PREPAID:
-                stringResId = R.string.mms_failure_outgoing_service;
-                break;
-            case PduHeaders.RESPONSE_STATUS_ERROR_SENDING_ADDRESS_UNRESOLVED:
-            case PduHeaders.RESPONSE_STATUS_ERROR_TRANSIENT_SENDNG_ADDRESS_UNRESOLVED:
-            case PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_SENDING_ADDRESS_UNRESOLVED:
-                stringResId = R.string.mms_failure_outgoing_address;
-                break;
-            case PduHeaders.RESPONSE_STATUS_ERROR_MESSAGE_FORMAT_CORRUPT:
-            case PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_MESSAGE_FORMAT_CORRUPT:
-                stringResId = R.string.mms_failure_outgoing_corrupt;
-                break;
-            case PduHeaders.RESPONSE_STATUS_ERROR_CONTENT_NOT_ACCEPTED:
-            case PduHeaders.RESPONSE_STATUS_ERROR_PERMANENT_CONTENT_NOT_ACCEPTED:
-                stringResId = R.string.mms_failure_outgoing_content;
-                break;
-            case PduHeaders.RESPONSE_STATUS_ERROR_UNSUPPORTED_MESSAGE:
-            //case PduHeaders.RESPONSE_STATUS_ERROR_MESSAGE_NOT_FOUND:
-            //case PduHeaders.RESPONSE_STATUS_ERROR_TRANSIENT_MESSAGE_NOT_FOUND:
-                stringResId = R.string.mms_failure_outgoing_unsupported;
-                break;
-            case MessageData.RAW_TELEPHONY_STATUS_MESSAGE_TOO_BIG:
-                stringResId = R.string.mms_failure_outgoing_too_large;
-                break;
-        }
-        return stringResId;
-    }
-
-    /**
-     * Dump the raw MMS data into a file
-     *
-     * @param rawPdu The raw pdu data
-     * @param pdu The parsed pdu, used to construct a dump file name
-     */
-    public static void dumpPdu(final byte[] rawPdu, final GenericPdu pdu) {
-        if (rawPdu == null || rawPdu.length < 1) {
-            return;
-        }
-        final String dumpFileName = MmsUtils.MMS_DUMP_PREFIX + getDumpFileId(pdu);
-        final File dumpFile = DebugUtils.getDebugFile(dumpFileName, true);
-        if (dumpFile != null) {
-            try {
-                final FileOutputStream fos = new FileOutputStream(dumpFile);
-                final BufferedOutputStream bos = new BufferedOutputStream(fos);
-                try {
-                    bos.write(rawPdu);
-                    bos.flush();
-                } finally {
-                    bos.close();
-                }
-                DebugUtils.ensureReadable(dumpFile);
-            } catch (final IOException e) {
-                LogUtil.e(TAG, "dumpPdu: " + e, e);
-            }
-        }
-    }
-
-    /**
-     * Get the dump file id based on the parsed PDU
-     * 1. Use message id if not empty
-     * 2. Use transaction id if message id is empty
-     * 3. If all above is empty, use random UUID
-     *
-     * @param pdu the parsed PDU
-     * @return the id of the dump file
-     */
-    private static String getDumpFileId(final GenericPdu pdu) {
-        String fileId = null;
-        if (pdu != null && pdu instanceof RetrieveConf) {
-            final RetrieveConf retrieveConf = (RetrieveConf) pdu;
-            if (retrieveConf.getMessageId() != null) {
-                fileId = new String(retrieveConf.getMessageId());
-            } else if (retrieveConf.getTransactionId() != null) {
-                fileId = new String(retrieveConf.getTransactionId());
-            }
-        }
-        if (TextUtils.isEmpty(fileId)) {
-            fileId = UUID.randomUUID().toString();
-        }
-        return fileId;
-    }
-}
diff --git a/src/com/android/messaging/sms/SmsException.java b/src/com/android/messaging/sms/SmsException.java
deleted file mode 100644
index 728db8c..0000000
--- a/src/com/android/messaging/sms/SmsException.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-/**
- * A generic Exception for errors in sending SMS
- */
-class SmsException extends Exception {
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Creates a new SmsException.
-     */
-    public SmsException() {
-        super();
-    }
-
-    /**
-     * Creates a new SmsException with the specified detail message.
-     *
-     * @param message the detail message.
-     */
-    public SmsException(String message) {
-        super(message);
-    }
-
-    /**
-     * Creates a new SmsException with the specified cause.
-     *
-     * @param cause the cause.
-     */
-    public SmsException(Throwable cause) {
-        super(cause);
-    }
-
-    /**
-     * Creates a new SmsException with the specified detail message and cause.
-     *
-     * @param message the detail message.
-     * @param cause the cause.
-     */
-    public SmsException(String message, Throwable cause) {
-        super(message, cause);
-    }
-}
diff --git a/src/com/android/messaging/sms/SmsReleaseStorage.java b/src/com/android/messaging/sms/SmsReleaseStorage.java
deleted file mode 100644
index 13a6284..0000000
--- a/src/com/android/messaging/sms/SmsReleaseStorage.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.content.res.Resources;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.LogUtil;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Class handling message cleanup when storage is low
- */
-public class SmsReleaseStorage {
-    /**
-     * Class representing a time duration specified by Gservices
-     */
-    public static class Duration {
-        // Time duration unit types
-        public static final int UNIT_WEEK = 'w';
-        public static final int UNIT_MONTH = 'm';
-        public static final int UNIT_YEAR = 'y';
-
-        // Number of units
-        public final int mCount;
-        // Unit type: week, month or year
-        public final int mUnit;
-
-        public Duration(final int count, final int unit) {
-            mCount = count;
-            mUnit = unit;
-        }
-    }
-
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static final Duration DEFAULT_DURATION = new Duration(1, Duration.UNIT_MONTH);
-
-    private static final Pattern DURATION_PATTERN = Pattern.compile("([1-9]+\\d*)(w|m|y)");
-    /**
-     * Parse message retaining time duration specified by Gservices
-     *
-     * @return The parsed time duration from Gservices
-     */
-    public static Duration parseMessageRetainingDuration() {
-        final String smsAutoDeleteMessageRetainingDuration =
-                BugleGservices.get().getString(
-                        BugleGservicesKeys.SMS_STORAGE_PURGING_MESSAGE_RETAINING_DURATION,
-                        BugleGservicesKeys.SMS_STORAGE_PURGING_MESSAGE_RETAINING_DURATION_DEFAULT);
-        final Matcher matcher = DURATION_PATTERN.matcher(smsAutoDeleteMessageRetainingDuration);
-        try {
-            if (matcher.matches()) {
-                return new Duration(
-                        Integer.parseInt(matcher.group(1)),
-                        matcher.group(2).charAt(0));
-            }
-        } catch (final NumberFormatException e) {
-            // Nothing to do
-        }
-        LogUtil.e(TAG, "SmsAutoDelete: invalid duration " +
-                smsAutoDeleteMessageRetainingDuration);
-        return DEFAULT_DURATION;
-    }
-
-    /**
-     * Get string representation of the time duration
-     *
-     * @param duration
-     * @return
-     */
-    public static String getMessageRetainingDurationString(final Duration duration) {
-        final Resources resources = Factory.get().getApplicationContext().getResources();
-        switch (duration.mUnit) {
-            case Duration.UNIT_WEEK:
-                return resources.getQuantityString(
-                        R.plurals.week_count, duration.mCount, duration.mCount);
-            case Duration.UNIT_MONTH:
-                return resources.getQuantityString(
-                        R.plurals.month_count, duration.mCount, duration.mCount);
-            case Duration.UNIT_YEAR:
-                return resources.getQuantityString(
-                        R.plurals.year_count, duration.mCount, duration.mCount);
-        }
-        throw new IllegalArgumentException(
-                "SmsAutoDelete: invalid duration unit " + duration.mUnit);
-    }
-
-    // Time conversations
-    private static final long WEEK_IN_MILLIS = 7 * 24 * 3600 * 1000L;
-    private static final long MONTH_IN_MILLIS = 30 * 24 * 3600 * 1000L;
-    private static final long YEAR_IN_MILLIS = 365 * 24 * 3600 * 1000L;
-
-    /**
-     * Convert time duration to time in milliseconds
-     *
-     * @param duration
-     * @return
-     */
-    public static long durationToTimeInMillis(final Duration duration) {
-        switch (duration.mUnit) {
-            case Duration.UNIT_WEEK:
-                return duration.mCount * WEEK_IN_MILLIS;
-            case Duration.UNIT_MONTH:
-                return duration.mCount * MONTH_IN_MILLIS;
-            case Duration.UNIT_YEAR:
-                return duration.mCount * YEAR_IN_MILLIS;
-        }
-        return -1L;
-    }
-
-    /**
-     * Delete message actions:
-     * 0: delete media messages
-     * 1: delete old messages
-     *
-     * @param actionIndex The index of the delete action to perform
-     * @param durationInMillis The time duration for retaining messages
-     */
-    public static void deleteMessages(final int actionIndex, final long durationInMillis) {
-        int deleted = 0;
-        switch (actionIndex) {
-            case 0: {
-                // Delete media
-                deleted = MmsUtils.deleteMediaMessages();
-                break;
-            }
-            case 1: {
-                // Delete old messages
-                final long now = System.currentTimeMillis();
-                final long cutOffTimestampInMillis = now - durationInMillis;
-                // Delete messages from telephony provider
-                deleted = MmsUtils.deleteMessagesOlderThan(cutOffTimestampInMillis);
-                break;
-            }
-            default: {
-                LogUtil.e(TAG, "SmsStorageStatusManager: invalid action " + actionIndex);
-                break;
-            }
-        }
-
-        if (deleted > 0) {
-            // Kick off a sync to update local db.
-            SyncManager.sync();
-        }
-    }
-}
diff --git a/src/com/android/messaging/sms/SmsSender.java b/src/com/android/messaging/sms/SmsSender.java
deleted file mode 100644
index e429995..0000000
--- a/src/com/android/messaging/sms/SmsSender.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.app.Activity;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.SystemClock;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.SmsManager;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.receiver.SendStatusReceiver;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.UiUtils;
-
-import java.util.ArrayList;
-import java.util.Random;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Class that sends chat message via SMS.
- *
- * The interface emulates a blocking sending similar to making an HTTP request.
- * It calls the SmsManager to send a (potentially multipart) message and waits
- * on the sent status on each part. The waiting has a timeout so it won't wait
- * forever. Once the sent status of all parts received, the call returns.
- * A successful sending requires success status for all parts. Otherwise, we
- * pick the highest level of failure as the error for the whole message, which
- * is used to determine if we need to retry the sending.
- */
-public class SmsSender {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    public static final String EXTRA_PART_ID = "part_id";
-
-    /*
-     * A map for pending sms messages. The key is the random request UUID.
-     */
-    private static ConcurrentHashMap<Uri, SendResult> sPendingMessageMap =
-            new ConcurrentHashMap<Uri, SendResult>();
-
-    private static final Random RANDOM = new Random();
-
-    /**
-     * Class that holds the sent status for all parts of a multipart message sending
-     */
-    public static class SendResult {
-        // Failure levels, used by the caller of the sender.
-        // For temporary failures, possibly we could retry the sending
-        // For permanent failures, we probably won't retry
-        public static final int FAILURE_LEVEL_NONE = 0;
-        public static final int FAILURE_LEVEL_TEMPORARY = 1;
-        public static final int FAILURE_LEVEL_PERMANENT = 2;
-
-        // Tracking the remaining pending parts in sending
-        private int mPendingParts;
-        // Tracking the highest level of failure among all parts
-        private int mHighestFailureLevel;
-
-        public SendResult(final int numOfParts) {
-            Assert.isTrue(numOfParts > 0);
-            mPendingParts = numOfParts;
-            mHighestFailureLevel = FAILURE_LEVEL_NONE;
-        }
-
-        // Update the sent status of one part
-        public void setPartResult(final int resultCode) {
-            mPendingParts--;
-            setHighestFailureLevel(resultCode);
-        }
-
-        public boolean hasPending() {
-            return mPendingParts > 0;
-        }
-
-        public int getHighestFailureLevel() {
-            return mHighestFailureLevel;
-        }
-
-        private int getFailureLevel(final int resultCode) {
-            switch (resultCode) {
-                case Activity.RESULT_OK:
-                    return FAILURE_LEVEL_NONE;
-                case SmsManager.RESULT_ERROR_NO_SERVICE:
-                    return FAILURE_LEVEL_TEMPORARY;
-                case SmsManager.RESULT_ERROR_RADIO_OFF:
-                    return FAILURE_LEVEL_PERMANENT;
-                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
-                    return FAILURE_LEVEL_PERMANENT;
-                default: {
-                    LogUtil.e(TAG, "SmsSender: Unexpected sent intent resultCode = " + resultCode);
-                    return FAILURE_LEVEL_PERMANENT;
-                }
-            }
-        }
-
-        private void setHighestFailureLevel(final int resultCode) {
-            final int level = getFailureLevel(resultCode);
-            if (level > mHighestFailureLevel) {
-                mHighestFailureLevel = level;
-            }
-        }
-
-        @Override
-        public String toString() {
-            final StringBuilder sb = new StringBuilder();
-            sb.append("SendResult:");
-            sb.append("Pending=").append(mPendingParts).append(",");
-            sb.append("HighestFailureLevel=").append(mHighestFailureLevel);
-            return sb.toString();
-        }
-    }
-
-    public static void setResult(final Uri requestId, final int resultCode,
-            final int errorCode, final int partId, int subId) {
-        if (resultCode != Activity.RESULT_OK) {
-            LogUtil.e(TAG, "SmsSender: failure in sending message part. "
-                    + " requestId=" + requestId + " partId=" + partId
-                    + " resultCode=" + resultCode + " errorCode=" + errorCode);
-            if (errorCode != SendStatusReceiver.NO_ERROR_CODE) {
-                final Context context = Factory.get().getApplicationContext();
-                UiUtils.showToastAtBottom(getSendErrorToastMessage(context, subId, errorCode));
-            }
-        } else {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "SmsSender: received sent result. " + " requestId=" + requestId
-                        + " partId=" + partId + " resultCode=" + resultCode);
-            }
-        }
-        if (requestId != null) {
-            final SendResult result = sPendingMessageMap.get(requestId);
-            if (result != null) {
-                synchronized (result) {
-                    result.setPartResult(resultCode);
-                    if (!result.hasPending()) {
-                        result.notifyAll();
-                    }
-                }
-            } else {
-                LogUtil.e(TAG, "SmsSender: ignoring sent result. " + " requestId=" + requestId
-                        + " partId=" + partId + " resultCode=" + resultCode);
-            }
-        }
-    }
-
-    private static String getSendErrorToastMessage(final Context context, final int subId,
-            final int errorCode) {
-        final String carrierName = PhoneUtils.get(subId).getCarrierName();
-        if (TextUtils.isEmpty(carrierName)) {
-            return context.getString(R.string.carrier_send_error_unknown_carrier, errorCode);
-        } else {
-            return context.getString(R.string.carrier_send_error, carrierName, errorCode);
-        }
-    }
-
-    // This should be called from a RequestWriter queue thread
-    public static SendResult sendMessage(final Context context, final int subId, String dest,
-            String message, final String serviceCenter, final boolean requireDeliveryReport,
-            final Uri messageUri) throws SmsException {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "SmsSender: sending message. " +
-                    "dest=" + dest + " message=" + message +
-                    " serviceCenter=" + serviceCenter +
-                    " requireDeliveryReport=" + requireDeliveryReport +
-                    " requestId=" + messageUri);
-        }
-        if (TextUtils.isEmpty(message)) {
-            throw new SmsException("SmsSender: empty text message");
-        }
-        // Get the real dest and message for email or alias if dest is email or alias
-        // Or sanitize the dest if dest is a number
-        if (!TextUtils.isEmpty(MmsConfig.get(subId).getEmailGateway()) &&
-                (MmsSmsUtils.isEmailAddress(dest) || MmsSmsUtils.isAlias(dest, subId))) {
-            // The original destination (email address) goes with the message
-            message = dest + " " + message;
-            // the new address is the email gateway #
-            dest = MmsConfig.get(subId).getEmailGateway();
-        } else {
-            // remove spaces and dashes from destination number
-            // (e.g. "801 555 1212" -> "8015551212")
-            // (e.g. "+8211-123-4567" -> "+82111234567")
-            dest = PhoneNumberUtils.stripSeparators(dest);
-        }
-        if (TextUtils.isEmpty(dest)) {
-            throw new SmsException("SmsSender: empty destination address");
-        }
-        // Divide the input message by SMS length limit
-        final SmsManager smsManager = PhoneUtils.get(subId).getSmsManager();
-        final ArrayList<String> messages = smsManager.divideMessage(message);
-        if (messages == null || messages.size() < 1) {
-            throw new SmsException("SmsSender: fails to divide message");
-        }
-        // Prepare the send result, which collects the send status for each part
-        final SendResult pendingResult = new SendResult(messages.size());
-        sPendingMessageMap.put(messageUri, pendingResult);
-        // Actually send the sms
-        sendInternal(
-                context, subId, dest, messages, serviceCenter, requireDeliveryReport, messageUri);
-        // Wait for pending intent to come back
-        synchronized (pendingResult) {
-            final long smsSendTimeoutInMillis = BugleGservices.get().getLong(
-                    BugleGservicesKeys.SMS_SEND_TIMEOUT_IN_MILLIS,
-                    BugleGservicesKeys.SMS_SEND_TIMEOUT_IN_MILLIS_DEFAULT);
-            final long beginTime = SystemClock.elapsedRealtime();
-            long waitTime = smsSendTimeoutInMillis;
-            // We could possibly be woken up while still pending
-            // so make sure we wait the full timeout period unless
-            // we have the send results of all parts.
-            while (pendingResult.hasPending() && waitTime > 0) {
-                try {
-                    pendingResult.wait(waitTime);
-                } catch (final InterruptedException e) {
-                    LogUtil.e(TAG, "SmsSender: sending wait interrupted");
-                }
-                waitTime = smsSendTimeoutInMillis - (SystemClock.elapsedRealtime() - beginTime);
-            }
-        }
-        // Either we timed out or have all the results (success or failure)
-        sPendingMessageMap.remove(messageUri);
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "SmsSender: sending completed. " +
-                    "dest=" + dest + " message=" + message + " result=" + pendingResult);
-        }
-        return pendingResult;
-    }
-
-    // Actually sending the message using SmsManager
-    private static void sendInternal(final Context context, final int subId, String dest,
-            final ArrayList<String> messages, final String serviceCenter,
-            final boolean requireDeliveryReport, final Uri messageUri) throws SmsException {
-        Assert.notNull(context);
-        final SmsManager smsManager = PhoneUtils.get(subId).getSmsManager();
-        final int messageCount = messages.size();
-        final ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>(messageCount);
-        final ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(messageCount);
-        for (int i = 0; i < messageCount; i++) {
-            // Make pending intents different for each message part
-            final int partId = (messageCount <= 1 ? 0 : i + 1);
-            if (requireDeliveryReport && (i == (messageCount - 1))) {
-                // TODO we only care about the delivery status of the last part
-                // Shall we have better tracking of delivery status of all parts?
-                deliveryIntents.add(PendingIntent.getBroadcast(
-                        context,
-                        partId,
-                        getSendStatusIntent(context, SendStatusReceiver.MESSAGE_DELIVERED_ACTION,
-                                messageUri, partId, subId),
-                        0/*flag*/));
-            } else {
-                deliveryIntents.add(null);
-            }
-            sentIntents.add(PendingIntent.getBroadcast(
-                    context,
-                    partId,
-                    getSendStatusIntent(context, SendStatusReceiver.MESSAGE_SENT_ACTION,
-                            messageUri, partId, subId),
-                    0/*flag*/));
-        }
-        try {
-            if (MmsConfig.get(subId).getSendMultipartSmsAsSeparateMessages()) {
-                // If multipart sms is not supported, send them as separate messages
-                for (int i = 0; i < messageCount; i++) {
-                    smsManager.sendTextMessage(dest,
-                            serviceCenter,
-                            messages.get(i),
-                            sentIntents.get(i),
-                            deliveryIntents.get(i));
-                }
-            } else {
-                smsManager.sendMultipartTextMessage(
-                        dest, serviceCenter, messages, sentIntents, deliveryIntents);
-            }
-        } catch (final Exception e) {
-            throw new SmsException("SmsSender: caught exception in sending " + e);
-        }
-    }
-
-    private static Intent getSendStatusIntent(final Context context, final String action,
-            final Uri requestUri, final int partId, final int subId) {
-        // Encode requestId in intent data
-        final Intent intent = new Intent(action, requestUri, context, SendStatusReceiver.class);
-        intent.putExtra(SendStatusReceiver.EXTRA_PART_ID, partId);
-        intent.putExtra(SendStatusReceiver.EXTRA_SUB_ID, subId);
-        return intent;
-    }
-}
diff --git a/src/com/android/messaging/sms/SmsStorageStatusManager.java b/src/com/android/messaging/sms/SmsStorageStatusManager.java
deleted file mode 100644
index 4f03195..0000000
--- a/src/com/android/messaging/sms/SmsStorageStatusManager.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.res.Resources;
-import androidx.core.app.NotificationCompat;
-import androidx.core.app.NotificationManagerCompat;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.PendingIntentConstants;
-import com.android.messaging.util.PhoneUtils;
-
-/**
- * Class that handles SMS auto delete and notification when storage is low
- */
-public class SmsStorageStatusManager {
-    /**
-     * Handles storage low signal for SMS
-     */
-    public static void handleStorageLow() {
-        if (!PhoneUtils.getDefault().isSmsEnabled()) {
-            return;
-        }
-
-        // TODO: Auto-delete messages, when that setting exists and is enabled
-
-        // Notify low storage for SMS
-        postStorageLowNotification();
-    }
-
-    /**
-     * Handles storage OK signal for SMS
-     */
-    public static void handleStorageOk() {
-        if (!PhoneUtils.getDefault().isSmsEnabled()) {
-            return;
-        }
-        cancelStorageLowNotification();
-    }
-
-    /**
-     * Post sms storage low notification
-     */
-    private static void postStorageLowNotification() {
-        final Context context = Factory.get().getApplicationContext();
-        final Resources resources = context.getResources();
-        final PendingIntent pendingIntent = UIIntents.get()
-                .getPendingIntentForLowStorageNotifications(context);
-
-        final NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
-        builder.setContentTitle(resources.getString(R.string.sms_storage_low_title))
-                .setTicker(resources.getString(R.string.sms_storage_low_notification_ticker))
-                .setSmallIcon(R.drawable.ic_failed_light)
-                .setPriority(Notification.PRIORITY_DEFAULT)
-                .setOngoing(true)      // Can't be swiped off
-                .setAutoCancel(false)  // Don't auto cancel
-                .setContentIntent(pendingIntent);
-
-        final NotificationCompat.BigTextStyle bigTextStyle =
-                new NotificationCompat.BigTextStyle(builder);
-        bigTextStyle.bigText(resources.getString(R.string.sms_storage_low_text));
-        final Notification notification = bigTextStyle.build();
-
-        final NotificationManagerCompat notificationManager =
-                NotificationManagerCompat.from(Factory.get().getApplicationContext());
-
-        notificationManager.notify(getNotificationTag(),
-                PendingIntentConstants.SMS_STORAGE_LOW_NOTIFICATION_ID, notification);
-    }
-
-    /**
-     * Cancel the notification
-     */
-    public static void cancelStorageLowNotification() {
-        final NotificationManagerCompat notificationManager =
-                NotificationManagerCompat.from(Factory.get().getApplicationContext());
-        notificationManager.cancel(getNotificationTag(),
-                PendingIntentConstants.SMS_STORAGE_LOW_NOTIFICATION_ID);
-    }
-
-    private static String getNotificationTag() {
-        return Factory.get().getApplicationContext().getPackageName() + ":smsstoragelow";
-    }
-}
diff --git a/src/com/android/messaging/sms/SystemProperties.java b/src/com/android/messaging/sms/SystemProperties.java
deleted file mode 100644
index 669e448..0000000
--- a/src/com/android/messaging/sms/SystemProperties.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.sms;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * Hacky way to call the hidden SystemProperties class API
- */
-class SystemProperties {
-    private static Method sSystemPropertiesGetMethod = null;
-
-    public static String get(final String name) {
-        if (sSystemPropertiesGetMethod == null) {
-            try {
-                final Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
-                if (systemPropertiesClass != null) {
-                    sSystemPropertiesGetMethod =
-                            systemPropertiesClass.getMethod("get", String.class);
-                }
-            } catch (final ClassNotFoundException e) {
-                // Nothing to do
-            } catch (final NoSuchMethodException e) {
-                // Nothing to do
-            }
-        }
-        if (sSystemPropertiesGetMethod != null) {
-            try {
-                return (String) sSystemPropertiesGetMethod.invoke(null, name);
-            } catch (final IllegalArgumentException e) {
-                // Nothing to do
-            } catch (final IllegalAccessException e) {
-                // Nothing to do
-            } catch (final InvocationTargetException e) {
-                // Nothing to do
-            }
-        }
-        return null;
-    }
-}
diff --git a/src/com/android/messaging/ui/AsyncImageView.java b/src/com/android/messaging/ui/AsyncImageView.java
deleted file mode 100644
index 7d057b3..0000000
--- a/src/com/android/messaging/ui/AsyncImageView.java
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Path;
-import android.graphics.RectF;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import androidx.annotation.Nullable;
-import android.support.rastermill.FrameSequenceDrawable;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.widget.ImageView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.media.BindableMediaRequest;
-import com.android.messaging.datamodel.media.GifImageResource;
-import com.android.messaging.datamodel.media.ImageRequest;
-import com.android.messaging.datamodel.media.ImageRequestDescriptor;
-import com.android.messaging.datamodel.media.ImageResource;
-import com.android.messaging.datamodel.media.MediaRequest;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.datamodel.media.MediaResourceManager.MediaResourceLoadListener;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.ThreadUtil;
-import com.android.messaging.util.UiUtils;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.HashSet;
-
-/**
- * An ImageView used to asynchronously request an image from MediaResourceManager and render it.
- */
-public class AsyncImageView extends ImageView implements MediaResourceLoadListener<ImageResource> {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-    // 100ms delay before disposing the image in case the AsyncImageView is re-added to the UI
-    private static final int DISPOSE_IMAGE_DELAY = 100;
-
-    // AsyncImageView has a 1-1 binding relationship with an ImageRequest instance that requests
-    // the image from the MediaResourceManager. Since the request is done asynchronously, we
-    // want to make sure the image view is always bound to the latest image request that it
-    // issues, so that when the image is loaded, the ImageRequest (which extends BindableData)
-    // will be able to figure out whether the binding is still valid and whether the loaded image
-    // should be delivered to the AsyncImageView via onMediaResourceLoaded() callback.
-    @VisibleForTesting
-    public final Binding<BindableMediaRequest<ImageResource>> mImageRequestBinding;
-
-    /** True if we want the image to fade in when it loads */
-    private boolean mFadeIn;
-
-    /** True if we want the image to reveal (scale) when it loads. When set to true, this
-     * will take precedence over {@link #mFadeIn} */
-    private final boolean mReveal;
-
-    // The corner radius for drawing rounded corners around bitmap. The default value is zero
-    // (no rounded corners)
-    private final int mCornerRadius;
-    private final Path mRoundedCornerClipPath;
-    private int mClipPathWidth;
-    private int mClipPathHeight;
-
-    // A placeholder drawable that takes the spot of the image when it's loading. The default
-    // setting is null (no placeholder).
-    private final Drawable mPlaceholderDrawable;
-    protected ImageResource mImageResource;
-    private final Runnable mDisposeRunnable = new Runnable() {
-        @Override
-        public void run() {
-            if (mImageRequestBinding.isBound()) {
-                mDetachedRequestDescriptor = (ImageRequestDescriptor)
-                        mImageRequestBinding.getData().getDescriptor();
-            }
-            unbindView();
-            releaseImageResource();
-        }
-    };
-
-    private AsyncImageViewDelayLoader mDelayLoader;
-    private ImageRequestDescriptor mDetachedRequestDescriptor;
-
-    public AsyncImageView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mImageRequestBinding = BindingBase.createBinding(this);
-        final TypedArray attr = context.obtainStyledAttributes(attrs, R.styleable.AsyncImageView,
-                0, 0);
-        mFadeIn = attr.getBoolean(R.styleable.AsyncImageView_fadeIn, true);
-        mReveal = attr.getBoolean(R.styleable.AsyncImageView_reveal, false);
-        mPlaceholderDrawable = attr.getDrawable(R.styleable.AsyncImageView_placeholderDrawable);
-        mCornerRadius = attr.getDimensionPixelSize(R.styleable.AsyncImageView_cornerRadius, 0);
-        mRoundedCornerClipPath = new Path();
-
-        attr.recycle();
-    }
-
-    /**
-     * The main entrypoint for AsyncImageView to load image resource given an ImageRequestDescriptor
-     * @param descriptor the request descriptor, or null if no image should be displayed
-     */
-    public void setImageResourceId(@Nullable final ImageRequestDescriptor descriptor) {
-        final String requestKey = (descriptor == null) ? null : descriptor.getKey();
-        if (mImageRequestBinding.isBound()) {
-            if (TextUtils.equals(mImageRequestBinding.getData().getKey(), requestKey)) {
-                // Don't re-request the bitmap if the new request is for the same resource.
-                return;
-            }
-            unbindView();
-        } else {
-            mDetachedRequestDescriptor = null;
-        }
-        setImage(null);
-        resetTransientViewStates();
-        if (!TextUtils.isEmpty(requestKey)) {
-            maybeSetupPlaceholderDrawable(descriptor);
-            final BindableMediaRequest<ImageResource> imageRequest =
-                    descriptor.buildAsyncMediaRequest(getContext(), this);
-            requestImage(imageRequest);
-        }
-    }
-
-    /**
-     * Sets a delay loader that centrally manages image request delay loading logic.
-     */
-    public void setDelayLoader(final AsyncImageViewDelayLoader delayLoader) {
-        Assert.isTrue(mDelayLoader == null);
-        mDelayLoader = delayLoader;
-    }
-
-    /**
-     * Called by the delay loader when we can resume image loading.
-     */
-    public void resumeLoading() {
-        Assert.notNull(mDelayLoader);
-        Assert.isTrue(mImageRequestBinding.isBound());
-        MediaResourceManager.get().requestMediaResourceAsync(mImageRequestBinding.getData());
-    }
-
-    /**
-     * Setup the placeholder drawable if:
-     * 1. There's an image to be loaded AND
-     * 2. We are given a placeholder drawable AND
-     * 3. The descriptor provided us with source width and height.
-     */
-    private void maybeSetupPlaceholderDrawable(final ImageRequestDescriptor descriptor) {
-        if (!TextUtils.isEmpty(descriptor.getKey()) && mPlaceholderDrawable != null) {
-            if (descriptor.sourceWidth != ImageRequest.UNSPECIFIED_SIZE &&
-                descriptor.sourceHeight != ImageRequest.UNSPECIFIED_SIZE) {
-                // Set a transparent inset drawable to the foreground so it will mimick the final
-                // size of the image, and use the background to show the actual placeholder
-                // drawable.
-                setImageDrawable(PlaceholderInsetDrawable.fromDrawable(
-                        new ColorDrawable(Color.TRANSPARENT),
-                        descriptor.sourceWidth, descriptor.sourceHeight));
-            }
-            setBackground(mPlaceholderDrawable);
-        }
-    }
-
-    protected void setImage(final ImageResource resource) {
-        setImage(resource, false /* isCached */);
-    }
-
-    protected void setImage(final ImageResource resource, final boolean isCached) {
-        // Switch reference to the new ImageResource. Make sure we release the current
-        // resource and addRef() on the new resource so that the underlying bitmaps don't
-        // get leaked or get recycled by the bitmap cache.
-        releaseImageResource();
-        // Ensure that any pending dispose runnables get removed.
-        ThreadUtil.getMainThreadHandler().removeCallbacks(mDisposeRunnable);
-        // The drawable may require work to get if its a static object so try to only make this call
-        // once.
-        final Drawable drawable = (resource != null) ? resource.getDrawable(getResources()) : null;
-        if (drawable != null) {
-            mImageResource = resource;
-            mImageResource.addRef();
-            setImageDrawable(drawable);
-            if (drawable instanceof FrameSequenceDrawable) {
-                ((FrameSequenceDrawable) drawable).start();
-            }
-
-            if (getVisibility() == VISIBLE) {
-                if (mReveal) {
-                    setVisibility(INVISIBLE);
-                    UiUtils.revealOrHideViewWithAnimation(this, VISIBLE, null);
-                } else if (mFadeIn && !isCached) {
-                    // Hide initially to avoid flash.
-                    setAlpha(0F);
-                    animate().alpha(1F).start();
-                }
-            }
-
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                if (mImageResource instanceof GifImageResource) {
-                    LogUtil.v(TAG, "setImage size unknown -- it's a GIF");
-                } else {
-                    LogUtil.v(TAG, "setImage size: " + mImageResource.getMediaSize() +
-                            " width: " + mImageResource.getBitmap().getWidth() +
-                            " heigh: " + mImageResource.getBitmap().getHeight());
-                }
-            }
-        }
-        invalidate();
-    }
-
-    private void requestImage(final BindableMediaRequest<ImageResource> request) {
-        mImageRequestBinding.bind(request);
-        if (mDelayLoader == null || !mDelayLoader.isDelayLoadingImage()) {
-            MediaResourceManager.get().requestMediaResourceAsync(request);
-        } else {
-            mDelayLoader.registerView(this);
-        }
-    }
-
-    @Override
-    public void onMediaResourceLoaded(final MediaRequest<ImageResource> request,
-            final ImageResource resource, final boolean isCached) {
-        if (mImageResource != resource) {
-            setImage(resource, isCached);
-        }
-    }
-
-    @Override
-    public void onMediaResourceLoadError(
-            final MediaRequest<ImageResource> request, final Exception exception) {
-        // Media load failed, unbind and reset bitmap to default.
-        unbindView();
-        setImage(null);
-    }
-
-    private void releaseImageResource() {
-        final Drawable drawable = getDrawable();
-        if (drawable instanceof FrameSequenceDrawable) {
-            ((FrameSequenceDrawable) drawable).stop();
-            ((FrameSequenceDrawable) drawable).destroy();
-        }
-        if (mImageResource != null) {
-            mImageResource.release();
-            mImageResource = null;
-        }
-        setImageDrawable(null);
-        setBackground(null);
-    }
-
-    /**
-     * Resets transient view states (eg. alpha, animations) before rebinding/reusing the view.
-     */
-    private void resetTransientViewStates() {
-        clearAnimation();
-        setAlpha(1F);
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        // If it was recently removed, then cancel disposing, we're still using it.
-        ThreadUtil.getMainThreadHandler().removeCallbacks(mDisposeRunnable);
-
-        // When the image view gets detached and immediately re-attached, any fade-in animation
-        // will be terminated, leaving the view in a semi-transparent state. Make sure we restore
-        // alpha when the view is re-attached.
-        if (mFadeIn) {
-            setAlpha(1F);
-        }
-
-        // Check whether we are in a simple reuse scenario: detached from window, and reattached
-        // later without rebinding. This may be done by containers such as the RecyclerView to
-        // reuse the views. In this case, we would like to rebind the original image request.
-        if (!mImageRequestBinding.isBound() && mDetachedRequestDescriptor != null) {
-            setImageResourceId(mDetachedRequestDescriptor);
-        }
-        mDetachedRequestDescriptor = null;
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        // Dispose the bitmap, but if an AysncImageView is removed from the window, then quickly
-        // re-added, we shouldn't dispose, so wait a short time before disposing
-        ThreadUtil.getMainThreadHandler().postDelayed(mDisposeRunnable, DISPOSE_IMAGE_DELAY);
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-        // The base implementation does not honor the minimum sizes. We try to to honor it here.
-
-        final int measuredWidth = getMeasuredWidth();
-        final int measuredHeight = getMeasuredHeight();
-        if (measuredWidth >= getMinimumWidth() || measuredHeight >= getMinimumHeight()) {
-            // We are ok if either of the minimum sizes is honored. Note that satisfying both the
-            // sizes may not be possible, depending on the aspect ratio of the image and whether
-            // a maximum size has been specified. This implementation only tries to handle the case
-            // where both the minimum sizes are not being satisfied.
-            return;
-        }
-
-        if (!getAdjustViewBounds()) {
-            // The base implementation is reasonable in this case. If the view bounds cannot be
-            // changed, it is not possible to satisfy the minimum sizes anyway.
-            return;
-        }
-
-        final int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
-        final int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
-        if (widthSpecMode == MeasureSpec.EXACTLY && heightSpecMode == MeasureSpec.EXACTLY) {
-            // The base implementation is reasonable in this case.
-            return;
-        }
-
-        int width = measuredWidth;
-        int height = measuredHeight;
-        // Get the minimum sizes that will honor other constraints as well.
-        final int minimumWidth = resolveSize(
-                getMinimumWidth(), getMaxWidth(), widthMeasureSpec);
-        final int minimumHeight = resolveSize(
-                getMinimumHeight(), getMaxHeight(), heightMeasureSpec);
-        final float aspectRatio = measuredWidth / (float) measuredHeight;
-        if (aspectRatio == 0) {
-            // If the image is (close to) infinitely high, there is not much we can do.
-            return;
-        }
-
-        if (width < minimumWidth) {
-            height = resolveSize((int) (minimumWidth / aspectRatio),
-                    getMaxHeight(), heightMeasureSpec);
-            width = (int) (height * aspectRatio);
-        }
-
-        if (height < minimumHeight) {
-            width = resolveSize((int) (minimumHeight * aspectRatio),
-                    getMaxWidth(), widthMeasureSpec);
-            height = (int) (width / aspectRatio);
-        }
-
-        setMeasuredDimension(width, height);
-    }
-
-    private static int resolveSize(int desiredSize, int maxSize, int measureSpec) {
-        final int specMode = MeasureSpec.getMode(measureSpec);
-        final int specSize =  MeasureSpec.getSize(measureSpec);
-        switch(specMode) {
-            case MeasureSpec.UNSPECIFIED:
-                return Math.min(desiredSize, maxSize);
-
-            case MeasureSpec.AT_MOST:
-                return Math.min(Math.min(desiredSize, specSize), maxSize);
-
-            default:
-                Assert.fail("Unreachable");
-                return specSize;
-        }
-    }
-
-    @Override
-    protected void onDraw(final Canvas canvas) {
-        if (mCornerRadius > 0) {
-            final int currentWidth = this.getWidth();
-            final int currentHeight = this.getHeight();
-            if (mClipPathWidth != currentWidth || mClipPathHeight != currentHeight) {
-                final RectF rect = new RectF(0, 0, currentWidth, currentHeight);
-                mRoundedCornerClipPath.reset();
-                mRoundedCornerClipPath.addRoundRect(rect, mCornerRadius, mCornerRadius,
-                        Path.Direction.CW);
-                mClipPathWidth = currentWidth;
-                mClipPathHeight = currentHeight;
-            }
-
-            final int saveCount = canvas.getSaveCount();
-            canvas.save();
-            canvas.clipPath(mRoundedCornerClipPath);
-            super.onDraw(canvas);
-            canvas.restoreToCount(saveCount);
-        } else {
-            super.onDraw(canvas);
-        }
-    }
-
-    private void unbindView() {
-        if (mImageRequestBinding.isBound()) {
-            mImageRequestBinding.unbind();
-            if (mDelayLoader != null) {
-                mDelayLoader.unregisterView(this);
-            }
-        }
-    }
-
-    /**
-     * As a performance optimization, the consumer of the AsyncImageView may opt to delay loading
-     * the image when it's busy doing other things (such as when a list view is scrolling). In
-     * order to do this, the consumer can create a new AsyncImageViewDelayLoader instance to be
-     * shared among all relevant AsyncImageViews (through setDelayLoader() method), and call
-     * onStartDelayLoading() and onStopDelayLoading() to start and stop delay loading, respectively.
-     */
-    public static class AsyncImageViewDelayLoader {
-        private boolean mShouldDelayLoad;
-        private final HashSet<AsyncImageView> mAttachedViews;
-
-        public AsyncImageViewDelayLoader() {
-            mAttachedViews = new HashSet<AsyncImageView>();
-        }
-
-        private void registerView(final AsyncImageView view) {
-            mAttachedViews.add(view);
-        }
-
-        private void unregisterView(final AsyncImageView view) {
-            mAttachedViews.remove(view);
-        }
-
-        public boolean isDelayLoadingImage() {
-            return mShouldDelayLoad;
-        }
-
-        /**
-         * Called by the consumer of this view to delay loading images
-         */
-        public void onDelayLoading() {
-            // Don't need to explicitly tell the AsyncImageView to stop loading since
-            // ImageRequests are not cancellable.
-            mShouldDelayLoad = true;
-        }
-
-        /**
-         * Called by the consumer of this view to resume loading images
-         */
-        public void onResumeLoading() {
-            if (mShouldDelayLoad) {
-                mShouldDelayLoad = false;
-
-                // Notify all attached views to resume loading.
-                for (final AsyncImageView view : mAttachedViews) {
-                    view.resumeLoading();
-                }
-                mAttachedViews.clear();
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/AttachmentPreview.java b/src/com/android/messaging/ui/AttachmentPreview.java
deleted file mode 100644
index f4465c4..0000000
--- a/src/com/android/messaging/ui/AttachmentPreview.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.animation.Animator;
-import android.animation.ObjectAnimator;
-import android.content.Context;
-import android.graphics.Rect;
-import android.os.Handler;
-import android.os.Looper;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.FrameLayout;
-import android.widget.ImageButton;
-import android.widget.ScrollView;
-
-import com.android.messaging.R;
-import com.android.messaging.annotation.VisibleForAnimation;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.MediaPickerMessagePartData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.PendingAttachmentData;
-import com.android.messaging.ui.MultiAttachmentLayout.OnAttachmentClickListener;
-import com.android.messaging.ui.animation.PopupTransitionAnimation;
-import com.android.messaging.ui.conversation.ComposeMessageView;
-import com.android.messaging.ui.conversation.ConversationFragment;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ThreadUtil;
-import com.android.messaging.util.UiUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class AttachmentPreview extends ScrollView implements OnAttachmentClickListener {
-    private FrameLayout mAttachmentView;
-    private ComposeMessageView mComposeMessageView;
-    private ImageButton mCloseButton;
-    private int mAnimatedHeight = -1;
-    private Animator mCloseGapAnimator;
-    private boolean mPendingFirstUpdate;
-    private Handler mHandler;
-    private Runnable mHideRunnable;
-    private boolean mPendingHideCanceled;
-
-    private PopupTransitionAnimation mPopupTransitionAnimation;
-
-    private static final int CLOSE_BUTTON_REVEAL_STAGGER_MILLIS = 300;
-
-    public AttachmentPreview(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mHandler = new Handler(Looper.getMainLooper());
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mCloseButton = (ImageButton) findViewById(R.id.close_button);
-        mCloseButton.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View view) {
-                mComposeMessageView.clearAttachments();
-            }
-        });
-
-        mAttachmentView = (FrameLayout) findViewById(R.id.attachment_view);
-
-        // The attachment preview is a scroll view so that it can show the bottom portion of the
-        // attachment whenever the space is tight (e.g. when in landscape mode). Per design
-        // request we'd like to make the attachment view always scrolled to the bottom.
-        addOnLayoutChangeListener(new OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(final View v, final int left, final int top, final int right,
-                    final int bottom, final int oldLeft, final int oldTop, final int oldRight,
-                    final int oldBottom) {
-                post(new Runnable() {
-                    @Override
-                    public void run() {
-                        final int childCount = getChildCount();
-                        if (childCount > 0) {
-                            final View lastChild = getChildAt(childCount - 1);
-                            scrollTo(getScrollX(), lastChild.getBottom() - getHeight());
-                        }
-                    }
-                });
-            }
-        });
-        mPendingFirstUpdate = true;
-    }
-
-    public void setComposeMessageView(final ComposeMessageView composeMessageView) {
-        mComposeMessageView = composeMessageView;
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        if (mAnimatedHeight >= 0) {
-            setMeasuredDimension(getMeasuredWidth(), mAnimatedHeight);
-        }
-    }
-
-    private void cancelPendingHide() {
-        mPendingHideCanceled = true;
-    }
-
-    public void hideAttachmentPreview() {
-        if (getVisibility() != GONE) {
-            UiUtils.revealOrHideViewWithAnimation(mCloseButton, GONE,
-                    null /* onFinishRunnable */);
-            startCloseGapAnimationOnAttachmentClear();
-
-            if (mAttachmentView.getChildCount() > 0) {
-                mPendingHideCanceled = false;
-                final View viewToHide = mAttachmentView.getChildCount() > 1 ?
-                        mAttachmentView : mAttachmentView.getChildAt(0);
-                UiUtils.revealOrHideViewWithAnimation(viewToHide, INVISIBLE,
-                        new Runnable() {
-                            @Override
-                            public void run() {
-                                // Only hide if we are didn't get overruled by showing
-                                if (!mPendingHideCanceled) {
-                                    stopPopupAnimation();
-                                    mAttachmentView.removeAllViews();
-                                    setVisibility(GONE);
-                                }
-                            }
-                        });
-            } else {
-                mAttachmentView.removeAllViews();
-                setVisibility(GONE);
-            }
-        }
-    }
-
-    // returns true if we have attachments
-    public boolean onAttachmentsChanged(final DraftMessageData draftMessageData) {
-        final boolean isFirstUpdate = mPendingFirstUpdate;
-        final List<MessagePartData> attachments = draftMessageData.getReadOnlyAttachments();
-        final List<PendingAttachmentData> pendingAttachments =
-                draftMessageData.getReadOnlyPendingAttachments();
-
-        // Any change in attachments would invalidate the animated height animation.
-        cancelCloseGapAnimation();
-        mPendingFirstUpdate = false;
-
-        final int combinedAttachmentCount = attachments.size() + pendingAttachments.size();
-        mCloseButton.setContentDescription(getResources()
-                .getQuantityString(R.plurals.attachment_preview_close_content_description,
-                        combinedAttachmentCount));
-        if (combinedAttachmentCount == 0) {
-            mHideRunnable = new Runnable() {
-                @Override
-                public void run() {
-                    mHideRunnable = null;
-                    // Only start the hiding if there are still no attachments
-                    if (attachments.size() + pendingAttachments.size() == 0) {
-                        hideAttachmentPreview();
-                    }
-                }
-            };
-            if (draftMessageData.isSending()) {
-                // Wait to hide until the message is ready to start animating
-                // We'll execute immediately when the animation triggers
-                mHandler.postDelayed(mHideRunnable,
-                        ConversationFragment.MESSAGE_ANIMATION_MAX_WAIT);
-            } else {
-                // Run immediately when clearing attachments
-                mHideRunnable.run();
-            }
-            return false;
-        }
-
-        cancelPendingHide();  // We're showing
-        if (getVisibility() != VISIBLE) {
-            setVisibility(VISIBLE);
-            mAttachmentView.setVisibility(VISIBLE);
-
-            // Don't animate in the close button if this is the first update after view creation.
-            // This is the initial draft load from database for pre-existing drafts.
-            if (!isFirstUpdate) {
-                // Reveal the close button after the view animates in.
-                mCloseButton.setVisibility(INVISIBLE);
-                ThreadUtil.getMainThreadHandler().postDelayed(new Runnable() {
-                    @Override
-                    public void run() {
-                        UiUtils.revealOrHideViewWithAnimation(mCloseButton, VISIBLE,
-                                null /* onFinishRunnable */);
-                    }
-                }, UiUtils.MEDIAPICKER_TRANSITION_DURATION + CLOSE_BUTTON_REVEAL_STAGGER_MILLIS);
-            }
-        }
-
-        // Merge the pending attachment list with real attachment.  Design would prefer these be
-        // in LIFO order user can see added images past the 5th one but we also want them to be in
-        // order and we want it to be WYSIWYG.
-        final List<MessagePartData> combinedAttachments = new ArrayList<>();
-        combinedAttachments.addAll(attachments);
-        combinedAttachments.addAll(pendingAttachments);
-
-        final LayoutInflater layoutInflater = LayoutInflater.from(getContext());
-        if (combinedAttachmentCount > 1) {
-            MultiAttachmentLayout multiAttachmentLayout = null;
-            Rect transitionRect = null;
-            if (mAttachmentView.getChildCount() > 0) {
-                final View firstChild = mAttachmentView.getChildAt(0);
-                if (firstChild instanceof MultiAttachmentLayout) {
-                    Assert.equals(1, mAttachmentView.getChildCount());
-                    multiAttachmentLayout = (MultiAttachmentLayout) firstChild;
-                    multiAttachmentLayout.bindAttachments(combinedAttachments,
-                            null /* transitionRect */, combinedAttachmentCount);
-                } else {
-                    transitionRect = new Rect(firstChild.getLeft(), firstChild.getTop(),
-                            firstChild.getRight(), firstChild.getBottom());
-                }
-            }
-            if (multiAttachmentLayout == null) {
-                multiAttachmentLayout = AttachmentPreviewFactory.createMultiplePreview(
-                        getContext(), this);
-                multiAttachmentLayout.bindAttachments(combinedAttachments, transitionRect,
-                        combinedAttachmentCount);
-                mAttachmentView.removeAllViews();
-                mAttachmentView.addView(multiAttachmentLayout);
-            }
-        } else {
-            final MessagePartData attachment = combinedAttachments.get(0);
-            boolean shouldAnimate = true;
-            if (mAttachmentView.getChildCount() > 0) {
-                // If we are going from N->1 attachments, try to use the current bounds
-                // bounds as the starting rect.
-                shouldAnimate = false;
-                final View firstChild = mAttachmentView.getChildAt(0);
-                if (firstChild instanceof MultiAttachmentLayout &&
-                        attachment instanceof MediaPickerMessagePartData) {
-                    final View leftoverView = ((MultiAttachmentLayout) firstChild)
-                            .findViewForAttachment(attachment);
-                    if (leftoverView != null) {
-                        final Rect currentRect = UiUtils.getMeasuredBoundsOnScreen(leftoverView);
-                        if (!currentRect.isEmpty() &&
-                                attachment instanceof MediaPickerMessagePartData) {
-                            ((MediaPickerMessagePartData) attachment).setStartRect(currentRect);
-                            shouldAnimate = true;
-                        }
-                    }
-                }
-            }
-            mAttachmentView.removeAllViews();
-            final View attachmentView = AttachmentPreviewFactory.createAttachmentPreview(
-                    layoutInflater, attachment, mAttachmentView,
-                    AttachmentPreviewFactory.TYPE_SINGLE, true /* startImageRequest */, this);
-            if (attachmentView != null) {
-                mAttachmentView.addView(attachmentView);
-                if (shouldAnimate) {
-                    tryAnimateViewIn(attachment, attachmentView);
-                }
-            }
-        }
-        return true;
-    }
-
-    public void onMessageAnimationStart() {
-        if (mHideRunnable == null) {
-            return;
-        }
-
-        // Run the hide animation at the same time as the message animation
-        mHandler.removeCallbacks(mHideRunnable);
-        setVisibility(View.INVISIBLE);
-        mHideRunnable.run();
-    }
-
-    private void tryAnimateViewIn(final MessagePartData attachmentData, final View view) {
-        if (attachmentData instanceof MediaPickerMessagePartData) {
-            final Rect startRect = ((MediaPickerMessagePartData) attachmentData).getStartRect();
-            stopPopupAnimation();
-            mPopupTransitionAnimation = new PopupTransitionAnimation(startRect, view);
-            mPopupTransitionAnimation.startAfterLayoutComplete();
-        }
-    }
-
-    private void stopPopupAnimation() {
-        if (mPopupTransitionAnimation != null) {
-            mPopupTransitionAnimation.cancel();
-            mPopupTransitionAnimation = null;
-        }
-    }
-
-    @VisibleForAnimation
-    public void setAnimatedHeight(final int animatedHeight) {
-        if (mAnimatedHeight != animatedHeight) {
-            mAnimatedHeight = animatedHeight;
-            requestLayout();
-        }
-    }
-
-    /**
-     * Kicks off an animation to animate the layout change for closing the gap between the
-     * message list and the compose message box when the attachments are cleared.
-     */
-    private void startCloseGapAnimationOnAttachmentClear() {
-        // Cancel existing animation.
-        cancelCloseGapAnimation();
-        mCloseGapAnimator = ObjectAnimator.ofInt(this, "animatedHeight", getHeight(), 0);
-        mCloseGapAnimator.start();
-    }
-
-    private void cancelCloseGapAnimation() {
-        if (mCloseGapAnimator != null) {
-            mCloseGapAnimator.cancel();
-            mCloseGapAnimator = null;
-        }
-        mAnimatedHeight = -1;
-    }
-
-    @Override
-    public boolean onAttachmentClick(final MessagePartData attachment,
-            final Rect viewBoundsOnScreen, final boolean longPress) {
-        if (longPress) {
-            mComposeMessageView.onAttachmentPreviewLongClicked();
-            return true;
-        }
-
-        if (!(attachment instanceof PendingAttachmentData) && attachment.isImage()) {
-            mComposeMessageView.displayPhoto(attachment.getContentUri(), viewBoundsOnScreen);
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/src/com/android/messaging/ui/AttachmentPreviewFactory.java b/src/com/android/messaging/ui/AttachmentPreviewFactory.java
deleted file mode 100644
index e801fe0..0000000
--- a/src/com/android/messaging/ui/AttachmentPreviewFactory.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Rect;
-import android.net.Uri;
-import androidx.annotation.Nullable;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnLongClickListener;
-import android.view.ViewGroup;
-import android.widget.FrameLayout.LayoutParams;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.PendingAttachmentData;
-import com.android.messaging.datamodel.data.PersonItemData;
-import com.android.messaging.datamodel.data.VCardContactItemData;
-import com.android.messaging.datamodel.media.FileImageRequestDescriptor;
-import com.android.messaging.datamodel.media.ImageRequest;
-import com.android.messaging.datamodel.media.ImageRequestDescriptor;
-import com.android.messaging.datamodel.media.UriImageRequestDescriptor;
-import com.android.messaging.ui.MultiAttachmentLayout.OnAttachmentClickListener;
-import com.android.messaging.ui.PersonItemView.PersonItemViewListener;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.UiUtils;
-import com.android.messaging.util.UriUtil;
-
-/**
- * A view factory that creates previews for single/multiple attachments.
- */
-public class AttachmentPreviewFactory {
-    /** Standalone attachment preview */
-    public static final int TYPE_SINGLE = 1;
-
-    /** Attachment preview displayed in a multi-attachment layout */
-    public static final int TYPE_MULTIPLE = 2;
-
-    /** Attachment preview displayed in the attachment chooser grid view */
-    public static final int TYPE_CHOOSER_GRID = 3;
-
-    public static View createAttachmentPreview(final LayoutInflater layoutInflater,
-            final MessagePartData attachmentData, final ViewGroup parent,
-            final int viewType, final boolean startImageRequest,
-            @Nullable final OnAttachmentClickListener clickListener) {
-        final String contentType = attachmentData.getContentType();
-        View attachmentView = null;
-        if (attachmentData instanceof PendingAttachmentData) {
-            attachmentView = createPendingAttachmentPreview(layoutInflater, parent,
-                    (PendingAttachmentData) attachmentData);
-        } else if (ContentType.isImageType(contentType)) {
-            attachmentView = createImagePreview(layoutInflater, attachmentData, parent, viewType,
-                    startImageRequest);
-        } else if (ContentType.isAudioType(contentType)) {
-            attachmentView = createAudioPreview(layoutInflater, attachmentData, parent, viewType);
-        } else if (ContentType.isVideoType(contentType)) {
-            attachmentView = createVideoPreview(layoutInflater, attachmentData, parent, viewType);
-        } else if (ContentType.isVCardType(contentType)) {
-            attachmentView = createVCardPreview(layoutInflater, attachmentData, parent, viewType);
-        } else {
-            Assert.fail("unsupported attachment type: " + contentType);
-            return null;
-        }
-
-        // Some views have a caption, set the text/visibility if one exists
-        final TextView captionView = (TextView) attachmentView.findViewById(R.id.caption);
-        if (captionView != null) {
-            final String caption = attachmentData.getText();
-            captionView.setVisibility(TextUtils.isEmpty(caption) ? View.GONE : View.VISIBLE);
-            captionView.setText(caption);
-        }
-
-        if (attachmentView != null && clickListener != null) {
-            attachmentView.setOnClickListener(new OnClickListener() {
-                    @Override
-                    public void onClick(final View view) {
-                        final Rect bounds = UiUtils.getMeasuredBoundsOnScreen(view);
-                        clickListener.onAttachmentClick(attachmentData, bounds,
-                                false /* longPress */);
-                    }
-                });
-            attachmentView.setOnLongClickListener(new OnLongClickListener() {
-                    @Override
-                    public boolean onLongClick(final View view) {
-                        final Rect bounds = UiUtils.getMeasuredBoundsOnScreen(view);
-                        return clickListener.onAttachmentClick(attachmentData, bounds,
-                                true /* longPress */);
-                    }
-                });
-        }
-        return attachmentView;
-    }
-
-    public static MultiAttachmentLayout createMultiplePreview(final Context context,
-            final OnAttachmentClickListener listener) {
-        final MultiAttachmentLayout multiAttachmentLayout =
-                new MultiAttachmentLayout(context, null);
-        final ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(
-                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
-        multiAttachmentLayout.setLayoutParams(layoutParams);
-        multiAttachmentLayout.setOnAttachmentClickListener(listener);
-        return multiAttachmentLayout;
-    }
-
-    public static ImageRequestDescriptor getImageRequestDescriptorForAttachment(
-            final MessagePartData attachmentData, final int desiredWidth, final int desiredHeight) {
-        final Uri uri = attachmentData.getContentUri();
-        final String contentType = attachmentData.getContentType();
-        if (ContentType.isImageType(contentType)) {
-            final String filePath = UriUtil.getFilePathFromUri(uri);
-            if (filePath != null) {
-                return new FileImageRequestDescriptor(filePath, desiredWidth, desiredHeight,
-                        attachmentData.getWidth(), attachmentData.getHeight(),
-                        false /* canUseThumbnail */, true /* allowCompression */,
-                        false /* isStatic */);
-            } else {
-                return new UriImageRequestDescriptor(uri, desiredWidth, desiredHeight,
-                        attachmentData.getWidth(), attachmentData.getHeight(),
-                        true /* allowCompression */, false /* isStatic */, false /*cropToCircle*/,
-                        ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                        ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
-            }
-        }
-        return null;
-    }
-
-    private static View createImagePreview(final LayoutInflater layoutInflater,
-            final MessagePartData attachmentData, final ViewGroup parent,
-            final int viewType, final boolean startImageRequest) {
-        int layoutId = R.layout.attachment_single_image;
-        switch (viewType) {
-            case AttachmentPreviewFactory.TYPE_SINGLE:
-                layoutId = R.layout.attachment_single_image;
-                break;
-            case AttachmentPreviewFactory.TYPE_MULTIPLE:
-                layoutId = R.layout.attachment_multiple_image;
-                break;
-            case AttachmentPreviewFactory.TYPE_CHOOSER_GRID:
-                layoutId = R.layout.attachment_chooser_image;
-                break;
-            default:
-                Assert.fail("unsupported attachment view type!");
-                break;
-        }
-        final View view = layoutInflater.inflate(layoutId, parent, false /* attachToRoot */);
-        final AsyncImageView imageView = (AsyncImageView) view.findViewById(
-                R.id.attachment_image_view);
-        int maxWidth = imageView.getMaxWidth();
-        int maxHeight = imageView.getMaxHeight();
-        if (viewType == TYPE_CHOOSER_GRID) {
-            final Resources resources = layoutInflater.getContext().getResources();
-            maxWidth = maxHeight = resources.getDimensionPixelSize(
-                    R.dimen.attachment_grid_image_cell_size);
-        }
-        if (maxWidth <= 0 || maxWidth == Integer.MAX_VALUE) {
-            maxWidth = ImageRequest.UNSPECIFIED_SIZE;
-        }
-        if (maxHeight <= 0 || maxHeight == Integer.MAX_VALUE) {
-            maxHeight = ImageRequest.UNSPECIFIED_SIZE;
-        }
-        if (startImageRequest) {
-            imageView.setImageResourceId(getImageRequestDescriptorForAttachment(attachmentData,
-                    maxWidth, maxHeight));
-        }
-        imageView.setContentDescription(
-                parent.getResources().getString(R.string.message_image_content_description));
-        return view;
-    }
-
-    private static View createPendingAttachmentPreview(final LayoutInflater layoutInflater,
-            final ViewGroup parent, final PendingAttachmentData attachmentData) {
-        final View pendingItemView = layoutInflater.inflate(R.layout.attachment_pending_item,
-                parent, false);
-        final ImageView imageView = (ImageView)
-                pendingItemView.findViewById(R.id.pending_item_view);
-        final ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
-        final int defaultSize = layoutInflater.getContext().getResources().getDimensionPixelSize(
-                R.dimen.pending_attachment_size);
-        layoutParams.width = attachmentData.getWidth() == MessagePartData.UNSPECIFIED_SIZE ?
-                defaultSize : attachmentData.getWidth();
-        layoutParams.height = attachmentData.getHeight() == MessagePartData.UNSPECIFIED_SIZE ?
-                defaultSize : attachmentData.getHeight();
-        return pendingItemView;
-    }
-
-    private static View createVCardPreview(final LayoutInflater layoutInflater,
-            final MessagePartData attachmentData, final ViewGroup parent,
-            final int viewType) {
-        int layoutId = R.layout.attachment_single_vcard;
-        switch (viewType) {
-            case AttachmentPreviewFactory.TYPE_SINGLE:
-                layoutId = R.layout.attachment_single_vcard;
-                break;
-            case AttachmentPreviewFactory.TYPE_MULTIPLE:
-                layoutId = R.layout.attachment_multiple_vcard;
-                break;
-            case AttachmentPreviewFactory.TYPE_CHOOSER_GRID:
-                layoutId = R.layout.attachment_chooser_vcard;
-                break;
-            default:
-                Assert.fail("unsupported attachment view type!");
-                break;
-        }
-        final View view = layoutInflater.inflate(layoutId, parent, false /* attachToRoot */);
-        final PersonItemView vcardPreview = (PersonItemView) view.findViewById(
-                R.id.vcard_attachment_view);
-        vcardPreview.setAvatarOnly(viewType != AttachmentPreviewFactory.TYPE_SINGLE);
-        vcardPreview.bind(DataModel.get().createVCardContactItemData(layoutInflater.getContext(),
-                attachmentData));
-        vcardPreview.setListener(new PersonItemViewListener() {
-            @Override
-            public void onPersonClicked(final PersonItemData data) {
-                Assert.isTrue(data instanceof VCardContactItemData);
-                final VCardContactItemData vCardData = (VCardContactItemData) data;
-                if (vCardData.hasValidVCard()) {
-                    final Uri vCardUri = vCardData.getVCardUri();
-                    UIIntents.get().launchVCardDetailActivity(vcardPreview.getContext(), vCardUri);
-                }
-            }
-
-            @Override
-            public boolean onPersonLongClicked(final PersonItemData data) {
-                return false;
-            }
-        });
-        return view;
-    }
-
-    private static View createAudioPreview(final LayoutInflater layoutInflater,
-                final MessagePartData attachmentData, final ViewGroup parent,
-                final int viewType) {
-        int layoutId = R.layout.attachment_single_audio;
-        switch (viewType) {
-            case AttachmentPreviewFactory.TYPE_SINGLE:
-                layoutId = R.layout.attachment_single_audio;
-                break;
-            case AttachmentPreviewFactory.TYPE_MULTIPLE:
-                layoutId = R.layout.attachment_multiple_audio;
-                break;
-            case AttachmentPreviewFactory.TYPE_CHOOSER_GRID:
-                layoutId = R.layout.attachment_chooser_audio;
-                break;
-            default:
-                Assert.fail("unsupported attachment view type!");
-                break;
-        }
-        final View view = layoutInflater.inflate(layoutId, parent, false /* attachToRoot */);
-        final AudioAttachmentView audioView = (AudioAttachmentView)
-                view.findViewById(R.id.audio_attachment_view);
-        audioView.bindMessagePartData(
-                attachmentData, false /* incoming */, false /* showAsSelected */);
-        return view;
-    }
-
-    private static View createVideoPreview(final LayoutInflater layoutInflater,
-            final MessagePartData attachmentData, final ViewGroup parent,
-            final int viewType) {
-        int layoutId = R.layout.attachment_single_video;
-        switch (viewType) {
-            case AttachmentPreviewFactory.TYPE_SINGLE:
-                layoutId = R.layout.attachment_single_video;
-                break;
-            case AttachmentPreviewFactory.TYPE_MULTIPLE:
-                layoutId = R.layout.attachment_multiple_video;
-                break;
-            case AttachmentPreviewFactory.TYPE_CHOOSER_GRID:
-                layoutId = R.layout.attachment_chooser_video;
-                break;
-            default:
-                Assert.fail("unsupported attachment view type!");
-                break;
-        }
-        final VideoThumbnailView videoThumbnail = (VideoThumbnailView) layoutInflater.inflate(
-                layoutId, parent, false /* attachToRoot */);
-        videoThumbnail.setSource(attachmentData, false /* incomingMessage */);
-        return videoThumbnail;
-    }
-}
diff --git a/src/com/android/messaging/ui/AudioAttachmentPlayPauseButton.java b/src/com/android/messaging/ui/AudioAttachmentPlayPauseButton.java
deleted file mode 100644
index 724c4fe..0000000
--- a/src/com/android/messaging/ui/AudioAttachmentPlayPauseButton.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.ImageView;
-import android.widget.ViewSwitcher;
-
-import com.android.messaging.R;
-
-/**
- * Shows a tinted play pause button.
- */
-public class AudioAttachmentPlayPauseButton extends ViewSwitcher {
-    private ImageView mPlayButton;
-    private ImageView mPauseButton;
-
-    private boolean mShowAsIncoming;
-
-    public AudioAttachmentPlayPauseButton(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mPlayButton = (ImageView) findViewById(R.id.play_button);
-        mPauseButton = (ImageView) findViewById(R.id.pause_button);
-        updateAppearance();
-    }
-
-    public void setVisualStyle(final boolean showAsIncoming) {
-        if (mShowAsIncoming != showAsIncoming) {
-            mShowAsIncoming = showAsIncoming;
-            updateAppearance();
-        }
-    }
-
-    private void updateAppearance() {
-        mPlayButton.setImageDrawable(ConversationDrawables.get()
-                .getPlayButtonDrawable(mShowAsIncoming));
-        mPauseButton.setImageDrawable(ConversationDrawables.get()
-                .getPauseButtonDrawable(mShowAsIncoming));
-    }
-}
diff --git a/src/com/android/messaging/ui/AudioAttachmentView.java b/src/com/android/messaging/ui/AudioAttachmentView.java
deleted file mode 100644
index ad91ed2..0000000
--- a/src/com/android/messaging/ui/AudioAttachmentView.java
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Path;
-import android.graphics.RectF;
-import android.media.AudioManager;
-import android.media.MediaPlayer;
-import android.media.MediaPlayer.OnCompletionListener;
-import android.media.MediaPlayer.OnErrorListener;
-import android.media.MediaPlayer.OnPreparedListener;
-import android.net.Uri;
-import android.os.SystemClock;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.ui.mediapicker.PausableChronometer;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.MediaUtil;
-import com.android.messaging.util.UiUtils;
-
-/**
- * A reusable widget that hosts an audio player for audio attachment playback. This widget is used
- * by both the media picker and the conversation message view to show audio attachments.
- */
-public class AudioAttachmentView extends LinearLayout {
-    /** The normal layout mode where we have the play button, timer and progress bar */
-    private static final int LAYOUT_MODE_NORMAL = 0;
-
-    /** The compact layout mode with only the play button and the timer beneath it. Suitable
-     *  for displaying in limited space such as multi-attachment layout */
-    private static final int LAYOUT_MODE_COMPACT = 1;
-
-    /** The sub-compact layout mode with only the play button. */
-    private static final int LAYOUT_MODE_SUB_COMPACT = 2;
-
-    private static final int PLAY_BUTTON = 0;
-    private static final int PAUSE_BUTTON = 1;
-
-    private AudioAttachmentPlayPauseButton mPlayPauseButton;
-    private PausableChronometer mChronometer;
-    private AudioPlaybackProgressBar mProgressBar;
-    private MediaPlayer mMediaPlayer;
-
-    private Uri mDataSourceUri;
-
-    // The corner radius for drawing rounded corners. The default value is zero (no rounded corners)
-    private final int mCornerRadius;
-    private final Path mRoundedCornerClipPath;
-    private int mClipPathWidth;
-    private int mClipPathHeight;
-
-    private boolean mUseIncomingStyle;
-    private int mThemeColor;
-
-    private boolean mStartPlayAfterPrepare;
-    // should the MediaPlayer be prepared lazily when the user chooses to play the audio (as
-    // opposed to preparing it early, on bind)
-    private boolean mPrepareOnPlayback;
-    private boolean mPrepared;
-    private boolean mPlaybackFinished; // Was the audio played all the way to the end
-    private final int mMode;
-
-    public AudioAttachmentView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        final TypedArray typedAttributes =
-                context.obtainStyledAttributes(attrs, R.styleable.AudioAttachmentView);
-        mMode = typedAttributes.getInt(R.styleable.AudioAttachmentView_layoutMode,
-                LAYOUT_MODE_NORMAL);
-        final LayoutInflater inflater = LayoutInflater.from(getContext());
-        inflater.inflate(R.layout.audio_attachment_view, this, true);
-        typedAttributes.recycle();
-
-        setWillNotDraw(mMode != LAYOUT_MODE_SUB_COMPACT);
-        mRoundedCornerClipPath = new Path();
-        mCornerRadius = context.getResources().getDimensionPixelSize(
-                R.dimen.conversation_list_image_preview_corner_radius);
-        setContentDescription(context.getString(R.string.audio_attachment_content_description));
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-
-        mPlayPauseButton = (AudioAttachmentPlayPauseButton) findViewById(R.id.play_pause_button);
-        mChronometer = (PausableChronometer) findViewById(R.id.timer);
-        mProgressBar = (AudioPlaybackProgressBar) findViewById(R.id.progress);
-        mPlayPauseButton.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View v) {
-                // Has the MediaPlayer already been prepared?
-                if (mMediaPlayer != null && mPrepared) {
-                    if (mMediaPlayer.isPlaying()) {
-                        mMediaPlayer.pause();
-                        mChronometer.pause();
-                        mProgressBar.pause();
-                    } else {
-                        playAudio();
-                    }
-                } else {
-                    // Either eager preparation is still going on (the user must have clicked
-                    // the Play button immediately after the view is bound) or this is lazy
-                    // preparation.
-                    if (mStartPlayAfterPrepare) {
-                        // The user is (starting and) pausing before the MediaPlayer is prepared
-                        mStartPlayAfterPrepare = false;
-                    } else {
-                        mStartPlayAfterPrepare = true;
-                        setupMediaPlayer();
-                    }
-                }
-                updatePlayPauseButtonState();
-            }
-        });
-        updatePlayPauseButtonState();
-        initializeViewsForMode();
-    }
-
-    private void updateChronometerVisibility(final boolean playing) {
-        if (mChronometer.getVisibility() == View.GONE) {
-            // The chronometer is always GONE for LAYOUT_MODE_SUB_COMPACT
-            Assert.equals(LAYOUT_MODE_SUB_COMPACT, mMode);
-            return;
-        }
-
-        if (mPrepareOnPlayback) {
-            // For lazy preparation, the chronometer will only be shown during playback
-            mChronometer.setVisibility(playing ? View.VISIBLE : View.INVISIBLE);
-        } else {
-            mChronometer.setVisibility(View.VISIBLE);
-        }
-    }
-
-    /**
-     * Bind the audio attachment view with a MessagePartData.
-     * @param incoming indicates whether the attachment view is to be styled as a part of an
-     *        incoming message.
-     */
-    public void bindMessagePartData(final MessagePartData messagePartData,
-            final boolean incoming, final boolean showAsSelected) {
-        Assert.isTrue(messagePartData == null ||
-                ContentType.isAudioType(messagePartData.getContentType()));
-        final Uri contentUri = (messagePartData == null) ? null : messagePartData.getContentUri();
-        bind(contentUri, incoming, showAsSelected);
-    }
-
-    public void bind(
-            final Uri dataSourceUri, final boolean incoming, final boolean showAsSelected) {
-        final String currentUriString = (mDataSourceUri == null) ? "" : mDataSourceUri.toString();
-        final String newUriString = (dataSourceUri == null) ? "" : dataSourceUri.toString();
-        final int themeColor = ConversationDrawables.get().getConversationThemeColor();
-        final boolean useIncomingStyle = incoming || showAsSelected;
-        final boolean visualStyleChanged = mThemeColor != themeColor ||
-                mUseIncomingStyle != useIncomingStyle;
-
-        mUseIncomingStyle = useIncomingStyle;
-        mThemeColor = themeColor;
-        mPrepareOnPlayback = incoming && !MediaUtil.canAutoAccessIncomingMedia();
-
-        if (!TextUtils.equals(currentUriString, newUriString)) {
-            mDataSourceUri = dataSourceUri;
-            resetToZeroState();
-        } else if (visualStyleChanged) {
-            updateVisualStyle();
-        }
-    }
-
-    private void playAudio() {
-        Assert.notNull(mMediaPlayer);
-        if (mPlaybackFinished) {
-            mMediaPlayer.seekTo(0);
-            mChronometer.restart();
-            mProgressBar.restart();
-            mPlaybackFinished = false;
-        } else {
-            mChronometer.resume();
-            mProgressBar.resume();
-        }
-        mMediaPlayer.start();
-    }
-
-    private void onAudioReplayError(final int what, final int extra, final Exception exception) {
-        if (exception == null) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "audio replay failed, what=" + what +
-                    ", extra=" + extra);
-        } else {
-            LogUtil.e(LogUtil.BUGLE_TAG, "audio replay failed, exception=" + exception);
-        }
-        UiUtils.showToastAtBottom(R.string.audio_recording_replay_failed);
-        releaseMediaPlayer();
-    }
-
-    /**
-     * Prepare the MediaPlayer, and if mPrepareOnPlayback, start playing the audio
-     */
-    private void setupMediaPlayer() {
-        Assert.notNull(mDataSourceUri);
-        if (mMediaPlayer == null) {
-            Assert.isTrue(!mPrepared);
-            mMediaPlayer = new MediaPlayer();
-
-            try {
-                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
-                mMediaPlayer.setDataSource(Factory.get().getApplicationContext(), mDataSourceUri);
-                mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
-                    @Override
-                    public void onCompletion(final MediaPlayer mp) {
-                        updatePlayPauseButtonState();
-                        mChronometer.reset();
-                        mChronometer.setBase(SystemClock.elapsedRealtime() -
-                                mMediaPlayer.getDuration());
-                        updateChronometerVisibility(false /* playing */);
-                        mProgressBar.reset();
-
-                        mPlaybackFinished = true;
-                    }
-                });
-
-                mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
-                    @Override
-                    public void onPrepared(final MediaPlayer mp) {
-                        // Set base on the chronometer so we can show the full length of the audio.
-                        mChronometer.setBase(SystemClock.elapsedRealtime() -
-                                mMediaPlayer.getDuration());
-                        mProgressBar.setDuration(mMediaPlayer.getDuration());
-                        mMediaPlayer.seekTo(0);
-                        mPrepared = true;
-
-                        if (mStartPlayAfterPrepare) {
-                            mStartPlayAfterPrepare = false;
-                            playAudio();
-                            updatePlayPauseButtonState();
-                        }
-                    }
-                });
-
-                mMediaPlayer.setOnErrorListener(new OnErrorListener() {
-                    @Override
-                    public boolean onError(final MediaPlayer mp, final int what, final int extra) {
-                        mStartPlayAfterPrepare = false;
-                        onAudioReplayError(what, extra, null);
-                        return true;
-                    }
-                });
-
-                mMediaPlayer.prepareAsync();
-            } catch (final Exception exception) {
-                onAudioReplayError(0, 0, exception);
-                releaseMediaPlayer();
-            }
-        }
-    }
-
-    private void releaseMediaPlayer() {
-        if (mMediaPlayer != null) {
-            mMediaPlayer.release();
-            mMediaPlayer = null;
-            mPrepared = false;
-            mStartPlayAfterPrepare = false;
-            mPlaybackFinished = false;
-            mChronometer.reset();
-            mProgressBar.reset();
-        }
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        // The view must have scrolled off. Stop playback.
-        releaseMediaPlayer();
-    }
-
-    @Override
-    protected void onDraw(final Canvas canvas) {
-        if (mMode != LAYOUT_MODE_SUB_COMPACT) {
-            return;
-        }
-
-        final int currentWidth = this.getWidth();
-        final int currentHeight = this.getHeight();
-        if (mClipPathWidth != currentWidth || mClipPathHeight != currentHeight) {
-            final RectF rect = new RectF(0, 0, currentWidth, currentHeight);
-            mRoundedCornerClipPath.reset();
-            mRoundedCornerClipPath.addRoundRect(rect, mCornerRadius, mCornerRadius,
-                    Path.Direction.CW);
-            mClipPathWidth = currentWidth;
-            mClipPathHeight = currentHeight;
-        }
-
-        canvas.clipPath(mRoundedCornerClipPath);
-        super.onDraw(canvas);
-    }
-
-    private void updatePlayPauseButtonState() {
-        final boolean playing = mMediaPlayer != null && mMediaPlayer.isPlaying();
-        updateChronometerVisibility(playing);
-        if (mStartPlayAfterPrepare || playing) {
-            mPlayPauseButton.setDisplayedChild(PAUSE_BUTTON);
-        } else {
-            mPlayPauseButton.setDisplayedChild(PLAY_BUTTON);
-        }
-    }
-
-    private void resetToZeroState() {
-        // Release the media player so it may be set up with the new audio source.
-        releaseMediaPlayer();
-        updateVisualStyle();
-        updateChronometerVisibility(false /* playing */);
-
-        if (mDataSourceUri != null && !mPrepareOnPlayback) {
-            // Prepare the media player, so we can read the duration of the audio.
-            setupMediaPlayer();
-        }
-    }
-
-    private void updateVisualStyle() {
-        if (mMode == LAYOUT_MODE_SUB_COMPACT) {
-            // Sub-compact mode has static visual appearance already set up during initialization.
-            return;
-        }
-
-        if (mUseIncomingStyle) {
-            mChronometer.setTextColor(getResources().getColor(R.color.message_text_color_incoming));
-        } else {
-            mChronometer.setTextColor(getResources().getColor(R.color.message_text_color_outgoing));
-        }
-        mProgressBar.setVisualStyle(mUseIncomingStyle);
-        mPlayPauseButton.setVisualStyle(mUseIncomingStyle);
-        updatePlayPauseButtonState();
-    }
-
-    private void initializeViewsForMode() {
-        switch (mMode) {
-            case LAYOUT_MODE_NORMAL:
-                setOrientation(HORIZONTAL);
-                mProgressBar.setVisibility(VISIBLE);
-                break;
-
-            case LAYOUT_MODE_COMPACT:
-                setOrientation(VERTICAL);
-                mProgressBar.setVisibility(GONE);
-                ((MarginLayoutParams) mPlayPauseButton.getLayoutParams()).setMargins(0, 0, 0, 0);
-                ((MarginLayoutParams) mChronometer.getLayoutParams()).setMargins(0, 0, 0, 0);
-                break;
-
-            case LAYOUT_MODE_SUB_COMPACT:
-                setOrientation(VERTICAL);
-                mProgressBar.setVisibility(GONE);
-                mChronometer.setVisibility(GONE);
-                ((MarginLayoutParams) mPlayPauseButton.getLayoutParams()).setMargins(0, 0, 0, 0);
-                final ImageView playButton = (ImageView) findViewById(R.id.play_button);
-                playButton.setImageDrawable(
-                        getResources().getDrawable(R.drawable.ic_preview_play));
-                final ImageView pauseButton = (ImageView) findViewById(R.id.pause_button);
-                pauseButton.setImageDrawable(
-                        getResources().getDrawable(R.drawable.ic_preview_pause));
-                break;
-
-            default:
-                Assert.fail("Unsupported mode for AudioAttachmentView!");
-                break;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/AudioPlaybackProgressBar.java b/src/com/android/messaging/ui/AudioPlaybackProgressBar.java
deleted file mode 100644
index a5b3a57..0000000
--- a/src/com/android/messaging/ui/AudioPlaybackProgressBar.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.animation.ObjectAnimator;
-import android.animation.TimeAnimator;
-import android.animation.TimeAnimator.TimeListener;
-import android.content.Context;
-import android.graphics.drawable.ClipDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.SystemClock;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.widget.ProgressBar;
-
-/**
- * Shows a styled progress bar that is synchronized with the playback state of an audio attachment.
- */
-public class AudioPlaybackProgressBar extends ProgressBar implements PlaybackStateView {
-    private long mDurationInMillis;
-    private final TimeAnimator mUpdateAnimator;
-    private long mCumulativeTime = 0;
-    private long mCurrentPlayStartTime = 0;
-    private boolean mIncoming = false;
-
-    public AudioPlaybackProgressBar(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-
-        mUpdateAnimator = new TimeAnimator();
-        mUpdateAnimator.setRepeatCount(ObjectAnimator.INFINITE);
-        mUpdateAnimator.setTimeListener(new TimeListener() {
-            @Override
-            public void onTimeUpdate(final TimeAnimator animation, final long totalTime,
-                    final long deltaTime) {
-                int progress = 0;
-                if (mDurationInMillis > 0) {
-                    progress = (int) (((mCumulativeTime + SystemClock.elapsedRealtime() -
-                            mCurrentPlayStartTime) * 1.0f / mDurationInMillis) * 100);
-                    progress = Math.max(Math.min(progress, 100), 0);
-                }
-                setProgress(progress);
-            }
-        });
-        updateAppearance();
-    }
-
-    /**
-     * Sets the duration of the audio that's being played, in milliseconds.
-     */
-    public void setDuration(final long durationInMillis) {
-        mDurationInMillis = durationInMillis;
-    }
-
-    @Override
-    public void restart() {
-        reset();
-        resume();
-    }
-
-    @Override
-    public void reset() {
-        stopUpdateTicks();
-        setProgress(0);
-        mCumulativeTime = 0;
-        mCurrentPlayStartTime = 0;
-    }
-
-    @Override
-    public void resume() {
-        mCurrentPlayStartTime = SystemClock.elapsedRealtime();
-        startUpdateTicks();
-    }
-
-    @Override
-    public void pause() {
-        mCumulativeTime += SystemClock.elapsedRealtime() - mCurrentPlayStartTime;
-        stopUpdateTicks();
-    }
-
-    private void startUpdateTicks() {
-        if (!mUpdateAnimator.isStarted()) {
-            mUpdateAnimator.start();
-        }
-    }
-
-    private void stopUpdateTicks() {
-        if (mUpdateAnimator.isStarted()) {
-            mUpdateAnimator.end();
-        }
-    }
-
-    private void updateAppearance() {
-        final Drawable drawable =
-                ConversationDrawables.get().getAudioProgressDrawable(mIncoming);
-        final ClipDrawable clipDrawable = new ClipDrawable(drawable, Gravity.START,
-                ClipDrawable.HORIZONTAL);
-        setProgressDrawable(clipDrawable);
-        setBackground(ConversationDrawables.get()
-                .getAudioProgressBackgroundDrawable(mIncoming));
-    }
-
-    public void setVisualStyle(final boolean incoming) {
-        if (mIncoming != incoming) {
-            mIncoming = incoming;
-            updateAppearance();
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/BaseBugleActivity.java b/src/com/android/messaging/ui/BaseBugleActivity.java
deleted file mode 100644
index 1236282..0000000
--- a/src/com/android/messaging/ui/BaseBugleActivity.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-import com.android.messaging.util.BugleActivityUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.UiUtils;
-
-/**
- * Base class for app activities that would normally derive from Activity. Responsible for
- * ensuring app requirements are met during onResume()
- */
-public class BaseBugleActivity extends Activity {
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (UiUtils.redirectToPermissionCheckIfNeeded(this)) {
-            return;
-        }
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onResume");
-        BugleActivityUtil.onActivityResume(this, BaseBugleActivity.this);
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onPause");
-    }
-}
diff --git a/src/com/android/messaging/ui/BaseBugleFragmentActivity.java b/src/com/android/messaging/ui/BaseBugleFragmentActivity.java
deleted file mode 100644
index 947970f..0000000
--- a/src/com/android/messaging/ui/BaseBugleFragmentActivity.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Activity;
-
-import com.android.messaging.util.BugleActivityUtil;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Base class for app activities that would normally derive from FragmentActivity. Responsible for
- * ensuring app requirements are met during onResume()
- */
-public class BaseBugleFragmentActivity extends Activity {
-    @Override
-    protected void onResume() {
-        super.onResume();
-        LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onResume");
-        // Ensure we have a sufficient version of Google Play Services, prompting for upgrade and
-        // disabling the data updates if we don't have the correct version.
-        BugleActivityUtil.onActivityResume(this, BaseBugleFragmentActivity.this);
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onPause");
-    }
-}
diff --git a/src/com/android/messaging/ui/BasePagerViewHolder.java b/src/com/android/messaging/ui/BasePagerViewHolder.java
deleted file mode 100644
index a82ecce..0000000
--- a/src/com/android/messaging/ui/BasePagerViewHolder.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.os.Parcelable;
-import android.view.View;
-import android.view.ViewGroup;
-
-/**
- * The base pager view holder implementation that handles basic view creation/destruction logic,
- * as well as logic to save/restore instance state that's persisted not only for activity
- * reconstruction (e.g. during a configuration change), but also cases where the individual
- * page view gets destroyed and recreated.
- *
- * To opt into saving/restoring instance state behavior for a particular page view, let the
- * PageView implement PersistentInstanceState to save and restore instance states to/from a
- * Parcelable.
- */
-public abstract class BasePagerViewHolder implements PagerViewHolder {
-    protected View mView;
-    protected Parcelable mSavedState;
-
-    /**
-     * This is called when the entire view pager is being torn down (due to configuration change
-     * for example) that will be restored later.
-     */
-    @Override
-    public Parcelable saveState() {
-        savePendingState();
-        return mSavedState;
-    }
-
-    /**
-     * This is called when the view pager is being restored.
-     */
-    @Override
-    public void restoreState(final Parcelable restoredState) {
-        if (restoredState != null) {
-            mSavedState = restoredState;
-            // If the view is already there, let it restore the state. Otherwise, it will be
-            // restored the next time the view gets created.
-            restorePendingState();
-        }
-    }
-
-    @Override
-    public void resetState() {
-        mSavedState = null;
-        if (mView != null && (mView instanceof PersistentInstanceState)) {
-            ((PersistentInstanceState) mView).resetState();
-        }
-    }
-
-    /**
-     * This is called when the view itself is being torn down. This may happen when the user
-     * has flipped to another page in the view pager, so we want to save the current state if
-     * possible.
-     */
-    @Override
-    public View destroyView() {
-        savePendingState();
-        final View retView = mView;
-        mView = null;
-        return retView;
-    }
-
-    @Override
-    public View getView(ViewGroup container) {
-        if (mView == null) {
-            mView = createView(container);
-            // When initially created, check if the view has any saved state. If so restore it.
-            restorePendingState();
-        }
-        return mView;
-    }
-
-    private void savePendingState() {
-        if (mView != null && (mView instanceof PersistentInstanceState)) {
-            mSavedState = ((PersistentInstanceState) mView).saveState();
-        }
-    }
-
-    private void restorePendingState() {
-        if (mView != null && (mView instanceof PersistentInstanceState) && (mSavedState != null)) {
-            ((PersistentInstanceState) mView).restoreState(mSavedState);
-        }
-    }
-
-    /**
-     * Create and initialize a new page view.
-     */
-    protected abstract View createView(ViewGroup container);
-}
diff --git a/src/com/android/messaging/ui/BlockedParticipantListItemView.java b/src/com/android/messaging/ui/BlockedParticipantListItemView.java
deleted file mode 100644
index 9654e70..0000000
--- a/src/com/android/messaging/ui/BlockedParticipantListItemView.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import androidx.core.text.BidiFormatter;
-import androidx.core.text.TextDirectionHeuristicsCompat;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ParticipantListItemData;
-
-/**
- * View for individual participant in blocked participants list.
- *
- * Unblocks participant when clicked.
- */
-public class BlockedParticipantListItemView extends LinearLayout {
-    private TextView mNameTextView;
-    private ContactIconView mContactIconView;
-    private ParticipantListItemData mData;
-
-    public BlockedParticipantListItemView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        mNameTextView = (TextView) findViewById(R.id.name);
-        mContactIconView = (ContactIconView) findViewById(R.id.contact_icon);
-        setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View v) {
-                mData.unblock(getContext());
-            }
-        });
-    }
-
-    public void bind(final ParticipantListItemData data) {
-        mData = data;
-        final BidiFormatter bidiFormatter = BidiFormatter.getInstance();
-        mNameTextView.setText(bidiFormatter.unicodeWrap(
-                data.getDisplayName(), TextDirectionHeuristicsCompat.LTR));
-        mContactIconView.setImageResourceUri(data.getAvatarUri(), data.getContactId(),
-                    data.getLookupKey(), data.getNormalizedDestination());
-        mNameTextView.setText(data.getDisplayName());
-    }
-}
diff --git a/src/com/android/messaging/ui/BlockedParticipantsActivity.java b/src/com/android/messaging/ui/BlockedParticipantsActivity.java
deleted file mode 100644
index 8d79155..0000000
--- a/src/com/android/messaging/ui/BlockedParticipantsActivity.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.os.Bundle;
-import android.view.MenuItem;
-
-import com.android.messaging.R;
-
-/**
- * Show a list of currently blocked participants.
- */
-public class BlockedParticipantsActivity extends BugleActionBarActivity {
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.blocked_participants_activity);
-
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // Treat the home press as back press so that when we go back to
-                // ConversationActivity, it doesn't lose its original intent (conversation id etc.)
-                onBackPressed();
-                return true;
-
-            default:
-                return super.onOptionsItemSelected(item);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/BlockedParticipantsFragment.java b/src/com/android/messaging/ui/BlockedParticipantsFragment.java
deleted file mode 100644
index 14ec9d8..0000000
--- a/src/com/android/messaging/ui/BlockedParticipantsFragment.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Fragment;
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import android.os.Bundle;
-import androidx.cursoradapter.widget.CursorAdapter;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ListView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.BlockedParticipantsData;
-import com.android.messaging.datamodel.data.BlockedParticipantsData.BlockedParticipantsDataListener;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.util.Assert;
-
-/**
- * Show a list of currently blocked participants.
- */
-public class BlockedParticipantsFragment extends Fragment
-        implements BlockedParticipantsDataListener {
-    private ListView mListView;
-    private BlockedParticipantListAdapter mAdapter;
-    private final Binding<BlockedParticipantsData> mBinding =
-            BindingBase.createBinding(this);
-
-    @Override
-    public void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-    }
-
-    @Override
-    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
-            final Bundle savedInstanceState) {
-        final View view =
-                inflater.inflate(R.layout.blocked_participants_fragment, container, false);
-        mListView = (ListView) view.findViewById(android.R.id.list);
-        mAdapter = new BlockedParticipantListAdapter(getActivity(), null);
-        mListView.setAdapter(mAdapter);
-        mBinding.bind(DataModel.get().createBlockedParticipantsData(getActivity(), this));
-        mBinding.getData().init(getLoaderManager(), mBinding);
-        return view;
-    }
-
-    @Override
-    public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        mBinding.unbind();
-    }
-
-    /**
-     * An adapter to display ParticipantListItemView based on ParticipantData.
-     */
-    private class BlockedParticipantListAdapter extends CursorAdapter {
-        public BlockedParticipantListAdapter(final Context context, final Cursor cursor) {
-            super(context, cursor, 0);
-        }
-
-        @Override
-        public View newView(Context context, Cursor cursor, ViewGroup parent) {
-            return LayoutInflater.from(context)
-                    .inflate(R.layout.blocked_participant_list_item_view, parent, false);
-        }
-
-        @Override
-        public void bindView(View view, Context context, Cursor cursor) {
-            Assert.isTrue(view instanceof BlockedParticipantListItemView);
-            ((BlockedParticipantListItemView) view).bind(
-                    mBinding.getData().createParticipantListItemData(cursor));
-        }
-    }
-
-    @Override
-    public void onBlockedParticipantsCursorUpdated(Cursor cursor) {
-        mAdapter.swapCursor(cursor);
-    }
-}
diff --git a/src/com/android/messaging/ui/BugleActionBarActivity.java b/src/com/android/messaging/ui/BugleActionBarActivity.java
deleted file mode 100644
index 42d40fe..0000000
--- a/src/com/android/messaging/ui/BugleActionBarActivity.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.graphics.drawable.ColorDrawable;
-import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AppCompatActivity;
-import android.view.ActionMode;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-
-import com.android.messaging.R;
-import com.android.messaging.util.BugleActivityUtil;
-import com.android.messaging.util.ImeUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.UiUtils;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Base class for app activities that use an action bar. Responsible for logging/telemetry/other
- * needs that will be common for all activities.  We can break out the common code if/when we need
- * a version that doesn't use an actionbar.
- */
-public class BugleActionBarActivity extends AppCompatActivity implements ImeUtil.ImeStateHost {
-    // Tracks the list of observers opting in for IME state change.
-    private final Set<ImeUtil.ImeStateObserver> mImeStateObservers = new HashSet<>();
-
-    // Tracks the soft keyboard display state
-    private boolean mImeOpen;
-
-    // The ActionMode that represents the modal contextual action bar, using our own implementation
-    // rather than the built in contextual action bar to reduce jank
-    private CustomActionMode mActionMode;
-
-    // The menu for the action bar
-    private Menu mActionBarMenu;
-
-    // Used to determine if a onDisplayHeightChanged was due to the IME opening or rotation of the
-    // device
-    private int mLastScreenHeight;
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (UiUtils.redirectToPermissionCheckIfNeeded(this)) {
-            return;
-        }
-
-        mLastScreenHeight = getResources().getDisplayMetrics().heightPixels;
-        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onCreate");
-        }
-    }
-
-    @Override
-    protected void onStart() {
-        super.onStart();
-        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onStart");
-        }
-    }
-
-    @Override
-    protected void onRestart() {
-        super.onStop();
-        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onRestart");
-        }
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onResume");
-        }
-        BugleActivityUtil.onActivityResume(this, BugleActionBarActivity.this);
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onPause");
-        }
-    }
-
-    @Override
-    protected void onStop() {
-        super.onStop();
-        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onStop");
-        }
-    }
-
-    private boolean mDestroyed;
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        mDestroyed = true;
-    }
-
-    public boolean getIsDestroyed() {
-        return mDestroyed;
-    }
-
-    @Override
-    public void onDisplayHeightChanged(final int heightSpecification) {
-        int screenHeight = getResources().getDisplayMetrics().heightPixels;
-
-        if (screenHeight != mLastScreenHeight) {
-            // Appears to be an orientation change, don't fire ime updates
-            mLastScreenHeight = screenHeight;
-            LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onDisplayHeightChanged " +
-                    " screenHeight: " + screenHeight + " lastScreenHeight: " + mLastScreenHeight +
-                    " Skipped, appears to be orientation change.");
-            return;
-        }
-        final ActionBar actionBar = getSupportActionBar();
-        if (actionBar != null && actionBar.isShowing()) {
-            screenHeight -= actionBar.getHeight();
-        }
-        final int height = View.MeasureSpec.getSize(heightSpecification);
-
-        final boolean imeWasOpen = mImeOpen;
-        mImeOpen = screenHeight - height > 100;
-
-        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(LogUtil.BUGLE_TAG, this.getLocalClassName() + ".onDisplayHeightChanged " +
-                    "imeWasOpen: " + imeWasOpen + " mImeOpen: " + mImeOpen + " screenHeight: " +
-                    screenHeight + " height: " + height);
-        }
-
-        if (imeWasOpen != mImeOpen) {
-            for (final ImeUtil.ImeStateObserver observer : mImeStateObservers) {
-                observer.onImeStateChanged(mImeOpen);
-            }
-        }
-    }
-
-    @Override
-    public void registerImeStateObserver(final ImeUtil.ImeStateObserver observer) {
-        mImeStateObservers.add(observer);
-    }
-
-    @Override
-    public void unregisterImeStateObserver(final ImeUtil.ImeStateObserver observer) {
-        mImeStateObservers.remove(observer);
-    }
-
-    @Override
-    public boolean isImeOpen() {
-        return mImeOpen;
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(final Menu menu) {
-        mActionBarMenu = menu;
-        if (mActionMode != null &&
-                mActionMode.getCallback().onCreateActionMode(mActionMode, menu)) {
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(final Menu menu) {
-        mActionBarMenu = menu;
-        if (mActionMode != null &&
-                mActionMode.getCallback().onPrepareActionMode(mActionMode, menu)) {
-            return true;
-        }
-        return super.onPrepareOptionsMenu(menu);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem menuItem) {
-        if (mActionMode != null &&
-                mActionMode.getCallback().onActionItemClicked(mActionMode, menuItem)) {
-            return true;
-        }
-
-        switch (menuItem.getItemId()) {
-            case android.R.id.home:
-                if (mActionMode != null) {
-                    dismissActionMode();
-                    return true;
-                }
-        }
-        return super.onOptionsItemSelected(menuItem);
-    }
-
-    @Override
-    public ActionMode startActionMode(final ActionMode.Callback callback) {
-        mActionMode = new CustomActionMode(callback);
-        supportInvalidateOptionsMenu();
-        invalidateActionBar();
-        return mActionMode;
-    }
-
-    public void dismissActionMode() {
-        if (mActionMode != null) {
-            mActionMode.finish();
-            mActionMode = null;
-            invalidateActionBar();
-        }
-    }
-
-    public ActionMode getActionMode() {
-        return mActionMode;
-    }
-
-    protected ActionMode.Callback getActionModeCallback() {
-        if (mActionMode == null) {
-            return null;
-        }
-
-        return mActionMode.getCallback();
-    }
-
-    /**
-     * Receives and handles action bar invalidation request from sub-components of this activity.
-     *
-     * <p>Normally actions have sole control over the action bar, but in order to support seamless
-     * transitions for components such as the full screen media picker, we have to let it take over
-     * the action bar and then restore its state afterwards</p>
-     *
-     * <p>If a fragment does anything that may change the action bar, it should call this method
-     * and then it is this method's responsibility to figure out which component "controls" the
-     * action bar and delegate the updating of the action bar to that component</p>
-     */
-    public final void invalidateActionBar() {
-        if (mActionMode != null) {
-            mActionMode.updateActionBar(getSupportActionBar());
-        } else {
-            updateActionBar(getSupportActionBar());
-        }
-    }
-
-    protected void updateActionBar(final ActionBar actionBar) {
-        actionBar.setHomeAsUpIndicator(null);
-    }
-
-    /**
-     * Custom ActionMode implementation which allows us to just replace the contents of the main
-     * action bar rather than overlay over it
-     */
-    private class CustomActionMode extends ActionMode {
-        private CharSequence mTitle;
-        private CharSequence mSubtitle;
-        private View mCustomView;
-        private final Callback mCallback;
-
-        public CustomActionMode(final Callback callback) {
-            mCallback = callback;
-        }
-
-        @Override
-        public void setTitle(final CharSequence title) {
-            mTitle = title;
-        }
-
-        @Override
-        public void setTitle(final int resId) {
-            mTitle = getResources().getString(resId);
-        }
-
-        @Override
-        public void setSubtitle(final CharSequence subtitle) {
-            mSubtitle = subtitle;
-        }
-
-        @Override
-        public void setSubtitle(final int resId) {
-            mSubtitle = getResources().getString(resId);
-        }
-
-        @Override
-        public void setCustomView(final View view) {
-            mCustomView = view;
-        }
-
-        @Override
-        public void invalidate() {
-            invalidateActionBar();
-        }
-
-        @Override
-        public void finish() {
-            mActionMode = null;
-            mCallback.onDestroyActionMode(this);
-            supportInvalidateOptionsMenu();
-            invalidateActionBar();
-        }
-
-        @Override
-        public Menu getMenu() {
-            return mActionBarMenu;
-        }
-
-        @Override
-        public CharSequence getTitle() {
-            return mTitle;
-        }
-
-        @Override
-        public CharSequence getSubtitle() {
-            return mSubtitle;
-        }
-
-        @Override
-        public View getCustomView() {
-            return mCustomView;
-        }
-
-        @Override
-        public MenuInflater getMenuInflater() {
-            return BugleActionBarActivity.this.getMenuInflater();
-        }
-
-        public Callback getCallback() {
-            return mCallback;
-        }
-
-        public void updateActionBar(final ActionBar actionBar) {
-            actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP);
-            actionBar.setDisplayShowTitleEnabled(false);
-            actionBar.setDisplayShowCustomEnabled(false);
-            mActionMode.getCallback().onPrepareActionMode(mActionMode, mActionBarMenu);
-            actionBar.setBackgroundDrawable(new ColorDrawable(
-                    getResources().getColor(R.color.contextual_action_bar_background_color)));
-            actionBar.setHomeAsUpIndicator(R.drawable.ic_cancel_small_dark);
-            actionBar.show();
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/BugleAnimationTags.java b/src/com/android/messaging/ui/BugleAnimationTags.java
deleted file mode 100644
index b141f5b..0000000
--- a/src/com/android/messaging/ui/BugleAnimationTags.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-
-/**
- * Defines a list of animation tags used as android:transitionName properties used for L's
- * hero transitions.
- */
-public class BugleAnimationTags {
-    /**
-     * The tag for the FAB in the conversation list activity.
-     */
-    public static final String TAG_FABICON = "bugle:fabicon";
-
-    /**
-     * The tag for the content view of a conversation list item view.
-     */
-    public static final String TAG_CLIVCONTENT = "bugle:clivcontent";
-
-    /**
-     * The tag for the action bar.
-     */
-    public static final String TAG_ACTIONBAR = "bugle:actionbar";
-}
diff --git a/src/com/android/messaging/ui/ClassZeroActivity.java b/src/com/android/messaging/ui/ClassZeroActivity.java
deleted file mode 100644
index 129ec19..0000000
--- a/src/com/android/messaging/ui/ClassZeroActivity.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.ContentValues;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.SystemClock;
-import android.provider.Telephony.Sms;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.Window;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.action.ReceiveSmsMessageAction;
-import com.android.messaging.util.Assert;
-
-import java.util.ArrayList;
-
-/**
- * Display a class-zero SMS message to the user. Wait for the user to dismiss
- * it.
- */
-public class ClassZeroActivity extends Activity {
-    private static final boolean VERBOSE = false;
-    private static final String TAG = "display_00";
-    private static final int ON_AUTO_SAVE = 1;
-
-    /** Default timer to dismiss the dialog. */
-    private static final long DEFAULT_TIMER = 5 * 60 * 1000;
-
-    /** To remember the exact time when the timer should fire. */
-    private static final String TIMER_FIRE = "timer_fire";
-
-    private ContentValues mMessageValues = null;
-
-    /** Is the message read. */
-    private boolean mRead = false;
-
-    /** The timer to dismiss the dialog automatically. */
-    private long mTimerSet = 0;
-    private AlertDialog mDialog = null;
-
-    private ArrayList<ContentValues> mMessageQueue = null;
-
-    private final Handler mHandler = new Handler() {
-        @Override
-        public void handleMessage(final Message msg) {
-            // Do not handle an invalid message.
-            if (msg.what == ON_AUTO_SAVE) {
-                mRead = false;
-                mDialog.dismiss();
-                saveMessage();
-                processNextMessage();
-            }
-        }
-    };
-
-    private boolean queueMsgFromIntent(final Intent msgIntent) {
-        final ContentValues messageValues =
-                msgIntent.getParcelableExtra(UIIntents.UI_INTENT_EXTRA_MESSAGE_VALUES);
-        // that takes the format argument is a hidden API right now.
-        final String message = messageValues.getAsString(Sms.BODY);
-        if (TextUtils.isEmpty(message)) {
-            if (mMessageQueue.size() == 0) {
-                finish();
-            }
-            return false;
-        }
-        mMessageQueue.add(messageValues);
-        return true;
-    }
-
-    private void processNextMessage() {
-        if (mMessageQueue.size() > 0) {
-            mMessageQueue.remove(0);
-        }
-        if (mMessageQueue.size() == 0) {
-            finish();
-        } else {
-            displayZeroMessage(mMessageQueue.get(0));
-        }
-    }
-
-    private void saveMessage() {
-        mMessageValues.put(Sms.Inbox.READ, mRead ? Integer.valueOf(1) : Integer.valueOf(0));
-        final ReceiveSmsMessageAction action = new ReceiveSmsMessageAction(mMessageValues);
-        action.start();
-    }
-
-    @Override
-    protected void onCreate(final Bundle icicle) {
-        super.onCreate(icicle);
-        requestWindowFeature(Window.FEATURE_NO_TITLE);
-
-        if (mMessageQueue == null) {
-            mMessageQueue = new ArrayList<ContentValues>();
-        }
-        if (!queueMsgFromIntent(getIntent())) {
-            return;
-        }
-        Assert.isTrue(mMessageQueue.size() == 1);
-        if (mMessageQueue.size() == 1) {
-            displayZeroMessage(mMessageQueue.get(0));
-        }
-
-        if (icicle != null) {
-            mTimerSet = icicle.getLong(TIMER_FIRE, mTimerSet);
-        }
-    }
-
-    private void displayZeroMessage(final ContentValues messageValues) {
-        /* This'll be used by the save action */
-        mMessageValues = messageValues;
-        final String message = messageValues.getAsString(Sms.BODY);;
-
-        mDialog = new AlertDialog.Builder(this).setMessage(message)
-            .setPositiveButton(R.string.save, mSaveListener)
-            .setNegativeButton(android.R.string.cancel, mCancelListener)
-            .setTitle(R.string.class_0_message_activity)
-            .setCancelable(false).show();
-        final long now = SystemClock.uptimeMillis();
-        mTimerSet = now + DEFAULT_TIMER;
-    }
-
-    @Override
-    protected void onNewIntent(final Intent msgIntent) {
-        // Running with another visible message, queue this one
-        queueMsgFromIntent(msgIntent);
-    }
-
-    @Override
-    protected void onStart() {
-        super.onStart();
-        final long now = SystemClock.uptimeMillis();
-        if (mTimerSet <= now) {
-            // Save the message if the timer already expired.
-            mHandler.sendEmptyMessage(ON_AUTO_SAVE);
-        } else {
-            mHandler.sendEmptyMessageAtTime(ON_AUTO_SAVE, mTimerSet);
-            if (VERBOSE) {
-                Log.d(TAG, "onRestart time = " + Long.toString(mTimerSet) + " "
-                        + this.toString());
-            }
-        }
-    }
-
-    @Override
-    protected void onSaveInstanceState(final Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putLong(TIMER_FIRE, mTimerSet);
-        if (VERBOSE) {
-            Log.d(TAG, "onSaveInstanceState time = " + Long.toString(mTimerSet)
-                    + " " + this.toString());
-        }
-    }
-
-    @Override
-    protected void onStop() {
-        super.onStop();
-        mHandler.removeMessages(ON_AUTO_SAVE);
-        if (VERBOSE) {
-            Log.d(TAG, "onStop time = " + Long.toString(mTimerSet)
-                    + " " + this.toString());
-        }
-    }
-
-    private final OnClickListener mCancelListener = new OnClickListener() {
-        @Override
-        public void onClick(final DialogInterface dialog, final int whichButton) {
-            dialog.dismiss();
-            processNextMessage();
-        }
-    };
-
-    private final OnClickListener mSaveListener = new OnClickListener() {
-        @Override
-        public void onClick(final DialogInterface dialog, final int whichButton) {
-            mRead = true;
-            saveMessage();
-            dialog.dismiss();
-            processNextMessage();
-        }
-    };
-}
diff --git a/src/com/android/messaging/ui/CompositeAdapter.java b/src/com/android/messaging/ui/CompositeAdapter.java
deleted file mode 100644
index 620e511..0000000
--- a/src/com/android/messaging/ui/CompositeAdapter.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.database.DataSetObserver;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-
-/**
- * A general purpose adapter that composes one or more other adapters.  It
- * appends them in the order they are added.
- */
-public class CompositeAdapter extends BaseAdapter {
-
-    private static final int INITIAL_CAPACITY = 2;
-
-    public static class Partition {
-        boolean mShowIfEmpty;
-        boolean mHasHeader;
-        BaseAdapter mAdapter;
-
-        public Partition(final boolean showIfEmpty, final boolean hasHeader,
-                final BaseAdapter adapter) {
-            this.mShowIfEmpty = showIfEmpty;
-            this.mHasHeader = hasHeader;
-            this.mAdapter = adapter;
-        }
-
-        /**
-         * True if the directory should be shown even if no contacts are found.
-         */
-        public boolean showIfEmpty() {
-            return mShowIfEmpty;
-        }
-
-        public boolean hasHeader() {
-            return mHasHeader;
-        }
-
-        public int getCount() {
-            int count = mAdapter.getCount();
-            if (mHasHeader && (count != 0 || mShowIfEmpty)) {
-                count++;
-            }
-            return count;
-        }
-
-        public BaseAdapter getAdapter() {
-            return mAdapter;
-        }
-
-        public View getHeaderView(final View convertView, final ViewGroup parentView) {
-            return null;
-        }
-
-        public void close() {
-            // do nothing in base class.
-        }
-    }
-
-    private class Observer extends DataSetObserver {
-        @Override
-        public void onChanged() {
-            CompositeAdapter.this.notifyDataSetChanged();
-        }
-
-        @Override
-        public void onInvalidated() {
-            CompositeAdapter.this.notifyDataSetInvalidated();
-        }
-    };
-
-    protected final Context mContext;
-    private Partition[] mPartitions;
-    private int mSize = 0;
-    private int mCount = 0;
-    private boolean mCacheValid = true;
-    private final Observer mObserver;
-
-    public CompositeAdapter(final Context context) {
-        mContext = context;
-        mObserver = new Observer();
-        mPartitions = new Partition[INITIAL_CAPACITY];
-    }
-
-    public Context getContext() {
-        return mContext;
-    }
-
-    public void addPartition(final Partition partition) {
-        if (mSize >= mPartitions.length) {
-            final int newCapacity = mSize + 2;
-            final Partition[] newAdapters = new Partition[newCapacity];
-            System.arraycopy(mPartitions, 0, newAdapters, 0, mSize);
-            mPartitions = newAdapters;
-        }
-        mPartitions[mSize++] = partition;
-        partition.getAdapter().registerDataSetObserver(mObserver);
-        invalidate();
-        notifyDataSetChanged();
-    }
-
-    public void removePartition(final int index) {
-        final Partition partition = mPartitions[index];
-        partition.close();
-        System.arraycopy(mPartitions, index + 1, mPartitions, index,
-                mSize - index - 1);
-        mSize--;
-        partition.getAdapter().unregisterDataSetObserver(mObserver);
-        invalidate();
-        notifyDataSetChanged();
-    }
-
-    public void clearPartitions() {
-        for (int i = 0; i < mSize; i++) {
-            final Partition partition = mPartitions[i];
-            partition.close();
-            partition.getAdapter().unregisterDataSetObserver(mObserver);
-        }
-        invalidate();
-        notifyDataSetChanged();
-    }
-
-    public Partition getPartition(final int index) {
-        return mPartitions[index];
-    }
-
-    public int getPartitionAtPosition(final int position) {
-        ensureCacheValid();
-        int start = 0;
-        for (int i = 0; i < mSize; i++) {
-            final int end = start + mPartitions[i].getCount();
-            if (position >= start && position < end) {
-                int offset = position - start;
-                if (mPartitions[i].hasHeader() &&
-                        (mPartitions[i].getCount() > 0 || mPartitions[i].showIfEmpty())) {
-                    offset--;
-                }
-                if (offset == -1) {
-                    return -1;
-                }
-                return i;
-            }
-            start = end;
-        }
-        return mSize - 1;
-    }
-
-    public int getPartitionCount() {
-        return mSize;
-    }
-
-    public void invalidate() {
-        mCacheValid = false;
-    }
-
-    private void ensureCacheValid() {
-        if (mCacheValid) {
-            return;
-        }
-        mCount = 0;
-        for (int i = 0; i < mSize; i++) {
-            mCount += mPartitions[i].getCount();
-        }
-    }
-
-    @Override
-    public int getCount() {
-        ensureCacheValid();
-        return mCount;
-    }
-
-    public int getCount(final int index) {
-        ensureCacheValid();
-        return mPartitions[index].getCount();
-    }
-
-    @Override
-    public Object getItem(final int position) {
-        ensureCacheValid();
-        int start = 0;
-        for (int i = 0; i < mSize; i++) {
-            final int end = start + mPartitions[i].getCount();
-            if (position >= start && position < end) {
-                final int offset = position - start;
-                final Partition partition = mPartitions[i];
-                if (partition.hasHeader() && offset == 0 &&
-                        (partition.getCount() > 0 || partition.showIfEmpty())) {
-                    // This is the header
-                    return null;
-                }
-                return mPartitions[i].getAdapter().getItem(offset);
-            }
-            start = end;
-        }
-
-        return null;
-    }
-
-    @Override
-    public long getItemId(final int position) {
-        ensureCacheValid();
-        int start = 0;
-        for (int i = 0; i < mSize; i++) {
-            final int end = start + mPartitions[i].getCount();
-            if (position >= start && position < end) {
-                final int offset = position - start;
-                final Partition partition = mPartitions[i];
-                if (partition.hasHeader() && offset == 0 &&
-                        (partition.getCount() > 0 || partition.showIfEmpty())) {
-                    // Header
-                    return 0;
-                }
-                return mPartitions[i].getAdapter().getItemId(offset);
-            }
-            start = end;
-        }
-
-        return 0;
-    }
-
-    @Override
-    public boolean isEnabled(int position) {
-        ensureCacheValid();
-        int start = 0;
-        for (int i = 0; i < mSize; i++) {
-            final int end = start + mPartitions[i].getCount();
-            if (position >= start && position < end) {
-                final int offset = position - start;
-                final Partition partition = mPartitions[i];
-                if (partition.hasHeader() && offset == 0 &&
-                        (partition.getCount() > 0 || partition.showIfEmpty())) {
-                    // This is the header
-                    return false;
-                }
-                return true;
-            }
-            start = end;
-        }
-        return true;
-    }
-
-    @Override
-    public View getView(final int position, final View convertView, final ViewGroup parentView) {
-        ensureCacheValid();
-        int start = 0;
-        for (int i = 0; i < mSize; i++) {
-            final Partition partition = mPartitions[i];
-            final int end = start + partition.getCount();
-            if (position >= start && position < end) {
-                int offset = position - start;
-                View view;
-                if (partition.hasHeader() &&
-                        (partition.getCount() > 0 || partition.showIfEmpty())) {
-                    offset = offset - 1;
-                }
-                if (offset == -1) {
-                    view = partition.getHeaderView(convertView, parentView);
-                } else {
-                    view = partition.getAdapter().getView(offset, convertView, parentView);
-                }
-                if (view == null) {
-                    throw new NullPointerException("View should not be null, partition: " + i
-                            + " position: " + offset);
-                }
-                return view;
-            }
-            start = end;
-        }
-
-        throw new ArrayIndexOutOfBoundsException(position);
-    }
-}
diff --git a/src/com/android/messaging/ui/ContactIconView.java b/src/com/android/messaging/ui/ContactIconView.java
deleted file mode 100644
index 44983ab..0000000
--- a/src/com/android/messaging/ui/ContactIconView.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.net.Uri;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.media.AvatarGroupRequestDescriptor;
-import com.android.messaging.datamodel.media.AvatarRequestDescriptor;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.ContactUtil;
-
-/**
- * A view used to render contact icons. This class derives from AsyncImageView, so it loads contact
- * icons from MediaResourceManager, and it handles more rendering logic than an AsyncImageView
- * (draws a circular bitmap).
- */
-public class ContactIconView extends AsyncImageView {
-    private static final int NORMAL_ICON_SIZE_ID = 0;
-    private static final int LARGE_ICON_SIZE_ID = 1;
-    private static final int SMALL_ICON_SIZE_ID = 2;
-
-    protected final int mIconSize;
-    private final int mColorPressedId;
-
-    private long mContactId;
-    private String mContactLookupKey;
-    private String mNormalizedDestination;
-    private Uri mAvatarUri;
-    private boolean mDisableClickHandler;
-
-    public ContactIconView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-
-        final Resources resources = context.getResources();
-        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ContactIconView);
-
-        final int iconSizeId = a.getInt(R.styleable.ContactIconView_iconSize, 0);
-        switch (iconSizeId) {
-            case NORMAL_ICON_SIZE_ID:
-                mIconSize = (int) resources.getDimension(
-                        R.dimen.contact_icon_view_normal_size);
-                break;
-            case LARGE_ICON_SIZE_ID:
-                mIconSize = (int) resources.getDimension(
-                        R.dimen.contact_icon_view_large_size);
-                break;
-            case SMALL_ICON_SIZE_ID:
-                mIconSize = (int) resources.getDimension(
-                        R.dimen.contact_icon_view_small_size);
-                break;
-            default:
-                // For the compiler, something has to be set even with the assert.
-                mIconSize = 0;
-                Assert.fail("Unsupported ContactIconView icon size attribute");
-        }
-        mColorPressedId = resources.getColor(R.color.contact_avatar_pressed_color);
-
-        setImage(null);
-        a.recycle();
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
-            setColorFilter(mColorPressedId);
-        } else {
-            clearColorFilter();
-        }
-        return super.onTouchEvent(event);
-    }
-
-    /**
-     * Method which allows the automatic hookup of a click handler when the Uri is changed
-     */
-    public void setImageClickHandlerDisabled(final boolean isHandlerDisabled) {
-        mDisableClickHandler = isHandlerDisabled;
-        setOnClickListener(null);
-        setClickable(false);
-    }
-
-    /**
-     * A convenience method that sets the URI of the contact icon by creating a new image request.
-     */
-    public void setImageResourceUri(final Uri uri) {
-        setImageResourceUri(uri, 0, null, null);
-    }
-
-    public void setImageResourceUri(final Uri uri, final long contactId,
-            final String contactLookupKey, final String normalizedDestination) {
-        if (uri == null) {
-            setImageResourceId(null);
-        } else {
-            final String avatarType = AvatarUriUtil.getAvatarType(uri);
-            if (AvatarUriUtil.TYPE_GROUP_URI.equals(avatarType)) {
-                setImageResourceId(new AvatarGroupRequestDescriptor(uri, mIconSize, mIconSize));
-            } else {
-                setImageResourceId(new AvatarRequestDescriptor(uri, mIconSize, mIconSize));
-            }
-        }
-
-        mContactId = contactId;
-        mContactLookupKey = contactLookupKey;
-        mNormalizedDestination = normalizedDestination;
-        mAvatarUri = uri;
-
-        maybeInitializeOnClickListener();
-    }
-
-    protected void maybeInitializeOnClickListener() {
-        if ((mContactId > ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED
-                && !TextUtils.isEmpty(mContactLookupKey)) ||
-                !TextUtils.isEmpty(mNormalizedDestination)) {
-            if (!mDisableClickHandler) {
-                setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(final View view) {
-                        ContactUtil.showOrAddContact(view, mContactId, mContactLookupKey,
-                                mAvatarUri, mNormalizedDestination);
-                    }
-                });
-            }
-        } else {
-            // This should happen when the phone number is not in the user's contacts or it is a
-            // group conversation, group conversations don't have contact phone numbers. If this
-            // is the case then absorb the click to prevent propagation.
-            setOnClickListener(null);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/ConversationDrawables.java b/src/com/android/messaging/ui/ConversationDrawables.java
deleted file mode 100644
index cf858e2..0000000
--- a/src/com/android/messaging/ui/ConversationDrawables.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.util.ImageUtils;
-
-/**
- * A singleton cache that holds tinted drawable resources for displaying messages, such as
- * message bubbles, audio attachments etc.
- */
-public class ConversationDrawables {
-    private static ConversationDrawables sInstance;
-
-    // Cache the color filtered bubble drawables so that we don't need to create a
-    // new one for each ConversationMessageView.
-    private Drawable mIncomingBubbleDrawable;
-    private Drawable mOutgoingBubbleDrawable;
-    private Drawable mIncomingErrorBubbleDrawable;
-    private Drawable mIncomingBubbleNoArrowDrawable;
-    private Drawable mOutgoingBubbleNoArrowDrawable;
-    private Drawable mAudioPlayButtonDrawable;
-    private Drawable mAudioPauseButtonDrawable;
-    private Drawable mIncomingAudioProgressBackgroundDrawable;
-    private Drawable mOutgoingAudioProgressBackgroundDrawable;
-    private Drawable mAudioProgressForegroundDrawable;
-    private Drawable mFastScrollThumbDrawable;
-    private Drawable mFastScrollThumbPressedDrawable;
-    private Drawable mFastScrollPreviewDrawableLeft;
-    private Drawable mFastScrollPreviewDrawableRight;
-    private final Context mContext;
-    private int mOutgoingBubbleColor;
-    private int mIncomingErrorBubbleColor;
-    private int mIncomingAudioButtonColor;
-    private int mSelectedBubbleColor;
-    private int mThemeColor;
-
-    public static ConversationDrawables get() {
-        if (sInstance == null) {
-            sInstance = new ConversationDrawables(Factory.get().getApplicationContext());
-        }
-        return sInstance;
-    }
-
-    private ConversationDrawables(final Context context) {
-        mContext = context;
-        // Pre-create all the drawables.
-        updateDrawables();
-    }
-
-    public int getConversationThemeColor() {
-        return mThemeColor;
-    }
-
-    public void updateDrawables() {
-        final Resources resources = mContext.getResources();
-
-        mIncomingBubbleDrawable = resources.getDrawable(R.drawable.msg_bubble_incoming);
-        mIncomingBubbleNoArrowDrawable =
-                resources.getDrawable(R.drawable.message_bubble_incoming_no_arrow);
-        mIncomingErrorBubbleDrawable = resources.getDrawable(R.drawable.msg_bubble_error);
-        mOutgoingBubbleDrawable =  resources.getDrawable(R.drawable.msg_bubble_outgoing);
-        mOutgoingBubbleNoArrowDrawable =
-                resources.getDrawable(R.drawable.message_bubble_outgoing_no_arrow);
-        mAudioPlayButtonDrawable = resources.getDrawable(R.drawable.ic_audio_play);
-        mAudioPauseButtonDrawable = resources.getDrawable(R.drawable.ic_audio_pause);
-        mIncomingAudioProgressBackgroundDrawable =
-                resources.getDrawable(R.drawable.audio_progress_bar_background_incoming);
-        mOutgoingAudioProgressBackgroundDrawable =
-                resources.getDrawable(R.drawable.audio_progress_bar_background_outgoing);
-        mAudioProgressForegroundDrawable =
-                resources.getDrawable(R.drawable.audio_progress_bar_progress);
-        mFastScrollThumbDrawable = resources.getDrawable(R.drawable.fastscroll_thumb);
-        mFastScrollThumbPressedDrawable =
-                resources.getDrawable(R.drawable.fastscroll_thumb_pressed);
-        mFastScrollPreviewDrawableLeft =
-                resources.getDrawable(R.drawable.fastscroll_preview_left);
-        mFastScrollPreviewDrawableRight =
-                resources.getDrawable(R.drawable.fastscroll_preview_right);
-        mOutgoingBubbleColor = resources.getColor(R.color.message_bubble_color_outgoing);
-        mIncomingErrorBubbleColor =
-                resources.getColor(R.color.message_error_bubble_color_incoming);
-        mIncomingAudioButtonColor =
-                resources.getColor(R.color.message_audio_button_color_incoming);
-        mSelectedBubbleColor = resources.getColor(R.color.message_bubble_color_selected);
-        mThemeColor = resources.getColor(R.color.primary_color);
-    }
-
-    public Drawable getBubbleDrawable(final boolean selected, final boolean incoming,
-            final boolean needArrow, final boolean isError) {
-        final Drawable protoDrawable;
-        if (needArrow) {
-            if (incoming) {
-                protoDrawable = isError && !selected ?
-                        mIncomingErrorBubbleDrawable : mIncomingBubbleDrawable;
-            } else {
-                protoDrawable = mOutgoingBubbleDrawable;
-            }
-        } else if (incoming) {
-            protoDrawable = mIncomingBubbleNoArrowDrawable;
-        } else {
-            protoDrawable = mOutgoingBubbleNoArrowDrawable;
-        }
-
-        int color;
-        if (selected) {
-            color = mSelectedBubbleColor;
-        } else if (incoming) {
-            if (isError) {
-                color = mIncomingErrorBubbleColor;
-            } else {
-                color = mThemeColor;
-            }
-        } else {
-            color = mOutgoingBubbleColor;
-        }
-
-        return ImageUtils.getTintedDrawable(mContext, protoDrawable, color);
-    }
-
-    private int getAudioButtonColor(final boolean incoming) {
-        return incoming ? mIncomingAudioButtonColor : mThemeColor;
-    }
-
-    public Drawable getPlayButtonDrawable(final boolean incoming) {
-        return ImageUtils.getTintedDrawable(
-                mContext, mAudioPlayButtonDrawable, getAudioButtonColor(incoming));
-    }
-
-    public Drawable getPauseButtonDrawable(final boolean incoming) {
-        return ImageUtils.getTintedDrawable(
-                mContext, mAudioPauseButtonDrawable, getAudioButtonColor(incoming));
-    }
-
-    public Drawable getAudioProgressDrawable(final boolean incoming) {
-        return ImageUtils.getTintedDrawable(
-                mContext, mAudioProgressForegroundDrawable, getAudioButtonColor(incoming));
-    }
-
-    public Drawable getAudioProgressBackgroundDrawable(final boolean incoming) {
-        return incoming ? mIncomingAudioProgressBackgroundDrawable :
-            mOutgoingAudioProgressBackgroundDrawable;
-    }
-
-    public Drawable getFastScrollThumbDrawable(final boolean pressed) {
-        if (pressed) {
-            return ImageUtils.getTintedDrawable(mContext, mFastScrollThumbPressedDrawable,
-                    mThemeColor);
-        } else {
-            return mFastScrollThumbDrawable;
-        }
-    }
-
-    public Drawable getFastScrollPreviewDrawable(boolean positionRight) {
-        Drawable protoDrawable = positionRight ? mFastScrollPreviewDrawableRight :
-            mFastScrollPreviewDrawableLeft;
-        return ImageUtils.getTintedDrawable(mContext, protoDrawable, mThemeColor);
-    }
-}
diff --git a/src/com/android/messaging/ui/CursorRecyclerAdapter.java b/src/com/android/messaging/ui/CursorRecyclerAdapter.java
deleted file mode 100644
index 750223a..0000000
--- a/src/com/android/messaging/ui/CursorRecyclerAdapter.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.database.DataSetObserver;
-import android.os.Handler;
-import androidx.recyclerview.widget.RecyclerView;
-import android.util.Log;
-import android.view.ViewGroup;
-import android.widget.FilterQueryProvider;
-
-/**
- * Copy of CursorAdapter suited for RecyclerView.
- *
- * TODO: BUG 16327984. Replace this with a framework supported CursorAdapter for
- * RecyclerView when one is available.
- */
-public abstract class CursorRecyclerAdapter<VH extends RecyclerView.ViewHolder>
-        extends RecyclerView.Adapter<VH> {
-    /**
-     * This field should be made private, so it is hidden from the SDK.
-     * {@hide}
-     */
-    protected boolean mDataValid;
-    /**
-     * This field should be made private, so it is hidden from the SDK.
-     * {@hide}
-     */
-    protected boolean mAutoRequery;
-    /**
-     * This field should be made private, so it is hidden from the SDK.
-     * {@hide}
-     */
-    protected Cursor mCursor;
-    /**
-     * This field should be made private, so it is hidden from the SDK.
-     * {@hide}
-     */
-    protected Context mContext;
-    /**
-     * This field should be made private, so it is hidden from the SDK.
-     * {@hide}
-     */
-    protected int mRowIDColumn;
-    /**
-     * This field should be made private, so it is hidden from the SDK.
-     * {@hide}
-     */
-    protected ChangeObserver mChangeObserver;
-    /**
-     * This field should be made private, so it is hidden from the SDK.
-     * {@hide}
-     */
-    protected DataSetObserver mDataSetObserver;
-    /**
-     * This field should be made private, so it is hidden from the SDK.
-     * {@hide}
-     */
-    protected FilterQueryProvider mFilterQueryProvider;
-
-    /**
-     * If set the adapter will call requery() on the cursor whenever a content change
-     * notification is delivered. Implies {@link #FLAG_REGISTER_CONTENT_OBSERVER}.
-     *
-     * @deprecated This option is discouraged, as it results in Cursor queries
-     * being performed on the application's UI thread and thus can cause poor
-     * responsiveness or even Application Not Responding errors.  As an alternative,
-     * use {@link android.app.LoaderManager} with a {@link android.content.CursorLoader}.
-     */
-    @Deprecated
-    public static final int FLAG_AUTO_REQUERY = 0x01;
-
-    /**
-     * If set the adapter will register a content observer on the cursor and will call
-     * {@link #onContentChanged()} when a notification comes in.  Be careful when
-     * using this flag: you will need to unset the current Cursor from the adapter
-     * to avoid leaks due to its registered observers.  This flag is not needed
-     * when using a CursorAdapter with a
-     * {@link android.content.CursorLoader}.
-     */
-    public static final int FLAG_REGISTER_CONTENT_OBSERVER = 0x02;
-
-    /**
-     * Recommended constructor.
-     *
-     * @param c The cursor from which to get the data.
-     * @param context The context
-     * @param flags Flags used to determine the behavior of the adapter; may
-     * be any combination of {@link #FLAG_AUTO_REQUERY} and
-     * {@link #FLAG_REGISTER_CONTENT_OBSERVER}.
-     */
-    public CursorRecyclerAdapter(final Context context, final Cursor c, final int flags) {
-        init(context, c, flags);
-    }
-
-    void init(final Context context, final Cursor c, int flags) {
-        if ((flags & FLAG_AUTO_REQUERY) == FLAG_AUTO_REQUERY) {
-            flags |= FLAG_REGISTER_CONTENT_OBSERVER;
-            mAutoRequery = true;
-        } else {
-            mAutoRequery = false;
-        }
-        final boolean cursorPresent = c != null;
-        mCursor = c;
-        mDataValid = cursorPresent;
-        mContext = context;
-        mRowIDColumn = cursorPresent ? c.getColumnIndexOrThrow("_id") : -1;
-        if ((flags & FLAG_REGISTER_CONTENT_OBSERVER) == FLAG_REGISTER_CONTENT_OBSERVER) {
-            mChangeObserver = new ChangeObserver();
-            mDataSetObserver = new MyDataSetObserver();
-        } else {
-            mChangeObserver = null;
-            mDataSetObserver = null;
-        }
-
-        if (cursorPresent) {
-            if (mChangeObserver != null) {
-                c.registerContentObserver(mChangeObserver);
-            }
-            if (mDataSetObserver != null) {
-                c.registerDataSetObserver(mDataSetObserver);
-            }
-        }
-    }
-
-    /**
-     * Returns the cursor.
-     * @return the cursor.
-     */
-    public Cursor getCursor() {
-        return mCursor;
-    }
-
-    @Override
-    public int getItemCount() {
-        if (mDataValid && mCursor != null) {
-            return mCursor.getCount();
-        } else {
-            return 0;
-        }
-    }
-
-    /**
-     * @see androidx.recyclerview.widget.RecyclerView.Adapter#getItem(int)
-     */
-    public Object getItem(final int position) {
-        if (mDataValid && mCursor != null) {
-            mCursor.moveToPosition(position);
-            return mCursor;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * @see androidx.recyclerview.widget.RecyclerView.Adapter#getItemId(int)
-     */
-    @Override
-    public long getItemId(final int position) {
-        if (mDataValid && mCursor != null) {
-            if (mCursor.moveToPosition(position)) {
-                return mCursor.getLong(mRowIDColumn);
-            } else {
-                return 0;
-            }
-        } else {
-            return 0;
-        }
-    }
-
-    @Override
-    public VH onCreateViewHolder(final ViewGroup parent, final int viewType) {
-        return createViewHolder(mContext, parent, viewType);
-    }
-
-    @Override
-    public void onBindViewHolder(final VH holder, final int position) {
-        if (!mDataValid) {
-            throw new IllegalStateException("this should only be called when the cursor is valid");
-        }
-        if (!mCursor.moveToPosition(position)) {
-            throw new IllegalStateException("couldn't move cursor to position " + position);
-        }
-        bindViewHolder(holder, mContext, mCursor);
-    }
-    /**
-     * Bind an existing view to the data pointed to by cursor
-     * @param view Existing view, returned earlier by newView
-     * @param context Interface to application's global information
-     * @param cursor The cursor from which to get the data. The cursor is already
-     * moved to the correct position.
-     */
-    public abstract void bindViewHolder(VH holder, Context context, Cursor cursor);
-
-    /**
-     * @see androidx.recyclerview.widget.RecyclerView.Adapter#createViewHolder(Context, ViewGroup, int)
-     */
-    public abstract VH createViewHolder(Context context, ViewGroup parent, int viewType);
-
-    /**
-     * Change the underlying cursor to a new cursor. If there is an existing cursor it will be
-     * closed.
-     *
-     * @param cursor The new cursor to be used
-     */
-    public void changeCursor(final Cursor cursor) {
-        final Cursor old = swapCursor(cursor);
-        if (old != null) {
-            old.close();
-        }
-    }
-
-    /**
-     * Swap in a new Cursor, returning the old Cursor.  Unlike
-     * {@link #changeCursor(Cursor)}, the returned old Cursor is <em>not</em>
-     * closed.
-     *
-     * @param newCursor The new cursor to be used.
-     * @return Returns the previously set Cursor, or null if there wasa not one.
-     * If the given new Cursor is the same instance is the previously set
-     * Cursor, null is also returned.
-     */
-    public Cursor swapCursor(final Cursor newCursor) {
-        if (newCursor == mCursor) {
-            return null;
-        }
-        final Cursor oldCursor = mCursor;
-        if (oldCursor != null) {
-            if (mChangeObserver != null) {
-                oldCursor.unregisterContentObserver(mChangeObserver);
-            }
-            if (mDataSetObserver != null) {
-                oldCursor.unregisterDataSetObserver(mDataSetObserver);
-            }
-        }
-        mCursor = newCursor;
-        if (newCursor != null) {
-            if (mChangeObserver != null) {
-                newCursor.registerContentObserver(mChangeObserver);
-            }
-            if (mDataSetObserver != null) {
-                newCursor.registerDataSetObserver(mDataSetObserver);
-            }
-            mRowIDColumn = newCursor.getColumnIndexOrThrow("_id");
-            mDataValid = true;
-            // notify the observers about the new cursor
-            notifyDataSetChanged();
-        } else {
-            mRowIDColumn = -1;
-            mDataValid = false;
-            // notify the observers about the lack of a data set
-            notifyDataSetChanged();
-        }
-        return oldCursor;
-    }
-
-    /**
-     * <p>Converts the cursor into a CharSequence. Subclasses should override this
-     * method to convert their results. The default implementation returns an
-     * empty String for null values or the default String representation of
-     * the value.</p>
-     *
-     * @param cursor the cursor to convert to a CharSequence
-     * @return a CharSequence representing the value
-     */
-    public CharSequence convertToString(final Cursor cursor) {
-        return cursor == null ? "" : cursor.toString();
-    }
-
-    /**
-     * Called when the {@link ContentObserver} on the cursor receives a change notification.
-     * The default implementation provides the auto-requery logic, but may be overridden by
-     * sub classes.
-     *
-     * @see ContentObserver#onChange(boolean)
-     */
-    protected void onContentChanged() {
-        if (mAutoRequery && mCursor != null && !mCursor.isClosed()) {
-            if (false) {
-                Log.v("Cursor", "Auto requerying " + mCursor + " due to update");
-            }
-            mDataValid = mCursor.requery();
-        }
-    }
-
-    private class ChangeObserver extends ContentObserver {
-        public ChangeObserver() {
-            super(new Handler());
-        }
-
-        @Override
-        public boolean deliverSelfNotifications() {
-            return true;
-        }
-
-        @Override
-        public void onChange(final boolean selfChange) {
-            onContentChanged();
-        }
-    }
-
-    private class MyDataSetObserver extends DataSetObserver {
-        @Override
-        public void onChanged() {
-            mDataValid = true;
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public void onInvalidated() {
-            mDataValid = false;
-            notifyDataSetChanged();
-        }
-    }
-
-}
diff --git a/src/com/android/messaging/ui/CustomHeaderPagerListViewHolder.java b/src/com/android/messaging/ui/CustomHeaderPagerListViewHolder.java
deleted file mode 100644
index 1268c53..0000000
--- a/src/com/android/messaging/ui/CustomHeaderPagerListViewHolder.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AbsListView;
-import android.widget.AbsListView.OnScrollListener;
-import android.widget.CursorAdapter;
-import android.widget.ListView;
-
-import com.android.messaging.util.ImeUtil;
-
-/**
- * Produces and holds a list view and its tab header to be displayed in a ViewPager.
- */
-public abstract class CustomHeaderPagerListViewHolder extends BasePagerViewHolder
-        implements CustomHeaderPagerViewHolder {
-    private final Context mContext;
-    private final CursorAdapter mListAdapter;
-    private boolean mListCursorInitialized;
-    private ListView mListView;
-
-    public CustomHeaderPagerListViewHolder(final Context context,
-            final CursorAdapter adapter) {
-        mContext = context;
-        mListAdapter = adapter;
-    }
-
-    @Override
-    protected View createView(ViewGroup container) {
-        final LayoutInflater inflater = (LayoutInflater)
-                mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        final View view = inflater.inflate(
-                getLayoutResId(),
-                null /* root */,
-                false /* attachToRoot */);
-        final ListView listView = (ListView) view.findViewById(getListViewResId());
-        listView.setAdapter(mListAdapter);
-        listView.setOnScrollListener(new OnScrollListener() {
-            @Override
-            public void onScrollStateChanged(final AbsListView view, final int scrollState) {
-                if (scrollState != SCROLL_STATE_IDLE) {
-                    ImeUtil.get().hideImeKeyboard(mContext, view);
-                }
-            }
-
-            @Override
-            public void onScroll(final AbsListView view, final int firstVisibleItem,
-                    final int visibleItemCount, final int totalItemCount) {
-            }
-        });
-        mListView = listView;
-        maybeSetEmptyView();
-        return view;
-    }
-
-    public void onContactsCursorUpdated(final Cursor data) {
-        mListAdapter.swapCursor(data);
-        if (!mListCursorInitialized) {
-            // We set the emptyView here instead of in create so that the initial load won't show
-            // the empty UI - the system handles this and doesn't do what we would like.
-            mListCursorInitialized = true;
-            maybeSetEmptyView();
-        }
-    }
-
-    /**
-     *  We don't want to show the empty view hint until BOTH conditions are met:
-     *  1. The view has been created.
-     *  2. Cursor data has been loaded once.
-     *  Due to timing when data is loaded, the view may not be ready (and vice versa). So we
-     *  are calling this method from both onContactsCursorUpdated & createView.
-     */
-    private void maybeSetEmptyView() {
-        if (mView != null && mListCursorInitialized) {
-            final ListEmptyView emptyView = (ListEmptyView) mView.findViewById(getEmptyViewResId());
-            if (emptyView != null) {
-                emptyView.setTextHint(getEmptyViewTitleResId());
-                emptyView.setImageHint(getEmptyViewImageResId());
-                final ListView listView = (ListView) mView.findViewById(getListViewResId());
-                listView.setEmptyView(emptyView);
-            }
-        }
-    }
-
-    public void invalidateList() {
-        mListAdapter.notifyDataSetChanged();
-    }
-
-    /**
-     * In order for scene transition to work, we toggle the visibility for each individual list
-     * view items so that they can be properly tracked by the scene transition manager.
-     * @param show whether the pending transition is to show or hide the list.
-     */
-    public void toggleVisibilityForPendingTransition(final boolean show, final View epicenterView) {
-        if (mListView == null) {
-            return;
-        }
-        final int childCount = mListView.getChildCount();
-        for (int i = 0; i < childCount; i++) {
-            final View childView = mListView.getChildAt(i);
-            if (childView != epicenterView) {
-                childView.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
-            }
-        }
-    }
-
-    @Override
-    public CharSequence getPageTitle(Context context) {
-        return context.getString(getPageTitleResId());
-    }
-
-    protected abstract int getLayoutResId();
-    protected abstract int getPageTitleResId();
-    protected abstract int getEmptyViewResId();
-    protected abstract int getEmptyViewTitleResId();
-    protected abstract int getEmptyViewImageResId();
-    protected abstract int getListViewResId();
-}
diff --git a/src/com/android/messaging/ui/CustomHeaderPagerViewHolder.java b/src/com/android/messaging/ui/CustomHeaderPagerViewHolder.java
deleted file mode 100644
index 43802cd..0000000
--- a/src/com/android/messaging/ui/CustomHeaderPagerViewHolder.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-
-/**
- * An extension on the standard PagerViewHolder to return a custom header view to be used by
- * CustomHeaderViewPager
- */
-public interface CustomHeaderPagerViewHolder extends PagerViewHolder {
-    CharSequence getPageTitle(Context context);
-}
diff --git a/src/com/android/messaging/ui/CustomHeaderViewPager.java b/src/com/android/messaging/ui/CustomHeaderViewPager.java
deleted file mode 100644
index 31505c8..0000000
--- a/src/com/android/messaging/ui/CustomHeaderViewPager.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import androidx.viewpager.widget.PagerAdapter;
-import androidx.viewpager.widget.ViewPager;
-import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.LayoutInflater;
-import android.widget.LinearLayout;
-
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-
-/**
- * A view that contains both a view pager and a tab strip wrapped in a linear layout.
- */
-public class CustomHeaderViewPager extends LinearLayout {
-    public final static int DEFAULT_TAB_STRIP_SIZE = -1;
-    private final int mDefaultTabStripSize;
-    private ViewPager mViewPager;
-    private ViewPagerTabs mTabstrip;
-
-    public CustomHeaderViewPager(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-
-        final LayoutInflater inflater = LayoutInflater.from(context);
-        inflater.inflate(R.layout.custom_header_view_pager, this, true);
-        setOrientation(LinearLayout.VERTICAL);
-
-        mTabstrip = (ViewPagerTabs) findViewById(R.id.tab_strip);
-        mViewPager = (ViewPager) findViewById(R.id.pager);
-
-        TypedValue tv = new TypedValue();
-        context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true);
-        mDefaultTabStripSize = context.getResources().getDimensionPixelSize(tv.resourceId);
-    }
-
-    public void setCurrentItem(final int position) {
-        mViewPager.setCurrentItem(position);
-    }
-
-    public void setViewPagerTabHeight(final int tabHeight) {
-        mTabstrip.getLayoutParams().height = tabHeight == DEFAULT_TAB_STRIP_SIZE ?
-                mDefaultTabStripSize : tabHeight;
-    }
-
-    public void setViewHolders(final CustomHeaderPagerViewHolder[] viewHolders) {
-        Assert.notNull(mViewPager);
-        final PagerAdapter adapter = new CustomHeaderViewPagerAdapter(viewHolders);
-        mViewPager.setAdapter(adapter);
-        mTabstrip.setViewPager(mViewPager);
-        mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
-
-            @Override
-            public void onPageScrollStateChanged(int state) {
-                mTabstrip.onPageScrollStateChanged(state);
-            }
-
-            @Override
-            public void onPageScrolled(int position, float positionOffset,
-                    int positionOffsetPixels) {
-                mTabstrip.onPageScrolled(position, positionOffset, positionOffsetPixels);
-            }
-
-            @Override
-            public void onPageSelected(int position) {
-                mTabstrip.onPageSelected(position);
-            }
-        });
-    }
-
-    public int getSelectedItemPosition() {
-        return mTabstrip.getSelectedItemPosition();
-    }
-}
diff --git a/src/com/android/messaging/ui/CustomHeaderViewPagerAdapter.java b/src/com/android/messaging/ui/CustomHeaderViewPagerAdapter.java
deleted file mode 100644
index 1a5cf6a..0000000
--- a/src/com/android/messaging/ui/CustomHeaderViewPagerAdapter.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import com.android.messaging.Factory;
-
-public class CustomHeaderViewPagerAdapter extends
-        FixedViewPagerAdapter<CustomHeaderPagerViewHolder> {
-
-    public CustomHeaderViewPagerAdapter(final CustomHeaderPagerViewHolder[] viewHolders) {
-        super(viewHolders);
-    }
-
-    @Override
-    public CharSequence getPageTitle(int position) {
-        // The tab strip will handle RTL internally so we should use raw position.
-        return getViewHolder(position, false /* rtlAware */)
-                .getPageTitle(Factory.get().getApplicationContext());
-    }
-}
diff --git a/src/com/android/messaging/ui/FixedViewPagerAdapter.java b/src/com/android/messaging/ui/FixedViewPagerAdapter.java
deleted file mode 100644
index 30e11e3..0000000
--- a/src/com/android/messaging/ui/FixedViewPagerAdapter.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.os.Bundle;
-import android.os.Parcelable;
-import androidx.viewpager.widget.PagerAdapter;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.messaging.Factory;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.UiUtils;
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * A PagerAdapter that provides a fixed number of paged Views provided by a fixed set of
- * {@link PagerViewHolder}'s. This allows us to put a fixed number of Views, instead of fragments,
- * into a given ViewPager.
- */
-public class FixedViewPagerAdapter<T extends PagerViewHolder> extends PagerAdapter {
-    private final T[] mViewHolders;
-
-    public FixedViewPagerAdapter(final T[] viewHolders) {
-        Assert.notNull(viewHolders);
-        mViewHolders = viewHolders;
-    }
-
-    @Override
-    public Object instantiateItem(final ViewGroup container, final int position) {
-        final PagerViewHolder viewHolder = getViewHolder(position);
-        final View view = viewHolder.getView(container);
-        if (view == null) {
-            return null;
-        }
-        view.setTag(viewHolder);
-        container.addView(view);
-        return viewHolder;
-    }
-
-    @Override
-    public void destroyItem(final ViewGroup container, final int position, final Object object) {
-        final PagerViewHolder viewHolder = getViewHolder(position);
-        final View destroyedView = viewHolder.destroyView();
-        if (destroyedView != null) {
-            container.removeView(destroyedView);
-        }
-    }
-
-    @Override
-    public int getCount() {
-        return mViewHolders.length;
-    }
-
-    @Override
-    public boolean isViewFromObject(final View view, final Object object) {
-        return view.getTag() == object;
-    }
-
-    public T getViewHolder(final int i) {
-        return getViewHolder(i, true /* rtlAware */);
-    }
-
-    @VisibleForTesting
-    public T getViewHolder(final int i, final boolean rtlAware) {
-        return mViewHolders[rtlAware ? getRtlPosition(i) : i];
-    }
-
-    @Override
-    public Parcelable saveState() {
-        // The paged views in the view pager gets created and destroyed as the user scrolls through
-        // them. By default, only the pages to the immediate left and right of the current visible
-        // page are realized. Moreover, if the activity gets destroyed and recreated, the pages are
-        // automatically destroyed. Therefore, in order to preserve transient page UI states that
-        // are not persisted in the DB we'd like to store them in a Bundle when views get
-        // destroyed. When the views get recreated, we rehydrate them by passing them the saved
-        // data. When the activity gets destroyed, it invokes saveState() on this adapter to
-        // add this saved Bundle to the overall saved instance state.
-        final Bundle savedViewHolderState = new Bundle(Factory.get().getApplicationContext()
-                .getClassLoader());
-        for (int i = 0; i < mViewHolders.length; i++) {
-            final Parcelable pageState = getViewHolder(i).saveState();
-            savedViewHolderState.putParcelable(getInstanceStateKeyForPage(i), pageState);
-        }
-        return savedViewHolderState;
-    }
-
-    @Override
-    public void restoreState(final Parcelable state, final ClassLoader loader) {
-        if (state instanceof Bundle) {
-            final Bundle restoredViewHolderState = (Bundle) state;
-            ((Bundle) state).setClassLoader(Factory.get().getApplicationContext().getClassLoader());
-            for (int i = 0; i < mViewHolders.length; i++) {
-                final Parcelable pageState = restoredViewHolderState
-                        .getParcelable(getInstanceStateKeyForPage(i));
-                getViewHolder(i).restoreState(pageState);
-            }
-        } else {
-            super.restoreState(state, loader);
-        }
-    }
-
-    public void resetState() {
-        for (int i = 0; i < mViewHolders.length; i++) {
-            getViewHolder(i).resetState();
-        }
-    }
-
-    private String getInstanceStateKeyForPage(final int i) {
-        return getViewHolder(i).getClass().getCanonicalName() + "_savedstate_" + i;
-    }
-
-    protected int getRtlPosition(final int position) {
-        if (UiUtils.isRtlMode()) {
-            return mViewHolders.length - 1 - position;
-        }
-        return position;
-    }
-}
diff --git a/src/com/android/messaging/ui/ImeDetectFrameLayout.java b/src/com/android/messaging/ui/ImeDetectFrameLayout.java
deleted file mode 100644
index 32564ea..0000000
--- a/src/com/android/messaging/ui/ImeDetectFrameLayout.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.FrameLayout;
-
-import com.android.messaging.util.ImeUtil;
-import com.android.messaging.util.LogUtil;
-
-public class ImeDetectFrameLayout extends FrameLayout {
-    public ImeDetectFrameLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        final int measuredHeight = getMeasuredHeight();
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(LogUtil.BUGLE_TAG, "ImeDetectFrameLayout " +
-                    "measuredHeight: " + measuredHeight + " getMeasuredHeight(): " +
-                    getMeasuredHeight());
-        }
-
-        if (measuredHeight != getMeasuredHeight() && getContext() instanceof ImeUtil.ImeStateHost) {
-            ((ImeUtil.ImeStateHost) getContext()).onDisplayHeightChanged(heightMeasureSpec);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/LicenseActivity.java b/src/com/android/messaging/ui/LicenseActivity.java
deleted file mode 100644
index a28da81..0000000
--- a/src/com/android/messaging/ui/LicenseActivity.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.webkit.WebView;
-
-import com.android.messaging.R;
-
-public class LicenseActivity extends Activity {
-    private final String LICENSE_URL = "file:///android_asset/licenses.html";
-
-    @Override
-    public void onCreate(final Bundle bundle) {
-        super.onCreate(bundle);
-        setContentView(R.layout.license_activity);
-        final WebView webView = (WebView) findViewById(R.id.content);
-        webView.loadUrl(LICENSE_URL);
-    }
-}
diff --git a/src/com/android/messaging/ui/LineWrapLayout.java b/src/com/android/messaging/ui/LineWrapLayout.java
deleted file mode 100644
index 5219811..0000000
--- a/src/com/android/messaging/ui/LineWrapLayout.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.UiUtils;
-
-import java.util.ArrayList;
-
-/**
-* A line-wrapping flow layout. Arranges children in horizontal flow, packing as many
-* child views as possible on each line. When the current line does not
-* have enough horizontal space, the layout continues on the next line.
-*/
-public class LineWrapLayout extends ViewGroup {
-    public LineWrapLayout(Context context) {
-        this(context, null);
-    }
-
-    public LineWrapLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        final int startPadding = UiUtils.getPaddingStart(this);
-        final int endPadding = UiUtils.getPaddingEnd(this);
-        final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
-        final int widthSize = MeasureSpec.getSize(widthMeasureSpec) - startPadding - endPadding;
-        final boolean isFixedSize = (widthMode == MeasureSpec.EXACTLY);
-
-        int height = 0;
-
-        int childCount = getChildCount();
-        int childWidthSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.AT_MOST);
-
-        int x = startPadding;
-        int currLineWidth = 0;
-        int currLineHeight = 0;
-        int maxLineWidth = 0;
-
-        for (int i = 0; i < childCount; i++) {
-            View currChild = getChildAt(i);
-            if (currChild.getVisibility() == GONE) {
-                continue;
-            }
-            LayoutParams layoutParams = (LayoutParams) currChild.getLayoutParams();
-            int startMargin = layoutParams.getStartMargin();
-            int endMargin = layoutParams.getEndMargin();
-            currChild.measure(childWidthSpec, MeasureSpec.UNSPECIFIED);
-            int childMeasuredWidth = currChild.getMeasuredWidth() + startMargin + endMargin;
-            int childMeasuredHeight = currChild.getMeasuredHeight() + layoutParams.topMargin +
-                    layoutParams.bottomMargin;
-
-            if ((x + childMeasuredWidth) > widthSize) {
-                // New line. Update the overall height and reset trackers.
-                height += currLineHeight;
-                currLineHeight = 0;
-                x = startPadding;
-                currLineWidth = 0;
-                startMargin = 0;
-            }
-
-            x += childMeasuredWidth;
-            currLineWidth += childMeasuredWidth;
-            currLineHeight = Math.max(currLineHeight, childMeasuredHeight);
-            maxLineWidth = Math.max(currLineWidth, maxLineWidth);
-        }
-        // And account for the height of the last line.
-        height += currLineHeight;
-
-        int width = isFixedSize ? widthSize : maxLineWidth;
-        setMeasuredDimension(width + startPadding + endPadding,
-                height + getPaddingTop() + getPaddingBottom());
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        final int startPadding = UiUtils.getPaddingStart(this);
-        final int endPadding = UiUtils.getPaddingEnd(this);
-        int width = getWidth() - startPadding - endPadding;
-        int y = getPaddingTop();
-        int x = startPadding;
-        int childCount = getChildCount();
-
-        int currLineHeight = 0;
-
-        // Do a dry-run first to get the line heights.
-        final ArrayList<Integer> lineHeights = new ArrayList<Integer>();
-        for (int i = 0; i < childCount; i++) {
-            View currChild = getChildAt(i);
-            if (currChild.getVisibility() == GONE) {
-                continue;
-            }
-            LayoutParams layoutParams = (LayoutParams) currChild.getLayoutParams();
-            int childWidth = currChild.getMeasuredWidth();
-            int childHeight = currChild.getMeasuredHeight();
-            int startMargin = layoutParams.getStartMargin();
-            int endMargin = layoutParams.getEndMargin();
-
-            if ((x + childWidth + startMargin + endMargin) > width) {
-                // new line
-                lineHeights.add(currLineHeight);
-                currLineHeight = 0;
-                x = startPadding;
-                startMargin = 0;
-            }
-            currLineHeight = Math.max(currLineHeight, childHeight + layoutParams.topMargin +
-                    layoutParams.bottomMargin);
-            x += childWidth + startMargin + endMargin;
-        }
-        // Add the last line height.
-        lineHeights.add(currLineHeight);
-
-        // Now perform the actual layout.
-        x = startPadding;
-        currLineHeight = 0;
-        int lineIndex = 0;
-        for (int i = 0; i < childCount; i++) {
-            View currChild = getChildAt(i);
-            if (currChild.getVisibility() == GONE) {
-                continue;
-            }
-            LayoutParams layoutParams = (LayoutParams) currChild.getLayoutParams();
-            int childWidth = currChild.getMeasuredWidth();
-            int childHeight = currChild.getMeasuredHeight();
-            int startMargin = layoutParams.getStartMargin();
-            int endMargin = layoutParams.getEndMargin();
-
-            if ((x + childWidth + startMargin + endMargin) > width) {
-                // new line
-                y += currLineHeight;
-                currLineHeight = 0;
-                x = startPadding;
-                startMargin = 0;
-                lineIndex++;
-            }
-            final int startPositionX = x + startMargin;
-            int startPositionY = y + layoutParams.topMargin;    // default to top gravity
-            final int majorGravity = layoutParams.gravity & Gravity.VERTICAL_GRAVITY_MASK;
-            if (majorGravity != Gravity.TOP && lineHeights.size() > lineIndex) {
-                final int lineHeight = lineHeights.get(lineIndex);
-                switch (majorGravity) {
-                    case Gravity.BOTTOM:
-                        startPositionY = y + lineHeight - childHeight - layoutParams.bottomMargin;
-                        break;
-
-                    case Gravity.CENTER_VERTICAL:
-                        startPositionY = y + (lineHeight - childHeight) / 2;
-                        break;
-                }
-            }
-
-            if (OsUtil.isAtLeastJB_MR2() && getResources().getConfiguration()
-                    .getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
-                currChild.layout(width - startPositionX - childWidth, startPositionY,
-                        width - startPositionX, startPositionY + childHeight);
-            } else {
-                currChild.layout(startPositionX, startPositionY, startPositionX + childWidth,
-                        startPositionY + childHeight);
-            }
-            currLineHeight = Math.max(currLineHeight, childHeight + layoutParams.topMargin +
-                    layoutParams.bottomMargin);
-            x += childWidth + startMargin + endMargin;
-        }
-    }
-
-    @Override
-    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
-        return new LayoutParams(p);
-    }
-
-    @Override
-    public LayoutParams generateLayoutParams(AttributeSet attrs) {
-        return new LayoutParams(getContext(), attrs);
-    }
-
-    @Override
-    protected LayoutParams generateDefaultLayoutParams() {
-        return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
-    }
-
-    public static final class LayoutParams extends FrameLayout.LayoutParams {
-        public LayoutParams(Context c, AttributeSet attrs) {
-            super(c, attrs);
-        }
-
-        public LayoutParams(int width, int height) {
-            super(width, height);
-        }
-
-        public LayoutParams(ViewGroup.LayoutParams source) {
-            super(source);
-        }
-
-        public int getStartMargin() {
-            if (OsUtil.isAtLeastJB_MR2()) {
-                return getMarginStart();
-            } else {
-                return leftMargin;
-            }
-        }
-
-        public int getEndMargin() {
-            if (OsUtil.isAtLeastJB_MR2()) {
-                return getMarginEnd();
-            } else {
-                return rightMargin;
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/ListEmptyView.java b/src/com/android/messaging/ui/ListEmptyView.java
deleted file mode 100644
index 8cf3049..0000000
--- a/src/com/android/messaging/ui/ListEmptyView.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-
-/**
- * A common reusable view that shows a hint image and text for an empty list view.
- */
-public class ListEmptyView extends LinearLayout {
-    private ImageView mEmptyImageHint;
-    private TextView mEmptyTextHint;
-
-    public ListEmptyView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-
-        mEmptyImageHint = (ImageView) findViewById(R.id.empty_image_hint);
-        mEmptyTextHint = (TextView) findViewById(R.id.empty_text_hint);
-    }
-
-    public void setImageHint(final int resId) {
-        mEmptyImageHint.setImageResource(resId);
-    }
-
-    public void setTextHint(final int resId) {
-        mEmptyTextHint.setText(getResources().getText(resId));
-    }
-
-    public void setTextHint(final CharSequence hintText) {
-        mEmptyTextHint.setText(hintText);
-    }
-
-    public void setIsImageVisible(final boolean isImageVisible) {
-        mEmptyImageHint.setVisibility(isImageVisible ? VISIBLE : GONE);
-    }
-
-    public void setIsVerticallyCentered(final boolean isVerticallyCentered) {
-        int gravity =
-                isVerticallyCentered ? Gravity.CENTER : Gravity.TOP | Gravity.CENTER_HORIZONTAL;
-        ((LinearLayout.LayoutParams) mEmptyImageHint.getLayoutParams()).gravity = gravity;
-        ((LinearLayout.LayoutParams) mEmptyTextHint.getLayoutParams()).gravity = gravity;
-        getLayoutParams().height =
-                isVerticallyCentered ? LayoutParams.WRAP_CONTENT : LayoutParams.MATCH_PARENT;
-        requestLayout();
-    }
-}
diff --git a/src/com/android/messaging/ui/MaxHeightScrollView.java b/src/com/android/messaging/ui/MaxHeightScrollView.java
deleted file mode 100644
index a000cd1..0000000
--- a/src/com/android/messaging/ui/MaxHeightScrollView.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.util.AttributeSet;
-import android.widget.ScrollView;
-
-import com.android.messaging.R;
-
-/**
- * A ScrollView that limits the maximum height that it can take. This is to work around android
- * layout's limitation of not having android:maxHeight.
- */
-public class MaxHeightScrollView extends ScrollView {
-    private static final int NO_MAX_HEIGHT = -1;
-
-    private final int mMaxHeight;
-
-    public MaxHeightScrollView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        final TypedArray attr = context.obtainStyledAttributes(attrs,
-                R.styleable.MaxHeightScrollView, 0, 0);
-        mMaxHeight = attr.getDimensionPixelSize(R.styleable.MaxHeightScrollView_android_maxHeight,
-                NO_MAX_HEIGHT);
-        attr.recycle();
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        if (mMaxHeight != NO_MAX_HEIGHT) {
-            setMeasuredDimension(getMeasuredWidth(), Math.min(getMeasuredHeight(), mMaxHeight));
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/MultiAttachmentLayout.java b/src/com/android/messaging/ui/MultiAttachmentLayout.java
deleted file mode 100644
index 5bae8a5..0000000
--- a/src/com/android/messaging/ui/MultiAttachmentLayout.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.animation.AnimationSet;
-import android.view.animation.ScaleAnimation;
-import android.view.animation.TranslateAnimation;
-import android.widget.FrameLayout;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.MediaPickerMessagePartData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.PendingAttachmentData;
-import com.android.messaging.datamodel.media.ImageRequestDescriptor;
-import com.android.messaging.ui.AsyncImageView.AsyncImageViewDelayLoader;
-import com.android.messaging.ui.animation.PopupTransitionAnimation;
-import com.android.messaging.util.AccessibilityUtil;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.UiUtils;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Holds and displays multiple attachments in a 4x2 grid. Each preview image "tile" can take
- * one of three sizes - small (1x1), wide (2x1) and large (2x2). We have a number of predefined
- * layout settings designed for holding 2, 3, 4+ attachments (these layout settings are
- * tweakable by design request to allow for max flexibility). For a visual example, consider the
- * following attachment layout:
- *
- * +---------------+----------------+
- * |               |                |
- * |               |       B        |
- * |               |                |
- * |       A       |-------+--------|
- * |               |       |        |
- * |               |   C   |    D   |
- * |               |       |        |
- * +---------------+-------+--------+
- *
- * In the above example, the layout consists of four tiles, A-D. A is a large tile, B is a
- * wide tile and C & D are both small tiles. A starts at (0,0) and ends at (1,1), B starts at
- * (2,0) and ends at (3,0), and so on. In our layout class we'd have these tiles in the order
- * of A-D, so that we make sure the last tile is always the one where we can put the overflow
- * indicator (e.g. "+2").
- */
-public class MultiAttachmentLayout extends FrameLayout {
-
-    public interface OnAttachmentClickListener {
-        boolean onAttachmentClick(MessagePartData attachment, Rect viewBoundsOnScreen,
-                boolean longPress);
-    }
-
-    private static final int GRID_WIDTH = 4;    // in # of cells
-    private static final int GRID_HEIGHT = 2;   // in # of cells
-
-    /**
-     * Represents a preview image tile in the layout
-     */
-    private static class Tile {
-        public final int startX;
-        public final int startY;
-        public final int endX;
-        public final int endY;
-
-        private Tile(final int startX, final int startY, final int endX, final int endY) {
-            this.startX = startX;
-            this.startY = startY;
-            this.endX = endX;
-            this.endY = endY;
-        }
-
-        public int getWidthMeasureSpec(final int cellWidth, final int padding) {
-            return MeasureSpec.makeMeasureSpec((endX - startX + 1) * cellWidth - padding * 2,
-                    MeasureSpec.EXACTLY);
-        }
-
-        public int getHeightMeasureSpec(final int cellHeight, final int padding) {
-            return MeasureSpec.makeMeasureSpec((endY - startY + 1) * cellHeight - padding * 2,
-                    MeasureSpec.EXACTLY);
-        }
-
-        public static Tile large(final int startX, final int startY) {
-            return new Tile(startX, startY, startX + 1, startY + 1);
-        }
-
-        public static Tile wide(final int startX, final int startY) {
-            return new Tile(startX, startY, startX + 1, startY);
-        }
-
-        public static Tile small(final int startX, final int startY) {
-            return new Tile(startX, startY, startX, startY);
-        }
-    }
-
-    /**
-     * A layout simply contains a list of tiles, in the order of top-left -> bottom-right.
-     */
-    private static class Layout {
-        public final List<Tile> tiles;
-        public Layout(final Tile[] tilesArray) {
-            tiles = Arrays.asList(tilesArray);
-        }
-    }
-
-    /**
-     * List of predefined layout configurations w.r.t no. of attachments.
-     */
-    private static final Layout[] ATTACHMENT_LAYOUTS_BY_COUNT = {
-        null,   // Doesn't support zero attachments.
-        null,   // Doesn't support one attachment. Single attachment preview is used instead.
-        new Layout(new Tile[] { Tile.large(0, 0), Tile.large(2, 0) }),                  // 2 items
-        new Layout(new Tile[] { Tile.large(0, 0), Tile.wide(2, 0), Tile.wide(2, 1) }),  // 3 items
-        new Layout(new Tile[] { Tile.large(0, 0), Tile.wide(2, 0), Tile.small(2, 1),    // 4+ items
-                Tile.small(3, 1) }),
-    };
-
-    /**
-     * List of predefined RTL layout configurations w.r.t no. of attachments.
-     */
-    private static final Layout[] ATTACHMENT_RTL_LAYOUTS_BY_COUNT = {
-        null,   // Doesn't support zero attachments.
-        null,   // Doesn't support one attachment. Single attachment preview is used instead.
-        new Layout(new Tile[] { Tile.large(2, 0), Tile.large(0, 0)}),                   // 2 items
-        new Layout(new Tile[] { Tile.large(2, 0), Tile.wide(0, 0), Tile.wide(0, 1) }),  // 3 items
-        new Layout(new Tile[] { Tile.large(2, 0), Tile.wide(0, 0), Tile.small(1, 1),    // 4+ items
-                Tile.small(0, 1) }),
-    };
-
-    private Layout mCurrentLayout;
-    private ArrayList<ViewWrapper> mPreviewViews;
-    private int mPlusNumber;
-    private TextView mPlusTextView;
-    private OnAttachmentClickListener mAttachmentClickListener;
-    private AsyncImageViewDelayLoader mImageViewDelayLoader;
-
-    public MultiAttachmentLayout(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mPreviewViews = new ArrayList<ViewWrapper>();
-    }
-
-    public void bindAttachments(final Iterable<MessagePartData> attachments,
-            final Rect transitionRect, final int count) {
-        final ArrayList<ViewWrapper> previousViews = mPreviewViews;
-        mPreviewViews = new ArrayList<ViewWrapper>();
-        removeView(mPlusTextView);
-        mPlusTextView = null;
-
-        determineLayout(attachments, count);
-        buildViews(attachments, previousViews, transitionRect);
-
-        // Remove all previous views that couldn't be recycled.
-        for (final ViewWrapper viewWrapper : previousViews) {
-            removeView(viewWrapper.view);
-        }
-        requestLayout();
-    }
-
-    public OnAttachmentClickListener getOnAttachmentClickListener() {
-        return mAttachmentClickListener;
-    }
-
-    public void setOnAttachmentClickListener(final OnAttachmentClickListener listener) {
-        mAttachmentClickListener = listener;
-    }
-
-    public void setImageViewDelayLoader(final AsyncImageViewDelayLoader delayLoader) {
-        mImageViewDelayLoader = delayLoader;
-    }
-
-    public void setColorFilter(int color) {
-        for (ViewWrapper viewWrapper : mPreviewViews) {
-            if (viewWrapper.view instanceof AsyncImageView) {
-                ((AsyncImageView) viewWrapper.view).setColorFilter(color);
-            }
-        }
-    }
-
-    public void clearColorFilter() {
-        for (ViewWrapper viewWrapper : mPreviewViews) {
-            if (viewWrapper.view instanceof AsyncImageView) {
-                ((AsyncImageView) viewWrapper.view).clearColorFilter();
-            }
-        }
-    }
-
-    private void determineLayout(final Iterable<MessagePartData> attachments, final int count) {
-        Assert.isTrue(attachments != null);
-        final boolean isRtl = AccessibilityUtil.isLayoutRtl(getRootView());
-        if (isRtl) {
-            mCurrentLayout = ATTACHMENT_RTL_LAYOUTS_BY_COUNT[Math.min(count,
-                    ATTACHMENT_RTL_LAYOUTS_BY_COUNT.length - 1)];
-        } else {
-            mCurrentLayout = ATTACHMENT_LAYOUTS_BY_COUNT[Math.min(count,
-                    ATTACHMENT_LAYOUTS_BY_COUNT.length - 1)];
-        }
-
-        // We must have a valid layout for the current configuration.
-        Assert.notNull(mCurrentLayout);
-
-        mPlusNumber = count - mCurrentLayout.tiles.size();
-        Assert.isTrue(mPlusNumber >= 0);
-    }
-
-    private void buildViews(final Iterable<MessagePartData> attachments,
-            final ArrayList<ViewWrapper> previousViews, final Rect transitionRect) {
-        final LayoutInflater layoutInflater = LayoutInflater.from(getContext());
-        final int count = mCurrentLayout.tiles.size();
-        int i = 0;
-        final Iterator<MessagePartData> iterator = attachments.iterator();
-        while (iterator.hasNext() && i < count) {
-            final MessagePartData attachment = iterator.next();
-            ViewWrapper attachmentWrapper = null;
-            // Try to recycle a previous view first
-            for (int j = 0; j < previousViews.size(); j++) {
-                final ViewWrapper previousView = previousViews.get(j);
-                if (previousView.attachment.equals(attachment) &&
-                        !(previousView.attachment instanceof PendingAttachmentData)) {
-                    attachmentWrapper = previousView;
-                    previousViews.remove(j);
-                    break;
-                }
-            }
-
-            if (attachmentWrapper == null) {
-                final View view = AttachmentPreviewFactory.createAttachmentPreview(layoutInflater,
-                        attachment, this, AttachmentPreviewFactory.TYPE_MULTIPLE,
-                        false /* startImageRequest */, mAttachmentClickListener);
-
-                if (view == null) {
-                    // createAttachmentPreview can return null if something goes wrong (e.g.
-                    // attachment has unsupported contentType)
-                    continue;
-                }
-                if (view instanceof AsyncImageView && mImageViewDelayLoader != null) {
-                    AsyncImageView asyncImageView = (AsyncImageView) view;
-                    asyncImageView.setDelayLoader(mImageViewDelayLoader);
-                }
-                addView(view);
-                attachmentWrapper = new ViewWrapper(view, attachment);
-                // Help animate from single to multi by copying over the prev location
-                if (count == 2 && i == 1 && transitionRect != null) {
-                    attachmentWrapper.prevLeft = transitionRect.left;
-                    attachmentWrapper.prevTop = transitionRect.top;
-                    attachmentWrapper.prevWidth = transitionRect.width();
-                    attachmentWrapper.prevHeight = transitionRect.height();
-                }
-            }
-            i++;
-            Assert.notNull(attachmentWrapper);
-            mPreviewViews.add(attachmentWrapper);
-
-            // The first view will animate in using PopupTransitionAnimation, but the remaining
-            // views will slide from their previous position to their new position within the
-            // layout
-            if (i == 0) {
-                if (attachment instanceof MediaPickerMessagePartData) {
-                    final Rect startRect = ((MediaPickerMessagePartData) attachment).getStartRect();
-                    new PopupTransitionAnimation(startRect, attachmentWrapper.view)
-                            .startAfterLayoutComplete();
-                }
-            }
-            attachmentWrapper.needsSlideAnimation = i > 0;
-        }
-
-        // Build the plus text view (e.g. "+2") for when there are more attachments than what
-        // this layout can display.
-        if (mPlusNumber > 0) {
-            mPlusTextView = (TextView) layoutInflater.inflate(R.layout.attachment_more_text_view,
-                    null /* parent */);
-            mPlusTextView.setText(getResources().getString(R.string.attachment_more_items,
-                    mPlusNumber));
-            addView(mPlusTextView);
-        }
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        final int maxWidth = getResources().getDimensionPixelSize(
-                R.dimen.multiple_attachment_preview_width);
-        final int maxHeight = getResources().getDimensionPixelSize(
-                R.dimen.multiple_attachment_preview_height);
-        final int width = Math.min(MeasureSpec.getSize(widthMeasureSpec), maxWidth);
-        final int height = maxHeight;
-        final int cellWidth = width / GRID_WIDTH;
-        final int cellHeight = height / GRID_HEIGHT;
-        final int count = mPreviewViews.size();
-        final int padding = getResources().getDimensionPixelOffset(
-                R.dimen.multiple_attachment_preview_padding);
-        for (int i = 0; i < count; i++) {
-            final View view =  mPreviewViews.get(i).view;
-            final Tile imageTile = mCurrentLayout.tiles.get(i);
-            view.measure(imageTile.getWidthMeasureSpec(cellWidth, padding),
-                    imageTile.getHeightMeasureSpec(cellHeight, padding));
-
-            // Now that we know the size, we can request an appropriately-sized image.
-            if (view instanceof AsyncImageView) {
-                final ImageRequestDescriptor imageRequest =
-                        AttachmentPreviewFactory.getImageRequestDescriptorForAttachment(
-                                mPreviewViews.get(i).attachment,
-                                view.getMeasuredWidth(),
-                                view.getMeasuredHeight());
-                ((AsyncImageView) view).setImageResourceId(imageRequest);
-            }
-
-            if (i == count - 1 && mPlusTextView != null) {
-                // The plus text view always covers the last attachment.
-                mPlusTextView.measure(imageTile.getWidthMeasureSpec(cellWidth, padding),
-                        imageTile.getHeightMeasureSpec(cellHeight, padding));
-            }
-        }
-        setMeasuredDimension(width, height);
-    }
-
-    @Override
-    protected void onLayout(final boolean changed, final int left, final int top, final int right,
-            final int bottom) {
-        final int cellWidth = getMeasuredWidth() / GRID_WIDTH;
-        final int cellHeight = getMeasuredHeight() / GRID_HEIGHT;
-        final int padding = getResources().getDimensionPixelOffset(
-                R.dimen.multiple_attachment_preview_padding);
-        final int count = mPreviewViews.size();
-        for (int i = 0; i < count; i++) {
-            final ViewWrapper viewWrapper =  mPreviewViews.get(i);
-            final View view = viewWrapper.view;
-            final Tile imageTile = mCurrentLayout.tiles.get(i);
-            final int tileLeft = imageTile.startX * cellWidth;
-            final int tileTop = imageTile.startY * cellHeight;
-            view.layout(tileLeft + padding, tileTop + padding,
-                    tileLeft + view.getMeasuredWidth(),
-                    tileTop + view.getMeasuredHeight());
-            if (viewWrapper.needsSlideAnimation) {
-                trySlideAttachmentView(viewWrapper);
-                viewWrapper.needsSlideAnimation = false;
-            } else {
-                viewWrapper.prevLeft = view.getLeft();
-                viewWrapper.prevTop = view.getTop();
-                viewWrapper.prevWidth = view.getWidth();
-                viewWrapper.prevHeight = view.getHeight();
-            }
-
-            if (i == count - 1 && mPlusTextView != null) {
-                // The plus text view always covers the last attachment.
-                mPlusTextView.layout(tileLeft + padding, tileTop + padding,
-                        tileLeft + mPlusTextView.getMeasuredWidth(),
-                        tileTop + mPlusTextView.getMeasuredHeight());
-            }
-        }
-    }
-
-    private void trySlideAttachmentView(final ViewWrapper viewWrapper) {
-        if (!(viewWrapper.attachment instanceof MediaPickerMessagePartData)) {
-            return;
-        }
-        final View view = viewWrapper.view;
-
-
-        final int xOffset = viewWrapper.prevLeft - view.getLeft();
-        final int yOffset = viewWrapper.prevTop - view.getTop();
-        final float scaleX = viewWrapper.prevWidth / (float) view.getWidth();
-        final float scaleY = viewWrapper.prevHeight / (float) view.getHeight();
-
-        if (xOffset == 0 && yOffset == 0 && scaleX == 1 && scaleY == 1) {
-            // Layout hasn't changed
-            return;
-        }
-
-        final AnimationSet animationSet = new AnimationSet(
-                true /* shareInterpolator */);
-        animationSet.addAnimation(new TranslateAnimation(xOffset, 0, yOffset, 0));
-        animationSet.addAnimation(new ScaleAnimation(scaleX, 1, scaleY, 1));
-        animationSet.setDuration(
-                UiUtils.MEDIAPICKER_TRANSITION_DURATION);
-        animationSet.setInterpolator(UiUtils.DEFAULT_INTERPOLATOR);
-        view.startAnimation(animationSet);
-        view.invalidate();
-        viewWrapper.prevLeft = view.getLeft();
-        viewWrapper.prevTop = view.getTop();
-        viewWrapper.prevWidth = view.getWidth();
-        viewWrapper.prevHeight = view.getHeight();
-    }
-
-    public View findViewForAttachment(final MessagePartData attachment) {
-        for (ViewWrapper wrapper : mPreviewViews) {
-            if (wrapper.attachment.equals(attachment) &&
-                    !(wrapper.attachment instanceof PendingAttachmentData)) {
-                return wrapper.view;
-            }
-        }
-        return null;
-    }
-
-    private static class ViewWrapper {
-        final View view;
-        final MessagePartData attachment;
-        boolean needsSlideAnimation;
-        int prevLeft;
-        int prevTop;
-        int prevWidth;
-        int prevHeight;
-
-        ViewWrapper(final View view, final MessagePartData attachment) {
-            this.view = view;
-            this.attachment = attachment;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/OrientedBitmapDrawable.java b/src/com/android/messaging/ui/OrientedBitmapDrawable.java
deleted file mode 100644
index 9242668..0000000
--- a/src/com/android/messaging/ui/OrientedBitmapDrawable.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.drawable.BitmapDrawable;
-import android.view.Gravity;
-
-import com.android.messaging.util.exif.ExifInterface;
-
-/**
- * A drawable that draws a bitmap in a flipped or rotated orientation without having to adjust the
- * bitmap
- */
-public class OrientedBitmapDrawable extends BitmapDrawable {
-    private final ExifInterface.OrientationParams mOrientationParams;
-    private final Rect mDstRect;
-    private int mCenterX;
-    private int mCenterY;
-    private boolean mApplyGravity;
-
-    public static BitmapDrawable create(final int orientation, Resources res, Bitmap bitmap) {
-        if (orientation <= ExifInterface.Orientation.TOP_LEFT) {
-            // No need to adjust the bitmap, so just use a regular BitmapDrawable
-            return new BitmapDrawable(res, bitmap);
-        } else {
-            // Create an oriented bitmap drawable
-            return new OrientedBitmapDrawable(orientation, res, bitmap);
-        }
-    }
-
-    private OrientedBitmapDrawable(final int orientation, Resources res, Bitmap bitmap) {
-        super(res, bitmap);
-        mOrientationParams = ExifInterface.getOrientationParams(orientation);
-        mApplyGravity = true;
-        mDstRect = new Rect();
-    }
-
-    @Override
-    public int getIntrinsicWidth() {
-        if (mOrientationParams.invertDimensions) {
-            return super.getIntrinsicHeight();
-        }
-        return super.getIntrinsicWidth();
-    }
-
-    @Override
-    public int getIntrinsicHeight() {
-        if (mOrientationParams.invertDimensions) {
-            return super.getIntrinsicWidth();
-        }
-        return super.getIntrinsicHeight();
-    }
-
-    @Override
-    protected void onBoundsChange(Rect bounds) {
-        super.onBoundsChange(bounds);
-        mApplyGravity = true;
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        if (mApplyGravity) {
-            Gravity.apply(getGravity(), getIntrinsicWidth(), getIntrinsicHeight(), getBounds(),
-                    mDstRect);
-            mCenterX = mDstRect.centerX();
-            mCenterY = mDstRect.centerY();
-            if (mOrientationParams.invertDimensions) {
-                final Matrix matrix = new Matrix();
-                matrix.setRotate(mOrientationParams.rotation, mCenterX, mCenterY);
-                final RectF rotatedRect = new RectF(mDstRect);
-                matrix.mapRect(rotatedRect);
-                mDstRect.set((int) rotatedRect.left, (int) rotatedRect.top, (int) rotatedRect.right,
-                        (int) rotatedRect.bottom);
-            }
-
-            mApplyGravity = false;
-        }
-        canvas.save();
-        canvas.scale(mOrientationParams.scaleX, mOrientationParams.scaleY, mCenterX, mCenterY);
-        canvas.rotate(mOrientationParams.rotation, mCenterX, mCenterY);
-        canvas.drawBitmap(getBitmap(), (Rect) null, mDstRect, getPaint());
-        canvas.restore();
-    }
-}
diff --git a/src/com/android/messaging/ui/PagerViewHolder.java b/src/com/android/messaging/ui/PagerViewHolder.java
deleted file mode 100644
index 2f33a0f..0000000
--- a/src/com/android/messaging/ui/PagerViewHolder.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.view.View;
-import android.view.ViewGroup;
-
-/**
- * Holds reusable View(s) for a {@link FixedViewPagerAdapter} to display a page. By using
- * reusable Views inside ViewPagers this allows us to get rid of nested fragments and the messy
- * activity lifecycle problems they entail.
- */
-public interface PagerViewHolder extends PersistentInstanceState {
-    /** Instructs the pager to clean up any view related resources
-     * @return the destroyed View so that the adapter may remove it from the container, or
-     * null if no View has been created. */
-    View destroyView();
-
-    /** @return The view that presents the page view to the user */
-    View getView(ViewGroup container);
-}
diff --git a/src/com/android/messaging/ui/PagingAwareViewPager.java b/src/com/android/messaging/ui/PagingAwareViewPager.java
deleted file mode 100644
index 34562dc..0000000
--- a/src/com/android/messaging/ui/PagingAwareViewPager.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import androidx.viewpager.widget.PagerAdapter;
-import androidx.viewpager.widget.ViewPager;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-
-import com.android.messaging.util.UiUtils;
-
-/**
- * A simple extension on the standard ViewPager which lets you turn paging on/off.
- */
-public class PagingAwareViewPager extends ViewPager {
-    private boolean mPagingEnabled = true;
-
-    public PagingAwareViewPager(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public void setCurrentItem(int item, boolean smoothScroll) {
-        super.setCurrentItem(getRtlPosition(item), smoothScroll);
-    }
-
-    @Override
-    public void setCurrentItem(int item) {
-        super.setCurrentItem(getRtlPosition(item));
-    }
-
-    @Override
-    public int getCurrentItem() {
-        int position = super.getCurrentItem();
-        return getRtlPosition(position);
-    }
-
-    /**
-     * Switches position in pager to be adjusted for if we are in RtL mode
-     *
-     * @param position
-     * @return position adjusted if in rtl mode
-     */
-    protected int getRtlPosition(final int position) {
-        final PagerAdapter adapter = getAdapter();
-        if (adapter != null && UiUtils.isRtlMode()) {
-            return adapter.getCount() - 1 - position;
-        }
-        return position;
-    }
-
-    @Override
-    public boolean onTouchEvent(final MotionEvent event) {
-        if (!mPagingEnabled) {
-            return false;
-        }
-        return super.onTouchEvent(event);
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(final MotionEvent event) {
-        if (!mPagingEnabled) {
-            return false;
-        }
-        return super.onInterceptTouchEvent(event);
-    }
-
-    public void setPagingEnabled(final boolean enabled) {
-        this.mPagingEnabled = enabled;
-    }
-
-    /** This prevents touch-less scrolling eg. while doing accessibility navigation. */
-    @Override
-    public boolean canScrollHorizontally(int direction) {
-        if (mPagingEnabled) {
-            return super.canScrollHorizontally(direction);
-        } else {
-            return false;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/PermissionCheckActivity.java b/src/com/android/messaging/ui/PermissionCheckActivity.java
deleted file mode 100644
index 1b8cedb..0000000
--- a/src/com/android/messaging/ui/PermissionCheckActivity.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.SystemClock;
-import android.provider.Settings;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.TextView;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.UiUtils;
-
-/**
- * Activity to check if the user has required permissions. If not, it will try to prompt the user
- * to grant permissions. However, the OS may not actually prompt the user if the user had
- * previously checked the "Never ask again" checkbox while denying the required permissions.
- */
-public class PermissionCheckActivity extends Activity {
-    private static final int REQUIRED_PERMISSIONS_REQUEST_CODE = 1;
-    private static final long AUTOMATED_RESULT_THRESHOLD_MILLLIS = 250;
-    private static final String PACKAGE_URI_PREFIX = "package:";
-    private long mRequestTimeMillis;
-    private TextView mNextView;
-    private TextView mSettingsView;
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (redirectIfNeeded()) {
-            return;
-        }
-
-        setContentView(R.layout.permission_check_activity);
-        UiUtils.setStatusBarColor(this, getColor(R.color.permission_check_activity_background));
-
-        findViewById(R.id.exit).setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View view) {
-                finish();
-            }
-        });
-
-        mNextView = (TextView) findViewById(R.id.next);
-        mNextView.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View view) {
-                tryRequestPermission();
-            }
-        });
-
-        mSettingsView = (TextView) findViewById(R.id.settings);
-        mSettingsView.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View view) {
-                final Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
-                        Uri.parse(PACKAGE_URI_PREFIX + getPackageName()));
-                startActivity(intent);
-            }
-        });
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-
-        if (redirectIfNeeded()) {
-            return;
-        }
-    }
-
-    private void tryRequestPermission() {
-        final String[] missingPermissions = OsUtil.getMissingRequiredPermissions();
-        if (missingPermissions.length == 0) {
-            redirect();
-            return;
-        }
-
-        mRequestTimeMillis = SystemClock.elapsedRealtime();
-        requestPermissions(missingPermissions, REQUIRED_PERMISSIONS_REQUEST_CODE);
-    }
-
-    @Override
-    public void onRequestPermissionsResult(
-            final int requestCode, final String permissions[], final int[] grantResults) {
-        if (requestCode == REQUIRED_PERMISSIONS_REQUEST_CODE) {
-            // We do not use grantResults as some of the granted permissions might have been
-            // revoked while the permissions dialog box was being shown for the missing permissions.
-            if (!redirectIfNeeded()) {
-                final long currentTimeMillis = SystemClock.elapsedRealtime();
-                // If the permission request completes very quickly, it must be because the system
-                // automatically denied. This can happen if the user had previously denied it
-                // and checked the "Never ask again" check box.
-                if ((currentTimeMillis - mRequestTimeMillis) < AUTOMATED_RESULT_THRESHOLD_MILLLIS) {
-                    mNextView.setVisibility(View.GONE);
-
-                    mSettingsView.setVisibility(View.VISIBLE);
-                    findViewById(R.id.enable_permission_procedure).setVisibility(View.VISIBLE);
-                }
-            }
-        }
-    }
-
-    /** Returns true if the redirecting was performed */
-    private boolean redirectIfNeeded() {
-        if (!OsUtil.hasRequiredPermissions()) {
-            return false;
-        }
-
-        Factory.get().onRequiredPermissionsAcquired();
-        redirect();
-        return true;
-    }
-
-    private void redirect() {
-        UIIntents.get().launchConversationListActivity(this);
-        finish();
-    }
-}
diff --git a/src/com/android/messaging/ui/PersistentInstanceState.java b/src/com/android/messaging/ui/PersistentInstanceState.java
deleted file mode 100644
index 3cc1856..0000000
--- a/src/com/android/messaging/ui/PersistentInstanceState.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.os.Parcelable;
-
-/**
- * Wraps around functionality to save, restore and reset a particular UI component's state.
- */
-public interface PersistentInstanceState {
-    /**
-     * Saves necessary information about the current state of the instance to later restore
-     * the instance to its original state.
-     */
-    Parcelable saveState();
-
-    /**
-     * Given a previously saved instance state, attempt to restore to its original view state.
-     */
-    void restoreState(Parcelable restoredState);
-
-    /**
-     * Called when any current/preserved state should be reset to zero state.
-     */
-    void resetState();
-}
diff --git a/src/com/android/messaging/ui/PersonItemView.java b/src/com/android/messaging/ui/PersonItemView.java
deleted file mode 100644
index 2db1219..0000000
--- a/src/com/android/messaging/ui/PersonItemView.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.content.Intent;
-import androidx.core.text.BidiFormatter;
-import androidx.core.text.TextDirectionHeuristicsCompat;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnLayoutChangeListener;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.binding.DetachableBinding;
-import com.android.messaging.datamodel.data.PersonItemData;
-import com.android.messaging.datamodel.data.PersonItemData.PersonItemDataListener;
-import com.android.messaging.util.AccessibilityUtil;
-import com.android.messaging.util.UiUtils;
-
-/**
- * Shows a view for a "person" - could be a contact or a participant. This always shows a
- * contact icon on the left, and the person's display name on the right.
- *
- * This view is always bound to an abstract PersonItemData class, so to use it for a specific
- * scenario, all you need to do is to create a concrete PersonItemData subclass that bridges
- * between the underlying data (e.g. ParticipantData) and what the UI wants (e.g. display name).
- */
-public class PersonItemView extends LinearLayout implements PersonItemDataListener,
-        OnLayoutChangeListener {
-    public interface PersonItemViewListener {
-        void onPersonClicked(PersonItemData data);
-        boolean onPersonLongClicked(PersonItemData data);
-    }
-
-    protected final DetachableBinding<PersonItemData> mBinding;
-    private TextView mNameTextView;
-    private TextView mDetailsTextView;
-    private ContactIconView mContactIconView;
-    private View mDetailsContainer;
-    private PersonItemViewListener mListener;
-    private boolean mAvatarOnly;
-
-    public PersonItemView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mBinding = BindingBase.createDetachableBinding(this);
-        LayoutInflater.from(getContext()).inflate(R.layout.person_item_view, this, true);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        mNameTextView = (TextView) findViewById(R.id.name);
-        mDetailsTextView = (TextView) findViewById(R.id.details);
-        mContactIconView = (ContactIconView) findViewById(R.id.contact_icon);
-        mDetailsContainer = findViewById(R.id.details_container);
-        mNameTextView.addOnLayoutChangeListener(this);
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        if (mBinding.isBound()) {
-            mBinding.detach();
-        }
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        mBinding.reAttachIfPossible();
-    }
-
-    /**
-     * Binds to a person item data which will provide us info to be displayed.
-     * @param personData the PersonItemData to be bound to.
-     */
-    public void bind(final PersonItemData personData) {
-        if (mBinding.isBound()) {
-            if (mBinding.getData().equals(personData)) {
-                // Don't rebind if we are requesting the same data.
-                return;
-            }
-            mBinding.unbind();
-        }
-
-        if (personData != null) {
-            mBinding.bind(personData);
-            mBinding.getData().setListener(this);
-
-            // Accessibility reason : in case phone numbers are mixed in the display name,
-            // we need to vocalize it for talkback.
-            final String vocalizedDisplayName = AccessibilityUtil.getVocalizedPhoneNumber(
-                    getResources(), getDisplayName());
-            mNameTextView.setContentDescription(vocalizedDisplayName);
-        }
-        updateViewAppearance();
-    }
-
-    /**
-     * @return Display name, possibly comma-ellipsized.
-     */
-    private String getDisplayName() {
-        final int width = mNameTextView.getMeasuredWidth();
-        final String displayName = mBinding.getData().getDisplayName();
-        if (width == 0 || TextUtils.isEmpty(displayName) || !displayName.contains(",")) {
-            return displayName;
-        }
-        final String plusOneString = getContext().getString(R.string.plus_one);
-        final String plusNString = getContext().getString(R.string.plus_n);
-        return BidiFormatter.getInstance().unicodeWrap(
-                UiUtils.commaEllipsize(
-                        displayName,
-                        mNameTextView.getPaint(),
-                        width,
-                        plusOneString,
-                        plusNString).toString(),
-                TextDirectionHeuristicsCompat.LTR);
-    }
-
-    @Override
-    public void onLayoutChange(final View v, final int left, final int top, final int right,
-            final int bottom, final int oldLeft, final int oldTop, final int oldRight,
-            final int oldBottom) {
-        if (mBinding.isBound() && v == mNameTextView) {
-            setNameTextView();
-        }
-    }
-
-    /**
-     * When set to true, we display only the avatar of the person and hide everything else.
-     */
-    public void setAvatarOnly(final boolean avatarOnly) {
-        mAvatarOnly = avatarOnly;
-        mDetailsContainer.setVisibility(avatarOnly ? GONE : VISIBLE);
-    }
-
-    public boolean isAvatarOnly() {
-        return mAvatarOnly;
-    }
-
-    public void setNameTextColor(final int color) {
-        mNameTextView.setTextColor(color);
-    }
-
-    public void setDetailsTextColor(final int color) {
-        mDetailsTextView.setTextColor(color);
-    }
-
-    public void setListener(final PersonItemViewListener listener) {
-        mListener = listener;
-        if (mListener == null) {
-            return;
-        }
-        setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View v) {
-                if (mListener != null && mBinding.isBound()) {
-                    mListener.onPersonClicked(mBinding.getData());
-                }
-            }
-        });
-        final OnLongClickListener onLongClickListener = new OnLongClickListener() {
-            @Override
-            public boolean onLongClick(View v) {
-                if (mListener != null && mBinding.isBound()) {
-                    return mListener.onPersonLongClicked(mBinding.getData());
-                }
-                return false;
-            }
-        };
-        setOnLongClickListener(onLongClickListener);
-        mContactIconView.setOnLongClickListener(onLongClickListener);
-    }
-
-    public void performClickOnAvatar() {
-        mContactIconView.performClick();
-    }
-
-    protected void updateViewAppearance() {
-        if (mBinding.isBound()) {
-            setNameTextView();
-
-            final String details = mBinding.getData().getDetails();
-            if (TextUtils.isEmpty(details)) {
-                mDetailsTextView.setVisibility(GONE);
-            } else {
-                mDetailsTextView.setVisibility(VISIBLE);
-                mDetailsTextView.setText(details);
-            }
-
-            mContactIconView.setImageResourceUri(mBinding.getData().getAvatarUri(),
-                    mBinding.getData().getContactId(), mBinding.getData().getLookupKey(),
-                    mBinding.getData().getNormalizedDestination());
-        } else {
-            mNameTextView.setText("");
-            mContactIconView.setImageResourceUri(null);
-        }
-    }
-
-    private void setNameTextView() {
-        final String displayName = getDisplayName();
-        if (TextUtils.isEmpty(displayName)) {
-            mNameTextView.setVisibility(GONE);
-        } else {
-            mNameTextView.setVisibility(VISIBLE);
-            mNameTextView.setText(displayName);
-        }
-    }
-
-    @Override
-    public void onPersonDataUpdated(final PersonItemData data) {
-        mBinding.ensureBound(data);
-        updateViewAppearance();
-    }
-
-    @Override
-    public void onPersonDataFailed(final PersonItemData data, final Exception exception) {
-        mBinding.ensureBound(data);
-        updateViewAppearance();
-    }
-
-    public Intent getClickIntent() {
-        return mBinding.getData().getClickIntent();
-    }
-}
diff --git a/src/com/android/messaging/ui/PlaceholderInsetDrawable.java b/src/com/android/messaging/ui/PlaceholderInsetDrawable.java
deleted file mode 100644
index dda2e7b..0000000
--- a/src/com/android/messaging/ui/PlaceholderInsetDrawable.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.InsetDrawable;
-
-/**
- * A "placeholder" drawable that has the same sizing properties as the real UI element it
- * replaces.
- *
- * This is an InsetDrawable that takes a placeholder drawable (an animation list, or simply
- * a color drawable) and place it in the center of the inset drawable that's sized to the
- * requested source width and height of the image that it replaces. Unlike the base
- * InsetDrawable, this implementation returns the true width and height of the real image
- * that it's placeholding, instead of the intrinsic size of the contained drawable, so that
- * when used in an ImageView, it may be positioned/scaled/cropped the same way the real
- * image is.
- */
-public class PlaceholderInsetDrawable extends InsetDrawable {
-    // The dimensions of the real image that this drawable is replacing.
-    private final int mSourceWidth;
-    private final int mSourceHeight;
-
-    /**
-     * Given a source drawable, wraps it around in this placeholder drawable by placing the
-     * drawable at the center of the container if possible (or fill the container if the
-     * drawable doesn't have intrinsic size such as color drawable).
-     */
-    public static PlaceholderInsetDrawable fromDrawable(final Drawable drawable,
-            final int sourceWidth, final int sourceHeight) {
-        final int drawableWidth = drawable.getIntrinsicWidth();
-        final int drawableHeight = drawable.getIntrinsicHeight();
-        final int insetHorizontal = drawableWidth < 0 || drawableWidth > sourceWidth ?
-                0 : (sourceWidth - drawableWidth) / 2;
-        final int insetVertical = drawableHeight < 0 || drawableHeight > sourceHeight ?
-                0 : (sourceHeight - drawableHeight) / 2;
-        return new PlaceholderInsetDrawable(drawable, insetHorizontal, insetVertical,
-                insetHorizontal, insetVertical, sourceWidth, sourceHeight);
-    }
-
-    private PlaceholderInsetDrawable(final Drawable drawable, final int insetLeft,
-            final int insetTop, final int insetRight, final int insetBottom,
-            final int sourceWidth, final int sourceHeight) {
-        super(drawable, insetLeft, insetTop, insetRight, insetBottom);
-        mSourceWidth = sourceWidth;
-        mSourceHeight = sourceHeight;
-    }
-
-    @Override
-    public int getIntrinsicWidth() {
-        return mSourceWidth;
-    }
-
-    @Override
-    public int getIntrinsicHeight() {
-        return mSourceHeight;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/PlainTextEditText.java b/src/com/android/messaging/ui/PlainTextEditText.java
deleted file mode 100644
index 8d6e784..0000000
--- a/src/com/android/messaging/ui/PlainTextEditText.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.ClipData;
-import android.content.ClipboardManager;
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.EditText;
-
-/**
- * We want the EditText used in Conversations to convert text to plain text on paste.  This
- * conversion would happen anyway on send, so without this class it could appear to the user
- * that we would send e.g. bold or italic formatting, but in the sent message it would just be
- * plain text.
- */
-public class PlainTextEditText extends EditText {
-    private static final char OBJECT_UNICODE = '\uFFFC';
-
-    public PlainTextEditText(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    // Intercept and modify the paste event. Let everything else through unchanged.
-    @Override
-    public boolean onTextContextMenuItem(final int id) {
-        if (id == android.R.id.paste) {
-            // We can use this to know where the text position was originally before we pasted
-            final int selectionStartPrePaste = getSelectionStart();
-
-            // Let the EditText's normal paste routine fire, then modify the content after.
-            // This is simpler than re-implementing the paste logic, which we'd have to do
-            // if we want to get the text from the clipboard ourselves and then modify it.
-
-            final boolean result = super.onTextContextMenuItem(id);
-            CharSequence text = getText();
-            int selectionStart = getSelectionStart();
-            int selectionEnd = getSelectionEnd();
-
-            // There is an option in the Chrome mobile app to copy image; however, instead of the
-            // image in the form of the uri, Chrome gives us the html source for the image, which
-            // the platform paste code turns into the unicode object character. The below section
-            // of code looks for that edge case and replaces it with the url for the image.
-            final int startIndex = selectionStart - 1;
-            final int pasteStringLength = selectionStart - selectionStartPrePaste;
-            // Only going to handle the case where the pasted object is the image
-            if (pasteStringLength == 1 && text.charAt(startIndex) == OBJECT_UNICODE) {
-                final ClipboardManager clipboard =
-                        (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
-                final ClipData clip = clipboard.getPrimaryClip();
-                if (clip != null) {
-                    ClipData.Item item = clip.getItemAt(0);
-                    StringBuilder sb = new StringBuilder(text);
-                    final String url = item.getText().toString();
-                    sb.replace(selectionStartPrePaste, selectionStart, url);
-                    text = sb.toString();
-                    selectionStart = selectionStartPrePaste + url.length();
-                    selectionEnd = selectionStart;
-                }
-            }
-
-            // This removes the formatting due to the conversion to string.
-            setText(text.toString(), BufferType.EDITABLE);
-
-            // Restore the cursor selection state.
-            setSelection(selectionStart, selectionEnd);
-            return result;
-        } else {
-            return super.onTextContextMenuItem(id);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/PlaybackStateView.java b/src/com/android/messaging/ui/PlaybackStateView.java
deleted file mode 100644
index 8d9aac7..0000000
--- a/src/com/android/messaging/ui/PlaybackStateView.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-/**
- * An interface for a UI element ("View") that reflects the playback state of a piece of media
- * content. It needs to support the ability to take common playback commands (play, pause, stop,
- * restart) and reflect the state in UI (through timer or progress bar etc.)
- */
-public interface PlaybackStateView {
-    /**
-     * Restart the playback.
-     */
-    void restart();
-
-    /**
-     * Reset ("stop") the playback to the starting position.
-     */
-    void reset();
-
-    /**
-     * Resume the playback, or start it if it hasn't been started yet.
-     */
-    void resume();
-
-    /**
-     * Pause the playback.
-     */
-    void pause();
-}
diff --git a/src/com/android/messaging/ui/RemoteInputEntrypointActivity.java b/src/com/android/messaging/ui/RemoteInputEntrypointActivity.java
deleted file mode 100644
index c731164..0000000
--- a/src/com/android/messaging/ui/RemoteInputEntrypointActivity.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.telephony.TelephonyManager;
-
-import com.android.messaging.datamodel.NoConfirmationSmsSendService;
-import com.android.messaging.util.LogUtil;
-
-public class RemoteInputEntrypointActivity extends BaseBugleActivity {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        Intent intent = getIntent();
-        if (intent == null) {
-            LogUtil.w(TAG, "No intent attached");
-            setResult(RESULT_CANCELED);
-            finish();
-            return;
-        }
-
-        // Perform some action depending on the intent
-        String action = intent.getAction();
-        if (Intent.ACTION_SENDTO.equals(action)) {
-            // Build and send the intent
-            final Intent sendIntent = new Intent(this, NoConfirmationSmsSendService.class);
-            sendIntent.setAction(TelephonyManager.ACTION_RESPOND_VIA_MESSAGE);
-            sendIntent.putExtras(intent);
-            // Wear apparently passes all of its extras via the clip data. Must pass it along.
-            sendIntent.setClipData(intent.getClipData());
-            startService(sendIntent);
-            setResult(RESULT_OK);
-        } else {
-            LogUtil.w(TAG, "Unrecognized intent action: " + action);
-            setResult(RESULT_CANCELED);
-        }
-        // This activity should never stick around after processing the intent
-        finish();
-    }
-}
diff --git a/src/com/android/messaging/ui/SmsStorageLowWarningActivity.java b/src/com/android/messaging/ui/SmsStorageLowWarningActivity.java
deleted file mode 100644
index 6b3e84b..0000000
--- a/src/com/android/messaging/ui/SmsStorageLowWarningActivity.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.FragmentTransaction;
-import android.os.Bundle;
-
-/**
- * Activity to contain the dialog of warning sms storage low.
- */
-public class SmsStorageLowWarningActivity extends BaseBugleFragmentActivity {
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        FragmentTransaction ft = getFragmentManager().beginTransaction();
-        SmsStorageLowWarningFragment fragment =
-                SmsStorageLowWarningFragment.newInstance();
-        ft.add(fragment, null/*tag*/);
-        ft.commit();
-    }
-}
diff --git a/src/com/android/messaging/ui/SmsStorageLowWarningFragment.java b/src/com/android/messaging/ui/SmsStorageLowWarningFragment.java
deleted file mode 100644
index 3ebfdcf..0000000
--- a/src/com/android/messaging/ui/SmsStorageLowWarningFragment.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.Fragment;
-import android.app.FragmentTransaction;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.action.HandleLowStorageAction;
-import com.android.messaging.sms.SmsReleaseStorage;
-import com.android.messaging.sms.SmsReleaseStorage.Duration;
-import com.android.messaging.sms.SmsStorageStatusManager;
-import com.android.messaging.util.Assert;
-import com.google.common.collect.Lists;
-
-import java.util.List;
-
-/**
- * Dialog to show the sms storage low warning
- */
-public class SmsStorageLowWarningFragment extends Fragment {
-    private SmsStorageLowWarningFragment() {
-    }
-
-    public static SmsStorageLowWarningFragment newInstance() {
-        return new SmsStorageLowWarningFragment();
-    }
-
-    @Override
-    public void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        final FragmentTransaction ft = getFragmentManager().beginTransaction();
-        final ChooseActionDialogFragment dialog = ChooseActionDialogFragment.newInstance();
-        dialog.setTargetFragment(this, 0/*requestCode*/);
-        dialog.show(ft, null/*tag*/);
-    }
-
-    /**
-     * Perform confirm action for a specific action
-     *
-     * @param actionIndex
-     */
-    private void confirm(final int actionIndex) {
-        final FragmentTransaction ft = getFragmentManager().beginTransaction();
-        final ConfirmationDialog dialog = ConfirmationDialog.newInstance(actionIndex);
-        dialog.setTargetFragment(this, 0/*requestCode*/);
-        dialog.show(ft, null/*tag*/);
-    }
-
-    /**
-     * The dialog is cancelled at any step
-     */
-    private void cancel() {
-        getActivity().finish();
-    }
-
-    /**
-     * The dialog to show for user to choose what delete actions to take when storage is low
-     */
-    private static class ChooseActionDialogFragment extends DialogFragment {
-        public static ChooseActionDialogFragment newInstance() {
-            return new ChooseActionDialogFragment();
-        }
-
-        @Override
-        public Dialog onCreateDialog(final Bundle savedInstanceState) {
-            final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-
-            final LayoutInflater inflater = getActivity().getLayoutInflater();
-            final View dialogLayout = inflater.inflate(
-                    R.layout.sms_storage_low_warning_dialog, null);
-            final ListView actionListView = (ListView) dialogLayout.findViewById(
-                    R.id.free_storage_action_list);
-            final List<String> actions = loadFreeStorageActions(getActivity().getResources());
-            final ActionListAdapter listAdapter = new ActionListAdapter(getActivity(), actions);
-            actionListView.setAdapter(listAdapter);
-
-            builder.setTitle(R.string.sms_storage_low_title)
-                    .setView(dialogLayout)
-                    .setNegativeButton(R.string.ignore, new DialogInterface.OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialog, int id) {
-                            dialog.cancel();
-                        }
-                    });
-
-            final Dialog dialog = builder.create();
-            dialog.setCanceledOnTouchOutside(false);
-            return dialog;
-        }
-
-        @Override
-        public void onCancel(final DialogInterface dialog) {
-            ((SmsStorageLowWarningFragment) getTargetFragment()).cancel();
-        }
-
-        private class ActionListAdapter extends ArrayAdapter<String> {
-            public ActionListAdapter(final Context context, final List<String> actions) {
-                super(context, R.layout.sms_free_storage_action_item_view, actions);
-            }
-
-            @Override
-            public View getView(final int position, final View view, final ViewGroup parent) {
-                TextView actionItemView;
-                if (view == null || !(view instanceof TextView)) {
-                    final LayoutInflater inflater = LayoutInflater.from(getContext());
-                    actionItemView = (TextView) inflater.inflate(
-                            R.layout.sms_free_storage_action_item_view, parent, false);
-                } else {
-                    actionItemView = (TextView) view;
-                }
-
-                final String action = getItem(position);
-                actionItemView.setText(action);
-                actionItemView.setOnClickListener(new OnClickListener() {
-                    @Override
-                    public void onClick(final View view) {
-                        dismiss();
-                        ((SmsStorageLowWarningFragment) getTargetFragment()).confirm(position);
-                    }
-                });
-                return actionItemView;
-            }
-        }
-    }
-
-    private static final String KEY_ACTION_INDEX = "action_index";
-
-    /**
-     * The dialog to confirm user's delete action
-     */
-    private static class ConfirmationDialog extends DialogFragment {
-        private Duration mDuration;
-        private String mDurationString;
-
-        public static ConfirmationDialog newInstance(final int actionIndex) {
-            final ConfirmationDialog dialog = new ConfirmationDialog();
-            final Bundle args = new Bundle();
-            args.putInt(KEY_ACTION_INDEX, actionIndex);
-            dialog.setArguments(args);
-            return dialog;
-        }
-
-        @Override
-        public void onCancel(final DialogInterface dialog) {
-            ((SmsStorageLowWarningFragment) getTargetFragment()).cancel();
-        }
-
-        @Override
-        public Dialog onCreateDialog(final Bundle savedInstanceState) {
-            mDuration = SmsReleaseStorage.parseMessageRetainingDuration();
-            mDurationString = SmsReleaseStorage.getMessageRetainingDurationString(mDuration);
-
-            final int actionIndex = getArguments().getInt(KEY_ACTION_INDEX);
-            if (actionIndex < 0 || actionIndex > 1) {
-                return null;
-            }
-            final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-            builder.setTitle(R.string.sms_storage_low_title)
-                    .setMessage(getConfirmDialogMessage(actionIndex))
-                    .setNegativeButton(android.R.string.cancel,
-                            new DialogInterface.OnClickListener() {
-                                @Override
-                                public void onClick(final DialogInterface dialog,
-                                        final int button) {
-                                    dismiss();
-                                    ((SmsStorageLowWarningFragment) getTargetFragment()).cancel();
-                                }
-                    })
-                    .setPositiveButton(android.R.string.ok,
-                            new DialogInterface.OnClickListener() {
-                                @Override
-                                public void onClick(final DialogInterface dialog,
-                                        final int button) {
-                                    dismiss();
-                                    handleAction(actionIndex);
-                                    getActivity().finish();
-                                    SmsStorageStatusManager.cancelStorageLowNotification();
-                                }
-                    });
-            return builder.create();
-        }
-
-        private void handleAction(final int actionIndex) {
-            final long durationInMillis =
-                    SmsReleaseStorage.durationToTimeInMillis(mDuration);
-            switch (actionIndex) {
-                case 0:
-                    HandleLowStorageAction.handleDeleteMediaMessages(durationInMillis);
-                    break;
-
-                case 1:
-                    HandleLowStorageAction.handleDeleteOldMessages(durationInMillis);
-                    break;
-
-                default:
-                    Assert.fail("Unsupported action");
-                    break;
-            }
-        }
-
-        /**
-         * Get the confirm dialog text for a specific delete action
-         * @param index The action index
-         * @return
-         */
-        private String getConfirmDialogMessage(final int index) {
-            switch (index) {
-                case 0:
-                    return getString(R.string.delete_all_media_confirmation, mDurationString);
-                case 1:
-                    return getString(R.string.delete_oldest_messages_confirmation, mDurationString);
-                case 2:
-                    return getString(R.string.auto_delete_oldest_messages_confirmation,
-                            mDurationString);
-            }
-            throw new IllegalArgumentException(
-                    "SmsStorageLowWarningFragment: invalid action index " + index);
-        }
-    }
-
-    /**
-     * Load the text of delete message actions
-     *
-     * @param resources
-     * @return
-     */
-    private static List<String> loadFreeStorageActions(final Resources resources) {
-        final Duration duration = SmsReleaseStorage.parseMessageRetainingDuration();
-        final String durationString = SmsReleaseStorage.getMessageRetainingDurationString(duration);
-        final List<String> actions = Lists.newArrayList();
-        actions.add(resources.getString(R.string.delete_all_media));
-        actions.add(resources.getString(R.string.delete_oldest_messages, durationString));
-
-        // TODO: Auto-purging is disabled for Bugle V1.
-        // actions.add(resources.getString(R.string.auto_delete_oldest_messages, durationString));
-        return actions;
-    }
-}
diff --git a/src/com/android/messaging/ui/SnackBar.java b/src/com/android/messaging/ui/SnackBar.java
deleted file mode 100644
index 2f85461..0000000
--- a/src/com/android/messaging/ui/SnackBar.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup.MarginLayoutParams;
-import android.widget.FrameLayout;
-import android.widget.TextView;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class SnackBar {
-    public static final int LONG_DURATION_IN_MS = 5000;
-    public static final int SHORT_DURATION_IN_MS = 1000;
-    public static final int MAX_DURATION_IN_MS = 10000;
-
-    public interface SnackBarListener {
-        void onActionClick();
-    }
-
-    /**
-     * Defines an action to be performed when the user clicks on the action button on the snack bar
-     */
-    public static class Action {
-        private final Runnable mActionRunnable;
-        private final String mActionLabel;
-
-        public final static int SNACK_BAR_UNDO = 0;
-        public final static int SNACK_BAR_RETRY = 1;
-
-        private Action(@Nullable Runnable actionRunnable, @Nullable String actionLabel) {
-            mActionRunnable = actionRunnable;
-            mActionLabel = actionLabel;
-        }
-
-        Runnable getActionRunnable() {
-            return mActionRunnable;
-        }
-
-        String getActionLabel() {
-            return mActionLabel;
-        }
-
-        public static Action createUndoAction(final Runnable undoRunnable) {
-            return createCustomAction(undoRunnable, Factory.get().getApplicationContext()
-                    .getString(R.string.snack_bar_undo));
-        }
-
-        public static Action createRetryAction(final Runnable retryRunnable) {
-            return createCustomAction(retryRunnable, Factory.get().getApplicationContext()
-                    .getString(R.string.snack_bar_retry));
-        }
-
-
-        public static Action createCustomAction(final Runnable runnable, final String actionLabel) {
-            return new Action(runnable, actionLabel);
-        }
-    }
-
-    /**
-     * Defines the placement of the snack bar (e.g. anchored view, anchor gravity).
-     */
-    public static class Placement {
-        private final View mAnchorView;
-        private final boolean mAnchorAbove;
-
-        private Placement(@NonNull final View anchorView, final boolean anchorAbove) {
-            Assert.notNull(anchorView);
-            mAnchorView = anchorView;
-            mAnchorAbove = anchorAbove;
-        }
-
-        public View getAnchorView() {
-            return mAnchorView;
-        }
-
-        public boolean getAnchorAbove() {
-            return mAnchorAbove;
-        }
-
-        /**
-         * Anchor the snack bar above the given {@code anchorView}.
-         */
-        public static Placement above(final View anchorView) {
-            return new Placement(anchorView, true);
-        }
-
-        /**
-         * Anchor the snack bar below the given {@code anchorView}.
-         */
-        public static Placement below(final View anchorView) {
-            return new Placement(anchorView, false);
-        }
-    }
-
-    public static class Builder {
-        private static final List<SnackBarInteraction> NO_INTERACTIONS = 
-            new ArrayList<SnackBarInteraction>();
-
-        private final Context mContext;
-        private final SnackBarManager mSnackBarManager;
-
-        private String mSnackBarMessage;
-        private int mDuration = LONG_DURATION_IN_MS;
-        private List<SnackBarInteraction> mInteractions = NO_INTERACTIONS;
-        private Action mAction;
-        private Placement mPlacement;
-        // The parent view is only used to get a window token and doesn't affect the layout
-        private View mParentView;
-
-        public Builder(final SnackBarManager snackBarManager, final View parentView) {
-            Assert.notNull(snackBarManager);
-            Assert.notNull(parentView);
-            mSnackBarManager = snackBarManager;
-            mContext = parentView.getContext();
-            mParentView = parentView;
-        }
-
-        public Builder setText(final String snackBarMessage) {
-            Assert.isTrue(!TextUtils.isEmpty(snackBarMessage));
-            mSnackBarMessage = snackBarMessage;
-            return this;
-        }
-
-        public Builder setAction(final Action action) {
-            mAction = action;
-            return this;
-        }
-
-        /**
-         * Sets the duration to show this toast for in milliseconds.
-         */
-        public Builder setDuration(final int duration) {
-            Assert.isTrue(0 < duration && duration < MAX_DURATION_IN_MS);
-            mDuration = duration;
-            return this;
-        }
-
-        /**
-         * Sets the components that this toast's animation will interact with. These components may
-         * be animated to make room for the toast.
-         */
-        public Builder withInteractions(final List<SnackBarInteraction> interactions) {
-            mInteractions = interactions;
-            return this;
-        }
-
-        /**
-         * Place the snack bar with the given placement requirement.
-         */
-        public Builder withPlacement(final Placement placement) {
-            Assert.isNull(mPlacement);
-            mPlacement = placement;
-            return this;
-        }
-
-        public SnackBar build() {
-            return new SnackBar(this);
-        }
-
-        public void show() {
-            mSnackBarManager.show(build());
-        }
-    }
-
-    private final View mRootView;
-    private final Context mContext;
-    private final View mSnackBarView;
-    private final String mText;
-    private final int mDuration;
-    private final List<SnackBarInteraction> mInteractions;
-    private final Action mAction;
-    private final Placement mPlacement;
-    private final TextView mActionTextView;
-    private final TextView mMessageView;
-    private final FrameLayout mMessageWrapper;
-    private final View mParentView;
-
-    private SnackBarListener mListener;
-
-    private SnackBar(final Builder builder) {
-        mContext = builder.mContext;
-        mRootView = LayoutInflater.from(mContext).inflate(R.layout.snack_bar,
-            null /* WindowManager will show this in show() below */);
-        mSnackBarView = mRootView.findViewById(R.id.snack_bar);
-        mText = builder.mSnackBarMessage;
-        mDuration = builder.mDuration;
-        mAction = builder.mAction;
-        mPlacement = builder.mPlacement;
-        mParentView = builder.mParentView;
-        if (builder.mInteractions == null) {
-            mInteractions = new ArrayList<SnackBarInteraction>();
-        } else {
-            mInteractions = builder.mInteractions;
-        }
-
-        mActionTextView = (TextView) mRootView.findViewById(R.id.snack_bar_action);
-        mMessageView = (TextView) mRootView.findViewById(R.id.snack_bar_message);
-        mMessageWrapper = (FrameLayout) mRootView.findViewById(R.id.snack_bar_message_wrapper);
-
-        setUpButton();
-        setUpTextLines();
-    }
-
-    public Context getContext() {
-        return mContext;
-    }
-
-    public View getRootView() {
-        return mRootView;
-    }
-
-    public View getParentView() {
-        return mParentView;
-    }
-
-    public View getSnackBarView() {
-        return mSnackBarView;
-    }
-
-    public String getMessageText() {
-        return mText;
-    }
-
-    public String getActionLabel() {
-        if (mAction == null) {
-            return null;
-        }
-        return mAction.getActionLabel();
-    }
-
-    public int getDuration() {
-        return mDuration;
-    }
-
-    public Placement getPlacement() {
-        return mPlacement;
-    }
-
-    public List<SnackBarInteraction> getInteractions() {
-        return mInteractions;
-    }
-
-    public void setEnabled(final boolean enabled) {
-        mActionTextView.setClickable(enabled);
-    }
-
-    public void setListener(final SnackBarListener snackBarListener) {
-        mListener = snackBarListener;
-    }
-
-    private void setUpButton() {
-        if (mAction == null || mAction.getActionRunnable() == null) {
-            mActionTextView.setVisibility(View.GONE);
-            // In the XML layout we add left/right padding to the button to add space between
-            // the message text and the button and on the right side we add padding to put space
-            // between the button and the edge of the snack bar. This is so the button can use the
-            // padding area as part of it's click target. Since we have no button, we need to put
-            // some margin on the right side. While the left margin is already set on the wrapper,
-            // we're setting it again to not have to make a special case for RTL.
-            final MarginLayoutParams lp = (MarginLayoutParams) mMessageWrapper.getLayoutParams();
-            final int leftRightMargin = mContext.getResources().getDimensionPixelSize(
-                    R.dimen.snack_bar_left_right_margin);
-            lp.leftMargin = leftRightMargin;
-            lp.rightMargin = leftRightMargin;
-            mMessageWrapper.setLayoutParams(lp);
-        } else {
-            mActionTextView.setVisibility(View.VISIBLE);
-            mActionTextView.setText(mAction.getActionLabel());
-            mActionTextView.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(final View v) {
-                    mAction.getActionRunnable().run();
-                    if (mListener != null) {
-                        mListener.onActionClick();
-                    }
-                }
-            });
-        }
-    }
-
-    private void setUpTextLines() {
-        if (mText == null) {
-            mMessageView.setVisibility(View.GONE);
-        } else {
-            mMessageView.setVisibility(View.VISIBLE);
-            mMessageView.setText(mText);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/SnackBarInteraction.java b/src/com/android/messaging/ui/SnackBarInteraction.java
deleted file mode 100644
index f723caa..0000000
--- a/src/com/android/messaging/ui/SnackBarInteraction.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewPropertyAnimator;
-
-import com.google.common.base.Preconditions;
-
-/**
- * An interface that defines how a component can be animated with an {@link SnackBar}.
- */
-public interface SnackBarInteraction {
-    /**
-     * Returns the animator that will be run in reaction to the given SnackBar being shown.
-     *
-     * Implementations may return null here if it determines that the given SnackBar does not need
-     * to animate this component.
-     */
-    ViewPropertyAnimator animateOnSnackBarShow(SnackBar snackBar);
-
-    /**
-     * Returns the animator that will be run in reaction to the given SnackBar being dismissed.
-     *
-     * Implementations may return null here if it determines that the given SnackBar does not need
-     * to animate this component.
-     */
-    ViewPropertyAnimator animateOnSnackBarDismiss(SnackBar snackBar);
-
-    /**
-     * A basic implementation of {@link SnackBarInteraction} that assumes that the
-     * {@link SnackBar} is always shown with {@link Gravity#BOTTOM} and that the provided View will
-     * always need to be translated up to make room for the SnackBar.
-     */
-    public static class BasicSnackBarInteraction implements SnackBarInteraction {
-        private final View mView;
-
-        public BasicSnackBarInteraction(final View view) {
-            mView = Preconditions.checkNotNull(view);
-        }
-
-        @Override
-        public ViewPropertyAnimator animateOnSnackBarShow(final SnackBar snackBar) {
-            final View rootView = snackBar.getRootView();
-            return mView.animate().translationY(-rootView.getMeasuredHeight());
-        }
-
-        @Override
-        public ViewPropertyAnimator animateOnSnackBarDismiss(final SnackBar snackBar) {
-            return mView.animate().translationY(0);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/SnackBarManager.java b/src/com/android/messaging/ui/SnackBarManager.java
deleted file mode 100644
index d5ca870..0000000
--- a/src/com/android/messaging/ui/SnackBarManager.java
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.os.Handler;
-import android.text.TextUtils;
-import android.util.DisplayMetrics;
-import android.view.Gravity;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.MeasureSpec;
-import android.view.View.OnAttachStateChangeListener;
-import android.view.View.OnTouchListener;
-import android.view.ViewGroup;
-import android.view.ViewGroup.LayoutParams;
-import android.view.ViewPropertyAnimator;
-import android.view.ViewTreeObserver.OnGlobalLayoutListener;
-import android.view.WindowManager;
-import android.widget.PopupWindow;
-import android.widget.PopupWindow.OnDismissListener;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.ui.SnackBar.Placement;
-import com.android.messaging.ui.SnackBar.SnackBarListener;
-import com.android.messaging.util.AccessibilityUtil;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.TextUtil;
-import com.android.messaging.util.UiUtils;
-import com.google.common.base.Joiner;
-
-import java.util.List;
-
-public class SnackBarManager {
-
-    private static SnackBarManager sInstance;
-
-    public static SnackBarManager get() {
-        if (sInstance == null) {
-            synchronized (SnackBarManager.class) {
-                if (sInstance == null) {
-                    sInstance = new SnackBarManager();
-                }
-            }
-        }
-        return sInstance;
-    }
-
-    private final Runnable mDismissRunnable = new Runnable() {
-        @Override
-        public void run() {
-            dismiss();
-        }
-    };
-
-    private final OnTouchListener mDismissOnTouchListener = new OnTouchListener() {
-        @Override
-        public boolean onTouch(final View view, final MotionEvent event) {
-            // Dismiss the {@link SnackBar} but don't consume the event.
-            dismiss();
-            return false;
-        }
-    };
-
-    private final SnackBarListener mDismissOnUserTapListener = new SnackBarListener() {
-        @Override
-        public void onActionClick() {
-            dismiss();
-        }
-    };
-
-    private final OnAttachStateChangeListener mAttachStateChangeListener =
-            new OnAttachStateChangeListener() {
-                @Override
-                public void onViewDetachedFromWindow(View v) {
-                    // Dismiss the PopupWindow and clear SnackBarManager state.
-                    mHideHandler.removeCallbacks(mDismissRunnable);
-                    mPopupWindow.dismiss();
-
-                    mCurrentSnackBar = null;
-                    mNextSnackBar = null;
-                    mIsCurrentlyDismissing = false;
-                }
-
-                @Override
-                public void onViewAttachedToWindow(View v) {}
-            };
-
-    private final int mTranslationDurationMs;
-    private final Handler mHideHandler;
-
-    private SnackBar mCurrentSnackBar;
-    private SnackBar mLatestSnackBar;
-    private SnackBar mNextSnackBar;
-    private boolean mIsCurrentlyDismissing;
-    private PopupWindow mPopupWindow;
-
-    private SnackBarManager() {
-        mTranslationDurationMs = Factory.get().getApplicationContext().getResources().getInteger(
-                R.integer.snackbar_translation_duration_ms);
-        mHideHandler = new Handler();
-    }
-
-    public SnackBar getLatestSnackBar() {
-        return mLatestSnackBar;
-    }
-
-    public SnackBar.Builder newBuilder(final View parentView) {
-        return new SnackBar.Builder(this, parentView);
-    }
-
-    /**
-     * The given snackBar is not guaranteed to be shown. If the previous snackBar is animating away,
-     * and another snackBar is requested to show after this one, this snackBar will be skipped.
-     */
-    public void show(final SnackBar snackBar) {
-        Assert.notNull(snackBar);
-
-        if (mCurrentSnackBar != null) {
-            LogUtil.d(LogUtil.BUGLE_TAG, "Showing snack bar, but currentSnackBar was not null.");
-
-            // Dismiss the current snack bar. That will cause the next snack bar to be shown on
-            // completion.
-            mNextSnackBar = snackBar;
-            mLatestSnackBar = snackBar;
-            dismiss();
-            return;
-        }
-
-        mCurrentSnackBar = snackBar;
-        mLatestSnackBar = snackBar;
-
-        // We want to know when either button was tapped so we can dismiss.
-        snackBar.setListener(mDismissOnUserTapListener);
-
-        // Cancel previous dismisses & set dismiss for the delay time.
-        mHideHandler.removeCallbacks(mDismissRunnable);
-        mHideHandler.postDelayed(mDismissRunnable, snackBar.getDuration());
-
-        snackBar.setEnabled(false);
-
-        // For some reason, the addView function does not respect layoutParams.
-        // We need to explicitly set it first here.
-        final View rootView = snackBar.getRootView();
-
-        if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
-            LogUtil.d(LogUtil.BUGLE_TAG, "Showing snack bar: " + snackBar);
-        }
-        // Measure the snack bar root view so we know how much to translate by.
-        measureSnackBar(snackBar);
-        mPopupWindow = new PopupWindow(snackBar.getContext());
-        mPopupWindow.setWidth(LayoutParams.MATCH_PARENT);
-        mPopupWindow.setHeight(LayoutParams.WRAP_CONTENT);
-        mPopupWindow.setBackgroundDrawable(null);
-        mPopupWindow.setContentView(rootView);
-        final Placement placement = snackBar.getPlacement();
-        if (placement == null) {
-            mPopupWindow.showAtLocation(
-                    snackBar.getParentView(), Gravity.BOTTOM | Gravity.START,
-                    0, getScreenBottomOffset(snackBar));
-        } else {
-            final View anchorView = placement.getAnchorView();
-
-            // You'd expect PopupWindow.showAsDropDown to ensure the popup moves with the anchor
-            // view, which it does for scrolling, but not layout changes, so we have to manually
-            // update while the snackbar is showing
-            final OnGlobalLayoutListener listener = new OnGlobalLayoutListener() {
-                @Override
-                public void onGlobalLayout() {
-                    mPopupWindow.update(anchorView, 0, getRelativeOffset(snackBar),
-                            anchorView.getWidth(), LayoutParams.WRAP_CONTENT);
-                }
-            };
-            anchorView.getViewTreeObserver().addOnGlobalLayoutListener(listener);
-            mPopupWindow.setOnDismissListener(new OnDismissListener() {
-                @Override
-                public void onDismiss() {
-                    anchorView.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
-                }
-            });
-            mPopupWindow.showAsDropDown(anchorView, 0, getRelativeOffset(snackBar));
-        }
-
-        snackBar.getParentView().addOnAttachStateChangeListener(mAttachStateChangeListener);
-
-        // Animate the toast bar into view.
-        placeSnackBarOffScreen(snackBar);
-        animateSnackBarOnScreen(snackBar).withEndAction(new Runnable() {
-            @Override
-            public void run() {
-                mCurrentSnackBar.setEnabled(true);
-                makeCurrentSnackBarDismissibleOnTouch();
-                // Fire an accessibility event as needed
-                String snackBarText = snackBar.getMessageText();
-                if (!TextUtils.isEmpty(snackBarText) &&
-                        TextUtils.getTrimmedLength(snackBarText) > 0) {
-                    snackBarText = snackBarText.trim();
-                    final String snackBarActionText = snackBar.getActionLabel();
-                    if (!TextUtil.isAllWhitespace(snackBarActionText)) {
-                        snackBarText = Joiner.on(", ").join(snackBarText, snackBarActionText);
-                    }
-                    AccessibilityUtil.announceForAccessibilityCompat(snackBar.getSnackBarView(),
-                            null /*accessibilityManager*/, snackBarText);
-                }
-            }
-        });
-
-        // Animate any interaction views out of the way.
-        animateInteractionsOnShow(snackBar);
-    }
-
-    /**
-     * Dismisses the current toast that is showing. If there is a toast waiting to be shown, that
-     * toast will be shown when the current one has been dismissed.
-     */
-    public void dismiss() {
-        mHideHandler.removeCallbacks(mDismissRunnable);
-
-        if (mCurrentSnackBar == null || mIsCurrentlyDismissing) {
-            return;
-        }
-
-        final SnackBar snackBar = mCurrentSnackBar;
-
-        LogUtil.d(LogUtil.BUGLE_TAG, "Dismissing snack bar.");
-        mIsCurrentlyDismissing = true;
-
-        snackBar.setEnabled(false);
-
-        // Animate the toast bar down.
-        final View rootView = snackBar.getRootView();
-        animateSnackBarOffScreen(snackBar).withEndAction(new Runnable() {
-            @Override
-            public void run() {
-                rootView.setVisibility(View.GONE);
-                try {
-                    mPopupWindow.dismiss();
-                } catch (IllegalArgumentException e) {
-                    // PopupWindow.dismiss() will fire an IllegalArgumentException if the activity
-                    // has already ended while we were animating
-                }
-                snackBar.getParentView()
-                        .removeOnAttachStateChangeListener(mAttachStateChangeListener);
-
-                mCurrentSnackBar = null;
-                mIsCurrentlyDismissing = false;
-
-                // Show the next toast if one is waiting.
-                if (mNextSnackBar != null) {
-                    final SnackBar localNextSnackBar = mNextSnackBar;
-                    mNextSnackBar = null;
-                    show(localNextSnackBar);
-                }
-            }
-        });
-
-        // Animate any interaction views back.
-        animateInteractionsOnDismiss(snackBar);
-    }
-
-    private void makeCurrentSnackBarDismissibleOnTouch() {
-        // Set touching on the entire view, the {@link SnackBar} itself, as
-        // well as the button's dismiss the toast.
-        mCurrentSnackBar.getRootView().setOnTouchListener(mDismissOnTouchListener);
-        mCurrentSnackBar.getSnackBarView().setOnTouchListener(mDismissOnTouchListener);
-    }
-
-    private void measureSnackBar(final SnackBar snackBar) {
-        final View rootView = snackBar.getRootView();
-        final Point displaySize = new Point();
-        getWindowManager(snackBar.getContext()).getDefaultDisplay().getSize(displaySize);
-        final int widthSpec = ViewGroup.getChildMeasureSpec(
-                MeasureSpec.makeMeasureSpec(displaySize.x, MeasureSpec.EXACTLY),
-                0, LayoutParams.MATCH_PARENT);
-        final int heightSpec = ViewGroup.getChildMeasureSpec(
-                MeasureSpec.makeMeasureSpec(displaySize.y, MeasureSpec.EXACTLY),
-                0, LayoutParams.WRAP_CONTENT);
-        rootView.measure(widthSpec, heightSpec);
-    }
-
-    private void placeSnackBarOffScreen(final SnackBar snackBar) {
-        final View rootView = snackBar.getRootView();
-        final View snackBarView = snackBar.getSnackBarView();
-        snackBarView.setTranslationY(rootView.getMeasuredHeight());
-    }
-
-    private ViewPropertyAnimator animateSnackBarOnScreen(final SnackBar snackBar) {
-        final View snackBarView = snackBar.getSnackBarView();
-        return normalizeAnimator(snackBarView.animate()).translationX(0).translationY(0);
-    }
-
-    private ViewPropertyAnimator animateSnackBarOffScreen(final SnackBar snackBar) {
-        final View rootView = snackBar.getRootView();
-        final View snackBarView = snackBar.getSnackBarView();
-        return normalizeAnimator(snackBarView.animate()).translationY(rootView.getHeight());
-    }
-
-    private void animateInteractionsOnShow(final SnackBar snackBar) {
-        final List<SnackBarInteraction> interactions = snackBar.getInteractions();
-        for (final SnackBarInteraction interaction : interactions) {
-            if (interaction != null) {
-                final ViewPropertyAnimator animator = interaction.animateOnSnackBarShow(snackBar);
-                if (animator != null) {
-                    normalizeAnimator(animator);
-                }
-            }
-        }
-    }
-
-    private void animateInteractionsOnDismiss(final SnackBar snackBar) {
-        final List<SnackBarInteraction> interactions = snackBar.getInteractions();
-        for (final SnackBarInteraction interaction : interactions) {
-            if (interaction != null) {
-                final ViewPropertyAnimator animator =
-                        interaction.animateOnSnackBarDismiss(snackBar);
-                if (animator != null) {
-                    normalizeAnimator(animator);
-                }
-            }
-        }
-    }
-
-    private ViewPropertyAnimator normalizeAnimator(final ViewPropertyAnimator animator) {
-        return animator
-                .setInterpolator(UiUtils.DEFAULT_INTERPOLATOR)
-                .setDuration(mTranslationDurationMs);
-    }
-
-    private WindowManager getWindowManager(final Context context) {
-        return (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
-    }
-
-    /**
-     * Get the offset from the bottom of the screen where the snack bar should be placed.
-     */
-    private int getScreenBottomOffset(final SnackBar snackBar) {
-        final WindowManager windowManager = getWindowManager(snackBar.getContext());
-        final DisplayMetrics displayMetrics = new DisplayMetrics();
-        if (OsUtil.isAtLeastL()) {
-            windowManager.getDefaultDisplay().getRealMetrics(displayMetrics);
-        } else {
-            windowManager.getDefaultDisplay().getMetrics(displayMetrics);
-        }
-        final int screenHeight = displayMetrics.heightPixels;
-
-        if (OsUtil.isAtLeastL()) {
-            // In L, the navigation bar is included in the space for the popup window, so we have to
-            // offset by the size of the navigation bar
-            final Rect displayRect = new Rect();
-            snackBar.getParentView().getRootView().getWindowVisibleDisplayFrame(displayRect);
-            return screenHeight - displayRect.bottom;
-        }
-
-        return 0;
-    }
-
-    private int getRelativeOffset(final SnackBar snackBar) {
-        final Placement placement = snackBar.getPlacement();
-        Assert.notNull(placement);
-        final View anchorView = placement.getAnchorView();
-        if (placement.getAnchorAbove()) {
-            return -snackBar.getRootView().getMeasuredHeight() - anchorView.getHeight();
-        } else {
-            // Use the default dropdown positioning
-            return 0;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/TestActivity.java b/src/com/android/messaging/ui/TestActivity.java
deleted file mode 100644
index fc3c706..0000000
--- a/src/com/android/messaging/ui/TestActivity.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Fragment;
-import android.os.Bundle;
-import androidx.fragment.app.FragmentActivity;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.FrameLayout;
-
-import com.android.messaging.R;
-import com.android.messaging.util.LogUtil;
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * An empty activity that can be used to host a fragment or view for unit testing purposes. Lives in
- * app code vs test code due to requirement of ActivityInstrumentationTestCase2.
- */
-public class TestActivity extends FragmentActivity {
-    private FragmentEventListener mFragmentEventListener;
-
-    public interface FragmentEventListener {
-        public void onAttachFragment(Fragment fragment);
-    }
-
-    @Override
-    protected void onCreate(final Bundle bundle) {
-        super.onCreate(bundle);
-
-        if (bundle != null) {
-            // The test case may have configured the fragment, and recreating the activity will
-            // lose that configuration. The real activity is the only activity that would know
-            // how to reapply that configuration.
-            throw new IllegalStateException("TestActivity cannot get recreated");
-        }
-
-        // There is a race condition, but this often makes it possible for tests to run with the
-        // key guard up
-        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
-                WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
-                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
-                WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
-
-        setContentView(R.layout.test_activity);
-    }
-
-    @VisibleForTesting
-    public void setFragment(final Fragment fragment) {
-        LogUtil.i(LogUtil.BUGLE_TAG, "TestActivity.setFragment");
-        getFragmentManager()
-                .beginTransaction()
-                .replace(R.id.test_content, fragment)
-                .commit();
-        getFragmentManager().executePendingTransactions();
-    }
-
-    @VisibleForTesting
-    public void setView(final View view) {
-        LogUtil.i(LogUtil.BUGLE_TAG, "TestActivity.setView");
-        ((FrameLayout) findViewById(R.id.test_content)).addView(view);
-    }
-
-    @Override
-    public void onAttachFragment(final Fragment fragment) {
-        if (mFragmentEventListener != null) {
-            mFragmentEventListener.onAttachFragment(fragment);
-        }
-    }
-
-    public void setFragmentEventListener(final FragmentEventListener fragmentEventListener) {
-        mFragmentEventListener = fragmentEventListener;
-    }
-}
diff --git a/src/com/android/messaging/ui/UIIntents.java b/src/com/android/messaging/ui/UIIntents.java
deleted file mode 100644
index bf5edd7..0000000
--- a/src/com/android/messaging/ui/UIIntents.java
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.PendingIntent;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.util.ConversationIdSet;
-
-/**
- * A central repository of Intents used to start activities.
- */
-public abstract class UIIntents {
-    public static UIIntents get() {
-        return Factory.get().getUIIntents();
-    }
-
-    // Intent extras
-    public static final String UI_INTENT_EXTRA_CONVERSATION_ID = "conversation_id";
-
-    // Sending draft data (from share intent / message forwarding) to the ConversationActivity.
-    public static final String UI_INTENT_EXTRA_DRAFT_DATA = "draft_data";
-
-    // The request code for picking a media from the Document picker.
-    public static final int REQUEST_PICK_MEDIA_FROM_DOCUMENT_PICKER = 1400;
-
-    // The request code for picking a contact card from existing Contacts apps.
-    public static final int REQUEST_PICK_CONTACT_CARD = 1500;
-
-    // Indicates what type of notification this applies to (See BugleNotifications:
-    // UPDATE_NONE, UPDATE_MESSAGES, UPDATE_ERRORS, UPDATE_ALL)
-    public static final String UI_INTENT_EXTRA_NOTIFICATIONS_UPDATE = "notifications_update";
-
-    // Pass a set of conversation id's.
-    public static final String UI_INTENT_EXTRA_CONVERSATION_ID_SET = "conversation_id_set";
-
-    // Sending class zero message to its activity
-    public static final String UI_INTENT_EXTRA_MESSAGE_VALUES = "message_values";
-
-    // For the widget to go to the ConversationList from the Conversation.
-    public static final String UI_INTENT_EXTRA_GOTO_CONVERSATION_LIST = "goto_conv_list";
-
-    // Indicates whether a conversation is launched with custom transition.
-    public static final String UI_INTENT_EXTRA_WITH_CUSTOM_TRANSITION = "with_custom_transition";
-
-    public static final String ACTION_RESET_NOTIFICATIONS =
-            "com.android.messaging.reset_notifications";
-
-    // Sending VCard uri to VCard detail activity
-    public static final String UI_INTENT_EXTRA_VCARD_URI = "vcard_uri";
-
-    public static final String CMAS_COMPONENT = "com.android.cellbroadcastreceiver";
-
-    // Intent action for local broadcast receiver for conversation self id change.
-    public static final String CONVERSATION_SELF_ID_CHANGE_BROADCAST_ACTION =
-            "conversation_self_id_change";
-
-    // Conversation self id
-    public static final String UI_INTENT_EXTRA_CONVERSATION_SELF_ID = "conversation_self_id";
-
-    // For opening an APN editor on a particular row in the apn database.
-    public static final String UI_INTENT_EXTRA_APN_ROW_ID = "apn_row_id";
-
-    // Subscription id
-    public static final String UI_INTENT_EXTRA_SUB_ID = "sub_id";
-
-    // Per-Subscription setting activity title
-    public static final String UI_INTENT_EXTRA_PER_SUBSCRIPTION_SETTING_TITLE =
-            "per_sub_setting_title";
-
-    // Is application settings launched as the top level settings activity?
-    public static final String UI_INTENT_EXTRA_TOP_LEVEL_SETTINGS = "top_level_settings";
-
-    // Sending attachment uri from widget
-    public static final String UI_INTENT_EXTRA_ATTACHMENT_URI = "attachment_uri";
-
-    // Sending attachment content type from widget
-    public static final String UI_INTENT_EXTRA_ATTACHMENT_TYPE = "attachment_type";
-
-    public static final String ACTION_WIDGET_CONVERSATION =
-            "com.android.messaging.widget_conversation:";
-
-    public static final String UI_INTENT_EXTRA_REQUIRES_MMS = "requires_mms";
-
-    public static final String UI_INTENT_EXTRA_SELF_ID = "self_id";
-
-    // Message position to scroll to.
-    public static final String UI_INTENT_EXTRA_MESSAGE_POSITION = "message_position";
-
-    /**
-     * Launch the permission check activity
-     */
-    public abstract void launchPermissionCheckActivity(final Context context);
-
-    public abstract void launchConversationListActivity(final Context context);
-
-    /**
-     * Launch an activity to show a conversation. This method by default provides no additional
-     * activity options.
-     */
-    public void launchConversationActivity(final Context context,
-            final String conversationId, final MessageData draft) {
-        launchConversationActivity(context, conversationId, draft, null,
-                false /* withCustomTransition */);
-    }
-
-    /**
-     * Launch an activity to show a conversation.
-     */
-    public abstract void launchConversationActivity(final Context context,
-            final String conversationId, final MessageData draft, final Bundle activityOptions,
-            final boolean withCustomTransition);
-
-
-    /**
-     * Launch an activity to show conversation with conversation list in back stack.
-     */
-    public abstract void launchConversationActivityWithParentStack(Context context,
-            String conversationId, String smsBody);
-
-    /**
-     * Launch an activity to show a conversation as a new task.
-     */
-    public abstract void launchConversationActivityNewTask(final Context context,
-            final String conversationId);
-
-    /**
-     * Launch an activity to start a new conversation
-     */
-    public abstract void launchCreateNewConversationActivity(final Context context,
-            final MessageData draft);
-
-    /**
-     * Launch debug activity to set MMS config options.
-     */
-    public abstract void launchDebugMmsConfigActivity(final Context context);
-
-    /**
-     * Launch an activity to change settings.
-     */
-    public abstract void launchSettingsActivity(final Context context);
-
-    /**
-     * Launch an activity to add a contact with a given destination.
-     */
-    public abstract void launchAddContactActivity(final Context context, final String destination);
-
-    /**
-     * Launch an activity to show the document picker to pick an image/video/audio.
-     *
-     * @param fragment the requesting fragment
-     */
-    public abstract void launchDocumentImagePicker(final Fragment fragment);
-
-    /**
-     * Launch an activity to show the contacts list to pick one.
-     *
-     * @param fragment the requesting fragment
-     */
-    public abstract void launchContactCardPicker(final Fragment fragment);
-
-    /**
-     * Launch an activity to show people & options for a given conversation.
-     */
-    public abstract void launchPeopleAndOptionsActivity(final Activity context,
-            final String conversationId);
-
-    /**
-     * Launch an external activity to handle a phone call
-     * @param phoneNumber the phone number to call
-     * @param clickPosition is the location tapped to start this launch for transition use
-     */
-    public abstract void launchPhoneCallActivity(final Context context, final String phoneNumber,
-                                                 final Point clickPosition);
-
-    /**
-     * Launch an activity to show archived conversations.
-     */
-    public abstract void launchArchivedConversationsActivity(final Context context);
-
-    /**
-     * Launch an activity to show blocked participants.
-     */
-    public abstract void launchBlockedParticipantsActivity(final Context context);
-
-    /**
-     * Launch an activity to show a class zero message
-     */
-    public abstract void launchClassZeroActivity(Context context, ContentValues messageValues);
-
-    /**
-     * Launch an activity to let the user forward a message
-     */
-    public abstract void launchForwardMessageActivity(Context context, MessageData message);
-
-    /**
-     * Launch an activity to show details for a VCard
-     */
-    public abstract void launchVCardDetailActivity(Context context, Uri vcardUri);
-
-    /**
-     * Launch an external activity that handles the intent to add VCard to contacts
-     */
-    public abstract void launchSaveVCardToContactsActivity(Context context, Uri vcardUri);
-
-    /**
-     * Launch an activity to let the user select & unselect the list of attachments to send.
-     */
-    public abstract void launchAttachmentChooserActivity(final Activity activity,
-            final String conversationId, final int requestCode);
-
-    /**
-     * Launch full screen video viewer.
-     */
-    public abstract void launchFullScreenVideoViewer(Context context, Uri videoUri);
-
-    /**
-     * Launch full screen photo viewer.
-     */
-    public abstract void launchFullScreenPhotoViewer(Activity activity, Uri initialPhoto,
-            Rect initialPhotoBounds, Uri photosUri);
-
-    /**
-     * Launch an activity to show general app settings
-     * @param topLevel indicates whether the app settings is launched as the top-level settings
-     *        activity (instead of SettingsActivity which shows a collapsed view of the app
-     *        settings + one settings item per subscription). This is true when there's only one
-     *        active SIM in the system so we can show this activity directly.
-     */
-    public abstract void launchApplicationSettingsActivity(Context context, boolean topLevel);
-
-    /**
-     * Launch an activity to show per-subscription settings
-     */
-    public abstract void launchPerSubscriptionSettingsActivity(Context context, int subId,
-            String settingTitle);
-
-    /**
-     * Get a ACTION_VIEW intent
-     * @param url display the data in the url to users
-     */
-    public abstract Intent getViewUrlIntent(final String url);
-
-    /**
-     * Get an intent to launch the ringtone picker
-     * @param title the title to show in the ringtone picker
-     * @param existingUri the currently set uri
-     * @param defaultUri the default uri if none is currently set
-     * @param toneType type of ringtone to pick, maybe any of RingtoneManager.TYPE_*
-     */
-    public abstract Intent getRingtonePickerIntent(final String title, final Uri existingUri,
-            final Uri defaultUri, final int toneType);
-
-    /**
-     * Get an intent to launch the wireless alert viewer.
-     */
-    public abstract Intent getWirelessAlertsIntent();
-
-    /**
-     * Get an intent to launch the dialog for changing the default SMS App.
-     */
-    public abstract Intent getChangeDefaultSmsAppIntent(final Activity activity);
-
-    /**
-     * Broadcast conversation self id change so it may be reflected in the message compose UI.
-     */
-    public abstract void broadcastConversationSelfIdChange(final Context context,
-            final String conversationId, final String conversationSelfId);
-
-    /**
-     * Get a PendingIntent for starting conversation list from notifications.
-     */
-    public abstract PendingIntent getPendingIntentForConversationListActivity(
-            final Context context);
-
-    /**
-     * Get a PendingIntent for starting conversation list from widget.
-     */
-    public abstract PendingIntent getWidgetPendingIntentForConversationListActivity(
-            final Context context);
-
-    /**
-     * Get a PendingIntent for showing a conversation from notifications.
-     */
-    public abstract PendingIntent getPendingIntentForConversationActivity(final Context context,
-            final String conversationId, final MessageData draft);
-
-    /**
-     * Get an Intent for showing a conversation from the widget.
-     */
-    public abstract Intent getIntentForConversationActivity(final Context context,
-            final String conversationId, final MessageData draft);
-
-    /**
-     * Get a PendingIntent for sending a message to a conversation, without opening the Bugle UI.
-     *
-     * <p>This is intended to be used by the Android Wear companion app when sending transcribed
-     * voice replies.
-     */
-    public abstract PendingIntent getPendingIntentForSendingMessageToConversation(
-            final Context context, final String conversationId, final String selfId,
-            final boolean requiresMms, final int requestCode);
-
-    /**
-     * Get a PendingIntent for clearing notifications.
-     *
-     * <p>This is intended to be used by notifications.
-     */
-    public abstract PendingIntent getPendingIntentForClearingNotifications(final Context context,
-            final int updateTargets, final ConversationIdSet conversationIdSet,
-            final int requestCode);
-
-    /**
-     * Get a PendingIntent for showing low storage notifications.
-     */
-    public abstract PendingIntent getPendingIntentForLowStorageNotifications(final Context context);
-
-    /**
-     * Get a PendingIntent for showing a new message to a secondary user.
-     */
-    public abstract PendingIntent getPendingIntentForSecondaryUserNewMessageNotification(
-            final Context context);
-
-    /**
-     * Get an intent for showing the APN editor.
-     */
-    public abstract Intent getApnEditorIntent(final Context context, final String rowId, int subId);
-
-    /**
-     * Get an intent for showing the APN settings.
-     */
-    public abstract Intent getApnSettingsIntent(final Context context, final int subId);
-
-    /**
-     * Get an intent for showing advanced settings.
-     */
-    public abstract Intent getAdvancedSettingsIntent(final Context context);
-
-    /**
-     * Get an intent for the LaunchConversationActivity.
-     */
-    public abstract Intent getLaunchConversationActivityIntent(final Context context);
-
-    /**
-     *  Tell MediaScanner to re-scan the specified volume.
-     */
-    public abstract void kickMediaScanner(final Context context, final String volume);
-
-    /**
-     * Launch to browser for a url.
-     */
-    public abstract void launchBrowserForUrl(final Context context, final String url);
-
-    /**
-     * Get a PendingIntent for the widget conversation template.
-     */
-    public abstract PendingIntent getWidgetPendingIntentForConversationActivity(
-            final Context context, final String conversationId, final int requestCode);
-
-    /**
-     * Get a PendingIntent for the conversation widget configuration activity template.
-     */
-    public abstract PendingIntent getWidgetPendingIntentForConfigurationActivity(
-            final Context context, final int appWidgetId);
-
-}
diff --git a/src/com/android/messaging/ui/UIIntentsImpl.java b/src/com/android/messaging/ui/UIIntentsImpl.java
deleted file mode 100644
index 8a1224a..0000000
--- a/src/com/android/messaging/ui/UIIntentsImpl.java
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.PendingIntent;
-import android.appwidget.AppWidgetManager;
-import android.content.ActivityNotFoundException;
-import android.content.ClipData;
-import android.content.ComponentName;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Intents;
-import android.provider.MediaStore;
-import android.provider.Telephony;
-import androidx.annotation.Nullable;
-import androidx.core.app.TaskStackBuilder;
-import androidx.localbroadcastmanager.content.LocalBroadcastManager;
-import android.text.TextUtils;
-
-import com.android.ex.photo.Intents.PhotoViewIntentBuilder;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.ConversationImagePartsView;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.receiver.NotificationReceiver;
-import com.android.messaging.sms.MmsSmsUtils;
-import com.android.messaging.ui.appsettings.ApnEditorActivity;
-import com.android.messaging.ui.appsettings.ApnSettingsActivity;
-import com.android.messaging.ui.appsettings.ApplicationSettingsActivity;
-import com.android.messaging.ui.appsettings.PerSubscriptionSettingsActivity;
-import com.android.messaging.ui.appsettings.SettingsActivity;
-import com.android.messaging.ui.attachmentchooser.AttachmentChooserActivity;
-import com.android.messaging.ui.conversation.ConversationActivity;
-import com.android.messaging.ui.conversation.LaunchConversationActivity;
-import com.android.messaging.ui.conversationlist.ArchivedConversationListActivity;
-import com.android.messaging.ui.conversationlist.ConversationListActivity;
-import com.android.messaging.ui.conversationlist.ForwardMessageActivity;
-import com.android.messaging.ui.conversationsettings.PeopleAndOptionsActivity;
-import com.android.messaging.ui.debug.DebugMmsConfigActivity;
-import com.android.messaging.ui.photoviewer.BuglePhotoViewActivity;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.ConversationIdSet;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.UiUtils;
-import com.android.messaging.util.UriUtil;
-
-/**
- * A central repository of Intents used to start activities.
- */
-public class UIIntentsImpl extends UIIntents {
-    private static final String CELL_BROADCAST_LIST_ACTIVITY =
-            "com.android.cellbroadcastreceiver.CellBroadcastListActivity";
-    private static final String CALL_TARGET_CLICK_KEY = "touchPoint";
-    private static final String CALL_TARGET_CLICK_EXTRA_KEY =
-            "android.telecom.extra.OUTGOING_CALL_EXTRAS";
-    private static final String MEDIA_SCANNER_CLASS =
-            "com.android.providers.media.MediaScannerService";
-    private static final String MEDIA_SCANNER_PACKAGE = "com.android.providers.media";
-    private static final String MEDIA_SCANNER_SCAN_ACTION = "android.media.IMediaScannerService";
-
-    /**
-     * Get an intent which takes you to a conversation
-     */
-    private Intent getConversationActivityIntent(final Context context,
-            final String conversationId, final MessageData draft,
-            final boolean withCustomTransition) {
-        final Intent intent = new Intent(context, ConversationActivity.class);
-
-        // Always try to reuse the same ConversationActivity in the current task so that we don't
-        // have two conversation activities in the back stack.
-        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-
-        // Otherwise we're starting a new conversation
-        if (conversationId != null) {
-            intent.putExtra(UI_INTENT_EXTRA_CONVERSATION_ID, conversationId);
-        }
-        if (draft != null) {
-            intent.putExtra(UI_INTENT_EXTRA_DRAFT_DATA, draft);
-
-            // If draft attachments came from an external content provider via a share intent, we
-            // need to propagate the URI permissions through to ConversationActivity. This requires
-            // putting the URIs into the ClipData (setData also works, but accepts only one URI).
-            ClipData clipData = null;
-            for (final MessagePartData partData : draft.getParts()) {
-                if (partData.isAttachment()) {
-                    final Uri uri = partData.getContentUri();
-                    if (clipData == null) {
-                        clipData = ClipData.newRawUri("Attachments", uri);
-                    } else {
-                        clipData.addItem(new ClipData.Item(uri));
-                    }
-                }
-            }
-            if (clipData != null) {
-                intent.setClipData(clipData);
-                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
-            }
-        }
-        if (withCustomTransition) {
-            intent.putExtra(UI_INTENT_EXTRA_WITH_CUSTOM_TRANSITION, true);
-        }
-
-        if (!(context instanceof Activity)) {
-            // If the caller supplies an application context, and not an activity context, we must
-            // include this flag
-            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        }
-        return intent;
-    }
-
-    @Override
-    public void launchPermissionCheckActivity(final Context context) {
-        final Intent intent = new Intent(context, PermissionCheckActivity.class);
-        context.startActivity(intent);
-    }
-
-    /**
-     * Get an intent which takes you to the conversation list
-     */
-    private Intent getConversationListActivityIntent(final Context context) {
-        return new Intent(context, ConversationListActivity.class);
-    }
-
-    @Override
-    public void launchConversationListActivity(final Context context) {
-        final Intent intent = getConversationListActivityIntent(context);
-        context.startActivity(intent);
-    }
-
-    /**
-     * Get an intent which shows the low storage warning activity.
-     */
-    private Intent getSmsStorageLowWarningActivityIntent(final Context context) {
-        return new Intent(context, SmsStorageLowWarningActivity.class);
-    }
-
-    @Override
-    public void launchConversationActivity(final Context context,
-            final String conversationId, final MessageData draft, final Bundle activityOptions,
-            final boolean withCustomTransition) {
-        Assert.isTrue(!withCustomTransition || activityOptions != null);
-        final Intent intent = getConversationActivityIntent(context, conversationId, draft,
-                withCustomTransition);
-        context.startActivity(intent, activityOptions);
-    }
-
-    @Override
-    public void launchConversationActivityNewTask(
-            final Context context, final String conversationId) {
-        final Intent intent = getConversationActivityIntent(context, conversationId, null,
-                false /* withCustomTransition */);
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        context.startActivity(intent);
-    }
-
-    @Override
-    public void launchConversationActivityWithParentStack(final Context context,
-                final String conversationId, final String smsBody) {
-        final MessageData messageData = TextUtils.isEmpty(smsBody)
-                ? null
-                : MessageData.createDraftSmsMessage(conversationId, null, smsBody);
-        TaskStackBuilder.create(context)
-                .addNextIntentWithParentStack(
-                        getConversationActivityIntent(context, conversationId, messageData,
-                                false /* withCustomTransition */))
-                .startActivities();
-    }
-
-    @Override
-    public void launchCreateNewConversationActivity(final Context context,
-            final MessageData draft) {
-        final Intent intent = getConversationActivityIntent(context, null, draft,
-                false /* withCustomTransition */);
-        context.startActivity(intent);
-    }
-
-    @Override
-    public void launchDebugMmsConfigActivity(final Context context) {
-        context.startActivity(new Intent(context, DebugMmsConfigActivity.class));
-    }
-
-    @Override
-    public void launchAddContactActivity(final Context context, final String destination) {
-        final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
-        final String destinationType = MmsSmsUtils.isEmailAddress(destination) ?
-                Intents.Insert.EMAIL : Intents.Insert.PHONE;
-        intent.setType(Contacts.CONTENT_ITEM_TYPE);
-        intent.putExtra(destinationType, destination);
-        startExternalActivity(context, intent);
-    }
-
-    @Override
-    public void launchSettingsActivity(final Context context) {
-        final Intent intent = new Intent(context, SettingsActivity.class);
-        context.startActivity(intent);
-    }
-
-    @Override
-    public void launchArchivedConversationsActivity(final Context context) {
-        final Intent intent = new Intent(context, ArchivedConversationListActivity.class);
-        context.startActivity(intent);
-    }
-
-    @Override
-    public void launchBlockedParticipantsActivity(final Context context) {
-        final Intent intent = new Intent(context, BlockedParticipantsActivity.class);
-        context.startActivity(intent);
-    }
-
-    @Override
-    public void launchDocumentImagePicker(final Fragment fragment) {
-        final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
-        intent.putExtra(Intent.EXTRA_MIME_TYPES, MessagePartData.ACCEPTABLE_GALLERY_MEDIA_TYPES);
-        intent.addCategory(Intent.CATEGORY_OPENABLE);
-        intent.setType(ContentType.ANY_TYPE);
-
-        fragment.startActivityForResult(intent, REQUEST_PICK_MEDIA_FROM_DOCUMENT_PICKER);
-    }
-
-    @Override
-    public void launchContactCardPicker(final Fragment fragment) {
-        final Intent intent = new Intent(Intent.ACTION_PICK);
-        intent.setType(Contacts.CONTENT_TYPE);
-
-        try {
-            fragment.startActivityForResult(intent, REQUEST_PICK_CONTACT_CARD);
-        } catch (final ActivityNotFoundException ex) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Couldn't find activity:", ex);
-            UiUtils.showToastAtBottom(R.string.activity_not_found_message);
-        }
-    }
-
-    @Override
-    public void launchPeopleAndOptionsActivity(final Activity activity,
-            final String conversationId) {
-        final Intent intent = new Intent(activity, PeopleAndOptionsActivity.class);
-        intent.putExtra(UI_INTENT_EXTRA_CONVERSATION_ID, conversationId);
-        activity.startActivityForResult(intent, 0);
-    }
-
-    @Override
-    public void launchPhoneCallActivity(final Context context, final String phoneNumber,
-                                        final Point clickPosition) {
-        final Intent intent = new Intent(Intent.ACTION_CALL,
-                Uri.parse(UriUtil.SCHEME_TEL + phoneNumber));
-        final Bundle extras = new Bundle();
-        extras.putParcelable(CALL_TARGET_CLICK_KEY, clickPosition);
-        intent.putExtra(CALL_TARGET_CLICK_EXTRA_KEY, extras);
-        startExternalActivity(context, intent);
-    }
-
-    @Override
-    public void launchClassZeroActivity(final Context context, final ContentValues messageValues) {
-        final Intent classZeroIntent = new Intent(context, ClassZeroActivity.class)
-                .putExtra(UI_INTENT_EXTRA_MESSAGE_VALUES, messageValues)
-                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
-        context.startActivity(classZeroIntent);
-    }
-
-    @Override
-    public void launchForwardMessageActivity(final Context context, final MessageData message) {
-        final Intent forwardMessageIntent = new Intent(context, ForwardMessageActivity.class)
-                .putExtra(UI_INTENT_EXTRA_DRAFT_DATA, message);
-        context.startActivity(forwardMessageIntent);
-    }
-
-    @Override
-    public void launchVCardDetailActivity(final Context context, final Uri vcardUri) {
-        final Intent vcardDetailIntent = new Intent(context, VCardDetailActivity.class)
-                .putExtra(UI_INTENT_EXTRA_VCARD_URI, vcardUri);
-        context.startActivity(vcardDetailIntent);
-    }
-
-    @Override
-    public void launchSaveVCardToContactsActivity(final Context context, final Uri vcardUri) {
-        Assert.isTrue(MediaScratchFileProvider.isMediaScratchSpaceUri(vcardUri));
-        final Intent intent = new Intent();
-        intent.setAction(Intent.ACTION_VIEW);
-        intent.setDataAndType(vcardUri, ContentType.TEXT_VCARD.toLowerCase());
-        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
-        startExternalActivity(context, intent);
-    }
-
-    @Override
-    public void launchAttachmentChooserActivity(final Activity activity,
-            final String conversationId, final int requestCode) {
-        final Intent intent = new Intent(activity, AttachmentChooserActivity.class);
-        intent.putExtra(UI_INTENT_EXTRA_CONVERSATION_ID, conversationId);
-        activity.startActivityForResult(intent, requestCode);
-    }
-
-    @Override
-    public void launchFullScreenVideoViewer(final Context context, final Uri videoUri) {
-        final Intent intent = new Intent(Intent.ACTION_VIEW);
-        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
-
-        // So we don't see "surrounding" images in Gallery
-        intent.putExtra("SingleItemOnly", true);
-        intent.setDataAndType(videoUri, ContentType.VIDEO_UNSPECIFIED);
-        startExternalActivity(context, intent);
-    }
-
-    @Override
-    public void launchFullScreenPhotoViewer(final Activity activity, final Uri initialPhoto,
-            final Rect initialPhotoBounds, final Uri photosUri) {
-        final PhotoViewIntentBuilder builder =
-                com.android.ex.photo.Intents.newPhotoViewIntentBuilder(
-                        activity, BuglePhotoViewActivity.class);
-        builder.setPhotosUri(photosUri.toString());
-        builder.setInitialPhotoUri(initialPhoto.toString());
-        builder.setProjection(ConversationImagePartsView.PhotoViewQuery.PROJECTION);
-
-        // Set the location of the imageView so that the photoviewer can animate from that location
-        // to full screen.
-        builder.setScaleAnimation(initialPhotoBounds.left, initialPhotoBounds.top,
-                initialPhotoBounds.width(), initialPhotoBounds.height());
-
-        builder.setDisplayThumbsFullScreen(false);
-        builder.setMaxInitialScale(8);
-        activity.startActivity(builder.build());
-        activity.overridePendingTransition(0, 0);
-    }
-
-    @Override
-    public void launchApplicationSettingsActivity(final Context context, final boolean topLevel) {
-        final Intent intent = new Intent(context, ApplicationSettingsActivity.class);
-        intent.putExtra(UI_INTENT_EXTRA_TOP_LEVEL_SETTINGS, topLevel);
-        context.startActivity(intent);
-    }
-
-    @Override
-    public void launchPerSubscriptionSettingsActivity(final Context context, final int subId,
-            final String settingTitle) {
-        final Intent intent = getPerSubscriptionSettingsIntent(context, subId, settingTitle);
-        context.startActivity(intent);
-    }
-
-    @Override
-    public Intent getViewUrlIntent(final String url) {
-        final Uri uri = Uri.parse(url);
-        return new Intent(Intent.ACTION_VIEW, uri);
-    }
-
-    @Override
-    public void broadcastConversationSelfIdChange(final Context context,
-            final String conversationId, final String conversationSelfId) {
-        final Intent intent = new Intent(CONVERSATION_SELF_ID_CHANGE_BROADCAST_ACTION);
-        intent.putExtra(UI_INTENT_EXTRA_CONVERSATION_ID, conversationId);
-        intent.putExtra(UI_INTENT_EXTRA_CONVERSATION_SELF_ID, conversationSelfId);
-        LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
-    }
-
-    @Override
-    public PendingIntent getPendingIntentForConversationListActivity(final Context context) {
-        final Intent intent = getConversationListActivityIntent(context);
-        return getPendingIntentWithParentStack(context, intent, 0);
-    }
-
-    @Override
-    public PendingIntent getPendingIntentForConversationActivity(final Context context,
-            final String conversationId, final MessageData draft) {
-        final Intent intent = getConversationActivityIntent(context, conversationId, draft,
-                false /* withCustomTransition */);
-        // Ensure that the platform doesn't reuse PendingIntents across conversations
-        intent.setData(MessagingContentProvider.buildConversationMetadataUri(conversationId));
-        return getPendingIntentWithParentStack(context, intent, 0);
-    }
-
-    @Override
-    public Intent getIntentForConversationActivity(final Context context,
-            final String conversationId, final MessageData draft) {
-        final Intent intent = getConversationActivityIntent(context, conversationId, draft,
-                false /* withCustomTransition */);
-        return intent;
-    }
-
-    @Override
-    public PendingIntent getPendingIntentForSendingMessageToConversation(final Context context,
-            final String conversationId, final String selfId, final boolean requiresMms,
-            final int requestCode) {
-        final Intent intent = new Intent(context, RemoteInputEntrypointActivity.class);
-        intent.setAction(Intent.ACTION_SENDTO);
-        // Ensure that the platform doesn't reuse PendingIntents across conversations
-        intent.setData(MessagingContentProvider.buildConversationMetadataUri(conversationId));
-        intent.putExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID, conversationId);
-        intent.putExtra(UIIntents.UI_INTENT_EXTRA_SELF_ID, selfId);
-        intent.putExtra(UIIntents.UI_INTENT_EXTRA_REQUIRES_MMS, requiresMms);
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
-        return getPendingIntentWithParentStack(context, intent, requestCode);
-    }
-
-    @Override
-    public PendingIntent getPendingIntentForClearingNotifications(final Context context,
-            final int updateTargets, final ConversationIdSet conversationIdSet,
-            final int requestCode) {
-        final Intent intent = new Intent(context, NotificationReceiver.class);
-        intent.setAction(ACTION_RESET_NOTIFICATIONS);
-        intent.putExtra(UI_INTENT_EXTRA_NOTIFICATIONS_UPDATE, updateTargets);
-        if (conversationIdSet != null) {
-            intent.putExtra(UI_INTENT_EXTRA_CONVERSATION_ID_SET,
-                    conversationIdSet.getDelimitedString());
-        }
-        return PendingIntent.getBroadcast(context,
-                requestCode, intent,
-                PendingIntent.FLAG_UPDATE_CURRENT);
-    }
-
-    /**
-     * Gets a PendingIntent associated with an Intent to start an Activity. All notifications
-     * that starts an Activity must use this method to get a PendingIntent, which achieves two
-     * goals:
-     * 1. The target activities will be created, with any existing ones destroyed. This ensures
-     *    we don't end up with multiple instances of ConversationListActivity, for example.
-     * 2. The target activity, when launched, will have its backstack correctly constructed so
-     *    back navigation will work correctly.
-     */
-    private static PendingIntent getPendingIntentWithParentStack(final Context context,
-            final Intent intent, final int requestCode) {
-        final TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
-        // Adds the back stack for the Intent (plus the Intent itself)
-        stackBuilder.addNextIntentWithParentStack(intent);
-        final PendingIntent resultPendingIntent =
-            stackBuilder.getPendingIntent(requestCode, PendingIntent.FLAG_UPDATE_CURRENT);
-        return resultPendingIntent;
-    }
-
-    @Override
-    public Intent getRingtonePickerIntent(final String title, final Uri existingUri,
-            final Uri defaultUri, final int toneType) {
-        return new Intent(RingtoneManager.ACTION_RINGTONE_PICKER)
-                .putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, toneType)
-                .putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, title)
-                .putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, existingUri)
-                .putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, defaultUri);
-    }
-
-    @Override
-    public PendingIntent getPendingIntentForLowStorageNotifications(final Context context) {
-        final TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(context);
-        final Intent conversationListIntent = getConversationListActivityIntent(context);
-        taskStackBuilder.addNextIntent(conversationListIntent);
-        taskStackBuilder.addNextIntentWithParentStack(
-                getSmsStorageLowWarningActivityIntent(context));
-
-        return taskStackBuilder.getPendingIntent(
-                0, PendingIntent.FLAG_UPDATE_CURRENT);
-    }
-
-    @Override
-    public PendingIntent getPendingIntentForSecondaryUserNewMessageNotification(
-            final Context context) {
-        return getPendingIntentForConversationListActivity(context);
-    }
-
-    @Override
-    public Intent getWirelessAlertsIntent() {
-        final Intent intent = new Intent(Intent.ACTION_MAIN);
-        intent.setComponent(new ComponentName(CMAS_COMPONENT, CELL_BROADCAST_LIST_ACTIVITY));
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        return intent;
-    }
-
-    @Override
-    public Intent getApnEditorIntent(final Context context, final String rowId, final int subId) {
-        final Intent intent = new Intent(context, ApnEditorActivity.class);
-        intent.putExtra(UI_INTENT_EXTRA_APN_ROW_ID, rowId);
-        intent.putExtra(UI_INTENT_EXTRA_SUB_ID, subId);
-        return intent;
-    }
-
-    @Override
-    public Intent getApnSettingsIntent(final Context context, final int subId) {
-        final Intent intent = new Intent(context, ApnSettingsActivity.class)
-                .putExtra(UI_INTENT_EXTRA_SUB_ID, subId);
-        return intent;
-    }
-
-    @Override
-    public Intent getAdvancedSettingsIntent(final Context context) {
-        return getPerSubscriptionSettingsIntent(context, ParticipantData.DEFAULT_SELF_SUB_ID, null);
-    }
-
-    @Override
-    public Intent getChangeDefaultSmsAppIntent(final Activity activity) {
-        final Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
-        intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, activity.getPackageName());
-        return intent;
-    }
-
-    @Override
-    public void launchBrowserForUrl(final Context context, final String url) {
-        final Intent intent = getViewUrlIntent(url);
-        startExternalActivity(context, intent);
-    }
-
-    /**
-     * Provides a safe way to handle external activities which may not exist.
-     */
-    private void startExternalActivity(final Context context, final Intent intent) {
-        try {
-            context.startActivity(intent);
-        } catch (final ActivityNotFoundException ex) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Couldn't find activity:", ex);
-            UiUtils.showToastAtBottom(R.string.activity_not_found_message);
-        }
-    }
-
-    private Intent getPerSubscriptionSettingsIntent(final Context context, final int subId,
-            @Nullable final String settingTitle) {
-        return new Intent(context, PerSubscriptionSettingsActivity.class)
-            .putExtra(UI_INTENT_EXTRA_SUB_ID, subId)
-            .putExtra(UI_INTENT_EXTRA_PER_SUBSCRIPTION_SETTING_TITLE, settingTitle);
-    }
-
-    @Override
-    public Intent getLaunchConversationActivityIntent(final Context context) {
-        final Intent intent = new Intent(context, LaunchConversationActivity.class);
-        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
-        return intent;
-    }
-
-    @Override
-    public void kickMediaScanner(final Context context, final String volume) {
-        final Intent intent = new Intent(MEDIA_SCANNER_SCAN_ACTION)
-            .putExtra(MediaStore.MEDIA_SCANNER_VOLUME, volume)
-            .setClassName(MEDIA_SCANNER_PACKAGE, MEDIA_SCANNER_CLASS);
-        context.startService(intent);
-    }
-
-    @Override
-    public PendingIntent getWidgetPendingIntentForConversationActivity(final Context context,
-            final String conversationId, final int requestCode) {
-        final Intent intent = getConversationActivityIntent(context, null, null,
-                false /* withCustomTransition */);
-        if (conversationId != null) {
-            intent.putExtra(UI_INTENT_EXTRA_CONVERSATION_ID, conversationId);
-
-            // Set the action to something unique to this conversation so if someone calls this
-            // function again on a different conversation, they'll get a new PendingIntent instead
-            // of the old one.
-            intent.setAction(ACTION_WIDGET_CONVERSATION + conversationId);
-        }
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        return getPendingIntentWithParentStack(context, intent, requestCode);
-    }
-
-    @Override
-    public PendingIntent getWidgetPendingIntentForConversationListActivity(
-            final Context context) {
-        final Intent intent = getConversationListActivityIntent(context);
-        return getPendingIntentWithParentStack(context, intent, 0);
-    }
-
-    @Override
-    public PendingIntent getWidgetPendingIntentForConfigurationActivity(final Context context,
-            final int appWidgetId) {
-        final Intent configureIntent = new Intent(context, WidgetPickConversationActivity.class);
-        configureIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
-        configureIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
-        configureIntent.setData(Uri.parse(configureIntent.toUri(Intent.URI_INTENT_SCHEME)));
-        configureIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY);
-        return getPendingIntentWithParentStack(context, configureIntent, 0);
-    }
-}
diff --git a/src/com/android/messaging/ui/VCardDetailActivity.java b/src/com/android/messaging/ui/VCardDetailActivity.java
deleted file mode 100644
index b9fb3d1..0000000
--- a/src/com/android/messaging/ui/VCardDetailActivity.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Fragment;
-import android.net.Uri;
-import android.os.Bundle;
-import android.view.MenuItem;
-
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-
-/**
- * An activity that hosts VCardDetailFragment that shows the content of a VCard that contains one
- * or more contacts.
- */
-public class VCardDetailActivity extends BugleActionBarActivity {
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.vcard_detail_activity);
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-    }
-
-    @Override
-    public void onAttachFragment(final Fragment fragment) {
-        if (fragment instanceof VCardDetailFragment) {
-            final Uri vCardUri =
-                    getIntent().getParcelableExtra(UIIntents.UI_INTENT_EXTRA_VCARD_URI);
-            Assert.notNull(vCardUri);
-            final VCardDetailFragment vCardDetailFragment = (VCardDetailFragment) fragment;
-            vCardDetailFragment.setVCardUri(vCardUri);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // Treat the home press as back press so that when we go back to
-                // ConversationActivity, it doesn't lose its original intent (conversation id etc.)
-                onBackPressed();
-                return true;
-
-            default:
-                return super.onOptionsItemSelected(item);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/VCardDetailAdapter.java b/src/com/android/messaging/ui/VCardDetailAdapter.java
deleted file mode 100644
index cfdd836..0000000
--- a/src/com/android/messaging/ui/VCardDetailAdapter.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseExpandableListAdapter;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.media.VCardResourceEntry;
-import com.android.messaging.datamodel.media.VCardResourceEntry.VCardResourceEntryDestinationItem;
-
-import java.util.List;
-
-/**
- * Displays a list of expandable contact cards shown in the VCardDetailActivity.
- */
-public class VCardDetailAdapter extends BaseExpandableListAdapter {
-    private final List<VCardResourceEntry> mVCards;
-    private final LayoutInflater mInflater;
-
-    public VCardDetailAdapter(final Context context, final List<VCardResourceEntry> vCards) {
-        mVCards = vCards;
-        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-    }
-
-    @Override
-    public Object getChild(final int groupPosition, final int childPosition) {
-        return mVCards.get(groupPosition).getContactInfo().get(childPosition);
-    }
-
-    @Override
-    public long getChildId(final int groupPosition, final int childPosition) {
-        return childPosition;
-    }
-
-    @Override
-    public View getChildView(final int groupPosition, final int childPosition,
-            final boolean isLastChild, final View convertView, final ViewGroup parent) {
-        PersonItemView v;
-        if (convertView == null) {
-            v = instantiateView(parent);
-        } else {
-            v = (PersonItemView) convertView;
-        }
-
-        final VCardResourceEntryDestinationItem item = (VCardResourceEntryDestinationItem)
-                getChild(groupPosition, childPosition);
-
-        v.bind(item.getDisplayItem());
-        return v;
-    }
-
-    @Override
-    public int getChildrenCount(final int groupPosition) {
-        return mVCards.get(groupPosition).getContactInfo().size();
-    }
-
-    @Override
-    public Object getGroup(final int groupPosition) {
-        return mVCards.get(groupPosition);
-    }
-
-    @Override
-    public int getGroupCount() {
-        return mVCards.size();
-    }
-
-    @Override
-    public long getGroupId(final int groupPosition) {
-        return groupPosition;
-    }
-
-    @Override
-    public View getGroupView(final int groupPosition, final boolean isExpanded,
-            final View convertView, final ViewGroup parent) {
-        PersonItemView v;
-        if (convertView == null) {
-            v = instantiateView(parent);
-        } else {
-            v = (PersonItemView) convertView;
-        }
-
-        final VCardResourceEntry item = (VCardResourceEntry) getGroup(groupPosition);
-        v.bind(item.getDisplayItem());
-        return v;
-    }
-
-    @Override
-    public boolean isChildSelectable(final int groupPosition, final int childPosition) {
-        return true;
-    }
-
-    @Override
-    public boolean hasStableIds() {
-        return true;
-    }
-
-    private PersonItemView instantiateView(final ViewGroup parent) {
-        final PersonItemView v = (PersonItemView) mInflater.inflate(R.layout.people_list_item_view,
-                parent, false);
-        v.setClickable(false);
-        return v;
-    }
-}
diff --git a/src/com/android/messaging/ui/VCardDetailFragment.java b/src/com/android/messaging/ui/VCardDetailFragment.java
deleted file mode 100644
index 1b2b88d..0000000
--- a/src/com/android/messaging/ui/VCardDetailFragment.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Fragment;
-import android.content.ActivityNotFoundException;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnLayoutChangeListener;
-import android.view.ViewGroup;
-import android.widget.ExpandableListAdapter;
-import android.widget.ExpandableListView;
-import android.widget.ExpandableListView.OnChildClickListener;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.PersonItemData;
-import com.android.messaging.datamodel.data.VCardContactItemData;
-import com.android.messaging.datamodel.data.PersonItemData.PersonItemDataListener;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.util.UiUtils;
-import com.android.messaging.util.UriUtil;
-
-/**
- * A fragment that shows the content of a VCard that contains one or more contacts.
- */
-public class VCardDetailFragment extends Fragment implements PersonItemDataListener {
-    private final Binding<VCardContactItemData> mBinding =
-            BindingBase.createBinding(this);
-    private ExpandableListView mListView;
-    private VCardDetailAdapter mAdapter;
-    private Uri mVCardUri;
-
-    /**
-     * We need to persist the VCard in the scratch directory before letting the user view it.
-     * We save this Uri locally, so that if the user cancels the action and re-perform the add
-     * to contacts action we don't have to persist it again.
-     */
-    private Uri mScratchSpaceUri;
-
-    @Override
-    public void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setHasOptionsMenu(true);
-    }
-
-    @Override
-    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
-            final Bundle savedInstanceState) {
-        Assert.notNull(mVCardUri);
-        final View view = inflater.inflate(R.layout.vcard_detail_fragment, container, false);
-        mListView = (ExpandableListView) view.findViewById(R.id.list);
-        mListView.addOnLayoutChangeListener(new OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(final View v, final int left, final int top, final int right,
-                    final int bottom, final int oldLeft, final int oldTop, final int oldRight,
-                    final int oldBottom) {
-                mListView.setIndicatorBounds(mListView.getWidth() - getResources()
-                        .getDimensionPixelSize(R.dimen.vcard_detail_group_indicator_width),
-                        mListView.getWidth());
-            }
-        });
-        mListView.setOnChildClickListener(new OnChildClickListener() {
-            @Override
-            public boolean onChildClick(ExpandableListView expandableListView, View clickedView,
-                    int groupPosition, int childPosition, long childId) {
-                if (!(clickedView instanceof PersonItemView)) {
-                    return false;
-                }
-                final Intent intent = ((PersonItemView) clickedView).getClickIntent();
-                if (intent != null) {
-                    try {
-                        startActivity(intent);
-                    } catch (ActivityNotFoundException e) {
-                        return false;
-                    }
-                    return true;
-                }
-                return false;
-            }
-        });
-        mBinding.bind(DataModel.get().createVCardContactItemData(getActivity(), mVCardUri));
-        mBinding.getData().setListener(this);
-        return view;
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        if (mBinding.isBound()) {
-            mBinding.unbind();
-        }
-        mListView.setAdapter((ExpandableListAdapter) null);
-    }
-
-    private boolean shouldShowAddToContactsItem() {
-        return mBinding.isBound() && mBinding.getData().hasValidVCard();
-    }
-
-    @Override
-    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
-        super.onCreateOptionsMenu(menu, inflater);
-        inflater.inflate(R.menu.vcard_detail_fragment_menu, menu);
-        final MenuItem addToContactsItem = menu.findItem(R.id.action_add_contact);
-        addToContactsItem.setVisible(shouldShowAddToContactsItem());
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.action_add_contact:
-                mBinding.ensureBound();
-                final Uri vCardUri = mBinding.getData().getVCardUri();
-
-                // We have to do things in the background in case we need to copy the vcard data.
-                new SafeAsyncTask<Void, Void, Uri>() {
-                    @Override
-                    protected Uri doInBackgroundTimed(final Void... params) {
-                        // We can't delete the persisted vCard file because we don't know when to
-                        // delete it, since the app that uses it (contacts, dialer) may start or
-                        // shut down at any point. Therefore, we rely on the system to clean up
-                        // the cache directory for us.
-                        return mScratchSpaceUri != null ? mScratchSpaceUri :
-                            UriUtil.persistContentToScratchSpace(vCardUri);
-                    }
-
-                    @Override
-                    protected void onPostExecute(final Uri result) {
-                        if (result != null) {
-                            mScratchSpaceUri = result;
-                            if (getActivity() != null) {
-                                MediaScratchFileProvider.addUriToDisplayNameEntry(
-                                        result, mBinding.getData().getDisplayName());
-                                UIIntents.get().launchSaveVCardToContactsActivity(getActivity(),
-                                        result);
-                            }
-                        }
-                    }
-                }.executeOnThreadPool();
-                return true;
-
-            default:
-                return super.onOptionsItemSelected(item);
-        }
-    }
-
-    public void setVCardUri(final Uri vCardUri) {
-        Assert.isTrue(!mBinding.isBound());
-        mVCardUri = vCardUri;
-    }
-
-    @Override
-    public void onPersonDataUpdated(final PersonItemData data) {
-        Assert.isTrue(data instanceof VCardContactItemData);
-        mBinding.ensureBound();
-        final VCardContactItemData vCardData = (VCardContactItemData) data;
-        Assert.isTrue(vCardData.hasValidVCard());
-        mAdapter = new VCardDetailAdapter(getActivity(), vCardData.getVCardResource().getVCards());
-        mListView.setAdapter(mAdapter);
-
-        // Expand the contact card if there's only one contact.
-        if (mAdapter.getGroupCount() == 1) {
-            mListView.expandGroup(0);
-        }
-        getActivity().invalidateOptionsMenu();
-    }
-
-    @Override
-    public void onPersonDataFailed(final PersonItemData data, final Exception exception) {
-        mBinding.ensureBound();
-        UiUtils.showToastAtBottom(R.string.failed_loading_vcard);
-        getActivity().finish();
-    }
-}
diff --git a/src/com/android/messaging/ui/VideoThumbnailView.java b/src/com/android/messaging/ui/VideoThumbnailView.java
deleted file mode 100644
index 966336e..0000000
--- a/src/com/android/messaging/ui/VideoThumbnailView.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.media.MediaPlayer;
-import android.net.Uri;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.ImageButton;
-import android.widget.ImageView.ScaleType;
-import android.widget.VideoView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.media.ImageRequest;
-import com.android.messaging.datamodel.media.MessagePartVideoThumbnailRequestDescriptor;
-import com.android.messaging.datamodel.media.VideoThumbnailRequest;
-import com.android.messaging.util.Assert;
-
-/**
- * View that encapsulates a video preview (either as a thumbnail image, or video player), and the
- * a play button to overlay it.  Ensures that the video preview maintains the aspect ratio of the
- * original video while trying to respect minimum width/height and constraining to the available
- * bounds
- */
-public class VideoThumbnailView extends FrameLayout {
-    /**
-     * When in this mode the VideoThumbnailView is a lightweight AsyncImageView with an ImageButton
-     * to play the video.  Clicking play will launch a full screen player
-     */
-    private static final int MODE_IMAGE_THUMBNAIL = 0;
-
-    /**
-     * When in this mode the VideoThumbnailVideo will include a VideoView, and the play button will
-     * play the video inline.  When in this mode, the loop and playOnLoad attributes can be applied
-     * to auto-play or loop the video.
-     */
-    private static final int MODE_PLAYABLE_VIDEO = 1;
-
-    private final int mMode;
-    private final boolean mPlayOnLoad;
-    private final boolean mAllowCrop;
-    private final VideoView mVideoView;
-    private final ImageButton mPlayButton;
-    private final AsyncImageView mThumbnailImage;
-    private int mVideoWidth;
-    private int mVideoHeight;
-    private Uri mVideoSource;
-    private boolean mAnimating;
-    private boolean mVideoLoaded;
-
-    public VideoThumbnailView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        final TypedArray typedAttributes =
-                context.obtainStyledAttributes(attrs, R.styleable.VideoThumbnailView);
-
-        final LayoutInflater inflater = LayoutInflater.from(context);
-        inflater.inflate(R.layout.video_thumbnail_view, this, true);
-
-        mPlayOnLoad = typedAttributes.getBoolean(R.styleable.VideoThumbnailView_playOnLoad, false);
-        final boolean loop =
-                typedAttributes.getBoolean(R.styleable.VideoThumbnailView_loop, false);
-        mMode = typedAttributes.getInt(R.styleable.VideoThumbnailView_mode, MODE_IMAGE_THUMBNAIL);
-        mAllowCrop = typedAttributes.getBoolean(R.styleable.VideoThumbnailView_allowCrop, false);
-
-        mVideoWidth = ImageRequest.UNSPECIFIED_SIZE;
-        mVideoHeight = ImageRequest.UNSPECIFIED_SIZE;
-
-        if (mMode == MODE_PLAYABLE_VIDEO) {
-            mVideoView = new VideoView(context);
-            // Video view tries to request focus on start which pulls focus from the user's intended
-            // focus when we add this control.  Remove focusability to prevent this.  The play
-            // button can still be focused
-            mVideoView.setFocusable(false);
-            mVideoView.setFocusableInTouchMode(false);
-            mVideoView.clearFocus();
-            addView(mVideoView, 0, new ViewGroup.LayoutParams(
-                    ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
-            mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
-                @Override
-                public void onPrepared(final MediaPlayer mediaPlayer) {
-                    mVideoLoaded = true;
-                    mVideoWidth = mediaPlayer.getVideoWidth();
-                    mVideoHeight = mediaPlayer.getVideoHeight();
-                    mediaPlayer.setLooping(loop);
-                    trySwitchToVideo();
-                }
-            });
-            mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
-                @Override
-                public void onCompletion(final MediaPlayer mediaPlayer) {
-                    mPlayButton.setVisibility(View.VISIBLE);
-                }
-            });
-            mVideoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
-                @Override
-                public boolean onError(final MediaPlayer mediaPlayer, final int i, final int i2) {
-                    return true;
-                }
-            });
-        } else {
-            mVideoView = null;
-        }
-
-        mPlayButton = (ImageButton) findViewById(R.id.video_thumbnail_play_button);
-        if (loop) {
-            mPlayButton.setVisibility(View.GONE);
-        } else {
-            mPlayButton.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(final View view) {
-                    if (mVideoSource == null) {
-                        return;
-                    }
-
-                    if (mMode == MODE_PLAYABLE_VIDEO) {
-                        mVideoView.seekTo(0);
-                        start();
-                    } else {
-                        UIIntents.get().launchFullScreenVideoViewer(getContext(), mVideoSource);
-                    }
-                }
-            });
-            mPlayButton.setOnLongClickListener(new OnLongClickListener() {
-                @Override
-                public boolean onLongClick(final View view) {
-                    // Button prevents long click from propagating up, do it manually
-                    VideoThumbnailView.this.performLongClick();
-                    return true;
-                }
-            });
-        }
-
-        mThumbnailImage = (AsyncImageView) findViewById(R.id.video_thumbnail_image);
-        if (mAllowCrop) {
-            mThumbnailImage.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
-            mThumbnailImage.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
-            mThumbnailImage.setScaleType(ScaleType.CENTER_CROP);
-        } else {
-            // This is the default setting in the layout, so No-op.
-        }
-        final int maxHeight = typedAttributes.getDimensionPixelSize(
-                R.styleable.VideoThumbnailView_android_maxHeight, ImageRequest.UNSPECIFIED_SIZE);
-        if (maxHeight != ImageRequest.UNSPECIFIED_SIZE) {
-            mThumbnailImage.setMaxHeight(maxHeight);
-            mThumbnailImage.setAdjustViewBounds(true);
-        }
-
-        typedAttributes.recycle();
-    }
-
-    @Override
-    protected void onAnimationStart() {
-        super.onAnimationStart();
-        mAnimating = true;
-    }
-
-    @Override
-    protected void onAnimationEnd() {
-        super.onAnimationEnd();
-        mAnimating = false;
-        trySwitchToVideo();
-    }
-
-    private void trySwitchToVideo() {
-        if (mAnimating) {
-            // Don't start video or hide image until after animation completes
-            return;
-        }
-
-        if (!mVideoLoaded) {
-            // Video hasn't loaded, nothing more to do
-            return;
-        }
-
-        if (mPlayOnLoad) {
-            start();
-        } else {
-            mVideoView.seekTo(0);
-        }
-    }
-
-    private boolean hasVideoSize() {
-        return mVideoWidth != ImageRequest.UNSPECIFIED_SIZE &&
-                mVideoHeight != ImageRequest.UNSPECIFIED_SIZE;
-    }
-
-    public void start() {
-        Assert.equals(MODE_PLAYABLE_VIDEO, mMode);
-        mPlayButton.setVisibility(View.GONE);
-        mThumbnailImage.setVisibility(View.GONE);
-        mVideoView.start();
-    }
-
-    // TODO: The check could be added to MessagePartData itself so that all users of MessagePartData
-    // get the right behavior, instead of requiring all the users to do similar checks.
-    private static boolean shouldUseGenericVideoIcon(final boolean incomingMessage) {
-        return incomingMessage && !VideoThumbnailRequest.shouldShowIncomingVideoThumbnails();
-    }
-
-    public void setSource(final MessagePartData part, final boolean incomingMessage) {
-        if (part == null) {
-            clearSource();
-        } else {
-            mVideoSource = part.getContentUri();
-            if (shouldUseGenericVideoIcon(incomingMessage)) {
-                mThumbnailImage.setImageResource(R.drawable.generic_video_icon);
-                mVideoWidth = ImageRequest.UNSPECIFIED_SIZE;
-                mVideoHeight = ImageRequest.UNSPECIFIED_SIZE;
-            } else {
-                mThumbnailImage.setImageResourceId(
-                        new MessagePartVideoThumbnailRequestDescriptor(part));
-                if (mVideoView != null) {
-                    mVideoView.setVideoURI(mVideoSource);
-                }
-                mVideoWidth = part.getWidth();
-                mVideoHeight = part.getHeight();
-            }
-        }
-    }
-
-    public void setSource(final Uri videoSource, final boolean incomingMessage) {
-        if (videoSource == null) {
-            clearSource();
-        } else {
-            mVideoSource = videoSource;
-            if (shouldUseGenericVideoIcon(incomingMessage)) {
-                mThumbnailImage.setImageResource(R.drawable.generic_video_icon);
-                mVideoWidth = ImageRequest.UNSPECIFIED_SIZE;
-                mVideoHeight = ImageRequest.UNSPECIFIED_SIZE;
-            } else {
-                mThumbnailImage.setImageResourceId(
-                        new MessagePartVideoThumbnailRequestDescriptor(videoSource));
-                if (mVideoView != null) {
-                    mVideoView.setVideoURI(videoSource);
-                }
-            }
-        }
-    }
-
-    private void clearSource() {
-        mVideoSource = null;
-        mThumbnailImage.setImageResourceId(null);
-        mVideoWidth = ImageRequest.UNSPECIFIED_SIZE;
-        mVideoHeight = ImageRequest.UNSPECIFIED_SIZE;
-        if (mVideoView != null) {
-            mVideoView.setVideoURI(null);
-        }
-    }
-
-    @Override
-    public void setMinimumWidth(final int minWidth) {
-        super.setMinimumWidth(minWidth);
-        if (mVideoView != null) {
-            mVideoView.setMinimumWidth(minWidth);
-        }
-    }
-
-    @Override
-    public void setMinimumHeight(final int minHeight) {
-        super.setMinimumHeight(minHeight);
-        if (mVideoView != null) {
-            mVideoView.setMinimumHeight(minHeight);
-        }
-    }
-
-    public void setColorFilter(int color) {
-        mThumbnailImage.setColorFilter(color);
-        mPlayButton.setColorFilter(color);
-    }
-
-    public void clearColorFilter() {
-        mThumbnailImage.clearColorFilter();
-        mPlayButton.clearColorFilter();
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        if (mAllowCrop) {
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-            return;
-        }
-        int desiredWidth = 1;
-        int desiredHeight = 1;
-        if (mVideoView != null) {
-            mVideoView.measure(widthMeasureSpec, heightMeasureSpec);
-        }
-        mThumbnailImage.measure(widthMeasureSpec, heightMeasureSpec);
-        if (hasVideoSize()) {
-            desiredWidth = mVideoWidth;
-            desiredHeight = mVideoHeight;
-        } else {
-            desiredWidth = mThumbnailImage.getMeasuredWidth();
-            desiredHeight = mThumbnailImage.getMeasuredHeight();
-        }
-
-        final int minimumWidth = getMinimumWidth();
-        final int minimumHeight = getMinimumHeight();
-
-        // Constrain the scale to fit within the supplied size
-        final float maxScale = Math.max(
-                MeasureSpec.getSize(widthMeasureSpec) / (float) desiredWidth,
-                MeasureSpec.getSize(heightMeasureSpec) / (float) desiredHeight);
-
-        // Scale up to reach minimum width/height
-        final float widthScale = Math.max(1, minimumWidth / (float) desiredWidth);
-        final float heightScale = Math.max(1, minimumHeight / (float) desiredHeight);
-        final float scale = Math.min(maxScale, Math.max(widthScale, heightScale));
-        desiredWidth = (int) (desiredWidth * scale);
-        desiredHeight = (int) (desiredHeight * scale);
-
-        setMeasuredDimension(desiredWidth, desiredHeight);
-    }
-
-    @Override
-    protected void onLayout(final boolean changed, final int left, final int top, final int right,
-            final int bottom) {
-        final int count = getChildCount();
-        for (int i = 0; i < count; i++) {
-            final View child = getChildAt(i);
-            child.layout(0, 0, right - left, bottom - top);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/ViewPagerTabStrip.java b/src/com/android/messaging/ui/ViewPagerTabStrip.java
deleted file mode 100644
index e088296..0000000
--- a/src/com/android/messaging/ui/ViewPagerTabStrip.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.LinearLayout;
-
-import com.android.messaging.R;
-import com.android.messaging.util.OsUtil;
-
-public class ViewPagerTabStrip extends LinearLayout {
-    private int mSelectedUnderlineThickness;
-    private final Paint mSelectedUnderlinePaint;
-
-    private int mIndexForSelection;
-    private float mSelectionOffset;
-
-    public ViewPagerTabStrip(Context context) {
-        this(context, null);
-    }
-
-    public ViewPagerTabStrip(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        final Resources res = context.getResources();
-
-        mSelectedUnderlineThickness =
-                res.getDimensionPixelSize(R.dimen.pager_tab_underline_selected);
-        int underlineColor = res.getColor(R.color.contact_picker_tab_underline);
-        int backgroundColor = res.getColor(R.color.action_bar_background_color);
-
-        mSelectedUnderlinePaint = new Paint();
-        mSelectedUnderlinePaint.setColor(underlineColor);
-
-        setBackgroundColor(backgroundColor);
-        setWillNotDraw(false);
-    }
-
-    /**
-     * Notifies this view that view pager has been scrolled. We save the tab index
-     * and selection offset for interpolating the position and width of selection
-     * underline.
-     */
-    void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-        mIndexForSelection = position;
-        mSelectionOffset = positionOffset;
-        invalidate();
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        int childCount = getChildCount();
-
-        // Thick colored underline below the current selection
-        if (childCount > 0) {
-            View selectedTitle = getChildAt(mIndexForSelection);
-            int selectedLeft = selectedTitle.getLeft();
-            int selectedRight = selectedTitle.getRight();
-            final boolean isRtl = isRtl();
-            final boolean hasNextTab = isRtl ? mIndexForSelection > 0
-                    : (mIndexForSelection < (getChildCount() - 1));
-            if ((mSelectionOffset > 0.0f) && hasNextTab) {
-                // Draw the selection partway between the tabs
-                View nextTitle = getChildAt(mIndexForSelection + (isRtl ? -1 : 1));
-                int nextLeft = nextTitle.getLeft();
-                int nextRight = nextTitle.getRight();
-
-                selectedLeft = (int) (mSelectionOffset * nextLeft +
-                        (1.0f - mSelectionOffset) * selectedLeft);
-                selectedRight = (int) (mSelectionOffset * nextRight +
-                        (1.0f - mSelectionOffset) * selectedRight);
-            }
-
-            int height = getHeight();
-            canvas.drawRect(selectedLeft, height - mSelectedUnderlineThickness,
-                    selectedRight, height, mSelectedUnderlinePaint);
-        }
-    }
-
-    private boolean isRtl() {
-        return OsUtil.isAtLeastJB_MR2() ? getLayoutDirection() == View.LAYOUT_DIRECTION_RTL : false;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/ViewPagerTabs.java b/src/com/android/messaging/ui/ViewPagerTabs.java
deleted file mode 100644
index bb4aaaf..0000000
--- a/src/com/android/messaging/ui/ViewPagerTabs.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.graphics.Outline;
-import android.graphics.drawable.ColorDrawable;
-import androidx.viewpager.widget.PagerAdapter;
-import androidx.viewpager.widget.ViewPager;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewOutlineProvider;
-import android.widget.FrameLayout;
-import android.widget.HorizontalScrollView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.util.OsUtil;
-
-/**
- * Lightweight implementation of ViewPager tabs. This looks similar to traditional actionBar tabs,
- * but allows for the view containing the tabs to be placed anywhere on screen. Text-related
- * attributes can also be assigned in XML - these will get propogated to the child TextViews
- * automatically.
- *
- * Note: this file is taken from the AOSP /packages/apps/ContactsCommon/src/com/android/contacts/
- * common/list/ViewPagerTabs.java. Some platform specific API calls (e.g. ViewOutlineProvider which
- * assumes L and above) have been modified to support down to Api Level 16.
- */
-public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnPageChangeListener {
-
-    ViewPager mPager;
-    private ViewPagerTabStrip mTabStrip;
-
-    /**
-     * Linearlayout that will contain the TextViews serving as tabs. This is the only child
-     * of the parent HorizontalScrollView.
-     */
-    final int mTextStyle;
-    final ColorStateList mTextColor;
-    final int mTextSize;
-    final boolean mTextAllCaps;
-    int mPrevSelected = -1;
-    int mSidePadding;
-
-    private static final int TAB_SIDE_PADDING_IN_DPS = 10;
-
-    // TODO: This should use <declare-styleable> in the future
-    private static final int[] ATTRS = new int[] {
-        android.R.attr.textSize,
-        android.R.attr.textStyle,
-        android.R.attr.textColor,
-        android.R.attr.textAllCaps
-    };
-
-    /**
-     * Shows a toast with the tab description when long-clicked.
-     */
-    private class OnTabLongClickListener implements OnLongClickListener {
-        final String mTabDescription;
-
-        public OnTabLongClickListener(String tabDescription) {
-            mTabDescription = tabDescription;
-        }
-
-        @Override
-        public boolean onLongClick(View v) {
-            final int[] screenPos = new int[2];
-            getLocationOnScreen(screenPos);
-
-            final Context context = getContext();
-            final int width = getWidth();
-            final int height = getHeight();
-            final int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
-
-            Toast toast = Toast.makeText(context, mTabDescription, Toast.LENGTH_SHORT);
-
-            // Show the toast under the tab
-            toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL,
-                    (screenPos[0] + width / 2) - screenWidth / 2, screenPos[1] + height);
-
-            toast.show();
-            return true;
-        }
-    }
-
-    public ViewPagerTabs(Context context) {
-        this(context, null);
-    }
-
-    public ViewPagerTabs(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public ViewPagerTabs(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        setFillViewport(true);
-
-        mSidePadding = (int) (getResources().getDisplayMetrics().density * TAB_SIDE_PADDING_IN_DPS);
-
-        final TypedArray a = context.obtainStyledAttributes(attrs, ATTRS);
-        mTextSize = a.getDimensionPixelSize(0, 0);
-        mTextStyle = a.getInt(1, 0);
-        mTextColor = a.getColorStateList(2);
-        mTextAllCaps = a.getBoolean(3, false);
-
-        mTabStrip = new ViewPagerTabStrip(context);
-        addView(mTabStrip,
-                new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
-        a.recycle();
-
-        // enable shadow casting from view bounds
-        if (OsUtil.isAtLeastL()) {
-            setOutlineProvider(new ViewOutlineProvider() {
-                @Override
-                public void getOutline(View view, Outline outline) {
-                    outline.setRect(0, 0, view.getWidth(), view.getHeight());
-                }
-            });
-        }
-    }
-
-    public void setViewPager(ViewPager viewPager) {
-        mPager = viewPager;
-        addTabs(mPager.getAdapter());
-    }
-
-    private void addTabs(PagerAdapter adapter) {
-        mTabStrip.removeAllViews();
-
-        final int count = adapter.getCount();
-        for (int i = 0; i < count; i++) {
-            addTab(adapter.getPageTitle(i), i);
-        }
-    }
-
-    private void addTab(CharSequence tabTitle, final int position) {
-        final TextView textView = new TextView(getContext());
-        textView.setText(tabTitle);
-        textView.setBackgroundResource(R.drawable.contact_picker_tab_background_selector);
-        textView.setGravity(Gravity.CENTER);
-        textView.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mPager.setCurrentItem(getRtlPosition(position));
-            }
-        });
-
-        // Assign various text appearance related attributes to child views.
-        if (mTextStyle > 0) {
-            textView.setTypeface(textView.getTypeface(), mTextStyle);
-        }
-        if (mTextSize > 0) {
-            textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
-        }
-        if (mTextColor != null) {
-            textView.setTextColor(mTextColor);
-        }
-        textView.setAllCaps(mTextAllCaps);
-        textView.setPadding(mSidePadding, 0, mSidePadding, 0);
-        mTabStrip.addView(textView, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
-                LayoutParams.MATCH_PARENT, 1));
-        // Default to the first child being selected
-        if (position == 0) {
-            mPrevSelected = 0;
-            textView.setSelected(true);
-        }
-    }
-
-    @Override
-    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
-        position = getRtlPosition(position);
-        int tabStripChildCount = mTabStrip.getChildCount();
-        if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
-            return;
-        }
-
-        mTabStrip.onPageScrolled(position, positionOffset, positionOffsetPixels);
-    }
-
-    @Override
-    public void onPageSelected(int position) {
-        position = getRtlPosition(position);
-        int tabStripChildCount = mTabStrip.getChildCount();
-        if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
-            return;
-        }
-
-        if (mPrevSelected >= 0 && mPrevSelected < tabStripChildCount) {
-            mTabStrip.getChildAt(mPrevSelected).setSelected(false);
-        }
-        final View selectedChild = mTabStrip.getChildAt(position);
-        selectedChild.setSelected(true);
-
-        // Update scroll position
-        final int scrollPos = selectedChild.getLeft() - (getWidth() - selectedChild.getWidth()) / 2;
-        smoothScrollTo(scrollPos, 0);
-        mPrevSelected = position;
-    }
-
-    @Override
-    public void onPageScrollStateChanged(int state) {
-    }
-
-    private int getRtlPosition(int position) {
-        if (OsUtil.isAtLeastJB_MR2() && Factory.get().getApplicationContext().getResources()
-                .getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
-            return mTabStrip.getChildCount() - 1 - position;
-        }
-        return position;
-    }
-
-    public int getSelectedItemPosition() {
-        return mPrevSelected;
-    }
-}
diff --git a/src/com/android/messaging/ui/WidgetPickConversationActivity.java b/src/com/android/messaging/ui/WidgetPickConversationActivity.java
deleted file mode 100644
index 60e1318..0000000
--- a/src/com/android/messaging/ui/WidgetPickConversationActivity.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Fragment;
-import android.appwidget.AppWidgetManager;
-import android.content.Intent;
-import android.os.Bundle;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.ui.conversationlist.ShareIntentFragment;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.widget.WidgetConversationProvider;
-
-public class WidgetPickConversationActivity extends BaseBugleActivity implements
-        ShareIntentFragment.HostInterface {
-
-    private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-
-        // Set the result to CANCELED.  This will cause the widget host to cancel
-        // out of the widget placement if they press the back button.
-        setResult(RESULT_CANCELED);
-
-        // Find the widget id from the intent.
-        final Intent intent = getIntent();
-        final Bundle extras = intent.getExtras();
-        if (extras != null) {
-            mAppWidgetId = extras.getInt(
-                    AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
-        }
-
-        // If they gave us an intent without the widget id, just bail.
-        if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
-            finish();
-        }
-
-        final ShareIntentFragment convPicker = new ShareIntentFragment();
-        final Bundle bundle = new Bundle();
-        bundle.putBoolean(ShareIntentFragment.HIDE_NEW_CONVERSATION_BUTTON_KEY, true);
-        convPicker.setArguments(bundle);
-        convPicker.show(getFragmentManager(), "ShareIntentFragment");
-    }
-
-    @Override
-    public void onAttachFragment(final Fragment fragment) {
-        final Intent intent = getIntent();
-        final String action = intent.getAction();
-        if (!AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(action)) {
-            // Unsupported action.
-            Assert.fail("Unsupported action type: " + action);
-        }
-    }
-
-    @Override
-    public void onConversationClick(final ConversationListItemData conversationListItemData) {
-        saveConversationidPref(mAppWidgetId, conversationListItemData.getConversationId());
-
-        // Push widget update to surface with newly set prefix
-        WidgetConversationProvider.rebuildWidget(this, mAppWidgetId);
-
-        // Make sure we pass back the original appWidgetId
-        Intent resultValue = new Intent();
-        resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
-        setResult(RESULT_OK, resultValue);
-        finish();
-    }
-
-    @Override
-    public void onCreateConversationClick() {
-        // We should never get here because we're hiding the new conversation button in the
-        // ShareIntentFragment by setting HIDE_NEW_CONVERSATION_BUTTON_KEY in the arguments.
-        finish();
-    }
-
-    // Write the ConversationId to the SharedPreferences object for this widget
-    static void saveConversationidPref(int appWidgetId, String conversationId) {
-        final BuglePrefs prefs = Factory.get().getWidgetPrefs();
-        prefs.putString(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID + appWidgetId, conversationId);
-    }
-
-    // Read the ConversationId from the SharedPreferences object for this widget.
-    public static String getConversationIdPref(int appWidgetId) {
-        final BuglePrefs prefs = Factory.get().getWidgetPrefs();
-        return prefs.getString(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID + appWidgetId, null);
-    }
-
-    // Delete the ConversationId preference from the SharedPreferences object for this widget.
-    public static void deleteConversationIdPref(int appWidgetId) {
-        final BuglePrefs prefs = Factory.get().getWidgetPrefs();
-        prefs.remove(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID + appWidgetId);
-    }
-
-}
diff --git a/src/com/android/messaging/ui/animation/PopupTransitionAnimation.java b/src/com/android/messaging/ui/animation/PopupTransitionAnimation.java
deleted file mode 100644
index e14d16e..0000000
--- a/src/com/android/messaging/ui/animation/PopupTransitionAnimation.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.animation;
-
-import android.animation.TypeEvaluator;
-import android.app.Activity;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.Animation;
-import android.view.animation.Transformation;
-import android.widget.PopupWindow;
-
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.ThreadUtil;
-import com.android.messaging.util.UiUtils;
-
-/**
- * Animates viewToAnimate from startRect to the place where it is in the layout,  viewToAnimate
- * should be in its final destination location before startAfterLayoutComplete is called.
- * viewToAnimate will be drawn scaled and offset in a popupWindow.
- * This class handles the case where the viewToAnimate moves during the animation
- */
-public class PopupTransitionAnimation extends Animation {
-    /** The view we're animating */
-    private final View mViewToAnimate;
-
-    /** The rect to start the slide in animation from */
-    private final Rect mStartRect;
-
-    /** The rect of the currently animated view */
-    private Rect mCurrentRect;
-
-    /** The rect that we're animating to.  This can change during the animation */
-    private final Rect mDestRect;
-
-    /** The bounds of the popup in window coordinates.  Does not include notification bar */
-    private final Rect mPopupRect;
-
-    /** The bounds of the action bar in window coordinates.  We clip the popup to below this */
-    private final Rect mActionBarRect;
-
-    /** Interpolates between the start and end rect for every animation tick */
-    private final TypeEvaluator<Rect> mRectEvaluator;
-
-    /** The popup window that holds contains the animating view */
-    private PopupWindow mPopupWindow;
-
-    /** The layout root for the popup which is where the animated view is rendered */
-    private View mPopupRoot;
-
-    /** The action bar's view */
-    private final View mActionBarView;
-
-    private Runnable mOnStartCallback;
-    private Runnable mOnStopCallback;
-
-    public PopupTransitionAnimation(final Rect startRect, final View viewToAnimate) {
-        mViewToAnimate = viewToAnimate;
-        mStartRect = startRect;
-        mCurrentRect = new Rect(mStartRect);
-        mDestRect = new Rect();
-        mPopupRect = new Rect();
-        mActionBarRect = new Rect();
-        mActionBarView = viewToAnimate.getRootView().findViewById(
-                androidx.appcompat.R.id.action_bar);
-        mRectEvaluator = RectEvaluatorCompat.create();
-        setDuration(UiUtils.MEDIAPICKER_TRANSITION_DURATION);
-        setInterpolator(UiUtils.DEFAULT_INTERPOLATOR);
-        setAnimationListener(new AnimationListener() {
-            @Override
-            public void onAnimationStart(final Animation animation) {
-                if (mOnStartCallback != null) {
-                    mOnStartCallback.run();
-                }
-                mEvents.append("oAS,");
-            }
-
-            @Override
-            public void onAnimationEnd(final Animation animation) {
-                if (mOnStopCallback != null) {
-                    mOnStopCallback.run();
-                }
-                dismiss();
-                mEvents.append("oAE,");
-            }
-
-            @Override
-            public void onAnimationRepeat(final Animation animation) {
-            }
-        });
-    }
-
-    private final StringBuilder mEvents = new StringBuilder();
-    private final Runnable mCleanupRunnable = new Runnable() {
-        @Override
-        public void run() {
-            LogUtil.w(LogUtil.BUGLE_TAG, "PopupTransitionAnimation: " + mEvents);
-        }
-    };
-
-    /**
-     * Ensures the animation is ready before starting the animation.
-     * viewToAnimate must first be layed out so we know where we will animate to
-     */
-    public void startAfterLayoutComplete() {
-        // We want layout to occur, and then we immediately animate it in, so hide it initially to
-        // reduce jank on the first frame
-        mViewToAnimate.setVisibility(View.INVISIBLE);
-        mViewToAnimate.setAlpha(0);
-
-        final Runnable startAnimation = new Runnable() {
-            boolean mRunComplete = false;
-            boolean mFirstTry = true;
-
-            @Override
-            public void run() {
-                if (mRunComplete) {
-                    return;
-                }
-
-                mViewToAnimate.getGlobalVisibleRect(mDestRect);
-                // In Android views which are visible but haven't computed their size yet have a
-                // size of 1x1 because anything with a size of 0x0 is considered hidden.  We can't
-                // start the animation until after the size is greater than 1x1
-                if (mDestRect.width() <= 1 || mDestRect.height() <= 1) {
-                    // Layout hasn't occurred yet
-                    if (!mFirstTry) {
-                        // Give up if this is not the first try, since layout change still doesn't
-                        // yield a size for the view. This is likely because the media picker is
-                        // full screen so there's no space left for the animated view. We give up
-                        // on animation, but need to make sure the view that was initially
-                        // hidden is re-shown.
-                        mViewToAnimate.setAlpha(1);
-                        mViewToAnimate.setVisibility(View.VISIBLE);
-                    } else {
-                        mFirstTry = false;
-                        UiUtils.doOnceAfterLayoutChange(mViewToAnimate, this);
-                    }
-                    return;
-                }
-
-                mRunComplete = true;
-                mViewToAnimate.startAnimation(PopupTransitionAnimation.this);
-                mViewToAnimate.invalidate();
-                // http://b/20856505: The PopupWindow sometimes does not get dismissed.
-                ThreadUtil.getMainThreadHandler().postDelayed(mCleanupRunnable, getDuration() * 2);
-            }
-        };
-
-        startAnimation.run();
-    }
-
-    public PopupTransitionAnimation setOnStartCallback(final Runnable onStart) {
-        mOnStartCallback = onStart;
-        return this;
-    }
-
-    public PopupTransitionAnimation setOnStopCallback(final Runnable onStop) {
-        mOnStopCallback = onStop;
-        return this;
-    }
-
-    @Override
-    protected void applyTransformation(final float interpolatedTime, final Transformation t) {
-        if (mPopupWindow == null) {
-            initPopupWindow();
-        }
-        // Update mDestRect as it may have moved during the animation
-        mPopupRect.set(UiUtils.getMeasuredBoundsOnScreen(mPopupRoot));
-        mActionBarRect.set(UiUtils.getMeasuredBoundsOnScreen(mActionBarView));
-        computeDestRect();
-
-        // Update currentRect to the new animated coordinates, and request mPopupRoot to redraw
-        // itself at the new coordinates
-        mCurrentRect = mRectEvaluator.evaluate(interpolatedTime, mStartRect, mDestRect);
-        mPopupRoot.invalidate();
-
-        if (interpolatedTime >= 0.98) {
-            mEvents.append("aT").append(interpolatedTime).append(',');
-        }
-        if (interpolatedTime == 1) {
-            dismiss();
-        }
-    }
-
-    private void dismiss() {
-        mEvents.append("d,");
-        mViewToAnimate.setAlpha(1);
-        mViewToAnimate.setVisibility(View.VISIBLE);
-        // Delay dismissing the popup window to let mViewToAnimate draw under it and reduce the
-        // flash
-        ThreadUtil.getMainThreadHandler().post(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    mPopupWindow.dismiss();
-                } catch (IllegalArgumentException e) {
-                    // PopupWindow.dismiss() will fire an IllegalArgumentException if the activity
-                    // has already ended while we were animating
-                }
-                ThreadUtil.getMainThreadHandler().removeCallbacks(mCleanupRunnable);
-            }
-        });
-    }
-
-    @Override
-    public boolean willChangeBounds() {
-        return false;
-    }
-
-    /**
-     * Computes mDestRect (the position in window space of the placeholder view that we should
-     * animate to).  Some frames during the animation fail to compute getGlobalVisibleRect, so use
-     * the last known values in that case
-     */
-    private void computeDestRect() {
-        final int prevTop = mDestRect.top;
-        final int prevLeft = mDestRect.left;
-        final int prevRight = mDestRect.right;
-        final int prevBottom = mDestRect.bottom;
-
-        if (!getViewScreenMeasureRect(mViewToAnimate, mDestRect)) {
-            mDestRect.top = prevTop;
-            mDestRect.left = prevLeft;
-            mDestRect.bottom = prevBottom;
-            mDestRect.right = prevRight;
-        }
-    }
-
-    /**
-     * Sets up the PopupWindow that the view will animate in.  Animating the size and position of a
-     * popup can be choppy, so instead we make the popup fill the entire space of the screen, and
-     * animate the position of viewToAnimate within the popup using a Transformation
-     */
-    private void initPopupWindow() {
-        mPopupRoot = new View(mViewToAnimate.getContext()) {
-            @Override
-            protected void onDraw(final Canvas canvas) {
-                canvas.save();
-                canvas.clipRect(getLeft(), mActionBarRect.bottom - mPopupRect.top, getRight(),
-                        getBottom());
-                canvas.drawColor(Color.TRANSPARENT);
-                final float previousAlpha = mViewToAnimate.getAlpha();
-                mViewToAnimate.setAlpha(1);
-                // The view's global position includes the notification bar height, but
-                // the popup window may or may not cover the notification bar (depending on screen
-                // rotation, IME status etc.), so we need to compensate for this difference by
-                // offseting vertically.
-                canvas.translate(mCurrentRect.left, mCurrentRect.top - mPopupRect.top);
-
-                final float viewWidth = mViewToAnimate.getWidth();
-                final float viewHeight = mViewToAnimate.getHeight();
-                if (viewWidth > 0 && viewHeight > 0) {
-                    canvas.scale(mCurrentRect.width() / viewWidth,
-                            mCurrentRect.height() / viewHeight);
-                }
-                canvas.clipRect(0, 0, mCurrentRect.width(), mCurrentRect.height());
-                if (!mPopupRect.isEmpty()) {
-                    // HACK: Layout is unstable until mPopupRect is non-empty.
-                    mViewToAnimate.draw(canvas);
-                }
-                mViewToAnimate.setAlpha(previousAlpha);
-                canvas.restore();
-            }
-        };
-        mPopupWindow = new PopupWindow(mViewToAnimate.getContext());
-        mPopupWindow.setBackgroundDrawable(null);
-        mPopupWindow.setContentView(mPopupRoot);
-        mPopupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
-        mPopupWindow.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
-        mPopupWindow.setTouchable(false);
-        // We must pass a non-zero value for the y offset, or else the system resets the status bar
-        // color to black (M only) during the animation. The actual position of the window (and
-        // the animated view inside it) are still correct, regardless of what we pass for the y
-        // parameter (e.g. 1 and 100 both work). Not entirely sure why this works.
-        mPopupWindow.showAtLocation(mViewToAnimate, Gravity.TOP, 0, 1);
-    }
-
-    private static boolean getViewScreenMeasureRect(final View view, final Rect outRect) {
-        outRect.set(UiUtils.getMeasuredBoundsOnScreen(view));
-        return !outRect.isEmpty();
-    }
-}
diff --git a/src/com/android/messaging/ui/animation/RectEvaluatorCompat.java b/src/com/android/messaging/ui/animation/RectEvaluatorCompat.java
deleted file mode 100644
index e3c60fc..0000000
--- a/src/com/android/messaging/ui/animation/RectEvaluatorCompat.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.animation;
-
-import android.animation.RectEvaluator;
-import android.animation.TypeEvaluator;
-import android.graphics.Rect;
-
-import com.android.messaging.util.OsUtil;
-
-/**
- * This evaluator can be used to perform type interpolation between <code>Rect</code> values.
- * It's backward compatible to Api Level 11.
- */
-public class RectEvaluatorCompat implements TypeEvaluator<Rect> {
-    public static TypeEvaluator<Rect> create() {
-        if (OsUtil.isAtLeastJB_MR2()) {
-            return new RectEvaluator();
-        } else {
-            return new RectEvaluatorCompat();
-        }
-    }
-
-    @Override
-    public Rect evaluate(float fraction, Rect startValue, Rect endValue) {
-        int left = startValue.left + (int) ((endValue.left - startValue.left) * fraction);
-        int top = startValue.top + (int) ((endValue.top - startValue.top) * fraction);
-        int right = startValue.right + (int) ((endValue.right - startValue.right) * fraction);
-        int bottom = startValue.bottom + (int) ((endValue.bottom - startValue.bottom) * fraction);
-        return new Rect(left, top, right, bottom);
-    }
-}
diff --git a/src/com/android/messaging/ui/animation/ViewGroupItemVerticalExplodeAnimation.java b/src/com/android/messaging/ui/animation/ViewGroupItemVerticalExplodeAnimation.java
deleted file mode 100644
index 7dc41fb..0000000
--- a/src/com/android/messaging/ui/animation/ViewGroupItemVerticalExplodeAnimation.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.animation;
-
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import androidx.core.view.ViewCompat;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewGroupOverlay;
-import android.view.ViewOverlay;
-import android.widget.FrameLayout;
-
-import com.android.messaging.R;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.UiUtils;
-
-/**
- * <p>
- * Shows a vertical "explode" animation for any view inside a view group (e.g. views inside a
- * ListView). During the animation, a snapshot is taken for the view to the animated and
- * presented in a popup window or view overlay on top of the original view group. The background
- * of the view (a highlight) vertically expands (explodes) during the animation.
- * </p>
- * <p>
- * The exact implementation of the animation depends on platform API level. For JB_MR2 and later,
- * the implementation utilizes ViewOverlay to perform highly performant overlay animations; for
- * older API levels, the implementation falls back to using a full screen popup window to stage
- * the animation.
- * </p>
- * <p>
- * To start this animation, call {@link #startAnimationForView(ViewGroup, View, View, boolean, int)}
- * </p>
- */
-public class ViewGroupItemVerticalExplodeAnimation {
-    /**
-     * Starts a vertical explode animation for a given view situated in a given container.
-     *
-     * @param container the container of the view which determines the explode animation's final
-     *        size
-     * @param viewToAnimate the view to be animated. The view will be highlighted by the explode
-     *        highlight, which expands from the size of the view to the size of the container.
-     * @param animationStagingView the view that stages the animation. Since viewToAnimate may be
-     *        removed from the view tree during the animation, we need a view that'll be alive
-     *        for the duration of the animation so that the animation won't get cancelled.
-     * @param snapshotView whether a snapshot of the view to animate is needed.
-     */
-    public static void startAnimationForView(final ViewGroup container, final View viewToAnimate,
-            final View animationStagingView, final boolean snapshotView, final int duration) {
-        if (OsUtil.isAtLeastJB_MR2() && (viewToAnimate.getContext() instanceof Activity)) {
-            new ViewExplodeAnimationJellyBeanMR2(viewToAnimate, container, snapshotView, duration)
-                .startAnimation();
-        } else {
-            // Pre JB_MR2, this animation can cause rendering failures which causes the framework
-            // to fall back to software rendering where camera preview isn't supported (b/18264647)
-            // just skip the animation to avoid this case.
-        }
-    }
-
-    /**
-     * Implementation class for API level >= 18.
-     */
-    @TargetApi(18)
-    private static class ViewExplodeAnimationJellyBeanMR2 {
-        private final View mViewToAnimate;
-        private final ViewGroup mContainer;
-        private final View mSnapshot;
-        private final Bitmap mViewBitmap;
-        private final int mDuration;
-
-        public ViewExplodeAnimationJellyBeanMR2(final View viewToAnimate, final ViewGroup container,
-                final boolean snapshotView, final int duration) {
-            mViewToAnimate = viewToAnimate;
-            mContainer = container;
-            mDuration = duration;
-            if (snapshotView) {
-                mViewBitmap = snapshotView(viewToAnimate);
-                mSnapshot = new View(viewToAnimate.getContext());
-            } else {
-                mSnapshot = null;
-                mViewBitmap = null;
-            }
-        }
-
-        public void startAnimation() {
-            final Context context = mViewToAnimate.getContext();
-            final Resources resources = context.getResources();
-            final View decorView = ((Activity) context).getWindow().getDecorView();
-            final ViewOverlay viewOverlay = decorView.getOverlay();
-            if (viewOverlay instanceof ViewGroupOverlay) {
-                final ViewGroupOverlay overlay = (ViewGroupOverlay) viewOverlay;
-
-                // Add a shadow layer to the overlay.
-                final FrameLayout shadowContainerLayer = new FrameLayout(context);
-                final Drawable oldBackground = mViewToAnimate.getBackground();
-                final Rect containerRect = UiUtils.getMeasuredBoundsOnScreen(mContainer);
-                final Rect decorRect = UiUtils.getMeasuredBoundsOnScreen(decorView);
-                // Position the container rect relative to the decor rect since the decor rect
-                // defines whether the view overlay will be positioned.
-                containerRect.offset(-decorRect.left, -decorRect.top);
-                shadowContainerLayer.setLeft(containerRect.left);
-                shadowContainerLayer.setTop(containerRect.top);
-                shadowContainerLayer.setBottom(containerRect.bottom);
-                shadowContainerLayer.setRight(containerRect.right);
-                shadowContainerLayer.setBackgroundColor(resources.getColor(
-                        R.color.open_conversation_animation_background_shadow));
-                // Per design request, temporarily clear out the background of the item content
-                // to not show any ripple effects during animation.
-                if (!(oldBackground instanceof ColorDrawable)) {
-                    mViewToAnimate.setBackground(null);
-                }
-                overlay.add(shadowContainerLayer);
-
-                // Add a expand layer and position it with in the shadow background, so it can
-                // be properly clipped to the container bounds during the animation.
-                final View expandLayer = new View(context);
-                final int elevation = resources.getDimensionPixelSize(
-                        R.dimen.explode_animation_highlight_elevation);
-                final Rect viewRect = UiUtils.getMeasuredBoundsOnScreen(mViewToAnimate);
-                // Frame viewRect from screen space to containerRect space.
-                viewRect.offset(-containerRect.left - decorRect.left,
-                        -containerRect.top - decorRect.top);
-                // Since the expand layer expands at the same rate above and below, we need to
-                // compute the expand scale using the bigger of the top/bottom distances.
-                final int expandLayerHalfHeight = viewRect.height() / 2;
-                final int topDist = viewRect.top;
-                final int bottomDist = containerRect.height() - viewRect.bottom;
-                final float scale = expandLayerHalfHeight == 0 ? 1 :
-                        ((float) Math.max(topDist, bottomDist) + expandLayerHalfHeight) /
-                        expandLayerHalfHeight;
-                // Position the expand layer initially to exactly match the animated item.
-                shadowContainerLayer.addView(expandLayer);
-                expandLayer.setLeft(viewRect.left);
-                expandLayer.setTop(viewRect.top);
-                expandLayer.setBottom(viewRect.bottom);
-                expandLayer.setRight(viewRect.right);
-                expandLayer.setBackgroundColor(resources.getColor(
-                        R.color.conversation_background));
-                ViewCompat.setElevation(expandLayer, elevation);
-
-                // Conditionally stage the snapshot in the overlay.
-                if (mSnapshot != null) {
-                    shadowContainerLayer.addView(mSnapshot);
-                    mSnapshot.setLeft(viewRect.left);
-                    mSnapshot.setTop(viewRect.top);
-                    mSnapshot.setBottom(viewRect.bottom);
-                    mSnapshot.setRight(viewRect.right);
-                    mSnapshot.setBackground(new BitmapDrawable(resources, mViewBitmap));
-                    ViewCompat.setElevation(mSnapshot, elevation);
-                }
-
-                // Apply a scale animation to scale to full screen.
-                expandLayer.animate().scaleY(scale)
-                    .setDuration(mDuration)
-                    .setInterpolator(UiUtils.EASE_IN_INTERPOLATOR)
-                    .withEndAction(new Runnable() {
-                        @Override
-                        public void run() {
-                            // Clean up the views added to overlay on animation finish.
-                            overlay.remove(shadowContainerLayer);
-                            mViewToAnimate.setBackground(oldBackground);
-                            if (mViewBitmap != null) {
-                                mViewBitmap.recycle();
-                            }
-                        }
-                });
-            }
-        }
-    }
-
-    /**
-     * Take a snapshot of the given review, return a Bitmap object that's owned by the caller.
-     */
-    static Bitmap snapshotView(final View view) {
-        // Save the content of the view into a bitmap.
-        final Bitmap viewBitmap = Bitmap.createBitmap(view.getWidth(),
-                view.getHeight(), Bitmap.Config.ARGB_8888);
-        // Strip the view of its background when taking a snapshot so that things like touch
-        // feedback don't get accidentally snapshotted.
-        final Drawable viewBackground = view.getBackground();
-        ImageUtils.setBackgroundDrawableOnView(view, null);
-        view.draw(new Canvas(viewBitmap));
-        ImageUtils.setBackgroundDrawableOnView(view, viewBackground);
-        return viewBitmap;
-    }
-}
diff --git a/src/com/android/messaging/ui/appsettings/ApnEditorActivity.java b/src/com/android/messaging/ui/appsettings/ApnEditorActivity.java
deleted file mode 100644
index 5d19a83..0000000
--- a/src/com/android/messaging/ui/appsettings/ApnEditorActivity.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.appsettings;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.ContentValues;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.preference.EditTextPreference;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
-import android.provider.Telephony;
-import androidx.core.app.NavUtils;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.ApnDatabase;
-import com.android.messaging.sms.BugleApnSettingsLoader;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.PhoneUtils;
-
-public class ApnEditorActivity extends BugleActionBarActivity {
-    private static final int ERROR_DIALOG_ID = 0;
-    private static final String ERROR_MESSAGE_KEY = "error_msg";
-    private ApnEditorFragment mApnEditorFragment;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-
-        // Display the fragment as the main content.
-        mApnEditorFragment = new ApnEditorFragment();
-        mApnEditorFragment.setSubId(getIntent().getIntExtra(UIIntents.UI_INTENT_EXTRA_SUB_ID,
-                ParticipantData.DEFAULT_SELF_SUB_ID));
-        getFragmentManager().beginTransaction()
-            .replace(android.R.id.content, mApnEditorFragment)
-            .commit();
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                NavUtils.navigateUpFromSameTask(this);
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    @Override
-    protected Dialog onCreateDialog(int id, Bundle args) {
-
-        if (id == ERROR_DIALOG_ID) {
-            String msg = args.getString(ERROR_MESSAGE_KEY);
-
-            return new AlertDialog.Builder(this)
-                .setPositiveButton(android.R.string.ok, null)
-                .setMessage(msg)
-                .create();
-        }
-
-        return super.onCreateDialog(id);
-    }
-
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        switch (keyCode) {
-            case KeyEvent.KEYCODE_BACK: {
-                if (mApnEditorFragment.validateAndSave(false)) {
-                    finish();
-                }
-                return true;
-            }
-        }
-        return super.onKeyDown(keyCode, event);
-    }
-
-    @Override
-    protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
-        super.onPrepareDialog(id, dialog);
-
-        if (id == ERROR_DIALOG_ID) {
-            final String msg = args.getString(ERROR_MESSAGE_KEY);
-
-            if (msg != null) {
-                ((AlertDialog) dialog).setMessage(msg);
-            }
-        }
-    }
-
-    public static class ApnEditorFragment extends PreferenceFragment implements
-        SharedPreferences.OnSharedPreferenceChangeListener {
-
-        private static final String SAVED_POS = "pos";
-
-        private static final int MENU_DELETE = Menu.FIRST;
-        private static final int MENU_SAVE = Menu.FIRST + 1;
-        private static final int MENU_CANCEL = Menu.FIRST + 2;
-
-        private EditTextPreference mMmsProxy;
-        private EditTextPreference mMmsPort;
-        private EditTextPreference mName;
-        private EditTextPreference mMmsc;
-        private EditTextPreference mMcc;
-        private EditTextPreference mMnc;
-        private static String sNotSet;
-
-        private String mCurMnc;
-        private String mCurMcc;
-
-        private Cursor mCursor;
-        private boolean mNewApn;
-        private boolean mFirstTime;
-        private String mCurrentId;
-
-        private int mSubId;
-
-        /**
-         * Standard projection for the interesting columns of a normal note.
-         */
-        private static final String[] sProjection = new String[] {
-            Telephony.Carriers._ID,         // 0
-            Telephony.Carriers.NAME,        // 1
-            Telephony.Carriers.MMSC,        // 2
-            Telephony.Carriers.MCC,         // 3
-            Telephony.Carriers.MNC,         // 4
-            Telephony.Carriers.NUMERIC,     // 5
-            Telephony.Carriers.MMSPROXY,    // 6
-            Telephony.Carriers.MMSPORT,     // 7
-            Telephony.Carriers.TYPE,        // 8
-        };
-
-        private static final int ID_INDEX = 0;
-        private static final int NAME_INDEX = 1;
-        private static final int MMSC_INDEX = 2;
-        private static final int MCC_INDEX = 3;
-        private static final int MNC_INDEX = 4;
-        private static final int NUMERIC_INDEX = 5;
-        private static final int MMSPROXY_INDEX = 6;
-        private static final int MMSPORT_INDEX = 7;
-        private static final int TYPE_INDEX = 8;
-
-        private SQLiteDatabase mDatabase;
-
-        @Override
-        public void onCreate(Bundle icicle) {
-            super.onCreate(icicle);
-
-        }
-
-        @Override
-        public void onActivityCreated(Bundle savedInstanceState) {
-            super.onActivityCreated(savedInstanceState);
-
-            addPreferencesFromResource(R.xml.apn_editor);
-
-            setHasOptionsMenu(true);
-
-            sNotSet = getResources().getString(R.string.apn_not_set);
-            mName = (EditTextPreference) findPreference("apn_name");
-            mMmsProxy = (EditTextPreference) findPreference("apn_mms_proxy");
-            mMmsPort = (EditTextPreference) findPreference("apn_mms_port");
-            mMmsc = (EditTextPreference) findPreference("apn_mmsc");
-            mMcc = (EditTextPreference) findPreference("apn_mcc");
-            mMnc = (EditTextPreference) findPreference("apn_mnc");
-
-            final Intent intent = getActivity().getIntent();
-
-            mFirstTime = savedInstanceState == null;
-            mCurrentId = intent.getStringExtra(UIIntents.UI_INTENT_EXTRA_APN_ROW_ID);
-            mNewApn = mCurrentId == null;
-
-            mDatabase = ApnDatabase.getApnDatabase().getWritableDatabase();
-
-            if (mNewApn) {
-                fillUi();
-            } else {
-                // Do initial query not on the UI thread
-                new AsyncTask<Void, Void, Void>() {
-                    @Override
-                    protected Void doInBackground(Void... params) {
-                        if (mCurrentId != null) {
-                            String selection = Telephony.Carriers._ID + " =?";
-                            String[] selectionArgs = new String[]{ mCurrentId };
-                            mCursor = mDatabase.query(ApnDatabase.APN_TABLE, sProjection, selection,
-                                    selectionArgs, null, null, null, null);
-                        }
-                        return null;
-                    }
-
-                    @Override
-                    protected void onPostExecute(Void result) {
-                        if (mCursor == null) {
-                            getActivity().finish();
-                            return;
-                        }
-                        mCursor.moveToFirst();
-
-                        fillUi();
-                    }
-                }.execute((Void) null);
-            }
-        }
-
-        @Override
-        public void onDestroy() {
-            super.onDestroy();
-            if (mCursor != null) {
-                mCursor.close();
-                mCursor = null;
-            }
-        }
-
-        @Override
-        public void onResume() {
-            super.onResume();
-            getPreferenceScreen().getSharedPreferences()
-            .registerOnSharedPreferenceChangeListener(this);
-        }
-
-        @Override
-        public void onPause() {
-            getPreferenceScreen().getSharedPreferences()
-            .unregisterOnSharedPreferenceChangeListener(this);
-            super.onPause();
-        }
-
-        public void setSubId(final int subId) {
-            mSubId = subId;
-        }
-
-        private void fillUi() {
-            if (mNewApn) {
-                mMcc.setText(null);
-                mMnc.setText(null);
-                String numeric = PhoneUtils.get(mSubId).getSimOperatorNumeric();
-                // MCC is first 3 chars and then in 2 - 3 chars of MNC
-                if (numeric != null && numeric.length() > 4) {
-                    // Country code
-                    String mcc = numeric.substring(0, 3);
-                    // Network code
-                    String mnc = numeric.substring(3);
-                    // Auto populate MNC and MCC for new entries, based on what SIM reports
-                    mMcc.setText(mcc);
-                    mMnc.setText(mnc);
-                    mCurMnc = mnc;
-                    mCurMcc = mcc;
-                }
-                mName.setText(null);
-                mMmsProxy.setText(null);
-                mMmsPort.setText(null);
-                mMmsc.setText(null);
-            } else if (mFirstTime) {
-                mFirstTime = false;
-                // Fill in all the values from the db in both text editor and summary
-                mName.setText(mCursor.getString(NAME_INDEX));
-                mMmsProxy.setText(mCursor.getString(MMSPROXY_INDEX));
-                mMmsPort.setText(mCursor.getString(MMSPORT_INDEX));
-                mMmsc.setText(mCursor.getString(MMSC_INDEX));
-                mMcc.setText(mCursor.getString(MCC_INDEX));
-                mMnc.setText(mCursor.getString(MNC_INDEX));
-            }
-
-            mName.setSummary(checkNull(mName.getText()));
-            mMmsProxy.setSummary(checkNull(mMmsProxy.getText()));
-            mMmsPort.setSummary(checkNull(mMmsPort.getText()));
-            mMmsc.setSummary(checkNull(mMmsc.getText()));
-            mMcc.setSummary(checkNull(mMcc.getText()));
-            mMnc.setSummary(checkNull(mMnc.getText()));
-        }
-
-        @Override
-        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-            super.onCreateOptionsMenu(menu, inflater);
-            // If it's a new APN, then cancel will delete the new entry in onPause
-            if (!mNewApn) {
-                menu.add(0, MENU_DELETE, 0, R.string.menu_delete_apn)
-                    .setIcon(R.drawable.ic_delete_small_dark);
-            }
-            menu.add(0, MENU_SAVE, 0, R.string.menu_save_apn)
-                .setIcon(android.R.drawable.ic_menu_save);
-            menu.add(0, MENU_CANCEL, 0, R.string.menu_discard_apn_change)
-                .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
-        }
-
-        @Override
-        public boolean onOptionsItemSelected(MenuItem item) {
-            switch (item.getItemId()) {
-                case MENU_DELETE:
-                    deleteApn();
-                    return true;
-
-                case MENU_SAVE:
-                    if (validateAndSave(false)) {
-                        getActivity().finish();
-                    }
-                    return true;
-
-                case MENU_CANCEL:
-                    getActivity().finish();
-                    return true;
-
-                case android.R.id.home:
-                    getActivity().onBackPressed();
-                    return true;
-            }
-            return super.onOptionsItemSelected(item);
-        }
-
-        @Override
-        public void onSaveInstanceState(Bundle icicle) {
-            super.onSaveInstanceState(icicle);
-            if (validateAndSave(true) && mCursor != null) {
-                icicle.putInt(SAVED_POS, mCursor.getInt(ID_INDEX));
-            }
-        }
-
-        /**
-         * Check the key fields' validity and save if valid.
-         * @param force save even if the fields are not valid, if the app is
-         *        being suspended
-         * @return true if the data was saved
-         */
-        private boolean validateAndSave(boolean force) {
-            final String name = checkNotSet(mName.getText());
-            final String mcc = checkNotSet(mMcc.getText());
-            final String mnc = checkNotSet(mMnc.getText());
-
-            if (getErrorMsg() != null && !force) {
-                final Bundle bundle = new Bundle();
-                bundle.putString(ERROR_MESSAGE_KEY, getErrorMsg());
-                getActivity().showDialog(ERROR_DIALOG_ID, bundle);
-                return false;
-            }
-
-            // Make database changes not on the UI thread
-            new AsyncTask<Void, Void, Void>() {
-                @Override
-                protected Void doInBackground(Void... params) {
-                    ContentValues values = new ContentValues();
-
-                    // Add a placeholder name "Untitled", if the user exits the screen without
-                    // adding a name but entered other information worth keeping.
-                    values.put(Telephony.Carriers.NAME, name.length() < 1 ?
-                            getResources().getString(R.string.untitled_apn) : name);
-                    values.put(Telephony.Carriers.MMSPROXY, checkNotSet(mMmsProxy.getText()));
-                    values.put(Telephony.Carriers.MMSPORT, checkNotSet(mMmsPort.getText()));
-                    values.put(Telephony.Carriers.MMSC, checkNotSet(mMmsc.getText()));
-
-                    values.put(Telephony.Carriers.TYPE, BugleApnSettingsLoader.APN_TYPE_MMS);
-
-                    values.put(Telephony.Carriers.MCC, mcc);
-                    values.put(Telephony.Carriers.MNC, mnc);
-
-                    values.put(Telephony.Carriers.NUMERIC, mcc + mnc);
-
-                    if (mCurMnc != null && mCurMcc != null) {
-                        if (mCurMnc.equals(mnc) && mCurMcc.equals(mcc)) {
-                            values.put(Telephony.Carriers.CURRENT, 1);
-                        }
-                    }
-
-                    if (mNewApn) {
-                        mDatabase.insert(ApnDatabase.APN_TABLE, null, values);
-                    } else {
-                        // update the APN
-                        String selection = Telephony.Carriers._ID + " =?";
-                        String[] selectionArgs = new String[]{ mCurrentId };
-                        int updated = mDatabase.update(ApnDatabase.APN_TABLE, values,
-                                selection, selectionArgs);
-                    }
-                    return null;
-                }
-            }.execute((Void) null);
-
-            return true;
-        }
-
-        private void deleteApn() {
-            // Make database changes not on the UI thread
-            new AsyncTask<Void, Void, Void>() {
-                @Override
-                protected Void doInBackground(Void... params) {
-                    // delete the APN
-                    String where = Telephony.Carriers._ID + " =?";
-                    String[] whereArgs = new String[]{ mCurrentId };
-
-                    mDatabase.delete(ApnDatabase.APN_TABLE, where, whereArgs);
-                    return null;
-                }
-            }.execute((Void) null);
-
-            getActivity().finish();
-        }
-
-        private String checkNull(String value) {
-            if (value == null || value.length() == 0) {
-                return sNotSet;
-            } else {
-                return value;
-            }
-        }
-
-        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
-            Preference pref = findPreference(key);
-            if (pref != null) {
-                pref.setSummary(checkNull(sharedPreferences.getString(key, "")));
-            }
-        }
-
-        private String getErrorMsg() {
-            String errorMsg = null;
-
-            String name = checkNotSet(mName.getText());
-            String mcc = checkNotSet(mMcc.getText());
-            String mnc = checkNotSet(mMnc.getText());
-
-            if (name.length() < 1) {
-                errorMsg = getString(R.string.error_apn_name_empty);
-            } else if (mcc.length() != 3) {
-                errorMsg = getString(R.string.error_mcc_not3);
-            } else if ((mnc.length() & 0xFFFE) != 2) {
-                errorMsg = getString(R.string.error_mnc_not23);
-            }
-
-            return errorMsg;
-        }
-
-        private String checkNotSet(String value) {
-            if (value == null || value.equals(sNotSet)) {
-                return "";
-            } else {
-                return value;
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/appsettings/ApnPreference.java b/src/com/android/messaging/ui/appsettings/ApnPreference.java
deleted file mode 100644
index 64358eb..0000000
--- a/src/com/android/messaging/ui/appsettings/ApnPreference.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.appsettings;
-
-import android.content.Context;
-import android.preference.Preference;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.CompoundButton;
-import android.widget.RadioButton;
-import android.widget.RelativeLayout;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.ui.UIIntents;
-
-/**
- * ApnPreference implements a pref, typically used as a list item, that has a title/summary on
- * the left and a radio button on the right.
- *
- */
-public class ApnPreference extends Preference implements
-        CompoundButton.OnCheckedChangeListener, OnClickListener {
-    static final String TAG = "ApnPreference";
-
-    public ApnPreference(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-    }
-
-    public ApnPreference(Context context, AttributeSet attrs) {
-        this(context, attrs, R.attr.apnPreferenceStyle);
-    }
-
-    public ApnPreference(Context context) {
-        this(context, null);
-    }
-
-    private static String mSelectedKey = null;
-    private static CompoundButton mCurrentChecked = null;
-    private boolean mProtectFromCheckedChange = false;
-    private boolean mSelectable = true;
-    private int mSubId = ParticipantData.DEFAULT_SELF_SUB_ID;
-
-    @Override
-    public View getView(View convertView, ViewGroup parent) {
-        View view = super.getView(convertView, parent);
-
-        View widget = view.findViewById(R.id.apn_radiobutton);
-        if ((widget != null) && widget instanceof RadioButton) {
-            RadioButton rb = (RadioButton) widget;
-            if (mSelectable) {
-                rb.setOnCheckedChangeListener(this);
-
-                boolean isChecked = getKey().equals(mSelectedKey);
-                if (isChecked) {
-                    mCurrentChecked = rb;
-                    mSelectedKey = getKey();
-                }
-
-                mProtectFromCheckedChange = true;
-                rb.setChecked(isChecked);
-                mProtectFromCheckedChange = false;
-            } else {
-                rb.setVisibility(View.GONE);
-            }
-            rb.setContentDescription(getTitle());
-        }
-
-        View textLayout = view.findViewById(R.id.text_layout);
-        if ((textLayout != null) && textLayout instanceof RelativeLayout) {
-            textLayout.setOnClickListener(this);
-        }
-
-        return view;
-    }
-
-    public boolean isChecked() {
-        return getKey().equals(mSelectedKey);
-    }
-
-    public void setChecked() {
-        mSelectedKey = getKey();
-    }
-
-    public void setSubId(final int subId) {
-        mSubId = subId;
-    }
-
-    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-        Log.i(TAG, "ID: " + getKey() + " :" + isChecked);
-        if (mProtectFromCheckedChange) {
-            return;
-        }
-
-        if (isChecked) {
-            if (mCurrentChecked != null) {
-                mCurrentChecked.setChecked(false);
-            }
-            mCurrentChecked = buttonView;
-            mSelectedKey = getKey();
-            callChangeListener(mSelectedKey);
-        } else {
-            mCurrentChecked = null;
-            mSelectedKey = null;
-        }
-        buttonView.setContentDescription(getTitle());
-    }
-
-    public void onClick(android.view.View v) {
-        if ((v != null) && (R.id.text_layout == v.getId())) {
-            Context context = getContext();
-            if (context != null) {
-                context.startActivity(
-                        UIIntents.get().getApnEditorIntent(context, getKey(), mSubId));
-            }
-        }
-    }
-
-    public void setSelectable(boolean selectable) {
-        mSelectable = selectable;
-    }
-
-    public boolean getSelectable() {
-        return mSelectable;
-    }
-}
diff --git a/src/com/android/messaging/ui/appsettings/ApnSettingsActivity.java b/src/com/android/messaging/ui/appsettings/ApnSettingsActivity.java
deleted file mode 100644
index 13f775a..0000000
--- a/src/com/android/messaging/ui/appsettings/ApnSettingsActivity.java
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.appsettings;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Looper;
-import android.os.Message;
-import android.os.UserManager;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
-import android.preference.PreferenceGroup;
-import android.preference.PreferenceScreen;
-import android.provider.Telephony;
-import androidx.core.app.NavUtils;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.ApnDatabase;
-import com.android.messaging.sms.BugleApnSettingsLoader;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-public class ApnSettingsActivity extends BugleActionBarActivity {
-    private static final int DIALOG_RESTORE_DEFAULTAPN = 1001;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-
-        // Display the fragment as the main content.
-        final ApnSettingsFragment fragment = new ApnSettingsFragment();
-        fragment.setSubId(getIntent().getIntExtra(UIIntents.UI_INTENT_EXTRA_SUB_ID,
-                ParticipantData.DEFAULT_SELF_SUB_ID));
-        getFragmentManager().beginTransaction()
-                .replace(android.R.id.content, fragment)
-                .commit();
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-        case android.R.id.home:
-            NavUtils.navigateUpFromSameTask(this);
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    @Override
-    protected Dialog onCreateDialog(int id) {
-        if (id == DIALOG_RESTORE_DEFAULTAPN) {
-            ProgressDialog dialog = new ProgressDialog(this);
-            dialog.setMessage(getResources().getString(R.string.restore_default_apn));
-            dialog.setCancelable(false);
-            return dialog;
-        }
-        return null;
-    }
-
-    public static class ApnSettingsFragment extends PreferenceFragment implements
-            Preference.OnPreferenceChangeListener {
-        public static final String EXTRA_POSITION = "position";
-
-        public static final String APN_ID = "apn_id";
-
-        private static final String[] APN_PROJECTION = {
-            Telephony.Carriers._ID,         // 0
-            Telephony.Carriers.NAME,        // 1
-            Telephony.Carriers.APN,         // 2
-            Telephony.Carriers.TYPE         // 3
-        };
-        private static final int ID_INDEX    = 0;
-        private static final int NAME_INDEX  = 1;
-        private static final int APN_INDEX   = 2;
-        private static final int TYPES_INDEX = 3;
-
-        private static final int MENU_NEW = Menu.FIRST;
-        private static final int MENU_RESTORE = Menu.FIRST + 1;
-
-        private static final int EVENT_RESTORE_DEFAULTAPN_START = 1;
-        private static final int EVENT_RESTORE_DEFAULTAPN_COMPLETE = 2;
-
-        private static boolean mRestoreDefaultApnMode;
-
-        private RestoreApnUiHandler mRestoreApnUiHandler;
-        private RestoreApnProcessHandler mRestoreApnProcessHandler;
-        private HandlerThread mRestoreDefaultApnThread;
-
-        private String mSelectedKey;
-
-        private static final ContentValues sCurrentNullMap;
-        private static final ContentValues sCurrentSetMap;
-
-        private UserManager mUm;
-
-        private boolean mUnavailable;
-        private int mSubId;
-
-        static {
-            sCurrentNullMap = new ContentValues(1);
-            sCurrentNullMap.putNull(Telephony.Carriers.CURRENT);
-
-            sCurrentSetMap = new ContentValues(1);
-            sCurrentSetMap.put(Telephony.Carriers.CURRENT, "2");    // 2 for user-selected APN,
-            // 1 for Bugle-selected APN
-        }
-
-        private SQLiteDatabase mDatabase;
-
-        public void setSubId(final int subId) {
-            mSubId = subId;
-        }
-
-        @Override
-        public void onCreate(Bundle icicle) {
-            super.onCreate(icicle);
-
-            mDatabase = ApnDatabase.getApnDatabase().getWritableDatabase();
-
-            if (OsUtil.isAtLeastL()) {
-                mUm = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
-                if (!mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)) {
-                    setHasOptionsMenu(true);
-                }
-            } else {
-                setHasOptionsMenu(true);
-            }
-        }
-
-        @Override
-        public void onActivityCreated(Bundle savedInstanceState) {
-            super.onActivityCreated(savedInstanceState);
-
-            final ListView lv = (ListView) getView().findViewById(android.R.id.list);
-            TextView empty = (TextView) getView().findViewById(android.R.id.empty);
-            if (empty != null) {
-                empty.setText(R.string.apn_settings_not_available);
-                lv.setEmptyView(empty);
-            }
-
-            if (OsUtil.isAtLeastL() &&
-                    mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)) {
-                mUnavailable = true;
-                setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getActivity()));
-                return;
-            }
-
-            addPreferencesFromResource(R.xml.apn_settings);
-
-            lv.setItemsCanFocus(true);
-        }
-
-        @Override
-        public void onResume() {
-            super.onResume();
-
-            if (mUnavailable) {
-                return;
-            }
-
-            if (!mRestoreDefaultApnMode) {
-                fillList();
-            }
-        }
-
-        @Override
-        public void onPause() {
-            super.onPause();
-
-            if (mUnavailable) {
-                return;
-            }
-        }
-
-        @Override
-        public void onDestroy() {
-            super.onDestroy();
-
-            if (mRestoreDefaultApnThread != null) {
-                mRestoreDefaultApnThread.quit();
-            }
-        }
-
-        private void fillList() {
-            final String mccMnc = PhoneUtils.getMccMncString(PhoneUtils.get(mSubId).getMccMnc());
-
-            new AsyncTask<Void, Void, Cursor>() {
-                @Override
-                protected Cursor doInBackground(Void... params) {
-                    String selection = Telephony.Carriers.NUMERIC + " =?";
-                    String[] selectionArgs = new String[]{ mccMnc };
-                    final Cursor cursor = mDatabase.query(ApnDatabase.APN_TABLE, APN_PROJECTION,
-                            selection, selectionArgs, null, null, null, null);
-                    return cursor;
-                }
-
-                @Override
-                protected void onPostExecute(Cursor cursor) {
-                    if (cursor != null) {
-                        try {
-                            PreferenceGroup apnList = (PreferenceGroup)
-                                    findPreference(getString(R.string.apn_list_pref_key));
-                            apnList.removeAll();
-
-                            mSelectedKey = BugleApnSettingsLoader.getFirstTryApn(mDatabase, mccMnc);
-                            while (cursor.moveToNext()) {
-                                String name = cursor.getString(NAME_INDEX);
-                                String apn = cursor.getString(APN_INDEX);
-                                String key = cursor.getString(ID_INDEX);
-                                String type = cursor.getString(TYPES_INDEX);
-
-                                if (BugleApnSettingsLoader.isValidApnType(type,
-                                        BugleApnSettingsLoader.APN_TYPE_MMS)) {
-                                    ApnPreference pref = new ApnPreference(getActivity());
-                                    pref.setKey(key);
-                                    pref.setTitle(name);
-                                    pref.setSummary(apn);
-                                    pref.setPersistent(false);
-                                    pref.setOnPreferenceChangeListener(ApnSettingsFragment.this);
-                                    pref.setSelectable(true);
-
-                                    // Turn on the radio button for the currently selected APN. If
-                                    // there is no selected APN, don't select an APN.
-                                    if ((mSelectedKey != null && mSelectedKey.equals(key))) {
-                                        pref.setChecked();
-                                    }
-                                    apnList.addPreference(pref);
-                                }
-                            }
-                        } finally {
-                            cursor.close();
-                        }
-                    }
-                }
-            }.execute((Void) null);
-        }
-
-        @Override
-        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-            if (!mUnavailable) {
-                menu.add(0, MENU_NEW, 0,
-                        getResources().getString(R.string.menu_new_apn))
-                        .setIcon(R.drawable.ic_add_white)
-                        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
-                menu.add(0, MENU_RESTORE, 0,
-                        getResources().getString(R.string.menu_restore_default_apn))
-                        .setIcon(android.R.drawable.ic_menu_upload);
-            }
-
-            super.onCreateOptionsMenu(menu, inflater);
-        }
-
-        @Override
-        public boolean onOptionsItemSelected(MenuItem item) {
-            switch (item.getItemId()) {
-                case MENU_NEW:
-                    addNewApn();
-                    return true;
-
-                case MENU_RESTORE:
-                    restoreDefaultApn();
-                    return true;
-            }
-            return super.onOptionsItemSelected(item);
-        }
-
-        private void addNewApn() {
-            startActivity(UIIntents.get().getApnEditorIntent(getActivity(), null, mSubId));
-        }
-
-        @Override
-        public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
-                Preference preference) {
-            startActivity(
-                    UIIntents.get().getApnEditorIntent(getActivity(), preference.getKey(), mSubId));
-            return true;
-        }
-
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object newValue) {
-            if (newValue instanceof String) {
-                setSelectedApnKey((String) newValue);
-            }
-
-            return true;
-        }
-
-        // current=2 means user selected APN
-        private static final String UPDATE_SELECTION = Telephony.Carriers.CURRENT + " =?";
-        private static final String[] UPDATE_SELECTION_ARGS = new String[] { "2" };
-        private void setSelectedApnKey(final String key) {
-            mSelectedKey = key;
-
-            // Make database changes not on the UI thread
-            new AsyncTask<Void, Void, Void>() {
-                @Override
-                protected Void doInBackground(Void... params) {
-                    // null out the previous "current=2" APN
-                    mDatabase.update(ApnDatabase.APN_TABLE, sCurrentNullMap,
-                            UPDATE_SELECTION, UPDATE_SELECTION_ARGS);
-
-                    // set the new "current" APN (2)
-                    String selection = Telephony.Carriers._ID + " =?";
-                    String[] selectionArgs = new String[]{ key };
-
-                    mDatabase.update(ApnDatabase.APN_TABLE, sCurrentSetMap,
-                            selection, selectionArgs);
-                    return null;
-                }
-            }.execute((Void) null);
-        }
-
-        private boolean restoreDefaultApn() {
-            getActivity().showDialog(DIALOG_RESTORE_DEFAULTAPN);
-            mRestoreDefaultApnMode = true;
-
-            if (mRestoreApnUiHandler == null) {
-                mRestoreApnUiHandler = new RestoreApnUiHandler();
-            }
-
-            if (mRestoreApnProcessHandler == null ||
-                    mRestoreDefaultApnThread == null) {
-                mRestoreDefaultApnThread = new HandlerThread(
-                        "Restore default APN Handler: Process Thread");
-                mRestoreDefaultApnThread.start();
-                mRestoreApnProcessHandler = new RestoreApnProcessHandler(
-                        mRestoreDefaultApnThread.getLooper(), mRestoreApnUiHandler);
-            }
-
-            mRestoreApnProcessHandler.sendEmptyMessage(EVENT_RESTORE_DEFAULTAPN_START);
-            return true;
-        }
-
-        private class RestoreApnUiHandler extends Handler {
-            @Override
-            public void handleMessage(Message msg) {
-                switch (msg.what) {
-                    case EVENT_RESTORE_DEFAULTAPN_COMPLETE:
-                        fillList();
-                        getPreferenceScreen().setEnabled(true);
-                        mRestoreDefaultApnMode = false;
-                        final Activity activity = getActivity();
-                        activity.dismissDialog(DIALOG_RESTORE_DEFAULTAPN);
-                        Toast.makeText(activity, getResources().getString(
-                                        R.string.restore_default_apn_completed), Toast.LENGTH_LONG)
-                                            .show();
-                        break;
-                }
-            }
-        }
-
-        private class RestoreApnProcessHandler extends Handler {
-            private Handler mCachedRestoreApnUiHandler;
-
-            public RestoreApnProcessHandler(Looper looper, Handler restoreApnUiHandler) {
-                super(looper);
-                this.mCachedRestoreApnUiHandler = restoreApnUiHandler;
-            }
-
-            @Override
-            public void handleMessage(Message msg) {
-                switch (msg.what) {
-                    case EVENT_RESTORE_DEFAULTAPN_START:
-                        ApnDatabase.forceBuildAndLoadApnTables();
-                        mCachedRestoreApnUiHandler.sendEmptyMessage(
-                                EVENT_RESTORE_DEFAULTAPN_COMPLETE);
-                        break;
-                }
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java b/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java
deleted file mode 100644
index d7abe85..0000000
--- a/src/com/android/messaging/ui/appsettings/ApplicationSettingsActivity.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.appsettings;
-
-import android.app.FragmentTransaction;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.media.Ringtone;
-import android.media.RingtoneManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
-import android.preference.PreferenceScreen;
-import android.preference.RingtonePreference;
-import android.preference.TwoStatePreference;
-import android.provider.Settings;
-import androidx.core.app.NavUtils;
-import android.text.TextUtils;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.LicenseActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-public class ApplicationSettingsActivity extends BugleActionBarActivity {
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-        final boolean topLevel = getIntent().getBooleanExtra(
-                UIIntents.UI_INTENT_EXTRA_TOP_LEVEL_SETTINGS, false);
-        if (topLevel) {
-            getSupportActionBar().setTitle(getString(R.string.settings_activity_title));
-        }
-
-        FragmentTransaction ft = getFragmentManager().beginTransaction();
-        ft.replace(android.R.id.content, new ApplicationSettingsFragment());
-        ft.commit();
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        if (super.onCreateOptionsMenu(menu)) {
-            return true;
-        }
-        getMenuInflater().inflate(R.menu.settings_menu, menu);
-        return true;
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-        case android.R.id.home:
-            NavUtils.navigateUpFromSameTask(this);
-            return true;
-        case R.id.action_license:
-            final Intent intent = new Intent(this, LicenseActivity.class);
-            startActivity(intent);
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    public static class ApplicationSettingsFragment extends PreferenceFragment implements
-            OnSharedPreferenceChangeListener {
-
-        private String mNotificationsEnabledPreferenceKey;
-        private TwoStatePreference mNotificationsEnabledPreference;
-        private String mRingtonePreferenceKey;
-        private RingtonePreference mRingtonePreference;
-        private Preference mVibratePreference;
-        private String mSmsDisabledPrefKey;
-        private Preference mSmsDisabledPreference;
-        private String mSmsEnabledPrefKey;
-        private Preference mSmsEnabledPreference;
-        private boolean mIsSmsPreferenceClicked;
-
-        public ApplicationSettingsFragment() {
-            // Required empty constructor
-        }
-
-        @Override
-        public void onCreate(final Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-
-            getPreferenceManager().setSharedPreferencesName(BuglePrefs.SHARED_PREFERENCES_NAME);
-            addPreferencesFromResource(R.xml.preferences_application);
-
-            mNotificationsEnabledPreferenceKey =
-                    getString(R.string.notifications_enabled_pref_key);
-            mNotificationsEnabledPreference = (TwoStatePreference) findPreference(
-                    mNotificationsEnabledPreferenceKey);
-            mRingtonePreferenceKey = getString(R.string.notification_sound_pref_key);
-            mRingtonePreference = (RingtonePreference) findPreference(mRingtonePreferenceKey);
-            mVibratePreference = findPreference(
-                    getString(R.string.notification_vibration_pref_key));
-            mSmsDisabledPrefKey = getString(R.string.sms_disabled_pref_key);
-            mSmsDisabledPreference = findPreference(mSmsDisabledPrefKey);
-            mSmsEnabledPrefKey = getString(R.string.sms_enabled_pref_key);
-            mSmsEnabledPreference = findPreference(mSmsEnabledPrefKey);
-            mIsSmsPreferenceClicked = false;
-
-            final SharedPreferences prefs = getPreferenceScreen().getSharedPreferences();
-            updateSoundSummary(prefs);
-
-            if (!DebugUtils.isDebugEnabled()) {
-                final Preference debugCategory = findPreference(getString(
-                        R.string.debug_pref_key));
-                getPreferenceScreen().removePreference(debugCategory);
-            }
-
-            final PreferenceScreen advancedScreen = (PreferenceScreen) findPreference(
-                    getString(R.string.advanced_pref_key));
-            final boolean topLevel = getActivity().getIntent().getBooleanExtra(
-                    UIIntents.UI_INTENT_EXTRA_TOP_LEVEL_SETTINGS, false);
-            if (topLevel) {
-                advancedScreen.setIntent(UIIntents.get()
-                        .getAdvancedSettingsIntent(getPreferenceScreen().getContext()));
-            } else {
-                // Hide the Advanced settings screen if this is not top-level; these are shown at
-                // the parent SettingsActivity.
-                getPreferenceScreen().removePreference(advancedScreen);
-            }
-        }
-
-        @Override
-        public boolean onPreferenceTreeClick (PreferenceScreen preferenceScreen,
-                Preference preference) {
-            if (preference.getKey() ==  mSmsDisabledPrefKey ||
-                    preference.getKey() == mSmsEnabledPrefKey) {
-                mIsSmsPreferenceClicked = true;
-            }
-            return super.onPreferenceTreeClick(preferenceScreen, preference);
-        }
-
-        private void updateSoundSummary(final SharedPreferences sharedPreferences) {
-            // The silent ringtone just returns an empty string
-            String ringtoneName = mRingtonePreference.getContext().getString(
-                    R.string.silent_ringtone);
-
-            String ringtoneString = sharedPreferences.getString(mRingtonePreferenceKey, null);
-
-            // Bootstrap the default setting in the preferences so that we have a valid selection
-            // in the dialog the first time that the user opens it.
-            if (ringtoneString == null) {
-                ringtoneString = Settings.System.DEFAULT_NOTIFICATION_URI.toString();
-                final SharedPreferences.Editor editor = sharedPreferences.edit();
-                editor.putString(mRingtonePreferenceKey, ringtoneString);
-                editor.apply();
-            }
-
-            if (!TextUtils.isEmpty(ringtoneString)) {
-                final Uri ringtoneUri = Uri.parse(ringtoneString);
-                final Ringtone tone = RingtoneManager.getRingtone(mRingtonePreference.getContext(),
-                        ringtoneUri);
-
-                if (tone != null) {
-                    ringtoneName = tone.getTitle(mRingtonePreference.getContext());
-                }
-            }
-
-            mRingtonePreference.setSummary(ringtoneName);
-        }
-
-        private void updateSmsEnabledPreferences() {
-            if (!OsUtil.isAtLeastKLP()) {
-                getPreferenceScreen().removePreference(mSmsDisabledPreference);
-                getPreferenceScreen().removePreference(mSmsEnabledPreference);
-            } else {
-                final String defaultSmsAppLabel = getString(R.string.default_sms_app,
-                        PhoneUtils.getDefault().getDefaultSmsAppLabel());
-                boolean isSmsEnabledBeforeState;
-                boolean isSmsEnabledCurrentState;
-                if (PhoneUtils.getDefault().isDefaultSmsApp()) {
-                    if (getPreferenceScreen().findPreference(mSmsEnabledPrefKey) == null) {
-                        getPreferenceScreen().addPreference(mSmsEnabledPreference);
-                        isSmsEnabledBeforeState = false;
-                    } else {
-                        isSmsEnabledBeforeState = true;
-                    }
-                    isSmsEnabledCurrentState = true;
-                    getPreferenceScreen().removePreference(mSmsDisabledPreference);
-                    mSmsEnabledPreference.setSummary(defaultSmsAppLabel);
-                } else {
-                    if (getPreferenceScreen().findPreference(mSmsDisabledPrefKey) == null) {
-                        getPreferenceScreen().addPreference(mSmsDisabledPreference);
-                        isSmsEnabledBeforeState = true;
-                    } else {
-                        isSmsEnabledBeforeState = false;
-                    }
-                    isSmsEnabledCurrentState = false;
-                    getPreferenceScreen().removePreference(mSmsEnabledPreference);
-                    mSmsDisabledPreference.setSummary(defaultSmsAppLabel);
-                }
-                updateNotificationsPreferences();
-            }
-            mIsSmsPreferenceClicked = false;
-        }
-
-        private void updateNotificationsPreferences() {
-            final boolean canNotify = !OsUtil.isAtLeastKLP()
-                    || PhoneUtils.getDefault().isDefaultSmsApp();
-            mNotificationsEnabledPreference.setEnabled(canNotify);
-        }
-
-        @Override
-        public void onStart() {
-            super.onStart();
-            // We do this on start rather than on resume because the sound picker is in a
-            // separate activity.
-            getPreferenceScreen().getSharedPreferences()
-                    .registerOnSharedPreferenceChangeListener(this);
-        }
-
-        @Override
-        public void onResume() {
-            super.onResume();
-            updateSmsEnabledPreferences();
-            updateNotificationsPreferences();
-        }
-
-        @Override
-        public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences,
-                final String key) {
-            if (key.equals(mNotificationsEnabledPreferenceKey)) {
-                updateNotificationsPreferences();
-            } else if (key.equals(mRingtonePreferenceKey)) {
-                updateSoundSummary(sharedPreferences);
-            }
-        }
-
-        @Override
-        public void onStop() {
-            super.onStop();
-            getPreferenceScreen().getSharedPreferences()
-                    .unregisterOnSharedPreferenceChangeListener(this);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/appsettings/GroupMmsSettingDialog.java b/src/com/android/messaging/ui/appsettings/GroupMmsSettingDialog.java
deleted file mode 100644
index 739d2dc..0000000
--- a/src/com/android/messaging/ui/appsettings/GroupMmsSettingDialog.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.appsettings;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.RadioButton;
-
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BuglePrefs;
-
-/**
- * Displays an on/off switch for group MMS setting for a given subscription.
- */
-public class GroupMmsSettingDialog {
-    private final Context mContext;
-    private final int mSubId;
-    private AlertDialog mDialog;
-
-    /**
-     * Shows a new group MMS setting dialog.
-     */
-    public static void showDialog(final Context context, final int subId) {
-        new GroupMmsSettingDialog(context, subId).show();
-    }
-
-    private GroupMmsSettingDialog(final Context context, final int subId) {
-        mContext = context;
-        mSubId = subId;
-    }
-
-    private void show() {
-        Assert.isNull(mDialog);
-        mDialog = new AlertDialog.Builder(mContext)
-                .setView(createView())
-                .setTitle(R.string.group_mms_pref_title)
-                .setNegativeButton(android.R.string.cancel, null)
-                .show();
-    }
-
-    private void changeGroupMmsSettings(final boolean enable) {
-        Assert.notNull(mDialog);
-        BuglePrefs.getSubscriptionPrefs(mSubId).putBoolean(
-                mContext.getString(R.string.group_mms_pref_key), enable);
-        mDialog.dismiss();
-    }
-
-    private View createView() {
-        final LayoutInflater inflater = (LayoutInflater) mContext
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        final View rootView = inflater.inflate(R.layout.group_mms_setting_dialog, null, false);
-        final RadioButton disableButton = (RadioButton)
-                rootView.findViewById(R.id.disable_group_mms_button);
-        final RadioButton enableButton = (RadioButton)
-                rootView.findViewById(R.id.enable_group_mms_button);
-        disableButton.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                changeGroupMmsSettings(false);
-            }
-        });
-        enableButton.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                changeGroupMmsSettings(true);
-            }
-        });
-        final boolean mmsEnabled = BuglePrefs.getSubscriptionPrefs(mSubId).getBoolean(
-                mContext.getString(R.string.group_mms_pref_key),
-                mContext.getResources().getBoolean(R.bool.group_mms_pref_default));
-        enableButton.setChecked(mmsEnabled);
-        disableButton.setChecked(!mmsEnabled);
-        return rootView;
-    }
-}
diff --git a/src/com/android/messaging/ui/appsettings/PerSubscriptionSettingsActivity.java b/src/com/android/messaging/ui/appsettings/PerSubscriptionSettingsActivity.java
deleted file mode 100644
index c2fd473..0000000
--- a/src/com/android/messaging/ui/appsettings/PerSubscriptionSettingsActivity.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.appsettings;
-
-import android.app.FragmentTransaction;
-import android.content.ActivityNotFoundException;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceFragment;
-import android.preference.PreferenceScreen;
-import android.text.TextUtils;
-import android.view.MenuItem;
-
-import androidx.appcompat.mms.MmsManager;
-import androidx.core.app.NavUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.ParticipantRefresh;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.ApnDatabase;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.PhoneUtils;
-
-public class PerSubscriptionSettingsActivity extends BugleActionBarActivity {
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-        final String title = getIntent().getStringExtra(
-                UIIntents.UI_INTENT_EXTRA_PER_SUBSCRIPTION_SETTING_TITLE);
-        if (!TextUtils.isEmpty(title)) {
-            getSupportActionBar().setTitle(title);
-        } else {
-            // This will fall back to the default title, i.e. "Messaging settings," so No-op.
-        }
-
-        final FragmentTransaction ft = getFragmentManager().beginTransaction();
-        final PerSubscriptionSettingsFragment fragment = new PerSubscriptionSettingsFragment();
-        ft.replace(android.R.id.content, fragment);
-        ft.commit();
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-        case android.R.id.home:
-            NavUtils.navigateUpFromSameTask(this);
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    public static class PerSubscriptionSettingsFragment extends PreferenceFragment
-            implements OnSharedPreferenceChangeListener {
-        private PhoneNumberPreference mPhoneNumberPreference;
-        private Preference mGroupMmsPreference;
-        private String mGroupMmsPrefKey;
-        private String mPhoneNumberKey;
-        private int mSubId;
-
-        public PerSubscriptionSettingsFragment() {
-            // Required empty constructor
-        }
-
-        @Override
-        public void onCreate(final Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-
-            // Get sub id from launch intent
-            final Intent intent = getActivity().getIntent();
-            Assert.notNull(intent);
-            mSubId = (intent != null) ? intent.getIntExtra(UIIntents.UI_INTENT_EXTRA_SUB_ID,
-                    ParticipantData.DEFAULT_SELF_SUB_ID) : ParticipantData.DEFAULT_SELF_SUB_ID;
-
-            final BuglePrefs subPrefs = Factory.get().getSubscriptionPrefs(mSubId);
-            getPreferenceManager().setSharedPreferencesName(subPrefs.getSharedPreferencesName());
-            addPreferencesFromResource(R.xml.preferences_per_subscription);
-
-            mPhoneNumberKey = getString(R.string.mms_phone_number_pref_key);
-            mPhoneNumberPreference = (PhoneNumberPreference) findPreference(mPhoneNumberKey);
-            final PreferenceCategory advancedCategory = (PreferenceCategory)
-                    findPreference(getString(R.string.advanced_category_pref_key));
-            final PreferenceCategory mmsCategory = (PreferenceCategory)
-                    findPreference(getString(R.string.mms_messaging_category_pref_key));
-
-            mPhoneNumberPreference.setDefaultPhoneNumber(
-                    PhoneUtils.get(mSubId).getCanonicalForSelf(false/*allowOverride*/), mSubId);
-
-            mGroupMmsPrefKey = getString(R.string.group_mms_pref_key);
-            mGroupMmsPreference = findPreference(mGroupMmsPrefKey);
-            if (!MmsConfig.get(mSubId).getGroupMmsEnabled()) {
-                // Always show group messaging setting even if the SIM has no number
-                // If broadcast sms is selected, the SIM number is not needed
-                // If group mms is selected, the phone number dialog will popup when message
-                // is being sent, making sure we will have a self number for group mms.
-                mmsCategory.removePreference(mGroupMmsPreference);
-            } else {
-                mGroupMmsPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
-                    @Override
-                    public boolean onPreferenceClick(Preference pref) {
-                        GroupMmsSettingDialog.showDialog(getActivity(), mSubId);
-                        return true;
-                    }
-                });
-                updateGroupMmsPrefSummary();
-            }
-
-            if (!MmsConfig.get(mSubId).getSMSDeliveryReportsEnabled()) {
-                final Preference deliveryReportsPref = findPreference(
-                        getString(R.string.delivery_reports_pref_key));
-                advancedCategory.removePreference(deliveryReportsPref);
-            }
-            final Preference wirelessAlertPref = findPreference(getString(
-                    R.string.wireless_alerts_key));
-            if (!isCellBroadcastAppLinkEnabled()) {
-                advancedCategory.removePreference(wirelessAlertPref);
-            } else {
-                wirelessAlertPref.setOnPreferenceClickListener(
-                        new Preference.OnPreferenceClickListener() {
-                            @Override
-                            public boolean onPreferenceClick(final Preference preference) {
-                                try {
-                                    startActivity(UIIntents.get().getWirelessAlertsIntent());
-                                } catch (final ActivityNotFoundException e) {
-                                    // Handle so we shouldn't crash if the wireless alerts
-                                    // implementation is broken.
-                                    LogUtil.e(LogUtil.BUGLE_TAG,
-                                            "Failed to launch wireless alerts activity", e);
-                                }
-                                return true;
-                            }
-                        });
-            }
-
-            // Access Point Names (APNs)
-            final PreferenceScreen apnsScreen =
-                    (PreferenceScreen) findPreference(getString(R.string.sms_apns_key));
-
-            if (!MmsManager.shouldUseLegacyMms()
-                    || (MmsUtils.useSystemApnTable() && !ApnDatabase.doesDatabaseExist())) {
-                // 1) Remove the ability to edit the local APN prefs if it doesn't use legacy APIs.
-                // 2) Don't remove the ability to edit the local APN prefs if this device lets us
-                // access the system APN, but we can't find the MCC/MNC in the APN table and we
-                // created the local APN table in case the MCC/MNC was in there. In other words,
-                // if the local APN table exists, let the user edit it.
-                advancedCategory.removePreference((Preference) apnsScreen);
-            } else {
-                apnsScreen.setIntent(UIIntents.get()
-                        .getApnSettingsIntent(getPreferenceScreen().getContext(), mSubId));
-            }
-
-            // We want to disable preferences if we are not the default app, but we do all of the
-            // above first so that the user sees the correct information on the screen
-            if (!PhoneUtils.getDefault().isDefaultSmsApp()) {
-                mGroupMmsPreference.setEnabled(false);
-                final Preference autoRetrieveMmsPreference =
-                        findPreference(getString(R.string.auto_retrieve_mms_pref_key));
-                autoRetrieveMmsPreference.setEnabled(false);
-                final Preference deliveryReportsPreference =
-                        findPreference(getString(R.string.delivery_reports_pref_key));
-                if (deliveryReportsPreference != null) {
-                    deliveryReportsPreference.setEnabled(false);
-                }
-            }
-
-            if (advancedCategory.getPreferenceCount() == 0) {
-                getPreferenceScreen().removePreference(advancedCategory);
-            }
-        }
-
-        private boolean isCellBroadcastAppLinkEnabled() {
-            if (!MmsConfig.get(mSubId).getShowCellBroadcast()) {
-                return false;
-            }
-            try {
-                final PackageManager pm = getActivity().getPackageManager();
-                return pm.getApplicationEnabledSetting(UIIntents.CMAS_COMPONENT)
-                        != PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
-            } catch (final IllegalArgumentException ignored) {
-                // CMAS app not installed.
-            }
-            return false;
-        }
-
-        private void updateGroupMmsPrefSummary() {
-            final boolean groupMmsEnabled = getPreferenceScreen().getSharedPreferences().getBoolean(
-                    mGroupMmsPrefKey, getResources().getBoolean(R.bool.group_mms_pref_default));
-            mGroupMmsPreference.setSummary(groupMmsEnabled ?
-                    R.string.enable_group_mms : R.string.disable_group_mms);
-        }
-
-        @Override
-        public void onResume() {
-            super.onResume();
-            getPreferenceScreen().getSharedPreferences()
-                    .registerOnSharedPreferenceChangeListener(this);
-        }
-
-        @Override
-        public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences,
-                final String key) {
-            if (key.equals(mGroupMmsPrefKey)) {
-                updateGroupMmsPrefSummary();
-            } else if (key.equals(mPhoneNumberKey)) {
-                // Save the changed phone number in preferences specific to the sub id
-                final String newPhoneNumber = mPhoneNumberPreference.getText();
-                final BuglePrefs subPrefs = BuglePrefs.getSubscriptionPrefs(mSubId);
-                if (TextUtils.isEmpty(newPhoneNumber)) {
-                    subPrefs.remove(mPhoneNumberKey);
-                } else {
-                    subPrefs.putString(getString(R.string.mms_phone_number_pref_key),
-                            newPhoneNumber);
-                }
-                // Update the self participants so the new phone number will be reflected
-                // everywhere in the UI.
-                ParticipantRefresh.refreshSelfParticipants();
-            }
-        }
-
-        @Override
-        public void onPause() {
-            super.onPause();
-            getPreferenceScreen().getSharedPreferences()
-                    .unregisterOnSharedPreferenceChangeListener(this);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/appsettings/PhoneNumberPreference.java b/src/com/android/messaging/ui/appsettings/PhoneNumberPreference.java
deleted file mode 100644
index 42ef606..0000000
--- a/src/com/android/messaging/ui/appsettings/PhoneNumberPreference.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.appsettings;
-
-import android.content.Context;
-import android.preference.EditTextPreference;
-import androidx.core.text.BidiFormatter;
-import androidx.core.text.TextDirectionHeuristicsCompat;
-import android.text.InputType;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.View;
-
-import com.android.messaging.R;
-import com.android.messaging.util.PhoneUtils;
-
-/**
- * Preference that displays a phone number and allows editing via a dialog.
- * <p>
- * A default number can be assigned, which is shown in the preference view and
- * used to populate the dialog editor when the preference value is not set. If
- * the user sets the preference to a number equivalent to the default, the
- * underlying preference is cleared.
- */
-public class PhoneNumberPreference extends EditTextPreference {
-
-    private String mDefaultPhoneNumber;
-    private int mSubId;
-
-    public PhoneNumberPreference(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mDefaultPhoneNumber = "";
-    }
-
-    public void setDefaultPhoneNumber(final String phoneNumber, final int subscriptionId) {
-        mDefaultPhoneNumber = phoneNumber;
-        mSubId = subscriptionId;
-    }
-
-    @Override
-    protected void onBindView(final View view) {
-        // Show the preference value if it's set, or the default number if not.
-        // If we don't have a default, fall back to a static string (e.g. Unknown).
-        String value = getText();
-        if (TextUtils.isEmpty(value)) {
-          value = mDefaultPhoneNumber;
-        }
-        final String displayValue = (!TextUtils.isEmpty(value))
-                ? PhoneUtils.get(mSubId).formatForDisplay(value)
-                : getContext().getString(R.string.unknown_phone_number_pref_display_value);
-        final BidiFormatter bidiFormatter = BidiFormatter.getInstance();
-        final String phoneNumber = bidiFormatter.unicodeWrap
-                        (displayValue, TextDirectionHeuristicsCompat.LTR);
-        // Set the value as the summary and let the superclass populate the views
-        setSummary(phoneNumber);
-        super.onBindView(view);
-    }
-
-    @Override
-    protected void onBindDialogView(final View view) {
-        super.onBindDialogView(view);
-
-        final String value = getText();
-
-        // If the preference is empty, populate the EditText with the default number instead.
-        if (TextUtils.isEmpty(value) && !TextUtils.isEmpty(mDefaultPhoneNumber)) {
-            final BidiFormatter bidiFormatter = BidiFormatter.getInstance();
-            final String phoneNumber = bidiFormatter.unicodeWrap
-                (PhoneUtils.get(mSubId).getCanonicalBySystemLocale(mDefaultPhoneNumber),
-                            TextDirectionHeuristicsCompat.LTR);
-            getEditText().setText(phoneNumber);
-        }
-        getEditText().setInputType(InputType.TYPE_CLASS_PHONE);
-    }
-
-    @Override
-    protected void onDialogClosed(final boolean positiveResult) {
-        if (positiveResult && mDefaultPhoneNumber != null) {
-            final String value = getEditText().getText().toString();
-            final PhoneUtils phoneUtils = PhoneUtils.get(mSubId);
-            final String phoneNumber = phoneUtils.getCanonicalBySystemLocale(value);
-            final String defaultPhoneNumber = phoneUtils.getCanonicalBySystemLocale(
-                    mDefaultPhoneNumber);
-
-            // If the new value is the default, clear the preference.
-            if (phoneNumber.equals(defaultPhoneNumber)) {
-                setText("");
-                return;
-            }
-        }
-        super.onDialogClosed(positiveResult);
-    }
-
-    @Override
-    public void setText(final String text) {
-        super.setText(text);
-
-        // EditTextPreference doesn't show the value on the preference view, but we do.
-        // We thus need to force a rebind of the view when a new value is set.
-        notifyChanged();
-    }
-}
diff --git a/src/com/android/messaging/ui/appsettings/SettingsActivity.java b/src/com/android/messaging/ui/appsettings/SettingsActivity.java
deleted file mode 100644
index dc16d0a..0000000
--- a/src/com/android/messaging/ui/appsettings/SettingsActivity.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.appsettings;
-
-import android.app.Fragment;
-import android.content.Context;
-import android.os.Bundle;
-import androidx.core.app.NavUtils;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.SettingsData;
-import com.android.messaging.datamodel.data.SettingsData.SettingsDataListener;
-import com.android.messaging.datamodel.data.SettingsData.SettingsItem;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.PhoneUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Shows the "primary" settings activity that contains two parts, one for application-wide settings
- * (dubbed "General settings"), and one or more for per-subscription settings (dubbed "Messaging
- * settings" for single-SIM, and the actual SIM name for multi-SIM). Clicking on either item
- * (e.g. "General settings") will open the detail settings activity (ApplicationSettingsActivity
- * in this case).
- */
-public class SettingsActivity extends BugleActionBarActivity {
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-
-        // Directly open the detailed settings page as the top-level settings activity if this is
-        // not a multi-SIM device.
-        if (PhoneUtils.getDefault().getActiveSubscriptionCount() <= 1) {
-            UIIntents.get().launchApplicationSettingsActivity(this, true /* topLevel */);
-            finish();
-        } else {
-            getFragmentManager().beginTransaction()
-                    .replace(android.R.id.content, new SettingsFragment())
-                    .commit();
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-        case android.R.id.home:
-            NavUtils.navigateUpFromSameTask(this);
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    public static class SettingsFragment extends Fragment implements SettingsDataListener {
-        private ListView mListView;
-        private SettingsListAdapter mAdapter;
-        private final Binding<SettingsData> mBinding = BindingBase.createBinding(this);
-
-        @Override
-        public void onCreate(final Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-            mBinding.bind(DataModel.get().createSettingsData(getActivity(), this));
-            mBinding.getData().init(getLoaderManager(), mBinding);
-        }
-
-        @Override
-        public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
-                final Bundle savedInstanceState) {
-            final View view = inflater.inflate(R.layout.settings_fragment, container, false);
-            mListView = (ListView) view.findViewById(android.R.id.list);
-            mAdapter = new SettingsListAdapter(getActivity());
-            mListView.setAdapter(mAdapter);
-            return view;
-        }
-
-        @Override
-        public void onDestroy() {
-            super.onDestroy();
-            mBinding.unbind();
-        }
-
-        @Override
-        public void onSelfParticipantDataLoaded(SettingsData data) {
-            mBinding.ensureBound(data);
-            mAdapter.setSettingsItems(data.getSettingsItems());
-        }
-
-        /**
-         * An adapter that displays a list of SettingsItem.
-         */
-        private class SettingsListAdapter extends ArrayAdapter<SettingsItem> {
-            public SettingsListAdapter(final Context context) {
-                super(context, R.layout.settings_item_view, new ArrayList<SettingsItem>());
-            }
-
-            public void setSettingsItems(final List<SettingsItem> newList) {
-                clear();
-                addAll(newList);
-                notifyDataSetChanged();
-            }
-
-            @Override
-            public View getView(final int position, final View convertView,
-                    final ViewGroup parent) {
-                View itemView;
-                if (convertView != null) {
-                    itemView = convertView;
-                } else {
-                    final LayoutInflater inflater = (LayoutInflater) getContext()
-                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-                    itemView = inflater.inflate(
-                            R.layout.settings_item_view, parent, false);
-                }
-                final SettingsItem item = getItem(position);
-                final TextView titleTextView = (TextView) itemView.findViewById(R.id.title);
-                final TextView subtitleTextView = (TextView) itemView.findViewById(R.id.subtitle);
-                final String summaryText = item.getDisplayDetail();
-                titleTextView.setText(item.getDisplayName());
-                if (!TextUtils.isEmpty(summaryText)) {
-                    subtitleTextView.setText(summaryText);
-                    subtitleTextView.setVisibility(View.VISIBLE);
-                } else {
-                    subtitleTextView.setVisibility(View.GONE);
-                }
-                itemView.setOnClickListener(new OnClickListener() {
-                    @Override
-                    public void onClick(View view) {
-                        switch (item.getType()) {
-                            case SettingsItem.TYPE_GENERAL_SETTINGS:
-                                UIIntents.get().launchApplicationSettingsActivity(getActivity(),
-                                        false /* topLevel */);
-                                break;
-
-                            case SettingsItem.TYPE_PER_SUBSCRIPTION_SETTINGS:
-                                UIIntents.get().launchPerSubscriptionSettingsActivity(getActivity(),
-                                        item.getSubId(), item.getActivityTitle());
-                                break;
-
-                            default:
-                                Assert.fail("unrecognized setting type!");
-                                break;
-                        }
-                    }
-                });
-                return itemView;
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserActivity.java b/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserActivity.java
deleted file mode 100644
index a540597..0000000
--- a/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserActivity.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.attachmentchooser;
-
-import android.app.Fragment;
-import android.os.Bundle;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.attachmentchooser.AttachmentChooserFragment.AttachmentChooserFragmentHost;
-import com.android.messaging.util.Assert;
-
-public class AttachmentChooserActivity extends BugleActionBarActivity implements
-        AttachmentChooserFragmentHost {
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.attachment_chooser_activity);
-        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
-    }
-
-    @Override
-    public void onAttachFragment(final Fragment fragment) {
-        if (fragment instanceof AttachmentChooserFragment) {
-            final String conversationId =
-                    getIntent().getStringExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID);
-            Assert.notNull(conversationId);
-            final AttachmentChooserFragment chooserFragment =
-                    (AttachmentChooserFragment) fragment;
-            chooserFragment.setConversationId(conversationId);
-            chooserFragment.setHost(this);
-        }
-    }
-
-    @Override
-    public void onConfirmSelection() {
-        setResult(RESULT_OK);
-        finish();
-    }
-}
diff --git a/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragment.java b/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragment.java
deleted file mode 100644
index 75ea56d..0000000
--- a/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragment.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.attachmentchooser;
-
-import android.app.Fragment;
-import android.content.Context;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageDataListener;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.attachmentchooser.AttachmentGridView.AttachmentGridHost;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class AttachmentChooserFragment extends Fragment implements DraftMessageDataListener,
-        AttachmentGridHost {
-    public interface AttachmentChooserFragmentHost {
-        void onConfirmSelection();
-    }
-
-    private AttachmentGridView mAttachmentGridView;
-    private AttachmentGridAdapter mAdapter;
-    private AttachmentChooserFragmentHost mHost;
-
-    @VisibleForTesting
-    Binding<DraftMessageData> mBinding = BindingBase.createBinding(this);
-
-    @Override
-    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
-            final Bundle savedInstanceState) {
-        final View view = inflater.inflate(R.layout.attachment_chooser_fragment, container, false);
-        mAttachmentGridView = (AttachmentGridView) view.findViewById(R.id.grid);
-        mAdapter = new AttachmentGridAdapter(getActivity());
-        mAttachmentGridView.setAdapter(mAdapter);
-        mAttachmentGridView.setHost(this);
-        setHasOptionsMenu(true);
-        return view;
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        mBinding.unbind();
-    }
-
-    @Override
-    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        super.onCreateOptionsMenu(menu, inflater);
-        inflater.inflate(R.menu.attachment_chooser_menu, menu);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.action_confirm_selection:
-                confirmSelection();
-                return true;
-
-            default:
-                return super.onOptionsItemSelected(item);
-        }
-    }
-
-    @VisibleForTesting
-    void confirmSelection() {
-        if (mBinding.isBound()) {
-            mBinding.getData().removeExistingAttachments(
-                    mAttachmentGridView.getUnselectedAttachments());
-            mBinding.getData().saveToStorage(mBinding);
-            mHost.onConfirmSelection();
-        }
-    }
-
-    public void setConversationId(final String conversationId) {
-        mBinding.bind(DataModel.get().createDraftMessageData(conversationId));
-        mBinding.getData().addListener(this);
-        mBinding.getData().loadFromStorage(mBinding, null, false);
-    }
-
-    public void setHost(final AttachmentChooserFragmentHost host) {
-        mHost = host;
-    }
-
-    @Override
-    public void onDraftChanged(final DraftMessageData data, final int changeFlags) {
-        mBinding.ensureBound(data);
-        if ((changeFlags & DraftMessageData.ATTACHMENTS_CHANGED) ==
-                DraftMessageData.ATTACHMENTS_CHANGED) {
-            mAdapter.onAttachmentsLoaded(data.getReadOnlyAttachments());
-        }
-    }
-
-    @Override
-    public void onDraftAttachmentLimitReached(final DraftMessageData data) {
-        // Do nothing since the user is in the process of unselecting attachments.
-    }
-
-    @Override
-    public void onDraftAttachmentLoadFailed() {
-        // Do nothing since the user is in the process of unselecting attachments.
-    }
-
-    @Override
-    public void displayPhoto(final Rect viewRect, final Uri photoUri) {
-        final Uri imagesUri = MessagingContentProvider.buildDraftImagesUri(
-                mBinding.getData().getConversationId());
-        UIIntents.get().launchFullScreenPhotoViewer(
-                getActivity(), photoUri, viewRect, imagesUri);
-    }
-
-    @Override
-    public void updateSelectionCount(int count) {
-        if (getActivity() instanceof BugleActionBarActivity) {
-            final ActionBar actionBar = ((BugleActionBarActivity) getActivity())
-                    .getSupportActionBar();
-            if (actionBar != null) {
-                actionBar.setTitle(getResources().getString(
-                        R.string.attachment_chooser_selection, count));
-            }
-        }
-    }
-
-    class AttachmentGridAdapter extends ArrayAdapter<MessagePartData> {
-        public AttachmentGridAdapter(final Context context) {
-            super(context, R.layout.attachment_grid_item_view, new ArrayList<MessagePartData>());
-        }
-
-        public void onAttachmentsLoaded(final List<MessagePartData> attachments) {
-            clear();
-            addAll(attachments);
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public View getView(final int position, final View convertView, final ViewGroup parent) {
-            AttachmentGridItemView itemView;
-            final MessagePartData item = getItem(position);
-            if (convertView != null && convertView instanceof AttachmentGridItemView) {
-                itemView = (AttachmentGridItemView) convertView;
-            } else {
-                final LayoutInflater inflater = (LayoutInflater) getContext()
-                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-                itemView = (AttachmentGridItemView) inflater.inflate(
-                        R.layout.attachment_grid_item_view, parent, false);
-            }
-            itemView.bind(item, mAttachmentGridView);
-            return itemView;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/attachmentchooser/AttachmentGridItemView.java b/src/com/android/messaging/ui/attachmentchooser/AttachmentGridItemView.java
deleted file mode 100644
index 8bb7356..0000000
--- a/src/com/android/messaging/ui/attachmentchooser/AttachmentGridItemView.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.attachmentchooser;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.TouchDelegate;
-import android.view.View;
-import android.widget.CheckBox;
-import android.widget.FrameLayout;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.ui.AttachmentPreviewFactory;
-import com.android.messaging.util.Assert;
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * Shows an item in the attachment picker grid.
- */
-public class AttachmentGridItemView extends FrameLayout {
-    public interface HostInterface {
-        boolean isItemSelected(MessagePartData attachment);
-        void onItemCheckedChanged(AttachmentGridItemView view, MessagePartData attachment);
-        void onItemClicked(AttachmentGridItemView view, MessagePartData attachment);
-    }
-
-    @VisibleForTesting
-    MessagePartData mAttachmentData;
-    private FrameLayout mAttachmentViewContainer;
-    private CheckBox mCheckBox;
-    private HostInterface mHostInterface;
-
-    public AttachmentGridItemView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mAttachmentViewContainer = (FrameLayout) findViewById(R.id.attachment_container);
-        mCheckBox = (CheckBox) findViewById(R.id.checkbox);
-        mCheckBox.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View v) {
-                mHostInterface.onItemCheckedChanged(AttachmentGridItemView.this, mAttachmentData);
-            }
-        });
-        setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View v) {
-                mHostInterface.onItemClicked(AttachmentGridItemView.this, mAttachmentData);
-            }
-        });
-        addOnLayoutChangeListener(new OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(View v, int left, int top, int right, int bottom,
-                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                // Enlarge the clickable region for the checkbox.
-                final int touchAreaIncrease = getResources().getDimensionPixelOffset(
-                        R.dimen.attachment_grid_checkbox_area_increase);
-                final Rect region = new Rect();
-                mCheckBox.getHitRect(region);
-                region.inset(-touchAreaIncrease, -touchAreaIncrease);
-                setTouchDelegate(new TouchDelegate(region, mCheckBox));
-            }
-        });
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        // The grid view auto-fits the columns, so we want to let the height match the width
-        // to make the attachment preview square.
-        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
-    }
-
-    public void bind(final MessagePartData attachment, final HostInterface hostInterface) {
-        Assert.isTrue(attachment.isAttachment());
-        mHostInterface = hostInterface;
-        updateSelectedState();
-        if (mAttachmentData == null || !mAttachmentData.equals(attachment)) {
-            mAttachmentData = attachment;
-            updateAttachmentView();
-        }
-    }
-
-    @VisibleForTesting
-    HostInterface testGetHostInterface() {
-        return mHostInterface;
-    }
-
-    public void updateSelectedState() {
-        mCheckBox.setChecked(mHostInterface.isItemSelected(mAttachmentData));
-    }
-
-    private void updateAttachmentView() {
-        mAttachmentViewContainer.removeAllViews();
-        final LayoutInflater inflater = LayoutInflater.from(getContext());
-        final View attachmentView = AttachmentPreviewFactory.createAttachmentPreview(inflater,
-                mAttachmentData, mAttachmentViewContainer,
-                AttachmentPreviewFactory.TYPE_CHOOSER_GRID, true /* startImageRequest */, null);
-        mAttachmentViewContainer.addView(attachmentView);
-    }
-}
diff --git a/src/com/android/messaging/ui/attachmentchooser/AttachmentGridView.java b/src/com/android/messaging/ui/attachmentchooser/AttachmentGridView.java
deleted file mode 100644
index abf61dc..0000000
--- a/src/com/android/messaging/ui/attachmentchooser/AttachmentGridView.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.attachmentchooser;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.AttributeSet;
-import android.widget.GridView;
-
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.ui.attachmentchooser.AttachmentChooserFragment.AttachmentGridAdapter;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.UiUtils;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Displays a grid of attachment previews for the user to choose which to select/unselect
- */
-public class AttachmentGridView extends GridView implements
-        AttachmentGridItemView.HostInterface {
-    public interface AttachmentGridHost {
-        void displayPhoto(final Rect viewRect, final Uri photoUri);
-        void updateSelectionCount(final int count);
-    }
-
-    // By default everything is selected so only need to keep track of the unselected set.
-    private final Set<MessagePartData> mUnselectedSet;
-    private AttachmentGridHost mHost;
-
-    public AttachmentGridView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mUnselectedSet = new HashSet<>();
-    }
-
-    public void setHost(final AttachmentGridHost host) {
-        mHost = host;
-    }
-
-    @Override
-    public boolean isItemSelected(final MessagePartData attachment) {
-        return !mUnselectedSet.contains(attachment);
-    }
-
-    @Override
-    public void onItemClicked(final AttachmentGridItemView view, final MessagePartData attachment) {
-        // If the item is an image, show the photo viewer. All the other types (video, audio,
-        // vcard) have internal click handling for showing previews so we don't need to handle them
-        if (attachment.isImage()) {
-            mHost.displayPhoto(UiUtils.getMeasuredBoundsOnScreen(view), attachment.getContentUri());
-        }
-    }
-
-    @Override
-    public void onItemCheckedChanged(AttachmentGridItemView view, MessagePartData attachment) {
-        // Toggle selection.
-        if (isItemSelected(attachment)) {
-            mUnselectedSet.add(attachment);
-        } else {
-            mUnselectedSet.remove(attachment);
-        }
-        view.updateSelectedState();
-        updateSelectionCount();
-    }
-
-    public Set<MessagePartData> getUnselectedAttachments() {
-        return Collections.unmodifiableSet(mUnselectedSet);
-    }
-
-    private void updateSelectionCount() {
-        final int count = getAdapter().getCount() - mUnselectedSet.size();
-        Assert.isTrue(count >= 0);
-        mHost.updateSelectionCount(count);
-    }
-
-    private void refreshViews() {
-        if (getAdapter() instanceof AttachmentGridAdapter) {
-            ((AttachmentGridAdapter) getAdapter()).notifyDataSetChanged();
-        }
-    }
-
-    @Override
-    public Parcelable onSaveInstanceState() {
-        final Parcelable superState = super.onSaveInstanceState();
-        final SavedState savedState = new SavedState(superState);
-        savedState.unselectedParts = mUnselectedSet
-                .toArray(new MessagePartData[mUnselectedSet.size()]);
-        return savedState;
-    }
-
-    @Override
-    public void onRestoreInstanceState(final Parcelable state) {
-        if (!(state instanceof SavedState)) {
-            super.onRestoreInstanceState(state);
-            return;
-        }
-
-        final SavedState savedState = (SavedState) state;
-        super.onRestoreInstanceState(savedState.getSuperState());
-        mUnselectedSet.clear();
-        for (int i = 0; i < savedState.unselectedParts.length; i++) {
-            final MessagePartData unselectedPart = savedState.unselectedParts[i];
-            mUnselectedSet.add(unselectedPart);
-        }
-        refreshViews();
-    }
-
-    /**
-     * Persists the item selection state to saved instance state so we can restore on activity
-     * recreation
-     */
-    public static class SavedState extends BaseSavedState {
-        MessagePartData[] unselectedParts;
-
-        SavedState(final Parcelable superState) {
-            super(superState);
-        }
-
-        private SavedState(final Parcel in) {
-            super(in);
-
-            // Read parts
-            final int partCount = in.readInt();
-            unselectedParts = new MessagePartData[partCount];
-            for (int i = 0; i < partCount; i++) {
-                unselectedParts[i] = ((MessagePartData) in.readParcelable(
-                        MessagePartData.class.getClassLoader()));
-            }
-        }
-
-        @Override
-        public void writeToParcel(final Parcel out, final int flags) {
-            super.writeToParcel(out, flags);
-
-            // Write parts
-            out.writeInt(unselectedParts.length);
-            for (final MessagePartData image : unselectedParts) {
-                out.writeParcelable(image, flags);
-            }
-        }
-
-        public static final Parcelable.Creator<SavedState> CREATOR =
-                new Parcelable.Creator<SavedState>() {
-            @Override
-            public SavedState createFromParcel(final Parcel in) {
-                return new SavedState(in);
-            }
-            @Override
-            public SavedState[] newArray(final int size) {
-                return new SavedState[size];
-            }
-        };
-    }
-}
diff --git a/src/com/android/messaging/ui/contact/AddContactsConfirmationDialog.java b/src/com/android/messaging/ui/contact/AddContactsConfirmationDialog.java
deleted file mode 100644
index 9c1393d..0000000
--- a/src/com/android/messaging/ui/contact/AddContactsConfirmationDialog.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.res.Resources;
-import android.net.Uri;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.Button;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.ContactIconView;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.AccessibilityUtil;
-
-public class AddContactsConfirmationDialog implements DialogInterface.OnClickListener {
-    private final Context mContext;
-    private final Uri mAvatarUri;
-    private final String mNormalizedDestination;
-
-    public AddContactsConfirmationDialog(final Context context, final Uri avatarUri,
-            final String normalizedDestination) {
-        mContext = context;
-        mAvatarUri = avatarUri;
-        mNormalizedDestination = normalizedDestination;
-    }
-
-    public void show() {
-        final int confirmAddContactStringId = R.string.add_contact_confirmation;
-        final int cancelStringId = android.R.string.cancel;
-        final AlertDialog alertDialog = new AlertDialog.Builder(mContext)
-        .setTitle(R.string.add_contact_confirmation_dialog_title)
-        .setView(createBodyView())
-        .setPositiveButton(confirmAddContactStringId, this)
-        .setNegativeButton(cancelStringId, null)
-        .create();
-        alertDialog.show();
-        final Resources resources = mContext.getResources();
-        final Button cancelButton = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE);
-        if (cancelButton != null) {
-            cancelButton.setTextColor(resources.getColor(R.color.contact_picker_button_text_color));
-        }
-        final Button addButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
-        if (addButton != null) {
-            addButton.setTextColor(resources.getColor(R.color.contact_picker_button_text_color));
-        }
-    }
-
-    @Override
-    public void onClick(final DialogInterface dialog, final int which) {
-        UIIntents.get().launchAddContactActivity(mContext, mNormalizedDestination);
-    }
-
-    private View createBodyView() {
-        final View view = LayoutInflater.from(mContext).inflate(
-                R.layout.add_contacts_confirmation_dialog_body, null);
-        final ContactIconView iconView = (ContactIconView) view.findViewById(R.id.contact_icon);
-        iconView.setImageResourceUri(mAvatarUri);
-        final TextView textView = (TextView) view.findViewById(R.id.participant_name);
-        textView.setText(mNormalizedDestination);
-        // Accessibility reason : in case phone numbers are mixed in the display name,
-        // we need to vocalize it for talkback.
-        final String vocalizedDisplayName = AccessibilityUtil.getVocalizedPhoneNumber(
-                mContext.getResources(), mNormalizedDestination);
-        textView.setContentDescription(vocalizedDisplayName);
-        return view;
-    }
-}
diff --git a/src/com/android/messaging/ui/contact/AllContactsListViewHolder.java b/src/com/android/messaging/ui/contact/AllContactsListViewHolder.java
deleted file mode 100644
index 7263c54..0000000
--- a/src/com/android/messaging/ui/contact/AllContactsListViewHolder.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.content.Context;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.CustomHeaderPagerListViewHolder;
-import com.android.messaging.ui.contact.ContactListItemView.HostInterface;
-
-/**
- * Holds the all contacts view for the contact picker's view pager.
- */
-public class AllContactsListViewHolder extends CustomHeaderPagerListViewHolder {
-    public AllContactsListViewHolder(final Context context, final HostInterface clivHostInterface) {
-        super(context, new ContactListAdapter(context, null, clivHostInterface,
-                true /* needAlphabetHeader */));
-    }
-
-    @Override
-    protected int getLayoutResId() {
-        return R.layout.all_contacts_list_view;
-    }
-
-    @Override
-    protected int getPageTitleResId() {
-        return R.string.contact_picker_all_contacts_tab_title;
-    }
-
-    @Override
-    protected int getEmptyViewResId() {
-        return R.id.empty_view;
-    }
-
-    @Override
-    protected int getListViewResId() {
-        return R.id.all_contacts_list;
-    }
-
-    @Override
-    protected int getEmptyViewTitleResId() {
-        return R.string.contact_list_empty_text;
-    }
-
-    @Override
-    protected int getEmptyViewImageResId() {
-        return R.drawable.ic_oobe_freq_list;
-    }
-}
diff --git a/src/com/android/messaging/ui/contact/ContactDropdownLayouter.java b/src/com/android/messaging/ui/contact/ContactDropdownLayouter.java
deleted file mode 100644
index 0caf6b7..0000000
--- a/src/com/android/messaging/ui/contact/ContactDropdownLayouter.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.content.Context;
-import android.graphics.drawable.StateListDrawable;
-import android.net.Uri;
-import androidx.core.text.BidiFormatter;
-import androidx.core.text.TextDirectionHeuristicsCompat;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-
-import com.android.ex.chips.DropdownChipLayouter;
-import com.android.ex.chips.RecipientEntry;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ContactListItemData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.ui.ContactIconView;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.ContactRecipientEntryUtils;
-import com.android.messaging.util.ContactUtil;
-
-/**
- * An implementation for {@link DropdownChipLayouter}. Layouts the dropdown
- * list in the ContactRecipientAutoCompleteView in Material style.
- */
-public class ContactDropdownLayouter extends DropdownChipLayouter {
-    private final ContactListItemView.HostInterface mClivHostInterface;
-
-    public ContactDropdownLayouter(final LayoutInflater inflater, final Context context,
-            final ContactListItemView.HostInterface clivHostInterface) {
-        super(inflater, context);
-        mClivHostInterface = new ContactListItemView.HostInterface() {
-
-            @Override
-            public void onContactListItemClicked(final ContactListItemData item,
-                    final ContactListItemView view) {
-                // The chips UI will handle auto-complete item click events, so No-op here.
-            }
-
-            @Override
-            public boolean isContactSelected(final ContactListItemData item) {
-                // In chips drop down we don't show any selected checkmark per design.
-                return false;
-            }
-        };
-    }
-
-    /**
-     * Bind a drop down view to a RecipientEntry. We'd like regular dropdown items (BASE_RECIPIENT)
-     * to behave the same as regular ContactListItemViews, while using the chips library's
-     * item styling for alternates dropdown items (happens when you click on a chip).
-     */
-    @Override
-    public View bindView(final View convertView, final ViewGroup parent, final RecipientEntry entry,
-            final int position, AdapterType type, final String substring,
-            final StateListDrawable deleteDrawable) {
-        if (type != AdapterType.BASE_RECIPIENT) {
-            if (type == AdapterType.SINGLE_RECIPIENT) {
-                // Treat single recipients the same way as alternates. The base implementation of
-                // single recipients would try to simplify the destination by tokenizing. We'd
-                // like to always show the full destination address per design request.
-                type = AdapterType.RECIPIENT_ALTERNATES;
-            }
-            return super.bindView(convertView, parent, entry, position, type, substring,
-                    deleteDrawable);
-        }
-
-        // Default to show all the information
-        // RTL : To format contact name and detail if they happen to be phone numbers.
-        final BidiFormatter bidiFormatter = BidiFormatter.getInstance();
-        final String displayName = bidiFormatter.unicodeWrap(
-                ContactRecipientEntryUtils.getDisplayNameForContactList(entry),
-                TextDirectionHeuristicsCompat.LTR);
-        final String destination = bidiFormatter.unicodeWrap(
-                ContactRecipientEntryUtils.formatDestination(entry),
-                TextDirectionHeuristicsCompat.LTR);
-        final View itemView = reuseOrInflateView(convertView, parent, type);
-
-        // Bold the string that is matched.
-        final CharSequence[] styledResults =
-                getStyledResults(substring, displayName, destination);
-
-        Assert.isTrue(itemView instanceof ContactListItemView);
-        final ContactListItemView contactListItemView = (ContactListItemView) itemView;
-        contactListItemView.setImageClickHandlerDisabled(true);
-        boolean isWorkContact = ContactUtil.isEnterpriseContactId(entry.getContactId());
-        contactListItemView.bind(entry, styledResults[0], styledResults[1],
-                mClivHostInterface, (type == AdapterType.SINGLE_RECIPIENT), isWorkContact);
-        return itemView;
-    }
-
-    @Override
-    protected void bindIconToView(boolean showImage, RecipientEntry entry, ImageView view,
-            AdapterType type) {
-        if (showImage && view instanceof ContactIconView) {
-            final ContactIconView contactView = (ContactIconView) view;
-            // These show contact cards by default, but that isn't what we want here
-            contactView.setImageClickHandlerDisabled(true);
-            final Uri avatarUri = AvatarUriUtil.createAvatarUri(
-                    ParticipantData.getFromRecipientEntry(entry));
-            contactView.setImageResourceUri(avatarUri);
-        } else {
-            super.bindIconToView(showImage, entry, view, type);
-        }
-    }
-
-    @Override
-    protected int getItemLayoutResId(AdapterType type) {
-        switch (type) {
-            case BASE_RECIPIENT:
-                return R.layout.contact_list_item_view;
-            case RECIPIENT_ALTERNATES:
-                return R.layout.chips_alternates_dropdown_item;
-            default:
-                return R.layout.chips_alternates_dropdown_item;
-        }
-    }
-
-    @Override
-    protected int getAlternateItemLayoutResId(AdapterType type) {
-        return getItemLayoutResId(type);
-    }
-}
diff --git a/src/com/android/messaging/ui/contact/ContactListAdapter.java b/src/com/android/messaging/ui/contact/ContactListAdapter.java
deleted file mode 100644
index d466b61..0000000
--- a/src/com/android/messaging/ui/contact/ContactListAdapter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.CursorAdapter;
-import android.widget.SectionIndexer;
-
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-
-public class ContactListAdapter extends CursorAdapter implements SectionIndexer {
-    private final ContactListItemView.HostInterface mClivHostInterface;
-    private final boolean mNeedAlphabetHeader;
-    private ContactSectionIndexer mSectionIndexer;
-
-    public ContactListAdapter(final Context context, final Cursor cursor,
-            final ContactListItemView.HostInterface clivHostInterface,
-            final boolean needAlphabetHeader) {
-        super(context, cursor, 0);
-        mClivHostInterface = clivHostInterface;
-        mNeedAlphabetHeader = needAlphabetHeader;
-        mSectionIndexer = new ContactSectionIndexer(cursor);
-    }
-
-    @Override
-    public void bindView(final View view, final Context context, final Cursor cursor) {
-        Assert.isTrue(view instanceof ContactListItemView);
-        final ContactListItemView contactListItemView = (ContactListItemView) view;
-        String alphabetHeader = null;
-        if (mNeedAlphabetHeader) {
-            final int position = cursor.getPosition();
-            final int section = mSectionIndexer.getSectionForPosition(position);
-            // Check if the position is the first in the section.
-            if (mSectionIndexer.getPositionForSection(section) == position) {
-                alphabetHeader = (String) mSectionIndexer.getSections()[section];
-            }
-        }
-        contactListItemView.bind(cursor, mClivHostInterface, mNeedAlphabetHeader, alphabetHeader);
-    }
-
-    @Override
-    public View newView(final Context context, final Cursor cursor, final ViewGroup parent) {
-        final LayoutInflater layoutInflater = LayoutInflater.from(context);
-        return layoutInflater.inflate(R.layout.contact_list_item_view, parent, false);
-    }
-
-    @Override
-    public Cursor swapCursor(final Cursor newCursor) {
-        mSectionIndexer = new ContactSectionIndexer(newCursor);
-        return super.swapCursor(newCursor);
-    }
-
-    @Override
-    public Object[] getSections() {
-        return mSectionIndexer.getSections();
-    }
-
-    @Override
-    public int getPositionForSection(final int sectionIndex) {
-        return mSectionIndexer.getPositionForSection(sectionIndex);
-    }
-
-    @Override
-    public int getSectionForPosition(final int position) {
-        return mSectionIndexer.getSectionForPosition(position);
-    }
-}
diff --git a/src/com/android/messaging/ui/contact/ContactListItemView.java b/src/com/android/messaging/ui/contact/ContactListItemView.java
deleted file mode 100644
index b0e8957..0000000
--- a/src/com/android/messaging/ui/contact/ContactListItemView.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.ex.chips.RecipientEntry;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.data.ContactListItemData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.ui.ContactIconView;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * The view for a single entry in a contact list.
- */
-public class ContactListItemView extends LinearLayout implements OnClickListener {
-    public interface HostInterface {
-        void onContactListItemClicked(ContactListItemData item, ContactListItemView view);
-        boolean isContactSelected(ContactListItemData item);
-    }
-
-    @VisibleForTesting
-    final ContactListItemData mData;
-    private TextView mContactNameTextView;
-    private TextView mContactDetailsTextView;
-    private TextView mContactDetailTypeTextView;
-    private TextView mAlphabetHeaderTextView;
-    private ContactIconView mContactIconView;
-    private ImageView mContactCheckmarkView;
-    private ImageView mWorkProfileIcon;
-    private HostInterface mHostInterface;
-    private boolean mShouldShowAlphabetHeader;
-
-    public ContactListItemView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mData = DataModel.get().createContactListItemData();
-    }
-
-    @Override
-    protected void onFinishInflate () {
-        mContactNameTextView = (TextView) findViewById(R.id.contact_name);
-        mContactDetailsTextView = (TextView) findViewById(R.id.contact_details);
-        mContactDetailTypeTextView = (TextView) findViewById(R.id.contact_detail_type);
-        mAlphabetHeaderTextView = (TextView) findViewById(R.id.alphabet_header);
-        mContactIconView = (ContactIconView) findViewById(R.id.contact_icon);
-        mContactCheckmarkView = (ImageView) findViewById(R.id.contact_checkmark);
-        mWorkProfileIcon = (ImageView) findViewById(R.id.work_profile_icon);
-    }
-
-    /**
-     * Fills in the data associated with this view by binding to a contact cursor provided by
-     * ContactUtil.
-     * @param cursor the contact cursor.
-     * @param hostInterface host interface to this view.
-     * @param shouldShowAlphabetHeader whether an alphabetical header should shown on the side
-     *        of this view. If {@code headerLabel} is empty, we will still leave space for it.
-     * @param headerLabel the alphabetical header on the side of this view, if it should be shown.
-     */
-    public void bind(final Cursor cursor, final HostInterface hostInterface,
-            final boolean shouldShowAlphabetHeader, final String headerLabel) {
-        mData.bind(cursor, headerLabel);
-        mHostInterface = hostInterface;
-        mShouldShowAlphabetHeader = shouldShowAlphabetHeader;
-        setOnClickListener(this);
-        updateViewAppearance();
-    }
-
-    /**
-     * Binds a RecipientEntry. This is used by the chips text view's dropdown layout.
-     * @param recipientEntry the source RecipientEntry provided by ContactDropdownLayouter, which
-     *        was in turn directly from one of the existing chips, or from filtered results
-     *        generated by ContactRecipientAdapter.
-     * @param styledName display name where the portion that matches the search text is bold.
-     * @param styledDestination number where the portion that matches the search text is bold.
-     * @param hostInterface host interface to this view.
-     * @param isSingleRecipient whether this item is shown as the only line item in the single
-     *        recipient drop down from the chips view. If this is the case, we always show the
-     *        contact avatar even if it's not a first-level entry.
-     * @param isWorkContact whether the contact is in managed profile.
-     */
-    public void bind(final RecipientEntry recipientEntry, final CharSequence styledName,
-            final CharSequence styledDestination, final HostInterface hostInterface,
-            final boolean isSingleRecipient, final boolean isWorkContact) {
-        mData.bind(recipientEntry, styledName, styledDestination, isSingleRecipient, isWorkContact);
-        mHostInterface = hostInterface;
-        mShouldShowAlphabetHeader = false;
-        updateViewAppearance();
-    }
-
-    private void updateViewAppearance() {
-        mContactNameTextView.setText(mData.getDisplayName());
-        mContactDetailsTextView.setText(mData.getDestination());
-        mContactDetailTypeTextView.setText(Phone.getTypeLabel(getResources(),
-                mData.getDestinationType(), mData.getDestinationLabel()));
-        final RecipientEntry recipientEntry = mData.getRecipientEntry();
-        final String destinationString = String.valueOf(mData.getDestination());
-        if (mData.getIsSimpleContactItem()) {
-            // This is a special number-with-avatar type of contact (for unknown contact chips
-            // and for direct "send to destination" item). In this case, make sure we only show
-            // the display name (phone number) and the avatar and hide everything else.
-            final Uri avatarUri = AvatarUriUtil.createAvatarUri(
-                    ParticipantData.getFromRecipientEntry(recipientEntry));
-            mContactIconView.setImageResourceUri(avatarUri, mData.getContactId(),
-                    mData.getLookupKey(), destinationString);
-            mContactIconView.setVisibility(VISIBLE);
-            mContactCheckmarkView.setVisibility(GONE);
-            mContactDetailTypeTextView.setVisibility(GONE);
-            mContactDetailsTextView.setVisibility(GONE);
-            mContactNameTextView.setVisibility(VISIBLE);
-        } else if (mData.getIsFirstLevel()) {
-            final Uri avatarUri = AvatarUriUtil.createAvatarUri(
-                    ParticipantData.getFromRecipientEntry(recipientEntry));
-            mContactIconView.setImageResourceUri(avatarUri, mData.getContactId(),
-                    mData.getLookupKey(), destinationString);
-            mContactIconView.setVisibility(VISIBLE);
-            mContactNameTextView.setVisibility(VISIBLE);
-            final boolean isSelected = mHostInterface.isContactSelected(mData);
-            setSelected(isSelected);
-            mContactCheckmarkView.setVisibility(isSelected ? VISIBLE : GONE);
-            mContactDetailsTextView.setVisibility(VISIBLE);
-            mContactDetailTypeTextView.setVisibility(VISIBLE);
-        } else {
-            mContactIconView.setImageResourceUri(null);
-            mContactIconView.setVisibility(INVISIBLE);
-            mContactNameTextView.setVisibility(GONE);
-            final boolean isSelected = mHostInterface.isContactSelected(mData);
-            setSelected(isSelected);
-            mContactCheckmarkView.setVisibility(isSelected ? VISIBLE : GONE);
-            mContactDetailsTextView.setVisibility(VISIBLE);
-            mContactDetailTypeTextView.setVisibility(VISIBLE);
-        }
-        if (mData.getIsWorkContact()) {
-            mWorkProfileIcon.setVisibility(VISIBLE);
-        } else {
-            mWorkProfileIcon.setVisibility(GONE);
-        }
-        if (mShouldShowAlphabetHeader) {
-            mAlphabetHeaderTextView.setVisibility(VISIBLE);
-            mAlphabetHeaderTextView.setText(mData.getAlphabetHeader());
-        } else {
-            mAlphabetHeaderTextView.setVisibility(GONE);
-        }
-    }
-
-    /**
-     * {@inheritDoc} from OnClickListener
-     */
-    @Override
-    public void onClick(final View v) {
-        Assert.isTrue(v == this);
-        Assert.isTrue(mHostInterface != null);
-        mHostInterface.onContactListItemClicked(mData, this);
-    }
-
-    public void setImageClickHandlerDisabled(final boolean isHandlerDisabled) {
-        mContactIconView.setImageClickHandlerDisabled(isHandlerDisabled);
-    }
-}
diff --git a/src/com/android/messaging/ui/contact/ContactPickerFragment.java b/src/com/android/messaging/ui/contact/ContactPickerFragment.java
deleted file mode 100644
index e201074..0000000
--- a/src/com/android/messaging/ui/contact/ContactPickerFragment.java
+++ /dev/null
@@ -1,607 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.widget.Toolbar;
-import androidx.appcompat.widget.Toolbar.OnMenuItemClickListener;
-import android.text.Editable;
-import android.text.InputType;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.transition.Explode;
-import android.transition.Transition;
-import android.transition.Transition.EpicenterCallback;
-import android.transition.TransitionManager;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.action.ActionMonitor;
-import com.android.messaging.datamodel.action.GetOrCreateConversationAction;
-import com.android.messaging.datamodel.action.GetOrCreateConversationAction.GetOrCreateConversationActionListener;
-import com.android.messaging.datamodel.action.GetOrCreateConversationAction.GetOrCreateConversationActionMonitor;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.ContactListItemData;
-import com.android.messaging.datamodel.data.ContactPickerData;
-import com.android.messaging.datamodel.data.ContactPickerData.ContactPickerDataListener;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.ui.CustomHeaderPagerViewHolder;
-import com.android.messaging.ui.CustomHeaderViewPager;
-import com.android.messaging.ui.animation.ViewGroupItemVerticalExplodeAnimation;
-import com.android.messaging.ui.contact.ContactRecipientAutoCompleteView.ContactChipsChangeListener;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.RunsOnMainThread;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.ImeUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.UiUtils;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.ArrayList;
-import java.util.Set;
-
-
-/**
- * Shows lists of contacts to start conversations with.
- */
-public class ContactPickerFragment extends Fragment implements ContactPickerDataListener,
-        ContactListItemView.HostInterface, ContactChipsChangeListener, OnMenuItemClickListener,
-        GetOrCreateConversationActionListener {
-    public static final String FRAGMENT_TAG = "contactpicker";
-
-    // Undefined contact picker mode. We should never be in this state after the host activity has
-    // been created.
-    public static final int MODE_UNDEFINED = 0;
-
-    // The initial contact picker mode for starting a new conversation with one contact.
-    public static final int MODE_PICK_INITIAL_CONTACT = 1;
-
-    // The contact picker mode where one initial contact has been picked and we are showing
-    // only the chips edit box.
-    public static final int MODE_CHIPS_ONLY = 2;
-
-    // The contact picker mode for picking more contacts after starting the initial 1-1.
-    public static final int MODE_PICK_MORE_CONTACTS = 3;
-
-    // The contact picker mode when max number of participants is reached.
-    public static final int MODE_PICK_MAX_PARTICIPANTS = 4;
-
-    public interface ContactPickerFragmentHost {
-        void onGetOrCreateNewConversation(String conversationId);
-        void onBackButtonPressed();
-        void onInitiateAddMoreParticipants();
-        void onParticipantCountChanged(boolean canAddMoreParticipants);
-        void invalidateActionBar();
-    }
-
-    @VisibleForTesting
-    final Binding<ContactPickerData> mBinding = BindingBase.createBinding(this);
-
-    private ContactPickerFragmentHost mHost;
-    private ContactRecipientAutoCompleteView mRecipientTextView;
-    private CustomHeaderViewPager mCustomHeaderViewPager;
-    private AllContactsListViewHolder mAllContactsListViewHolder;
-    private FrequentContactsListViewHolder mFrequentContactsListViewHolder;
-    private View mRootView;
-    private View mPendingExplodeView;
-    private View mComposeDivider;
-    private Toolbar mToolbar;
-    private int mContactPickingMode = MODE_UNDEFINED;
-
-    // Keeps track of the currently selected phone numbers in the chips view to enable fast lookup.
-    private Set<String> mSelectedPhoneNumbers = null;
-
-    /**
-     * {@inheritDoc} from Fragment
-     */
-    @Override
-    public void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mAllContactsListViewHolder = new AllContactsListViewHolder(getActivity(), this);
-        mFrequentContactsListViewHolder = new FrequentContactsListViewHolder(getActivity(), this);
-
-        if (ContactUtil.hasReadContactsPermission()) {
-            mBinding.bind(DataModel.get().createContactPickerData(getActivity(), this));
-            mBinding.getData().init(getLoaderManager(), mBinding);
-        }
-    }
-
-    /**
-     * {@inheritDoc} from Fragment
-     */
-    @Override
-    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
-            final Bundle savedInstanceState) {
-        final View view = inflater.inflate(R.layout.contact_picker_fragment, container, false);
-        mRecipientTextView = (ContactRecipientAutoCompleteView)
-                view.findViewById(R.id.recipient_text_view);
-        mRecipientTextView.setThreshold(0);
-        mRecipientTextView.setDropDownAnchor(R.id.compose_contact_divider);
-
-        mRecipientTextView.setContactChipsListener(this);
-        mRecipientTextView.setDropdownChipLayouter(new ContactDropdownLayouter(inflater,
-                getActivity(), this));
-        mRecipientTextView.setAdapter(new ContactRecipientAdapter(getActivity(), this));
-        mRecipientTextView.addTextChangedListener(new TextWatcher() {
-            @Override
-            public void onTextChanged(final CharSequence s, final int start, final int before,
-                    final int count) {
-            }
-
-            @Override
-            public void beforeTextChanged(final CharSequence s, final int start, final int count,
-                    final int after) {
-            }
-
-            @Override
-            public void afterTextChanged(final Editable s) {
-                updateTextInputButtonsVisibility();
-            }
-        });
-
-        final CustomHeaderPagerViewHolder[] viewHolders = {
-                mFrequentContactsListViewHolder,
-                mAllContactsListViewHolder };
-
-        mCustomHeaderViewPager = (CustomHeaderViewPager) view.findViewById(R.id.contact_pager);
-        mCustomHeaderViewPager.setViewHolders(viewHolders);
-        mCustomHeaderViewPager.setViewPagerTabHeight(CustomHeaderViewPager.DEFAULT_TAB_STRIP_SIZE);
-        mCustomHeaderViewPager.setBackgroundColor(getResources()
-                .getColor(R.color.contact_picker_background));
-
-        // The view pager defaults to the frequent contacts page.
-        mCustomHeaderViewPager.setCurrentItem(0);
-
-        mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
-        mToolbar.setNavigationIcon(R.drawable.ic_arrow_back_light);
-        mToolbar.setNavigationContentDescription(R.string.back);
-        mToolbar.setNavigationOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View v) {
-                mHost.onBackButtonPressed();
-            }
-        });
-
-        mToolbar.inflateMenu(R.menu.compose_menu);
-        mToolbar.setOnMenuItemClickListener(this);
-
-        mComposeDivider = view.findViewById(R.id.compose_contact_divider);
-        mRootView = view;
-        return view;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Called when the host activity has been created. At this point, the host activity should
-     * have set the contact picking mode for us so that we may update our visuals.
-     */
-    @Override
-    public void onActivityCreated(final Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        Assert.isTrue(mContactPickingMode != MODE_UNDEFINED);
-        updateVisualsForContactPickingMode(false /* animate */);
-        mHost.invalidateActionBar();
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        // We could not have bound to the data if the permission was denied.
-        if (mBinding.isBound()) {
-            mBinding.unbind();
-        }
-
-        if (mMonitor != null) {
-            mMonitor.unregister();
-        }
-        mMonitor = null;
-    }
-
-    @Override
-    public boolean onMenuItemClick(final MenuItem menuItem) {
-        switch (menuItem.getItemId()) {
-            case R.id.action_ime_dialpad_toggle:
-                final int baseInputType = InputType.TYPE_TEXT_FLAG_MULTI_LINE;
-                if ((mRecipientTextView.getInputType() & InputType.TYPE_CLASS_PHONE) !=
-                        InputType.TYPE_CLASS_PHONE) {
-                    mRecipientTextView.setInputType(baseInputType | InputType.TYPE_CLASS_PHONE);
-                    menuItem.setIcon(R.drawable.ic_ime_light);
-                } else {
-                    mRecipientTextView.setInputType(baseInputType | InputType.TYPE_CLASS_TEXT);
-                    menuItem.setIcon(R.drawable.ic_numeric_dialpad);
-                }
-                ImeUtil.get().showImeKeyboard(getActivity(), mRecipientTextView);
-                return true;
-
-            case R.id.action_add_more_participants:
-                mHost.onInitiateAddMoreParticipants();
-                return true;
-
-            case R.id.action_confirm_participants:
-                maybeGetOrCreateConversation();
-                return true;
-
-            case R.id.action_delete_text:
-                Assert.equals(MODE_PICK_INITIAL_CONTACT, mContactPickingMode);
-                mRecipientTextView.setText("");
-                return true;
-        }
-        return false;
-    }
-
-    @Override // From ContactPickerDataListener
-    public void onAllContactsCursorUpdated(final Cursor data) {
-        mBinding.ensureBound();
-        mAllContactsListViewHolder.onContactsCursorUpdated(data);
-    }
-
-    @Override // From ContactPickerDataListener
-    public void onFrequentContactsCursorUpdated(final Cursor data) {
-        mBinding.ensureBound();
-        mFrequentContactsListViewHolder.onContactsCursorUpdated(data);
-        if (data != null && data.getCount() == 0) {
-            // Show the all contacts list when there's no frequents.
-            mCustomHeaderViewPager.setCurrentItem(1);
-        }
-    }
-
-    @Override // From ContactListItemView.HostInterface
-    public void onContactListItemClicked(final ContactListItemData item,
-            final ContactListItemView view) {
-        if (!isContactSelected(item)) {
-            if (mContactPickingMode == MODE_PICK_INITIAL_CONTACT) {
-                mPendingExplodeView = view;
-            }
-            mRecipientTextView.appendRecipientEntry(item.getRecipientEntry());
-        } else if (mContactPickingMode != MODE_PICK_INITIAL_CONTACT) {
-            mRecipientTextView.removeRecipientEntry(item.getRecipientEntry());
-        }
-    }
-
-    @Override // From ContactListItemView.HostInterface
-    public boolean isContactSelected(final ContactListItemData item) {
-        return mSelectedPhoneNumbers != null &&
-                mSelectedPhoneNumbers.contains(PhoneUtils.getDefault().getCanonicalBySystemLocale(
-                        item.getRecipientEntry().getDestination()));
-    }
-
-    /**
-     * Call this immediately after attaching the fragment, or when there's a ui state change that
-     * changes our host (i.e. restore from saved instance state).
-     */
-    public void setHost(final ContactPickerFragmentHost host) {
-        mHost = host;
-    }
-
-    public void setContactPickingMode(final int mode, final boolean animate) {
-        if (mContactPickingMode != mode) {
-            // Guard against impossible transitions.
-            Assert.isTrue(
-                    // We may start from undefined mode to any mode when we are restoring state.
-                    (mContactPickingMode == MODE_UNDEFINED) ||
-                    (mContactPickingMode == MODE_PICK_INITIAL_CONTACT && mode == MODE_CHIPS_ONLY) ||
-                    (mContactPickingMode == MODE_CHIPS_ONLY && mode == MODE_PICK_MORE_CONTACTS) ||
-                    (mContactPickingMode == MODE_PICK_MORE_CONTACTS
-                            && mode == MODE_PICK_MAX_PARTICIPANTS) ||
-                    (mContactPickingMode == MODE_PICK_MAX_PARTICIPANTS
-                            && mode == MODE_PICK_MORE_CONTACTS));
-
-            mContactPickingMode = mode;
-            updateVisualsForContactPickingMode(animate);
-        }
-    }
-
-    private void showImeKeyboard() {
-        Assert.notNull(mRecipientTextView);
-        mRecipientTextView.requestFocus();
-
-        // showImeKeyboard() won't work until the layout is ready, so wait until layout is complete
-        // before showing the soft keyboard.
-        UiUtils.doOnceAfterLayoutChange(mRootView, new Runnable() {
-            @Override
-            public void run() {
-                final Activity activity = getActivity();
-                if (activity != null) {
-                    ImeUtil.get().showImeKeyboard(activity, mRecipientTextView);
-                }
-            }
-        });
-        mRecipientTextView.invalidate();
-    }
-
-    private void updateVisualsForContactPickingMode(final boolean animate) {
-        // Don't update visuals if the visuals haven't been inflated yet.
-        if (mRootView != null) {
-            final Menu menu = mToolbar.getMenu();
-            final MenuItem addMoreParticipantsItem = menu.findItem(
-                    R.id.action_add_more_participants);
-            final MenuItem confirmParticipantsItem = menu.findItem(
-                    R.id.action_confirm_participants);
-            switch (mContactPickingMode) {
-                case MODE_PICK_INITIAL_CONTACT:
-                    addMoreParticipantsItem.setVisible(false);
-                    confirmParticipantsItem.setVisible(false);
-                    mCustomHeaderViewPager.setVisibility(View.VISIBLE);
-                    mComposeDivider.setVisibility(View.INVISIBLE);
-                    mRecipientTextView.setEnabled(true);
-                    showImeKeyboard();
-                    break;
-
-                case MODE_CHIPS_ONLY:
-                    if (animate) {
-                        if (mPendingExplodeView == null) {
-                            // The user didn't click on any contact item, so use the toolbar as
-                            // the view to "explode."
-                            mPendingExplodeView = mToolbar;
-                        }
-                        startExplodeTransitionForContactLists(false /* show */);
-
-                        ViewGroupItemVerticalExplodeAnimation.startAnimationForView(
-                                mCustomHeaderViewPager, mPendingExplodeView, mRootView,
-                                true /* snapshotView */, UiUtils.COMPOSE_TRANSITION_DURATION);
-                        showHideContactPagerWithAnimation(false /* show */);
-                    } else {
-                        mCustomHeaderViewPager.setVisibility(View.GONE);
-                    }
-
-                    addMoreParticipantsItem.setVisible(true);
-                    confirmParticipantsItem.setVisible(false);
-                    mComposeDivider.setVisibility(View.VISIBLE);
-                    mRecipientTextView.setEnabled(true);
-                    break;
-
-                case MODE_PICK_MORE_CONTACTS:
-                    if (animate) {
-                        // Correctly set the start visibility state for the view pager and
-                        // individual list items (hidden initially), so that the transition
-                        // manager can properly track the visibility change for the explode.
-                        mCustomHeaderViewPager.setVisibility(View.VISIBLE);
-                        toggleContactListItemsVisibilityForPendingTransition(false /* show */);
-                        startExplodeTransitionForContactLists(true /* show */);
-                    }
-                    addMoreParticipantsItem.setVisible(false);
-                    confirmParticipantsItem.setVisible(true);
-                    mCustomHeaderViewPager.setVisibility(View.VISIBLE);
-                    mComposeDivider.setVisibility(View.INVISIBLE);
-                    mRecipientTextView.setEnabled(true);
-                    showImeKeyboard();
-                    break;
-
-                case MODE_PICK_MAX_PARTICIPANTS:
-                    addMoreParticipantsItem.setVisible(false);
-                    confirmParticipantsItem.setVisible(true);
-                    mCustomHeaderViewPager.setVisibility(View.VISIBLE);
-                    mComposeDivider.setVisibility(View.INVISIBLE);
-                    // TODO: Verify that this is okay for accessibility
-                    mRecipientTextView.setEnabled(false);
-                    break;
-
-                default:
-                    Assert.fail("Unsupported contact picker mode!");
-                    break;
-            }
-            updateTextInputButtonsVisibility();
-        }
-    }
-
-    private void updateTextInputButtonsVisibility() {
-        final Menu menu = mToolbar.getMenu();
-        final MenuItem keypadToggleItem = menu.findItem(R.id.action_ime_dialpad_toggle);
-        final MenuItem deleteTextItem = menu.findItem(R.id.action_delete_text);
-        if (mContactPickingMode == MODE_PICK_INITIAL_CONTACT) {
-            if (TextUtils.isEmpty(mRecipientTextView.getText())) {
-                deleteTextItem.setVisible(false);
-                keypadToggleItem.setVisible(true);
-            } else {
-                deleteTextItem.setVisible(true);
-                keypadToggleItem.setVisible(false);
-            }
-        } else {
-            deleteTextItem.setVisible(false);
-            keypadToggleItem.setVisible(false);
-        }
-    }
-
-    private void maybeGetOrCreateConversation() {
-        final ArrayList<ParticipantData> participants =
-                mRecipientTextView.getRecipientParticipantDataForConversationCreation();
-        if (ContactPickerData.isTooManyParticipants(participants.size())) {
-            UiUtils.showToast(R.string.too_many_participants);
-        } else if (participants.size() > 0 && mMonitor == null) {
-            mMonitor = GetOrCreateConversationAction.getOrCreateConversation(participants,
-                    null, this);
-        }
-    }
-
-    /**
-     * Watches changes in contact chips to determine possible state transitions (e.g. creating
-     * the initial conversation, adding more participants or finish the current conversation)
-     */
-    @Override
-    public void onContactChipsChanged(final int oldCount, final int newCount) {
-        Assert.isTrue(oldCount != newCount);
-        if (mContactPickingMode == MODE_PICK_INITIAL_CONTACT) {
-            // Initial picking mode. Start a conversation once a recipient has been picked.
-            maybeGetOrCreateConversation();
-        } else if (mContactPickingMode == MODE_CHIPS_ONLY) {
-            // oldCount == 0 means we are restoring from savedInstanceState to add the existing
-            // chips, don't switch to "add more participants" mode in this case.
-            if (oldCount > 0 && mRecipientTextView.isFocused()) {
-                // Chips only mode. The user may have picked an additional contact or deleted the
-                // only existing contact. Either way, switch to picking more participants mode.
-                mHost.onInitiateAddMoreParticipants();
-            }
-        }
-        mHost.onParticipantCountChanged(ContactPickerData.getCanAddMoreParticipants(newCount));
-
-        // Refresh our local copy of the selected chips set to keep it up-to-date.
-        mSelectedPhoneNumbers =  mRecipientTextView.getSelectedDestinations();
-        invalidateContactLists();
-    }
-
-    /**
-     * Listens for notification that invalid contacts have been removed during resolving them.
-     * These contacts were not local contacts, valid email, or valid phone numbers
-     */
-    @Override
-    public void onInvalidContactChipsPruned(final int prunedCount) {
-        Assert.isTrue(prunedCount > 0);
-        UiUtils.showToast(R.plurals.add_invalid_contact_error, prunedCount);
-    }
-
-    /**
-     * Listens for notification that the user has pressed enter/done on the keyboard with all
-     * contacts in place and we should create or go to the existing conversation now
-     */
-    @Override
-    public void onEntryComplete() {
-        if (mContactPickingMode == MODE_PICK_INITIAL_CONTACT ||
-                mContactPickingMode == MODE_PICK_MORE_CONTACTS ||
-                mContactPickingMode == MODE_PICK_MAX_PARTICIPANTS) {
-            // Avoid multiple calls to create in race cases (hit done right after selecting contact)
-            maybeGetOrCreateConversation();
-        }
-    }
-
-    private void invalidateContactLists() {
-        mAllContactsListViewHolder.invalidateList();
-        mFrequentContactsListViewHolder.invalidateList();
-    }
-
-    /**
-     * Kicks off a scene transition that animates visibility changes of individual contact list
-     * items via explode animation.
-     * @param show whether the contact lists are to be shown or hidden.
-     */
-    private void startExplodeTransitionForContactLists(final boolean show) {
-        if (!OsUtil.isAtLeastL()) {
-            // Explode animation is not supported pre-L.
-            return;
-        }
-        final Explode transition = new Explode();
-        final Rect epicenter = mPendingExplodeView == null ? null :
-            UiUtils.getMeasuredBoundsOnScreen(mPendingExplodeView);
-        transition.setDuration(UiUtils.COMPOSE_TRANSITION_DURATION);
-        transition.setInterpolator(UiUtils.EASE_IN_INTERPOLATOR);
-        transition.setEpicenterCallback(new EpicenterCallback() {
-            @Override
-            public Rect onGetEpicenter(final Transition transition) {
-                return epicenter;
-            }
-        });
-
-        // Kick off the delayed scene explode transition. Anything happens after this line in this
-        // method before the next frame will be tracked by the transition manager for visibility
-        // changes and animated accordingly.
-        TransitionManager.beginDelayedTransition(mCustomHeaderViewPager,
-                transition);
-
-        toggleContactListItemsVisibilityForPendingTransition(show);
-    }
-
-    /**
-     * Toggle the visibility of contact list items in the contact lists for them to be tracked by
-     * the transition manager for pending explode transition.
-     */
-    private void toggleContactListItemsVisibilityForPendingTransition(final boolean show) {
-        if (!OsUtil.isAtLeastL()) {
-            // Explode animation is not supported pre-L.
-            return;
-        }
-        mAllContactsListViewHolder.toggleVisibilityForPendingTransition(show, mPendingExplodeView);
-        mFrequentContactsListViewHolder.toggleVisibilityForPendingTransition(show,
-                mPendingExplodeView);
-    }
-
-    private void showHideContactPagerWithAnimation(final boolean show) {
-        final boolean isPagerVisible = (mCustomHeaderViewPager.getVisibility() == View.VISIBLE);
-        if (show == isPagerVisible) {
-            return;
-        }
-
-        mCustomHeaderViewPager.animate().alpha(show ? 1F : 0F)
-            .setStartDelay(!show ? UiUtils.COMPOSE_TRANSITION_DURATION : 0)
-            .withStartAction(new Runnable() {
-                @Override
-                public void run() {
-                    mCustomHeaderViewPager.setVisibility(View.VISIBLE);
-                    mCustomHeaderViewPager.setAlpha(show ? 0F : 1F);
-                }
-            })
-            .withEndAction(new Runnable() {
-                @Override
-                public void run() {
-                    mCustomHeaderViewPager.setVisibility(show ? View.VISIBLE : View.GONE);
-                    mCustomHeaderViewPager.setAlpha(1F);
-                }
-            });
-    }
-
-    @Override
-    public void onContactCustomColorLoaded(final ContactPickerData data) {
-        mBinding.ensureBound(data);
-        invalidateContactLists();
-    }
-
-    public void updateActionBar(final ActionBar actionBar) {
-        // Hide the action bar for contact picker mode. The custom ToolBar containing chips UI
-        // etc. will take the spot of the action bar.
-        actionBar.hide();
-        UiUtils.setStatusBarColor(getActivity(),
-                getResources().getColor(R.color.compose_notification_bar_background));
-    }
-
-    private GetOrCreateConversationActionMonitor mMonitor;
-
-    @Override
-    @RunsOnMainThread
-    public void onGetOrCreateConversationSucceeded(final ActionMonitor monitor,
-            final Object data, final String conversationId) {
-        Assert.isTrue(monitor == mMonitor);
-        Assert.isTrue(conversationId != null);
-
-        mRecipientTextView.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE |
-                InputType.TYPE_CLASS_TEXT);
-        mHost.onGetOrCreateNewConversation(conversationId);
-
-        mMonitor = null;
-    }
-
-    @Override
-    @RunsOnMainThread
-    public void onGetOrCreateConversationFailed(final ActionMonitor monitor,
-            final Object data) {
-        Assert.isTrue(monitor == mMonitor);
-        LogUtil.e(LogUtil.BUGLE_TAG, "onGetOrCreateConversationFailed");
-        mMonitor = null;
-    }
-}
diff --git a/src/com/android/messaging/ui/contact/ContactRecipientAdapter.java b/src/com/android/messaging/ui/contact/ContactRecipientAdapter.java
deleted file mode 100644
index e330447..0000000
--- a/src/com/android/messaging/ui/contact/ContactRecipientAdapter.java
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.database.MergeCursor;
-import androidx.core.util.Pair;
-import android.text.TextUtils;
-import android.text.util.Rfc822Token;
-import android.text.util.Rfc822Tokenizer;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Filter;
-import android.widget.TextView;
-
-import com.android.ex.chips.BaseRecipientAdapter;
-import com.android.ex.chips.RecipientAlternatesAdapter;
-import com.android.ex.chips.RecipientAlternatesAdapter.RecipientMatchCallback;
-import com.android.ex.chips.RecipientEntry;
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.ContactRecipientEntryUtils;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * An extension on the base {@link BaseRecipientAdapter} that uses data layer from Bugle,
- * such as the ContactRecipientPhotoManager that uses our own MediaResourceManager, and
- * contact lookup that relies on ContactUtil. It provides data source and filtering ability
- * for {@link ContactRecipientAutoCompleteView}
- */
-public final class ContactRecipientAdapter extends BaseRecipientAdapter {
-    private static final int WORD_DIRECTORY_HEADER_POS_NONE = -1;
-    /**
-     * Stores the index of work directory header.
-     */
-    private int mWorkDirectoryHeaderPos = WORD_DIRECTORY_HEADER_POS_NONE;
-    private final LayoutInflater mInflater;
-
-    /**
-     * Type of directory entry.
-     */
-    private static final int ENTRY_TYPE_DIRECTORY = RecipientEntry.ENTRY_TYPE_SIZE;
-
-    public ContactRecipientAdapter(final Context context,
-            final ContactListItemView.HostInterface clivHost) {
-        this(context, Integer.MAX_VALUE, QUERY_TYPE_PHONE, clivHost);
-    }
-
-    public ContactRecipientAdapter(final Context context, final int preferredMaxResultCount,
-            final int queryMode, final ContactListItemView.HostInterface clivHost) {
-        super(context, preferredMaxResultCount, queryMode);
-        setPhotoManager(new ContactRecipientPhotoManager(context, clivHost));
-        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-    }
-
-    @Override
-    public boolean forceShowAddress() {
-        // We should always use the SingleRecipientAddressAdapter
-        // And never use the RecipientAlternatesAdapter
-        return true;
-    }
-
-    @Override
-    public Filter getFilter() {
-        return new ContactFilter();
-    }
-
-    /**
-     * A Filter for a RecipientEditTextView that queries Bugle's ContactUtil for auto-complete
-     * results.
-     */
-    public class ContactFilter extends Filter {
-
-        // Used to sort filtered contacts when it has combined results from email and phone.
-        private final RecipientEntryComparator mComparator = new RecipientEntryComparator();
-
-        /**
-         * Returns a cursor containing the filtered results in contacts given the search text,
-         * and a boolean indicating whether the results are sorted.
-         *
-         * The queries are synchronously performed since this is not run on the main thread.
-         *
-         * Some locales (e.g. JPN) expect email addresses to be auto-completed for MMS.
-         * If this is the case, perform two queries on phone number followed by email and
-         * return the merged results.
-         */
-        @DoesNotRunOnMainThread
-        private CursorResult getFilteredResultsCursor(final String searchText) {
-            Assert.isNotMainThread();
-            if (BugleGservices.get().getBoolean(
-                    BugleGservicesKeys.ALWAYS_AUTOCOMPLETE_EMAIL_ADDRESS,
-                    BugleGservicesKeys.ALWAYS_AUTOCOMPLETE_EMAIL_ADDRESS_DEFAULT)) {
-
-                final Cursor personalFilterPhonesCursor = ContactUtil
-                        .filterPhones(getContext(), searchText).performSynchronousQuery();
-                final Cursor personalFilterEmailsCursor = ContactUtil
-                        .filterEmails(getContext(), searchText).performSynchronousQuery();
-                final Cursor personalCursor = new MergeCursor(
-                        new Cursor[]{personalFilterEmailsCursor, personalFilterPhonesCursor});
-                final CursorResult cursorResult =
-                        new CursorResult(personalCursor, false /* sorted */);
-                if (OsUtil.isAtLeastN()) {
-                    // Including enterprise result starting from N.
-                    final Cursor enterpriseFilterPhonesCursor = ContactUtil.filterPhonesEnterprise(
-                            getContext(), searchText).performSynchronousQuery();
-                    final Cursor enterpriseFilterEmailsCursor = ContactUtil.filterEmailsEnterprise(
-                            getContext(), searchText).performSynchronousQuery();
-                    final Cursor enterpriseCursor = new MergeCursor(
-                            new Cursor[]{enterpriseFilterEmailsCursor,
-                                    enterpriseFilterPhonesCursor});
-                    cursorResult.enterpriseCursor = enterpriseCursor;
-                }
-                return cursorResult;
-            } else {
-                final Cursor personalFilterDestinationCursor = ContactUtil
-                        .filterDestination(getContext(), searchText).performSynchronousQuery();
-                final CursorResult cursorResult = new CursorResult(personalFilterDestinationCursor,
-                        true);
-                if (OsUtil.isAtLeastN()) {
-                    // Including enterprise result starting from N.
-                    final Cursor enterpriseFilterDestinationCursor = ContactUtil
-                            .filterDestinationEnterprise(getContext(), searchText)
-                            .performSynchronousQuery();
-                    cursorResult.enterpriseCursor = enterpriseFilterDestinationCursor;
-                }
-                return cursorResult;
-            }
-        }
-
-        @Override
-        protected FilterResults performFiltering(final CharSequence constraint) {
-            Assert.isNotMainThread();
-            final FilterResults results = new FilterResults();
-
-            // No query, return empty results.
-            if (TextUtils.isEmpty(constraint)) {
-                clearTempEntries();
-                return results;
-            }
-
-            final String searchText = constraint.toString();
-
-            // Query for auto-complete results, since performFiltering() is not done on the
-            // main thread, perform the cursor loader queries directly.
-
-            final CursorResult cursorResult = getFilteredResultsCursor(searchText);
-            final List<RecipientEntry> entries = new ArrayList<>();
-
-            // First check if the constraint is a valid SMS destination. If so, add the
-            // destination as a suggestion item to the drop down.
-            if (PhoneUtils.isValidSmsMmsDestination(searchText)) {
-                entries.add(ContactRecipientEntryUtils
-                        .constructSendToDestinationEntry(searchText));
-            }
-
-            // Only show work directory header if more than one result in work directory.
-            int workDirectoryHeaderPos = WORD_DIRECTORY_HEADER_POS_NONE;
-            if (cursorResult.enterpriseCursor != null
-                    && cursorResult.enterpriseCursor.getCount() > 0) {
-                if (cursorResult.personalCursor != null) {
-                    workDirectoryHeaderPos = entries.size();
-                    workDirectoryHeaderPos += cursorResult.personalCursor.getCount();
-                }
-            }
-
-            final Cursor[] cursors = new Cursor[]{cursorResult.personalCursor,
-                    cursorResult.enterpriseCursor};
-            for (Cursor cursor : cursors) {
-                if (cursor != null) {
-                    try {
-                        final List<RecipientEntry> tempEntries = new ArrayList<>();
-                        HashSet<Long> existingContactIds = new HashSet<>();
-                        while (cursor.moveToNext()) {
-                            // Make sure there's only one first-level contact (i.e. contact for
-                            // which we show the avatar picture and name) for every contact id.
-                            final long contactId = cursor.getLong(ContactUtil.INDEX_CONTACT_ID);
-                            final boolean isFirstLevel = !existingContactIds.contains(contactId);
-                            if (isFirstLevel) {
-                                existingContactIds.add(contactId);
-                            }
-                            tempEntries.add(ContactUtil.createRecipientEntryForPhoneQuery(cursor,
-                                    isFirstLevel));
-                        }
-
-                        if (!cursorResult.isSorted) {
-                            Collections.sort(tempEntries, mComparator);
-                        }
-                        entries.addAll(tempEntries);
-                    } finally {
-                        cursor.close();
-                    }
-                }
-            }
-            results.values = new ContactReceipientFilterResult(entries, workDirectoryHeaderPos);
-            results.count = 1;
-            return results;
-        }
-
-        @Override
-        protected void publishResults(final CharSequence constraint, final FilterResults results) {
-            mCurrentConstraint = constraint;
-            clearTempEntries();
-
-            final ContactReceipientFilterResult contactReceipientFilterResult
-                    = (ContactReceipientFilterResult) results.values;
-            if (contactReceipientFilterResult != null) {
-                mWorkDirectoryHeaderPos = contactReceipientFilterResult.workDirectoryPos;
-                if (contactReceipientFilterResult.recipientEntries != null) {
-                    updateEntries(contactReceipientFilterResult.recipientEntries);
-                } else {
-                    updateEntries(Collections.<RecipientEntry>emptyList());
-                }
-            }
-        }
-
-        private class RecipientEntryComparator implements Comparator<RecipientEntry> {
-
-            private final Collator mCollator;
-
-            public RecipientEntryComparator() {
-                mCollator = Collator.getInstance(Locale.getDefault());
-                mCollator.setStrength(Collator.PRIMARY);
-            }
-
-            /**
-             * Compare two RecipientEntry's, first by locale-aware display name comparison, then by
-             * contact id comparison, finally by first-level-ness comparison.
-             */
-            @Override
-            public int compare(RecipientEntry lhs, RecipientEntry rhs) {
-                // Send-to-destinations always appear before everything else.
-                final boolean sendToLhs = ContactRecipientEntryUtils
-                        .isSendToDestinationContact(lhs);
-                final boolean sendToRhs = ContactRecipientEntryUtils
-                        .isSendToDestinationContact(lhs);
-                if (sendToLhs != sendToRhs) {
-                    if (sendToLhs) {
-                        return -1;
-                    } else if (sendToRhs) {
-                        return 1;
-                    }
-                }
-
-                final int displayNameCompare = mCollator.compare(lhs.getDisplayName(),
-                        rhs.getDisplayName());
-                if (displayNameCompare != 0) {
-                    return displayNameCompare;
-                }
-
-                // Long.compare could accomplish the following three lines, but this is only
-                // available in API 19+
-                final long lhsContactId = lhs.getContactId();
-                final long rhsContactId = rhs.getContactId();
-                final int contactCompare = lhsContactId < rhsContactId ? -1 :
-                        (lhsContactId == rhsContactId ? 0 : 1);
-                if (contactCompare != 0) {
-                    return contactCompare;
-                }
-
-                // These are the same contact. Make sure first-level contacts always
-                // appear at the front.
-                if (lhs.isFirstLevel()) {
-                    return -1;
-                } else if (rhs.isFirstLevel()) {
-                    return 1;
-                } else {
-                    return 0;
-                }
-            }
-        }
-
-        private class CursorResult {
-
-            public final Cursor personalCursor;
-
-            public Cursor enterpriseCursor;
-
-            public final boolean isSorted;
-
-            public CursorResult(Cursor personalCursor, boolean isSorted) {
-                this.personalCursor = personalCursor;
-                this.isSorted = isSorted;
-            }
-        }
-
-        private class ContactReceipientFilterResult {
-            /**
-             * Recipient entries in all directories.
-             */
-            public final List<RecipientEntry> recipientEntries;
-
-            /**
-             * Index of row that showing work directory header.
-             */
-            public final int workDirectoryPos;
-
-            public ContactReceipientFilterResult(List<RecipientEntry> recipientEntries,
-                    int workDirectoryPos) {
-                this.recipientEntries = recipientEntries;
-                this.workDirectoryPos = workDirectoryPos;
-            }
-        }
-    }
-
-    /**
-     * Called when we need to substitute temporary recipient chips with better alternatives.
-     * For example, if a list of comma-delimited phone numbers are pasted into the edit box,
-     * we want to be able to look up in the ContactUtil for exact matches and get contact
-     * details such as name and photo thumbnail for the contact to display a better chip.
-     */
-    @Override
-    public void getMatchingRecipients(final ArrayList<String> inAddresses,
-            final RecipientMatchCallback callback) {
-        final int addressesSize = Math.min(
-                RecipientAlternatesAdapter.MAX_LOOKUPS, inAddresses.size());
-        final HashSet<String> addresses = new HashSet<String>();
-        for (int i = 0; i < addressesSize; i++) {
-            final Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(inAddresses.get(i).toLowerCase());
-            addresses.add(tokens.length > 0 ? tokens[0].getAddress() : inAddresses.get(i));
-        }
-
-        final Map<String, RecipientEntry> recipientEntries =
-                new HashMap<String, RecipientEntry>();
-        // query for each address
-        for (final String address : addresses) {
-            final Cursor cursor = ContactUtil.lookupDestination(getContext(), address)
-                    .performSynchronousQuery();
-            if (cursor != null) {
-                try {
-                    if (cursor.moveToNext()) {
-                        // There may be multiple matches to the same number, always take the
-                        // first match.
-                        // TODO: May need to consider if there's an existing conversation
-                        // that matches this particular contact and prioritize that contact.
-                        final RecipientEntry entry =
-                                ContactUtil.createRecipientEntryForPhoneQuery(cursor, true);
-                        recipientEntries.put(address, entry);
-                    }
-
-                } finally {
-                    cursor.close();
-                }
-            }
-        }
-
-        // report matches
-        callback.matchesFound(recipientEntries);
-    }
-
-    /**
-     * We handle directory header here and then delegate the work of creating recipient views to
-     * the {@link BaseRecipientAdapter}. Please notice that we need to fix the position
-     * before passing to {@link BaseRecipientAdapter} because it is not aware of the existence of
-     * directory headers.
-     */
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
-        TextView textView;
-        if (isDirectoryEntry(position)) {
-            if (convertView == null) {
-                textView = (TextView) mInflater.inflate(R.layout.work_directory_header, parent,
-                        false);
-            } else {
-                textView = (TextView) convertView;
-            }
-            return textView;
-        }
-        return super.getView(fixPosition(position), convertView, parent);
-    }
-
-    @Override
-    public RecipientEntry getItem(int position) {
-        if (isDirectoryEntry(position)) {
-            return null;
-        }
-        return super.getItem(fixPosition(position));
-    }
-
-    @Override
-    public int getViewTypeCount() {
-        return RecipientEntry.ENTRY_TYPE_SIZE + 1;
-    }
-
-    @Override
-    public int getItemViewType(int position) {
-        if (isDirectoryEntry(position)) {
-            return ENTRY_TYPE_DIRECTORY;
-        }
-        return super.getItemViewType(fixPosition(position));
-    }
-
-    @Override
-    public boolean isEnabled(int position) {
-        if (isDirectoryEntry(position)) {
-            return false;
-        }
-        return super.isEnabled(fixPosition(position));
-    }
-
-    @Override
-    public int getCount() {
-        return super.getCount() + ((hasWorkDirectoryHeader()) ? 1 : 0);
-    }
-
-    private boolean isDirectoryEntry(int position) {
-        return position == mWorkDirectoryHeaderPos;
-    }
-
-    /**
-     * @return the position of items without counting directory headers.
-     */
-    private int fixPosition(int position) {
-        if (hasWorkDirectoryHeader()) {
-            Assert.isTrue(position != mWorkDirectoryHeaderPos);
-            if (position > mWorkDirectoryHeaderPos) {
-                return position - 1;
-            }
-        }
-        return position;
-    }
-
-    private boolean hasWorkDirectoryHeader() {
-        return mWorkDirectoryHeaderPos != WORD_DIRECTORY_HEADER_POS_NONE;
-    }
-
-}
diff --git a/src/com/android/messaging/ui/contact/ContactRecipientAutoCompleteView.java b/src/com/android/messaging/ui/contact/ContactRecipientAutoCompleteView.java
deleted file mode 100644
index 17128c1..0000000
--- a/src/com/android/messaging/ui/contact/ContactRecipientAutoCompleteView.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.os.AsyncTask;
-import android.text.Editable;
-import android.text.TextPaint;
-import android.text.TextWatcher;
-import android.text.util.Rfc822Tokenizer;
-import android.util.AttributeSet;
-import android.view.ContextThemeWrapper;
-import android.view.KeyEvent;
-import android.view.inputmethod.EditorInfo;
-import android.widget.TextView;
-
-import com.android.ex.chips.RecipientEditTextView;
-import com.android.ex.chips.RecipientEntry;
-import com.android.ex.chips.recipientchip.DrawableRecipientChip;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.util.ContactRecipientEntryUtils;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-
-/**
- * An extension for {@link RecipientEditTextView} which shows a list of Materialized contact chips.
- * It uses Bugle's ContactUtil to perform contact lookup, and is able to return the list of
- * recipients in the form of a ParticipantData list.
- */
-public class ContactRecipientAutoCompleteView extends RecipientEditTextView {
-    public interface ContactChipsChangeListener {
-        void onContactChipsChanged(int oldCount, int newCount);
-        void onInvalidContactChipsPruned(int prunedCount);
-        void onEntryComplete();
-    }
-
-    private final int mTextHeight;
-    private ContactChipsChangeListener mChipsChangeListener;
-
-    /**
-     * Watches changes in contact chips to determine possible state transitions.
-     */
-    private class ContactChipsWatcher implements TextWatcher {
-        /**
-         * Tracks the old chips count before text changes. Note that we currently don't compare
-         * the entire chip sets but just the cheaper-to-do before and after counts, because
-         * the chips view don't allow for replacing chips.
-         */
-        private int mLastChipsCount = 0;
-
-        @Override
-        public void onTextChanged(final CharSequence s, final int start, final int before,
-                final int count) {
-        }
-
-        @Override
-        public void beforeTextChanged(final CharSequence s, final int start, final int count,
-                final int after) {
-            // We don't take mLastChipsCount from here but from the last afterTextChanged() run.
-            // The reason is because at this point, any chip spans to be removed is already removed
-            // from s in the chips text view.
-        }
-
-        @Override
-        public void afterTextChanged(final Editable s) {
-            final int currentChipsCount = s.getSpans(0, s.length(),
-                    DrawableRecipientChip.class).length;
-            if (currentChipsCount != mLastChipsCount) {
-                // When a sanitizing task is running, we don't want to notify any chips count
-                // change, but we do want to track the last chip count.
-                if (mChipsChangeListener != null && mCurrentSanitizeTask == null) {
-                    mChipsChangeListener.onContactChipsChanged(mLastChipsCount, currentChipsCount);
-                }
-                mLastChipsCount = currentChipsCount;
-            }
-        }
-    }
-
-    private static final String TEXT_HEIGHT_SAMPLE = "a";
-
-    public ContactRecipientAutoCompleteView(final Context context, final AttributeSet attrs) {
-        super(new ContextThemeWrapper(context, R.style.ColorAccentGrayOverrideStyle), attrs);
-
-        // Get the height of the text, given the currently set font face and size.
-        final Rect textBounds = new Rect(0, 0, 0, 0);
-        final TextPaint paint = getPaint();
-        paint.getTextBounds(TEXT_HEIGHT_SAMPLE, 0, TEXT_HEIGHT_SAMPLE.length(), textBounds);
-        mTextHeight = textBounds.height();
-
-        setTokenizer(new Rfc822Tokenizer());
-        addTextChangedListener(new ContactChipsWatcher());
-        setOnFocusListShrinkRecipients(false);
-
-        setBackground(context.getResources().getDrawable(
-                androidx.appcompat.R.drawable.abc_textfield_search_default_mtrl_alpha));
-    }
-
-    public void setContactChipsListener(final ContactChipsChangeListener listener) {
-        mChipsChangeListener = listener;
-    }
-
-    /**
-     * A tuple of chips which AsyncContactChipSanitizeTask reports as progress to have the
-     * chip actually replaced/removed on the UI thread.
-     */
-    private class ChipReplacementTuple {
-        public final DrawableRecipientChip removedChip;
-        public final RecipientEntry replacedChipEntry;
-
-        public ChipReplacementTuple(final DrawableRecipientChip removedChip,
-                final RecipientEntry replacedChipEntry) {
-            this.removedChip = removedChip;
-            this.replacedChipEntry = replacedChipEntry;
-        }
-    }
-
-    /**
-     * An AsyncTask that cleans up contact chips on every chips commit (i.e. get or create a new
-     * conversation with the given chips).
-     */
-    private class AsyncContactChipSanitizeTask extends
-            AsyncTask<Void, ChipReplacementTuple, Integer> {
-
-        @Override
-        protected Integer doInBackground(final Void... params) {
-            final DrawableRecipientChip[] recips = getText()
-                    .getSpans(0, getText().length(), DrawableRecipientChip.class);
-            int invalidChipsRemoved = 0;
-            for (final DrawableRecipientChip recipient : recips) {
-                final RecipientEntry entry = recipient.getEntry();
-                if (entry != null) {
-                    if (entry.isValid()) {
-                        if (RecipientEntry.isCreatedRecipient(entry.getContactId()) ||
-                                ContactRecipientEntryUtils.isSendToDestinationContact(entry)) {
-                            // This is a generated/send-to contact chip, try to look it up and
-                            // display a chip for the corresponding local contact.
-                            try (final Cursor lookupResult =
-                                    ContactUtil.lookupDestination(
-                                                    getContext(), entry.getDestination())
-                                            .performSynchronousQuery()) {
-                                if (lookupResult != null && lookupResult.moveToNext()) {
-                                    // Found a match, remove the generated entry and replace with a
-                                    // better local entry.
-                                    publishProgress(
-                                            new ChipReplacementTuple(
-                                                    recipient,
-                                                    ContactUtil.createRecipientEntryForPhoneQuery(
-                                                            lookupResult, true)));
-                                } else if (PhoneUtils.isValidSmsMmsDestination(
-                                        entry.getDestination())) {
-                                    // No match was found, but we have a valid destination so let's
-                                    // at least create an entry that shows an avatar.
-                                    publishProgress(
-                                            new ChipReplacementTuple(
-                                                    recipient,
-                                                    ContactRecipientEntryUtils
-                                                            .constructNumberWithAvatarEntry(
-                                                                    entry.getDestination())));
-                                } else {
-                                    // Not a valid contact. Remove and show an error.
-                                    publishProgress(new ChipReplacementTuple(recipient, null));
-                                    invalidChipsRemoved++;
-                                }
-                            }
-                        }
-                    } else {
-                        publishProgress(new ChipReplacementTuple(recipient, null));
-                        invalidChipsRemoved++;
-                    }
-                }
-            }
-            return invalidChipsRemoved;
-        }
-
-        @Override
-        protected void onProgressUpdate(final ChipReplacementTuple... values) {
-            for (final ChipReplacementTuple tuple : values) {
-                if (tuple.removedChip != null) {
-                    final Editable text = getText();
-                    final int chipStart = text.getSpanStart(tuple.removedChip);
-                    final int chipEnd = text.getSpanEnd(tuple.removedChip);
-                    if (chipStart >= 0 && chipEnd >= 0) {
-                        text.delete(chipStart, chipEnd);
-                    }
-
-                    if (tuple.replacedChipEntry != null) {
-                        appendRecipientEntry(tuple.replacedChipEntry);
-                    }
-                }
-            }
-        }
-
-        @Override
-        protected void onPostExecute(final Integer invalidChipsRemoved) {
-            mCurrentSanitizeTask = null;
-            if (invalidChipsRemoved > 0) {
-                mChipsChangeListener.onInvalidContactChipsPruned(invalidChipsRemoved);
-            }
-        }
-    }
-
-    /**
-     * We don't use SafeAsyncTask but instead use a single threaded executor to ensure that
-     * all sanitization tasks are serially executed so as not to interfere with each other.
-     */
-    private static final Executor SANITIZE_EXECUTOR = Executors.newSingleThreadExecutor();
-
-    private AsyncContactChipSanitizeTask mCurrentSanitizeTask;
-
-    /**
-     * Whenever the caller wants to start a new conversation with the list of chips we have,
-     * make sure we asynchronously:
-     * 1. Remove invalid chips.
-     * 2. Attempt to resolve unknown contacts to known local contacts.
-     * 3. Convert still unknown chips to chips with generated avatar.
-     *
-     * Note that we don't need to perform this synchronously since we can
-     * resolve any unknown contacts to local contacts when needed.
-     */
-    private void sanitizeContactChips() {
-        if (mCurrentSanitizeTask != null && !mCurrentSanitizeTask.isCancelled()) {
-            mCurrentSanitizeTask.cancel(false);
-            mCurrentSanitizeTask = null;
-        }
-        mCurrentSanitizeTask = new AsyncContactChipSanitizeTask();
-        mCurrentSanitizeTask.executeOnExecutor(SANITIZE_EXECUTOR);
-    }
-
-    /**
-     * Returns a list of ParticipantData from the entered chips in order to create
-     * new conversation.
-     */
-    public ArrayList<ParticipantData> getRecipientParticipantDataForConversationCreation() {
-        final DrawableRecipientChip[] recips = getText()
-                .getSpans(0, getText().length(), DrawableRecipientChip.class);
-        final ArrayList<ParticipantData> contacts =
-                new ArrayList<ParticipantData>(recips.length);
-        for (final DrawableRecipientChip recipient : recips) {
-            final RecipientEntry entry = recipient.getEntry();
-            if (entry != null && entry.isValid() && entry.getDestination() != null &&
-                    PhoneUtils.isValidSmsMmsDestination(entry.getDestination())) {
-                contacts.add(ParticipantData.getFromRecipientEntry(recipient.getEntry()));
-            }
-        }
-        sanitizeContactChips();
-        return contacts;
-    }
-
-    /**c
-     * Gets a set of currently selected chips' emails/phone numbers. This will facilitate the
-     * consumer with determining quickly whether a contact is currently selected.
-     */
-    public Set<String> getSelectedDestinations() {
-        Set<String> set = new HashSet<String>();
-        final DrawableRecipientChip[] recips = getText()
-                .getSpans(0, getText().length(), DrawableRecipientChip.class);
-
-        for (final DrawableRecipientChip recipient : recips) {
-            final RecipientEntry entry = recipient.getEntry();
-            if (entry != null && entry.isValid() && entry.getDestination() != null) {
-                set.add(PhoneUtils.getDefault().getCanonicalBySystemLocale(
-                        entry.getDestination()));
-            }
-        }
-        return set;
-    }
-
-    @Override
-    public boolean onEditorAction(final TextView view, final int actionId, final KeyEvent event) {
-        if (actionId == EditorInfo.IME_ACTION_DONE) {
-            mChipsChangeListener.onEntryComplete();
-        }
-        return super.onEditorAction(view, actionId, event);
-    }
-}
diff --git a/src/com/android/messaging/ui/contact/ContactRecipientPhotoManager.java b/src/com/android/messaging/ui/contact/ContactRecipientPhotoManager.java
deleted file mode 100644
index d69ba64..0000000
--- a/src/com/android/messaging/ui/contact/ContactRecipientPhotoManager.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.content.Context;
-import android.net.Uri;
-
-import com.android.ex.chips.PhotoManager;
-import com.android.ex.chips.RecipientEntry;
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.media.AvatarRequestDescriptor;
-import com.android.messaging.datamodel.media.BindableMediaRequest;
-import com.android.messaging.datamodel.media.ImageResource;
-import com.android.messaging.datamodel.media.MediaRequest;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.datamodel.media.MediaResourceManager.MediaResourceLoadListener;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.ThreadUtil;
-
-/**
- * An implementation of {@link PhotoManager} that hooks up the chips UI's photos with our own
- * {@link MediaResourceManager} for retrieving and caching contact avatars.
- */
-public class ContactRecipientPhotoManager implements PhotoManager {
-    private static final String IMAGE_BYTES_REQUEST_STATIC_BINDING_ID = "imagebytes";
-    private final Context mContext;
-    private final int mIconSize;
-    private final ContactListItemView.HostInterface mClivHostInterface;
-
-    public ContactRecipientPhotoManager(final Context context,
-            final ContactListItemView.HostInterface clivHostInterface) {
-        mContext = context;
-        mIconSize = context.getResources().getDimensionPixelSize(
-                R.dimen.compose_message_chip_height) - context.getResources().getDimensionPixelSize(
-                        R.dimen.compose_message_chip_padding) * 2;
-        mClivHostInterface = clivHostInterface;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void populatePhotoBytesAsync(final RecipientEntry entry,
-            final PhotoManagerCallback callback) {
-        // Post all media resource request to the main thread.
-        ThreadUtil.getMainThreadHandler().post(new Runnable() {
-            @Override
-            public void run() {
-                final Uri avatarUri = AvatarUriUtil.createAvatarUri(
-                        ParticipantData.getFromRecipientEntry(entry));
-                final AvatarRequestDescriptor descriptor =
-                        new AvatarRequestDescriptor(avatarUri, mIconSize, mIconSize);
-                final BindableMediaRequest<ImageResource> req = descriptor.buildAsyncMediaRequest(
-                        mContext,
-                        new MediaResourceLoadListener<ImageResource>() {
-                    @Override
-                    public void onMediaResourceLoaded(final MediaRequest<ImageResource> request,
-                            final ImageResource resource, final boolean isCached) {
-                        entry.setPhotoBytes(resource.getBytes());
-                        callback.onPhotoBytesAsynchronouslyPopulated();
-                    }
-
-                    @Override
-                    public void onMediaResourceLoadError(final MediaRequest<ImageResource> request,
-                            final Exception exception) {
-                        LogUtil.e(LogUtil.BUGLE_TAG, "Photo bytes loading failed due to " +
-                                exception + " request key=" + request.getKey());
-
-                        // Fall back to the default avatar image.
-                        callback.onPhotoBytesAsyncLoadFailed();
-                    }});
-
-                // Statically bind the request since it's not bound to any specific piece of UI.
-                req.bind(IMAGE_BYTES_REQUEST_STATIC_BINDING_ID);
-
-                Factory.get().getMediaResourceManager().requestMediaResourceAsync(req);
-            }
-        });
-    }
-}
diff --git a/src/com/android/messaging/ui/contact/ContactSectionIndexer.java b/src/com/android/messaging/ui/contact/ContactSectionIndexer.java
deleted file mode 100644
index 1d5abf3..0000000
--- a/src/com/android/messaging/ui/contact/ContactSectionIndexer.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.database.Cursor;
-import android.os.Bundle;
-import android.provider.ContactsContract.Contacts;
-import android.text.TextUtils;
-import android.widget.SectionIndexer;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.LogUtil;
-
-import java.util.ArrayList;
-
-/**
- * Indexes contact alphabetical sections so we can report to the fast scrolling list view
- * where we are in the list when the user scrolls through the contact list, allowing us to show
- * alphabetical indicators for the fast scroller as well as list section headers.
- */
-public class ContactSectionIndexer implements SectionIndexer {
-    private String[] mSections;
-    private ArrayList<Integer> mSectionStartingPositions;
-    private static final String BLANK_HEADER_STRING = " ";
-
-    public ContactSectionIndexer(final Cursor contactsCursor) {
-        buildIndexer(contactsCursor);
-    }
-
-    @Override
-    public Object[] getSections() {
-        return mSections;
-    }
-
-    @Override
-    public int getPositionForSection(final int sectionIndex) {
-        if (mSectionStartingPositions.isEmpty()) {
-            return 0;
-        }
-        // Clamp to the bounds of the section position array per Android API doc.
-        return mSectionStartingPositions.get(
-                Math.max(Math.min(sectionIndex, mSectionStartingPositions.size() - 1), 0));
-    }
-
-    @Override
-    public int getSectionForPosition(final int position) {
-        if (mSectionStartingPositions.isEmpty()) {
-            return 0;
-        }
-
-        // Perform a binary search on the starting positions of the sections to the find the
-        // section for the position.
-        int left = 0;
-        int right = mSectionStartingPositions.size() - 1;
-
-        // According to getSectionForPosition()'s doc, we should always clamp the value when the
-        // position is out of bound.
-        if (position <= mSectionStartingPositions.get(left)) {
-            return left;
-        } else if (position >= mSectionStartingPositions.get(right)) {
-            return right;
-        }
-
-        while (left <= right) {
-            final int mid = (left + right) / 2;
-            final int startingPos = mSectionStartingPositions.get(mid);
-            final int nextStartingPos = mSectionStartingPositions.get(mid + 1);
-            if (position >= startingPos && position < nextStartingPos) {
-                return mid;
-            } else if (position < startingPos) {
-                right = mid - 1;
-            } else if (position >= nextStartingPos) {
-                left = mid + 1;
-            }
-        }
-        Assert.fail("Invalid section indexer state: couldn't find section for pos " + position);
-        return -1;
-    }
-
-    private boolean buildIndexerFromCursorExtras(final Cursor cursor) {
-        if (cursor == null) {
-            return false;
-        }
-        final Bundle cursorExtras = cursor.getExtras();
-        if (cursorExtras == null) {
-            return false;
-        }
-        final String[] sections = cursorExtras.getStringArray(
-                Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES);
-        final int[] counts = cursorExtras.getIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS);
-        if (sections == null || counts == null) {
-            return false;
-        }
-
-        if (sections.length != counts.length) {
-            return false;
-        }
-
-        this.mSections = sections;
-        mSectionStartingPositions = new ArrayList<Integer>(counts.length);
-        int position = 0;
-        for (int i = 0; i < counts.length; i++) {
-            if (TextUtils.isEmpty(mSections[i])) {
-                mSections[i] = BLANK_HEADER_STRING;
-            } else if (!mSections[i].equals(BLANK_HEADER_STRING)) {
-                mSections[i] = mSections[i].trim();
-            }
-
-            mSectionStartingPositions.add(position);
-            position += counts[i];
-        }
-        return true;
-    }
-
-    private void buildIndexerFromDisplayNames(final Cursor cursor) {
-        // Loop through the contact cursor and get the starting position for each first character.
-        // The result is stored into two arrays, one for the section header (i.e. the first
-        // character), and one for the starting position, which is guaranteed to be sorted in
-        // ascending order.
-        final ArrayList<String> sections = new ArrayList<String>();
-        mSectionStartingPositions = new ArrayList<Integer>();
-        if (cursor != null) {
-            cursor.moveToPosition(-1);
-            int currentPosition = 0;
-            while (cursor.moveToNext()) {
-                // The sort key is typically the contact's display name, so for example, a contact
-                // named "Bob" will go into section "B". The Contacts provider generally uses a
-                // a slightly more sophisticated heuristic, but as a fallback this is good enough.
-                final String sortKey = cursor.getString(ContactUtil.INDEX_SORT_KEY);
-                final String section = TextUtils.isEmpty(sortKey) ? BLANK_HEADER_STRING :
-                    sortKey.substring(0, 1).toUpperCase();
-
-                final int lastIndex = sections.size() - 1;
-                final String currentSection = lastIndex >= 0 ? sections.get(lastIndex) : null;
-                if (!TextUtils.equals(currentSection, section)) {
-                    sections.add(section);
-                    mSectionStartingPositions.add(currentPosition);
-                }
-                currentPosition++;
-            }
-        }
-        mSections = new String[sections.size()];
-        sections.toArray(mSections);
-    }
-
-    private void buildIndexer(final Cursor cursor) {
-        // First check if we get indexer label extras from the contact provider; if not, fall back
-        // to building from display names.
-        if (!buildIndexerFromCursorExtras(cursor)) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "contact provider didn't provide contact label " +
-                    "information, fall back to using display name!");
-            buildIndexerFromDisplayNames(cursor);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/contact/FrequentContactsListViewHolder.java b/src/com/android/messaging/ui/contact/FrequentContactsListViewHolder.java
deleted file mode 100644
index 1f3c795..0000000
--- a/src/com/android/messaging/ui/contact/FrequentContactsListViewHolder.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.content.Context;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.CustomHeaderPagerListViewHolder;
-import com.android.messaging.ui.contact.ContactListItemView.HostInterface;
-
-/**
- * Holds the frequent contacts view for the contact picker's view pager.
- */
-public class FrequentContactsListViewHolder extends CustomHeaderPagerListViewHolder {
-    public FrequentContactsListViewHolder(final Context context,
-            final HostInterface clivHostInterface) {
-        super(context, new ContactListAdapter(context, null, clivHostInterface,
-                false /* needAlphabetHeader */));
-    }
-
-    @Override
-    protected int getLayoutResId() {
-        return R.layout.frequent_contacts_list_view;
-    }
-
-    @Override
-    protected int getPageTitleResId() {
-        return R.string.contact_picker_frequents_tab_title;
-    }
-
-    @Override
-    protected int getEmptyViewResId() {
-        return R.id.empty_view;
-    }
-
-    @Override
-    protected int getListViewResId() {
-        return R.id.frequent_contacts_list;
-    }
-
-    @Override
-    protected int getEmptyViewTitleResId() {
-        return R.string.contact_list_empty_text;
-    }
-
-    @Override
-    protected int getEmptyViewImageResId() {
-        return R.drawable.ic_oobe_freq_list;
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ComposeMessageView.java b/src/com/android/messaging/ui/conversation/ComposeMessageView.java
deleted file mode 100644
index c35927e..0000000
--- a/src/com/android/messaging/ui/conversation/ComposeMessageView.java
+++ /dev/null
@@ -1,1019 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-import android.text.Editable;
-import android.text.Html;
-import android.text.InputFilter;
-import android.text.InputFilter.LengthFilter;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.text.format.Formatter;
-import android.util.AttributeSet;
-import android.view.ContextThemeWrapper;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.inputmethod.EditorInfo;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.binding.ImmutableBindingRef;
-import com.android.messaging.datamodel.data.ConversationData;
-import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
-import com.android.messaging.datamodel.data.ConversationData.SimpleConversationDataListener;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.DraftMessageData.CheckDraftForSendTask;
-import com.android.messaging.datamodel.data.DraftMessageData.CheckDraftTaskCallback;
-import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageDataListener;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.PendingAttachmentData;
-import com.android.messaging.datamodel.data.SubscriptionListData.SubscriptionListEntry;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.ui.AttachmentPreview;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.PlainTextEditText;
-import com.android.messaging.ui.conversation.ConversationInputManager.ConversationInputSink;
-import com.android.messaging.util.AccessibilityUtil;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.MediaUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.util.UiUtils;
-import com.android.messaging.util.UriUtil;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * This view contains the UI required to generate and send messages.
- */
-public class ComposeMessageView extends LinearLayout
-        implements TextView.OnEditorActionListener, DraftMessageDataListener, TextWatcher,
-        ConversationInputSink {
-
-    public interface IComposeMessageViewHost extends
-            DraftMessageData.DraftMessageSubscriptionDataProvider {
-        void sendMessage(MessageData message);
-        void onComposeEditTextFocused();
-        void onAttachmentsCleared();
-        void onAttachmentsChanged(final boolean haveAttachments);
-        void displayPhoto(Uri photoUri, Rect imageBounds, boolean isDraft);
-        void promptForSelfPhoneNumber();
-        boolean isReadyForAction();
-        void warnOfMissingActionConditions(final boolean sending,
-                final Runnable commandToRunAfterActionConditionResolved);
-        void warnOfExceedingMessageLimit(final boolean showAttachmentChooser,
-                boolean tooManyVideos);
-        void notifyOfAttachmentLoadFailed();
-        void showAttachmentChooser();
-        boolean shouldShowSubjectEditor();
-        boolean shouldHideAttachmentsWhenSimSelectorShown();
-        Uri getSelfSendButtonIconUri();
-        int overrideCounterColor();
-        int getAttachmentsClearedFlags();
-    }
-
-    public static final int CODEPOINTS_REMAINING_BEFORE_COUNTER_SHOWN = 10;
-
-    // There is no draft and there is no need for the SIM selector
-    private static final int SEND_WIDGET_MODE_SELF_AVATAR = 1;
-    // There is no draft but we need to show the SIM selector
-    private static final int SEND_WIDGET_MODE_SIM_SELECTOR = 2;
-    // There is a draft
-    private static final int SEND_WIDGET_MODE_SEND_BUTTON = 3;
-
-    private PlainTextEditText mComposeEditText;
-    private PlainTextEditText mComposeSubjectText;
-    private TextView mMessageBodySize;
-    private TextView mMmsIndicator;
-    private SimIconView mSelfSendIcon;
-    private ImageButton mSendButton;
-    private View mSubjectView;
-    private ImageButton mDeleteSubjectButton;
-    private AttachmentPreview mAttachmentPreview;
-    private ImageButton mAttachMediaButton;
-
-    private final Binding<DraftMessageData> mBinding;
-    private IComposeMessageViewHost mHost;
-    private final Context mOriginalContext;
-    private int mSendWidgetMode = SEND_WIDGET_MODE_SELF_AVATAR;
-
-    // Shared data model object binding from the conversation.
-    private ImmutableBindingRef<ConversationData> mConversationDataModel;
-
-    // Centrally manages all the mutual exclusive UI components accepting user input, i.e.
-    // media picker, IME keyboard and SIM selector.
-    private ConversationInputManager mInputManager;
-
-    private final ConversationDataListener mDataListener = new SimpleConversationDataListener() {
-        @Override
-        public void onConversationMetadataUpdated(ConversationData data) {
-            mConversationDataModel.ensureBound(data);
-            updateVisualsOnDraftChanged();
-        }
-
-        @Override
-        public void onConversationParticipantDataLoaded(ConversationData data) {
-            mConversationDataModel.ensureBound(data);
-            updateVisualsOnDraftChanged();
-        }
-
-        @Override
-        public void onSubscriptionListDataLoaded(ConversationData data) {
-            mConversationDataModel.ensureBound(data);
-            updateOnSelfSubscriptionChange();
-            updateVisualsOnDraftChanged();
-        }
-    };
-
-    public ComposeMessageView(final Context context, final AttributeSet attrs) {
-        super(new ContextThemeWrapper(context, R.style.ColorAccentBlueOverrideStyle), attrs);
-        mOriginalContext = context;
-        mBinding = BindingBase.createBinding(this);
-    }
-
-    /**
-     * Host calls this to bind view to DraftMessageData object
-     */
-    public void bind(final DraftMessageData data, final IComposeMessageViewHost host) {
-        mHost = host;
-        mBinding.bind(data);
-        data.addListener(this);
-        data.setSubscriptionDataProvider(host);
-
-        final int counterColor = mHost.overrideCounterColor();
-        if (counterColor != -1) {
-            mMessageBodySize.setTextColor(counterColor);
-        }
-    }
-
-    /**
-     * Host calls this to unbind view
-     */
-    public void unbind() {
-        mBinding.unbind();
-        mHost = null;
-        mInputManager.onDetach();
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        mComposeEditText = (PlainTextEditText) findViewById(
-                R.id.compose_message_text);
-        mComposeEditText.setOnEditorActionListener(this);
-        mComposeEditText.addTextChangedListener(this);
-        mComposeEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
-            @Override
-            public void onFocusChange(final View v, final boolean hasFocus) {
-                if (v == mComposeEditText && hasFocus) {
-                    mHost.onComposeEditTextFocused();
-                }
-            }
-        });
-        mComposeEditText.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View arg0) {
-                if (mHost.shouldHideAttachmentsWhenSimSelectorShown()) {
-                    hideSimSelector();
-                }
-            }
-        });
-
-        // onFinishInflate() is called before self is loaded from db. We set the default text
-        // limit here, and apply the real limit later in updateOnSelfSubscriptionChange().
-        mComposeEditText.setFilters(new InputFilter[] {
-                new LengthFilter(MmsConfig.get(ParticipantData.DEFAULT_SELF_SUB_ID)
-                        .getMaxTextLimit()) });
-
-        mSelfSendIcon = (SimIconView) findViewById(R.id.self_send_icon);
-        mSelfSendIcon.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                boolean shown = mInputManager.toggleSimSelector(true /* animate */,
-                        getSelfSubscriptionListEntry());
-                hideAttachmentsWhenShowingSims(shown);
-            }
-        });
-        mSelfSendIcon.setOnLongClickListener(new OnLongClickListener() {
-            @Override
-            public boolean onLongClick(final View v) {
-                if (mHost.shouldShowSubjectEditor()) {
-                    showSubjectEditor();
-                } else {
-                    boolean shown = mInputManager.toggleSimSelector(true /* animate */,
-                            getSelfSubscriptionListEntry());
-                    hideAttachmentsWhenShowingSims(shown);
-                }
-                return true;
-            }
-        });
-
-        mComposeSubjectText = (PlainTextEditText) findViewById(
-                R.id.compose_subject_text);
-        // We need the listener to change the avatar to the send button when the user starts
-        // typing a subject without a message.
-        mComposeSubjectText.addTextChangedListener(this);
-        // onFinishInflate() is called before self is loaded from db. We set the default text
-        // limit here, and apply the real limit later in updateOnSelfSubscriptionChange().
-        mComposeSubjectText.setFilters(new InputFilter[] {
-                new LengthFilter(MmsConfig.get(ParticipantData.DEFAULT_SELF_SUB_ID)
-                        .getMaxSubjectLength())});
-
-        mDeleteSubjectButton = (ImageButton) findViewById(R.id.delete_subject_button);
-        mDeleteSubjectButton.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View clickView) {
-                hideSubjectEditor();
-                mComposeSubjectText.setText(null);
-                mBinding.getData().setMessageSubject(null);
-            }
-        });
-
-        mSubjectView = findViewById(R.id.subject_view);
-
-        mSendButton = (ImageButton) findViewById(R.id.send_message_button);
-        mSendButton.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View clickView) {
-                sendMessageInternal(true /* checkMessageSize */);
-            }
-        });
-        mSendButton.setOnLongClickListener(new OnLongClickListener() {
-            @Override
-            public boolean onLongClick(final View arg0) {
-                boolean shown = mInputManager.toggleSimSelector(true /* animate */,
-                        getSelfSubscriptionListEntry());
-                hideAttachmentsWhenShowingSims(shown);
-                if (mHost.shouldShowSubjectEditor()) {
-                    showSubjectEditor();
-                }
-                return true;
-            }
-        });
-        mSendButton.setAccessibilityDelegate(new AccessibilityDelegate() {
-            @Override
-            public void onPopulateAccessibilityEvent(View host, AccessibilityEvent event) {
-                super.onPopulateAccessibilityEvent(host, event);
-                // When the send button is long clicked, we want TalkBack to announce the real
-                // action (select SIM or edit subject), as opposed to "long press send button."
-                if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_LONG_CLICKED) {
-                    event.getText().clear();
-                    event.getText().add(getResources()
-                            .getText(shouldShowSimSelector(mConversationDataModel.getData()) ?
-                            R.string.send_button_long_click_description_with_sim_selector :
-                                R.string.send_button_long_click_description_no_sim_selector));
-                    // Make this an announcement so TalkBack will read our custom message.
-                    event.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT);
-                }
-            }
-        });
-
-        mAttachMediaButton =
-                (ImageButton) findViewById(R.id.attach_media_button);
-        mAttachMediaButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(final View clickView) {
-                // Showing the media picker is treated as starting to compose the message.
-                mInputManager.showHideMediaPicker(true /* show */, true /* animate */);
-            }
-        });
-
-        mAttachmentPreview = (AttachmentPreview) findViewById(R.id.attachment_draft_view);
-        mAttachmentPreview.setComposeMessageView(this);
-
-        mMessageBodySize = (TextView) findViewById(R.id.message_body_size);
-        mMmsIndicator = (TextView) findViewById(R.id.mms_indicator);
-    }
-
-    private void hideAttachmentsWhenShowingSims(final boolean simPickerVisible) {
-        if (!mHost.shouldHideAttachmentsWhenSimSelectorShown()) {
-            return;
-        }
-        final boolean haveAttachments = mBinding.getData().hasAttachments();
-        if (simPickerVisible && haveAttachments) {
-            mHost.onAttachmentsChanged(false);
-            mAttachmentPreview.hideAttachmentPreview();
-        } else {
-            mHost.onAttachmentsChanged(haveAttachments);
-            mAttachmentPreview.onAttachmentsChanged(mBinding.getData());
-        }
-    }
-
-    public void setInputManager(final ConversationInputManager inputManager) {
-        mInputManager = inputManager;
-    }
-
-    public void setConversationDataModel(final ImmutableBindingRef<ConversationData> refDataModel) {
-        mConversationDataModel = refDataModel;
-        mConversationDataModel.getData().addConversationDataListener(mDataListener);
-    }
-
-    ImmutableBindingRef<DraftMessageData> getDraftDataModel() {
-        return BindingBase.createBindingReference(mBinding);
-    }
-
-    // returns true if it actually shows the subject editor and false if already showing
-    private boolean showSubjectEditor() {
-        // show the subject editor
-        if (mSubjectView.getVisibility() == View.GONE) {
-            mSubjectView.setVisibility(View.VISIBLE);
-            mSubjectView.requestFocus();
-            return true;
-        }
-        return false;
-    }
-
-    private void hideSubjectEditor() {
-        mSubjectView.setVisibility(View.GONE);
-        mComposeEditText.requestFocus();
-    }
-
-    /**
-     * {@inheritDoc} from TextView.OnEditorActionListener
-     */
-    @Override // TextView.OnEditorActionListener.onEditorAction
-    public boolean onEditorAction(final TextView view, final int actionId, final KeyEvent event) {
-        if (actionId == EditorInfo.IME_ACTION_SEND) {
-            sendMessageInternal(true /* checkMessageSize */);
-            return true;
-        }
-        return false;
-    }
-
-    private void sendMessageInternal(final boolean checkMessageSize) {
-        LogUtil.i(LogUtil.BUGLE_TAG, "UI initiated message sending in conversation " +
-                mBinding.getData().getConversationId());
-        if (mBinding.getData().isCheckingDraft()) {
-            // Don't send message if we are currently checking draft for sending.
-            LogUtil.w(LogUtil.BUGLE_TAG, "Message can't be sent: still checking draft");
-            return;
-        }
-        // Check the host for pre-conditions about any action.
-        if (mHost.isReadyForAction()) {
-            mInputManager.showHideSimSelector(false /* show */, true /* animate */);
-            final String messageToSend = mComposeEditText.getText().toString();
-            mBinding.getData().setMessageText(messageToSend);
-            final String subject = mComposeSubjectText.getText().toString();
-            mBinding.getData().setMessageSubject(subject);
-            // Asynchronously check the draft against various requirements before sending.
-            mBinding.getData().checkDraftForAction(checkMessageSize,
-                    mHost.getConversationSelfSubId(), new CheckDraftTaskCallback() {
-                @Override
-                public void onDraftChecked(DraftMessageData data, int result) {
-                    mBinding.ensureBound(data);
-                    switch (result) {
-                        case CheckDraftForSendTask.RESULT_PASSED:
-                            // Continue sending after check succeeded.
-                            final MessageData message = mBinding.getData()
-                                    .prepareMessageForSending(mBinding);
-                            if (message != null && message.hasContent()) {
-                                playSentSound();
-                                mHost.sendMessage(message);
-                                hideSubjectEditor();
-                                if (AccessibilityUtil.isTouchExplorationEnabled(getContext())) {
-                                    AccessibilityUtil.announceForAccessibilityCompat(
-                                            ComposeMessageView.this, null,
-                                            R.string.sending_message);
-                                }
-                            }
-                            break;
-
-                        case CheckDraftForSendTask.RESULT_HAS_PENDING_ATTACHMENTS:
-                            // Cannot send while there's still attachment(s) being loaded.
-                            UiUtils.showToastAtBottom(
-                                    R.string.cant_send_message_while_loading_attachments);
-                            break;
-
-                        case CheckDraftForSendTask.RESULT_NO_SELF_PHONE_NUMBER_IN_GROUP_MMS:
-                            mHost.promptForSelfPhoneNumber();
-                            break;
-
-                        case CheckDraftForSendTask.RESULT_MESSAGE_OVER_LIMIT:
-                            Assert.isTrue(checkMessageSize);
-                            mHost.warnOfExceedingMessageLimit(
-                                    true /*sending*/, false /* tooManyVideos */);
-                            break;
-
-                        case CheckDraftForSendTask.RESULT_VIDEO_ATTACHMENT_LIMIT_EXCEEDED:
-                            Assert.isTrue(checkMessageSize);
-                            mHost.warnOfExceedingMessageLimit(
-                                    true /*sending*/, true /* tooManyVideos */);
-                            break;
-
-                        case CheckDraftForSendTask.RESULT_SIM_NOT_READY:
-                            // Cannot send if there is no active subscription
-                            UiUtils.showToastAtBottom(
-                                    R.string.cant_send_message_without_active_subscription);
-                            break;
-
-                        default:
-                            break;
-                    }
-                }
-            }, mBinding);
-        } else {
-            mHost.warnOfMissingActionConditions(true /*sending*/,
-                    new Runnable() {
-                        @Override
-                        public void run() {
-                            sendMessageInternal(checkMessageSize);
-                        }
-
-            });
-        }
-    }
-
-    public static void playSentSound() {
-        // Check if this setting is enabled before playing
-        final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-        final Context context = Factory.get().getApplicationContext();
-        final String prefKey = context.getString(R.string.send_sound_pref_key);
-        final boolean defaultValue = context.getResources().getBoolean(
-                R.bool.send_sound_pref_default);
-        if (!prefs.getBoolean(prefKey, defaultValue)) {
-            return;
-        }
-        MediaUtil.get().playSound(context, R.raw.message_sent, null /* completionListener */);
-    }
-
-    /**
-     * {@inheritDoc} from DraftMessageDataListener
-     */
-    @Override // From DraftMessageDataListener
-    public void onDraftChanged(final DraftMessageData data, final int changeFlags) {
-        // As this is called asynchronously when message read check bound before updating text
-        mBinding.ensureBound(data);
-
-        // We have to cache the values of the DraftMessageData because when we set
-        // mComposeEditText, its onTextChanged calls updateVisualsOnDraftChanged,
-        // which immediately reloads the text from the subject and message fields and replaces
-        // what's in the DraftMessageData.
-
-        final String subject = data.getMessageSubject();
-        final String message = data.getMessageText();
-
-        boolean hasAttachmentsChanged = false;
-
-        if ((changeFlags & DraftMessageData.MESSAGE_SUBJECT_CHANGED) ==
-                DraftMessageData.MESSAGE_SUBJECT_CHANGED) {
-            mComposeSubjectText.setText(subject);
-
-            // Set the cursor selection to the end since setText resets it to the start
-            mComposeSubjectText.setSelection(mComposeSubjectText.getText().length());
-        }
-
-        if ((changeFlags & DraftMessageData.MESSAGE_TEXT_CHANGED) ==
-                DraftMessageData.MESSAGE_TEXT_CHANGED) {
-            mComposeEditText.setText(message);
-
-            // Set the cursor selection to the end since setText resets it to the start
-            mComposeEditText.setSelection(mComposeEditText.getText().length());
-        }
-
-        if ((changeFlags & DraftMessageData.ATTACHMENTS_CHANGED) ==
-                DraftMessageData.ATTACHMENTS_CHANGED) {
-            final boolean haveAttachments = mAttachmentPreview.onAttachmentsChanged(data);
-            mHost.onAttachmentsChanged(haveAttachments);
-            hasAttachmentsChanged = true;
-        }
-
-        if ((changeFlags & DraftMessageData.SELF_CHANGED) == DraftMessageData.SELF_CHANGED) {
-            updateOnSelfSubscriptionChange();
-        }
-        updateVisualsOnDraftChanged(hasAttachmentsChanged);
-    }
-
-    @Override   // From DraftMessageDataListener
-    public void onDraftAttachmentLimitReached(final DraftMessageData data) {
-        mBinding.ensureBound(data);
-        mHost.warnOfExceedingMessageLimit(false /* sending */, false /* tooManyVideos */);
-    }
-
-    private void updateOnSelfSubscriptionChange() {
-        // Refresh the length filters according to the selected self's MmsConfig.
-        mComposeEditText.setFilters(new InputFilter[] {
-                new LengthFilter(MmsConfig.get(mBinding.getData().getSelfSubId())
-                        .getMaxTextLimit()) });
-        mComposeSubjectText.setFilters(new InputFilter[] {
-                new LengthFilter(MmsConfig.get(mBinding.getData().getSelfSubId())
-                        .getMaxSubjectLength())});
-    }
-
-    @Override
-    public void onMediaItemsSelected(final Collection<MessagePartData> items) {
-        mBinding.getData().addAttachments(items);
-        announceMediaItemState(true /*isSelected*/);
-    }
-
-    @Override
-    public void onMediaItemsUnselected(final MessagePartData item) {
-        mBinding.getData().removeAttachment(item);
-        announceMediaItemState(false /*isSelected*/);
-    }
-
-    @Override
-    public void onPendingAttachmentAdded(final PendingAttachmentData pendingItem) {
-        mBinding.getData().addPendingAttachment(pendingItem, mBinding);
-        resumeComposeMessage();
-    }
-
-    private void announceMediaItemState(final boolean isSelected) {
-        final Resources res = getContext().getResources();
-        final String announcement = isSelected ? res.getString(
-                R.string.mediapicker_gallery_item_selected_content_description) :
-                    res.getString(R.string.mediapicker_gallery_item_unselected_content_description);
-        AccessibilityUtil.announceForAccessibilityCompat(
-                this, null, announcement);
-    }
-
-    private void announceAttachmentState() {
-        if (AccessibilityUtil.isTouchExplorationEnabled(getContext())) {
-            int attachmentCount = mBinding.getData().getReadOnlyAttachments().size()
-                    + mBinding.getData().getReadOnlyPendingAttachments().size();
-            final String announcement = getContext().getResources().getQuantityString(
-                    R.plurals.attachment_changed_accessibility_announcement,
-                    attachmentCount, attachmentCount);
-            AccessibilityUtil.announceForAccessibilityCompat(
-                    this, null, announcement);
-        }
-    }
-
-    @Override
-    public void resumeComposeMessage() {
-        mComposeEditText.requestFocus();
-        mInputManager.showHideImeKeyboard(true, true);
-        announceAttachmentState();
-    }
-
-    public void clearAttachments() {
-        mBinding.getData().clearAttachments(mHost.getAttachmentsClearedFlags());
-        mHost.onAttachmentsCleared();
-    }
-
-    public void requestDraftMessage(boolean clearLocalDraft) {
-        mBinding.getData().loadFromStorage(mBinding, null, clearLocalDraft);
-    }
-
-    public void setDraftMessage(final MessageData message) {
-        mBinding.getData().loadFromStorage(mBinding, message, false);
-    }
-
-    public void writeDraftMessage() {
-        final String messageText = mComposeEditText.getText().toString();
-        mBinding.getData().setMessageText(messageText);
-
-        final String subject = mComposeSubjectText.getText().toString();
-        mBinding.getData().setMessageSubject(subject);
-
-        mBinding.getData().saveToStorage(mBinding);
-    }
-
-    private void updateConversationSelfId(final String selfId, final boolean notify) {
-        mBinding.getData().setSelfId(selfId, notify);
-    }
-
-    private Uri getSelfSendButtonIconUri() {
-        final Uri overridenSelfUri = mHost.getSelfSendButtonIconUri();
-        if (overridenSelfUri != null) {
-            return overridenSelfUri;
-        }
-        final SubscriptionListEntry subscriptionListEntry = getSelfSubscriptionListEntry();
-
-        if (subscriptionListEntry != null) {
-            return subscriptionListEntry.selectedIconUri;
-        }
-
-        // Fall back to default self-avatar in the base case.
-        final ParticipantData self = mConversationDataModel.getData().getDefaultSelfParticipant();
-        return self == null ? null : AvatarUriUtil.createAvatarUri(self);
-    }
-
-    private SubscriptionListEntry getSelfSubscriptionListEntry() {
-        return mConversationDataModel.getData().getSubscriptionEntryForSelfParticipant(
-                mBinding.getData().getSelfId(), false /* excludeDefault */);
-    }
-
-    private boolean isDataLoadedForMessageSend() {
-        // Check data loading prerequisites for sending a message.
-        return mConversationDataModel != null && mConversationDataModel.isBound() &&
-                mConversationDataModel.getData().getParticipantsLoaded();
-    }
-
-    private static class AsyncUpdateMessageBodySizeTask
-            extends SafeAsyncTask<List<MessagePartData>, Void, Long> {
-
-        private final Context mContext;
-        private final TextView mSizeTextView;
-
-        public AsyncUpdateMessageBodySizeTask(final Context context, final TextView tv) {
-            mContext = context;
-            mSizeTextView = tv;
-        }
-
-        @Override
-        protected Long doInBackgroundTimed(final List<MessagePartData>... params) {
-            final List<MessagePartData> attachments = params[0];
-            long totalSize = 0;
-            for (final MessagePartData attachment : attachments) {
-                final Uri contentUri = attachment.getContentUri();
-                if (contentUri != null) {
-                    totalSize += UriUtil.getContentSize(attachment.getContentUri());
-                }
-            }
-            return totalSize;
-        }
-
-        @Override
-        protected void onPostExecute(Long size) {
-            if (mSizeTextView != null) {
-                mSizeTextView.setText(Formatter.formatFileSize(mContext, size));
-                mSizeTextView.setVisibility(View.VISIBLE);
-            }
-        }
-    }
-
-    private void updateVisualsOnDraftChanged() {
-        updateVisualsOnDraftChanged(false);
-    }
-
-    private void updateVisualsOnDraftChanged(boolean hasAttachmentsChanged) {
-        final String messageText = mComposeEditText.getText().toString();
-        final DraftMessageData draftMessageData = mBinding.getData();
-        draftMessageData.setMessageText(messageText);
-
-        final String subject = mComposeSubjectText.getText().toString();
-        draftMessageData.setMessageSubject(subject);
-        if (!TextUtils.isEmpty(subject)) {
-             mSubjectView.setVisibility(View.VISIBLE);
-        }
-
-        final boolean hasMessageText = (TextUtils.getTrimmedLength(messageText) > 0);
-        final boolean hasSubject = (TextUtils.getTrimmedLength(subject) > 0);
-        final boolean hasWorkingDraft = hasMessageText || hasSubject ||
-                mBinding.getData().hasAttachments();
-
-        final List<MessagePartData> attachments =
-                new ArrayList<MessagePartData>(draftMessageData.getReadOnlyAttachments());
-        if (draftMessageData.getIsMms()) { // MMS case
-            if (draftMessageData.hasAttachments()) {
-                if (hasAttachmentsChanged) {
-                    // Calculate message attachments size and show it.
-                    new AsyncUpdateMessageBodySizeTask(getContext(), mMessageBodySize)
-                            .executeOnThreadPool(attachments, null, null);
-                } else {
-                    // No update. Just show previous size.
-                    mMessageBodySize.setVisibility(View.VISIBLE);
-                }
-            } else {
-                mMessageBodySize.setVisibility(View.INVISIBLE);
-            }
-        } else { // SMS case
-            // Update the SMS text counter.
-            final int messageCount = draftMessageData.getNumMessagesToBeSent();
-            final int codePointsRemaining =
-                    draftMessageData.getCodePointsRemainingInCurrentMessage();
-            // Show the counter only if we are going to send more than one message OR we are getting
-            // close.
-            if (messageCount > 1
-                    || codePointsRemaining <= CODEPOINTS_REMAINING_BEFORE_COUNTER_SHOWN) {
-                // Update the remaining characters and number of messages required.
-                final String counterText =
-                        messageCount > 1
-                                ? codePointsRemaining + " / " + messageCount
-                                : String.valueOf(codePointsRemaining);
-                mMessageBodySize.setText(counterText);
-                mMessageBodySize.setVisibility(View.VISIBLE);
-            } else {
-                mMessageBodySize.setVisibility(View.INVISIBLE);
-            }
-        }
-
-        // Update the send message button. Self icon uri might be null if self participant data
-        // and/or conversation metadata hasn't been loaded by the host.
-        final Uri selfSendButtonUri = getSelfSendButtonIconUri();
-        int sendWidgetMode = SEND_WIDGET_MODE_SELF_AVATAR;
-        if (selfSendButtonUri != null) {
-            if (hasWorkingDraft && isDataLoadedForMessageSend()) {
-                UiUtils.revealOrHideViewWithAnimation(mSendButton, VISIBLE, null);
-                if (isOverriddenAvatarAGroup()) {
-                    // If the host has overriden the avatar to show a group avatar where the
-                    // send button sits, we have to hide the group avatar because it can be larger
-                    // than the send button and pieces of the avatar will stick out from behind
-                    // the send button.
-                    UiUtils.revealOrHideViewWithAnimation(mSelfSendIcon, GONE, null);
-                }
-                mMmsIndicator.setVisibility(draftMessageData.getIsMms() ? VISIBLE : INVISIBLE);
-                sendWidgetMode = SEND_WIDGET_MODE_SEND_BUTTON;
-            } else {
-                mSelfSendIcon.setImageResourceUri(selfSendButtonUri);
-                if (isOverriddenAvatarAGroup()) {
-                    UiUtils.revealOrHideViewWithAnimation(mSelfSendIcon, VISIBLE, null);
-                }
-                UiUtils.revealOrHideViewWithAnimation(mSendButton, GONE, null);
-                mMmsIndicator.setVisibility(INVISIBLE);
-                if (shouldShowSimSelector(mConversationDataModel.getData())) {
-                    sendWidgetMode = SEND_WIDGET_MODE_SIM_SELECTOR;
-                }
-            }
-        } else {
-            mSelfSendIcon.setImageResourceUri(null);
-        }
-
-        if (mSendWidgetMode != sendWidgetMode || sendWidgetMode == SEND_WIDGET_MODE_SIM_SELECTOR) {
-            setSendButtonAccessibility(sendWidgetMode);
-            mSendWidgetMode = sendWidgetMode;
-        }
-
-        // Update the text hint on the message box depending on the attachment type.
-        final int attachmentCount = attachments.size();
-        if (attachmentCount == 0) {
-            final SubscriptionListEntry subscriptionListEntry =
-                    mConversationDataModel.getData().getSubscriptionEntryForSelfParticipant(
-                            mBinding.getData().getSelfId(), false /* excludeDefault */);
-            if (subscriptionListEntry == null) {
-                mComposeEditText.setHint(R.string.compose_message_view_hint_text);
-            } else {
-                mComposeEditText.setHint(Html.fromHtml(getResources().getString(
-                        R.string.compose_message_view_hint_text_multi_sim,
-                        subscriptionListEntry.displayName)));
-            }
-        } else {
-            int type = -1;
-            for (final MessagePartData attachment : attachments) {
-                int newType;
-                if (attachment.isImage()) {
-                    newType = ContentType.TYPE_IMAGE;
-                } else if (attachment.isAudio()) {
-                    newType = ContentType.TYPE_AUDIO;
-                } else if (attachment.isVideo()) {
-                    newType = ContentType.TYPE_VIDEO;
-                } else if (attachment.isVCard()) {
-                    newType = ContentType.TYPE_VCARD;
-                } else {
-                    newType = ContentType.TYPE_OTHER;
-                }
-
-                if (type == -1) {
-                    type = newType;
-                } else if (type != newType || type == ContentType.TYPE_OTHER) {
-                    type = ContentType.TYPE_OTHER;
-                    break;
-                }
-            }
-
-            switch (type) {
-                case ContentType.TYPE_IMAGE:
-                    mComposeEditText.setHint(getResources().getQuantityString(
-                            R.plurals.compose_message_view_hint_text_photo, attachmentCount));
-                    break;
-
-                case ContentType.TYPE_AUDIO:
-                    mComposeEditText.setHint(getResources().getQuantityString(
-                            R.plurals.compose_message_view_hint_text_audio, attachmentCount));
-                    break;
-
-                case ContentType.TYPE_VIDEO:
-                    mComposeEditText.setHint(getResources().getQuantityString(
-                            R.plurals.compose_message_view_hint_text_video, attachmentCount));
-                    break;
-
-                case ContentType.TYPE_VCARD:
-                    mComposeEditText.setHint(getResources().getQuantityString(
-                            R.plurals.compose_message_view_hint_text_vcard, attachmentCount));
-                    break;
-
-                case ContentType.TYPE_OTHER:
-                    mComposeEditText.setHint(getResources().getQuantityString(
-                            R.plurals.compose_message_view_hint_text_attachments, attachmentCount));
-                    break;
-
-                default:
-                    Assert.fail("Unsupported attachment type!");
-                    break;
-            }
-        }
-    }
-
-    private void setSendButtonAccessibility(final int sendWidgetMode) {
-        switch (sendWidgetMode) {
-            case SEND_WIDGET_MODE_SELF_AVATAR:
-                // No send button and no SIM selector; the self send button is no longer
-                // important for accessibility.
-                mSelfSendIcon.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
-                mSelfSendIcon.setContentDescription(null);
-                mSendButton.setVisibility(View.GONE);
-                setSendWidgetAccessibilityTraversalOrder(SEND_WIDGET_MODE_SELF_AVATAR);
-                break;
-
-            case SEND_WIDGET_MODE_SIM_SELECTOR:
-                mSelfSendIcon.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
-                mSelfSendIcon.setContentDescription(getSimContentDescription());
-                setSendWidgetAccessibilityTraversalOrder(SEND_WIDGET_MODE_SIM_SELECTOR);
-                break;
-
-            case SEND_WIDGET_MODE_SEND_BUTTON:
-                mMmsIndicator.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
-                mMmsIndicator.setContentDescription(null);
-                setSendWidgetAccessibilityTraversalOrder(SEND_WIDGET_MODE_SEND_BUTTON);
-                break;
-        }
-    }
-
-    private String getSimContentDescription() {
-        final SubscriptionListEntry sub = getSelfSubscriptionListEntry();
-        if (sub != null) {
-            return getResources().getString(
-                    R.string.sim_selector_button_content_description_with_selection,
-                    sub.displayName);
-        } else {
-            return getResources().getString(
-                    R.string.sim_selector_button_content_description);
-        }
-    }
-
-    // Set accessibility traversal order of the components in the send widget.
-    private void setSendWidgetAccessibilityTraversalOrder(final int mode) {
-        if (OsUtil.isAtLeastL_MR1()) {
-            mAttachMediaButton.setAccessibilityTraversalBefore(R.id.compose_message_text);
-            switch (mode) {
-                case SEND_WIDGET_MODE_SIM_SELECTOR:
-                    mComposeEditText.setAccessibilityTraversalBefore(R.id.self_send_icon);
-                    break;
-                case SEND_WIDGET_MODE_SEND_BUTTON:
-                    mComposeEditText.setAccessibilityTraversalBefore(R.id.send_message_button);
-                    break;
-                default:
-                    break;
-            }
-        }
-    }
-
-    @Override
-    public void afterTextChanged(final Editable editable) {
-    }
-
-    @Override
-    public void beforeTextChanged(final CharSequence s, final int start, final int count,
-            final int after) {
-        if (mHost.shouldHideAttachmentsWhenSimSelectorShown()) {
-            hideSimSelector();
-        }
-    }
-
-    private void hideSimSelector() {
-        if (mInputManager.showHideSimSelector(false /* show */, true /* animate */)) {
-            // Now that the sim selector has been hidden, reshow the attachments if they
-            // have been hidden.
-            hideAttachmentsWhenShowingSims(false /*simPickerVisible*/);
-        }
-    }
-
-    @Override
-    public void onTextChanged(final CharSequence s, final int start, final int before,
-            final int count) {
-        final BugleActionBarActivity activity = (mOriginalContext instanceof BugleActionBarActivity)
-                ? (BugleActionBarActivity) mOriginalContext : null;
-        if (activity != null && activity.getIsDestroyed()) {
-            LogUtil.v(LogUtil.BUGLE_TAG, "got onTextChanged after onDestroy");
-
-            // if we get onTextChanged after the activity is destroyed then, ah, wtf
-            // b/18176615
-            // This appears to have occurred as the result of orientation change.
-            return;
-        }
-
-        mBinding.ensureBound();
-        updateVisualsOnDraftChanged();
-    }
-
-    @Override
-    public PlainTextEditText getComposeEditText() {
-        return mComposeEditText;
-    }
-
-    public void displayPhoto(final Uri photoUri, final Rect imageBounds) {
-        mHost.displayPhoto(photoUri, imageBounds, true /* isDraft */);
-    }
-
-    public void updateConversationSelfIdOnExternalChange(final String selfId) {
-        updateConversationSelfId(selfId, true /* notify */);
-    }
-
-    /**
-     * The selfId of the conversation. As soon as the DraftMessageData successfully loads (i.e.
-     * getSelfId() is non-null), the selfId in DraftMessageData is treated as the sole source
-     * of truth for conversation self id since it reflects any pending self id change the user
-     * makes in the UI.
-     */
-    public String getConversationSelfId() {
-        return mBinding.getData().getSelfId();
-    }
-
-    public void selectSim(SubscriptionListEntry subscriptionData) {
-        final String oldSelfId = getConversationSelfId();
-        final String newSelfId = subscriptionData.selfParticipantId;
-        Assert.notNull(newSelfId);
-        // Don't attempt to change self if self hasn't been loaded, or if self hasn't changed.
-        if (oldSelfId == null || TextUtils.equals(oldSelfId, newSelfId)) {
-            return;
-        }
-        updateConversationSelfId(newSelfId, true /* notify */);
-    }
-
-    public void hideAllComposeInputs(final boolean animate) {
-        mInputManager.hideAllInputs(animate);
-    }
-
-    public void saveInputState(final Bundle outState) {
-        mInputManager.onSaveInputState(outState);
-    }
-
-    public void resetMediaPickerState() {
-        mInputManager.resetMediaPickerState();
-    }
-
-    public boolean onBackPressed() {
-        return mInputManager.onBackPressed();
-    }
-
-    public boolean onNavigationUpPressed() {
-        return mInputManager.onNavigationUpPressed();
-    }
-
-    public boolean updateActionBar(final ActionBar actionBar) {
-        return mInputManager != null ? mInputManager.updateActionBar(actionBar) : false;
-    }
-
-    public static boolean shouldShowSimSelector(final ConversationData convData) {
-        return OsUtil.isAtLeastL_MR1() &&
-                convData.getSelfParticipantsCountExcludingDefault(true /* activeOnly */) > 1;
-    }
-
-    public void sendMessageIgnoreMessageSizeLimit() {
-        sendMessageInternal(false /* checkMessageSize */);
-    }
-
-    public void onAttachmentPreviewLongClicked() {
-        mHost.showAttachmentChooser();
-    }
-
-    @Override
-    public void onDraftAttachmentLoadFailed() {
-        mHost.notifyOfAttachmentLoadFailed();
-    }
-
-    private boolean isOverriddenAvatarAGroup() {
-        final Uri overridenSelfUri = mHost.getSelfSendButtonIconUri();
-        if (overridenSelfUri == null) {
-            return false;
-        }
-        return AvatarUriUtil.TYPE_GROUP_URI.equals(AvatarUriUtil.getAvatarType(overridenSelfUri));
-    }
-
-    @Override
-    public void setAccessibility(boolean enabled) {
-        if (enabled) {
-            mAttachMediaButton.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
-            mComposeEditText.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
-            mSendButton.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
-            setSendButtonAccessibility(mSendWidgetMode);
-        } else {
-            mSelfSendIcon.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
-            mComposeEditText.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
-            mSendButton.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
-            mAttachMediaButton.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ConversationActivity.java b/src/com/android/messaging/ui/conversation/ConversationActivity.java
deleted file mode 100644
index d8d3157..0000000
--- a/src/com/android/messaging/ui/conversation/ConversationActivity.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.Intent;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-import android.text.TextUtils;
-import android.view.MenuItem;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.contact.ContactPickerFragment;
-import com.android.messaging.ui.contact.ContactPickerFragment.ContactPickerFragmentHost;
-import com.android.messaging.ui.conversation.ConversationActivityUiState.ConversationActivityUiStateHost;
-import com.android.messaging.ui.conversation.ConversationFragment.ConversationFragmentHost;
-import com.android.messaging.ui.conversationlist.ConversationListActivity;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.UiUtils;
-
-public class ConversationActivity extends BugleActionBarActivity
-        implements ContactPickerFragmentHost, ConversationFragmentHost,
-        ConversationActivityUiStateHost {
-    public static final int FINISH_RESULT_CODE = 1;
-    private static final String SAVED_INSTANCE_STATE_UI_STATE_KEY = "uistate";
-
-    private ConversationActivityUiState mUiState;
-
-    // Fragment transactions cannot be performed after onSaveInstanceState() has been called since
-    // it will cause state loss. We don't want to call commitAllowingStateLoss() since it's
-    // dangerous. Therefore, we note when instance state is saved and avoid performing UI state
-    // updates concerning fragments past that point.
-    private boolean mInstanceStateSaved;
-
-    // Tracks whether onPause is called.
-    private boolean mIsPaused;
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        setContentView(R.layout.conversation_activity);
-
-        final Intent intent = getIntent();
-
-        // Do our best to restore UI state from saved instance state.
-        if (savedInstanceState != null) {
-            mUiState = savedInstanceState.getParcelable(SAVED_INSTANCE_STATE_UI_STATE_KEY);
-        } else {
-            if (intent.
-                    getBooleanExtra(UIIntents.UI_INTENT_EXTRA_GOTO_CONVERSATION_LIST, false)) {
-                // See the comment in BugleWidgetService.getViewMoreConversationsView() why this
-                // is unfortunately necessary. The Bugle desktop widget can display a list of
-                // conversations. When there are more conversations that can be displayed in
-                // the widget, the last item is a "More conversations" item. The way widgets
-                // are built, the list items can only go to a single fill-in intent which points
-                // to this ConversationActivity. When the user taps on "More conversations", we
-                // really want to go to the ConversationList. This code makes that possible.
-                finish();
-                final Intent convListIntent = new Intent(this, ConversationListActivity.class);
-                convListIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                startActivity(convListIntent);
-                return;
-            }
-        }
-
-        // If saved instance state doesn't offer a clue, get the info from the intent.
-        if (mUiState == null) {
-            final String conversationId = intent.getStringExtra(
-                    UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID);
-            mUiState = new ConversationActivityUiState(conversationId);
-        }
-        mUiState.setHost(this);
-        mInstanceStateSaved = false;
-
-        // Don't animate UI state change for initial setup.
-        updateUiState(false /* animate */);
-
-        // See if we're getting called from a widget to directly display an image or video
-        final String extraToDisplay =
-                intent.getStringExtra(UIIntents.UI_INTENT_EXTRA_ATTACHMENT_URI);
-        if (!TextUtils.isEmpty(extraToDisplay)) {
-            final String contentType =
-                    intent.getStringExtra(UIIntents.UI_INTENT_EXTRA_ATTACHMENT_TYPE);
-            final Rect bounds = UiUtils.getMeasuredBoundsOnScreen(
-                    findViewById(R.id.conversation_and_compose_container));
-            if (ContentType.isImageType(contentType)) {
-                final Uri imagesUri = MessagingContentProvider.buildConversationImagesUri(
-                        mUiState.getConversationId());
-                UIIntents.get().launchFullScreenPhotoViewer(
-                        this, Uri.parse(extraToDisplay), bounds, imagesUri);
-            } else if (ContentType.isVideoType(contentType)) {
-                UIIntents.get().launchFullScreenVideoViewer(this, Uri.parse(extraToDisplay));
-            }
-        }
-    }
-
-    @Override
-    protected void onSaveInstanceState(final Bundle outState) {
-        super.onSaveInstanceState(outState);
-        // After onSaveInstanceState() is called, future changes to mUiState won't update the UI
-        // anymore, because fragment transactions are not allowed past this point.
-        // For an activity recreation due to orientation change, the saved instance state keeps
-        // using the in-memory copy of the UI state instead of writing it to parcel as an
-        // optimization, so the UI state values may still change in response to, for example,
-        // focus change from the framework, making mUiState and actual UI inconsistent.
-        // Therefore, save an exact "snapshot" (clone) of the UI state object to make sure the
-        // restored UI state ALWAYS matches the actual restored UI components.
-        outState.putParcelable(SAVED_INSTANCE_STATE_UI_STATE_KEY, mUiState.clone());
-        mInstanceStateSaved = true;
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-
-        // we need to reset the mInstanceStateSaved flag since we may have just been restored from
-        // a previous onStop() instead of an onDestroy().
-        mInstanceStateSaved = false;
-        mIsPaused = false;
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        mIsPaused = true;
-    }
-
-    @Override
-    public void onWindowFocusChanged(final boolean hasFocus) {
-        super.onWindowFocusChanged(hasFocus);
-        final ConversationFragment conversationFragment = getConversationFragment();
-        // When the screen is turned on, the last used activity gets resumed, but it gets
-        // window focus only after the lock screen is unlocked.
-        if (hasFocus && conversationFragment != null) {
-            conversationFragment.setConversationFocus();
-        }
-    }
-
-    @Override
-    public void onDisplayHeightChanged(final int heightSpecification) {
-        super.onDisplayHeightChanged(heightSpecification);
-        invalidateActionBar();
-    }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        if (mUiState != null) {
-            mUiState.setHost(null);
-        }
-    }
-
-    @Override
-    public void updateActionBar(final ActionBar actionBar) {
-        super.updateActionBar(actionBar);
-        final ConversationFragment conversation = getConversationFragment();
-        final ContactPickerFragment contactPicker = getContactPicker();
-        if (contactPicker != null && mUiState.shouldShowContactPickerFragment()) {
-            contactPicker.updateActionBar(actionBar);
-        } else if (conversation != null && mUiState.shouldShowConversationFragment()) {
-            conversation.updateActionBar(actionBar);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem menuItem) {
-        if (super.onOptionsItemSelected(menuItem)) {
-            return true;
-        }
-        if (menuItem.getItemId() == android.R.id.home) {
-            onNavigationUpPressed();
-            return true;
-        }
-        return false;
-    }
-
-    public void onNavigationUpPressed() {
-        // Let the conversation fragment handle the navigation up press.
-        final ConversationFragment conversationFragment = getConversationFragment();
-        if (conversationFragment != null && conversationFragment.onNavigationUpPressed()) {
-            return;
-        }
-        onFinishCurrentConversation();
-    }
-
-    @Override
-    public void onBackPressed() {
-        // If action mode is active dismiss it
-        if (getActionMode() != null) {
-            dismissActionMode();
-            return;
-        }
-
-        // Let the conversation fragment handle the back press.
-        final ConversationFragment conversationFragment = getConversationFragment();
-        if (conversationFragment != null && conversationFragment.onBackPressed()) {
-            return;
-        }
-        super.onBackPressed();
-    }
-
-    private ContactPickerFragment getContactPicker() {
-        return (ContactPickerFragment) getFragmentManager().findFragmentByTag(
-                ContactPickerFragment.FRAGMENT_TAG);
-    }
-
-    private ConversationFragment getConversationFragment() {
-        return (ConversationFragment) getFragmentManager().findFragmentByTag(
-                ConversationFragment.FRAGMENT_TAG);
-    }
-
-    @Override // From ContactPickerFragmentHost
-    public void onGetOrCreateNewConversation(final String conversationId) {
-        Assert.isTrue(conversationId != null);
-        mUiState.onGetOrCreateConversation(conversationId);
-    }
-
-    @Override // From ContactPickerFragmentHost
-    public void onBackButtonPressed() {
-        onBackPressed();
-    }
-
-    @Override // From ContactPickerFragmentHost
-    public void onInitiateAddMoreParticipants() {
-        mUiState.onAddMoreParticipants();
-    }
-
-
-    @Override
-    public void onParticipantCountChanged(final boolean canAddMoreParticipants) {
-        mUiState.onParticipantCountUpdated(canAddMoreParticipants);
-    }
-
-    @Override // From ConversationFragmentHost
-    public void onStartComposeMessage() {
-        mUiState.onStartMessageCompose();
-    }
-
-    @Override // From ConversationFragmentHost
-    public void onConversationMetadataUpdated() {
-        invalidateActionBar();
-    }
-
-    @Override // From ConversationFragmentHost
-    public void onConversationMessagesUpdated(final int numberOfMessages) {
-    }
-
-    @Override // From ConversationFragmentHost
-    public void onConversationParticipantDataLoaded(final int numberOfParticipants) {
-    }
-
-    @Override // From ConversationFragmentHost
-    public boolean isActiveAndFocused() {
-        return !mIsPaused && hasWindowFocus();
-    }
-
-    @Override // From ConversationActivityUiStateListener
-    public void onConversationContactPickerUiStateChanged(final int oldState, final int newState,
-            final boolean animate) {
-        Assert.isTrue(oldState != newState);
-        updateUiState(animate);
-    }
-
-    private void updateUiState(final boolean animate) {
-        if (mInstanceStateSaved || mIsPaused) {
-            return;
-        }
-        Assert.notNull(mUiState);
-        final Intent intent = getIntent();
-        final String conversationId = mUiState.getConversationId();
-
-        final FragmentManager fragmentManager = getFragmentManager();
-        final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
-
-        final boolean needConversationFragment = mUiState.shouldShowConversationFragment();
-        final boolean needContactPickerFragment = mUiState.shouldShowContactPickerFragment();
-        ConversationFragment conversationFragment = getConversationFragment();
-
-        // Set up the conversation fragment.
-        if (needConversationFragment) {
-            Assert.notNull(conversationId);
-            if (conversationFragment == null) {
-                conversationFragment = new ConversationFragment();
-                fragmentTransaction.add(R.id.conversation_fragment_container,
-                        conversationFragment, ConversationFragment.FRAGMENT_TAG);
-            }
-            final MessageData draftData = intent.getParcelableExtra(
-                    UIIntents.UI_INTENT_EXTRA_DRAFT_DATA);
-            if (!needContactPickerFragment) {
-                // Once the user has committed the audience,remove the draft data from the
-                // intent to prevent reuse
-                intent.removeExtra(UIIntents.UI_INTENT_EXTRA_DRAFT_DATA);
-            }
-            conversationFragment.setHost(this);
-            conversationFragment.setConversationInfo(this, conversationId, draftData);
-        } else if (conversationFragment != null) {
-            // Don't save draft to DB when removing conversation fragment and switching to
-            // contact picking mode.  The draft is intended for the new group.
-            conversationFragment.suppressWriteDraft();
-            fragmentTransaction.remove(conversationFragment);
-        }
-
-        // Set up the contact picker fragment.
-        ContactPickerFragment contactPickerFragment = getContactPicker();
-        if (needContactPickerFragment) {
-            if (contactPickerFragment == null) {
-                contactPickerFragment = new ContactPickerFragment();
-                fragmentTransaction.add(R.id.contact_picker_fragment_container,
-                        contactPickerFragment, ContactPickerFragment.FRAGMENT_TAG);
-            }
-            contactPickerFragment.setHost(this);
-            contactPickerFragment.setContactPickingMode(mUiState.getDesiredContactPickingMode(),
-                    animate);
-        } else if (contactPickerFragment != null) {
-            fragmentTransaction.remove(contactPickerFragment);
-        }
-
-        fragmentTransaction.commit();
-        invalidateActionBar();
-    }
-
-    @Override
-    public void onFinishCurrentConversation() {
-        // Simply finish the current activity. The current design is to leave any empty
-        // conversations as is.
-        if (OsUtil.isAtLeastL()) {
-            finishAfterTransition();
-        } else {
-            finish();
-        }
-    }
-
-    @Override
-    public boolean shouldResumeComposeMessage() {
-        return mUiState.shouldResumeComposeMessage();
-    }
-
-    @SuppressWarnings("MissingSuperCall") // TODO: fix me
-    @Override
-    protected void onActivityResult(final int requestCode, final int resultCode,
-            final Intent data) {
-        if (requestCode == ConversationFragment.REQUEST_CHOOSE_ATTACHMENTS &&
-                resultCode == RESULT_OK) {
-            final ConversationFragment conversationFragment = getConversationFragment();
-            if (conversationFragment != null) {
-                conversationFragment.onAttachmentChoosen();
-            } else {
-                LogUtil.e(LogUtil.BUGLE_TAG, "ConversationFragment is missing after launching " +
-                        "AttachmentChooserActivity!");
-            }
-        } else if (resultCode == FINISH_RESULT_CODE) {
-            finish();
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ConversationActivityUiState.java b/src/com/android/messaging/ui/conversation/ConversationActivityUiState.java
deleted file mode 100644
index 1469c93..0000000
--- a/src/com/android/messaging/ui/conversation/ConversationActivityUiState.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.messaging.ui.contact.ContactPickerFragment;
-import com.android.messaging.util.Assert;
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * Keeps track of the different UI states that the ConversationActivity may be in. This acts as
- * a state machine which, based on different actions (e.g. onAddMoreParticipants), notifies the
- * ConversationActivity about any state UI change so it can update the visuals. This class
- * implements Parcelable and it's persisted across activity tear down and relaunch.
- */
-public class ConversationActivityUiState implements Parcelable, Cloneable {
-    interface ConversationActivityUiStateHost {
-        void onConversationContactPickerUiStateChanged(int oldState, int newState, boolean animate);
-    }
-
-    /*------ Overall UI states (conversation & contact picker) ------*/
-
-    /** Only a full screen conversation is showing. */
-    public static final int STATE_CONVERSATION_ONLY = 1;
-    /** Only a full screen contact picker is showing asking user to pick the initial contact. */
-    public static final int STATE_CONTACT_PICKER_ONLY_INITIAL_CONTACT = 2;
-    /**
-     * Only a full screen contact picker is showing asking user to pick more participants. This
-     * happens after the user picked the initial contact, and then decide to go back and add more.
-     */
-    public static final int STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS = 3;
-    /**
-     * Only a full screen contact picker is showing asking user to pick more participants. However
-     * user has reached max number of conversation participants and can add no more.
-     */
-    public static final int STATE_CONTACT_PICKER_ONLY_MAX_PARTICIPANTS = 4;
-    /**
-     * A hybrid mode where the conversation view + contact chips view are showing. This happens
-     * right after the user picked the initial contact for which a 1-1 conversation is fetched or
-     * created.
-     */
-    public static final int STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW = 5;
-
-    // The overall UI state of the ConversationActivity.
-    private int mConversationContactUiState;
-
-    // The currently displayed conversation (if any).
-    private String mConversationId;
-
-    // Indicates whether we should put focus in the compose message view when the
-    // ConversationFragment is attached. This is a transient state that's not persisted as
-    // part of the parcelable.
-    private boolean mPendingResumeComposeMessage = false;
-
-    // The owner ConversationActivity. This is not parceled since the instance always change upon
-    // object reuse.
-    private ConversationActivityUiStateHost mHost;
-
-    // Indicates the owning ConverastionActivity is in the process of updating its UI presentation
-    // to be in sync with the UI states. Outside of the UI updates, the UI states here should
-    // ALWAYS be consistent with the actual states of the activity.
-    private int mUiUpdateCount;
-
-    /**
-     * Create a new instance with an initial conversation id.
-     */
-    ConversationActivityUiState(final String conversationId) {
-        // The conversation activity may be initialized with only one of two states:
-        // Conversation-only (when there's a conversation id) or picking initial contact
-        // (when no conversation id is given).
-        mConversationId = conversationId;
-        mConversationContactUiState = conversationId == null ?
-                STATE_CONTACT_PICKER_ONLY_INITIAL_CONTACT : STATE_CONVERSATION_ONLY;
-    }
-
-    public void setHost(final ConversationActivityUiStateHost host) {
-        mHost = host;
-    }
-
-    public boolean shouldShowConversationFragment() {
-        return mConversationContactUiState == STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW ||
-                mConversationContactUiState == STATE_CONVERSATION_ONLY;
-    }
-
-    public boolean shouldShowContactPickerFragment() {
-        return mConversationContactUiState == STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS ||
-                mConversationContactUiState == STATE_CONTACT_PICKER_ONLY_MAX_PARTICIPANTS ||
-                mConversationContactUiState == STATE_CONTACT_PICKER_ONLY_INITIAL_CONTACT ||
-                mConversationContactUiState == STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW;
-    }
-
-    /**
-     * Returns whether there's a pending request to resume message compose (i.e. set focus to
-     * the compose message view and show the soft keyboard). If so, this request will be served
-     * when the conversation fragment get created and resumed. This happens when the user commits
-     * participant selection for a group conversation and goes back to the conversation fragment.
-     * Since conversation fragment creation happens asynchronously, we issue and track this
-     * pending request for it to be eventually fulfilled.
-     */
-    public boolean shouldResumeComposeMessage() {
-        if (mPendingResumeComposeMessage) {
-            // This is a one-shot operation that just keeps track of the pending resume compose
-            // state. This is also a non-critical operation so we don't care about failure case.
-            mPendingResumeComposeMessage = false;
-            return true;
-        }
-        return false;
-    }
-
-    public int getDesiredContactPickingMode() {
-        switch (mConversationContactUiState) {
-            case STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS:
-                return ContactPickerFragment.MODE_PICK_MORE_CONTACTS;
-            case STATE_CONTACT_PICKER_ONLY_MAX_PARTICIPANTS:
-                return ContactPickerFragment.MODE_PICK_MAX_PARTICIPANTS;
-            case STATE_CONTACT_PICKER_ONLY_INITIAL_CONTACT:
-                return ContactPickerFragment.MODE_PICK_INITIAL_CONTACT;
-            case STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW:
-                return ContactPickerFragment.MODE_CHIPS_ONLY;
-            default:
-                Assert.fail("Invalid contact picking mode for ConversationActivity!");
-                return ContactPickerFragment.MODE_UNDEFINED;
-        }
-    }
-
-    public String getConversationId() {
-        return mConversationId;
-    }
-
-    /**
-     * Called whenever the contact picker fragment successfully fetched or created a conversation.
-     */
-    public void onGetOrCreateConversation(final String conversationId) {
-        int newState = STATE_CONVERSATION_ONLY;
-        if (mConversationContactUiState == STATE_CONTACT_PICKER_ONLY_INITIAL_CONTACT) {
-            newState = STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW;
-        } else if (mConversationContactUiState == STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS ||
-                mConversationContactUiState == STATE_CONTACT_PICKER_ONLY_MAX_PARTICIPANTS) {
-            newState = STATE_CONVERSATION_ONLY;
-        } else {
-            // New conversation should only be created when we are in one of the contact picking
-            // modes.
-            Assert.fail("Invalid conversation activity state: can't create conversation!");
-        }
-        mConversationId = conversationId;
-        performUiStateUpdate(newState, true);
-    }
-
-    /**
-     * Called when the user started composing message. If we are in the hybrid chips state, we
-     * should commit to enter the conversation only state.
-     */
-    public void onStartMessageCompose() {
-        // This cannot happen when we are in one of the full-screen contact picking states.
-        Assert.isTrue(mConversationContactUiState != STATE_CONTACT_PICKER_ONLY_INITIAL_CONTACT &&
-                mConversationContactUiState != STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS &&
-                mConversationContactUiState != STATE_CONTACT_PICKER_ONLY_MAX_PARTICIPANTS);
-        if (mConversationContactUiState == STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW) {
-            performUiStateUpdate(STATE_CONVERSATION_ONLY, true);
-        }
-    }
-
-    /**
-     * Called when the user initiated an action to add more participants in the hybrid state,
-     * namely clicking on the "add more participants" button or entered a new contact chip via
-     * auto-complete.
-     */
-    public void onAddMoreParticipants() {
-        if (mConversationContactUiState == STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW) {
-            mPendingResumeComposeMessage = true;
-            performUiStateUpdate(STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS, true);
-        } else {
-            // This is only possible in the hybrid state.
-            Assert.fail("Invalid conversation activity state: can't add more participants!");
-        }
-    }
-
-    /**
-     * Called each time the number of participants is updated to check against the limit and
-     * update the ui state accordingly.
-     */
-    public void onParticipantCountUpdated(final boolean canAddMoreParticipants) {
-        if (mConversationContactUiState == STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS
-                && !canAddMoreParticipants) {
-            performUiStateUpdate(STATE_CONTACT_PICKER_ONLY_MAX_PARTICIPANTS, false);
-        } else if (mConversationContactUiState == STATE_CONTACT_PICKER_ONLY_MAX_PARTICIPANTS
-                && canAddMoreParticipants) {
-            performUiStateUpdate(STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS, false);
-        }
-    }
-
-    private void performUiStateUpdate(final int conversationContactState, final boolean animate) {
-        // This starts one UI update cycle, during which we allow the conversation activity's
-        // UI presentation to be temporarily out of sync with the states here.
-        beginUiUpdate();
-
-        if (conversationContactState != mConversationContactUiState) {
-            final int oldState = mConversationContactUiState;
-            mConversationContactUiState = conversationContactState;
-            notifyOnOverallUiStateChanged(oldState, mConversationContactUiState, animate);
-        }
-        endUiUpdate();
-    }
-
-    private void notifyOnOverallUiStateChanged(
-            final int oldState, final int newState, final boolean animate) {
-        // Always verify state validity whenever we have a state change.
-        assertValidState();
-        Assert.isTrue(isUiUpdateInProgress());
-
-        // Only do this if we are still attached to the host. mHost can be null if the host
-        // activity is already destroyed, but due to timing the contained UI components may still
-        // receive events such as focus change and trigger a callback to the Ui state. We'd like
-        // to guard against those cases.
-        if (mHost != null) {
-            mHost.onConversationContactPickerUiStateChanged(oldState, newState, animate);
-        }
-    }
-
-    private void assertValidState() {
-        // Conversation id may be null IF AND ONLY IF the user is picking the initial contact to
-        // start a conversation.
-        Assert.isTrue((mConversationContactUiState == STATE_CONTACT_PICKER_ONLY_INITIAL_CONTACT) ==
-                (mConversationId == null));
-    }
-
-    private void beginUiUpdate() {
-        mUiUpdateCount++;
-    }
-
-    private void endUiUpdate() {
-        if (--mUiUpdateCount < 0) {
-            Assert.fail("Unbalanced Ui updates!");
-        }
-    }
-
-    private boolean isUiUpdateInProgress() {
-        return mUiUpdateCount > 0;
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(final Parcel dest, final int flags) {
-        dest.writeInt(mConversationContactUiState);
-        dest.writeString(mConversationId);
-    }
-
-    private ConversationActivityUiState(final Parcel in) {
-        mConversationContactUiState = in.readInt();
-        mConversationId = in.readString();
-
-        // Always verify state validity whenever we initialize states.
-        assertValidState();
-    }
-
-    public static final Parcelable.Creator<ConversationActivityUiState> CREATOR
-        = new Parcelable.Creator<ConversationActivityUiState>() {
-        @Override
-        public ConversationActivityUiState createFromParcel(final Parcel in) {
-            return new ConversationActivityUiState(in);
-        }
-
-        @Override
-        public ConversationActivityUiState[] newArray(final int size) {
-            return new ConversationActivityUiState[size];
-        }
-    };
-
-    @Override
-    protected ConversationActivityUiState clone() {
-        try {
-            return (ConversationActivityUiState) super.clone();
-        } catch (CloneNotSupportedException e) {
-            Assert.fail("ConversationActivityUiState: failed to clone(). Is there a mutable " +
-                    "reference?");
-        }
-        return null;
-    }
-
-    /**
-     * allows for overridding the internal UI state. Should never be called except by test code.
-     */
-    @VisibleForTesting
-    void testSetUiState(final int uiState) {
-        mConversationContactUiState = uiState;
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ConversationFastScroller.java b/src/com/android/messaging/ui/conversation/ConversationFastScroller.java
deleted file mode 100644
index f17f11e..0000000
--- a/src/com/android/messaging/ui/conversation/ConversationFastScroller.java
+++ /dev/null
@@ -1,489 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Rect;
-import android.graphics.drawable.StateListDrawable;
-import android.os.Handler;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver;
-import androidx.recyclerview.widget.RecyclerView.ViewHolder;
-import android.util.StateSet;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.MeasureSpec;
-import android.view.View.OnLayoutChangeListener;
-import android.view.ViewGroupOverlay;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ConversationMessageData;
-import com.android.messaging.ui.ConversationDrawables;
-import com.android.messaging.util.Dates;
-import com.android.messaging.util.OsUtil;
-
-/**
- * Adds a "fast-scroll" bar to the conversation RecyclerView that shows the current position within
- * the conversation and allows quickly moving to another position by dragging the scrollbar thumb
- * up or down. As the thumb is dragged, we show a floating bubble alongside it that shows the
- * date/time of the first visible message at the current position.
- */
-public class ConversationFastScroller extends RecyclerView.OnScrollListener implements
-        OnLayoutChangeListener, RecyclerView.OnItemTouchListener {
-
-    /**
-     * Creates a {@link ConversationFastScroller} instance, attached to the provided
-     * {@link RecyclerView}.
-     *
-     * @param rv the conversation RecyclerView
-     * @param position where the scrollbar should appear (either {@code POSITION_RIGHT_SIDE} or
-     *            {@code POSITION_LEFT_SIDE})
-     * @return a new ConversationFastScroller, or {@code null} if fast-scrolling is not supported
-     *         (the feature requires Jellybean MR2 or newer)
-     */
-    public static ConversationFastScroller addTo(RecyclerView rv, int position) {
-        if (OsUtil.isAtLeastJB_MR2()) {
-            return new ConversationFastScroller(rv, position);
-        }
-        return null;
-    }
-
-    public static final int POSITION_RIGHT_SIDE = 0;
-    public static final int POSITION_LEFT_SIDE = 1;
-
-    private static final int MIN_PAGES_TO_ENABLE = 7;
-    private static final int SHOW_ANIMATION_DURATION_MS = 150;
-    private static final int HIDE_ANIMATION_DURATION_MS = 300;
-    private static final int HIDE_DELAY_MS = 1500;
-
-    private final Context mContext;
-    private final RecyclerView mRv;
-    private final ViewGroupOverlay mOverlay;
-    private final ImageView mTrackImageView;
-    private final ImageView mThumbImageView;
-    private final TextView mPreviewTextView;
-
-    private final int mTrackWidth;
-    private final int mThumbHeight;
-    private final int mPreviewHeight;
-    private final int mPreviewMinWidth;
-    private final int mPreviewMarginTop;
-    private final int mPreviewMarginLeftRight;
-    private final int mTouchSlop;
-
-    private final Rect mContainer = new Rect();
-    private final Handler mHandler = new Handler();
-
-    // Whether to render the scrollbar on the right side (otherwise it'll be on the left).
-    private final boolean mPosRight;
-
-    // Whether the scrollbar is currently visible (it may still be animating).
-    private boolean mVisible = false;
-
-    // Whether we are waiting to hide the scrollbar (i.e. scrolling has stopped).
-    private boolean mPendingHide = false;
-
-    // Whether the user is currently dragging the thumb up or down.
-    private boolean mDragging = false;
-
-    // Animations responsible for hiding the scrollbar & preview. May be null.
-    private AnimatorSet mHideAnimation;
-    private ObjectAnimator mHidePreviewAnimation;
-
-    private final Runnable mHideTrackRunnable = new Runnable() {
-        @Override
-        public void run() {
-            hide(true /* animate */);
-            mPendingHide = false;
-        }
-    };
-
-    private ConversationFastScroller(RecyclerView rv, int position) {
-        mContext = rv.getContext();
-        mRv = rv;
-        mRv.addOnLayoutChangeListener(this);
-        mRv.addOnScrollListener(this);
-        mRv.addOnItemTouchListener(this);
-        mRv.getAdapter().registerAdapterDataObserver(new AdapterDataObserver() {
-            @Override
-            public void onChanged() {
-                updateScrollPos();
-            }
-        });
-        mPosRight = (position == POSITION_RIGHT_SIDE);
-
-        // Cache the dimensions we'll need during layout
-        final Resources res = mContext.getResources();
-        mTrackWidth = res.getDimensionPixelSize(R.dimen.fastscroll_track_width);
-        mThumbHeight = res.getDimensionPixelSize(R.dimen.fastscroll_thumb_height);
-        mPreviewHeight = res.getDimensionPixelSize(R.dimen.fastscroll_preview_height);
-        mPreviewMinWidth = res.getDimensionPixelSize(R.dimen.fastscroll_preview_min_width);
-        mPreviewMarginTop = res.getDimensionPixelOffset(R.dimen.fastscroll_preview_margin_top);
-        mPreviewMarginLeftRight = res.getDimensionPixelOffset(
-                R.dimen.fastscroll_preview_margin_left_right);
-        mTouchSlop = res.getDimensionPixelOffset(R.dimen.fastscroll_touch_slop);
-
-        final LayoutInflater inflator = LayoutInflater.from(mContext);
-        mTrackImageView = (ImageView) inflator.inflate(R.layout.fastscroll_track, null);
-        mThumbImageView = (ImageView) inflator.inflate(R.layout.fastscroll_thumb, null);
-        mPreviewTextView = (TextView) inflator.inflate(R.layout.fastscroll_preview, null);
-
-        refreshConversationThemeColor();
-
-        // Add the fast scroll views to the overlay, so they are rendered above the list
-        mOverlay = rv.getOverlay();
-        mOverlay.add(mTrackImageView);
-        mOverlay.add(mThumbImageView);
-        mOverlay.add(mPreviewTextView);
-
-        hide(false /* animate */);
-        mPreviewTextView.setAlpha(0f);
-    }
-
-    public void refreshConversationThemeColor() {
-        mPreviewTextView.setBackground(
-                ConversationDrawables.get().getFastScrollPreviewDrawable(mPosRight));
-        if (OsUtil.isAtLeastL()) {
-            final StateListDrawable drawable = new StateListDrawable();
-            drawable.addState(new int[]{ android.R.attr.state_pressed },
-                    ConversationDrawables.get().getFastScrollThumbDrawable(true /* pressed */));
-            drawable.addState(StateSet.WILD_CARD,
-                    ConversationDrawables.get().getFastScrollThumbDrawable(false /* pressed */));
-            mThumbImageView.setImageDrawable(drawable);
-        } else {
-            // Android pre-L doesn't seem to handle a StateListDrawable containing a tinted
-            // drawable (it's rendered in the filter base color, which is red), so fall back to
-            // just the regular (non-pressed) drawable.
-            mThumbImageView.setImageDrawable(
-                    ConversationDrawables.get().getFastScrollThumbDrawable(false /* pressed */));
-        }
-    }
-
-    @Override
-    public void onScrollStateChanged(final RecyclerView view, final int newState) {
-        if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
-            // Only show the scrollbar once the user starts scrolling
-            if (!mVisible && isEnabled()) {
-                show();
-            }
-            cancelAnyPendingHide();
-        } else if (newState == RecyclerView.SCROLL_STATE_IDLE && !mDragging) {
-            // Hide the scrollbar again after scrolling stops
-            hideAfterDelay();
-        }
-    }
-
-    private boolean isEnabled() {
-        final int range = mRv.computeVerticalScrollRange();
-        final int extent = mRv.computeVerticalScrollExtent();
-
-        if (range == 0 || extent == 0) {
-            return false; // Conversation isn't long enough to scroll
-        }
-        // Only enable scrollbars for conversations long enough that they would require several
-        // flings to scroll through.
-        final float pages = (float) range / extent;
-        return (pages > MIN_PAGES_TO_ENABLE);
-    }
-
-    private void show() {
-        if (mHideAnimation != null && mHideAnimation.isRunning()) {
-            mHideAnimation.cancel();
-        }
-        // Slide the scrollbar in from the side
-        ObjectAnimator trackSlide = ObjectAnimator.ofFloat(mTrackImageView, View.TRANSLATION_X, 0);
-        ObjectAnimator thumbSlide = ObjectAnimator.ofFloat(mThumbImageView, View.TRANSLATION_X, 0);
-        AnimatorSet animation = new AnimatorSet();
-        animation.playTogether(trackSlide, thumbSlide);
-        animation.setDuration(SHOW_ANIMATION_DURATION_MS);
-        animation.start();
-
-        mVisible = true;
-        updateScrollPos();
-    }
-
-    private void hideAfterDelay() {
-        cancelAnyPendingHide();
-        mHandler.postDelayed(mHideTrackRunnable, HIDE_DELAY_MS);
-        mPendingHide = true;
-    }
-
-    private void cancelAnyPendingHide() {
-        if (mPendingHide) {
-            mHandler.removeCallbacks(mHideTrackRunnable);
-        }
-    }
-
-    private void hide(boolean animate) {
-        final int hiddenTranslationX = mPosRight ? mTrackWidth : -mTrackWidth;
-        if (animate) {
-            // Slide the scrollbar off to the side
-            ObjectAnimator trackSlide = ObjectAnimator.ofFloat(mTrackImageView, View.TRANSLATION_X,
-                    hiddenTranslationX);
-            ObjectAnimator thumbSlide = ObjectAnimator.ofFloat(mThumbImageView, View.TRANSLATION_X,
-                    hiddenTranslationX);
-            mHideAnimation = new AnimatorSet();
-            mHideAnimation.playTogether(trackSlide, thumbSlide);
-            mHideAnimation.setDuration(HIDE_ANIMATION_DURATION_MS);
-            mHideAnimation.start();
-        } else {
-            mTrackImageView.setTranslationX(hiddenTranslationX);
-            mThumbImageView.setTranslationX(hiddenTranslationX);
-        }
-
-        mVisible = false;
-    }
-
-    private void showPreview() {
-        if (mHidePreviewAnimation != null && mHidePreviewAnimation.isRunning()) {
-            mHidePreviewAnimation.cancel();
-        }
-        mPreviewTextView.setAlpha(1f);
-    }
-
-    private void hidePreview() {
-        mHidePreviewAnimation = ObjectAnimator.ofFloat(mPreviewTextView, View.ALPHA, 0f);
-        mHidePreviewAnimation.setDuration(HIDE_ANIMATION_DURATION_MS);
-        mHidePreviewAnimation.start();
-    }
-
-    @Override
-    public void onScrolled(final RecyclerView view, final int dx, final int dy) {
-        updateScrollPos();
-    }
-
-    private void updateScrollPos() {
-        if (!mVisible) {
-            return;
-        }
-        final int verticalScrollLength = mContainer.height() - mThumbHeight;
-        final int verticalScrollStart = mContainer.top + mThumbHeight / 2;
-
-        final float scrollRatio = computeScrollRatio();
-        final int thumbCenterY = verticalScrollStart + (int)(verticalScrollLength * scrollRatio);
-        layoutThumb(thumbCenterY);
-
-        if (mDragging) {
-            updatePreviewText();
-            layoutPreview(thumbCenterY);
-        }
-    }
-
-    /**
-     * Returns the current position in the conversation, as a value between 0 and 1, inclusive.
-     * The top of the conversation is 0, the bottom is 1, the exact middle is 0.5, and so on.
-     */
-    private float computeScrollRatio() {
-        final int range = mRv.computeVerticalScrollRange();
-        final int extent = mRv.computeVerticalScrollExtent();
-        int offset = mRv.computeVerticalScrollOffset();
-
-        if (range == 0 || extent == 0) {
-            // If the conversation doesn't scroll, we're at the bottom.
-            return 1.0f;
-        }
-        final int scrollRange = range - extent;
-        offset = Math.min(offset, scrollRange);
-        return offset / (float) scrollRange;
-    }
-
-    private void updatePreviewText() {
-        final LinearLayoutManager lm = (LinearLayoutManager) mRv.getLayoutManager();
-        final int pos = lm.findFirstVisibleItemPosition();
-        if (pos == RecyclerView.NO_POSITION) {
-            return;
-        }
-        final ViewHolder vh = mRv.findViewHolderForAdapterPosition(pos);
-        if (vh == null) {
-            // This can happen if the messages update while we're dragging the thumb.
-            return;
-        }
-        final ConversationMessageView messageView = (ConversationMessageView) vh.itemView;
-        final ConversationMessageData messageData = messageView.getData();
-        final long timestamp = messageData.getReceivedTimeStamp();
-        final CharSequence timestampText = Dates.getFastScrollPreviewTimeString(timestamp);
-        mPreviewTextView.setText(timestampText);
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
-        if (!mVisible) {
-            return false;
-        }
-        // If the user presses down on the scroll thumb, we'll start intercepting events from the
-        // RecyclerView so we can handle the move events while they're dragging it up/down.
-        final int action = e.getActionMasked();
-        switch (action) {
-            case MotionEvent.ACTION_DOWN:
-                if (isInsideThumb(e.getX(), e.getY())) {
-                    startDrag();
-                    return true;
-                }
-                break;
-            case MotionEvent.ACTION_MOVE:
-                if (mDragging) {
-                    return true;
-                }
-            case MotionEvent.ACTION_CANCEL:
-            case MotionEvent.ACTION_UP:
-                if (mDragging) {
-                    cancelDrag();
-                }
-                return false;
-        }
-        return false;
-    }
-
-    private boolean isInsideThumb(float x, float y) {
-        final int hitTargetLeft = mThumbImageView.getLeft() - mTouchSlop;
-        final int hitTargetRight = mThumbImageView.getRight() + mTouchSlop;
-
-        if (x < hitTargetLeft || x > hitTargetRight) {
-            return false;
-        }
-        if (y < mThumbImageView.getTop() || y > mThumbImageView.getBottom()) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public void onTouchEvent(RecyclerView rv, MotionEvent e) {
-        if (!mDragging) {
-            return;
-        }
-        final int action = e.getActionMasked();
-        switch (action) {
-            case MotionEvent.ACTION_MOVE:
-                handleDragMove(e.getY());
-                break;
-            case MotionEvent.ACTION_CANCEL:
-            case MotionEvent.ACTION_UP:
-                cancelDrag();
-                break;
-        }
-    }
-
-    @Override
-    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
-    }
-
-    private void startDrag() {
-        mDragging = true;
-        mThumbImageView.setPressed(true);
-        updateScrollPos();
-        showPreview();
-        cancelAnyPendingHide();
-    }
-
-    private void handleDragMove(float y) {
-        final int verticalScrollLength = mContainer.height() - mThumbHeight;
-        final int verticalScrollStart = mContainer.top + (mThumbHeight / 2);
-
-        // Convert the desired position from px to a scroll position in the conversation.
-        float dragScrollRatio = (y - verticalScrollStart) / verticalScrollLength;
-        dragScrollRatio = Math.max(dragScrollRatio, 0.0f);
-        dragScrollRatio = Math.min(dragScrollRatio, 1.0f);
-
-        // Scroll the RecyclerView to a new position.
-        final int itemCount = mRv.getAdapter().getItemCount();
-        final int itemPos = (int)((itemCount - 1) * dragScrollRatio);
-        mRv.scrollToPosition(itemPos);
-    }
-
-    private void cancelDrag() {
-        mDragging = false;
-        mThumbImageView.setPressed(false);
-        hidePreview();
-        hideAfterDelay();
-    }
-
-    @Override
-    public void onLayoutChange(View v, int left, int top, int right, int bottom,
-            int oldLeft, int oldTop, int oldRight, int oldBottom) {
-        if (!mVisible) {
-            hide(false /* animate */);
-        }
-        // The container is the size of the RecyclerView that's visible on screen. We have to
-        // exclude the top padding, because it's usually hidden behind the conversation action bar.
-        mContainer.set(left, top + mRv.getPaddingTop(), right, bottom);
-        layoutTrack();
-        updateScrollPos();
-    }
-
-    private void layoutTrack() {
-        int trackHeight = Math.max(0, mContainer.height());
-        int widthMeasureSpec = MeasureSpec.makeMeasureSpec(mTrackWidth, MeasureSpec.EXACTLY);
-        int heightMeasureSpec = MeasureSpec.makeMeasureSpec(trackHeight, MeasureSpec.EXACTLY);
-        mTrackImageView.measure(widthMeasureSpec, heightMeasureSpec);
-
-        int left = mPosRight ? (mContainer.right - mTrackWidth) : mContainer.left;
-        int top = mContainer.top;
-        int right = mPosRight ? mContainer.right : (mContainer.left + mTrackWidth);
-        int bottom = mContainer.bottom;
-        mTrackImageView.layout(left, top, right, bottom);
-    }
-
-    private void layoutThumb(int centerY) {
-        int widthMeasureSpec = MeasureSpec.makeMeasureSpec(mTrackWidth, MeasureSpec.EXACTLY);
-        int heightMeasureSpec = MeasureSpec.makeMeasureSpec(mThumbHeight, MeasureSpec.EXACTLY);
-        mThumbImageView.measure(widthMeasureSpec, heightMeasureSpec);
-
-        int left = mPosRight ? (mContainer.right - mTrackWidth) : mContainer.left;
-        int top = centerY - (mThumbImageView.getHeight() / 2);
-        int right = mPosRight ? mContainer.right : (mContainer.left + mTrackWidth);
-        int bottom = top + mThumbHeight;
-        mThumbImageView.layout(left, top, right, bottom);
-    }
-
-    private void layoutPreview(int centerY) {
-        int widthMeasureSpec = MeasureSpec.makeMeasureSpec(mContainer.width(), MeasureSpec.AT_MOST);
-        int heightMeasureSpec = MeasureSpec.makeMeasureSpec(mPreviewHeight, MeasureSpec.EXACTLY);
-        mPreviewTextView.measure(widthMeasureSpec, heightMeasureSpec);
-
-        // Ensure that the preview bubble is at least as wide as it is tall
-        if (mPreviewTextView.getMeasuredWidth() < mPreviewMinWidth) {
-            widthMeasureSpec = MeasureSpec.makeMeasureSpec(mPreviewMinWidth, MeasureSpec.EXACTLY);
-            mPreviewTextView.measure(widthMeasureSpec, heightMeasureSpec);
-        }
-        final int previewMinY = mContainer.top + mPreviewMarginTop;
-
-        final int left, right;
-        if (mPosRight) {
-            right = mContainer.right - mTrackWidth - mPreviewMarginLeftRight;
-            left = right - mPreviewTextView.getMeasuredWidth();
-        } else {
-            left = mContainer.left + mTrackWidth + mPreviewMarginLeftRight;
-            right = left + mPreviewTextView.getMeasuredWidth();
-        }
-
-        int bottom = centerY;
-        int top = bottom - mPreviewTextView.getMeasuredHeight();
-        if (top < previewMinY) {
-            top = previewMinY;
-            bottom = top + mPreviewTextView.getMeasuredHeight();
-        }
-        mPreviewTextView.layout(left, top, right, bottom);
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ConversationFragment.java b/src/com/android/messaging/ui/conversation/ConversationFragment.java
deleted file mode 100644
index 6eb7089..0000000
--- a/src/com/android/messaging/ui/conversation/ConversationFragment.java
+++ /dev/null
@@ -1,1672 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.Manifest;
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.DownloadManager;
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.BroadcastReceiver;
-import android.content.ClipData;
-import android.content.ClipboardManager;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnCancelListener;
-import android.content.DialogInterface.OnClickListener;
-import android.content.DialogInterface.OnDismissListener;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.res.Configuration;
-import android.database.Cursor;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.graphics.drawable.ColorDrawable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.Parcelable;
-import androidx.localbroadcastmanager.content.LocalBroadcastManager;
-import androidx.core.text.BidiFormatter;
-import androidx.core.text.TextDirectionHeuristicsCompat;
-import androidx.appcompat.app.ActionBar;
-import androidx.recyclerview.widget.DefaultItemAnimator;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.recyclerview.widget.RecyclerView.ViewHolder;
-import android.telephony.PhoneNumberUtils;
-import android.text.TextUtils;
-import android.view.ActionMode;
-import android.view.Display;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.action.InsertNewMessageAction;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.binding.ImmutableBindingRef;
-import com.android.messaging.datamodel.data.ConversationData;
-import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
-import com.android.messaging.datamodel.data.ConversationMessageData;
-import com.android.messaging.datamodel.data.ConversationParticipantsData;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageDataListener;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.SubscriptionListData.SubscriptionListEntry;
-import com.android.messaging.ui.AttachmentPreview;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.ConversationDrawables;
-import com.android.messaging.ui.SnackBar;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.animation.PopupTransitionAnimation;
-import com.android.messaging.ui.contact.AddContactsConfirmationDialog;
-import com.android.messaging.ui.conversation.ComposeMessageView.IComposeMessageViewHost;
-import com.android.messaging.ui.conversation.ConversationInputManager.ConversationInputHost;
-import com.android.messaging.ui.conversation.ConversationMessageView.ConversationMessageViewHost;
-import com.android.messaging.ui.mediapicker.MediaPicker;
-import com.android.messaging.util.AccessibilityUtil;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.ChangeDefaultSmsAppHelper;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.ImeUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.util.TextUtil;
-import com.android.messaging.util.UiUtils;
-import com.android.messaging.util.UriUtil;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Shows a list of messages/parts comprising a conversation.
- */
-public class ConversationFragment extends Fragment implements ConversationDataListener,
-        IComposeMessageViewHost, ConversationMessageViewHost, ConversationInputHost,
-        DraftMessageDataListener {
-
-    public interface ConversationFragmentHost extends ImeUtil.ImeStateHost {
-        void onStartComposeMessage();
-        void onConversationMetadataUpdated();
-        boolean shouldResumeComposeMessage();
-        void onFinishCurrentConversation();
-        void invalidateActionBar();
-        ActionMode startActionMode(ActionMode.Callback callback);
-        void dismissActionMode();
-        ActionMode getActionMode();
-        void onConversationMessagesUpdated(int numberOfMessages);
-        void onConversationParticipantDataLoaded(int numberOfParticipants);
-        boolean isActiveAndFocused();
-    }
-
-    public static final String FRAGMENT_TAG = "conversation";
-
-    static final int REQUEST_CHOOSE_ATTACHMENTS = 2;
-    private static final int JUMP_SCROLL_THRESHOLD = 15;
-    // We animate the message from draft to message list, if we the message doesn't show up in the
-    // list within this time limit, then we just do a fade in animation instead
-    public static final int MESSAGE_ANIMATION_MAX_WAIT = 500;
-
-    private ComposeMessageView mComposeMessageView;
-    private RecyclerView mRecyclerView;
-    private ConversationMessageAdapter mAdapter;
-    private ConversationFastScroller mFastScroller;
-
-    private View mConversationComposeDivider;
-    private ChangeDefaultSmsAppHelper mChangeDefaultSmsAppHelper;
-
-    private String mConversationId;
-    // If the fragment receives a draft as part of the invocation this is set
-    private MessageData mIncomingDraft;
-
-    // This binding keeps track of our associated ConversationData instance
-    // A binding should have the lifetime of the owning component,
-    //  don't recreate, unbind and bind if you need new data
-    @VisibleForTesting
-    final Binding<ConversationData> mBinding = BindingBase.createBinding(this);
-
-    // Saved Instance State Data - only for temporal data which is nice to maintain but not
-    // critical for correctness.
-    private static final String SAVED_INSTANCE_STATE_LIST_VIEW_STATE_KEY = "conversationViewState";
-    private Parcelable mListState;
-
-    private ConversationFragmentHost mHost;
-
-    protected List<Integer> mFilterResults;
-
-    // The minimum scrolling distance between RecyclerView's scroll change event beyong which
-    // a fling motion is considered fast, in which case we'll delay load image attachments for
-    // perf optimization.
-    private int mFastFlingThreshold;
-
-    // ConversationMessageView that is currently selected
-    private ConversationMessageView mSelectedMessage;
-
-    // Attachment data for the attachment within the selected message that was long pressed
-    private MessagePartData mSelectedAttachment;
-
-    // Normally, as soon as draft message is loaded, we trust the UI state held in
-    // ComposeMessageView to be the only source of truth (incl. the conversation self id). However,
-    // there can be external events that forces the UI state to change, such as SIM state changes
-    // or SIM auto-switching on receiving a message. This receiver is used to receive such
-    // local broadcast messages and reflect the change in the UI.
-    private final BroadcastReceiver mConversationSelfIdChangeReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(final Context context, final Intent intent) {
-            final String conversationId =
-                    intent.getStringExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID);
-            final String selfId =
-                    intent.getStringExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_SELF_ID);
-            Assert.notNull(conversationId);
-            Assert.notNull(selfId);
-            if (isBound() && TextUtils
-                    .equals(mBinding.getData().getConversationId(), conversationId)) {
-                mComposeMessageView.updateConversationSelfIdOnExternalChange(selfId);
-            }
-        }
-    };
-
-    // Flag to prevent writing draft to DB on pause
-    private boolean mSuppressWriteDraft;
-
-    // Indicates whether local draft should be cleared due to external draft changes that must
-    // be reloaded from db
-    private boolean mClearLocalDraft;
-    private ImmutableBindingRef<DraftMessageData> mDraftMessageDataModel;
-
-    private boolean isScrolledToBottom() {
-        if (mRecyclerView.getChildCount() == 0) {
-            return true;
-        }
-        final View lastView = mRecyclerView.getChildAt(mRecyclerView.getChildCount() - 1);
-        int lastVisibleItem = ((LinearLayoutManager) mRecyclerView
-                .getLayoutManager()).findLastVisibleItemPosition();
-        if (lastVisibleItem < 0) {
-            // If the recyclerView height is 0, then the last visible item position is -1
-            // Try to compute the position of the last item, even though it's not visible
-            final long id = mRecyclerView.getChildItemId(lastView);
-            final RecyclerView.ViewHolder holder = mRecyclerView.findViewHolderForItemId(id);
-            if (holder != null) {
-                lastVisibleItem = holder.getAdapterPosition();
-            }
-        }
-        final int totalItemCount = mRecyclerView.getAdapter().getItemCount();
-        final boolean isAtBottom = (lastVisibleItem + 1 == totalItemCount);
-        return isAtBottom && lastView.getBottom() <= mRecyclerView.getHeight();
-    }
-
-    private void scrollToBottom(final boolean smoothScroll) {
-        if (mAdapter.getItemCount() > 0) {
-            scrollToPosition(mAdapter.getItemCount() - 1, smoothScroll);
-        }
-    }
-
-    private int mScrollToDismissThreshold;
-    private final RecyclerView.OnScrollListener mListScrollListener =
-        new RecyclerView.OnScrollListener() {
-            // Keeps track of cumulative scroll delta during a scroll event, which we may use to
-            // hide the media picker & co.
-            private int mCumulativeScrollDelta;
-            private boolean mScrollToDismissHandled;
-            private boolean mWasScrolledToBottom = true;
-            private int mScrollState = RecyclerView.SCROLL_STATE_IDLE;
-
-            @Override
-            public void onScrollStateChanged(final RecyclerView view, final int newState) {
-                if (newState == RecyclerView.SCROLL_STATE_IDLE) {
-                    // Reset scroll states.
-                    mCumulativeScrollDelta = 0;
-                    mScrollToDismissHandled = false;
-                } else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
-                    mRecyclerView.getItemAnimator().endAnimations();
-                }
-                mScrollState = newState;
-            }
-
-            @Override
-            public void onScrolled(final RecyclerView view, final int dx, final int dy) {
-                if (mScrollState == RecyclerView.SCROLL_STATE_DRAGGING &&
-                        !mScrollToDismissHandled) {
-                    mCumulativeScrollDelta += dy;
-                    // Dismiss the keyboard only when the user scroll up (into the past).
-                    if (mCumulativeScrollDelta < -mScrollToDismissThreshold) {
-                        mComposeMessageView.hideAllComposeInputs(false /* animate */);
-                        mScrollToDismissHandled = true;
-                    }
-                }
-                if (mWasScrolledToBottom != isScrolledToBottom()) {
-                    mConversationComposeDivider.animate().alpha(isScrolledToBottom() ? 0 : 1);
-                    mWasScrolledToBottom = isScrolledToBottom();
-                }
-            }
-    };
-
-    private final ActionMode.Callback mMessageActionModeCallback = new ActionMode.Callback() {
-        @Override
-        public boolean onCreateActionMode(final ActionMode actionMode, final Menu menu) {
-            if (mSelectedMessage == null) {
-                return false;
-            }
-            final ConversationMessageData data = mSelectedMessage.getData();
-            final MenuInflater menuInflater = getActivity().getMenuInflater();
-            menuInflater.inflate(R.menu.conversation_fragment_select_menu, menu);
-            menu.findItem(R.id.action_download).setVisible(data.getShowDownloadMessage());
-            menu.findItem(R.id.action_send).setVisible(data.getShowResendMessage());
-
-            // ShareActionProvider does not work with ActionMode. So we use a normal menu item.
-            menu.findItem(R.id.share_message_menu).setVisible(data.getCanForwardMessage());
-            menu.findItem(R.id.save_attachment).setVisible(mSelectedAttachment != null);
-            menu.findItem(R.id.forward_message_menu).setVisible(data.getCanForwardMessage());
-
-            // TODO: We may want to support copying attachments in the future, but it's
-            // unclear which attachment to pick when we make this context menu at the message level
-            // instead of the part level
-            menu.findItem(R.id.copy_text).setVisible(data.getCanCopyMessageToClipboard());
-
-            return true;
-        }
-
-        @Override
-        public boolean onPrepareActionMode(final ActionMode actionMode, final Menu menu) {
-            return true;
-        }
-
-        @Override
-        public boolean onActionItemClicked(final ActionMode actionMode, final MenuItem menuItem) {
-            final ConversationMessageData data = mSelectedMessage.getData();
-            final String messageId = data.getMessageId();
-            switch (menuItem.getItemId()) {
-                case R.id.save_attachment:
-                    if (OsUtil.hasStoragePermission()) {
-                        final SaveAttachmentTask saveAttachmentTask = new SaveAttachmentTask(
-                                getActivity());
-                        for (final MessagePartData part : data.getAttachments()) {
-                            saveAttachmentTask.addAttachmentToSave(part.getContentUri(),
-                                    part.getContentType());
-                        }
-                        if (saveAttachmentTask.getAttachmentCount() > 0) {
-                            saveAttachmentTask.executeOnThreadPool();
-                            mHost.dismissActionMode();
-                        }
-                    } else {
-                        getActivity().requestPermissions(
-                                new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
-                    }
-                    return true;
-                case R.id.action_delete_message:
-                    if (mSelectedMessage != null) {
-                        deleteMessage(messageId);
-                    }
-                    return true;
-                case R.id.action_download:
-                    if (mSelectedMessage != null) {
-                        retryDownload(messageId);
-                        mHost.dismissActionMode();
-                    }
-                    return true;
-                case R.id.action_send:
-                    if (mSelectedMessage != null) {
-                        retrySend(messageId);
-                        mHost.dismissActionMode();
-                    }
-                    return true;
-                case R.id.copy_text:
-                    Assert.isTrue(data.hasText());
-                    final ClipboardManager clipboard = (ClipboardManager) getActivity()
-                            .getSystemService(Context.CLIPBOARD_SERVICE);
-                    clipboard.setPrimaryClip(
-                            ClipData.newPlainText(null /* label */, data.getText()));
-                    mHost.dismissActionMode();
-                    return true;
-                case R.id.details_menu:
-                    MessageDetailsDialog.show(
-                            getActivity(), data, mBinding.getData().getParticipants(),
-                            mBinding.getData().getSelfParticipantById(data.getSelfParticipantId()));
-                    mHost.dismissActionMode();
-                    return true;
-                case R.id.share_message_menu:
-                    shareMessage(data);
-                    mHost.dismissActionMode();
-                    return true;
-                case R.id.forward_message_menu:
-                    // TODO: Currently we are forwarding one part at a time, instead of
-                    // the entire message. Change this to forwarding the entire message when we
-                    // use message-based cursor in conversation.
-                    final MessageData message = mBinding.getData().createForwardedMessage(data);
-                    UIIntents.get().launchForwardMessageActivity(getActivity(), message);
-                    mHost.dismissActionMode();
-                    return true;
-            }
-            return false;
-        }
-
-        private void shareMessage(final ConversationMessageData data) {
-            // Figure out what to share.
-            MessagePartData attachmentToShare = mSelectedAttachment;
-            // If the user long-pressed on the background, we will share the text (if any)
-            // or the first attachment.
-            if (mSelectedAttachment == null
-                    && TextUtil.isAllWhitespace(data.getText())) {
-                final List<MessagePartData> attachments = data.getAttachments();
-                if (attachments.size() > 0) {
-                    attachmentToShare = attachments.get(0);
-                }
-            }
-
-            final Intent shareIntent = new Intent();
-            shareIntent.setAction(Intent.ACTION_SEND);
-            if (attachmentToShare == null) {
-                shareIntent.putExtra(Intent.EXTRA_TEXT, data.getText());
-                shareIntent.setType("text/plain");
-            } else {
-                shareIntent.putExtra(
-                        Intent.EXTRA_STREAM, attachmentToShare.getContentUri());
-                shareIntent.setType(attachmentToShare.getContentType());
-            }
-            final CharSequence title = getResources().getText(R.string.action_share);
-            startActivity(Intent.createChooser(shareIntent, title));
-        }
-
-        @Override
-        public void onDestroyActionMode(final ActionMode actionMode) {
-            selectMessage(null);
-        }
-    };
-
-    /**
-     * {@inheritDoc} from Fragment
-     */
-    @Override
-    public void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mFastFlingThreshold = getResources().getDimensionPixelOffset(
-                R.dimen.conversation_fast_fling_threshold);
-        mAdapter = new ConversationMessageAdapter(getActivity(), null, this,
-                null,
-                // Sets the item click listener on the Recycler item views.
-                new View.OnClickListener() {
-                    @Override
-                    public void onClick(final View v) {
-                        final ConversationMessageView messageView = (ConversationMessageView) v;
-                        handleMessageClick(messageView);
-                    }
-                },
-                new View.OnLongClickListener() {
-                    @Override
-                    public boolean onLongClick(final View view) {
-                        selectMessage((ConversationMessageView) view);
-                        return true;
-                    }
-                }
-        );
-    }
-
-    /**
-     * setConversationInfo() may be called before or after onCreate(). When a user initiate a
-     * conversation from compose, the ConversationActivity creates this fragment and calls
-     * setConversationInfo(), so it happens before onCreate(). However, when the activity is
-     * restored from saved instance state, the ConversationFragment is created automatically by
-     * the fragment, before ConversationActivity has a chance to call setConversationInfo(). Since
-     * the ability to start loading data depends on both methods being called, we need to start
-     * loading when onActivityCreated() is called, which is guaranteed to happen after both.
-     */
-    @Override
-    public void onActivityCreated(final Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        // Delay showing the message list until the participant list is loaded.
-        mRecyclerView.setVisibility(View.INVISIBLE);
-        mBinding.ensureBound();
-        mBinding.getData().init(getLoaderManager(), mBinding);
-
-        // Build the input manager with all its required dependencies and pass it along to the
-        // compose message view.
-        final ConversationInputManager inputManager = new ConversationInputManager(
-                getActivity(), this, mComposeMessageView, mHost, getFragmentManagerToUse(),
-                mBinding, mComposeMessageView.getDraftDataModel(), savedInstanceState);
-        mComposeMessageView.setInputManager(inputManager);
-        mComposeMessageView.setConversationDataModel(BindingBase.createBindingReference(mBinding));
-        mHost.invalidateActionBar();
-
-        mDraftMessageDataModel =
-                BindingBase.createBindingReference(mComposeMessageView.getDraftDataModel());
-        mDraftMessageDataModel.getData().addListener(this);
-    }
-
-    public void onAttachmentChoosen() {
-        // Attachment has been choosen in the AttachmentChooserActivity, so clear local draft
-        // and reload draft on resume.
-        mClearLocalDraft = true;
-    }
-
-    private int getScrollToMessagePosition() {
-        final Activity activity = getActivity();
-        if (activity == null) {
-            return -1;
-        }
-
-        final Intent intent = activity.getIntent();
-        if (intent == null) {
-            return -1;
-        }
-
-        return intent.getIntExtra(UIIntents.UI_INTENT_EXTRA_MESSAGE_POSITION, -1);
-    }
-
-    private void clearScrollToMessagePosition() {
-        final Activity activity = getActivity();
-        if (activity == null) {
-            return;
-        }
-
-        final Intent intent = activity.getIntent();
-        if (intent == null) {
-            return;
-        }
-        intent.putExtra(UIIntents.UI_INTENT_EXTRA_MESSAGE_POSITION, -1);
-    }
-
-    private final Handler mHandler = new Handler();
-
-    /**
-     * {@inheritDoc} from Fragment
-     */
-    @Override
-    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
-            final Bundle savedInstanceState) {
-        final View view = inflater.inflate(R.layout.conversation_fragment, container, false);
-        mRecyclerView = (RecyclerView) view.findViewById(android.R.id.list);
-        final LinearLayoutManager manager = new LinearLayoutManager(getActivity());
-        manager.setStackFromEnd(true);
-        manager.setReverseLayout(false);
-        mRecyclerView.setHasFixedSize(true);
-        mRecyclerView.setLayoutManager(manager);
-        mRecyclerView.setItemAnimator(new DefaultItemAnimator() {
-            private final List<ViewHolder> mAddAnimations = new ArrayList<ViewHolder>();
-            private PopupTransitionAnimation mPopupTransitionAnimation;
-
-            @Override
-            public boolean animateAdd(final ViewHolder holder) {
-                final ConversationMessageView view =
-                        (ConversationMessageView) holder.itemView;
-                final ConversationMessageData data = view.getData();
-                endAnimation(holder);
-                final long timeSinceSend = System.currentTimeMillis() - data.getReceivedTimeStamp();
-                if (data.getReceivedTimeStamp() ==
-                                InsertNewMessageAction.getLastSentMessageTimestamp() &&
-                        !data.getIsIncoming() &&
-                        timeSinceSend < MESSAGE_ANIMATION_MAX_WAIT) {
-                    final ConversationMessageBubbleView messageBubble =
-                            (ConversationMessageBubbleView) view
-                                    .findViewById(R.id.message_content);
-                    final Rect startRect = UiUtils.getMeasuredBoundsOnScreen(mComposeMessageView);
-                    final View composeBubbleView = mComposeMessageView.findViewById(
-                            R.id.compose_message_text);
-                    final Rect composeBubbleRect =
-                            UiUtils.getMeasuredBoundsOnScreen(composeBubbleView);
-                    final AttachmentPreview attachmentView =
-                            (AttachmentPreview) mComposeMessageView.findViewById(
-                                    R.id.attachment_draft_view);
-                    final Rect attachmentRect = UiUtils.getMeasuredBoundsOnScreen(attachmentView);
-                    if (attachmentView.getVisibility() == View.VISIBLE) {
-                        startRect.top = attachmentRect.top;
-                    } else {
-                        startRect.top = composeBubbleRect.top;
-                    }
-                    startRect.top -= view.getPaddingTop();
-                    startRect.bottom =
-                            composeBubbleRect.bottom;
-                    startRect.left += view.getPaddingRight();
-
-                    view.setAlpha(0);
-                    mPopupTransitionAnimation = new PopupTransitionAnimation(startRect, view);
-                    mPopupTransitionAnimation.setOnStartCallback(new Runnable() {
-                            @Override
-                            public void run() {
-                                final int startWidth = composeBubbleRect.width();
-                                attachmentView.onMessageAnimationStart();
-                                messageBubble.kickOffMorphAnimation(startWidth,
-                                        messageBubble.findViewById(R.id.message_text_and_info)
-                                        .getMeasuredWidth());
-                            }
-                        });
-                    mPopupTransitionAnimation.setOnStopCallback(new Runnable() {
-                            @Override
-                            public void run() {
-                                view.setAlpha(1);
-                                dispatchAddFinished(holder);
-                            }
-                        });
-                    mPopupTransitionAnimation.startAfterLayoutComplete();
-                    mAddAnimations.add(holder);
-                    return true;
-                } else {
-                    return super.animateAdd(holder);
-                }
-            }
-
-            @Override
-            public void endAnimation(final ViewHolder holder) {
-                if (mAddAnimations.remove(holder)) {
-                    holder.itemView.clearAnimation();
-                }
-                super.endAnimation(holder);
-            }
-
-            @Override
-            public void endAnimations() {
-                for (final ViewHolder holder : mAddAnimations) {
-                    holder.itemView.clearAnimation();
-                }
-                mAddAnimations.clear();
-                if (mPopupTransitionAnimation != null) {
-                    mPopupTransitionAnimation.cancel();
-                }
-                super.endAnimations();
-            }
-        });
-        mRecyclerView.setAdapter(mAdapter);
-
-        if (savedInstanceState != null) {
-            mListState = savedInstanceState.getParcelable(SAVED_INSTANCE_STATE_LIST_VIEW_STATE_KEY);
-        }
-
-        mConversationComposeDivider = view.findViewById(R.id.conversation_compose_divider);
-        mScrollToDismissThreshold = ViewConfiguration.get(getActivity()).getScaledTouchSlop();
-        mRecyclerView.addOnScrollListener(mListScrollListener);
-        mFastScroller = ConversationFastScroller.addTo(mRecyclerView,
-                UiUtils.isRtlMode() ? ConversationFastScroller.POSITION_LEFT_SIDE :
-                    ConversationFastScroller.POSITION_RIGHT_SIDE);
-
-        mComposeMessageView = (ComposeMessageView)
-                view.findViewById(R.id.message_compose_view_container);
-        // Bind the compose message view to the DraftMessageData
-        mComposeMessageView.bind(DataModel.get().createDraftMessageData(
-                mBinding.getData().getConversationId()), this);
-
-        return view;
-    }
-
-    private void scrollToPosition(final int targetPosition, final boolean smoothScroll) {
-        if (smoothScroll) {
-            final int maxScrollDelta = JUMP_SCROLL_THRESHOLD;
-
-            final LinearLayoutManager layoutManager =
-                    (LinearLayoutManager) mRecyclerView.getLayoutManager();
-            final int firstVisibleItemPosition =
-                    layoutManager.findFirstVisibleItemPosition();
-            final int delta = targetPosition - firstVisibleItemPosition;
-            final int intermediatePosition;
-
-            if (delta > maxScrollDelta) {
-                intermediatePosition = Math.max(0, targetPosition - maxScrollDelta);
-            } else if (delta < -maxScrollDelta) {
-                final int count = layoutManager.getItemCount();
-                intermediatePosition = Math.min(count - 1, targetPosition + maxScrollDelta);
-            } else {
-                intermediatePosition = -1;
-            }
-            if (intermediatePosition != -1) {
-                mRecyclerView.scrollToPosition(intermediatePosition);
-            }
-            mRecyclerView.smoothScrollToPosition(targetPosition);
-        } else {
-            mRecyclerView.scrollToPosition(targetPosition);
-        }
-    }
-
-    private int getScrollPositionFromBottom() {
-        final LinearLayoutManager layoutManager =
-                (LinearLayoutManager) mRecyclerView.getLayoutManager();
-        final int lastVisibleItem =
-                layoutManager.findLastVisibleItemPosition();
-        return Math.max(mAdapter.getItemCount() - 1 - lastVisibleItem, 0);
-    }
-
-    /**
-     * Display a photo using the Photoviewer component.
-     */
-    @Override
-    public void displayPhoto(final Uri photoUri, final Rect imageBounds, final boolean isDraft) {
-        displayPhoto(photoUri, imageBounds, isDraft, mConversationId, getActivity());
-    }
-
-    public static void displayPhoto(final Uri photoUri, final Rect imageBounds,
-            final boolean isDraft, final String conversationId, final Activity activity) {
-        final Uri imagesUri =
-                isDraft ? MessagingContentProvider.buildDraftImagesUri(conversationId)
-                        : MessagingContentProvider.buildConversationImagesUri(conversationId);
-        UIIntents.get().launchFullScreenPhotoViewer(
-                activity, photoUri, imageBounds, imagesUri);
-    }
-
-    private void selectMessage(final ConversationMessageView messageView) {
-        selectMessage(messageView, null /* attachment */);
-    }
-
-    private void selectMessage(final ConversationMessageView messageView,
-            final MessagePartData attachment) {
-        mSelectedMessage = messageView;
-        if (mSelectedMessage == null) {
-            mAdapter.setSelectedMessage(null);
-            mHost.dismissActionMode();
-            mSelectedAttachment = null;
-            return;
-        }
-        mSelectedAttachment = attachment;
-        mAdapter.setSelectedMessage(messageView.getData().getMessageId());
-        mHost.startActionMode(mMessageActionModeCallback);
-    }
-
-    @Override
-    public void onSaveInstanceState(final Bundle outState) {
-        super.onSaveInstanceState(outState);
-        if (mListState != null) {
-            outState.putParcelable(SAVED_INSTANCE_STATE_LIST_VIEW_STATE_KEY, mListState);
-        }
-        mComposeMessageView.saveInputState(outState);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-
-        if (mIncomingDraft == null) {
-            mComposeMessageView.requestDraftMessage(mClearLocalDraft);
-        } else {
-            mComposeMessageView.setDraftMessage(mIncomingDraft);
-            mIncomingDraft = null;
-        }
-        mClearLocalDraft = false;
-
-        // On resume, check if there's a pending request for resuming message compose. This
-        // may happen when the user commits the contact selection for a group conversation and
-        // goes from compose back to the conversation fragment.
-        if (mHost.shouldResumeComposeMessage()) {
-            mComposeMessageView.resumeComposeMessage();
-        }
-
-        setConversationFocus();
-
-        // On resume, invalidate all message views to show the updated timestamp.
-        mAdapter.notifyDataSetChanged();
-
-        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
-                mConversationSelfIdChangeReceiver,
-                new IntentFilter(UIIntents.CONVERSATION_SELF_ID_CHANGE_BROADCAST_ACTION));
-    }
-
-    void setConversationFocus() {
-        if (mHost.isActiveAndFocused()) {
-            mBinding.getData().setFocus();
-        }
-    }
-
-    @Override
-    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
-        if (mHost.getActionMode() != null) {
-            return;
-        }
-
-        inflater.inflate(R.menu.conversation_menu, menu);
-
-        final ConversationData data = mBinding.getData();
-
-        // Disable the "people & options" item if we haven't loaded participants yet.
-        menu.findItem(R.id.action_people_and_options).setEnabled(data.getParticipantsLoaded());
-
-        // See if we can show add contact action.
-        final ParticipantData participant = data.getOtherParticipant();
-        final boolean addContactActionVisible = (participant != null
-                && TextUtils.isEmpty(participant.getLookupKey()));
-        menu.findItem(R.id.action_add_contact).setVisible(addContactActionVisible);
-
-        // See if we should show archive or unarchive.
-        final boolean isArchived = data.getIsArchived();
-        menu.findItem(R.id.action_archive).setVisible(!isArchived);
-        menu.findItem(R.id.action_unarchive).setVisible(isArchived);
-
-        // Conditionally enable the phone call button.
-        final boolean supportCallAction = (PhoneUtils.getDefault().isVoiceCapable() &&
-                data.getParticipantPhoneNumber() != null);
-        menu.findItem(R.id.action_call).setVisible(supportCallAction);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.action_people_and_options:
-                Assert.isTrue(mBinding.getData().getParticipantsLoaded());
-                UIIntents.get().launchPeopleAndOptionsActivity(getActivity(), mConversationId);
-                return true;
-
-            case R.id.action_call:
-                final String phoneNumber = mBinding.getData().getParticipantPhoneNumber();
-                Assert.notNull(phoneNumber);
-                // Can't make a call to emergency numbers using ACTION_CALL.
-                if (PhoneNumberUtils.isEmergencyNumber(phoneNumber)) {
-                    UiUtils.showToast(R.string.disallow_emergency_call);
-                } else {
-                    final View targetView = getActivity().findViewById(R.id.action_call);
-                    Point centerPoint;
-                    if (targetView != null) {
-                        final int screenLocation[] = new int[2];
-                        targetView.getLocationOnScreen(screenLocation);
-                        final int centerX = screenLocation[0] + targetView.getWidth() / 2;
-                        final int centerY = screenLocation[1] + targetView.getHeight() / 2;
-                        centerPoint = new Point(centerX, centerY);
-                    } else {
-                        // In the overflow menu, just use the center of the screen.
-                        final Display display =
-                                getActivity().getWindowManager().getDefaultDisplay();
-                        centerPoint = new Point(display.getWidth() / 2, display.getHeight() / 2);
-                    }
-                    UIIntents.get()
-                            .launchPhoneCallActivity(getActivity(), phoneNumber, centerPoint);
-                }
-                return true;
-
-            case R.id.action_archive:
-                mBinding.getData().archiveConversation(mBinding);
-                closeConversation(mConversationId);
-                return true;
-
-            case R.id.action_unarchive:
-                mBinding.getData().unarchiveConversation(mBinding);
-                return true;
-
-            case R.id.action_settings:
-                return true;
-
-            case R.id.action_add_contact:
-                final ParticipantData participant = mBinding.getData().getOtherParticipant();
-                Assert.notNull(participant);
-                final String destination = participant.getNormalizedDestination();
-                final Uri avatarUri = AvatarUriUtil.createAvatarUri(participant);
-                (new AddContactsConfirmationDialog(getActivity(), avatarUri, destination)).show();
-                return true;
-
-            case R.id.action_delete:
-                if (isReadyForAction()) {
-                    new AlertDialog.Builder(getActivity())
-                            .setTitle(getResources().getQuantityString(
-                                    R.plurals.delete_conversations_confirmation_dialog_title, 1))
-                            .setPositiveButton(R.string.delete_conversation_confirmation_button,
-                                    new DialogInterface.OnClickListener() {
-                                        @Override
-                                        public void onClick(final DialogInterface dialog,
-                                                final int button) {
-                                            deleteConversation();
-                                        }
-                            })
-                            .setNegativeButton(R.string.delete_conversation_decline_button, null)
-                            .show();
-                } else {
-                    warnOfMissingActionConditions(false /*sending*/,
-                            null /*commandToRunAfterActionConditionResolved*/);
-                }
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    /**
-     * {@inheritDoc} from ConversationDataListener
-     */
-    @Override
-    public void onConversationMessagesCursorUpdated(final ConversationData data,
-            final Cursor cursor, final ConversationMessageData newestMessage,
-            final boolean isSync) {
-        mBinding.ensureBound(data);
-
-        // This needs to be determined before swapping cursor, which may change the scroll state.
-        final boolean scrolledToBottom = isScrolledToBottom();
-        final int positionFromBottom = getScrollPositionFromBottom();
-
-        // If participants not loaded, assume 1:1 since that's the 99% case
-        final boolean oneOnOne =
-                !data.getParticipantsLoaded() || data.getOtherParticipant() != null;
-        mAdapter.setOneOnOne(oneOnOne, false /* invalidate */);
-
-        // Ensure that the action bar is updated with the current data.
-        invalidateOptionsMenu();
-        final Cursor oldCursor = mAdapter.swapCursor(cursor);
-
-        if (cursor != null && oldCursor == null) {
-            if (mListState != null) {
-                mRecyclerView.getLayoutManager().onRestoreInstanceState(mListState);
-                // RecyclerView restores scroll states without triggering scroll change events, so
-                // we need to manually ensure that they are correctly handled.
-                mListScrollListener.onScrolled(mRecyclerView, 0, 0);
-            }
-        }
-
-        if (isSync) {
-            // This is a message sync. Syncing messages changes cursor item count, which would
-            // implicitly change RV's scroll position. We'd like the RV to keep scrolled to the same
-            // relative position from the bottom (because RV is stacked from bottom), so that it
-            // stays relatively put as we sync.
-            final int position = Math.max(mAdapter.getItemCount() - 1 - positionFromBottom, 0);
-            scrollToPosition(position, false /* smoothScroll */);
-        } else if (newestMessage != null) {
-            // Show a snack bar notification if we are not scrolled to the bottom and the new
-            // message is an incoming message.
-            if (!scrolledToBottom && newestMessage.getIsIncoming()) {
-                // If the conversation activity is started but not resumed (if another dialog
-                // activity was in the foregrond), we will show a system notification instead of
-                // the snack bar.
-                if (mBinding.getData().isFocused()) {
-                    UiUtils.showSnackBarWithCustomAction(getActivity(),
-                            getView().getRootView(),
-                            getString(R.string.in_conversation_notify_new_message_text),
-                            SnackBar.Action.createCustomAction(new Runnable() {
-                                @Override
-                                public void run() {
-                                    scrollToBottom(true /* smoothScroll */);
-                                    mComposeMessageView.hideAllComposeInputs(false /* animate */);
-                                }
-                            },
-                            getString(R.string.in_conversation_notify_new_message_action)),
-                            null /* interactions */,
-                            SnackBar.Placement.above(mComposeMessageView));
-                }
-            } else {
-                // We are either already scrolled to the bottom or this is an outgoing message,
-                // scroll to the bottom to reveal it.
-                // Don't smooth scroll if we were already at the bottom; instead, we scroll
-                // immediately so RecyclerView's view animation will take place.
-                scrollToBottom(!scrolledToBottom);
-            }
-        }
-
-        if (cursor != null) {
-            mHost.onConversationMessagesUpdated(cursor.getCount());
-
-            // Are we coming from a widget click where we're told to scroll to a particular item?
-            final int scrollToPos = getScrollToMessagePosition();
-            if (scrollToPos >= 0) {
-                if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(LogUtil.BUGLE_TAG, "onConversationMessagesCursorUpdated " +
-                            " scrollToPos: " + scrollToPos +
-                            " cursorCount: " + cursor.getCount());
-                }
-                scrollToPosition(scrollToPos, true /*smoothScroll*/);
-                clearScrollToMessagePosition();
-            }
-        }
-
-        mHost.invalidateActionBar();
-    }
-
-    /**
-     * {@inheritDoc} from ConversationDataListener
-     */
-    @Override
-    public void onConversationMetadataUpdated(final ConversationData conversationData) {
-        mBinding.ensureBound(conversationData);
-
-        if (mSelectedMessage != null && mSelectedAttachment != null) {
-            // We may have just sent a message and the temp attachment we selected is now gone.
-            // and it was replaced with some new attachment.  Since we don't know which one it
-            // is we shouldn't reselect it (unless there is just one) In the multi-attachment
-            // case we would just deselect the message and allow the user to reselect, otherwise we
-            // may act on old temp data and may crash.
-            final List<MessagePartData> currentAttachments = mSelectedMessage.getData().getAttachments();
-            if (currentAttachments.size() == 1) {
-                mSelectedAttachment = currentAttachments.get(0);
-            } else if (!currentAttachments.contains(mSelectedAttachment)) {
-                selectMessage(null);
-            }
-        }
-        // Ensure that the action bar is updated with the current data.
-        invalidateOptionsMenu();
-        mHost.onConversationMetadataUpdated();
-        mAdapter.notifyDataSetChanged();
-    }
-
-    public void setConversationInfo(final Context context, final String conversationId,
-            final MessageData draftData) {
-        // TODO: Eventually I would like the Factory to implement
-        // Factory.get().bindConversationData(mBinding, getActivity(), this, conversationId));
-        if (!mBinding.isBound()) {
-            mConversationId = conversationId;
-            mIncomingDraft = draftData;
-            mBinding.bind(DataModel.get().createConversationData(context, this, conversationId));
-        } else {
-            Assert.isTrue(TextUtils.equals(mBinding.getData().getConversationId(), conversationId));
-        }
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        // Unbind all the views that we bound to data
-        if (mComposeMessageView != null) {
-            mComposeMessageView.unbind();
-        }
-
-        // And unbind this fragment from its data
-        mBinding.unbind();
-        mConversationId = null;
-    }
-
-    void suppressWriteDraft() {
-        mSuppressWriteDraft = true;
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        if (mComposeMessageView != null && !mSuppressWriteDraft) {
-            mComposeMessageView.writeDraftMessage();
-        }
-        mSuppressWriteDraft = false;
-        mBinding.getData().unsetFocus();
-        mListState = mRecyclerView.getLayoutManager().onSaveInstanceState();
-
-        LocalBroadcastManager.getInstance(getActivity())
-                .unregisterReceiver(mConversationSelfIdChangeReceiver);
-    }
-
-    @Override
-    public void onConfigurationChanged(final Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        mRecyclerView.getItemAnimator().endAnimations();
-    }
-
-    // TODO: Remove isBound and replace it with ensureBound after b/15704674.
-    public boolean isBound() {
-        return mBinding.isBound();
-    }
-
-    private FragmentManager getFragmentManagerToUse() {
-        return OsUtil.isAtLeastJB_MR1() ? getChildFragmentManager() : getFragmentManager();
-    }
-
-    public MediaPicker getMediaPicker() {
-        return (MediaPicker) getFragmentManagerToUse().findFragmentByTag(
-                MediaPicker.FRAGMENT_TAG);
-    }
-
-    @Override
-    public void sendMessage(final MessageData message) {
-        if (isReadyForAction()) {
-            if (ensureKnownRecipients()) {
-                // Merge the caption text from attachments into the text body of the messages
-                message.consolidateText();
-
-                mBinding.getData().sendMessage(mBinding, message);
-                mComposeMessageView.resetMediaPickerState();
-            } else {
-                LogUtil.w(LogUtil.BUGLE_TAG, "Message can't be sent: conv participants not loaded");
-            }
-        } else {
-            warnOfMissingActionConditions(true /*sending*/,
-                    new Runnable() {
-                        @Override
-                        public void run() {
-                            sendMessage(message);
-                        }
-            });
-        }
-    }
-
-    public void setHost(final ConversationFragmentHost host) {
-        mHost = host;
-    }
-
-    public String getConversationName() {
-        return mBinding.getData().getConversationName();
-    }
-
-    @Override
-    public void onComposeEditTextFocused() {
-        mHost.onStartComposeMessage();
-    }
-
-    @Override
-    public void onAttachmentsCleared() {
-        // When attachments are removed, reset transient media picker state such as image selection.
-        mComposeMessageView.resetMediaPickerState();
-    }
-
-    /**
-     * Called to check if all conditions are nominal and a "go" for some action, such as deleting
-     * a message, that requires this app to be the default app. This is also a precondition
-     * required for sending a draft.
-     * @return true if all conditions are nominal and we're ready to send a message
-     */
-    @Override
-    public boolean isReadyForAction() {
-        return UiUtils.isReadyForAction();
-    }
-
-    /**
-     * When there's some condition that prevents an operation, such as sending a message,
-     * call warnOfMissingActionConditions to put up a snackbar and allow the user to repair
-     * that condition.
-     * @param sending - true if we're called during a sending operation
-     * @param commandToRunAfterActionConditionResolved - a runnable to run after the user responds
-     *                  positively to the condition prompt and resolves the condition. If null,
-     *                  the user will be shown a toast to tap the send button again.
-     */
-    @Override
-    public void warnOfMissingActionConditions(final boolean sending,
-            final Runnable commandToRunAfterActionConditionResolved) {
-        if (mChangeDefaultSmsAppHelper == null) {
-            mChangeDefaultSmsAppHelper = new ChangeDefaultSmsAppHelper();
-        }
-        mChangeDefaultSmsAppHelper.warnOfMissingActionConditions(sending,
-                commandToRunAfterActionConditionResolved, mComposeMessageView,
-                getView().getRootView(),
-                getActivity(), this);
-    }
-
-    private boolean ensureKnownRecipients() {
-        final ConversationData conversationData = mBinding.getData();
-
-        if (!conversationData.getParticipantsLoaded()) {
-            // We can't tell yet whether or not we have an unknown recipient
-            return false;
-        }
-
-        final ConversationParticipantsData participants = conversationData.getParticipants();
-        for (final ParticipantData participant : participants) {
-
-
-            if (participant.isUnknownSender()) {
-                UiUtils.showToast(R.string.unknown_sender);
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    public void retryDownload(final String messageId) {
-        if (isReadyForAction()) {
-            mBinding.getData().downloadMessage(mBinding, messageId);
-        } else {
-            warnOfMissingActionConditions(false /*sending*/,
-                    null /*commandToRunAfterActionConditionResolved*/);
-        }
-    }
-
-    public void retrySend(final String messageId) {
-        if (isReadyForAction()) {
-            if (ensureKnownRecipients()) {
-                mBinding.getData().resendMessage(mBinding, messageId);
-            }
-        } else {
-            warnOfMissingActionConditions(true /*sending*/,
-                    new Runnable() {
-                        @Override
-                        public void run() {
-                            retrySend(messageId);
-                        }
-
-                    });
-        }
-    }
-
-    void deleteMessage(final String messageId) {
-        if (isReadyForAction()) {
-            final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
-                    .setTitle(R.string.delete_message_confirmation_dialog_title)
-                    .setMessage(R.string.delete_message_confirmation_dialog_text)
-                    .setPositiveButton(R.string.delete_message_confirmation_button,
-                            new OnClickListener() {
-                        @Override
-                        public void onClick(final DialogInterface dialog, final int which) {
-                            mBinding.getData().deleteMessage(mBinding, messageId);
-                        }
-                    })
-                    .setNegativeButton(android.R.string.cancel, null);
-            if (OsUtil.isAtLeastJB_MR1()) {
-                builder.setOnDismissListener(new OnDismissListener() {
-                    @Override
-                    public void onDismiss(final DialogInterface dialog) {
-                        mHost.dismissActionMode();
-                    }
-                });
-            } else {
-                builder.setOnCancelListener(new OnCancelListener() {
-                    @Override
-                    public void onCancel(final DialogInterface dialog) {
-                        mHost.dismissActionMode();
-                    }
-                });
-            }
-            builder.create().show();
-        } else {
-            warnOfMissingActionConditions(false /*sending*/,
-                    null /*commandToRunAfterActionConditionResolved*/);
-            mHost.dismissActionMode();
-        }
-    }
-
-    public void deleteConversation() {
-        if (isReadyForAction()) {
-            final Context context = getActivity();
-            mBinding.getData().deleteConversation(mBinding);
-            closeConversation(mConversationId);
-        } else {
-            warnOfMissingActionConditions(false /*sending*/,
-                    null /*commandToRunAfterActionConditionResolved*/);
-        }
-    }
-
-    @Override
-    public void closeConversation(final String conversationId) {
-        if (TextUtils.equals(conversationId, mConversationId)) {
-            mHost.onFinishCurrentConversation();
-            // TODO: Explicitly transition to ConversationList (or just go back)?
-        }
-    }
-
-    @Override
-    public void onConversationParticipantDataLoaded(final ConversationData data) {
-        mBinding.ensureBound(data);
-        if (mBinding.getData().getParticipantsLoaded()) {
-            final boolean oneOnOne = mBinding.getData().getOtherParticipant() != null;
-            mAdapter.setOneOnOne(oneOnOne, true /* invalidate */);
-
-            // refresh the options menu which will enable the "people & options" item.
-            invalidateOptionsMenu();
-
-            mHost.invalidateActionBar();
-
-            mRecyclerView.setVisibility(View.VISIBLE);
-            mHost.onConversationParticipantDataLoaded
-                (mBinding.getData().getNumberOfParticipantsExcludingSelf());
-        }
-    }
-
-    @Override
-    public void onSubscriptionListDataLoaded(final ConversationData data) {
-        mBinding.ensureBound(data);
-        mAdapter.notifyDataSetChanged();
-    }
-
-    @Override
-    public void promptForSelfPhoneNumber() {
-        if (mComposeMessageView != null) {
-            // Avoid bug in system which puts soft keyboard over dialog after orientation change
-            ImeUtil.hideSoftInput(getActivity(), mComposeMessageView);
-        }
-
-        final FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
-        final EnterSelfPhoneNumberDialog dialog = EnterSelfPhoneNumberDialog
-                .newInstance(getConversationSelfSubId());
-        dialog.setTargetFragment(this, 0/*requestCode*/);
-        dialog.show(ft, null/*tag*/);
-    }
-
-    @Override
-    public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
-        if (mChangeDefaultSmsAppHelper == null) {
-            mChangeDefaultSmsAppHelper = new ChangeDefaultSmsAppHelper();
-        }
-        mChangeDefaultSmsAppHelper.handleChangeDefaultSmsResult(requestCode, resultCode, null);
-    }
-
-    public boolean hasMessages() {
-        return mAdapter != null && mAdapter.getItemCount() > 0;
-    }
-
-    public boolean onBackPressed() {
-        if (mComposeMessageView.onBackPressed()) {
-            return true;
-        }
-        return false;
-    }
-
-    public boolean onNavigationUpPressed() {
-        return mComposeMessageView.onNavigationUpPressed();
-    }
-
-    @Override
-    public boolean onAttachmentClick(final ConversationMessageView messageView,
-            final MessagePartData attachment, final Rect imageBounds, final boolean longPress) {
-        if (longPress) {
-            selectMessage(messageView, attachment);
-            return true;
-        } else if (messageView.getData().getOneClickResendMessage()) {
-            handleMessageClick(messageView);
-            return true;
-        }
-
-        if (attachment.isImage()) {
-            displayPhoto(attachment.getContentUri(), imageBounds, false /* isDraft */);
-        }
-
-        if (attachment.isVCard()) {
-            UIIntents.get().launchVCardDetailActivity(getActivity(), attachment.getContentUri());
-        }
-
-        return false;
-    }
-
-    private void handleMessageClick(final ConversationMessageView messageView) {
-        if (messageView != mSelectedMessage) {
-            final ConversationMessageData data = messageView.getData();
-            final boolean isReadyToSend = isReadyForAction();
-            if (data.getOneClickResendMessage()) {
-                // Directly resend the message on tap if it's failed
-                retrySend(data.getMessageId());
-                selectMessage(null);
-            } else if (data.getShowResendMessage() && isReadyToSend) {
-                // Select the message to show the resend/download/delete options
-                selectMessage(messageView);
-            } else if (data.getShowDownloadMessage() && isReadyToSend) {
-                // Directly download the message on tap
-                retryDownload(data.getMessageId());
-            } else {
-                // Let the toast from warnOfMissingActionConditions show and skip
-                // selecting
-                warnOfMissingActionConditions(false /*sending*/,
-                        null /*commandToRunAfterActionConditionResolved*/);
-                selectMessage(null);
-            }
-        } else {
-            selectMessage(null);
-        }
-    }
-
-    private static class AttachmentToSave {
-        public final Uri uri;
-        public final String contentType;
-        public Uri persistedUri;
-
-        AttachmentToSave(final Uri uri, final String contentType) {
-            this.uri = uri;
-            this.contentType = contentType;
-        }
-    }
-
-    public static class SaveAttachmentTask extends SafeAsyncTask<Void, Void, Void> {
-        private final Context mContext;
-        private final List<AttachmentToSave> mAttachmentsToSave = new ArrayList<>();
-
-        public SaveAttachmentTask(final Context context, final Uri contentUri,
-                final String contentType) {
-            mContext = context;
-            addAttachmentToSave(contentUri, contentType);
-        }
-
-        public SaveAttachmentTask(final Context context) {
-            mContext = context;
-        }
-
-        public void addAttachmentToSave(final Uri contentUri, final String contentType) {
-            mAttachmentsToSave.add(new AttachmentToSave(contentUri, contentType));
-        }
-
-        public int getAttachmentCount() {
-            return mAttachmentsToSave.size();
-        }
-
-        @Override
-        protected Void doInBackgroundTimed(final Void... arg) {
-            final File appDir = new File(Environment.getExternalStoragePublicDirectory(
-                    Environment.DIRECTORY_PICTURES),
-                    mContext.getResources().getString(R.string.app_name));
-            final File downloadDir = Environment.getExternalStoragePublicDirectory(
-                    Environment.DIRECTORY_DOWNLOADS);
-            for (final AttachmentToSave attachment : mAttachmentsToSave) {
-                final boolean isImageOrVideo = ContentType.isImageType(attachment.contentType)
-                        || ContentType.isVideoType(attachment.contentType);
-                attachment.persistedUri = UriUtil.persistContent(attachment.uri,
-                        isImageOrVideo ? appDir : downloadDir, attachment.contentType);
-           }
-            return null;
-        }
-
-        @Override
-        protected void onPostExecute(final Void result) {
-            int failCount = 0;
-            int imageCount = 0;
-            int videoCount = 0;
-            int otherCount = 0;
-            for (final AttachmentToSave attachment : mAttachmentsToSave) {
-                if (attachment.persistedUri == null) {
-                   failCount++;
-                   continue;
-                }
-
-                // Inform MediaScanner about the new file
-                final Intent scanFileIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
-                scanFileIntent.setData(attachment.persistedUri);
-                mContext.sendBroadcast(scanFileIntent);
-
-                if (ContentType.isImageType(attachment.contentType)) {
-                    imageCount++;
-                } else if (ContentType.isVideoType(attachment.contentType)) {
-                    videoCount++;
-                } else {
-                    otherCount++;
-                    // Inform DownloadManager of the file so it will show in the "downloads" app
-                    final DownloadManager downloadManager =
-                            (DownloadManager) mContext.getSystemService(
-                                    Context.DOWNLOAD_SERVICE);
-                    final String filePath = attachment.persistedUri.getPath();
-                    final File file = new File(filePath);
-
-                    if (file.exists()) {
-                        downloadManager.addCompletedDownload(
-                                file.getName() /* title */,
-                                mContext.getString(
-                                        R.string.attachment_file_description) /* description */,
-                                        true /* isMediaScannerScannable */,
-                                        attachment.contentType,
-                                        file.getAbsolutePath(),
-                                        file.length(),
-                                        false /* showNotification */);
-                    }
-                }
-            }
-
-            String message;
-            if (failCount > 0) {
-                message = mContext.getResources().getQuantityString(
-                        R.plurals.attachment_save_error, failCount, failCount);
-            } else {
-                int messageId = R.plurals.attachments_saved;
-                if (otherCount > 0) {
-                    if (imageCount + videoCount == 0) {
-                        messageId = R.plurals.attachments_saved_to_downloads;
-                    }
-                } else {
-                    if (videoCount == 0) {
-                        messageId = R.plurals.photos_saved_to_album;
-                    } else if (imageCount == 0) {
-                        messageId = R.plurals.videos_saved_to_album;
-                    } else {
-                        messageId = R.plurals.attachments_saved_to_album;
-                    }
-                }
-                final String appName = mContext.getResources().getString(R.string.app_name);
-                final int count = imageCount + videoCount + otherCount;
-                message = mContext.getResources().getQuantityString(
-                        messageId, count, count, appName);
-            }
-            UiUtils.showToastAtBottom(message);
-        }
-    }
-
-    private void invalidateOptionsMenu() {
-        final Activity activity = getActivity();
-        // TODO: Add the supportInvalidateOptionsMenu call to the host activity.
-        if (activity == null || !(activity instanceof BugleActionBarActivity)) {
-            return;
-        }
-        ((BugleActionBarActivity) activity).supportInvalidateOptionsMenu();
-    }
-
-    @Override
-    public void setOptionsMenuVisibility(final boolean visible) {
-        setHasOptionsMenu(visible);
-    }
-
-    @Override
-    public int getConversationSelfSubId() {
-        final String selfParticipantId = mComposeMessageView.getConversationSelfId();
-        final ParticipantData self = mBinding.getData().getSelfParticipantById(selfParticipantId);
-        // If the self id or the self participant data hasn't been loaded yet, fallback to
-        // the default setting.
-        return self == null ? ParticipantData.DEFAULT_SELF_SUB_ID : self.getSubId();
-    }
-
-    @Override
-    public void invalidateActionBar() {
-        mHost.invalidateActionBar();
-    }
-
-    @Override
-    public void dismissActionMode() {
-        mHost.dismissActionMode();
-    }
-
-    @Override
-    public void selectSim(final SubscriptionListEntry subscriptionData) {
-        mComposeMessageView.selectSim(subscriptionData);
-        mHost.onStartComposeMessage();
-    }
-
-    @Override
-    public void onStartComposeMessage() {
-        mHost.onStartComposeMessage();
-    }
-
-    @Override
-    public SubscriptionListEntry getSubscriptionEntryForSelfParticipant(
-            final String selfParticipantId, final boolean excludeDefault) {
-        // TODO: ConversationMessageView is the only one using this. We should probably
-        // inject this into the view during binding in the ConversationMessageAdapter.
-        return mBinding.getData().getSubscriptionEntryForSelfParticipant(selfParticipantId,
-                excludeDefault);
-    }
-
-    @Override
-    public SimSelectorView getSimSelectorView() {
-        return (SimSelectorView) getView().findViewById(R.id.sim_selector);
-    }
-
-    @Override
-    public MediaPicker createMediaPicker() {
-        return new MediaPicker(getActivity());
-    }
-
-    @Override
-    public void notifyOfAttachmentLoadFailed() {
-        UiUtils.showToastAtBottom(R.string.attachment_load_failed_dialog_message);
-    }
-
-    @Override
-    public void warnOfExceedingMessageLimit(final boolean sending, final boolean tooManyVideos) {
-        warnOfExceedingMessageLimit(sending, mComposeMessageView, mConversationId,
-                getActivity(), tooManyVideos);
-    }
-
-    public static void warnOfExceedingMessageLimit(final boolean sending,
-            final ComposeMessageView composeMessageView, final String conversationId,
-            final Activity activity, final boolean tooManyVideos) {
-        final AlertDialog.Builder builder =
-                new AlertDialog.Builder(activity)
-                    .setTitle(R.string.mms_attachment_limit_reached);
-
-        if (sending) {
-            if (tooManyVideos) {
-                builder.setMessage(R.string.video_attachment_limit_exceeded_when_sending);
-            } else {
-                builder.setMessage(R.string.attachment_limit_reached_dialog_message_when_sending)
-                        .setNegativeButton(R.string.attachment_limit_reached_send_anyway,
-                                new OnClickListener() {
-                                    @Override
-                                    public void onClick(final DialogInterface dialog,
-                                            final int which) {
-                                        composeMessageView.sendMessageIgnoreMessageSizeLimit();
-                                    }
-                                });
-            }
-            builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
-                @Override
-                public void onClick(final DialogInterface dialog, final int which) {
-                    showAttachmentChooser(conversationId, activity);
-                }});
-        } else {
-            builder.setMessage(R.string.attachment_limit_reached_dialog_message_when_composing)
-                    .setPositiveButton(android.R.string.ok, null);
-        }
-        builder.show();
-    }
-
-    @Override
-    public void showAttachmentChooser() {
-        showAttachmentChooser(mConversationId, getActivity());
-    }
-
-    public static void showAttachmentChooser(final String conversationId,
-            final Activity activity) {
-        UIIntents.get().launchAttachmentChooserActivity(activity,
-                conversationId, REQUEST_CHOOSE_ATTACHMENTS);
-    }
-
-    private void updateActionAndStatusBarColor(final ActionBar actionBar) {
-        final int themeColor = ConversationDrawables.get().getConversationThemeColor();
-        actionBar.setBackgroundDrawable(new ColorDrawable(themeColor));
-        UiUtils.setStatusBarColor(getActivity(), themeColor);
-    }
-
-    public void updateActionBar(final ActionBar actionBar) {
-        if (mComposeMessageView == null || !mComposeMessageView.updateActionBar(actionBar)) {
-            updateActionAndStatusBarColor(actionBar);
-            // We update this regardless of whether or not the action bar is showing so that we
-            // don't get a race when it reappears.
-            actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
-            actionBar.setDisplayHomeAsUpEnabled(true);
-            // Reset the back arrow to its default
-            actionBar.setHomeAsUpIndicator(0);
-            View customView = actionBar.getCustomView();
-            if (customView == null || customView.getId() != R.id.conversation_title_container) {
-                final LayoutInflater inflator = (LayoutInflater)
-                        getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-                customView = inflator.inflate(R.layout.action_bar_conversation_name, null);
-                customView.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(final View v) {
-                        onBackPressed();
-                    }
-                });
-                actionBar.setCustomView(customView);
-            }
-
-            final TextView conversationNameView =
-                    (TextView) customView.findViewById(R.id.conversation_title);
-            final String conversationName = getConversationName();
-            if (!TextUtils.isEmpty(conversationName)) {
-                // RTL : To format conversation title if it happens to be phone numbers.
-                final BidiFormatter bidiFormatter = BidiFormatter.getInstance();
-                final String formattedName = bidiFormatter.unicodeWrap(
-                        UiUtils.commaEllipsize(
-                                conversationName,
-                                conversationNameView.getPaint(),
-                                conversationNameView.getWidth(),
-                                getString(R.string.plus_one),
-                                getString(R.string.plus_n)).toString(),
-                        TextDirectionHeuristicsCompat.LTR);
-                conversationNameView.setText(formattedName);
-                // In case phone numbers are mixed in the conversation name, we need to vocalize it.
-                final String vocalizedConversationName =
-                        AccessibilityUtil.getVocalizedPhoneNumber(getResources(), conversationName);
-                conversationNameView.setContentDescription(vocalizedConversationName);
-                getActivity().setTitle(conversationName);
-            } else {
-                final String appName = getString(R.string.app_name);
-                conversationNameView.setText(appName);
-                getActivity().setTitle(appName);
-            }
-
-            // When conversation is showing and media picker is not showing, then hide the action
-            // bar only when we are in landscape mode, with IME open.
-            if (mHost.isImeOpen() && UiUtils.isLandscapeMode()) {
-                actionBar.hide();
-            } else {
-                actionBar.show();
-            }
-        }
-    }
-
-    @Override
-    public boolean shouldShowSubjectEditor() {
-        return true;
-    }
-
-    @Override
-    public boolean shouldHideAttachmentsWhenSimSelectorShown() {
-        return false;
-    }
-
-    @Override
-    public void showHideSimSelector(final boolean show) {
-        // no-op for now
-    }
-
-    @Override
-    public int getSimSelectorItemLayoutId() {
-        return R.layout.sim_selector_item_view;
-    }
-
-    @Override
-    public Uri getSelfSendButtonIconUri() {
-        return null;    // use default button icon uri
-    }
-
-    @Override
-    public int overrideCounterColor() {
-        return -1;      // don't override the color
-    }
-
-    @Override
-    public void onAttachmentsChanged(final boolean haveAttachments) {
-        // no-op for now
-    }
-
-    @Override
-    public void onDraftChanged(final DraftMessageData data, final int changeFlags) {
-        mDraftMessageDataModel.ensureBound(data);
-        // We're specifically only interested in ATTACHMENTS_CHANGED from the widget. Ignore
-        // other changes. When the widget changes an attachment, we need to reload the draft.
-        if (changeFlags ==
-                (DraftMessageData.WIDGET_CHANGED | DraftMessageData.ATTACHMENTS_CHANGED)) {
-            mClearLocalDraft = true;        // force a reload of the draft in onResume
-        }
-    }
-
-    @Override
-    public void onDraftAttachmentLimitReached(final DraftMessageData data) {
-        // no-op for now
-    }
-
-    @Override
-    public void onDraftAttachmentLoadFailed() {
-        // no-op for now
-    }
-
-    @Override
-    public int getAttachmentsClearedFlags() {
-        return DraftMessageData.ATTACHMENTS_CHANGED;
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ConversationInput.java b/src/com/android/messaging/ui/conversation/ConversationInput.java
deleted file mode 100644
index cf98dbe..0000000
--- a/src/com/android/messaging/ui/conversation/ConversationInput.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-
-/**
- * The base class for a method of user input, e.g. media picker.
- */
-public abstract class ConversationInput {
-    /**
-     * The host component where all input components are contained. This is typically the
-     * conversation fragment but may be mocked in test code.
-     */
-    public interface ConversationInputBase {
-        boolean showHideInternal(final ConversationInput target, final boolean show,
-                final boolean animate);
-        String getInputStateKey(final ConversationInput input);
-        void beginUpdate();
-        void handleOnShow(final ConversationInput target);
-        void endUpdate();
-    }
-
-    protected boolean mShowing;
-    protected ConversationInputBase mConversationInputBase;
-
-    public abstract boolean show(boolean animate);
-    public abstract boolean hide(boolean animate);
-
-    public ConversationInput(ConversationInputBase baseHost, final boolean isShowing) {
-        mConversationInputBase = baseHost;
-        mShowing = isShowing;
-    }
-
-    public boolean onBackPressed() {
-        if (mShowing) {
-            mConversationInputBase.showHideInternal(this, false /* show */, true /* animate */);
-            return true;
-        }
-        return false;
-    }
-
-    public boolean onNavigationUpPressed() {
-        return false;
-    }
-
-    /**
-     * Toggle the visibility of this view.
-     * @param animate
-     * @return true if the view is now shown, false if it now hidden
-     */
-    public boolean toggle(final boolean animate) {
-        mConversationInputBase.showHideInternal(this, !mShowing /* show */, true /* animate */);
-        return mShowing;
-    }
-
-    public void saveState(final Bundle savedState) {
-        savedState.putBoolean(mConversationInputBase.getInputStateKey(this), mShowing);
-    }
-
-    public void restoreState(final Bundle savedState) {
-        // Things are hidden by default, so only handle show.
-        if (savedState.getBoolean(mConversationInputBase.getInputStateKey(this))) {
-            mConversationInputBase.showHideInternal(this, true /* show */, false /* animate */);
-        }
-    }
-
-    public boolean updateActionBar(final ActionBar actionBar) {
-        return false;
-    }
-
-    /**
-     * Update our visibility flag in response to visibility change, both for actions
-     * initiated by this class (through the show/hide methods), and for external changes
-     * tracked by event listeners (e.g. ImeStateObserver, MediaPickerListener). As part of
-     * handling an input showing, we will hide all other inputs to ensure they are mutually
-     * exclusive.
-     */
-    protected void onVisibilityChanged(final boolean visible) {
-        if (mShowing != visible) {
-            mConversationInputBase.beginUpdate();
-            mShowing = visible;
-            if (visible) {
-                mConversationInputBase.handleOnShow(this);
-            }
-            mConversationInputBase.endUpdate();
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ConversationInputManager.java b/src/com/android/messaging/ui/conversation/ConversationInputManager.java
deleted file mode 100644
index 3d42d78..0000000
--- a/src/com/android/messaging/ui/conversation/ConversationInputManager.java
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.app.FragmentManager;
-import android.content.Context;
-import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-import android.widget.EditText;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.binding.ImmutableBindingRef;
-import com.android.messaging.datamodel.data.ConversationData;
-import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
-import com.android.messaging.datamodel.data.ConversationData.SimpleConversationDataListener;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageSubscriptionDataProvider;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.PendingAttachmentData;
-import com.android.messaging.datamodel.data.SubscriptionListData.SubscriptionListEntry;
-import com.android.messaging.ui.ConversationDrawables;
-import com.android.messaging.ui.mediapicker.MediaPicker;
-import com.android.messaging.ui.mediapicker.MediaPicker.MediaPickerListener;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ImeUtil;
-import com.android.messaging.util.ImeUtil.ImeStateHost;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.Collection;
-
-/**
- * Manages showing/hiding/persisting different mutually exclusive UI components nested in
- * ConversationFragment that take user inputs, i.e. media picker, SIM selector and
- * IME keyboard (the IME keyboard is not owned by Bugle, but we try to model it the same way
- * as the other components).
- */
-public class ConversationInputManager implements ConversationInput.ConversationInputBase {
-    /**
-     * The host component where all input components are contained. This is typically the
-     * conversation fragment but may be mocked in test code.
-     */
-    public interface ConversationInputHost extends DraftMessageSubscriptionDataProvider {
-        void invalidateActionBar();
-        void setOptionsMenuVisibility(boolean visible);
-        void dismissActionMode();
-        void selectSim(SubscriptionListEntry subscriptionData);
-        void onStartComposeMessage();
-        SimSelectorView getSimSelectorView();
-        MediaPicker createMediaPicker();
-        void showHideSimSelector(boolean show);
-        int getSimSelectorItemLayoutId();
-    }
-
-    /**
-     * The "sink" component where all inputs components will direct the user inputs to. This is
-     * typically the ComposeMessageView but may be mocked in test code.
-     */
-    public interface ConversationInputSink {
-        void onMediaItemsSelected(Collection<MessagePartData> items);
-        void onMediaItemsUnselected(MessagePartData item);
-        void onPendingAttachmentAdded(PendingAttachmentData pendingItem);
-        void resumeComposeMessage();
-        EditText getComposeEditText();
-        void setAccessibility(boolean enabled);
-    }
-
-    private final ConversationInputHost mHost;
-    private final ConversationInputSink mSink;
-
-    /** Dependencies injected from the host during construction */
-    private final FragmentManager mFragmentManager;
-    private final Context mContext;
-    private final ImeStateHost mImeStateHost;
-    private final ImmutableBindingRef<ConversationData> mConversationDataModel;
-    private final ImmutableBindingRef<DraftMessageData> mDraftDataModel;
-
-    private final ConversationInput[] mInputs;
-    private final ConversationMediaPicker mMediaInput;
-    private final ConversationSimSelector mSimInput;
-    private final ConversationImeKeyboard mImeInput;
-    private int mUpdateCount;
-
-    private final ImeUtil.ImeStateObserver mImeStateObserver = new ImeUtil.ImeStateObserver() {
-        @Override
-        public void onImeStateChanged(final boolean imeOpen) {
-            mImeInput.onVisibilityChanged(imeOpen);
-        }
-    };
-
-    private final ConversationDataListener mDataListener = new SimpleConversationDataListener() {
-        @Override
-        public void onConversationParticipantDataLoaded(ConversationData data) {
-            mConversationDataModel.ensureBound(data);
-        }
-
-        @Override
-        public void onSubscriptionListDataLoaded(ConversationData data) {
-            mConversationDataModel.ensureBound(data);
-            mSimInput.onSubscriptionListDataLoaded(data.getSubscriptionListData());
-        }
-    };
-
-    public ConversationInputManager(
-            final Context context,
-            final ConversationInputHost host,
-            final ConversationInputSink sink,
-            final ImeStateHost imeStateHost,
-            final FragmentManager fm,
-            final BindingBase<ConversationData> conversationDataModel,
-            final BindingBase<DraftMessageData> draftDataModel,
-            final Bundle savedState) {
-        mHost = host;
-        mSink = sink;
-        mFragmentManager = fm;
-        mContext = context;
-        mImeStateHost = imeStateHost;
-        mConversationDataModel = BindingBase.createBindingReference(conversationDataModel);
-        mDraftDataModel = BindingBase.createBindingReference(draftDataModel);
-
-        // Register listeners on dependencies.
-        mImeStateHost.registerImeStateObserver(mImeStateObserver);
-        mConversationDataModel.getData().addConversationDataListener(mDataListener);
-
-        // Initialize the inputs
-        mMediaInput = new ConversationMediaPicker(this);
-        mSimInput = new SimSelector(this);
-        mImeInput = new ConversationImeKeyboard(this, mImeStateHost.isImeOpen());
-        mInputs = new ConversationInput[] { mMediaInput, mSimInput, mImeInput };
-
-        if (savedState != null) {
-            for (int i = 0; i < mInputs.length; i++) {
-                mInputs[i].restoreState(savedState);
-            }
-        }
-        updateHostOptionsMenu();
-    }
-
-    public void onDetach() {
-        mImeStateHost.unregisterImeStateObserver(mImeStateObserver);
-        // Don't need to explicitly unregister for data model events. It will unregister all
-        // listeners automagically on unbind.
-    }
-
-    public void onSaveInputState(final Bundle savedState) {
-        for (int i = 0; i < mInputs.length; i++) {
-            mInputs[i].saveState(savedState);
-        }
-    }
-
-    @Override
-    public String getInputStateKey(final ConversationInput input) {
-        return input.getClass().getCanonicalName() + "_savedstate_";
-    }
-
-    public boolean onBackPressed() {
-        for (int i = 0; i < mInputs.length; i++) {
-            if (mInputs[i].onBackPressed()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public boolean onNavigationUpPressed() {
-        for (int i = 0; i < mInputs.length; i++) {
-            if (mInputs[i].onNavigationUpPressed()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public void resetMediaPickerState() {
-        mMediaInput.resetViewHolderState();
-    }
-
-    public void showHideMediaPicker(final boolean show, final boolean animate) {
-        showHideInternal(mMediaInput, show, animate);
-    }
-
-    /**
-     * Show or hide the sim selector
-     * @param show visibility
-     * @param animate whether to animate the change in visibility
-     * @return true if the state of the visibility was changed
-     */
-    public boolean showHideSimSelector(final boolean show, final boolean animate) {
-        return showHideInternal(mSimInput, show, animate);
-    }
-
-    public void showHideImeKeyboard(final boolean show, final boolean animate) {
-        showHideInternal(mImeInput, show, animate);
-    }
-
-    public void hideAllInputs(final boolean animate) {
-        beginUpdate();
-        for (int i = 0; i < mInputs.length; i++) {
-            showHideInternal(mInputs[i], false, animate);
-        }
-        endUpdate();
-    }
-
-    /**
-     * Toggle the visibility of the sim selector.
-     * @param animate
-     * @param subEntry
-     * @return true if the view is now shown, false if it now hidden
-     */
-    public boolean toggleSimSelector(final boolean animate, final SubscriptionListEntry subEntry) {
-        mSimInput.setSelected(subEntry);
-        return mSimInput.toggle(animate);
-    }
-
-    public boolean updateActionBar(final ActionBar actionBar) {
-        for (int i = 0; i < mInputs.length; i++) {
-            if (mInputs[i].mShowing) {
-                return mInputs[i].updateActionBar(actionBar);
-            }
-        }
-        return false;
-    }
-
-    @VisibleForTesting
-    boolean isMediaPickerVisible() {
-        return mMediaInput.mShowing;
-    }
-
-    @VisibleForTesting
-    boolean isSimSelectorVisible() {
-        return mSimInput.mShowing;
-    }
-
-    @VisibleForTesting
-    boolean isImeKeyboardVisible() {
-        return mImeInput.mShowing;
-    }
-
-    @VisibleForTesting
-    void testNotifyImeStateChanged(final boolean imeOpen) {
-        mImeStateObserver.onImeStateChanged(imeOpen);
-    }
-
-    /**
-     * returns true if the state of the visibility was actually changed
-     */
-    @Override
-    public boolean showHideInternal(final ConversationInput target, final boolean show,
-            final boolean animate) {
-        if (!mConversationDataModel.isBound()) {
-            return false;
-        }
-
-        if (target.mShowing == show) {
-            return false;
-        }
-        beginUpdate();
-        boolean success;
-        if (!show) {
-            success = target.hide(animate);
-        } else {
-            success = target.show(animate);
-        }
-
-        if (success) {
-            target.onVisibilityChanged(show);
-        }
-        endUpdate();
-        return true;
-    }
-
-    @Override
-    public void handleOnShow(final ConversationInput target) {
-        if (!mConversationDataModel.isBound()) {
-            return;
-        }
-        beginUpdate();
-
-        // All inputs are mutually exclusive. Showing one will hide everything else.
-        // The one exception, is that the keyboard and location media chooser can be open at the
-        // time to enable searching within that chooser
-        for (int i = 0; i < mInputs.length; i++) {
-            final ConversationInput currInput = mInputs[i];
-            if (currInput != target) {
-                // TODO : If there's more exceptions we will want to make this more
-                // generic
-                if (currInput instanceof ConversationMediaPicker &&
-                        target instanceof ConversationImeKeyboard &&
-                        mMediaInput.getExistingOrCreateMediaPicker() != null &&
-                        mMediaInput.getExistingOrCreateMediaPicker().canShowIme()) {
-                    // Allow the keyboard and location mediaPicker to be open at the same time,
-                    // but ensure the media picker is full screen to allow enough room
-                    mMediaInput.getExistingOrCreateMediaPicker().setFullScreen(true);
-                    continue;
-                }
-                showHideInternal(currInput, false /* show */, false /* animate */);
-            }
-        }
-        // Always dismiss action mode on show.
-        mHost.dismissActionMode();
-        // Invoking any non-keyboard input UI is treated as starting message compose.
-        if (target != mImeInput) {
-            mHost.onStartComposeMessage();
-        }
-        endUpdate();
-    }
-
-    @Override
-    public void beginUpdate() {
-        mUpdateCount++;
-    }
-
-    @Override
-    public void endUpdate() {
-        Assert.isTrue(mUpdateCount > 0);
-        if (--mUpdateCount == 0) {
-            // Always try to update the host action bar after every update cycle.
-            mHost.invalidateActionBar();
-        }
-    }
-
-    private void updateHostOptionsMenu() {
-        mHost.setOptionsMenuVisibility(!mMediaInput.isOpen());
-    }
-
-    /**
-     * Manages showing/hiding the media picker in conversation.
-     */
-    private class ConversationMediaPicker extends ConversationInput {
-        public ConversationMediaPicker(ConversationInputBase baseHost) {
-            super(baseHost, false);
-        }
-
-        private MediaPicker mMediaPicker;
-
-        @Override
-        public boolean show(boolean animate) {
-            if (mMediaPicker == null) {
-                mMediaPicker = getExistingOrCreateMediaPicker();
-                setConversationThemeColor(ConversationDrawables.get().getConversationThemeColor());
-                mMediaPicker.setSubscriptionDataProvider(mHost);
-                mMediaPicker.setDraftMessageDataModel(mDraftDataModel);
-                mMediaPicker.setListener(new MediaPickerListener() {
-                    @Override
-                    public void onOpened() {
-                        handleStateChange();
-                    }
-
-                    @Override
-                    public void onFullScreenChanged(boolean fullScreen) {
-                        // When we're full screen, we want to disable accessibility on the
-                        // ComposeMessageView controls (attach button, message input, sim chooser)
-                        // that are hiding underneath the action bar.
-                        mSink.setAccessibility(!fullScreen /*enabled*/);
-                        handleStateChange();
-                    }
-
-                    @Override
-                    public void onDismissed() {
-                        // Re-enable accessibility on all controls now that the media picker is
-                        // going away.
-                        mSink.setAccessibility(true /*enabled*/);
-                        handleStateChange();
-                    }
-
-                    private void handleStateChange() {
-                        onVisibilityChanged(isOpen());
-                        mHost.invalidateActionBar();
-                        updateHostOptionsMenu();
-                    }
-
-                    @Override
-                    public void onItemsSelected(final Collection<MessagePartData> items,
-                            final boolean resumeCompose) {
-                        mSink.onMediaItemsSelected(items);
-                        mHost.invalidateActionBar();
-                        if (resumeCompose) {
-                            mSink.resumeComposeMessage();
-                        }
-                    }
-
-                    @Override
-                    public void onItemUnselected(final MessagePartData item) {
-                        mSink.onMediaItemsUnselected(item);
-                        mHost.invalidateActionBar();
-                    }
-
-                    @Override
-                    public void onConfirmItemSelection() {
-                        mSink.resumeComposeMessage();
-                    }
-
-                    @Override
-                    public void onPendingItemAdded(final PendingAttachmentData pendingItem) {
-                        mSink.onPendingAttachmentAdded(pendingItem);
-                    }
-
-                    @Override
-                    public void onChooserSelected(final int chooserIndex) {
-                        mHost.invalidateActionBar();
-                        mHost.dismissActionMode();
-                    }
-                });
-            }
-
-            mMediaPicker.open(MediaPicker.MEDIA_TYPE_DEFAULT, animate);
-
-            return isOpen();
-        }
-
-        @Override
-        public boolean hide(boolean animate) {
-            if (mMediaPicker != null) {
-                mMediaPicker.dismiss(animate);
-            }
-            return !isOpen();
-        }
-
-        public void resetViewHolderState() {
-            if (mMediaPicker != null) {
-                mMediaPicker.resetViewHolderState();
-            }
-        }
-
-        public void setConversationThemeColor(final int themeColor) {
-            if (mMediaPicker != null) {
-                mMediaPicker.setConversationThemeColor(themeColor);
-            }
-        }
-
-        private boolean isOpen() {
-            return (mMediaPicker != null && mMediaPicker.isOpen());
-        }
-
-        private MediaPicker getExistingOrCreateMediaPicker() {
-            if (mMediaPicker != null) {
-                return mMediaPicker;
-            }
-            MediaPicker mediaPicker = (MediaPicker)
-                    mFragmentManager.findFragmentByTag(MediaPicker.FRAGMENT_TAG);
-            if (mediaPicker == null) {
-                mediaPicker = mHost.createMediaPicker();
-                if (mediaPicker == null) {
-                    return null;    // this use of ComposeMessageView doesn't support media picking
-                }
-                mFragmentManager.beginTransaction().replace(
-                        R.id.mediapicker_container,
-                        mediaPicker,
-                        MediaPicker.FRAGMENT_TAG).commit();
-            }
-            return mediaPicker;
-        }
-
-        @Override
-        public boolean updateActionBar(ActionBar actionBar) {
-            if (isOpen()) {
-                mMediaPicker.updateActionBar(actionBar);
-                return true;
-            }
-            return false;
-        }
-
-        @Override
-        public boolean onNavigationUpPressed() {
-            if (isOpen() && mMediaPicker.isFullScreen()) {
-                return onBackPressed();
-            }
-            return super.onNavigationUpPressed();
-        }
-
-        public boolean onBackPressed() {
-            if (mMediaPicker != null && mMediaPicker.onBackPressed()) {
-                return true;
-            }
-            return super.onBackPressed();
-        }
-    }
-
-    /**
-     * Manages showing/hiding the SIM selector in conversation.
-     */
-    private class SimSelector extends ConversationSimSelector {
-        public SimSelector(ConversationInputBase baseHost) {
-            super(baseHost);
-        }
-
-        @Override
-        protected SimSelectorView getSimSelectorView() {
-            return mHost.getSimSelectorView();
-        }
-
-        @Override
-        public int getSimSelectorItemLayoutId() {
-            return mHost.getSimSelectorItemLayoutId();
-        }
-
-        @Override
-        protected void selectSim(SubscriptionListEntry item) {
-            mHost.selectSim(item);
-        }
-
-        @Override
-        public boolean show(boolean animate) {
-            final boolean result = super.show(animate);
-            mHost.showHideSimSelector(true /*show*/);
-            return result;
-        }
-
-        @Override
-        public boolean hide(boolean animate) {
-            final boolean result = super.hide(animate);
-            mHost.showHideSimSelector(false /*show*/);
-            return result;
-        }
-    }
-
-    /**
-     * Manages showing/hiding the IME keyboard in conversation.
-     */
-    private class ConversationImeKeyboard extends ConversationInput {
-        public ConversationImeKeyboard(ConversationInputBase baseHost, final boolean isShowing) {
-            super(baseHost, isShowing);
-        }
-
-        @Override
-        public boolean show(boolean animate) {
-            ImeUtil.get().showImeKeyboard(mContext, mSink.getComposeEditText());
-            return true;
-        }
-
-        @Override
-        public boolean hide(boolean animate) {
-            ImeUtil.get().hideImeKeyboard(mContext, mSink.getComposeEditText());
-            return true;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ConversationMessageAdapter.java b/src/com/android/messaging/ui/conversation/ConversationMessageAdapter.java
deleted file mode 100644
index fb04bb4..0000000
--- a/src/com/android/messaging/ui/conversation/ConversationMessageAdapter.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.content.Context;
-import android.database.Cursor;
-import androidx.recyclerview.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.AsyncImageView;
-import com.android.messaging.ui.CursorRecyclerAdapter;
-import com.android.messaging.ui.AsyncImageView.AsyncImageViewDelayLoader;
-import com.android.messaging.ui.conversation.ConversationMessageView.ConversationMessageViewHost;
-import com.android.messaging.util.Assert;
-
-import java.util.HashSet;
-import java.util.List;
-
-/**
- * Provides an interface to expose Conversation Message Cursor data to a UI widget like a
- * RecyclerView.
- */
-public class ConversationMessageAdapter extends
-    CursorRecyclerAdapter<ConversationMessageAdapter.ConversationMessageViewHolder> {
-
-    private final ConversationMessageViewHost mHost;
-    private final AsyncImageViewDelayLoader mImageViewDelayLoader;
-    private final View.OnClickListener mViewClickListener;
-    private final View.OnLongClickListener mViewLongClickListener;
-    private boolean mOneOnOne;
-    private String mSelectedMessageId;
-
-    public ConversationMessageAdapter(final Context context, final Cursor cursor,
-        final ConversationMessageViewHost host,
-        final AsyncImageViewDelayLoader imageViewDelayLoader,
-        final View.OnClickListener viewClickListener,
-        final View.OnLongClickListener longClickListener) {
-        super(context, cursor, 0);
-        mHost = host;
-        mViewClickListener = viewClickListener;
-        mViewLongClickListener = longClickListener;
-        mImageViewDelayLoader = imageViewDelayLoader;
-        setHasStableIds(true);
-    }
-
-    @Override
-    public void bindViewHolder(final ConversationMessageViewHolder holder,
-            final Context context, final Cursor cursor) {
-        Assert.isTrue(holder.mView instanceof ConversationMessageView);
-        final ConversationMessageView conversationMessageView =
-                (ConversationMessageView) holder.mView;
-        conversationMessageView.bind(cursor, mOneOnOne, mSelectedMessageId);
-    }
-
-    @Override
-    public ConversationMessageViewHolder createViewHolder(final Context context,
-            final ViewGroup parent, final int viewType) {
-        final LayoutInflater layoutInflater = LayoutInflater.from(context);
-        final ConversationMessageView conversationMessageView = (ConversationMessageView)
-                layoutInflater.inflate(R.layout.conversation_message_view, null);
-        conversationMessageView.setHost(mHost);
-        conversationMessageView.setImageViewDelayLoader(mImageViewDelayLoader);
-        return new ConversationMessageViewHolder(conversationMessageView,
-                            mViewClickListener, mViewLongClickListener);
-    }
-
-    public void setSelectedMessage(final String messageId) {
-        mSelectedMessageId = messageId;
-        notifyDataSetChanged();
-    }
-
-    public void setOneOnOne(final boolean oneOnOne, final boolean invalidate) {
-        if (mOneOnOne != oneOnOne) {
-            mOneOnOne = oneOnOne;
-            if (invalidate) {
-                notifyDataSetChanged();
-            }
-        }
-    }
-
-    /**
-    * ViewHolder that holds a ConversationMessageView.
-    */
-    public static class ConversationMessageViewHolder extends RecyclerView.ViewHolder {
-        final View mView;
-
-        /**
-         * @param viewClickListener a View.OnClickListener that should define the interaction when
-         *        an item in the RecyclerView is clicked.
-         */
-        public ConversationMessageViewHolder(final View itemView,
-                final View.OnClickListener viewClickListener,
-                final View.OnLongClickListener viewLongClickListener) {
-            super(itemView);
-            mView = itemView;
-
-            mView.setOnClickListener(viewClickListener);
-            mView.setOnLongClickListener(viewLongClickListener);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ConversationMessageBubbleView.java b/src/com/android/messaging/ui/conversation/ConversationMessageBubbleView.java
deleted file mode 100644
index ef6aeb4..0000000
--- a/src/com/android/messaging/ui/conversation/ConversationMessageBubbleView.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.ObjectAnimator;
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.ViewGroup;
-import android.widget.LinearLayout;
-
-import com.android.messaging.R;
-import com.android.messaging.annotation.VisibleForAnimation;
-import com.android.messaging.datamodel.data.ConversationMessageBubbleData;
-import com.android.messaging.datamodel.data.ConversationMessageData;
-import com.android.messaging.util.UiUtils;
-
-/**
- * Shows the message bubble for one conversation message. It is able to animate size changes
- * by morphing when the message content changes size.
- */
-// TODO: Move functionality from ConversationMessageView into this class as appropriate
-public class ConversationMessageBubbleView extends LinearLayout {
-    private int mIntrinsicWidth;
-    private int mMorphedWidth;
-    private ObjectAnimator mAnimator;
-    private boolean mShouldAnimateWidthChange;
-    private final ConversationMessageBubbleData mData;
-    private int mRunningStartWidth;
-    private ViewGroup mBubbleBackground;
-
-    public ConversationMessageBubbleView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mData = new ConversationMessageBubbleData();
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mBubbleBackground = (ViewGroup) findViewById(R.id.message_text_and_info);
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-        final int newIntrinsicWidth = getMeasuredWidth();
-        if (mIntrinsicWidth == 0 && newIntrinsicWidth != mIntrinsicWidth) {
-            if (mShouldAnimateWidthChange) {
-                kickOffMorphAnimation(mIntrinsicWidth, newIntrinsicWidth);
-            }
-            mIntrinsicWidth = newIntrinsicWidth;
-        }
-
-        if (mMorphedWidth > 0) {
-            mBubbleBackground.getLayoutParams().width = mMorphedWidth;
-        } else {
-            mBubbleBackground.getLayoutParams().width = LayoutParams.WRAP_CONTENT;
-        }
-        mBubbleBackground.requestLayout();
-    }
-
-    @VisibleForAnimation
-    public void setMorphWidth(final int width) {
-        mMorphedWidth = width;
-        requestLayout();
-    }
-
-    public void bind(final ConversationMessageData data) {
-        final boolean changed = mData.bind(data);
-        // Animate width change only when we are binding to the same message, so that we may
-        // animate view size changes on the same message bubble due to things like status text
-        // change.
-        // Don't animate width change when the bubble contains attachments. Width animation is
-        // only suitable for text-only messages (where the bubble size change due to status or
-        // time stamp changes).
-        mShouldAnimateWidthChange = !changed && !data.hasAttachments();
-        if (mAnimator == null) {
-            mMorphedWidth = 0;
-        }
-    }
-
-    public void kickOffMorphAnimation(final int oldWidth, final int newWidth) {
-        if (mAnimator != null) {
-            mAnimator.setIntValues(mRunningStartWidth, newWidth);
-            return;
-        }
-        mRunningStartWidth = oldWidth;
-        mAnimator = ObjectAnimator.ofInt(this, "morphWidth", oldWidth, newWidth);
-        mAnimator.setDuration(UiUtils.MEDIAPICKER_TRANSITION_DURATION);
-        mAnimator.addListener(new AnimatorListener() {
-            @Override
-            public void onAnimationStart(Animator animator) {
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animator) {
-                mAnimator = null;
-                mMorphedWidth = 0;
-                // Allow the bubble to resize if, for example, the status text changed during
-                // the animation.  This will snap to the bigger size if needed.  This is intentional
-                // as animating immediately after looks really bad and switching layout params
-                // during the original animation does not achieve the desired effect.
-                mBubbleBackground.getLayoutParams().width = LayoutParams.WRAP_CONTENT;
-                mBubbleBackground.requestLayout();
-            }
-
-            @Override
-            public void onAnimationCancel(Animator animator) {
-            }
-
-            @Override
-            public void onAnimationRepeat(Animator animator) {
-            }
-        });
-        mAnimator.start();
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ConversationMessageView.java b/src/com/android/messaging/ui/conversation/ConversationMessageView.java
deleted file mode 100644
index 282e172..0000000
--- a/src/com/android/messaging/ui/conversation/ConversationMessageView.java
+++ /dev/null
@@ -1,1214 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import androidx.annotation.Nullable;
-import android.text.Spanned;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-import android.text.format.Formatter;
-import android.text.style.URLSpan;
-import android.text.util.Linkify;
-import android.util.AttributeSet;
-import android.util.DisplayMetrics;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.FrameLayout;
-import android.widget.ImageView.ScaleType;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.data.ConversationMessageData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.SubscriptionListData.SubscriptionListEntry;
-import com.android.messaging.datamodel.media.ImageRequestDescriptor;
-import com.android.messaging.datamodel.media.MessagePartImageRequestDescriptor;
-import com.android.messaging.datamodel.media.UriImageRequestDescriptor;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.ui.AsyncImageView;
-import com.android.messaging.ui.AsyncImageView.AsyncImageViewDelayLoader;
-import com.android.messaging.ui.AudioAttachmentView;
-import com.android.messaging.ui.ContactIconView;
-import com.android.messaging.ui.ConversationDrawables;
-import com.android.messaging.ui.MultiAttachmentLayout;
-import com.android.messaging.ui.MultiAttachmentLayout.OnAttachmentClickListener;
-import com.android.messaging.ui.PersonItemView;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.VideoThumbnailView;
-import com.android.messaging.util.AccessibilityUtil;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.UiUtils;
-import com.android.messaging.util.YouTubeUtil;
-import com.google.common.base.Predicate;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * The view for a single entry in a conversation.
- */
-public class ConversationMessageView extends FrameLayout implements View.OnClickListener,
-        View.OnLongClickListener, OnAttachmentClickListener {
-    public interface ConversationMessageViewHost {
-        boolean onAttachmentClick(ConversationMessageView view, MessagePartData attachment,
-                Rect imageBounds, boolean longPress);
-        SubscriptionListEntry getSubscriptionEntryForSelfParticipant(String selfParticipantId,
-                boolean excludeDefault);
-    }
-
-    private final ConversationMessageData mData;
-
-    private LinearLayout mMessageAttachmentsView;
-    private MultiAttachmentLayout mMultiAttachmentView;
-    private AsyncImageView mMessageImageView;
-    private TextView mMessageTextView;
-    private boolean mMessageTextHasLinks;
-    private boolean mMessageHasYouTubeLink;
-    private TextView mStatusTextView;
-    private TextView mTitleTextView;
-    private TextView mMmsInfoTextView;
-    private LinearLayout mMessageTitleLayout;
-    private TextView mSenderNameTextView;
-    private ContactIconView mContactIconView;
-    private ConversationMessageBubbleView mMessageBubble;
-    private View mSubjectView;
-    private TextView mSubjectLabel;
-    private TextView mSubjectText;
-    private View mDeliveredBadge;
-    private ViewGroup mMessageMetadataView;
-    private ViewGroup mMessageTextAndInfoView;
-    private TextView mSimNameView;
-
-    private boolean mOneOnOne;
-    private ConversationMessageViewHost mHost;
-
-    public ConversationMessageView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        // TODO: we should switch to using Binding and DataModel factory methods.
-        mData = new ConversationMessageData();
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        mContactIconView = (ContactIconView) findViewById(R.id.conversation_icon);
-        mContactIconView.setOnLongClickListener(new OnLongClickListener() {
-            @Override
-            public boolean onLongClick(final View view) {
-                ConversationMessageView.this.performLongClick();
-                return true;
-            }
-        });
-
-        mMessageAttachmentsView = (LinearLayout) findViewById(R.id.message_attachments);
-        mMultiAttachmentView = (MultiAttachmentLayout) findViewById(R.id.multiple_attachments);
-        mMultiAttachmentView.setOnAttachmentClickListener(this);
-
-        mMessageImageView = (AsyncImageView) findViewById(R.id.message_image);
-        mMessageImageView.setOnClickListener(this);
-        mMessageImageView.setOnLongClickListener(this);
-
-        mMessageTextView = (TextView) findViewById(R.id.message_text);
-        mMessageTextView.setOnClickListener(this);
-        IgnoreLinkLongClickHelper.ignoreLinkLongClick(mMessageTextView, this);
-
-        mStatusTextView = (TextView) findViewById(R.id.message_status);
-        mTitleTextView = (TextView) findViewById(R.id.message_title);
-        mMmsInfoTextView = (TextView) findViewById(R.id.mms_info);
-        mMessageTitleLayout = (LinearLayout) findViewById(R.id.message_title_layout);
-        mSenderNameTextView = (TextView) findViewById(R.id.message_sender_name);
-        mMessageBubble = (ConversationMessageBubbleView) findViewById(R.id.message_content);
-        mSubjectView = findViewById(R.id.subject_container);
-        mSubjectLabel = (TextView) mSubjectView.findViewById(R.id.subject_label);
-        mSubjectText = (TextView) mSubjectView.findViewById(R.id.subject_text);
-        mDeliveredBadge = findViewById(R.id.smsDeliveredBadge);
-        mMessageMetadataView = (ViewGroup) findViewById(R.id.message_metadata);
-        mMessageTextAndInfoView = (ViewGroup) findViewById(R.id.message_text_and_info);
-        mSimNameView = (TextView) findViewById(R.id.sim_name);
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        final int horizontalSpace = MeasureSpec.getSize(widthMeasureSpec);
-        final int iconSize = getResources()
-                .getDimensionPixelSize(R.dimen.conversation_message_contact_icon_size);
-
-        final int unspecifiedMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-        final int iconMeasureSpec = MeasureSpec.makeMeasureSpec(iconSize, MeasureSpec.EXACTLY);
-
-        mContactIconView.measure(iconMeasureSpec, iconMeasureSpec);
-
-        final int arrowWidth =
-                getResources().getDimensionPixelSize(R.dimen.message_bubble_arrow_width);
-
-        // We need to subtract contact icon width twice from the horizontal space to get
-        // the max leftover space because we want the message bubble to extend no further than the
-        // starting position of the message bubble in the opposite direction.
-        final int maxLeftoverSpace = horizontalSpace - mContactIconView.getMeasuredWidth() * 2
-                - arrowWidth - getPaddingLeft() - getPaddingRight();
-        final int messageContentWidthMeasureSpec = MeasureSpec.makeMeasureSpec(maxLeftoverSpace,
-                MeasureSpec.AT_MOST);
-
-        mMessageBubble.measure(messageContentWidthMeasureSpec, unspecifiedMeasureSpec);
-
-        final int maxHeight = Math.max(mContactIconView.getMeasuredHeight(),
-                mMessageBubble.getMeasuredHeight());
-        setMeasuredDimension(horizontalSpace, maxHeight + getPaddingBottom() + getPaddingTop());
-    }
-
-    @Override
-    protected void onLayout(final boolean changed, final int left, final int top, final int right,
-            final int bottom) {
-        final boolean isRtl = AccessibilityUtil.isLayoutRtl(this);
-
-        final int iconWidth = mContactIconView.getMeasuredWidth();
-        final int iconHeight = mContactIconView.getMeasuredHeight();
-        final int iconTop = getPaddingTop();
-        final int contentWidth = (right -left) - iconWidth - getPaddingLeft() - getPaddingRight();
-        final int contentHeight = mMessageBubble.getMeasuredHeight();
-        final int contentTop = iconTop;
-
-        final int iconLeft;
-        final int contentLeft;
-        if (mData.getIsIncoming()) {
-            if (isRtl) {
-                iconLeft = (right - left) - getPaddingRight() - iconWidth;
-                contentLeft = iconLeft - contentWidth;
-            } else {
-                iconLeft = getPaddingLeft();
-                contentLeft = iconLeft + iconWidth;
-            }
-        } else {
-            if (isRtl) {
-                iconLeft = getPaddingLeft();
-                contentLeft = iconLeft + iconWidth;
-            } else {
-                iconLeft = (right - left) - getPaddingRight() - iconWidth;
-                contentLeft = iconLeft - contentWidth;
-            }
-        }
-
-        mContactIconView.layout(iconLeft, iconTop, iconLeft + iconWidth, iconTop + iconHeight);
-
-        mMessageBubble.layout(contentLeft, contentTop, contentLeft + contentWidth,
-                contentTop + contentHeight);
-    }
-
-    /**
-     * Fills in the data associated with this view.
-     *
-     * @param cursor The cursor from a MessageList that this view is in, pointing to its entry.
-     */
-    public void bind(final Cursor cursor) {
-        bind(cursor, true, null);
-    }
-
-    /**
-     * Fills in the data associated with this view.
-     *
-     * @param cursor The cursor from a MessageList that this view is in, pointing to its entry.
-     * @param oneOnOne Whether this is a 1:1 conversation
-     */
-    public void bind(final Cursor cursor,
-            final boolean oneOnOne, final String selectedMessageId) {
-        mOneOnOne = oneOnOne;
-
-        // Update our UI model
-        mData.bind(cursor);
-        setSelected(TextUtils.equals(mData.getMessageId(), selectedMessageId));
-
-        // Update text and image content for the view.
-        updateViewContent();
-
-        // Update colors and layout parameters for the view.
-        updateViewAppearance();
-
-        updateContentDescription();
-    }
-
-    public void setHost(final ConversationMessageViewHost host) {
-        mHost = host;
-    }
-
-    /**
-     * Sets a delay loader instance to manage loading / resuming of image attachments.
-     */
-    public void setImageViewDelayLoader(final AsyncImageViewDelayLoader delayLoader) {
-        Assert.notNull(mMessageImageView);
-        mMessageImageView.setDelayLoader(delayLoader);
-        mMultiAttachmentView.setImageViewDelayLoader(delayLoader);
-    }
-
-    public ConversationMessageData getData() {
-        return mData;
-    }
-
-    /**
-     * Returns whether we should show simplified visual style for the message view (i.e. hide the
-     * avatar and bubble arrow, reduce padding).
-     */
-    private boolean shouldShowSimplifiedVisualStyle() {
-        return mData.getCanClusterWithPreviousMessage();
-    }
-
-    /**
-     * Returns whether we need to show message bubble arrow. We don't show arrow if the message
-     * contains media attachments or if shouldShowSimplifiedVisualStyle() is true.
-     */
-    private boolean shouldShowMessageBubbleArrow() {
-        return !shouldShowSimplifiedVisualStyle()
-                && !(mData.hasAttachments() || mMessageHasYouTubeLink);
-    }
-
-    /**
-     * Returns whether we need to show a message bubble for text content.
-     */
-    private boolean shouldShowMessageTextBubble() {
-        if (mData.hasText()) {
-            return true;
-        }
-        final String subjectText = MmsUtils.cleanseMmsSubject(getResources(),
-                mData.getMmsSubject());
-        if (!TextUtils.isEmpty(subjectText)) {
-            return true;
-        }
-        return false;
-    }
-
-    private void updateViewContent() {
-        updateMessageContent();
-        int titleResId = -1;
-        int statusResId = -1;
-        String statusText = null;
-        switch(mData.getStatus()) {
-            case MessageData.BUGLE_STATUS_INCOMING_AUTO_DOWNLOADING:
-            case MessageData.BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING:
-            case MessageData.BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD:
-            case MessageData.BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD:
-                titleResId = R.string.message_title_downloading;
-                statusResId = R.string.message_status_downloading;
-                break;
-
-            case MessageData.BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD:
-                if (!OsUtil.isSecondaryUser()) {
-                    titleResId = R.string.message_title_manual_download;
-                    if (isSelected()) {
-                        statusResId = R.string.message_status_download_action;
-                    } else {
-                        statusResId = R.string.message_status_download;
-                    }
-                }
-                break;
-
-            case MessageData.BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE:
-                if (!OsUtil.isSecondaryUser()) {
-                    titleResId = R.string.message_title_download_failed;
-                    statusResId = R.string.message_status_download_error;
-                }
-                break;
-
-            case MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED:
-                if (!OsUtil.isSecondaryUser()) {
-                    titleResId = R.string.message_title_download_failed;
-                    if (isSelected()) {
-                        statusResId = R.string.message_status_download_action;
-                    } else {
-                        statusResId = R.string.message_status_download;
-                    }
-                }
-                break;
-
-            case MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND:
-            case MessageData.BUGLE_STATUS_OUTGOING_SENDING:
-                statusResId = R.string.message_status_sending;
-                break;
-
-            case MessageData.BUGLE_STATUS_OUTGOING_RESENDING:
-            case MessageData.BUGLE_STATUS_OUTGOING_AWAITING_RETRY:
-                statusResId = R.string.message_status_send_retrying;
-                break;
-
-            case MessageData.BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER:
-                statusResId = R.string.message_status_send_failed_emergency_number;
-                break;
-
-            case MessageData.BUGLE_STATUS_OUTGOING_FAILED:
-                // don't show the error state unless we're the default sms app
-                if (PhoneUtils.getDefault().isDefaultSmsApp()) {
-                    if (isSelected()) {
-                        statusResId = R.string.message_status_resend;
-                    } else {
-                        statusResId = MmsUtils.mapRawStatusToErrorResourceId(
-                                mData.getStatus(), mData.getRawTelephonyStatus());
-                    }
-                    break;
-                }
-                // FALL THROUGH HERE
-
-            case MessageData.BUGLE_STATUS_OUTGOING_COMPLETE:
-            case MessageData.BUGLE_STATUS_OUTGOING_DELIVERED:
-            case MessageData.BUGLE_STATUS_INCOMING_COMPLETE:
-            default:
-                if (!mData.getCanClusterWithNextMessage()) {
-                    statusText = mData.getFormattedReceivedTimeStamp();
-                }
-                break;
-        }
-
-        final boolean titleVisible = (titleResId >= 0);
-        if (titleVisible) {
-            final String titleText = getResources().getString(titleResId);
-            mTitleTextView.setText(titleText);
-
-            final String mmsInfoText = getResources().getString(
-                    R.string.mms_info,
-                    Formatter.formatFileSize(getContext(), mData.getSmsMessageSize()),
-                    DateUtils.formatDateTime(
-                            getContext(),
-                            mData.getMmsExpiry(),
-                            DateUtils.FORMAT_SHOW_DATE |
-                            DateUtils.FORMAT_SHOW_TIME |
-                            DateUtils.FORMAT_NUMERIC_DATE |
-                            DateUtils.FORMAT_NO_YEAR));
-            mMmsInfoTextView.setText(mmsInfoText);
-            mMessageTitleLayout.setVisibility(View.VISIBLE);
-        } else {
-            mMessageTitleLayout.setVisibility(View.GONE);
-        }
-
-        final String subjectText = MmsUtils.cleanseMmsSubject(getResources(),
-                mData.getMmsSubject());
-        final boolean subjectVisible = !TextUtils.isEmpty(subjectText);
-
-        final boolean senderNameVisible = !mOneOnOne && !mData.getCanClusterWithNextMessage()
-                && mData.getIsIncoming();
-        if (senderNameVisible) {
-            mSenderNameTextView.setText(mData.getSenderDisplayName());
-            mSenderNameTextView.setVisibility(View.VISIBLE);
-        } else {
-            mSenderNameTextView.setVisibility(View.GONE);
-        }
-
-        if (statusResId >= 0) {
-            statusText = getResources().getString(statusResId);
-        }
-
-        // We set the text even if the view will be GONE for accessibility
-        mStatusTextView.setText(statusText);
-        final boolean statusVisible = !TextUtils.isEmpty(statusText);
-        if (statusVisible) {
-            mStatusTextView.setVisibility(View.VISIBLE);
-        } else {
-            mStatusTextView.setVisibility(View.GONE);
-        }
-
-        final boolean deliveredBadgeVisible =
-                mData.getStatus() == MessageData.BUGLE_STATUS_OUTGOING_DELIVERED;
-        mDeliveredBadge.setVisibility(deliveredBadgeVisible ? View.VISIBLE : View.GONE);
-
-        // Update the sim indicator.
-        final boolean showSimIconAsIncoming = mData.getIsIncoming() &&
-                (!mData.hasAttachments() || shouldShowMessageTextBubble());
-        final SubscriptionListEntry subscriptionEntry =
-                mHost.getSubscriptionEntryForSelfParticipant(mData.getSelfParticipantId(),
-                        true /* excludeDefault */);
-        final boolean simNameVisible = subscriptionEntry != null &&
-                !TextUtils.isEmpty(subscriptionEntry.displayName) &&
-                !mData.getCanClusterWithNextMessage();
-        if (simNameVisible) {
-            final String simNameText = mData.getIsIncoming() ? getResources().getString(
-                    R.string.incoming_sim_name_text, subscriptionEntry.displayName) :
-                        subscriptionEntry.displayName;
-            mSimNameView.setText(simNameText);
-            mSimNameView.setTextColor(showSimIconAsIncoming ? getResources().getColor(
-                    R.color.timestamp_text_incoming) : subscriptionEntry.displayColor);
-            mSimNameView.setVisibility(VISIBLE);
-        } else {
-            mSimNameView.setText(null);
-            mSimNameView.setVisibility(GONE);
-        }
-
-        final boolean metadataVisible = senderNameVisible || statusVisible
-                || deliveredBadgeVisible || simNameVisible;
-        mMessageMetadataView.setVisibility(metadataVisible ? View.VISIBLE : View.GONE);
-
-        final boolean messageTextAndOrInfoVisible = titleVisible || subjectVisible
-                || mData.hasText() || metadataVisible;
-        mMessageTextAndInfoView.setVisibility(
-                messageTextAndOrInfoVisible ? View.VISIBLE : View.GONE);
-
-        if (shouldShowSimplifiedVisualStyle()) {
-            mContactIconView.setVisibility(View.GONE);
-            mContactIconView.setImageResourceUri(null);
-        } else {
-            mContactIconView.setVisibility(View.VISIBLE);
-            final Uri avatarUri = AvatarUriUtil.createAvatarUri(
-                    mData.getSenderProfilePhotoUri(),
-                    mData.getSenderFullName(),
-                    mData.getSenderNormalizedDestination(),
-                    mData.getSenderContactLookupKey());
-            mContactIconView.setImageResourceUri(avatarUri, mData.getSenderContactId(),
-                    mData.getSenderContactLookupKey(), mData.getSenderNormalizedDestination());
-        }
-    }
-
-    private void updateMessageContent() {
-        // We must update the text before the attachments since we search the text to see if we
-        // should make a preview youtube image in the attachments
-        updateMessageText();
-        updateMessageAttachments();
-        updateMessageSubject();
-        mMessageBubble.bind(mData);
-    }
-
-    private void updateMessageAttachments() {
-        // Bind video, audio, and VCard attachments. If there are multiple, they stack vertically.
-        bindAttachmentsOfSameType(sVideoFilter,
-                R.layout.message_video_attachment, mVideoViewBinder, VideoThumbnailView.class);
-        bindAttachmentsOfSameType(sAudioFilter,
-                R.layout.message_audio_attachment, mAudioViewBinder, AudioAttachmentView.class);
-        bindAttachmentsOfSameType(sVCardFilter,
-                R.layout.message_vcard_attachment, mVCardViewBinder, PersonItemView.class);
-
-        // Bind image attachments. If there are multiple, they are shown in a collage view.
-        final List<MessagePartData> imageParts = mData.getAttachments(sImageFilter);
-        if (imageParts.size() > 1) {
-            Collections.sort(imageParts, sImageComparator);
-            mMultiAttachmentView.bindAttachments(imageParts, null, imageParts.size());
-            mMultiAttachmentView.setVisibility(View.VISIBLE);
-        } else {
-            mMultiAttachmentView.setVisibility(View.GONE);
-        }
-
-        // In the case that we have no image attachments and exactly one youtube link in a message
-        // then we will show a preview.
-        String youtubeThumbnailUrl = null;
-        String originalYoutubeLink = null;
-        if (mMessageTextHasLinks && imageParts.size() == 0) {
-            CharSequence messageTextWithSpans = mMessageTextView.getText();
-            final URLSpan[] spans = ((Spanned) messageTextWithSpans).getSpans(0,
-                    messageTextWithSpans.length(), URLSpan.class);
-            for (URLSpan span : spans) {
-                String url = span.getURL();
-                String youtubeLinkForUrl = YouTubeUtil.getYoutubePreviewImageLink(url);
-                if (!TextUtils.isEmpty(youtubeLinkForUrl)) {
-                    if (TextUtils.isEmpty(youtubeThumbnailUrl)) {
-                        // Save the youtube link if we don't already have one
-                        youtubeThumbnailUrl = youtubeLinkForUrl;
-                        originalYoutubeLink = url;
-                    } else {
-                        // We already have a youtube link. This means we have two youtube links so
-                        // we shall show none.
-                        youtubeThumbnailUrl = null;
-                        originalYoutubeLink = null;
-                        break;
-                    }
-                }
-            }
-        }
-        // We need to keep track if we have a youtube link in the message so that we will not show
-        // the arrow
-        mMessageHasYouTubeLink = !TextUtils.isEmpty(youtubeThumbnailUrl);
-
-        // We will show the message image view if there is one attachment or one youtube link
-        if (imageParts.size() == 1 || mMessageHasYouTubeLink) {
-            // Get the display metrics for a hint for how large to pull the image data into
-            final WindowManager windowManager = (WindowManager) getContext().
-                    getSystemService(Context.WINDOW_SERVICE);
-            final DisplayMetrics displayMetrics = new DisplayMetrics();
-            windowManager.getDefaultDisplay().getMetrics(displayMetrics);
-
-            final int iconSize = getResources()
-                    .getDimensionPixelSize(R.dimen.conversation_message_contact_icon_size);
-            final int desiredWidth = displayMetrics.widthPixels - iconSize - iconSize;
-
-            if (imageParts.size() == 1) {
-                final MessagePartData imagePart = imageParts.get(0);
-                // If the image is big, we want to scale it down to save memory since we're going to
-                // scale it down to fit into the bubble width. We don't constrain the height.
-                final ImageRequestDescriptor imageRequest =
-                        new MessagePartImageRequestDescriptor(imagePart,
-                                desiredWidth,
-                                MessagePartData.UNSPECIFIED_SIZE,
-                                false);
-                adjustImageViewBounds(imagePart);
-                mMessageImageView.setImageResourceId(imageRequest);
-                mMessageImageView.setTag(imagePart);
-            } else {
-                // Youtube Thumbnail image
-                final ImageRequestDescriptor imageRequest =
-                        new UriImageRequestDescriptor(Uri.parse(youtubeThumbnailUrl), desiredWidth,
-                            MessagePartData.UNSPECIFIED_SIZE, true /* allowCompression */,
-                            true /* isStatic */, false /* cropToCircle */,
-                            ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                            ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
-                mMessageImageView.setImageResourceId(imageRequest);
-                mMessageImageView.setTag(originalYoutubeLink);
-            }
-            mMessageImageView.setVisibility(View.VISIBLE);
-        } else {
-            mMessageImageView.setImageResourceId(null);
-            mMessageImageView.setVisibility(View.GONE);
-        }
-
-        // Show the message attachments container if any of its children are visible
-        boolean attachmentsVisible = false;
-        for (int i = 0, size = mMessageAttachmentsView.getChildCount(); i < size; i++) {
-            final View attachmentView = mMessageAttachmentsView.getChildAt(i);
-            if (attachmentView.getVisibility() == View.VISIBLE) {
-                attachmentsVisible = true;
-                break;
-            }
-        }
-        mMessageAttachmentsView.setVisibility(attachmentsVisible ? View.VISIBLE : View.GONE);
-    }
-
-    private void bindAttachmentsOfSameType(final Predicate<MessagePartData> attachmentTypeFilter,
-            final int attachmentViewLayoutRes, final AttachmentViewBinder viewBinder,
-            final Class<?> attachmentViewClass) {
-        final LayoutInflater layoutInflater = LayoutInflater.from(getContext());
-
-        // Iterate through all attachments of a particular type (video, audio, etc).
-        // Find the first attachment index that matches the given type if possible.
-        int attachmentViewIndex = -1;
-        View existingAttachmentView;
-        do {
-            existingAttachmentView = mMessageAttachmentsView.getChildAt(++attachmentViewIndex);
-        } while (existingAttachmentView != null &&
-                !(attachmentViewClass.isInstance(existingAttachmentView)));
-
-        for (final MessagePartData attachment : mData.getAttachments(attachmentTypeFilter)) {
-            View attachmentView = mMessageAttachmentsView.getChildAt(attachmentViewIndex);
-            if (!attachmentViewClass.isInstance(attachmentView)) {
-                attachmentView = layoutInflater.inflate(attachmentViewLayoutRes,
-                        mMessageAttachmentsView, false /* attachToRoot */);
-                attachmentView.setOnClickListener(this);
-                attachmentView.setOnLongClickListener(this);
-                mMessageAttachmentsView.addView(attachmentView, attachmentViewIndex);
-            }
-            viewBinder.bindView(attachmentView, attachment);
-            attachmentView.setTag(attachment);
-            attachmentView.setVisibility(View.VISIBLE);
-            attachmentViewIndex++;
-        }
-        // If there are unused views left over, unbind or remove them.
-        while (attachmentViewIndex < mMessageAttachmentsView.getChildCount()) {
-            final View attachmentView = mMessageAttachmentsView.getChildAt(attachmentViewIndex);
-            if (attachmentViewClass.isInstance(attachmentView)) {
-                mMessageAttachmentsView.removeViewAt(attachmentViewIndex);
-            } else {
-                // No more views of this type; we're done.
-                break;
-            }
-        }
-    }
-
-    private void updateMessageSubject() {
-        final String subjectText = MmsUtils.cleanseMmsSubject(getResources(),
-                mData.getMmsSubject());
-        final boolean subjectVisible = !TextUtils.isEmpty(subjectText);
-
-        if (subjectVisible) {
-            mSubjectText.setText(subjectText);
-            mSubjectView.setVisibility(View.VISIBLE);
-        } else {
-            mSubjectView.setVisibility(View.GONE);
-        }
-    }
-
-    private void updateMessageText() {
-        final String text = mData.getText();
-        if (!TextUtils.isEmpty(text)) {
-            mMessageTextView.setText(text);
-            // Linkify phone numbers, web urls, emails, and map addresses to allow users to
-            // click on them and take the default intent.
-            mMessageTextHasLinks = Linkify.addLinks(mMessageTextView, Linkify.ALL);
-            mMessageTextView.setVisibility(View.VISIBLE);
-        } else {
-            mMessageTextView.setVisibility(View.GONE);
-            mMessageTextHasLinks = false;
-        }
-    }
-
-    private void updateViewAppearance() {
-        final Resources res = getResources();
-        final ConversationDrawables drawableProvider = ConversationDrawables.get();
-        final boolean incoming = mData.getIsIncoming();
-        final boolean outgoing = !incoming;
-        final boolean showArrow =  shouldShowMessageBubbleArrow();
-
-        final int messageTopPaddingClustered =
-                res.getDimensionPixelSize(R.dimen.message_padding_same_author);
-        final int messageTopPaddingDefault =
-                res.getDimensionPixelSize(R.dimen.message_padding_default);
-        final int arrowWidth = res.getDimensionPixelOffset(R.dimen.message_bubble_arrow_width);
-        final int messageTextMinHeightDefault = res.getDimensionPixelSize(
-                R.dimen.conversation_message_contact_icon_size);
-        final int messageTextLeftRightPadding = res.getDimensionPixelOffset(
-                R.dimen.message_text_left_right_padding);
-        final int textTopPaddingDefault = res.getDimensionPixelOffset(
-                R.dimen.message_text_top_padding);
-        final int textBottomPaddingDefault = res.getDimensionPixelOffset(
-                R.dimen.message_text_bottom_padding);
-
-        // These values depend on whether the message has text, attachments, or both.
-        // We intentionally don't set defaults, so the compiler will tell us if we forget
-        // to set one of them, or if we set one more than once.
-        final int contentLeftPadding, contentRightPadding;
-        final Drawable textBackground;
-        final int textMinHeight;
-        final int textTopMargin;
-        final int textTopPadding, textBottomPadding;
-        final int textLeftPadding, textRightPadding;
-
-        if (mData.hasAttachments()) {
-            if (shouldShowMessageTextBubble()) {
-                // Text and attachment(s)
-                contentLeftPadding = incoming ? arrowWidth : 0;
-                contentRightPadding = outgoing ? arrowWidth : 0;
-                textBackground = drawableProvider.getBubbleDrawable(
-                        isSelected(),
-                        incoming,
-                        false /* needArrow */,
-                        mData.hasIncomingErrorStatus());
-                textMinHeight = messageTextMinHeightDefault;
-                textTopMargin = messageTopPaddingClustered;
-                textTopPadding = textTopPaddingDefault;
-                textBottomPadding = textBottomPaddingDefault;
-                textLeftPadding = messageTextLeftRightPadding;
-                textRightPadding = messageTextLeftRightPadding;
-                mMessageTextView.setTextIsSelectable(isSelected());
-            } else {
-                // Attachment(s) only
-                contentLeftPadding = incoming ? arrowWidth : 0;
-                contentRightPadding = outgoing ? arrowWidth : 0;
-                textBackground = null;
-                textMinHeight = 0;
-                textTopMargin = 0;
-                textTopPadding = 0;
-                textBottomPadding = 0;
-                textLeftPadding = 0;
-                textRightPadding = 0;
-            }
-        } else {
-            // Text only
-            contentLeftPadding = (!showArrow && incoming) ? arrowWidth : 0;
-            contentRightPadding = (!showArrow && outgoing) ? arrowWidth : 0;
-            textBackground = drawableProvider.getBubbleDrawable(
-                    isSelected(),
-                    incoming,
-                    shouldShowMessageBubbleArrow(),
-                    mData.hasIncomingErrorStatus());
-            textMinHeight = messageTextMinHeightDefault;
-            textTopMargin = 0;
-            textTopPadding = textTopPaddingDefault;
-            textBottomPadding = textBottomPaddingDefault;
-            mMessageTextView.setTextIsSelectable(isSelected());
-            if (showArrow && incoming) {
-                textLeftPadding = messageTextLeftRightPadding + arrowWidth;
-            } else {
-                textLeftPadding = messageTextLeftRightPadding;
-            }
-            if (showArrow && outgoing) {
-                textRightPadding = messageTextLeftRightPadding + arrowWidth;
-            } else {
-                textRightPadding = messageTextLeftRightPadding;
-            }
-        }
-
-        // These values do not depend on whether the message includes attachments
-        final int gravity = incoming ? (Gravity.START | Gravity.CENTER_VERTICAL) :
-                (Gravity.END | Gravity.CENTER_VERTICAL);
-        final int messageTopPadding = shouldShowSimplifiedVisualStyle() ?
-                messageTopPaddingClustered : messageTopPaddingDefault;
-        final int metadataTopPadding = res.getDimensionPixelOffset(
-                R.dimen.message_metadata_top_padding);
-
-        // Update the message text/info views
-        ImageUtils.setBackgroundDrawableOnView(mMessageTextAndInfoView, textBackground);
-        mMessageTextAndInfoView.setMinimumHeight(textMinHeight);
-        final LinearLayout.LayoutParams textAndInfoLayoutParams =
-                (LinearLayout.LayoutParams) mMessageTextAndInfoView.getLayoutParams();
-        textAndInfoLayoutParams.topMargin = textTopMargin;
-
-        if (UiUtils.isRtlMode()) {
-            // Need to switch right and left padding in RtL mode
-            mMessageTextAndInfoView.setPadding(textRightPadding, textTopPadding, textLeftPadding,
-                    textBottomPadding);
-            mMessageBubble.setPadding(contentRightPadding, 0, contentLeftPadding, 0);
-        } else {
-            mMessageTextAndInfoView.setPadding(textLeftPadding, textTopPadding, textRightPadding,
-                    textBottomPadding);
-            mMessageBubble.setPadding(contentLeftPadding, 0, contentRightPadding, 0);
-        }
-
-        // Update the message row and message bubble views
-        setPadding(getPaddingLeft(), messageTopPadding, getPaddingRight(), 0);
-        mMessageBubble.setGravity(gravity);
-        updateMessageAttachmentsAppearance(gravity);
-
-        mMessageMetadataView.setPadding(0, metadataTopPadding, 0, 0);
-
-        updateTextAppearance();
-
-        requestLayout();
-    }
-
-    private void updateContentDescription() {
-        StringBuilder description = new StringBuilder();
-
-        Resources res = getResources();
-        String separator = res.getString(R.string.enumeration_comma);
-
-        // Sender information
-        boolean hasPlainTextMessage = !(TextUtils.isEmpty(mData.getText()) ||
-                mMessageTextHasLinks);
-        if (mData.getIsIncoming()) {
-            int senderResId = hasPlainTextMessage
-                ? R.string.incoming_text_sender_content_description
-                : R.string.incoming_sender_content_description;
-            description.append(res.getString(senderResId, mData.getSenderDisplayName()));
-        } else {
-            int senderResId = hasPlainTextMessage
-                ? R.string.outgoing_text_sender_content_description
-                : R.string.outgoing_sender_content_description;
-            description.append(res.getString(senderResId));
-        }
-
-        if (mSubjectView.getVisibility() == View.VISIBLE) {
-            description.append(separator);
-            description.append(mSubjectText.getText());
-        }
-
-        if (mMessageTextView.getVisibility() == View.VISIBLE) {
-            // If the message has hyperlinks, we will let the user navigate to the text message so
-            // that the hyperlink can be clicked. Otherwise, the text message does not need to
-            // be reachable.
-            if (mMessageTextHasLinks) {
-                mMessageTextView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
-            } else {
-                mMessageTextView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
-                description.append(separator);
-                description.append(mMessageTextView.getText());
-            }
-        }
-
-        if (mMessageTitleLayout.getVisibility() == View.VISIBLE) {
-            description.append(separator);
-            description.append(mTitleTextView.getText());
-
-            description.append(separator);
-            description.append(mMmsInfoTextView.getText());
-        }
-
-        if (mStatusTextView.getVisibility() == View.VISIBLE) {
-            description.append(separator);
-            description.append(mStatusTextView.getText());
-        }
-
-        if (mSimNameView.getVisibility() == View.VISIBLE) {
-            description.append(separator);
-            description.append(mSimNameView.getText());
-        }
-
-        if (mDeliveredBadge.getVisibility() == View.VISIBLE) {
-            description.append(separator);
-            description.append(res.getString(R.string.delivered_status_content_description));
-        }
-
-        setContentDescription(description);
-    }
-
-    private void updateMessageAttachmentsAppearance(final int gravity) {
-        mMessageAttachmentsView.setGravity(gravity);
-
-        // Tint image/video attachments when selected
-        final int selectedImageTint = getResources().getColor(R.color.message_image_selected_tint);
-        if (mMessageImageView.getVisibility() == View.VISIBLE) {
-            if (isSelected()) {
-                mMessageImageView.setColorFilter(selectedImageTint);
-            } else {
-                mMessageImageView.clearColorFilter();
-            }
-        }
-        if (mMultiAttachmentView.getVisibility() == View.VISIBLE) {
-            if (isSelected()) {
-                mMultiAttachmentView.setColorFilter(selectedImageTint);
-            } else {
-                mMultiAttachmentView.clearColorFilter();
-            }
-        }
-        for (int i = 0, size = mMessageAttachmentsView.getChildCount(); i < size; i++) {
-            final View attachmentView = mMessageAttachmentsView.getChildAt(i);
-            if (attachmentView instanceof VideoThumbnailView
-                    && attachmentView.getVisibility() == View.VISIBLE) {
-                final VideoThumbnailView videoView = (VideoThumbnailView) attachmentView;
-                if (isSelected()) {
-                    videoView.setColorFilter(selectedImageTint);
-                } else {
-                    videoView.clearColorFilter();
-                }
-            }
-        }
-
-        // If there are multiple attachment bubbles in a single message, add some separation.
-        final int multipleAttachmentPadding =
-                getResources().getDimensionPixelSize(R.dimen.message_padding_same_author);
-
-        boolean previousVisibleView = false;
-        for (int i = 0, size = mMessageAttachmentsView.getChildCount(); i < size; i++) {
-            final View attachmentView = mMessageAttachmentsView.getChildAt(i);
-            if (attachmentView.getVisibility() == View.VISIBLE) {
-                final int margin = previousVisibleView ? multipleAttachmentPadding : 0;
-                ((LinearLayout.LayoutParams) attachmentView.getLayoutParams()).topMargin = margin;
-                // updateViewAppearance calls requestLayout() at the end, so we don't need to here
-                previousVisibleView = true;
-            }
-        }
-    }
-
-    private void updateTextAppearance() {
-        int messageColorResId;
-        int statusColorResId = -1;
-        int infoColorResId = -1;
-        int timestampColorResId;
-        int subjectLabelColorResId;
-        if (isSelected()) {
-            messageColorResId = R.color.message_text_color_incoming;
-            statusColorResId = R.color.message_action_status_text;
-            infoColorResId = R.color.message_action_info_text;
-            if (shouldShowMessageTextBubble()) {
-                timestampColorResId = R.color.message_action_timestamp_text;
-                subjectLabelColorResId = R.color.message_action_timestamp_text;
-            } else {
-                // If there's no text, the timestamp will be shown below the attachments,
-                // against the conversation view background.
-                timestampColorResId = R.color.timestamp_text_outgoing;
-                subjectLabelColorResId = R.color.timestamp_text_outgoing;
-            }
-        } else {
-            messageColorResId = (mData.getIsIncoming() ?
-                    R.color.message_text_color_incoming : R.color.message_text_color_outgoing);
-            statusColorResId = messageColorResId;
-            infoColorResId = R.color.timestamp_text_incoming;
-            switch(mData.getStatus()) {
-
-                case MessageData.BUGLE_STATUS_OUTGOING_FAILED:
-                case MessageData.BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER:
-                    timestampColorResId = R.color.message_failed_timestamp_text;
-                    subjectLabelColorResId = R.color.timestamp_text_outgoing;
-                    break;
-
-                case MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND:
-                case MessageData.BUGLE_STATUS_OUTGOING_SENDING:
-                case MessageData.BUGLE_STATUS_OUTGOING_RESENDING:
-                case MessageData.BUGLE_STATUS_OUTGOING_AWAITING_RETRY:
-                case MessageData.BUGLE_STATUS_OUTGOING_COMPLETE:
-                case MessageData.BUGLE_STATUS_OUTGOING_DELIVERED:
-                    timestampColorResId = R.color.timestamp_text_outgoing;
-                    subjectLabelColorResId = R.color.timestamp_text_outgoing;
-                    break;
-
-                case MessageData.BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE:
-                case MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED:
-                    messageColorResId = R.color.message_text_color_incoming_download_failed;
-                    timestampColorResId = R.color.message_download_failed_timestamp_text;
-                    subjectLabelColorResId = R.color.message_text_color_incoming_download_failed;
-                    statusColorResId = R.color.message_download_failed_status_text;
-                    infoColorResId = R.color.message_info_text_incoming_download_failed;
-                    break;
-
-                case MessageData.BUGLE_STATUS_INCOMING_AUTO_DOWNLOADING:
-                case MessageData.BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING:
-                case MessageData.BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD:
-                case MessageData.BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD:
-                case MessageData.BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD:
-                    timestampColorResId = R.color.message_text_color_incoming;
-                    subjectLabelColorResId = R.color.message_text_color_incoming;
-                    infoColorResId = R.color.timestamp_text_incoming;
-                    break;
-
-                case MessageData.BUGLE_STATUS_INCOMING_COMPLETE:
-                default:
-                    timestampColorResId = R.color.timestamp_text_incoming;
-                    subjectLabelColorResId = R.color.timestamp_text_incoming;
-                    infoColorResId = -1; // Not used
-                    break;
-            }
-        }
-        final int messageColor = getResources().getColor(messageColorResId);
-        mMessageTextView.setTextColor(messageColor);
-        mMessageTextView.setLinkTextColor(messageColor);
-        mSubjectText.setTextColor(messageColor);
-        if (statusColorResId >= 0) {
-            mTitleTextView.setTextColor(getResources().getColor(statusColorResId));
-        }
-        if (infoColorResId >= 0) {
-            mMmsInfoTextView.setTextColor(getResources().getColor(infoColorResId));
-        }
-        if (timestampColorResId == R.color.timestamp_text_incoming &&
-                mData.hasAttachments() && !shouldShowMessageTextBubble()) {
-            timestampColorResId = R.color.timestamp_text_outgoing;
-        }
-        mStatusTextView.setTextColor(getResources().getColor(timestampColorResId));
-
-        mSubjectLabel.setTextColor(getResources().getColor(subjectLabelColorResId));
-        mSenderNameTextView.setTextColor(getResources().getColor(timestampColorResId));
-    }
-
-    /**
-     * If we don't know the size of the image, we want to show it in a fixed-sized frame to
-     * avoid janks when the image is loaded and resized. Otherwise, we can set the imageview to
-     * take on normal layout params.
-     */
-    private void adjustImageViewBounds(final MessagePartData imageAttachment) {
-        Assert.isTrue(ContentType.isImageType(imageAttachment.getContentType()));
-        final ViewGroup.LayoutParams layoutParams = mMessageImageView.getLayoutParams();
-        if (imageAttachment.getWidth() == MessagePartData.UNSPECIFIED_SIZE ||
-                imageAttachment.getHeight() == MessagePartData.UNSPECIFIED_SIZE) {
-            // We don't know the size of the image attachment, enable letterboxing on the image
-            // and show a fixed sized attachment. This should happen at most once per image since
-            // after the image is loaded we then save the image dimensions to the db so that the
-            // next time we can display the full size.
-            layoutParams.width = getResources()
-                    .getDimensionPixelSize(R.dimen.image_attachment_fallback_width);
-            layoutParams.height = getResources()
-                    .getDimensionPixelSize(R.dimen.image_attachment_fallback_height);
-            mMessageImageView.setScaleType(ScaleType.CENTER_CROP);
-        } else {
-            layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
-            layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
-            // ScaleType.CENTER_INSIDE and FIT_CENTER behave similarly for most images. However,
-            // FIT_CENTER works better for small images as it enlarges the image such that the
-            // minimum size ("android:minWidth" etc) is honored.
-            mMessageImageView.setScaleType(ScaleType.FIT_CENTER);
-        }
-    }
-
-    @Override
-    public void onClick(final View view) {
-        final Object tag = view.getTag();
-        if (tag instanceof MessagePartData) {
-            final Rect bounds = UiUtils.getMeasuredBoundsOnScreen(view);
-            onAttachmentClick((MessagePartData) tag, bounds, false /* longPress */);
-        } else if (tag instanceof String) {
-            // Currently the only object that would make a tag of a string is a youtube preview
-            // image
-            UIIntents.get().launchBrowserForUrl(getContext(), (String) tag);
-        }
-    }
-
-    @Override
-    public boolean onLongClick(final View view) {
-        if (view == mMessageTextView) {
-            // Avoid trying to reselect the message
-            if (isSelected()) {
-                return false;
-            }
-
-            // Preemptively handle the long click event on message text so it's not handled by
-            // the link spans.
-            return performLongClick();
-        }
-
-        final Object tag = view.getTag();
-        if (tag instanceof MessagePartData) {
-            final Rect bounds = UiUtils.getMeasuredBoundsOnScreen(view);
-            return onAttachmentClick((MessagePartData) tag, bounds, true /* longPress */);
-        }
-
-        return false;
-    }
-
-    @Override
-    public boolean onAttachmentClick(final MessagePartData attachment,
-            final Rect viewBoundsOnScreen, final boolean longPress) {
-        return mHost.onAttachmentClick(this, attachment, viewBoundsOnScreen, longPress);
-    }
-
-    public ContactIconView getContactIconView() {
-        return mContactIconView;
-    }
-
-    // Sort photos in MultiAttachLayout in the same order as the ConversationImagePartsView
-    static final Comparator<MessagePartData> sImageComparator = new Comparator<MessagePartData>(){
-        @Override
-        public int compare(final MessagePartData x, final MessagePartData y) {
-            return x.getPartId().compareTo(y.getPartId());
-        }
-    };
-
-    static final Predicate<MessagePartData> sVideoFilter = new Predicate<MessagePartData>() {
-        @Override
-        public boolean apply(final MessagePartData part) {
-            return part.isVideo();
-        }
-    };
-
-    static final Predicate<MessagePartData> sAudioFilter = new Predicate<MessagePartData>() {
-        @Override
-        public boolean apply(final MessagePartData part) {
-            return part.isAudio();
-        }
-    };
-
-    static final Predicate<MessagePartData> sVCardFilter = new Predicate<MessagePartData>() {
-        @Override
-        public boolean apply(final MessagePartData part) {
-            return part.isVCard();
-        }
-    };
-
-    static final Predicate<MessagePartData> sImageFilter = new Predicate<MessagePartData>() {
-        @Override
-        public boolean apply(final MessagePartData part) {
-            return part.isImage();
-        }
-    };
-
-    interface AttachmentViewBinder {
-        void bindView(View view, MessagePartData attachment);
-        void unbind(View view);
-    }
-
-    final AttachmentViewBinder mVideoViewBinder = new AttachmentViewBinder() {
-        @Override
-        public void bindView(final View view, final MessagePartData attachment) {
-            ((VideoThumbnailView) view).setSource(attachment, mData.getIsIncoming());
-        }
-
-        @Override
-        public void unbind(final View view) {
-            ((VideoThumbnailView) view).setSource((Uri) null, mData.getIsIncoming());
-        }
-    };
-
-    final AttachmentViewBinder mAudioViewBinder = new AttachmentViewBinder() {
-        @Override
-        public void bindView(final View view, final MessagePartData attachment) {
-            final AudioAttachmentView audioView = (AudioAttachmentView) view;
-            audioView.bindMessagePartData(attachment, mData.getIsIncoming(), isSelected());
-            audioView.setBackground(ConversationDrawables.get().getBubbleDrawable(
-                    isSelected(), mData.getIsIncoming(), false /* needArrow */,
-                    mData.hasIncomingErrorStatus()));
-        }
-
-        @Override
-        public void unbind(final View view) {
-            ((AudioAttachmentView) view).bindMessagePartData(null, mData.getIsIncoming(), false);
-        }
-    };
-
-    final AttachmentViewBinder mVCardViewBinder = new AttachmentViewBinder() {
-        @Override
-        public void bindView(final View view, final MessagePartData attachment) {
-            final PersonItemView personView = (PersonItemView) view;
-            personView.bind(DataModel.get().createVCardContactItemData(getContext(),
-                    attachment));
-            personView.setBackground(ConversationDrawables.get().getBubbleDrawable(
-                    isSelected(), mData.getIsIncoming(), false /* needArrow */,
-                    mData.hasIncomingErrorStatus()));
-            final int nameTextColorRes;
-            final int detailsTextColorRes;
-            if (isSelected()) {
-                nameTextColorRes = R.color.message_text_color_incoming;
-                detailsTextColorRes = R.color.message_text_color_incoming;
-            } else {
-                nameTextColorRes = mData.getIsIncoming() ? R.color.message_text_color_incoming
-                        : R.color.message_text_color_outgoing;
-                detailsTextColorRes = mData.getIsIncoming() ? R.color.timestamp_text_incoming
-                        : R.color.timestamp_text_outgoing;
-            }
-            personView.setNameTextColor(getResources().getColor(nameTextColorRes));
-            personView.setDetailsTextColor(getResources().getColor(detailsTextColorRes));
-        }
-
-        @Override
-        public void unbind(final View view) {
-            ((PersonItemView) view).bind(null);
-        }
-    };
-
-    /**
-     * A helper class that allows us to handle long clicks on linkified message text view (i.e. to
-     * select the message) so it's not handled by the link spans to launch apps for the links.
-     */
-    private static class IgnoreLinkLongClickHelper implements OnLongClickListener, OnTouchListener {
-        private boolean mIsLongClick;
-        private final OnLongClickListener mDelegateLongClickListener;
-
-        /**
-         * Ignore long clicks on linkified texts for a given text view.
-         * @param textView the TextView to ignore long clicks on
-         * @param longClickListener a delegate OnLongClickListener to be called when the view is
-         *        long clicked.
-         */
-        public static void ignoreLinkLongClick(final TextView textView,
-                @Nullable final OnLongClickListener longClickListener) {
-            final IgnoreLinkLongClickHelper helper =
-                    new IgnoreLinkLongClickHelper(longClickListener);
-            textView.setOnLongClickListener(helper);
-            textView.setOnTouchListener(helper);
-        }
-
-        private IgnoreLinkLongClickHelper(@Nullable final OnLongClickListener longClickListener) {
-            mDelegateLongClickListener = longClickListener;
-        }
-
-        @Override
-        public boolean onLongClick(final View v) {
-            // Record that this click is a long click.
-            mIsLongClick = true;
-            if (mDelegateLongClickListener != null) {
-                return mDelegateLongClickListener.onLongClick(v);
-            }
-            return false;
-        }
-
-        @Override
-        public boolean onTouch(final View v, final MotionEvent event) {
-            if (event.getActionMasked() == MotionEvent.ACTION_UP && mIsLongClick) {
-                // This touch event is a long click, preemptively handle this touch event so that
-                // the link span won't get a onClicked() callback.
-                mIsLongClick = false;
-                return false;
-            }
-
-            if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
-                mIsLongClick = false;
-            }
-            return false;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/ConversationSimSelector.java b/src/com/android/messaging/ui/conversation/ConversationSimSelector.java
deleted file mode 100644
index 94c7e76..0000000
--- a/src/com/android/messaging/ui/conversation/ConversationSimSelector.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.content.Context;
-import androidx.core.util.Pair;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.SubscriptionListData;
-import com.android.messaging.datamodel.data.SubscriptionListData.SubscriptionListEntry;
-import com.android.messaging.ui.conversation.SimSelectorView.SimSelectorViewListener;
-import com.android.messaging.util.AccessibilityUtil;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.ThreadUtil;
-
-/**
- * Manages showing/hiding the SIM selector in conversation.
- */
-abstract class ConversationSimSelector extends ConversationInput {
-    private SimSelectorView mSimSelectorView;
-    private Pair<Boolean /* show */, Boolean /* animate */> mPendingShow;
-    private boolean mDataReady;
-    private String mSelectedSimText;
-
-    public ConversationSimSelector(ConversationInputBase baseHost) {
-        super(baseHost, false);
-    }
-
-    public void onSubscriptionListDataLoaded(final SubscriptionListData subscriptionListData) {
-        ensureSimSelectorView();
-        mSimSelectorView.bind(subscriptionListData);
-        mDataReady = subscriptionListData != null && subscriptionListData.hasData();
-        if (mPendingShow != null && mDataReady) {
-            Assert.isTrue(OsUtil.isAtLeastL_MR1());
-            final boolean show = mPendingShow.first;
-            final boolean animate = mPendingShow.second;
-            ThreadUtil.getMainThreadHandler().post(new Runnable() {
-                @Override
-                public void run() {
-                    // This will No-Op if we are no longer attached to the host.
-                    mConversationInputBase.showHideInternal(ConversationSimSelector.this,
-                            show, animate);
-                }
-            });
-            mPendingShow = null;
-        }
-    }
-
-    private void announcedSelectedSim() {
-        final Context context = Factory.get().getApplicationContext();
-        if (AccessibilityUtil.isTouchExplorationEnabled(context) &&
-                !TextUtils.isEmpty(mSelectedSimText)) {
-            AccessibilityUtil.announceForAccessibilityCompat(
-                    mSimSelectorView, null,
-                    context.getString(R.string.selected_sim_content_message, mSelectedSimText));
-        }
-    }
-
-    public void setSelected(final SubscriptionListEntry subEntry) {
-        mSelectedSimText = subEntry == null ? null : subEntry.displayName;
-    }
-
-    @Override
-    public boolean show(boolean animate) {
-        announcedSelectedSim();
-        return showHide(true, animate);
-    }
-
-    @Override
-    public boolean hide(boolean animate) {
-        return showHide(false, animate);
-    }
-
-    private boolean showHide(final boolean show, final boolean animate) {
-        if (!OsUtil.isAtLeastL_MR1()) {
-            return false;
-        }
-
-        if (mDataReady) {
-            mSimSelectorView.showOrHide(show, animate);
-            return mSimSelectorView.isOpen() == show;
-        } else {
-            mPendingShow = Pair.create(show, animate);
-            return false;
-        }
-    }
-
-    private void ensureSimSelectorView() {
-        if (mSimSelectorView == null) {
-            // Grab the SIM selector view from the host. This class assumes ownership of it.
-            mSimSelectorView = getSimSelectorView();
-            mSimSelectorView.setItemLayoutId(getSimSelectorItemLayoutId());
-            mSimSelectorView.setListener(new SimSelectorViewListener() {
-
-                @Override
-                public void onSimSelectorVisibilityChanged(boolean visible) {
-                    onVisibilityChanged(visible);
-                }
-
-                @Override
-                public void onSimItemClicked(SubscriptionListEntry item) {
-                    selectSim(item);
-                }
-            });
-        }
-    }
-
-    protected abstract SimSelectorView getSimSelectorView();
-    protected abstract void selectSim(final SubscriptionListEntry item);
-    protected abstract int getSimSelectorItemLayoutId();
-
-}
diff --git a/src/com/android/messaging/ui/conversation/EnterSelfPhoneNumberDialog.java b/src/com/android/messaging/ui/conversation/EnterSelfPhoneNumberDialog.java
deleted file mode 100644
index e3ad601..0000000
--- a/src/com/android/messaging/ui/conversation/EnterSelfPhoneNumberDialog.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.widget.EditText;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.ParticipantRefresh;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.UiUtils;
-
-/**
- * The dialog for the user to enter the phone number of their sim.
- */
-public class EnterSelfPhoneNumberDialog extends DialogFragment {
-    private EditText mEditText;
-    private int mSubId;
-
-    public static EnterSelfPhoneNumberDialog newInstance(final int subId) {
-        final EnterSelfPhoneNumberDialog dialog = new EnterSelfPhoneNumberDialog();
-        dialog.mSubId = subId;
-        return dialog;
-    }
-
-    @Override
-    public Dialog onCreateDialog(final Bundle savedInstanceState) {
-        final Context context = getActivity();
-        final LayoutInflater inflater = LayoutInflater.from(context);
-        mEditText = (EditText) inflater.inflate(R.layout.enter_phone_number_view, null, false);
-
-        final AlertDialog.Builder builder = new AlertDialog.Builder(context);
-        builder.setTitle(R.string.enter_phone_number_title)
-                .setMessage(R.string.enter_phone_number_text)
-                .setView(mEditText)
-                .setNegativeButton(android.R.string.cancel,
-                        new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(final DialogInterface dialog,
-                                    final int button) {
-                                dismiss();
-                            }
-                })
-                .setPositiveButton(android.R.string.ok,
-                        new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(final DialogInterface dialog,
-                                    final int button) {
-                                final String newNumber = mEditText.getText().toString();
-                                dismiss();
-                                if (!TextUtils.isEmpty(newNumber)) {
-                                    savePhoneNumberInPrefs(newNumber);
-                                    // TODO: Remove this toast and just auto-send
-                                    // the message instead
-                                    UiUtils.showToast(
-                                            R.string
-                                        .toast_after_setting_default_sms_app_for_message_send);
-                                }
-                            }
-                });
-        return builder.create();
-    }
-
-    private void savePhoneNumberInPrefs(final String newPhoneNumber) {
-        final BuglePrefs subPrefs = BuglePrefs.getSubscriptionPrefs(mSubId);
-        subPrefs.putString(getString(R.string.mms_phone_number_pref_key),
-                newPhoneNumber);
-        // Update the self participants so the new phone number will be reflected
-        // everywhere in the UI.
-        ParticipantRefresh.refreshSelfParticipants();
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/LaunchConversationActivity.java b/src/com/android/messaging/ui/conversation/LaunchConversationActivity.java
deleted file mode 100644
index c869839..0000000
--- a/src/com/android/messaging/ui/conversation/LaunchConversationActivity.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.LaunchConversationData;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.UiUtils;
-import com.android.messaging.util.UriUtil;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Launches ConversationActivity for sending a message to, or viewing messages from, a specific
- * recipient.
- * <p>
- * (This activity should be marked noHistory="true" in AndroidManifest.xml)
- */
-public class LaunchConversationActivity extends Activity implements
-        LaunchConversationData.LaunchConversationDataListener {
-    private static final int MAX_RECIPIENT_LENGTH = 100;
-    static final String SMS_BODY = "sms_body";
-    static final String ADDRESS = "address";
-    final Binding<LaunchConversationData> mBinding = BindingBase.createBinding(this);
-    String mSmsBody;
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (UiUtils.redirectToPermissionCheckIfNeeded(this)) {
-            return;
-        }
-
-        final Intent intent = getIntent();
-        final String action = intent.getAction();
-        if (Intent.ACTION_SENDTO.equals(action) || Intent.ACTION_VIEW.equals(action)) {
-            String[] recipients = null;
-            final String commaSeparatedRecipients =
-                    UriUtil.parseRecipientsFromSmsMmsUri(intent.getData());
-            if (commaSeparatedRecipients != null) {
-                recipients = commaSeparatedRecipients.split(",");
-            }
-            final boolean haveAddress = !TextUtils.isEmpty(intent.getStringExtra(ADDRESS));
-            final boolean haveEmail = !TextUtils.isEmpty(intent.getStringExtra(Intent.EXTRA_EMAIL));
-            if (recipients == null && (haveAddress || haveEmail)) {
-                if (haveAddress) {
-                    recipients = new String[] { intent.getStringExtra(ADDRESS) };
-                } else {
-                    recipients = new String[] { intent.getStringExtra(Intent.EXTRA_EMAIL) };
-                }
-            }
-            if (recipients != null) {
-                recipients = trimInvalidRecipients(recipients);
-            }
-            mSmsBody = intent.getStringExtra(SMS_BODY);
-            if (TextUtils.isEmpty(mSmsBody)) {
-                // Used by intents sent from the web YouTube (and perhaps others).
-                mSmsBody = getBody(intent.getData());
-                if (TextUtils.isEmpty(mSmsBody)) {
-                    // If that fails, try yet another method apps use to share text
-                    if (ContentType.TEXT_PLAIN.equals(intent.getType())) {
-                        mSmsBody = intent.getStringExtra(Intent.EXTRA_TEXT);
-                    }
-                }
-            }
-            if (recipients != null) {
-                mBinding.bind(DataModel.get().createLaunchConversationData(this));
-                mBinding.getData().getOrCreateConversation(mBinding, recipients);
-            } else {
-                // No recipients were specified in the intent.
-                // Start a new conversation with contact picker. The new conversation will be
-                // primed with the (optional) message in mSmsBody.
-                onGetOrCreateNewConversation(null);
-            }
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Unsupported conversation intent action : " + action);
-        }
-        // As of M, activities without a visible window must finish before onResume completes.
-        finish();
-    }
-
-    private String[] trimInvalidRecipients(String[] recipients) {
-        List<String> trimmedRecipients = new ArrayList<>();
-        for (String recipient : recipients) {
-            if (recipient.length() < MAX_RECIPIENT_LENGTH) {
-                trimmedRecipients.add(recipient);
-            }
-        }
-        if (trimmedRecipients.size() > 0) {
-            return trimmedRecipients.toArray(new String[0]);
-        } else {
-            return null;
-        }
-    }
-
-    private String getBody(final Uri uri) {
-        if (uri == null) {
-            return null;
-        }
-        String urlStr = uri.getSchemeSpecificPart();
-        if (!urlStr.contains("?")) {
-            return null;
-        }
-        urlStr = urlStr.substring(urlStr.indexOf('?') + 1);
-        final String[] params = urlStr.split("&");
-        for (final String p : params) {
-            if (p.startsWith("body=")) {
-                try {
-                    return URLDecoder.decode(p.substring(5), "UTF-8");
-                } catch (final UnsupportedEncodingException e) {
-                    // Invalid URL, ignore
-                }
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public void onGetOrCreateNewConversation(final String conversationId) {
-        final Context context = Factory.get().getApplicationContext();
-        UIIntents.get().launchConversationActivityWithParentStack(context, conversationId,
-                mSmsBody);
-    }
-
-    @Override
-    public void onGetOrCreateNewConversationFailed() {
-        UiUtils.showToastAtBottom(R.string.conversation_creation_failure);
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/MessageBubbleBackground.java b/src/com/android/messaging/ui/conversation/MessageBubbleBackground.java
deleted file mode 100644
index 4c22970..0000000
--- a/src/com/android/messaging/ui/conversation/MessageBubbleBackground.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.LinearLayout;
-
-import com.android.messaging.R;
-
-public class MessageBubbleBackground extends LinearLayout {
-    private final  int mSnapWidthPixels;
-
-    public MessageBubbleBackground(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mSnapWidthPixels = context.getResources().getDimensionPixelSize(
-                R.dimen.conversation_bubble_width_snap);
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        final int widthPadding = getPaddingLeft() + getPaddingRight();
-        int bubbleWidth = getMeasuredWidth() - widthPadding;
-        final int maxWidth = MeasureSpec.getSize(widthMeasureSpec) - widthPadding;
-        // Round up to next snapWidthPixels
-        bubbleWidth = Math.min(maxWidth,
-                (int) (Math.ceil(bubbleWidth / (float) mSnapWidthPixels) * mSnapWidthPixels));
-        super.onMeasure(
-                MeasureSpec.makeMeasureSpec(bubbleWidth + widthPadding, MeasureSpec.EXACTLY),
-                heightMeasureSpec);
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/MessageDetailsDialog.java b/src/com/android/messaging/ui/conversation/MessageDetailsDialog.java
deleted file mode 100644
index 89b9148..0000000
--- a/src/com/android/messaging/ui/conversation/MessageDetailsDialog.java
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.res.Resources;
-import android.net.Uri;
-import android.text.TextUtils;
-import android.text.format.Formatter;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.data.ConversationMessageData;
-import com.android.messaging.datamodel.data.ConversationParticipantsData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.mmslib.pdu.PduHeaders;
-import com.android.messaging.sms.DatabaseMessages.MmsMessage;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.Dates;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.SafeAsyncTask;
-
-import java.util.List;
-
-public class MessageDetailsDialog {
-    private static final String RECIPIENT_SEPARATOR = ", ";
-
-    // All methods are static, no creating this class
-    private MessageDetailsDialog() {
-    }
-
-    public static void show(final Context context, final ConversationMessageData data,
-            final ConversationParticipantsData participants, final ParticipantData self) {
-        if (DebugUtils.isDebugEnabled()) {
-            new SafeAsyncTask<Void, Void, String>() {
-                @Override
-                protected String doInBackgroundTimed(Void... params) {
-                    return getMessageDetails(context, data, participants, self);
-                }
-
-                @Override
-                protected void onPostExecute(String messageDetails) {
-                    showDialog(context, messageDetails);
-                }
-            }.executeOnThreadPool(null, null, null);
-        } else {
-            String messageDetails = getMessageDetails(context, data, participants, self);
-            showDialog(context, messageDetails);
-        }
-    }
-
-    private static String getMessageDetails(final Context context,
-            final ConversationMessageData data,
-            final ConversationParticipantsData participants, final ParticipantData self) {
-        String messageDetails = null;
-        if (data.getIsSms()) {
-            messageDetails = getSmsMessageDetails(data, participants, self);
-        } else {
-            // TODO: Handle SMS_TYPE_MMS_PUSH_NOTIFICATION type differently?
-            messageDetails = getMmsMessageDetails(context, data, participants, self);
-        }
-
-        return messageDetails;
-    }
-
-    private static void showDialog(final Context context, String messageDetails) {
-        if (!TextUtils.isEmpty(messageDetails)) {
-            new AlertDialog.Builder(context)
-                    .setTitle(R.string.message_details_title)
-                    .setMessage(messageDetails)
-                    .setCancelable(true)
-                    .show();
-        }
-    }
-
-    /**
-     * Return a string, separated by newlines, that contains a number of labels and values
-     * for this sms message. The string will be displayed in a modal dialog.
-     * @return string list of various message properties
-     */
-    private static String getSmsMessageDetails(final ConversationMessageData data,
-            final ConversationParticipantsData participants, final ParticipantData self) {
-        final Resources res = Factory.get().getApplicationContext().getResources();
-        final StringBuilder details = new StringBuilder();
-
-        // Type: Text message
-        details.append(res.getString(R.string.message_type_label));
-        details.append(res.getString(R.string.text_message));
-
-        // From: +1425xxxxxxx
-        // or To: +1425xxxxxxx
-        final String rawSender = data.getSenderNormalizedDestination();
-        if (!TextUtils.isEmpty(rawSender)) {
-            details.append('\n');
-            details.append(res.getString(R.string.from_label));
-            details.append(rawSender);
-        }
-        final String rawRecipients = getRecipientParticipantString(participants,
-                data.getParticipantId(), data.getIsIncoming(), data.getSelfParticipantId());
-        if (!TextUtils.isEmpty(rawRecipients)) {
-            details.append('\n');
-            details.append(res.getString(R.string.to_address_label));
-            details.append(rawRecipients);
-        }
-
-        // Sent: Mon 11:42AM
-        if (data.getIsIncoming()) {
-            if (data.getSentTimeStamp() != MmsUtils.INVALID_TIMESTAMP) {
-                details.append('\n');
-                details.append(res.getString(R.string.sent_label));
-                details.append(
-                        Dates.getMessageDetailsTimeString(data.getSentTimeStamp()).toString());
-            }
-        }
-
-        // Sent: Mon 11:43AM
-        // or Received: Mon 11:43AM
-        appendSentOrReceivedTimestamp(res, details, data);
-
-        appendSimInfo(res, self, details);
-
-        if (DebugUtils.isDebugEnabled()) {
-            appendDebugInfo(details, data);
-        }
-
-        return details.toString();
-    }
-
-    /**
-     * Return a string, separated by newlines, that contains a number of labels and values
-     * for this mms message. The string will be displayed in a modal dialog.
-     * @return string list of various message properties
-     */
-    private static String getMmsMessageDetails(Context context, final ConversationMessageData data,
-            final ConversationParticipantsData participants, final ParticipantData self) {
-        final Resources res = Factory.get().getApplicationContext().getResources();
-        // TODO: when we support non-auto-download of mms messages, we'll have to handle
-        // the case when the message is a PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND and display
-        // something different. See the Messaging app's MessageUtils.getNotificationIndDetails()
-
-        final StringBuilder details = new StringBuilder();
-
-        // Type: Multimedia message.
-        details.append(res.getString(R.string.message_type_label));
-        details.append(res.getString(R.string.multimedia_message));
-
-        // From: +1425xxxxxxx
-        final String rawSender = data.getSenderNormalizedDestination();
-        details.append('\n');
-        details.append(res.getString(R.string.from_label));
-        details.append(!TextUtils.isEmpty(rawSender) ? rawSender :
-                res.getString(R.string.hidden_sender_address));
-
-        // To: +1425xxxxxxx
-        final String rawRecipients = getRecipientParticipantString(participants,
-                data.getParticipantId(), data.getIsIncoming(), data.getSelfParticipantId());
-        if (!TextUtils.isEmpty(rawRecipients)) {
-            details.append('\n');
-            details.append(res.getString(R.string.to_address_label));
-            details.append(rawRecipients);
-        }
-
-        // Sent: Tue 3:05PM
-        // or Received: Tue 3:05PM
-        appendSentOrReceivedTimestamp(res, details, data);
-
-        // Subject: You're awesome
-        details.append('\n');
-        details.append(res.getString(R.string.subject_label));
-        if (!TextUtils.isEmpty(MmsUtils.cleanseMmsSubject(res, data.getMmsSubject()))) {
-            details.append(data.getMmsSubject());
-        }
-
-        // Priority: High/Normal/Low
-        details.append('\n');
-        details.append(res.getString(R.string.priority_label));
-        details.append(getPriorityDescription(res, data.getSmsPriority()));
-
-        // Message size: 30 KB
-        if (data.getSmsMessageSize() > 0) {
-            details.append('\n');
-            details.append(res.getString(R.string.message_size_label));
-            details.append(Formatter.formatFileSize(context, data.getSmsMessageSize()));
-        }
-
-        appendSimInfo(res, self, details);
-
-        if (DebugUtils.isDebugEnabled()) {
-            appendDebugInfo(details, data);
-        }
-
-        return details.toString();
-    }
-
-    private static void appendSentOrReceivedTimestamp(Resources res, StringBuilder details,
-            ConversationMessageData data) {
-        int labelId = -1;
-        if (data.getIsIncoming()) {
-            labelId = R.string.received_label;
-        } else if (data.getIsSendComplete()) {
-            labelId = R.string.sent_label;
-        }
-        if (labelId >= 0) {
-            details.append('\n');
-            details.append(res.getString(labelId));
-            details.append(
-                    Dates.getMessageDetailsTimeString(data.getReceivedTimeStamp()).toString());
-        }
-    }
-
-    @DoesNotRunOnMainThread
-    private static void appendDebugInfo(StringBuilder details, ConversationMessageData data) {
-        // We grab the thread id from the database, so this needs to run in the background
-        Assert.isNotMainThread();
-        details.append("\n\n");
-        details.append("DEBUG");
-
-        details.append('\n');
-        details.append("Message id: ");
-        details.append(data.getMessageId());
-
-        final String telephonyUri = data.getSmsMessageUri();
-        details.append('\n');
-        details.append("Telephony uri: ");
-        details.append(telephonyUri);
-
-        final String conversationId = data.getConversationId();
-
-        if (conversationId == null) {
-            return;
-        }
-
-        details.append('\n');
-        details.append("Conversation id: ");
-        details.append(conversationId);
-
-        final long threadId = BugleDatabaseOperations.getThreadId(DataModel.get().getDatabase(),
-                conversationId);
-
-        details.append('\n');
-        details.append("Conversation telephony thread id: ");
-        details.append(threadId);
-
-        MmsMessage mms = null;
-
-        if (data.getIsMms()) {
-            if (telephonyUri == null) {
-                return;
-            }
-            mms = MmsUtils.loadMms(Uri.parse(telephonyUri));
-            if (mms == null) {
-                return;
-            }
-
-            // We log the thread id again to check that they are internally consistent
-            final long mmsThreadId = mms.mThreadId;
-            details.append('\n');
-            details.append("Telephony thread id: ");
-            details.append(mmsThreadId);
-
-            // Log the MMS content location
-            final String mmsContentLocation = mms.mContentLocation;
-            details.append('\n');
-            details.append("Content location URL: ");
-            details.append(mmsContentLocation);
-        }
-
-        final String recipientsString = MmsUtils.getRawRecipientIdsForThread(threadId);
-        if (recipientsString != null) {
-            details.append('\n');
-            details.append("Thread recipient ids: ");
-            details.append(recipientsString);
-        }
-
-        final List<String> recipients = MmsUtils.getRecipientsByThread(threadId);
-        if (recipients != null) {
-            details.append('\n');
-            details.append("Thread recipients: ");
-            details.append(recipients.toString());
-
-            if (mms != null) {
-                final String from = MmsUtils.getMmsSender(recipients, mms.getUri());
-                details.append('\n');
-                details.append("Sender: ");
-                details.append(from);
-            }
-        }
-    }
-
-    private static String getRecipientParticipantString(
-            final ConversationParticipantsData participants, final String senderId,
-            final boolean addSelf, final String selfId) {
-        final StringBuilder recipients = new StringBuilder();
-        for (final ParticipantData participant : participants) {
-            if (TextUtils.equals(participant.getId(), senderId)) {
-                // Don't add sender
-                continue;
-            }
-            if (participant.isSelf() &&
-                    (!participant.getId().equals(selfId) || !addSelf)) {
-                // For self participants, don't add the one that's not relevant to this message
-                // or if we are asked not to add self
-                continue;
-            }
-            final String phoneNumber = participant.getNormalizedDestination();
-            // Don't add empty number. This should not happen. But if that happens
-            // we should not add it.
-            if (!TextUtils.isEmpty(phoneNumber)) {
-                if (recipients.length() > 0) {
-                    recipients.append(RECIPIENT_SEPARATOR);
-                }
-                recipients.append(phoneNumber);
-            }
-        }
-        return recipients.toString();
-    }
-
-    /**
-     * Convert the numeric mms priority into a human-readable string
-     * @param res
-     * @param priorityValue coded PduHeader priority
-     * @return string representation of the priority
-     */
-    private static String getPriorityDescription(final Resources res, final int priorityValue) {
-        switch(priorityValue) {
-            case PduHeaders.PRIORITY_HIGH:
-                return res.getString(R.string.priority_high);
-            case PduHeaders.PRIORITY_LOW:
-                return res.getString(R.string.priority_low);
-            case PduHeaders.PRIORITY_NORMAL:
-            default:
-                return res.getString(R.string.priority_normal);
-        }
-    }
-
-    private static void appendSimInfo(final Resources res,
-            final ParticipantData self, final StringBuilder outString) {
-        if (!OsUtil.isAtLeastL_MR1()
-                || self == null
-                || PhoneUtils.getDefault().getActiveSubscriptionCount() < 2) {
-            return;
-        }
-        // The appended SIM info would look like:
-        // SIM: SUB 01
-        // or SIM: SIM 1
-        // or SIM: Unknown
-        Assert.isTrue(self.isSelf());
-        outString.append('\n');
-        outString.append(res.getString(R.string.sim_label));
-        if (self.isActiveSubscription() && !self.isDefaultSelf()) {
-            final String subscriptionName = self.getSubscriptionName();
-            if (TextUtils.isEmpty(subscriptionName)) {
-                outString.append(res.getString(R.string.sim_slot_identifier,
-                        self.getDisplaySlotId()));
-            } else {
-                outString.append(subscriptionName);
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/SimIconView.java b/src/com/android/messaging/ui/conversation/SimIconView.java
deleted file mode 100644
index 6799bad..0000000
--- a/src/com/android/messaging/ui/conversation/SimIconView.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.content.Context;
-import android.graphics.Outline;
-import android.net.Uri;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewOutlineProvider;
-
-import com.android.messaging.ui.ContactIconView;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.OsUtil;
-
-/**
- * Shows SIM avatar icon in the SIM switcher / Self-send button.
- */
-public class SimIconView extends ContactIconView {
-    public SimIconView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        if (OsUtil.isAtLeastL()) {
-            setOutlineProvider(new ViewOutlineProvider() {
-                @Override
-                public void getOutline(View v, Outline outline) {
-                    outline.setOval(0, 0, v.getWidth(), v.getHeight());
-                }
-            });
-        }
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        if (isClickable()) {
-            return super.onTouchEvent(event);
-        }
-        return true;
-    }
-
-    @Override
-    protected void maybeInitializeOnClickListener() {
-        // TODO: SIM icon view shouldn't consume or handle clicks, but it should if
-        // this is the send button for the only SIM in the device or if MSIM is not supported.
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/SimSelectorItemView.java b/src/com/android/messaging/ui/conversation/SimSelectorItemView.java
deleted file mode 100644
index 3058d31..0000000
--- a/src/com/android/messaging/ui/conversation/SimSelectorItemView.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.content.Context;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.SubscriptionListData.SubscriptionListEntry;
-import com.android.messaging.util.Assert;
-
-/**
- * Shows a view for a SIM in the SIM selector.
- */
-public class SimSelectorItemView extends LinearLayout {
-    public interface HostInterface {
-        void onSimItemClicked(SubscriptionListEntry item);
-    }
-
-    private SubscriptionListEntry mData;
-    private TextView mNameTextView;
-    private TextView mDetailsTextView;
-    private SimIconView mSimIconView;
-    private HostInterface mHost;
-
-    public SimSelectorItemView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        mNameTextView = (TextView) findViewById(R.id.name);
-        mDetailsTextView = (TextView) findViewById(R.id.details);
-        mSimIconView = (SimIconView) findViewById(R.id.sim_icon);
-        setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mHost.onSimItemClicked(mData);
-            }
-        });
-    }
-
-    public void bind(final SubscriptionListEntry simEntry) {
-        Assert.notNull(simEntry);
-        mData = simEntry;
-        updateViewAppearance();
-    }
-
-    public void setHostInterface(final HostInterface host) {
-        mHost = host;
-    }
-
-    private void updateViewAppearance() {
-        Assert.notNull(mData);
-        final String displayName = mData.displayName;
-        if (TextUtils.isEmpty(displayName)) {
-            mNameTextView.setVisibility(GONE);
-        } else {
-            mNameTextView.setVisibility(VISIBLE);
-            mNameTextView.setText(displayName);
-        }
-
-        final String details = mData.displayDestination;
-        if (TextUtils.isEmpty(details)) {
-            mDetailsTextView.setVisibility(GONE);
-        } else {
-            mDetailsTextView.setVisibility(VISIBLE);
-            mDetailsTextView.setText(details);
-        }
-
-        mSimIconView.setImageResourceUri(mData.iconUri);
-    }
-}
diff --git a/src/com/android/messaging/ui/conversation/SimSelectorView.java b/src/com/android/messaging/ui/conversation/SimSelectorView.java
deleted file mode 100644
index b07ff19..0000000
--- a/src/com/android/messaging/ui/conversation/SimSelectorView.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.Animation;
-import android.view.animation.TranslateAnimation;
-import android.widget.ArrayAdapter;
-import android.widget.FrameLayout;
-import android.widget.ListView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.SubscriptionListData;
-import com.android.messaging.datamodel.data.SubscriptionListData.SubscriptionListEntry;
-import com.android.messaging.util.UiUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Displays a SIM selector above the compose message view and overlays the message list.
- */
-public class SimSelectorView extends FrameLayout implements SimSelectorItemView.HostInterface {
-    public interface SimSelectorViewListener {
-        void onSimItemClicked(SubscriptionListEntry item);
-        void onSimSelectorVisibilityChanged(boolean visible);
-    }
-
-    private ListView mSimListView;
-    private final SimSelectorAdapter mAdapter;
-    private boolean mShow;
-    private SimSelectorViewListener mListener;
-    private int mItemLayoutId;
-
-    public SimSelectorView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mAdapter = new SimSelectorAdapter(getContext());
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mSimListView = (ListView) findViewById(R.id.sim_list);
-        mSimListView.setAdapter(mAdapter);
-
-        // Clicking anywhere outside the switcher list should dismiss.
-        setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                showOrHide(false, true);
-            }
-        });
-    }
-
-    public void bind(final SubscriptionListData data) {
-        mAdapter.bindData(data.getActiveSubscriptionEntriesExcludingDefault());
-    }
-
-    public void setItemLayoutId(final int layoutId) {
-        mItemLayoutId = layoutId;
-    }
-
-    public void setListener(final SimSelectorViewListener listener) {
-        mListener = listener;
-    }
-
-    public void toggleVisibility() {
-        showOrHide(!mShow, true);
-    }
-
-    public void showOrHide(final boolean show, final boolean animate) {
-        final boolean oldShow = mShow;
-        mShow = show && mAdapter.getCount() > 1;
-        if (oldShow != mShow) {
-            if (mListener != null) {
-                mListener.onSimSelectorVisibilityChanged(mShow);
-            }
-
-            if (animate) {
-                // Fade in the background pane.
-                setVisibility(VISIBLE);
-                setAlpha(mShow ? 0.0f : 1.0f);
-                animate().alpha(mShow ? 1.0f : 0.0f)
-                    .setDuration(UiUtils.REVEAL_ANIMATION_DURATION)
-                    .withEndAction(new Runnable() {
-                        @Override
-                        public void run() {
-                            setAlpha(1.0f);
-                            setVisibility(mShow ? VISIBLE : GONE);
-                        }
-                    });
-            } else {
-                setVisibility(mShow ? VISIBLE : GONE);
-            }
-
-            // Slide in the SIM selector list via a translate animation.
-            mSimListView.setVisibility(mShow ? VISIBLE : GONE);
-            if (animate) {
-                mSimListView.clearAnimation();
-                final TranslateAnimation translateAnimation = new TranslateAnimation(
-                        Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
-                        Animation.RELATIVE_TO_SELF, mShow ? 1.0f : 0.0f,
-                        Animation.RELATIVE_TO_SELF, mShow ? 0.0f : 1.0f);
-                translateAnimation.setInterpolator(UiUtils.EASE_OUT_INTERPOLATOR);
-                translateAnimation.setDuration(UiUtils.REVEAL_ANIMATION_DURATION);
-                mSimListView.startAnimation(translateAnimation);
-            }
-        }
-    }
-
-    /**
-     * An adapter that takes a list of SubscriptionListEntry and displays them as a list of
-     * available SIMs in the SIM selector.
-     */
-    private class SimSelectorAdapter extends ArrayAdapter<SubscriptionListEntry> {
-        public SimSelectorAdapter(final Context context) {
-            super(context, R.layout.sim_selector_item_view, new ArrayList<SubscriptionListEntry>());
-        }
-
-        public void bindData(final List<SubscriptionListEntry> newList) {
-            clear();
-            addAll(newList);
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public View getView(final int position, final View convertView, final ViewGroup parent) {
-            SimSelectorItemView itemView;
-            if (convertView != null && convertView instanceof SimSelectorItemView) {
-                itemView = (SimSelectorItemView) convertView;
-            } else {
-                final LayoutInflater inflater = (LayoutInflater) getContext()
-                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-                itemView = (SimSelectorItemView) inflater.inflate(mItemLayoutId,
-                        parent, false);
-                itemView.setHostInterface(SimSelectorView.this);
-            }
-            itemView.bind(getItem(position));
-            return itemView;
-        }
-    }
-
-    @Override
-    public void onSimItemClicked(SubscriptionListEntry item) {
-        mListener.onSimItemClicked(item);
-        showOrHide(false, true);
-    }
-
-    public boolean isOpen() {
-        return mShow;
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/AbstractConversationListActivity.java b/src/com/android/messaging/ui/conversationlist/AbstractConversationListActivity.java
deleted file mode 100644
index a2b0bdf..0000000
--- a/src/com/android/messaging/ui/conversationlist/AbstractConversationListActivity.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Fragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.annotation.NonNull;
-import android.view.View;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.action.DeleteConversationAction;
-import com.android.messaging.datamodel.action.UpdateConversationArchiveStatusAction;
-import com.android.messaging.datamodel.action.UpdateConversationOptionsAction;
-import com.android.messaging.datamodel.action.UpdateDestinationBlockedAction;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.SnackBar;
-import com.android.messaging.ui.SnackBarInteraction;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.contact.AddContactsConfirmationDialog;
-import com.android.messaging.ui.conversationlist.ConversationListFragment.ConversationListFragmentHost;
-import com.android.messaging.ui.conversationlist.MultiSelectActionModeCallback.SelectedConversation;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.Trace;
-import com.android.messaging.util.UiUtils;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.annotation.Nullable;
-
-/**
- * Base class for many Conversation List activities. This will handle the common actions of multi
- * select and common launching of intents.
- */
-public abstract class AbstractConversationListActivity  extends BugleActionBarActivity
-    implements ConversationListFragmentHost, MultiSelectActionModeCallback.Listener {
-
-    private static final int REQUEST_SET_DEFAULT_SMS_APP = 1;
-
-    protected ConversationListFragment mConversationListFragment;
-
-    @Override
-    public void onAttachFragment(final Fragment fragment) {
-        Trace.beginSection("AbstractConversationListActivity.onAttachFragment");
-        // Fragment could be debug dialog
-        if (fragment instanceof ConversationListFragment) {
-            mConversationListFragment = (ConversationListFragment) fragment;
-            mConversationListFragment.setHost(this);
-        }
-        Trace.endSection();
-    }
-
-    @Override
-    public void onBackPressed() {
-        // If action mode is active dismiss it
-        if (getActionMode() != null) {
-            dismissActionMode();
-            return;
-        }
-        super.onBackPressed();
-    }
-
-    protected void startMultiSelectActionMode() {
-        startActionMode(new MultiSelectActionModeCallback(this));
-    }
-
-    protected void exitMultiSelectState() {
-        mConversationListFragment.showFab();
-        dismissActionMode();
-        mConversationListFragment.updateUi();
-    }
-
-    protected boolean isInConversationListSelectMode() {
-        return getActionModeCallback() instanceof MultiSelectActionModeCallback;
-    }
-
-    @Override
-    public boolean isSelectionMode() {
-        return isInConversationListSelectMode();
-    }
-
-    @SuppressWarnings("MissingSuperCall") // TODO: fix me
-    @Override
-    public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
-    }
-
-    @Override
-    public void onActionBarDelete(final Collection<SelectedConversation> conversations) {
-        if (!PhoneUtils.getDefault().isDefaultSmsApp()) {
-            // TODO: figure out a good way to combine this with the implementation in
-            // ConversationFragment doing similar things
-            final Activity activity = this;
-            UiUtils.showSnackBarWithCustomAction(this,
-                    getWindow().getDecorView().getRootView(),
-                    getString(R.string.requires_default_sms_app),
-                    SnackBar.Action.createCustomAction(new Runnable() {
-                            @Override
-                            public void run() {
-                                final Intent intent =
-                                        UIIntents.get().getChangeDefaultSmsAppIntent(activity);
-                                startActivityForResult(intent, REQUEST_SET_DEFAULT_SMS_APP);
-                            }
-                        },
-                        getString(R.string.requires_default_sms_change_button)),
-                    null /* interactions */,
-                    null /* placement */);
-            return;
-        }
-
-        new AlertDialog.Builder(this)
-                .setTitle(getResources().getQuantityString(
-                        R.plurals.delete_conversations_confirmation_dialog_title,
-                        conversations.size()))
-                .setPositiveButton(R.string.delete_conversation_confirmation_button,
-                        new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(final DialogInterface dialog,
-                                    final int button) {
-                                for (final SelectedConversation conversation : conversations) {
-                                    DeleteConversationAction.deleteConversation(
-                                            conversation.conversationId,
-                                            conversation.timestamp);
-                                }
-                                exitMultiSelectState();
-                            }
-                })
-                .setNegativeButton(R.string.delete_conversation_decline_button, null)
-                .show();
-    }
-
-    @Override
-    public void onActionBarArchive(final Iterable<SelectedConversation> conversations,
-            final boolean isToArchive) {
-        final ArrayList<String> conversationIds = new ArrayList<String>();
-        for (final SelectedConversation conversation : conversations) {
-            final String conversationId = conversation.conversationId;
-            conversationIds.add(conversationId);
-            if (isToArchive) {
-                UpdateConversationArchiveStatusAction.archiveConversation(conversationId);
-            } else {
-                UpdateConversationArchiveStatusAction.unarchiveConversation(conversationId);
-            }
-        }
-
-        final Runnable undoRunnable = new Runnable() {
-            @Override
-            public void run() {
-                for (final String conversationId : conversationIds) {
-                    if (isToArchive) {
-                        UpdateConversationArchiveStatusAction.unarchiveConversation(conversationId);
-                    } else {
-                        UpdateConversationArchiveStatusAction.archiveConversation(conversationId);
-                    }
-                }
-            }
-        };
-
-        final int textId =
-                isToArchive ? R.string.archived_toast_message : R.string.unarchived_toast_message;
-        final String message = getResources().getString(textId, conversationIds.size());
-        UiUtils.showSnackBar(this, findViewById(android.R.id.list), message, undoRunnable,
-                SnackBar.Action.SNACK_BAR_UNDO,
-                mConversationListFragment.getSnackBarInteractions());
-        exitMultiSelectState();
-    }
-
-    @Override
-    public void onActionBarNotification(final Iterable<SelectedConversation> conversations,
-            final boolean isNotificationOn) {
-        for (final SelectedConversation conversation : conversations) {
-            UpdateConversationOptionsAction.enableConversationNotifications(
-                    conversation.conversationId, isNotificationOn);
-        }
-
-        final int textId = isNotificationOn ?
-                R.string.notification_on_toast_message : R.string.notification_off_toast_message;
-        final String message = getResources().getString(textId, 1);
-        UiUtils.showSnackBar(this, findViewById(android.R.id.list), message,
-            null /* undoRunnable */,
-            SnackBar.Action.SNACK_BAR_UNDO, mConversationListFragment.getSnackBarInteractions());
-        exitMultiSelectState();
-    }
-
-    @Override
-    public void onActionBarAddContact(final SelectedConversation conversation) {
-        final Uri avatarUri;
-        if (conversation.icon != null) {
-            avatarUri = Uri.parse(conversation.icon);
-        } else {
-            avatarUri = null;
-        }
-        final AddContactsConfirmationDialog dialog = new AddContactsConfirmationDialog(
-                this, avatarUri, conversation.otherParticipantNormalizedDestination);
-        dialog.show();
-        exitMultiSelectState();
-    }
-
-    @Override
-    public void onActionBarBlock(final SelectedConversation conversation) {
-        final Resources res = getResources();
-        new AlertDialog.Builder(this)
-                .setTitle(res.getString(R.string.block_confirmation_title,
-                        conversation.otherParticipantNormalizedDestination))
-                .setMessage(res.getString(R.string.block_confirmation_message))
-                .setNegativeButton(android.R.string.cancel, null)
-                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(final DialogInterface arg0, final int arg1) {
-                        final Context context = AbstractConversationListActivity.this;
-                        final View listView = findViewById(android.R.id.list);
-                        final List<SnackBarInteraction> interactions =
-                                mConversationListFragment.getSnackBarInteractions();
-                        final UpdateDestinationBlockedAction.UpdateDestinationBlockedActionListener
-                                undoListener =
-                                        new UpdateDestinationBlockedActionSnackBar(
-                                                context, listView, null /* undoRunnable */,
-                                                interactions);
-                        final Runnable undoRunnable = new Runnable() {
-                            @Override
-                            public void run() {
-                                UpdateDestinationBlockedAction.updateDestinationBlocked(
-                                        conversation.otherParticipantNormalizedDestination, false,
-                                        conversation.conversationId,
-                                        undoListener);
-                            }
-                        };
-                        final UpdateDestinationBlockedAction.UpdateDestinationBlockedActionListener
-                              listener = new UpdateDestinationBlockedActionSnackBar(
-                                      context, listView, undoRunnable, interactions);
-                        UpdateDestinationBlockedAction.updateDestinationBlocked(
-                                conversation.otherParticipantNormalizedDestination, true,
-                                conversation.conversationId,
-                                listener);
-                        exitMultiSelectState();
-                    }
-                })
-                .create()
-                .show();
-    }
-
-    @Override
-    public void onConversationClick(final ConversationListData listData,
-                                    final ConversationListItemData conversationListItemData,
-                                    final boolean isLongClick,
-                                    final ConversationListItemView conversationView) {
-        if (isLongClick && !isInConversationListSelectMode()) {
-            startMultiSelectActionMode();
-        }
-
-        if (isInConversationListSelectMode()) {
-            final MultiSelectActionModeCallback multiSelectActionMode =
-                    (MultiSelectActionModeCallback) getActionModeCallback();
-            multiSelectActionMode.toggleSelect(listData, conversationListItemData);
-            mConversationListFragment.updateUi();
-        } else {
-            final String conversationId = conversationListItemData.getConversationId();
-            Bundle sceneTransitionAnimationOptions = null;
-            boolean hasCustomTransitions = false;
-
-            UIIntents.get().launchConversationActivity(
-                    this, conversationId, null,
-                    sceneTransitionAnimationOptions,
-                    hasCustomTransitions);
-        }
-    }
-
-    @Override
-    public void onCreateConversationClick() {
-        UIIntents.get().launchCreateNewConversationActivity(this, null);
-    }
-
-
-    @Override
-    public boolean isConversationSelected(final String conversationId) {
-        return isInConversationListSelectMode() &&
-                ((MultiSelectActionModeCallback) getActionModeCallback()).isSelected(
-                        conversationId);
-    }
-
-    public void onActionBarDebug() {
-        DebugUtils.showDebugOptions(this);
-    }
-
-    private static class UpdateDestinationBlockedActionSnackBar
-            implements UpdateDestinationBlockedAction.UpdateDestinationBlockedActionListener {
-        private final Context mContext;
-        private final View mParentView;
-        private final Runnable mUndoRunnable;
-        private final List<SnackBarInteraction> mInteractions;
-
-        UpdateDestinationBlockedActionSnackBar(final Context context,
-                @NonNull final View parentView, @Nullable final Runnable undoRunnable,
-                @Nullable List<SnackBarInteraction> interactions) {
-            mContext = context;
-            mParentView = parentView;
-            mUndoRunnable = undoRunnable;
-            mInteractions = interactions;
-        }
-
-        @Override
-        public void onUpdateDestinationBlockedAction(
-            final UpdateDestinationBlockedAction action,
-            final boolean success, final boolean block,
-            final String destination) {
-            if (success) {
-                final int messageId = block ? R.string.blocked_toast_message
-                        : R.string.unblocked_toast_message;
-                final String message = mContext.getResources().getString(messageId, 1);
-                UiUtils.showSnackBar(mContext, mParentView, message, mUndoRunnable,
-                        SnackBar.Action.SNACK_BAR_UNDO, mInteractions);
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/ArchivedConversationListActivity.java b/src/com/android/messaging/ui/conversationlist/ArchivedConversationListActivity.java
deleted file mode 100644
index 342c970..0000000
--- a/src/com/android/messaging/ui/conversationlist/ArchivedConversationListActivity.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.graphics.drawable.ColorDrawable;
-import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.messaging.R;
-import com.android.messaging.util.DebugUtils;
-
-public class ArchivedConversationListActivity extends AbstractConversationListActivity {
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        final ConversationListFragment fragment =
-                ConversationListFragment.createArchivedConversationListFragment();
-        getFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit();
-        invalidateActionBar();
-    }
-
-    protected void updateActionBar(ActionBar actionBar) {
-        actionBar.setTitle(getString(R.string.archived_activity_title));
-        actionBar.setDisplayShowTitleEnabled(true);
-        actionBar.setDisplayHomeAsUpEnabled(true);
-        actionBar.setBackgroundDrawable(new ColorDrawable(
-                getResources().getColor(
-                        R.color.archived_conversation_action_bar_background_color_dark)));
-        actionBar.show();
-        super.updateActionBar(actionBar);
-    }
-
-    @Override
-    public void onBackPressed() {
-        if (isInConversationListSelectMode()) {
-            exitMultiSelectState();
-        } else {
-            super.onBackPressed();
-        }
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        if (super.onCreateOptionsMenu(menu)) {
-            return true;
-        }
-        getMenuInflater().inflate(R.menu.archived_conversation_list_menu, menu);
-        final MenuItem item = menu.findItem(R.id.action_debug_options);
-        if (item != null) {
-            final boolean enableDebugItems = DebugUtils.isDebugEnabled();
-            item.setVisible(enableDebugItems).setEnabled(enableDebugItems);
-        }
-        return true;
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem menuItem) {
-        switch(menuItem.getItemId()) {
-            case R.id.action_debug_options:
-                onActionBarDebug();
-                return true;
-            case android.R.id.home:
-                onActionBarHome();
-                return true;
-            default:
-                return super.onOptionsItemSelected(menuItem);
-        }
-    }
-
-    @Override
-    public void onActionBarHome() {
-        onBackPressed();
-    }
-
-    @Override
-    public boolean isSwipeAnimatable() {
-        return false;
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java b/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java
deleted file mode 100644
index 636b0f5..0000000
--- a/src/com/android/messaging/ui/conversationlist/ConversationListActivity.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.graphics.drawable.ColorDrawable;
-import android.os.Bundle;
-import androidx.appcompat.app.ActionBar;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.Trace;
-
-public class ConversationListActivity extends AbstractConversationListActivity {
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        Trace.beginSection("ConversationListActivity.onCreate");
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.conversation_list_activity);
-        Trace.endSection();
-        invalidateActionBar();
-    }
-
-    @Override
-    protected void updateActionBar(final ActionBar actionBar) {
-        actionBar.setTitle(getString(R.string.app_name));
-        actionBar.setDisplayShowTitleEnabled(true);
-        actionBar.setDisplayHomeAsUpEnabled(false);
-        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
-        actionBar.setBackgroundDrawable(new ColorDrawable(
-                getResources().getColor(R.color.action_bar_background_color)));
-        actionBar.show();
-        super.updateActionBar(actionBar);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        // Invalidate the menu as items that are based on settings may have changed
-        // while not in the app (e.g. Talkback enabled/disable affects new conversation
-        // button)
-        supportInvalidateOptionsMenu();
-    }
-
-    @Override
-    public void onBackPressed() {
-        if (isInConversationListSelectMode()) {
-            exitMultiSelectState();
-        } else {
-            super.onBackPressed();
-        }
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(final Menu menu) {
-        if (super.onCreateOptionsMenu(menu)) {
-            return true;
-        }
-        getMenuInflater().inflate(R.menu.conversation_list_fragment_menu, menu);
-        final MenuItem item = menu.findItem(R.id.action_debug_options);
-        if (item != null) {
-            final boolean enableDebugItems = DebugUtils.isDebugEnabled();
-            item.setVisible(enableDebugItems).setEnabled(enableDebugItems);
-        }
-        return true;
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem menuItem) {
-        switch(menuItem.getItemId()) {
-            case R.id.action_start_new_conversation:
-                onActionBarStartNewConversation();
-                return true;
-            case R.id.action_settings:
-                onActionBarSettings();
-                return true;
-            case R.id.action_debug_options:
-                onActionBarDebug();
-                return true;
-            case R.id.action_show_archived:
-                onActionBarArchived();
-                return true;
-            case R.id.action_show_blocked_contacts:
-                onActionBarBlockedParticipants();
-                return true;
-        }
-        return super.onOptionsItemSelected(menuItem);
-    }
-
-    @Override
-    public void onActionBarHome() {
-        exitMultiSelectState();
-    }
-
-    public void onActionBarStartNewConversation() {
-        UIIntents.get().launchCreateNewConversationActivity(this, null);
-    }
-
-    public void onActionBarSettings() {
-        UIIntents.get().launchSettingsActivity(this);
-    }
-
-    public void onActionBarBlockedParticipants() {
-        UIIntents.get().launchBlockedParticipantsActivity(this);
-    }
-
-    public void onActionBarArchived() {
-        UIIntents.get().launchArchivedConversationsActivity(this);
-    }
-
-    @Override
-    public boolean isSwipeAnimatable() {
-        return !isInConversationListSelectMode();
-    }
-
-    @Override
-    public void onWindowFocusChanged(final boolean hasFocus) {
-        super.onWindowFocusChanged(hasFocus);
-        final ConversationListFragment conversationListFragment =
-                (ConversationListFragment) getFragmentManager().findFragmentById(
-                        R.id.conversation_list_fragment);
-        // When the screen is turned on, the last used activity gets resumed, but it gets
-        // window focus only after the lock screen is unlocked.
-        if (hasFocus && conversationListFragment != null) {
-            conversationListFragment.setScrolledToNewestConversationIfNeeded();
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/ConversationListAdapter.java b/src/com/android/messaging/ui/conversationlist/ConversationListAdapter.java
deleted file mode 100644
index fc687eb..0000000
--- a/src/com/android/messaging/ui/conversationlist/ConversationListAdapter.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.content.Context;
-import android.database.Cursor;
-import androidx.recyclerview.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.ViewGroup;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.CursorRecyclerAdapter;
-import com.android.messaging.ui.conversationlist.ConversationListItemView.HostInterface;
-
-/**
- * Provides an interface to expose Conversation List Cursor data to a UI widget like a ListView.
- */
-public class ConversationListAdapter
-        extends CursorRecyclerAdapter<ConversationListAdapter.ConversationListViewHolder> {
-
-    private final ConversationListItemView.HostInterface mClivHostInterface;
-
-    public ConversationListAdapter(final Context context, final Cursor cursor,
-            final ConversationListItemView.HostInterface clivHostInterface) {
-        super(context, cursor, 0);
-        mClivHostInterface = clivHostInterface;
-        setHasStableIds(true);
-    }
-
-    /**
-     * @see com.android.messaging.ui.CursorRecyclerAdapter#bindViewHolder(
-     * androidx.recyclerview.widget.RecyclerView.ViewHolder, android.content.Context,
-     * android.database.Cursor)
-     */
-    @Override
-    public void bindViewHolder(final ConversationListViewHolder holder, final Context context,
-            final Cursor cursor) {
-        final ConversationListItemView conversationListItemView = holder.mView;
-        conversationListItemView.bind(cursor, mClivHostInterface);
-    }
-
-    @Override
-    public ConversationListViewHolder createViewHolder(final Context context,
-            final ViewGroup parent, final int viewType) {
-        final LayoutInflater layoutInflater = LayoutInflater.from(context);
-        final ConversationListItemView itemView =
-                (ConversationListItemView) layoutInflater.inflate(
-                        R.layout.conversation_list_item_view, null);
-        return new ConversationListViewHolder(itemView);
-    }
-
-    /**
-     * ViewHolder that holds a ConversationListItemView.
-     */
-    public static class ConversationListViewHolder extends RecyclerView.ViewHolder {
-        final ConversationListItemView mView;
-
-        public ConversationListViewHolder(final ConversationListItemView itemView) {
-            super(itemView);
-            mView = itemView;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/ConversationListFragment.java b/src/com/android/messaging/ui/conversationlist/ConversationListFragment.java
deleted file mode 100644
index 269efcb..0000000
--- a/src/com/android/messaging/ui/conversationlist/ConversationListFragment.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Parcelable;
-import androidx.core.view.ViewCompat;
-import androidx.core.view.ViewGroupCompat;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.view.ViewGroup.MarginLayoutParams;
-import android.view.ViewPropertyAnimator;
-import android.view.accessibility.AccessibilityManager;
-import android.widget.AbsListView;
-import android.widget.ImageView;
-
-import com.android.messaging.R;
-import com.android.messaging.annotation.VisibleForAnimation;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListData.ConversationListDataListener;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.ui.BugleAnimationTags;
-import com.android.messaging.ui.ListEmptyView;
-import com.android.messaging.ui.SnackBarInteraction;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.AccessibilityUtil;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ImeUtil;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.UiUtils;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Shows a list of conversations.
- */
-public class ConversationListFragment extends Fragment implements ConversationListDataListener,
-        ConversationListItemView.HostInterface {
-    private static final String BUNDLE_ARCHIVED_MODE = "archived_mode";
-    private static final String BUNDLE_FORWARD_MESSAGE_MODE = "forward_message_mode";
-    private static final boolean VERBOSE = false;
-
-    private MenuItem mShowBlockedMenuItem;
-    private boolean mArchiveMode;
-    private boolean mBlockedAvailable;
-    private boolean mForwardMessageMode;
-
-    public interface ConversationListFragmentHost {
-        public void onConversationClick(final ConversationListData listData,
-                                        final ConversationListItemData conversationListItemData,
-                                        final boolean isLongClick,
-                                        final ConversationListItemView conversationView);
-        public void onCreateConversationClick();
-        public boolean isConversationSelected(final String conversationId);
-        public boolean isSwipeAnimatable();
-        public boolean isSelectionMode();
-        public boolean hasWindowFocus();
-    }
-
-    private ConversationListFragmentHost mHost;
-    private RecyclerView mRecyclerView;
-    private ImageView mStartNewConversationButton;
-    private ListEmptyView mEmptyListMessageView;
-    private ConversationListAdapter mAdapter;
-
-    // Saved Instance State Data - only for temporal data which is nice to maintain but not
-    // critical for correctness.
-    private static final String SAVED_INSTANCE_STATE_LIST_VIEW_STATE_KEY =
-            "conversationListViewState";
-    private Parcelable mListState;
-
-    @VisibleForTesting
-    final Binding<ConversationListData> mListBinding = BindingBase.createBinding(this);
-
-    public static ConversationListFragment createArchivedConversationListFragment() {
-        return createConversationListFragment(BUNDLE_ARCHIVED_MODE);
-    }
-
-    public static ConversationListFragment createForwardMessageConversationListFragment() {
-        return createConversationListFragment(BUNDLE_FORWARD_MESSAGE_MODE);
-    }
-
-    public static ConversationListFragment createConversationListFragment(String modeKeyName) {
-        final ConversationListFragment fragment = new ConversationListFragment();
-        final Bundle bundle = new Bundle();
-        bundle.putBoolean(modeKeyName, true);
-        fragment.setArguments(bundle);
-        return fragment;
-    }
-
-    /**
-     * {@inheritDoc} from Fragment
-     */
-    @Override
-    public void onCreate(final Bundle bundle) {
-        super.onCreate(bundle);
-        mListBinding.getData().init(getLoaderManager(), mListBinding);
-        mAdapter = new ConversationListAdapter(getActivity(), null, this);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-
-        Assert.notNull(mHost);
-        setScrolledToNewestConversationIfNeeded();
-
-        updateUi();
-    }
-
-    public void setScrolledToNewestConversationIfNeeded() {
-        if (!mArchiveMode
-                && !mForwardMessageMode
-                && isScrolledToFirstConversation()
-                && mHost.hasWindowFocus()) {
-            mListBinding.getData().setScrolledToNewestConversation(true);
-        }
-    }
-
-    private boolean isScrolledToFirstConversation() {
-        int firstItemPosition = ((LinearLayoutManager) mRecyclerView.getLayoutManager())
-                .findFirstCompletelyVisibleItemPosition();
-        return firstItemPosition == 0;
-    }
-
-    /**
-     * {@inheritDoc} from Fragment
-     */
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        mListBinding.unbind();
-        mHost = null;
-    }
-
-    /**
-     * {@inheritDoc} from Fragment
-     */
-    @Override
-    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
-            final Bundle savedInstanceState) {
-        final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.conversation_list_fragment,
-                container, false);
-        mRecyclerView = (RecyclerView) rootView.findViewById(android.R.id.list);
-        mEmptyListMessageView = (ListEmptyView) rootView.findViewById(R.id.no_conversations_view);
-        mEmptyListMessageView.setImageHint(R.drawable.ic_oobe_conv_list);
-        // The default behavior for default layout param generation by LinearLayoutManager is to
-        // provide width and height of WRAP_CONTENT, but this is not desirable for
-        // ConversationListFragment; the view in each row should be a width of MATCH_PARENT so that
-        // the entire row is tappable.
-        final Activity activity = getActivity();
-        final LinearLayoutManager manager = new LinearLayoutManager(activity) {
-            @Override
-            public RecyclerView.LayoutParams generateDefaultLayoutParams() {
-                return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
-                        ViewGroup.LayoutParams.WRAP_CONTENT);
-            }
-        };
-        mRecyclerView.setLayoutManager(manager);
-        mRecyclerView.setHasFixedSize(true);
-        mRecyclerView.setAdapter(mAdapter);
-        mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
-            int mCurrentState = AbsListView.OnScrollListener.SCROLL_STATE_IDLE;
-
-            @Override
-            public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) {
-                if (mCurrentState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL
-                        || mCurrentState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
-                    ImeUtil.get().hideImeKeyboard(getActivity(), mRecyclerView);
-                }
-
-                if (isScrolledToFirstConversation()) {
-                    setScrolledToNewestConversationIfNeeded();
-                } else {
-                    mListBinding.getData().setScrolledToNewestConversation(false);
-                }
-            }
-
-            @Override
-            public void onScrollStateChanged(final RecyclerView recyclerView, final int newState) {
-                mCurrentState = newState;
-            }
-        });
-        mRecyclerView.addOnItemTouchListener(new ConversationListSwipeHelper(mRecyclerView));
-
-        if (savedInstanceState != null) {
-            mListState = savedInstanceState.getParcelable(SAVED_INSTANCE_STATE_LIST_VIEW_STATE_KEY);
-        }
-
-        mStartNewConversationButton = (ImageView) rootView.findViewById(
-                R.id.start_new_conversation_button);
-        if (mArchiveMode) {
-            mStartNewConversationButton.setVisibility(View.GONE);
-        } else {
-            mStartNewConversationButton.setVisibility(View.VISIBLE);
-            mStartNewConversationButton.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(final View clickView) {
-                    mHost.onCreateConversationClick();
-                }
-            });
-        }
-        ViewCompat.setTransitionName(mStartNewConversationButton, BugleAnimationTags.TAG_FABICON);
-
-        // The root view has a non-null background, which by default is deemed by the framework
-        // to be a "transition group," where all child views are animated together during an
-        // activity transition. However, we want each individual items in the recycler view to
-        // show explode animation themselves, so we explicitly tag the root view to be a non-group.
-        ViewGroupCompat.setTransitionGroup(rootView, false);
-
-        setHasOptionsMenu(true);
-        return rootView;
-    }
-
-    @Override
-    public void onAttach(final Activity activity) {
-        super.onAttach(activity);
-        if (VERBOSE) {
-            LogUtil.v(LogUtil.BUGLE_TAG, "Attaching List");
-        }
-        final Bundle arguments = getArguments();
-        if (arguments != null) {
-            mArchiveMode = arguments.getBoolean(BUNDLE_ARCHIVED_MODE, false);
-            mForwardMessageMode = arguments.getBoolean(BUNDLE_FORWARD_MESSAGE_MODE, false);
-        }
-        mListBinding.bind(DataModel.get().createConversationListData(activity, this, mArchiveMode));
-    }
-
-
-    @Override
-    public void onSaveInstanceState(final Bundle outState) {
-        super.onSaveInstanceState(outState);
-        if (mListState != null) {
-            outState.putParcelable(SAVED_INSTANCE_STATE_LIST_VIEW_STATE_KEY, mListState);
-        }
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        mListState = mRecyclerView.getLayoutManager().onSaveInstanceState();
-        mListBinding.getData().setScrolledToNewestConversation(false);
-    }
-
-    /**
-     * Call this immediately after attaching the fragment
-     */
-    public void setHost(final ConversationListFragmentHost host) {
-        Assert.isNull(mHost);
-        mHost = host;
-    }
-
-    @Override
-    public void onConversationListCursorUpdated(final ConversationListData data,
-            final Cursor cursor) {
-        mListBinding.ensureBound(data);
-        final Cursor oldCursor = mAdapter.swapCursor(cursor);
-        updateEmptyListUi(cursor == null || cursor.getCount() == 0);
-        if (mListState != null && cursor != null && oldCursor == null) {
-            mRecyclerView.getLayoutManager().onRestoreInstanceState(mListState);
-        }
-    }
-
-    @Override
-    public void setBlockedParticipantsAvailable(final boolean blockedAvailable) {
-        mBlockedAvailable = blockedAvailable;
-        if (mShowBlockedMenuItem != null) {
-            mShowBlockedMenuItem.setVisible(blockedAvailable);
-        }
-    }
-
-    public void updateUi() {
-        mAdapter.notifyDataSetChanged();
-    }
-
-    @Override
-    public void onPrepareOptionsMenu(final Menu menu) {
-        super.onPrepareOptionsMenu(menu);
-        final MenuItem startNewConversationMenuItem =
-                menu.findItem(R.id.action_start_new_conversation);
-        if (startNewConversationMenuItem != null) {
-            // It is recommended for the Floating Action button functionality to be duplicated as a
-            // menu
-            AccessibilityManager accessibilityManager = (AccessibilityManager)
-                    getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE);
-            startNewConversationMenuItem.setVisible(accessibilityManager
-                    .isTouchExplorationEnabled());
-        }
-
-        final MenuItem archive = menu.findItem(R.id.action_show_archived);
-        if (archive != null) {
-            archive.setVisible(true);
-        }
-    }
-
-    @Override
-    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
-        if (!isAdded()) {
-            // Guard against being called before we're added to the activity
-            return;
-        }
-
-        mShowBlockedMenuItem = menu.findItem(R.id.action_show_blocked_contacts);
-        if (mShowBlockedMenuItem != null) {
-            mShowBlockedMenuItem.setVisible(mBlockedAvailable);
-        }
-    }
-
-    /**
-     * {@inheritDoc} from ConversationListItemView.HostInterface
-     */
-    @Override
-    public void onConversationClicked(final ConversationListItemData conversationListItemData,
-            final boolean isLongClick, final ConversationListItemView conversationView) {
-        final ConversationListData listData = mListBinding.getData();
-        mHost.onConversationClick(listData, conversationListItemData, isLongClick,
-                conversationView);
-    }
-
-    /**
-     * {@inheritDoc} from ConversationListItemView.HostInterface
-     */
-    @Override
-    public boolean isConversationSelected(final String conversationId) {
-        return mHost.isConversationSelected(conversationId);
-    }
-
-    @Override
-    public boolean isSwipeAnimatable() {
-        return mHost.isSwipeAnimatable();
-    }
-
-    // Show and hide empty list UI as needed with appropriate text based on view specifics
-    private void updateEmptyListUi(final boolean isEmpty) {
-        if (isEmpty) {
-            int emptyListText;
-            if (!mListBinding.getData().getHasFirstSyncCompleted()) {
-                emptyListText = R.string.conversation_list_first_sync_text;
-            } else if (mArchiveMode) {
-                emptyListText = R.string.archived_conversation_list_empty_text;
-            } else {
-                emptyListText = R.string.conversation_list_empty_text;
-            }
-            mEmptyListMessageView.setTextHint(emptyListText);
-            mEmptyListMessageView.setVisibility(View.VISIBLE);
-            mEmptyListMessageView.setIsImageVisible(true);
-            mEmptyListMessageView.setIsVerticallyCentered(true);
-        } else {
-            mEmptyListMessageView.setVisibility(View.GONE);
-        }
-    }
-
-    @Override
-    public List<SnackBarInteraction> getSnackBarInteractions() {
-        final List<SnackBarInteraction> interactions = new ArrayList<SnackBarInteraction>(1);
-        final SnackBarInteraction fabInteraction =
-                new SnackBarInteraction.BasicSnackBarInteraction(mStartNewConversationButton);
-        interactions.add(fabInteraction);
-        return interactions;
-    }
-
-    private ViewPropertyAnimator getNormalizedFabAnimator() {
-        return mStartNewConversationButton.animate()
-                .setInterpolator(UiUtils.DEFAULT_INTERPOLATOR)
-                .setDuration(getActivity().getResources().getInteger(
-                        R.integer.fab_animation_duration_ms));
-    }
-
-    public ViewPropertyAnimator dismissFab() {
-        // To prevent clicking while animating.
-        mStartNewConversationButton.setEnabled(false);
-        final MarginLayoutParams lp =
-                (MarginLayoutParams) mStartNewConversationButton.getLayoutParams();
-        final float fabWidthWithLeftRightMargin = mStartNewConversationButton.getWidth()
-                + lp.leftMargin + lp.rightMargin;
-        final int direction = AccessibilityUtil.isLayoutRtl(mStartNewConversationButton) ? -1 : 1;
-        return getNormalizedFabAnimator().translationX(direction * fabWidthWithLeftRightMargin);
-    }
-
-    public ViewPropertyAnimator showFab() {
-        return getNormalizedFabAnimator().translationX(0).withEndAction(new Runnable() {
-            @Override
-            public void run() {
-                // Re-enable clicks after the animation.
-                mStartNewConversationButton.setEnabled(true);
-            }
-        });
-    }
-
-    public View getHeroElementForTransition() {
-        return mArchiveMode ? null : mStartNewConversationButton;
-    }
-
-    @VisibleForAnimation
-    public RecyclerView getRecyclerView() {
-        return mRecyclerView;
-    }
-
-    @Override
-    public void startFullScreenPhotoViewer(
-            final Uri initialPhoto, final Rect initialPhotoBounds, final Uri photosUri) {
-        UIIntents.get().launchFullScreenPhotoViewer(
-                getActivity(), initialPhoto, initialPhotoBounds, photosUri);
-    }
-
-    @Override
-    public void startFullScreenVideoViewer(final Uri videoUri) {
-        UIIntents.get().launchFullScreenVideoViewer(getActivity(), videoUri);
-    }
-
-    @Override
-    public boolean isSelectionMode() {
-        return mHost != null && mHost.isSelectionMode();
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/ConversationListItemView.java b/src/com/android/messaging/ui/conversationlist/ConversationListItemView.java
deleted file mode 100644
index b22ccfc..0000000
--- a/src/com/android/messaging/ui/conversationlist/ConversationListItemView.java
+++ /dev/null
@@ -1,651 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.graphics.Typeface;
-import android.net.Uri;
-import androidx.core.text.BidiFormatter;
-import androidx.core.text.TextDirectionHeuristicsCompat;
-import android.text.TextPaint;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnLayoutChangeListener;
-import android.view.View.OnLongClickListener;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.annotation.VisibleForAnimation;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.action.UpdateConversationArchiveStatusAction;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.media.UriImageRequestDescriptor;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.ui.AsyncImageView;
-import com.android.messaging.ui.AudioAttachmentView;
-import com.android.messaging.ui.ContactIconView;
-import com.android.messaging.ui.SnackBar;
-import com.android.messaging.ui.SnackBarInteraction;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-import com.android.messaging.util.Typefaces;
-import com.android.messaging.util.UiUtils;
-import com.android.messaging.util.UriUtil;
-
-import java.util.List;
-
-/**
- * The view for a single entry in a conversation list.
- */
-public class ConversationListItemView extends FrameLayout implements OnClickListener,
-        OnLongClickListener, OnLayoutChangeListener {
-    static final int UNREAD_SNIPPET_LINE_COUNT = 3;
-    static final int NO_UNREAD_SNIPPET_LINE_COUNT = 1;
-    private int mListItemReadColor;
-    private int mListItemUnreadColor;
-    private Typeface mListItemReadTypeface;
-    private Typeface mListItemUnreadTypeface;
-    private static String sPlusOneString;
-    private static String sPlusNString;
-
-    public interface HostInterface {
-        boolean isConversationSelected(final String conversationId);
-        void onConversationClicked(final ConversationListItemData conversationListItemData,
-                boolean isLongClick, final ConversationListItemView conversationView);
-        boolean isSwipeAnimatable();
-        List<SnackBarInteraction> getSnackBarInteractions();
-        void startFullScreenPhotoViewer(final Uri initialPhoto, final Rect initialPhotoBounds,
-                final Uri photosUri);
-        void startFullScreenVideoViewer(final Uri videoUri);
-        boolean isSelectionMode();
-    }
-
-    private final OnClickListener fullScreenPreviewClickListener = new OnClickListener() {
-        @Override
-        public void onClick(final View v) {
-            final String previewType = mData.getShowDraft() ?
-                    mData.getDraftPreviewContentType() : mData.getPreviewContentType();
-            Assert.isTrue(ContentType.isImageType(previewType) ||
-                    ContentType.isVideoType(previewType));
-
-            final Uri previewUri = mData.getShowDraft() ?
-                    mData.getDraftPreviewUri() : mData.getPreviewUri();
-            if (ContentType.isImageType(previewType)) {
-                final Uri imagesUri = mData.getShowDraft() ?
-                        MessagingContentProvider.buildDraftImagesUri(mData.getConversationId()) :
-                        MessagingContentProvider
-                                .buildConversationImagesUri(mData.getConversationId());
-                final Rect previewImageBounds = UiUtils.getMeasuredBoundsOnScreen(v);
-                mHostInterface.startFullScreenPhotoViewer(
-                        previewUri, previewImageBounds, imagesUri);
-            } else {
-                mHostInterface.startFullScreenVideoViewer(previewUri);
-            }
-        }
-    };
-
-    private final ConversationListItemData mData;
-
-    private int mAnimatingCount;
-    private ViewGroup mSwipeableContainer;
-    private ViewGroup mCrossSwipeBackground;
-    private ViewGroup mSwipeableContent;
-    private TextView mConversationNameView;
-    private ImageView mWorkProfileIconView;
-    private TextView mSnippetTextView;
-    private TextView mSubjectTextView;
-    private TextView mTimestampTextView;
-    private ContactIconView mContactIconView;
-    private ImageView mContactCheckmarkView;
-    private ImageView mNotificationBellView;
-    private ImageView mFailedStatusIconView;
-    private ImageView mCrossSwipeArchiveLeftImageView;
-    private ImageView mCrossSwipeArchiveRightImageView;
-    private AsyncImageView mImagePreviewView;
-    private AudioAttachmentView mAudioAttachmentView;
-    private HostInterface mHostInterface;
-
-    public ConversationListItemView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mData = new ConversationListItemData();
-        final Resources res = context.getResources();
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        mSwipeableContainer = (ViewGroup) findViewById(R.id.swipeableContainer);
-        mCrossSwipeBackground = (ViewGroup) findViewById(R.id.crossSwipeBackground);
-        mSwipeableContent = (ViewGroup) findViewById(R.id.swipeableContent);
-        mConversationNameView = (TextView) findViewById(R.id.conversation_name);
-        mSnippetTextView = (TextView) findViewById(R.id.conversation_snippet);
-        mSubjectTextView = (TextView) findViewById(R.id.conversation_subject);
-        mWorkProfileIconView = (ImageView) findViewById(R.id.work_profile_icon);
-        mTimestampTextView = (TextView) findViewById(R.id.conversation_timestamp);
-        mContactIconView = (ContactIconView) findViewById(R.id.conversation_icon);
-        mContactCheckmarkView = (ImageView) findViewById(R.id.conversation_checkmark);
-        mNotificationBellView = (ImageView) findViewById(R.id.conversation_notification_bell);
-        mFailedStatusIconView = (ImageView) findViewById(R.id.conversation_failed_status_icon);
-        mCrossSwipeArchiveLeftImageView = (ImageView) findViewById(R.id.crossSwipeArchiveIconLeft);
-        mCrossSwipeArchiveRightImageView =
-                (ImageView) findViewById(R.id.crossSwipeArchiveIconRight);
-        mImagePreviewView = (AsyncImageView) findViewById(R.id.conversation_image_preview);
-        mAudioAttachmentView = (AudioAttachmentView) findViewById(R.id.audio_attachment_view);
-        mConversationNameView.addOnLayoutChangeListener(this);
-        mSnippetTextView.addOnLayoutChangeListener(this);
-
-        final Resources resources = getContext().getResources();
-        mListItemReadColor = resources.getColor(R.color.conversation_list_item_read);
-        mListItemUnreadColor = resources.getColor(R.color.conversation_list_item_unread);
-
-        mListItemReadTypeface = Typefaces.getRobotoNormal();
-        mListItemUnreadTypeface = Typefaces.getRobotoBold();
-
-        if (OsUtil.isAtLeastL()) {
-            setTransitionGroup(true);
-        }
-    }
-
-    @Override
-    public void onLayoutChange(final View v, final int left, final int top, final int right,
-            final int bottom, final int oldLeft, final int oldTop, final int oldRight,
-            final int oldBottom) {
-        if (v == mConversationNameView) {
-            setConversationName();
-        } else if (v == mSnippetTextView) {
-            setSnippet();
-        } else if (v == mSubjectTextView) {
-            setSubject();
-        }
-    }
-
-    private void setWorkProfileIcon() {
-        mWorkProfileIconView.setVisibility(mData.isEnterprise() ? View.VISIBLE : View.GONE);
-    }
-
-    private void setConversationName() {
-        if (mData.getIsRead() || mData.getShowDraft()) {
-            mConversationNameView.setTextColor(mListItemReadColor);
-            mConversationNameView.setTypeface(mListItemReadTypeface);
-        } else {
-            mConversationNameView.setTextColor(mListItemUnreadColor);
-            mConversationNameView.setTypeface(mListItemUnreadTypeface);
-        }
-
-        final String conversationName = mData.getName();
-
-        // For group conversations, ellipsize the group members that do not fit
-        final CharSequence ellipsizedName = UiUtils.commaEllipsize(
-                conversationName,
-                mConversationNameView.getPaint(),
-                mConversationNameView.getMeasuredWidth(),
-                getPlusOneString(),
-                getPlusNString());
-        // RTL : To format conversation name if it happens to be phone number.
-        final BidiFormatter bidiFormatter = BidiFormatter.getInstance();
-        final String bidiFormattedName = bidiFormatter.unicodeWrap(
-                ellipsizedName.toString(),
-                TextDirectionHeuristicsCompat.LTR);
-
-        mConversationNameView.setText(bidiFormattedName);
-    }
-
-    private static String getPlusOneString() {
-        if (sPlusOneString == null) {
-            sPlusOneString =  Factory.get().getApplicationContext().getResources()
-                    .getString(R.string.plus_one);
-        }
-        return sPlusOneString;
-    }
-
-    private static String getPlusNString() {
-        if (sPlusNString == null) {
-            sPlusNString =  Factory.get().getApplicationContext().getResources()
-                    .getString(R.string.plus_n);
-        }
-        return sPlusNString;
-    }
-
-    private void setSubject() {
-        final String subjectText = mData.getShowDraft() ?
-                mData.getDraftSubject() :
-                    MmsUtils.cleanseMmsSubject(getContext().getResources(), mData.getSubject());
-        if (!TextUtils.isEmpty(subjectText)) {
-            final String subjectPrepend = getResources().getString(R.string.subject_label);
-            mSubjectTextView.setText(TextUtils.concat(subjectPrepend, subjectText));
-            mSubjectTextView.setVisibility(VISIBLE);
-        } else {
-            mSubjectTextView.setVisibility(GONE);
-        }
-    }
-
-    private void setSnippet() {
-        mSnippetTextView.setText(getSnippetText());
-    }
-
-    // Resource Ids of content descriptions prefixes for different message status.
-    private static final int [][][] sPrimaryContentDescriptions = {
-        // 1:1 conversation
-        {
-            // Incoming message
-            {
-                R.string.one_on_one_incoming_failed_message_prefix,
-                R.string.one_on_one_incoming_successful_message_prefix
-            },
-            // Outgoing message
-            {
-                R.string.one_on_one_outgoing_failed_message_prefix,
-                R.string.one_on_one_outgoing_successful_message_prefix,
-                R.string.one_on_one_outgoing_draft_message_prefix,
-                R.string.one_on_one_outgoing_sending_message_prefix,
-            }
-        },
-
-        // Group conversation
-        {
-            // Incoming message
-            {
-                R.string.group_incoming_failed_message_prefix,
-                R.string.group_incoming_successful_message_prefix,
-            },
-            // Outgoing message
-            {
-                R.string.group_outgoing_failed_message_prefix,
-                R.string.group_outgoing_successful_message_prefix,
-                R.string.group_outgoing_draft_message_prefix,
-                R.string.group_outgoing_sending_message_prefix,
-            }
-        }
-    };
-
-    // Resource Id of the secondary part of the content description for an edge case of a message
-    // which is in both draft status and failed status.
-    private static final int sSecondaryContentDescription =
-                                        R.string.failed_message_content_description;
-
-    // 1:1 versus group
-    private static final int CONV_TYPE_ONE_ON_ONE_INDEX = 0;
-    private static final int CONV_TYPE_ONE_GROUP_INDEX = 1;
-    // Direction
-    private static final int DIRECTION_INCOMING_INDEX = 0;
-    private static final int DIRECTION_OUTGOING_INDEX = 1;
-    // Message status
-    private static final int MESSAGE_STATUS_FAILED_INDEX = 0;
-    private static final int MESSAGE_STATUS_SUCCESSFUL_INDEX = 1;
-    private static final int MESSAGE_STATUS_DRAFT_INDEX = 2;
-    private static final int MESSAGE_STATUS_SENDING_INDEX = 3;
-
-    private static final int WIDTH_FOR_ACCESSIBLE_CONVERSATION_NAME = 600;
-
-    public static String buildContentDescription(final Resources resources,
-            final ConversationListItemData data, final TextPaint conversationNameViewPaint) {
-        int messageStatusIndex;
-        boolean outgoingSnippet = data.getIsMessageTypeOutgoing() || data.getShowDraft();
-        if (outgoingSnippet) {
-            if (data.getShowDraft()) {
-                messageStatusIndex = MESSAGE_STATUS_DRAFT_INDEX;
-            } else if (data.getIsSendRequested()) {
-                messageStatusIndex = MESSAGE_STATUS_SENDING_INDEX;
-            } else {
-                messageStatusIndex = data.getIsFailedStatus() ? MESSAGE_STATUS_FAILED_INDEX
-                        : MESSAGE_STATUS_SUCCESSFUL_INDEX;
-            }
-        } else {
-            messageStatusIndex = data.getIsFailedStatus() ? MESSAGE_STATUS_FAILED_INDEX
-                    : MESSAGE_STATUS_SUCCESSFUL_INDEX;
-        }
-
-        int resId = sPrimaryContentDescriptions
-                [data.getIsGroup() ? CONV_TYPE_ONE_GROUP_INDEX : CONV_TYPE_ONE_ON_ONE_INDEX]
-                [outgoingSnippet ? DIRECTION_OUTGOING_INDEX : DIRECTION_INCOMING_INDEX]
-                [messageStatusIndex];
-
-        final String snippetText = data.getShowDraft() ?
-                data.getDraftSnippetText() : data.getSnippetText();
-
-        final String conversationName = data.getName();
-        String senderOrConvName = outgoingSnippet ? conversationName : data.getSnippetSenderName();
-
-        String primaryContentDescription = resources.getString(resId, senderOrConvName,
-                snippetText == null ? "" : snippetText,
-                data.getFormattedTimestamp(),
-                // This is used only for incoming group messages
-                conversationName);
-        String contentDescription = primaryContentDescription;
-
-        // An edge case : for an outgoing message, it might be in both draft status and
-        // failed status.
-        if (outgoingSnippet && data.getShowDraft() && data.getIsFailedStatus()) {
-            StringBuilder contentDescriptionBuilder = new StringBuilder();
-            contentDescriptionBuilder.append(primaryContentDescription);
-
-            String secondaryContentDescription =
-                    resources.getString(sSecondaryContentDescription);
-            contentDescriptionBuilder.append(" ");
-            contentDescriptionBuilder.append(secondaryContentDescription);
-            contentDescription = contentDescriptionBuilder.toString();
-        }
-        return contentDescription;
-    }
-
-    /**
-     * Fills in the data associated with this view.
-     *
-     * @param cursor The cursor from a ConversationList that this view is in, pointing to its
-     * entry.
-     */
-    public void bind(final Cursor cursor, final HostInterface hostInterface) {
-        // Update our UI model
-        mHostInterface = hostInterface;
-        mData.bind(cursor);
-
-        resetAnimatingState();
-
-        mSwipeableContainer.setOnClickListener(this);
-        mSwipeableContainer.setOnLongClickListener(this);
-
-        final Resources resources = getContext().getResources();
-
-        int color;
-        final int maxLines;
-        final Typeface typeface;
-        final int typefaceStyle = mData.getShowDraft() ? Typeface.ITALIC : Typeface.NORMAL;
-        final String snippetText = getSnippetText();
-
-        if (mData.getIsRead() || mData.getShowDraft()) {
-            maxLines = TextUtils.isEmpty(snippetText) ? 0 : NO_UNREAD_SNIPPET_LINE_COUNT;
-            color = mListItemReadColor;
-            typeface = mListItemReadTypeface;
-        } else {
-            maxLines = TextUtils.isEmpty(snippetText) ? 0 : UNREAD_SNIPPET_LINE_COUNT;
-            color = mListItemUnreadColor;
-            typeface = mListItemUnreadTypeface;
-        }
-
-        mSnippetTextView.setMaxLines(maxLines);
-        mSnippetTextView.setTextColor(color);
-        mSnippetTextView.setTypeface(typeface, typefaceStyle);
-        mSubjectTextView.setTextColor(color);
-        mSubjectTextView.setTypeface(typeface, typefaceStyle);
-
-        setSnippet();
-        setConversationName();
-        setSubject();
-        setWorkProfileIcon();
-        setContentDescription(buildContentDescription(resources, mData,
-                mConversationNameView.getPaint()));
-
-        final boolean isDefaultSmsApp = PhoneUtils.getDefault().isDefaultSmsApp();
-        // don't show the error state unless we're the default sms app
-        if (mData.getIsFailedStatus() && isDefaultSmsApp) {
-            mTimestampTextView.setTextColor(resources.getColor(R.color.conversation_list_error));
-            mTimestampTextView.setTypeface(mListItemReadTypeface, typefaceStyle);
-            int failureMessageId = R.string.message_status_download_failed;
-            if (mData.getIsMessageTypeOutgoing()) {
-                failureMessageId = MmsUtils.mapRawStatusToErrorResourceId(mData.getMessageStatus(),
-                        mData.getMessageRawTelephonyStatus());
-            }
-            mTimestampTextView.setText(resources.getString(failureMessageId));
-        } else if (mData.getShowDraft()
-                || mData.getMessageStatus() == MessageData.BUGLE_STATUS_OUTGOING_DRAFT
-                // also check for unknown status which we get because sometimes the conversation
-                // row is left with a latest_message_id of a no longer existing message and
-                // therefore the join values come back as null (or in this case zero).
-                || mData.getMessageStatus() == MessageData.BUGLE_STATUS_UNKNOWN) {
-            mTimestampTextView.setTextColor(mListItemReadColor);
-            mTimestampTextView.setTypeface(mListItemReadTypeface, typefaceStyle);
-            mTimestampTextView.setText(resources.getString(
-                    R.string.conversation_list_item_view_draft_message));
-         } else {
-            mTimestampTextView.setTextColor(mListItemReadColor);
-            mTimestampTextView.setTypeface(mListItemReadTypeface, typefaceStyle);
-            final String formattedTimestamp = mData.getFormattedTimestamp();
-            if (mData.getIsSendRequested()) {
-                mTimestampTextView.setText(R.string.message_status_sending);
-            } else {
-                mTimestampTextView.setText(formattedTimestamp);
-            }
-        }
-
-        final boolean isSelected = mHostInterface.isConversationSelected(mData.getConversationId());
-        setSelected(isSelected);
-        Uri iconUri = null;
-        int contactIconVisibility = GONE;
-        int checkmarkVisiblity = GONE;
-        int failStatusVisiblity = GONE;
-        if (isSelected) {
-            checkmarkVisiblity = VISIBLE;
-        } else {
-            contactIconVisibility = VISIBLE;
-            // Only show the fail icon if it is not a group conversation.
-            // And also require that we be the default sms app.
-            if (mData.getIsFailedStatus() && !mData.getIsGroup() && isDefaultSmsApp) {
-                failStatusVisiblity = VISIBLE;
-            }
-        }
-        if (mData.getIcon() != null) {
-            iconUri = Uri.parse(mData.getIcon());
-        }
-        mContactIconView.setImageResourceUri(iconUri, mData.getParticipantContactId(),
-                mData.getParticipantLookupKey(), mData.getOtherParticipantNormalizedDestination());
-        mContactIconView.setVisibility(contactIconVisibility);
-        mContactIconView.setOnLongClickListener(this);
-        mContactIconView.setClickable(!mHostInterface.isSelectionMode());
-        mContactIconView.setLongClickable(!mHostInterface.isSelectionMode());
-
-        mContactCheckmarkView.setVisibility(checkmarkVisiblity);
-        mFailedStatusIconView.setVisibility(failStatusVisiblity);
-
-        final Uri previewUri = mData.getShowDraft() ?
-                mData.getDraftPreviewUri() : mData.getPreviewUri();
-        final String previewContentType = mData.getShowDraft() ?
-                mData.getDraftPreviewContentType() : mData.getPreviewContentType();
-        OnClickListener previewClickListener = null;
-        Uri previewImageUri = null;
-        int previewImageVisibility = GONE;
-        int audioPreviewVisiblity = GONE;
-        if (previewUri != null && !TextUtils.isEmpty(previewContentType)) {
-            if (ContentType.isAudioType(previewContentType)) {
-                boolean incoming = !(mData.getShowDraft() || mData.getIsMessageTypeOutgoing());
-                mAudioAttachmentView.bind(previewUri, incoming, false);
-                audioPreviewVisiblity = VISIBLE;
-            } else if (ContentType.isVideoType(previewContentType)) {
-                previewImageUri = UriUtil.getUriForResourceId(
-                        getContext(), R.drawable.ic_preview_play);
-                previewClickListener = fullScreenPreviewClickListener;
-                previewImageVisibility = VISIBLE;
-            } else if (ContentType.isImageType(previewContentType)) {
-                previewImageUri = previewUri;
-                previewClickListener = fullScreenPreviewClickListener;
-                previewImageVisibility = VISIBLE;
-            }
-        }
-
-        final int imageSize = resources.getDimensionPixelSize(
-                R.dimen.conversation_list_image_preview_size);
-        mImagePreviewView.setImageResourceId(
-                new UriImageRequestDescriptor(previewImageUri, imageSize, imageSize,
-                        true /* allowCompression */, false /* isStatic */, false /*cropToCircle*/,
-                        ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                        ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */));
-        mImagePreviewView.setOnLongClickListener(this);
-        mImagePreviewView.setVisibility(previewImageVisibility);
-        mImagePreviewView.setOnClickListener(previewClickListener);
-        mAudioAttachmentView.setOnLongClickListener(this);
-        mAudioAttachmentView.setVisibility(audioPreviewVisiblity);
-
-        final int notificationBellVisiblity = mData.getNotificationEnabled() ? GONE : VISIBLE;
-        mNotificationBellView.setVisibility(notificationBellVisiblity);
-    }
-
-    public boolean isSwipeAnimatable() {
-        return mHostInterface.isSwipeAnimatable();
-    }
-
-    @VisibleForAnimation
-    public float getSwipeTranslationX() {
-        return mSwipeableContainer.getTranslationX();
-    }
-
-    @VisibleForAnimation
-    public void setSwipeTranslationX(final float translationX) {
-        mSwipeableContainer.setTranslationX(translationX);
-        if (translationX == 0) {
-            mCrossSwipeBackground.setVisibility(View.GONE);
-            mCrossSwipeArchiveLeftImageView.setVisibility(GONE);
-            mCrossSwipeArchiveRightImageView.setVisibility(GONE);
-
-            mSwipeableContainer.setBackgroundColor(Color.TRANSPARENT);
-        } else {
-            mCrossSwipeBackground.setVisibility(View.VISIBLE);
-            if (translationX > 0) {
-                mCrossSwipeArchiveLeftImageView.setVisibility(VISIBLE);
-                mCrossSwipeArchiveRightImageView.setVisibility(GONE);
-            } else {
-                mCrossSwipeArchiveLeftImageView.setVisibility(GONE);
-                mCrossSwipeArchiveRightImageView.setVisibility(VISIBLE);
-            }
-            mSwipeableContainer.setBackgroundResource(R.drawable.swipe_shadow_drag);
-        }
-    }
-
-    public void onSwipeComplete() {
-        final String conversationId = mData.getConversationId();
-        UpdateConversationArchiveStatusAction.archiveConversation(conversationId);
-
-        final Runnable undoRunnable = new Runnable() {
-            @Override
-            public void run() {
-                UpdateConversationArchiveStatusAction.unarchiveConversation(conversationId);
-            }
-        };
-        final String message = getResources().getString(R.string.archived_toast_message, 1);
-        UiUtils.showSnackBar(getContext(), getRootView(), message, undoRunnable,
-                SnackBar.Action.SNACK_BAR_UNDO,
-                mHostInterface.getSnackBarInteractions());
-    }
-
-    private void setShortAndLongClickable(final boolean clickable) {
-        setClickable(clickable);
-        setLongClickable(clickable);
-    }
-
-    private void resetAnimatingState() {
-        mAnimatingCount = 0;
-        setShortAndLongClickable(true);
-        setSwipeTranslationX(0);
-    }
-
-    /**
-     * Notifies this view that it is undergoing animation. This view should disable its click
-     * targets.
-     *
-     * The animating counter is used to reset the swipe controller when the counter becomes 0. A
-     * positive counter also makes the view not clickable.
-     */
-    public final void setAnimating(final boolean animating) {
-        final int oldAnimatingCount = mAnimatingCount;
-        if (animating) {
-            mAnimatingCount++;
-        } else {
-            mAnimatingCount--;
-            if (mAnimatingCount < 0) {
-                mAnimatingCount = 0;
-            }
-        }
-
-        if (mAnimatingCount == 0) {
-            // New count is 0. All animations ended.
-            setShortAndLongClickable(true);
-        } else if (oldAnimatingCount == 0) {
-            // New count is > 0. Waiting for some animations to end.
-            setShortAndLongClickable(false);
-        }
-    }
-
-    public boolean isAnimating() {
-        return mAnimatingCount > 0;
-    }
-
-    /**
-     * {@inheritDoc} from OnClickListener
-     */
-    @Override
-    public void onClick(final View v) {
-        processClick(v, false);
-    }
-
-    /**
-     * {@inheritDoc} from OnLongClickListener
-     */
-    @Override
-    public boolean onLongClick(final View v) {
-        return processClick(v, true);
-    }
-
-    private boolean processClick(final View v, final boolean isLongClick) {
-        Assert.isTrue(v == mSwipeableContainer || v == mContactIconView || v == mImagePreviewView);
-        Assert.notNull(mData.getName());
-
-        if (mHostInterface != null) {
-            mHostInterface.onConversationClicked(mData, isLongClick, this);
-            return true;
-        }
-        return false;
-    }
-
-    public View getSwipeableContent() {
-        return mSwipeableContent;
-    }
-
-    public View getContactIconView() {
-        return mContactIconView;
-    }
-
-    private String getSnippetText() {
-        String snippetText = mData.getShowDraft() ?
-                mData.getDraftSnippetText() : mData.getSnippetText();
-        final String previewContentType = mData.getShowDraft() ?
-                mData.getDraftPreviewContentType() : mData.getPreviewContentType();
-        if (TextUtils.isEmpty(snippetText)) {
-            Resources resources = getResources();
-            // Use the attachment type as a snippet so the preview doesn't look odd
-            if (ContentType.isAudioType(previewContentType)) {
-                snippetText = resources.getString(R.string.conversation_list_snippet_audio_clip);
-            } else if (ContentType.isImageType(previewContentType)) {
-                snippetText = resources.getString(R.string.conversation_list_snippet_picture);
-            } else if (ContentType.isVideoType(previewContentType)) {
-                snippetText = resources.getString(R.string.conversation_list_snippet_video);
-            } else if (ContentType.isVCardType(previewContentType)) {
-                snippetText = resources.getString(R.string.conversation_list_snippet_vcard);
-            }
-        }
-        return snippetText;
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/ConversationListSwipeHelper.java b/src/com/android/messaging/ui/conversationlist/ConversationListSwipeHelper.java
deleted file mode 100644
index e5859a6..0000000
--- a/src/com/android/messaging/ui/conversationlist/ConversationListSwipeHelper.java
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ObjectAnimator;
-import android.animation.TimeInterpolator;
-import android.content.Context;
-import android.content.res.Resources;
-import androidx.core.view.ViewCompat;
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener;
-import android.view.MotionEvent;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.ViewConfiguration;
-
-import com.android.messaging.R;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.UiUtils;
-
-/**
- * Animation and touch helper class for Conversation List swipe.
- */
-public class ConversationListSwipeHelper implements OnItemTouchListener {
-    private static final int UNIT_SECONDS = 1000;
-    private static final boolean ANIMATING = true;
-
-    private static final float ERROR_FACTOR_MULTIPLIER = 1.2f;
-    private static final float PERCENTAGE_OF_WIDTH_TO_DISMISS = 0.4f;
-    private static final float FLING_PERCENTAGE_OF_WIDTH_TO_DISMISS = 0.05f;
-
-    private static final int SWIPE_DIRECTION_NONE = 0;
-    private static final int SWIPE_DIRECTION_LEFT = 1;
-    private static final int SWIPE_DIRECTION_RIGHT = 2;
-
-    private final RecyclerView mRecyclerView;
-    private final long mDefaultRestoreAnimationDuration;
-    private final long mDefaultDismissAnimationDuration;
-    private final long mMaxTranslationAnimationDuration;
-    private final int mTouchSlop;
-    private final int mMinimumFlingVelocity;
-    private final int mMaximumFlingVelocity;
-
-    /* Valid throughout a single gesture. */
-    private VelocityTracker mVelocityTracker;
-    private float mInitialX;
-    private float mInitialY;
-    private boolean mIsSwiping;
-    private ConversationListItemView mListItemView;
-
-    public ConversationListSwipeHelper(final RecyclerView recyclerView) {
-        mRecyclerView = recyclerView;
-
-        final Context context = mRecyclerView.getContext();
-        final Resources res = context.getResources();
-        mDefaultRestoreAnimationDuration = res.getInteger(R.integer.swipe_duration_ms);
-        mDefaultDismissAnimationDuration = res.getInteger(R.integer.swipe_duration_ms);
-        mMaxTranslationAnimationDuration = res.getInteger(R.integer.swipe_duration_ms);
-
-        final ViewConfiguration viewConfiguration = ViewConfiguration.get(context);
-        mTouchSlop = viewConfiguration.getScaledPagingTouchSlop();
-        mMaximumFlingVelocity = Math.min(
-                viewConfiguration.getScaledMaximumFlingVelocity(),
-                res.getInteger(R.integer.swipe_max_fling_velocity_px_per_s));
-        mMinimumFlingVelocity = viewConfiguration.getScaledMinimumFlingVelocity();
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(final RecyclerView recyclerView, final MotionEvent event) {
-        if (event.getPointerCount() > 1) {
-            // Ignore subsequent pointers.
-            return false;
-        }
-
-        // We are not yet tracking a swipe gesture. Begin detection by spying on
-        // touch events bubbling down to our children.
-        final int action = event.getActionMasked();
-        switch (action) {
-            case MotionEvent.ACTION_DOWN:
-                if (!hasGestureSwipeTarget()) {
-                    onGestureStart();
-
-                    mVelocityTracker.addMovement(event);
-                    mInitialX = event.getX();
-                    mInitialY = event.getY();
-
-                    final View viewAtPoint = mRecyclerView.findChildViewUnder(mInitialX, mInitialY);
-                    final ConversationListItemView child = (ConversationListItemView) viewAtPoint;
-                    if (viewAtPoint instanceof ConversationListItemView &&
-                            child != null && child.isSwipeAnimatable()) {
-                        // Begin detecting swipe on the target for the rest of the gesture.
-                        mListItemView = child;
-                        if (mListItemView.isAnimating()) {
-                            mListItemView = null;
-                        }
-                    } else {
-                        mListItemView = null;
-                    }
-                }
-                break;
-            case MotionEvent.ACTION_MOVE:
-                if (hasValidGestureSwipeTarget()) {
-                    mVelocityTracker.addMovement(event);
-
-                    final int historicalCount = event.getHistorySize();
-                    // First consume the historical events, then consume the current ones.
-                    for (int i = 0; i < historicalCount + 1; i++) {
-                        float currX;
-                        float currY;
-                        if (i < historicalCount) {
-                            currX = event.getHistoricalX(i);
-                            currY = event.getHistoricalY(i);
-                        } else {
-                            currX = event.getX();
-                            currY = event.getY();
-                        }
-                        final float deltaX = currX - mInitialX;
-                        final float deltaY = currY - mInitialY;
-                        final float absDeltaX = Math.abs(deltaX);
-                        final float absDeltaY = Math.abs(deltaY);
-
-                        if (!mIsSwiping && absDeltaY > mTouchSlop
-                                && absDeltaY > (ERROR_FACTOR_MULTIPLIER * absDeltaX)) {
-                            // Stop detecting swipe for the remainder of this gesture.
-                            onGestureEnd();
-                            return false;
-                        }
-
-                        if (absDeltaX > mTouchSlop) {
-                            // Swipe detected. Return true so we can handle the gesture in
-                            // onTouchEvent.
-                            mIsSwiping = true;
-
-                            // We don't want to suddenly jump the slop distance.
-                            mInitialX = event.getX();
-                            mInitialY = event.getY();
-
-                            onSwipeGestureStart(mListItemView);
-                            return true;
-                        }
-                    }
-                }
-                break;
-            case MotionEvent.ACTION_UP:
-            case MotionEvent.ACTION_CANCEL:
-                if (hasGestureSwipeTarget()) {
-                    onGestureEnd();
-                }
-                break;
-        }
-
-        // Start intercepting touch events from children if we detect a swipe.
-        return mIsSwiping;
-    }
-
-    @Override
-    public void onTouchEvent(final RecyclerView recyclerView, final MotionEvent event) {
-        // We should only be here if we intercepted the touch due to swipe.
-        Assert.isTrue(mIsSwiping);
-
-        // We are now tracking a swipe gesture.
-        mVelocityTracker.addMovement(event);
-
-        final int action = event.getActionMasked();
-        switch (action) {
-            case MotionEvent.ACTION_OUTSIDE:
-            case MotionEvent.ACTION_MOVE:
-                if (hasValidGestureSwipeTarget()) {
-                    mListItemView.setSwipeTranslationX(event.getX() - mInitialX);
-                }
-                break;
-            case MotionEvent.ACTION_UP:
-                if (hasValidGestureSwipeTarget()) {
-                    final float maxVelocity = mMaximumFlingVelocity;
-                    mVelocityTracker.computeCurrentVelocity(UNIT_SECONDS, maxVelocity);
-                    final float velocityX = getLastComputedXVelocity();
-
-                    final float translationX = mListItemView.getSwipeTranslationX();
-
-                    int swipeDirection = SWIPE_DIRECTION_NONE;
-                    if (translationX != 0) {
-                        swipeDirection =
-                                translationX > 0 ? SWIPE_DIRECTION_RIGHT : SWIPE_DIRECTION_LEFT;
-                    } else if (velocityX != 0) {
-                        swipeDirection =
-                                velocityX > 0 ? SWIPE_DIRECTION_RIGHT : SWIPE_DIRECTION_LEFT;
-                    }
-
-                    final boolean fastEnough = isTargetSwipedFastEnough();
-                    final boolean farEnough = isTargetSwipedFarEnough();
-
-                    final boolean shouldDismiss =  (fastEnough || farEnough);
-
-                    if (shouldDismiss) {
-                        if (fastEnough) {
-                            animateDismiss(mListItemView, velocityX);
-                        } else {
-                            animateDismiss(mListItemView, swipeDirection);
-                        }
-                    } else {
-                        animateRestore(mListItemView, velocityX);
-                    }
-
-                    onSwipeGestureEnd(mListItemView,
-                            shouldDismiss ? swipeDirection : SWIPE_DIRECTION_NONE);
-                } else {
-                    onGestureEnd();
-                }
-                break;
-            case MotionEvent.ACTION_CANCEL:
-                if (hasValidGestureSwipeTarget()) {
-                    animateRestore(mListItemView, 0f);
-                    onSwipeGestureEnd(mListItemView, SWIPE_DIRECTION_NONE);
-                } else {
-                    onGestureEnd();
-                }
-                break;
-        }
-    }
-
-
-    @Override
-    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
-    }
-
-    /**
-     * We have started to intercept a series of touch events.
-     */
-    private void onGestureStart() {
-        mIsSwiping = false;
-        // Work around bug in RecyclerView that sends two identical ACTION_DOWN
-        // events to #onInterceptTouchEvent.
-        if (mVelocityTracker == null) {
-            mVelocityTracker = VelocityTracker.obtain();
-        }
-        mVelocityTracker.clear();
-    }
-
-    /**
-     * The series of touch events has been detected as a swipe.
-     *
-     * Now that the gesture is a swipe, we will begin translating the view of the
-     * given viewHolder.
-     */
-    private void onSwipeGestureStart(final ConversationListItemView itemView) {
-        mRecyclerView.getParent().requestDisallowInterceptTouchEvent(true);
-        setHardwareAnimatingLayerType(itemView, ANIMATING);
-        itemView.setAnimating(true);
-    }
-
-    /**
-     * The current swipe gesture is complete.
-     */
-    private void onSwipeGestureEnd(final ConversationListItemView itemView,
-            final int swipeDirection) {
-        if (swipeDirection == SWIPE_DIRECTION_RIGHT || swipeDirection == SWIPE_DIRECTION_LEFT) {
-            itemView.onSwipeComplete();
-        }
-
-        // Balances out onSwipeGestureStart.
-        itemView.setAnimating(false);
-
-        onGestureEnd();
-    }
-
-    /**
-     * The series of touch events has ended in an {@link MotionEvent#ACTION_UP}
-     * or {@link MotionEvent#ACTION_CANCEL}.
-     */
-    private void onGestureEnd() {
-        mVelocityTracker.recycle();
-        mVelocityTracker = null;
-        mIsSwiping = false;
-        mListItemView = null;
-    }
-
-    /**
-     * A swipe animation has started.
-     */
-    private void onSwipeAnimationStart(final ConversationListItemView itemView) {
-        // Disallow interactions.
-        itemView.setAnimating(true);
-        ViewCompat.setHasTransientState(itemView, true);
-        setHardwareAnimatingLayerType(itemView, ANIMATING);
-    }
-
-    /**
-     * The swipe animation has ended.
-     */
-    private void onSwipeAnimationEnd(final ConversationListItemView itemView) {
-        // Restore interactions.
-        itemView.setAnimating(false);
-        ViewCompat.setHasTransientState(itemView, false);
-        setHardwareAnimatingLayerType(itemView, !ANIMATING);
-    }
-
-    /**
-     * Animate the dismissal of the given item. The given velocityX is taken into consideration for
-     * the animation duration. Whether the item is dismissed to the left or right is dependent on
-     * the given velocityX.
-     */
-    private void animateDismiss(final ConversationListItemView itemView, final float velocityX) {
-        Assert.isTrue(velocityX != 0);
-        final int direction = velocityX > 0 ? SWIPE_DIRECTION_RIGHT : SWIPE_DIRECTION_LEFT;
-        animateDismiss(itemView, direction, velocityX);
-    }
-
-    /**
-     * Animate the dismissal of the given item. The velocityX is assumed to be 0.
-     */
-    private void animateDismiss(final ConversationListItemView itemView, final int swipeDirection) {
-        animateDismiss(itemView, swipeDirection, 0f);
-    }
-
-    /**
-     * Animate the dismissal of the given item.
-     */
-    private void animateDismiss(final ConversationListItemView itemView,
-            final int swipeDirection, final float velocityX) {
-        Assert.isTrue(swipeDirection != SWIPE_DIRECTION_NONE);
-
-        onSwipeAnimationStart(itemView);
-
-        final float animateTo = (swipeDirection == SWIPE_DIRECTION_RIGHT) ?
-                mRecyclerView.getWidth() : -mRecyclerView.getWidth();
-        final long duration;
-        if (velocityX != 0) {
-            final float deltaX = animateTo - itemView.getSwipeTranslationX();
-            duration = calculateTranslationDuration(deltaX, velocityX);
-        } else {
-            duration = mDefaultDismissAnimationDuration;
-        }
-
-        final ObjectAnimator animator = getSwipeTranslationXAnimator(
-                itemView, animateTo, duration, UiUtils.DEFAULT_INTERPOLATOR);
-        animator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(final Animator animation) {
-                onSwipeAnimationEnd(itemView);
-            }
-        });
-        animator.start();
-    }
-
-    /**
-     * Animate the bounce back of the given item.
-     */
-    private void animateRestore(final ConversationListItemView itemView,
-            final float velocityX) {
-        onSwipeAnimationStart(itemView);
-
-        final float translationX = itemView.getSwipeTranslationX();
-        final long duration;
-        if (velocityX != 0 // Has velocity.
-                && velocityX > 0 != translationX > 0) { // Right direction.
-            duration = calculateTranslationDuration(translationX, velocityX);
-        } else {
-            duration = mDefaultRestoreAnimationDuration;
-        }
-        final ObjectAnimator animator = getSwipeTranslationXAnimator(
-                itemView, 0f, duration, UiUtils.DEFAULT_INTERPOLATOR);
-        animator.addListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(final Animator animation) {
-                       onSwipeAnimationEnd(itemView);
-            }
-        });
-        animator.start();
-    }
-
-    /**
-     * Create and start an animator that animates the given view's translationX
-     * from its current value to the value given by animateTo.
-     */
-    private ObjectAnimator getSwipeTranslationXAnimator(final ConversationListItemView itemView,
-            final float animateTo, final long duration, final TimeInterpolator interpolator) {
-        final ObjectAnimator animator =
-                ObjectAnimator.ofFloat(itemView, "swipeTranslationX", animateTo);
-        animator.setDuration(duration);
-        animator.setInterpolator(interpolator);
-        return animator;
-    }
-
-    /**
-     * Determine if the swipe has enough velocity to be dismissed.
-     */
-    private boolean isTargetSwipedFastEnough() {
-        final float velocityX = getLastComputedXVelocity();
-        final float velocityY = mVelocityTracker.getYVelocity();
-        final float minVelocity = mMinimumFlingVelocity;
-        final float translationX = mListItemView.getSwipeTranslationX();
-        final float width = mListItemView.getWidth();
-        return (Math.abs(velocityX) > minVelocity) // Fast enough.
-                && (Math.abs(velocityX) > Math.abs(velocityY)) // Not unintentional.
-                && (velocityX > 0) == (translationX > 0) // Right direction.
-                && Math.abs(translationX) >
-                    FLING_PERCENTAGE_OF_WIDTH_TO_DISMISS * width; // Enough movement.
-  }
-
-    /**
-     * Only used during a swipe gesture. Determine if the swipe has enough distance to be
-     * dismissed.
-     */
-    private boolean isTargetSwipedFarEnough() {
-        final float velocityX = getLastComputedXVelocity();
-
-        final float translationX = mListItemView.getSwipeTranslationX();
-        final float width = mListItemView.getWidth();
-
-        return (velocityX >= 0) == (translationX > 0) // Right direction.
-                && Math.abs(translationX) >
-                    PERCENTAGE_OF_WIDTH_TO_DISMISS * width; // Enough movement.
-  }
-
-    private long calculateTranslationDuration(final float deltaPosition, final float velocity) {
-        Assert.isTrue(velocity != 0);
-        final float durationInSeconds = Math.abs(deltaPosition / velocity);
-        return Math.min((int) (durationInSeconds * UNIT_SECONDS), mMaxTranslationAnimationDuration);
-    }
-
-    private boolean hasGestureSwipeTarget() {
-        return mListItemView != null;
-    }
-
-    private boolean hasValidGestureSwipeTarget() {
-        return hasGestureSwipeTarget() && mListItemView.getParent() == mRecyclerView;
-    }
-
-    /**
-     * Enable a hardware layer for the it view and build that layer.
-     */
-    private void setHardwareAnimatingLayerType(final ConversationListItemView itemView,
-            final boolean animating) {
-        if (animating) {
-            itemView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
-            if (itemView.getWindowToken() != null) {
-                itemView.buildLayer();
-            }
-        } else {
-            itemView.setLayerType(View.LAYER_TYPE_NONE, null);
-        }
-    }
-
-    private float getLastComputedXVelocity() {
-        return mVelocityTracker.getXVelocity();
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/conversationlist/ForwardMessageActivity.java b/src/com/android/messaging/ui/conversationlist/ForwardMessageActivity.java
deleted file mode 100644
index 61e3640..0000000
--- a/src/com/android/messaging/ui/conversationlist/ForwardMessageActivity.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.app.Fragment;
-import android.os.Bundle;
-
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.ui.BaseBugleActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.conversationlist.ConversationListFragment.ConversationListFragmentHost;
-import com.android.messaging.util.Assert;
-
-/**
- * An activity that lets the user forward a SMS/MMS message by picking from a conversation in the
- * conversation list.
- */
-public class ForwardMessageActivity extends BaseBugleActivity
-    implements ConversationListFragmentHost {
-    private MessageData mDraftMessage;
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        final ConversationListFragment fragment =
-                ConversationListFragment.createForwardMessageConversationListFragment();
-        getFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit();
-        mDraftMessage = getIntent().getParcelableExtra(UIIntents.UI_INTENT_EXTRA_DRAFT_DATA);
-    }
-
-    @Override
-    public void onAttachFragment(final Fragment fragment) {
-        Assert.isTrue(fragment instanceof ConversationListFragment);
-        final ConversationListFragment clf = (ConversationListFragment) fragment;
-        clf.setHost(this);
-    }
-
-    @Override
-    public void onConversationClick(final ConversationListData listData,
-                                    final ConversationListItemData conversationListItemData,
-            final boolean isLongClick, final ConversationListItemView converastionView) {
-        UIIntents.get().launchConversationActivity(
-                this, conversationListItemData.getConversationId(), mDraftMessage);
-    }
-
-    @Override
-    public void onCreateConversationClick() {
-        UIIntents.get().launchCreateNewConversationActivity(this, mDraftMessage);
-    }
-
-    @Override
-    public boolean isConversationSelected(final String conversationId) {
-        return false;
-    }
-
-    @Override
-    public boolean isSwipeAnimatable() {
-        return false;
-    }
-
-    @Override
-    public boolean isSelectionMode() {
-        return false;
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/MultiSelectActionModeCallback.java b/src/com/android/messaging/ui/conversationlist/MultiSelectActionModeCallback.java
deleted file mode 100644
index 64d1436..0000000
--- a/src/com/android/messaging/ui/conversationlist/MultiSelectActionModeCallback.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import androidx.collection.ArrayMap;
-import android.text.TextUtils;
-import android.view.ActionMode;
-import android.view.ActionMode.Callback;
-import android.view.Menu;
-import android.view.MenuItem;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.util.Assert;
-
-import java.util.Collection;
-import java.util.HashSet;
-
-public class MultiSelectActionModeCallback implements Callback {
-    private HashSet<String> mBlockedSet;
-
-    public interface Listener {
-        void onActionBarDelete(Collection<SelectedConversation> conversations);
-        void onActionBarArchive(Iterable<SelectedConversation> conversations,
-                boolean isToArchive);
-        void onActionBarNotification(Iterable<SelectedConversation> conversations,
-                boolean isNotificationOn);
-        void onActionBarAddContact(final SelectedConversation conversation);
-        void onActionBarBlock(final SelectedConversation conversation);
-        void onActionBarHome();
-    }
-
-    static class SelectedConversation {
-        public final String conversationId;
-        public final long timestamp;
-        public final String icon;
-        public final String otherParticipantNormalizedDestination;
-        public final CharSequence participantLookupKey;
-        public final boolean isGroup;
-        public final boolean isArchived;
-        public final boolean notificationEnabled;
-        public SelectedConversation(ConversationListItemData data) {
-            conversationId = data.getConversationId();
-            timestamp = data.getTimestamp();
-            icon = data.getIcon();
-            otherParticipantNormalizedDestination = data.getOtherParticipantNormalizedDestination();
-            participantLookupKey = data.getParticipantLookupKey();
-            isGroup = data.getIsGroup();
-            isArchived = data.getIsArchived();
-            notificationEnabled = data.getNotificationEnabled();
-        }
-    }
-
-    private final ArrayMap<String, SelectedConversation> mSelectedConversations;
-
-    private Listener mListener;
-    private MenuItem mArchiveMenuItem;
-    private MenuItem mUnarchiveMenuItem;
-    private MenuItem mAddContactMenuItem;
-    private MenuItem mBlockMenuItem;
-    private MenuItem mNotificationOnMenuItem;
-    private MenuItem mNotificationOffMenuItem;
-    private boolean mHasInflated;
-
-    public MultiSelectActionModeCallback(final Listener listener) {
-        mListener = listener;
-        mSelectedConversations = new ArrayMap<>();
-
-    }
-
-    @Override
-    public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
-        actionMode.getMenuInflater().inflate(R.menu.conversation_list_fragment_select_menu, menu);
-        mArchiveMenuItem = menu.findItem(R.id.action_archive);
-        mUnarchiveMenuItem = menu.findItem(R.id.action_unarchive);
-        mAddContactMenuItem = menu.findItem(R.id.action_add_contact);
-        mBlockMenuItem = menu.findItem(R.id.action_block);
-        mNotificationOffMenuItem = menu.findItem(R.id.action_notification_off);
-        mNotificationOnMenuItem = menu.findItem(R.id.action_notification_on);
-        mHasInflated = true;
-        updateActionIconsVisiblity();
-        return true;
-    }
-
-    @Override
-    public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
-        return true;
-    }
-
-    @Override
-    public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
-        switch(menuItem.getItemId()) {
-            case R.id.action_delete:
-                mListener.onActionBarDelete(mSelectedConversations.values());
-                return true;
-            case R.id.action_archive:
-                mListener.onActionBarArchive(mSelectedConversations.values(), true);
-                return true;
-            case R.id.action_unarchive:
-                mListener.onActionBarArchive(mSelectedConversations.values(), false);
-                return true;
-            case R.id.action_notification_off:
-                mListener.onActionBarNotification(mSelectedConversations.values(), false);
-                return true;
-            case R.id.action_notification_on:
-                mListener.onActionBarNotification(mSelectedConversations.values(), true);
-                return true;
-            case R.id.action_add_contact:
-                Assert.isTrue(mSelectedConversations.size() == 1);
-                mListener.onActionBarAddContact(mSelectedConversations.valueAt(0));
-                return true;
-            case R.id.action_block:
-                Assert.isTrue(mSelectedConversations.size() == 1);
-                mListener.onActionBarBlock(mSelectedConversations.valueAt(0));
-                return true;
-            case android.R.id.home:
-                mListener.onActionBarHome();
-                return true;
-            default:
-                return false;
-        }
-    }
-
-    @Override
-    public void onDestroyActionMode(ActionMode actionMode) {
-        mListener = null;
-        mSelectedConversations.clear();
-        mHasInflated = false;
-    }
-
-    public void toggleSelect(final ConversationListData listData,
-                             final ConversationListItemData conversationListItemData) {
-        Assert.notNull(conversationListItemData);
-        mBlockedSet = listData.getBlockedParticipants();
-        final String id = conversationListItemData.getConversationId();
-        if (mSelectedConversations.containsKey(id)) {
-            mSelectedConversations.remove(id);
-        } else {
-            mSelectedConversations.put(id, new SelectedConversation(conversationListItemData));
-        }
-
-        if (mSelectedConversations.isEmpty()) {
-            mListener.onActionBarHome();
-        } else {
-            updateActionIconsVisiblity();
-        }
-    }
-
-    public boolean isSelected(final String selectedId) {
-        return mSelectedConversations.containsKey(selectedId);
-    }
-
-    private void updateActionIconsVisiblity() {
-        if (!mHasInflated) {
-            return;
-        }
-
-        if (mSelectedConversations.size() == 1) {
-            final SelectedConversation conversation = mSelectedConversations.valueAt(0);
-            // The look up key is a key given to us by contacts app, so if we have a look up key,
-            // we know that the participant is already in contacts.
-            final boolean isInContacts = !TextUtils.isEmpty(conversation.participantLookupKey);
-            mAddContactMenuItem.setVisible(!conversation.isGroup && !isInContacts);
-            // ParticipantNormalizedDestination is always null for group conversations.
-            final String otherParticipant = conversation.otherParticipantNormalizedDestination;
-            mBlockMenuItem.setVisible(otherParticipant != null
-                    && !mBlockedSet.contains(otherParticipant));
-        } else {
-            mBlockMenuItem.setVisible(false);
-            mAddContactMenuItem.setVisible(false);
-        }
-
-        boolean hasCurrentlyArchived = false;
-        boolean hasCurrentlyUnarchived = false;
-        boolean hasCurrentlyOnNotification = false;
-        boolean hasCurrentlyOffNotification = false;
-        final Iterable<SelectedConversation> conversations = mSelectedConversations.values();
-        for (final SelectedConversation conversation : conversations) {
-            if (conversation.notificationEnabled) {
-                hasCurrentlyOnNotification = true;
-            } else {
-                hasCurrentlyOffNotification = true;
-            }
-
-            if (conversation.isArchived) {
-                hasCurrentlyArchived = true;
-            } else {
-                hasCurrentlyUnarchived = true;
-            }
-
-            // If we found at least one of each example we don't need to keep looping.
-            if (hasCurrentlyOffNotification && hasCurrentlyOnNotification &&
-                    hasCurrentlyArchived && hasCurrentlyUnarchived) {
-                break;
-            }
-        }
-        // If we have notification off conversations we show on button, if we have notification on
-        // conversation we show off button. We can show both if we have a mixture.
-        mNotificationOffMenuItem.setVisible(hasCurrentlyOnNotification);
-        mNotificationOnMenuItem.setVisible(hasCurrentlyOffNotification);
-
-        mArchiveMenuItem.setVisible(hasCurrentlyUnarchived);
-        mUnarchiveMenuItem.setVisible(hasCurrentlyArchived);
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/ShareIntentActivity.java b/src/com/android/messaging/ui/conversationlist/ShareIntentActivity.java
deleted file mode 100644
index 9ac6e6b..0000000
--- a/src/com/android/messaging/ui/conversationlist/ShareIntentActivity.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.app.Fragment;
-import android.content.ContentResolver;
-import android.content.Intent;
-import android.media.MediaMetadataRetriever;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.TextUtils;
-
-import androidx.collection.ArrayMap;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.PendingAttachmentData;
-import com.android.messaging.ui.BaseBugleActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.MediaMetadataRetrieverWrapper;
-import com.android.messaging.util.FileUtil;
-import com.android.messaging.util.UriUtil;
-
-import java.io.BufferedReader;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Map;
-
-public class ShareIntentActivity extends BaseBugleActivity implements
-        ShareIntentFragment.HostInterface {
-
-    private MessageData mDraftMessage;
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        final Intent intent = getIntent();
-        if (Intent.ACTION_SEND.equals(intent.getAction()) &&
-                (!TextUtils.isEmpty(intent.getStringExtra("address")) ||
-                !TextUtils.isEmpty(intent.getStringExtra(Intent.EXTRA_EMAIL)))) {
-            // This is really more like a SENDTO intent because a destination is supplied.
-            // It's coming through the SEND intent because that's the intent that is used
-            // when invoking the chooser with Intent.createChooser().
-            final Intent convIntent = UIIntents.get().getLaunchConversationActivityIntent(this);
-            // Copy the important items from the original intent to the new intent.
-            convIntent.putExtras(intent);
-            convIntent.setAction(Intent.ACTION_SENDTO);
-            convIntent.setDataAndType(intent.getData(), intent.getType());
-            // We have to fire off the intent and finish before trying to show the fragment,
-            // otherwise we get some flashing.
-            startActivity(convIntent);
-            finish();
-            return;
-        }
-        new ShareIntentFragment().show(getFragmentManager(), "ShareIntentFragment");
-    }
-
-    @Override
-    public void onAttachFragment(final Fragment fragment) {
-        final Intent intent = getIntent();
-        final String action = intent.getAction();
-
-        String sharedSubject = intent.getStringExtra(Intent.EXTRA_SUBJECT);
-        if (sharedSubject == null) {
-            sharedSubject = intent.getStringExtra(Intent.EXTRA_TITLE);
-        }
-
-        if (Intent.ACTION_SEND.equals(action)) {
-            final Uri contentUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
-            if (UriUtil.isFileUri(contentUri)) {
-                LogUtil.i(
-                    LogUtil.BUGLE_TAG,
-                    "Ignoring attachment from file URI which are no longer supported.");
-                return;
-            }
-            final String contentType = extractContentType(contentUri, intent.getType());
-            if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.DEBUG)) {
-                LogUtil.d(LogUtil.BUGLE_TAG, String.format(
-                        "onAttachFragment: contentUri=%s, intent.getType()=%s, inferredType=%s",
-                        contentUri, intent.getType(), contentType));
-            }
-            if (ContentType.TEXT_PLAIN.equals(contentType)) {
-                String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
-                if (sharedText == null) {
-                    // Try to get text string from content uri.
-                    sharedText = getTextStringFromContentUri(contentUri);
-                }
-                if (sharedText != null) {
-                    mDraftMessage = MessageData.createSharedMessage(sharedText, sharedSubject);
-                } else {
-                    mDraftMessage = null;
-                }
-            } else if (PendingAttachmentData.isSupportedMediaType(contentType)) {
-                if (contentUri != null) {
-                    mDraftMessage = MessageData.createSharedMessage(null, sharedSubject);
-                    addSharedPartToDraft(contentType, contentUri);
-                } else {
-                    mDraftMessage = null;
-                }
-            } else {
-                // Unsupported content type.
-                LogUtil.e(LogUtil.BUGLE_TAG, "Unsupported shared content type for " + contentUri
-                        + ": " + contentType + " (" + intent.getType() + ")");
-                mDraftMessage = null;
-            }
-        } else if (Intent.ACTION_SEND_MULTIPLE.equals(action)) {
-            final String contentType = intent.getType();
-            // Handle sharing multiple contents.
-            final ArrayList<Uri> uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
-            if (uris != null && !uris.isEmpty()) {
-                ArrayMap<Uri, String> uriMap = new ArrayMap<Uri, String>();
-                StringBuffer strBuffer = new StringBuffer();
-                for (final Uri uri : uris) {
-                    if (UriUtil.isFileUri(uri)) {
-                        LogUtil.i(LogUtil.BUGLE_TAG,
-                                "Ignoring attachment from file URI which are no longer supported.");
-                        continue;
-                    }
-                    final String actualContentType = extractContentType(uri, contentType);
-                    if (ContentType.TEXT_PLAIN.equals(actualContentType)) {
-                        // Try to get text string from content uri.
-                        String sharedText = getTextStringFromContentUri(uri);
-                        if (sharedText != null) {
-                            if (strBuffer.length() > 0) {
-                                strBuffer.append("\n");
-                            }
-                            strBuffer.append(sharedText);
-                        }
-                    } else if (PendingAttachmentData.isSupportedMediaType(actualContentType)) {
-                        uriMap.put(uri, actualContentType);
-                    } else {
-                        // Unsupported content type.
-                        LogUtil.e(LogUtil.BUGLE_TAG, "Unsupported shared content type for " + uri
-                                + ": " + actualContentType);
-                    }
-                }
-
-                if (strBuffer.length() > 0 || !uriMap.isEmpty()) {
-                    mDraftMessage =
-                            MessageData.createSharedMessage(strBuffer.toString(), sharedSubject);
-                    for (final Map.Entry<Uri, String> e : uriMap.entrySet()) {
-                        addSharedPartToDraft(e.getValue(), e.getKey());
-                    }
-                }
-            } else {
-                // No EXTRA_STREAM.
-                LogUtil.e(LogUtil.BUGLE_TAG, "No shared URI.");
-                mDraftMessage = null;
-            }
-        } else {
-            // Unsupported action.
-            Assert.fail("Unsupported action type for sharing: " + action);
-        }
-    }
-
-    private static String getTextStringFromContentUri(final Uri contentUri) {
-        if (contentUri == null) {
-            return null;
-        }
-        final ContentResolver resolver = Factory.get().getApplicationContext().getContentResolver();
-        BufferedReader reader = null;
-        try {
-            final InputStream in = resolver.openInputStream(contentUri);
-            reader = new BufferedReader(new InputStreamReader(in));
-            String line = reader.readLine();
-            if (line == null) {
-                return null;
-            }
-            StringBuffer strBuffer = new StringBuffer(line);
-            while ((line = reader.readLine()) != null) {
-                strBuffer.append("\n").append(line);
-            }
-            return strBuffer.toString();
-        } catch (FileNotFoundException e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Can not find contentUri " + contentUri);
-        } catch (IOException e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Can not read contentUri", e);
-        } finally {
-            try {
-                if (reader != null) {
-                    reader.close();
-                }
-            } catch (IOException e) {
-                // Ignore
-            }
-        }
-        return null;
-    }
-
-    private static String extractContentType(final Uri uri, final String contentType) {
-        if (uri == null) {
-            return contentType;
-        }
-        // First try looking at file extension.  This is less reliable in some ways but it's
-        // recommended by
-        // https://developer.android.com/training/secure-file-sharing/retrieve-info.html
-        // Some implementations of MediaMetadataRetriever get things horribly
-        // wrong for common formats such as jpeg (reports as video/ffmpeg)
-        final ContentResolver resolver = Factory.get().getApplicationContext().getContentResolver();
-        final String typeFromExtension = resolver.getType(uri);
-        if (typeFromExtension != null) {
-            return typeFromExtension;
-        }
-        final MediaMetadataRetrieverWrapper retriever = new MediaMetadataRetrieverWrapper();
-        try {
-            retriever.setDataSource(uri);
-            final String extractedType = retriever.extractMetadata(
-                    MediaMetadataRetriever.METADATA_KEY_MIMETYPE);
-            if (extractedType != null) {
-                return extractedType;
-            }
-        } catch (final IOException e) {
-            LogUtil.i(LogUtil.BUGLE_TAG, "Could not determine type of " + uri, e);
-        } finally {
-            retriever.release();
-        }
-        return contentType;
-    }
-
-    private void addSharedPartToDraft(final String contentType, final Uri uri) {
-        if (FileUtil.isInPrivateDir(uri)) {
-            Assert.fail("Cannot send private file " + uri.toString());
-        } else {
-            mDraftMessage.addPart(
-                    PendingAttachmentData.createPendingAttachmentData(contentType, uri));
-        }
-    }
-
-    @Override
-    public void onConversationClick(final ConversationListItemData conversationListItemData) {
-        UIIntents.get().launchConversationActivity(
-                this, conversationListItemData.getConversationId(), mDraftMessage);
-        finish();
-    }
-
-    @Override
-    public void onCreateConversationClick() {
-        UIIntents.get().launchCreateNewConversationActivity(this, mDraftMessage);
-        finish();
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/ShareIntentAdapter.java b/src/com/android/messaging/ui/conversationlist/ShareIntentAdapter.java
deleted file mode 100644
index 6d465ee..0000000
--- a/src/com/android/messaging/ui/conversationlist/ShareIntentAdapter.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import android.net.Uri;
-import androidx.recyclerview.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.ViewGroup;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.PersonItemData;
-import com.android.messaging.ui.CursorRecyclerAdapter;
-import com.android.messaging.ui.PersonItemView;
-import com.android.messaging.ui.PersonItemView.PersonItemViewListener;
-import com.android.messaging.util.PhoneUtils;
-
-/**
- * Turn conversation rows into PeopleItemViews
- */
-public class ShareIntentAdapter
-        extends CursorRecyclerAdapter<ShareIntentAdapter.ShareIntentViewHolder> {
-
-    public interface HostInterface {
-        void onConversationClicked(final ConversationListItemData conversationListItemData);
-    }
-
-    private final HostInterface mHostInterface;
-
-    public ShareIntentAdapter(final Context context, final Cursor cursor,
-            final HostInterface hostInterface) {
-        super(context, cursor, 0);
-        mHostInterface = hostInterface;
-        setHasStableIds(true);
-    }
-
-    @Override
-    public void bindViewHolder(final ShareIntentViewHolder holder, final Context context,
-            final Cursor cursor) {
-        holder.bind(cursor);
-    }
-
-    @Override
-    public ShareIntentViewHolder createViewHolder(final Context context,
-            final ViewGroup parent, final int viewType) {
-        final PersonItemView itemView = (PersonItemView) LayoutInflater.from(context).inflate(
-                R.layout.people_list_item_view, null);
-        return new ShareIntentViewHolder(itemView);
-    }
-
-    /**
-     * Holds a PersonItemView and keeps it synced with a ConversationListItemData.
-     */
-    public class ShareIntentViewHolder extends RecyclerView.ViewHolder implements
-            PersonItemView.PersonItemViewListener {
-        private final ConversationListItemData mData = new ConversationListItemData();
-        private final PersonItemData mItemData = new PersonItemData() {
-            @Override
-            public Uri getAvatarUri() {
-                return mData.getIcon() == null ? null : Uri.parse(mData.getIcon());
-            }
-
-            @Override
-            public String getDisplayName() {
-                return mData.getName();
-            }
-
-            @Override
-            public String getDetails() {
-                final String conversationName = mData.getName();
-                final String conversationPhone = PhoneUtils.getDefault().formatForDisplay(
-                        mData.getOtherParticipantNormalizedDestination());
-                if (conversationPhone == null || conversationPhone.equals(conversationName)) {
-                    return null;
-                }
-                return conversationPhone;
-            }
-
-            @Override
-            public Intent getClickIntent() {
-                return null;
-            }
-
-            @Override
-            public long getContactId() {
-                return ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED;
-            }
-
-            @Override
-            public String getLookupKey() {
-                return null;
-            }
-
-            @Override
-            public String getNormalizedDestination() {
-                return null;
-            }
-        };
-
-        public ShareIntentViewHolder(final PersonItemView itemView) {
-            super(itemView);
-            itemView.setListener(this);
-        }
-
-        public void bind(Cursor cursor) {
-            mData.bind(cursor);
-            ((PersonItemView) itemView).bind(mItemData);
-        }
-
-        @Override
-        public void onPersonClicked(PersonItemData data) {
-            mHostInterface.onConversationClicked(mData);
-        }
-
-        @Override
-        public boolean onPersonLongClicked(PersonItemData data) {
-            return false;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationlist/ShareIntentFragment.java b/src/com/android/messaging/ui/conversationlist/ShareIntentFragment.java
deleted file mode 100644
index beafb53..0000000
--- a/src/com/android/messaging/ui/conversationlist/ShareIntentFragment.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.AlertDialog.Builder;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.database.Cursor;
-import android.os.Bundle;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.ConversationListData.ConversationListDataListener;
-import com.android.messaging.ui.ListEmptyView;
-import com.android.messaging.datamodel.DataModel;
-
-/**
- * Allow user to pick conversation to which an incoming attachment will be shared.
- */
-public class ShareIntentFragment extends DialogFragment implements ConversationListDataListener,
-        ShareIntentAdapter.HostInterface {
-    public static final String HIDE_NEW_CONVERSATION_BUTTON_KEY = "hide_conv_button_key";
-
-    public interface HostInterface {
-        public void onConversationClick(final ConversationListItemData conversationListItemData);
-        public void onCreateConversationClick();
-    }
-
-    private final Binding<ConversationListData> mListBinding = BindingBase.createBinding(this);
-    private RecyclerView mRecyclerView;
-    private ListEmptyView mEmptyListMessageView;
-    private ShareIntentAdapter mAdapter;
-    private HostInterface mHost;
-    private boolean mDismissed;
-
-    /**
-     * {@inheritDoc} from Fragment
-     */
-    @Override
-    public Dialog onCreateDialog(final Bundle bundle) {
-        final Activity activity = getActivity();
-        final LayoutInflater inflater = activity.getLayoutInflater();
-        View view = inflater.inflate(R.layout.share_intent_conversation_list_view, null);
-        mEmptyListMessageView = (ListEmptyView) view.findViewById(R.id.no_conversations_view);
-        mEmptyListMessageView.setImageHint(R.drawable.ic_oobe_conv_list);
-        // The default behavior for default layout param generation by LinearLayoutManager is to
-        // provide width and height of WRAP_CONTENT, but this is not desirable for
-        // ShareIntentFragment; the view in each row should be a width of MATCH_PARENT so that
-        // the entire row is tappable.
-        final LinearLayoutManager manager = new LinearLayoutManager(activity) {
-            @Override
-            public RecyclerView.LayoutParams generateDefaultLayoutParams() {
-                return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
-                        ViewGroup.LayoutParams.WRAP_CONTENT);
-            }
-        };
-        mListBinding.getData().init(getLoaderManager(), mListBinding);
-        mAdapter = new ShareIntentAdapter(activity, null, this);
-        mRecyclerView = (RecyclerView) view.findViewById(android.R.id.list);
-        mRecyclerView.setLayoutManager(manager);
-        mRecyclerView.setHasFixedSize(true);
-        mRecyclerView.setAdapter(mAdapter);
-        final Builder dialogBuilder = new AlertDialog.Builder(activity)
-                .setView(view)
-                .setTitle(R.string.share_intent_activity_label);
-
-        final Bundle arguments = getArguments();
-        if (arguments == null || !arguments.getBoolean(HIDE_NEW_CONVERSATION_BUTTON_KEY)) {
-            dialogBuilder.setPositiveButton(R.string.share_new_message, new OnClickListener() {
-                        @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                            mDismissed = true;
-                            mHost.onCreateConversationClick();
-                    }
-                });
-        }
-        return dialogBuilder.setNegativeButton(R.string.share_cancel, null)
-                .create();
-    }
-
-    @Override
-    public void onDismiss(DialogInterface dialog) {
-        if (!mDismissed) {
-            final Activity activity = getActivity();
-            if (activity != null) {
-                activity.finish();
-            }
-        }
-    }
-
-    /**
-     * {@inheritDoc} from Fragment
-     */
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        mListBinding.unbind();
-    }
-
-    @Override
-    public void onAttach(final Activity activity) {
-        super.onAttach(activity);
-        if (activity instanceof HostInterface) {
-            mHost = (HostInterface) activity;
-        }
-        mListBinding.bind(DataModel.get().createConversationListData(activity, this, false));
-    }
-
-    @Override
-    public void onConversationListCursorUpdated(final ConversationListData data,
-            final Cursor cursor) {
-        mListBinding.ensureBound(data);
-        mAdapter.swapCursor(cursor);
-        updateEmptyListUi(cursor == null || cursor.getCount() == 0);
-    }
-
-    /**
-     * {@inheritDoc} from SharIntentItemView.HostInterface
-     */
-    @Override
-    public void onConversationClicked(final ConversationListItemData conversationListItemData) {
-        mHost.onConversationClick(conversationListItemData);
-    }
-
-    // Show and hide empty list UI as needed with appropriate text based on view specifics
-    private void updateEmptyListUi(final boolean isEmpty) {
-        if (isEmpty) {
-            mEmptyListMessageView.setTextHint(R.string.conversation_list_empty_text);
-            mEmptyListMessageView.setVisibility(View.VISIBLE);
-        } else {
-            mEmptyListMessageView.setVisibility(View.GONE);
-        }
-    }
-
-    @Override
-    public void setBlockedParticipantsAvailable(boolean blockedAvailable) {
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationsettings/CopyContactDetailDialog.java b/src/com/android/messaging/ui/conversationsettings/CopyContactDetailDialog.java
deleted file mode 100644
index d727001..0000000
--- a/src/com/android/messaging/ui/conversationsettings/CopyContactDetailDialog.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationsettings;
-
-import android.app.AlertDialog;
-import android.content.ClipData;
-import android.content.ClipboardManager;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.util.AccessibilityUtil;
-
-public class CopyContactDetailDialog implements DialogInterface.OnClickListener {
-
-    private final Context mContext;
-    private final String mContactDetail;
-
-    public CopyContactDetailDialog(final Context context, final String contactDetail) {
-        mContext = context;
-        mContactDetail = contactDetail;
-    }
-
-    public void show() {
-        new AlertDialog.Builder(mContext)
-                .setView(createBodyView())
-                .setTitle(R.string.copy_to_clipboard_dialog_title)
-                .setPositiveButton(R.string.copy_to_clipboard, this)
-                .show();
-    }
-
-    @Override
-    public void onClick(final DialogInterface dialog, final int which) {
-        final ClipboardManager clipboard =
-                (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
-        clipboard.setPrimaryClip(ClipData.newPlainText(null /* label */, mContactDetail));
-    }
-
-    private View createBodyView() {
-        LayoutInflater inflater = (LayoutInflater) mContext
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        TextView textView = (TextView) inflater.inflate(R.layout.copy_contact_dialog_view, null,
-                false);
-        textView.setText(mContactDetail);
-        final String vocalizedDisplayName = AccessibilityUtil.getVocalizedPhoneNumber(
-                mContext.getResources(), mContactDetail);
-        textView.setContentDescription(vocalizedDisplayName);
-        return textView;
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsActivity.java b/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsActivity.java
deleted file mode 100644
index f017328..0000000
--- a/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsActivity.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationsettings;
-
-import android.app.Fragment;
-import android.os.Bundle;
-import android.view.MenuItem;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.Assert;
-
-/**
- * Shows a list of participants in a conversation.
- */
-public class PeopleAndOptionsActivity extends BugleActionBarActivity {
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.people_and_options_activity);
-
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-    }
-
-    @Override
-    public void onAttachFragment(final Fragment fragment) {
-        if (fragment instanceof PeopleAndOptionsFragment) {
-            final String conversationId =
-                    getIntent().getStringExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID);
-            Assert.notNull(conversationId);
-            final PeopleAndOptionsFragment peopleAndOptionsFragment =
-                    (PeopleAndOptionsFragment) fragment;
-            peopleAndOptionsFragment.setConversationId(conversationId);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // Treat the home press as back press so that when we go back to
-                // ConversationActivity, it doesn't lose its original intent (conversation id etc.)
-                onBackPressed();
-                return true;
-
-            default:
-                return super.onOptionsItemSelected(item);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsFragment.java b/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsFragment.java
deleted file mode 100644
index b86d952..0000000
--- a/src/com/android/messaging/ui/conversationsettings/PeopleAndOptionsFragment.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationsettings;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Fragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.media.RingtoneManager;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.provider.Settings;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.BaseAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.ParticipantListItemData;
-import com.android.messaging.datamodel.data.PeopleAndOptionsData;
-import com.android.messaging.datamodel.data.PeopleAndOptionsData.PeopleAndOptionsDataListener;
-import com.android.messaging.datamodel.data.PeopleOptionsItemData;
-import com.android.messaging.datamodel.data.PersonItemData;
-import com.android.messaging.ui.CompositeAdapter;
-import com.android.messaging.ui.PersonItemView;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.conversation.ConversationActivity;
-import com.android.messaging.util.Assert;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Shows a list of participants of a conversation and displays options.
- */
-public class PeopleAndOptionsFragment extends Fragment
-        implements PeopleAndOptionsDataListener, PeopleOptionsItemView.HostInterface {
-    private ListView mListView;
-    private OptionsListAdapter mOptionsListAdapter;
-    private PeopleListAdapter mPeopleListAdapter;
-    private final Binding<PeopleAndOptionsData> mBinding =
-            BindingBase.createBinding(this);
-
-    private static final int REQUEST_CODE_RINGTONE_PICKER = 1000;
-
-    @Override
-    public void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mBinding.getData().init(getLoaderManager(), mBinding);
-    }
-
-    @Override
-    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
-            final Bundle savedInstanceState) {
-        final View view = inflater.inflate(R.layout.people_and_options_fragment, container, false);
-        mListView = (ListView) view.findViewById(android.R.id.list);
-        mPeopleListAdapter = new PeopleListAdapter(getActivity());
-        mOptionsListAdapter = new OptionsListAdapter();
-        final CompositeAdapter compositeAdapter = new CompositeAdapter(getActivity());
-        compositeAdapter.addPartition(new PeopleAndOptionsPartition(mOptionsListAdapter,
-                R.string.general_settings_title, false));
-        compositeAdapter.addPartition(new PeopleAndOptionsPartition(mPeopleListAdapter,
-                R.string.participant_list_title, true));
-        mListView.setAdapter(compositeAdapter);
-        return view;
-    }
-
-    @Override
-    public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-        if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE_RINGTONE_PICKER) {
-            final Parcelable pick = data.getParcelableExtra(
-                    RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
-            final String pickedUri = pick == null ? "" : pick.toString();
-            mBinding.getData().setConversationNotificationSound(mBinding, pickedUri);
-        }
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        mBinding.unbind();
-    }
-
-    public void setConversationId(final String conversationId) {
-        Assert.isTrue(getView() == null);
-        Assert.notNull(conversationId);
-        mBinding.bind(DataModel.get().createPeopleAndOptionsData(conversationId, getActivity(),
-                this));
-    }
-
-    @Override
-    public void onOptionsCursorUpdated(final PeopleAndOptionsData data, final Cursor cursor) {
-        Assert.isTrue(cursor == null || cursor.getCount() == 1);
-        mBinding.ensureBound(data);
-        mOptionsListAdapter.swapCursor(cursor);
-    }
-
-    @Override
-    public void onParticipantsListLoaded(final PeopleAndOptionsData data,
-            final List<ParticipantData> participants) {
-        mBinding.ensureBound(data);
-        mPeopleListAdapter.updateParticipants(participants);
-        final ParticipantData otherParticipant = participants.size() == 1 ?
-                participants.get(0) : null;
-        mOptionsListAdapter.setOtherParticipant(otherParticipant);
-    }
-
-    @Override
-    public void onOptionsItemViewClicked(final PeopleOptionsItemData item,
-            final boolean isChecked) {
-        switch (item.getItemId()) {
-            case PeopleOptionsItemData.SETTING_NOTIFICATION_ENABLED:
-                mBinding.getData().enableConversationNotifications(mBinding, isChecked);
-                break;
-
-            case PeopleOptionsItemData.SETTING_NOTIFICATION_SOUND_URI:
-                final Intent ringtonePickerIntent = UIIntents.get().getRingtonePickerIntent(
-                        getString(R.string.notification_sound_pref_title),
-                        item.getRingtoneUri(), Settings.System.DEFAULT_NOTIFICATION_URI,
-                        RingtoneManager.TYPE_NOTIFICATION);
-                startActivityForResult(ringtonePickerIntent, REQUEST_CODE_RINGTONE_PICKER);
-                break;
-
-            case PeopleOptionsItemData.SETTING_NOTIFICATION_VIBRATION:
-                mBinding.getData().enableConversationNotificationVibration(mBinding,
-                        isChecked);
-                break;
-
-            case PeopleOptionsItemData.SETTING_BLOCKED:
-                if (item.getOtherParticipant().isBlocked()) {
-                    mBinding.getData().setDestinationBlocked(mBinding, false);
-                    break;
-                }
-                final Resources res = getResources();
-                final Activity activity = getActivity();
-                new AlertDialog.Builder(activity)
-                        .setTitle(res.getString(R.string.block_confirmation_title,
-                                item.getOtherParticipant().getDisplayDestination()))
-                        .setMessage(res.getString(R.string.block_confirmation_message))
-                        .setNegativeButton(android.R.string.cancel, null)
-                        .setPositiveButton(android.R.string.ok,
-                                new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface arg0, int arg1) {
-                                mBinding.getData().setDestinationBlocked(mBinding, true);
-                                activity.setResult(ConversationActivity.FINISH_RESULT_CODE);
-                                activity.finish();
-                            }
-                        })
-                        .create()
-                        .show();
-                break;
-        }
-    }
-
-    /**
-     * A simple adapter that takes a conversation metadata cursor and binds
-     * PeopleAndOptionsItemViews to individual COLUMNS of the first cursor record. (Note
-     * that this is not a CursorAdapter because it treats individual columns of the cursor as
-     * separate options to display for the conversation, e.g. notification settings).
-     */
-    private class OptionsListAdapter extends BaseAdapter {
-        private Cursor mOptionsCursor;
-        private ParticipantData mOtherParticipantData;
-
-        public Cursor swapCursor(final Cursor newCursor) {
-            final Cursor oldCursor = mOptionsCursor;
-            if (newCursor != oldCursor) {
-                mOptionsCursor = newCursor;
-                notifyDataSetChanged();
-            }
-            return oldCursor;
-        }
-
-        public void setOtherParticipant(final ParticipantData participantData) {
-            if (mOtherParticipantData != participantData) {
-                mOtherParticipantData = participantData;
-                notifyDataSetChanged();
-            }
-        }
-
-        @Override
-        public int getCount() {
-            int count = PeopleOptionsItemData.SETTINGS_COUNT;
-            if (mOtherParticipantData == null) {
-                count--;
-            }
-            return mOptionsCursor == null ? 0 : count;
-        }
-
-        @Override
-        public Object getItem(final int position) {
-            return null;
-        }
-
-        @Override
-        public long getItemId(final int position) {
-            return 0;
-        }
-
-        @Override
-        public View getView(final int position, final View convertView, final ViewGroup parent) {
-            final PeopleOptionsItemView itemView;
-            if (convertView != null && convertView instanceof PeopleOptionsItemView) {
-                itemView = (PeopleOptionsItemView) convertView;
-            } else {
-                final LayoutInflater inflater = (LayoutInflater) getActivity()
-                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-                itemView = (PeopleOptionsItemView)
-                        inflater.inflate(R.layout.people_options_item_view, parent, false);
-            }
-            mOptionsCursor.moveToFirst();
-            itemView.bind(mOptionsCursor, position, mOtherParticipantData,
-                    PeopleAndOptionsFragment.this);
-            return itemView;
-        }
-    }
-
-    /**
-     * An adapter that takes a list of ParticipantData and displays them as a list of
-     * ParticipantListItemViews.
-     */
-    private class PeopleListAdapter extends ArrayAdapter<ParticipantData> {
-        public PeopleListAdapter(final Context context) {
-            super(context, R.layout.people_list_item_view, new ArrayList<ParticipantData>());
-        }
-
-        public void updateParticipants(final List<ParticipantData> newList) {
-            clear();
-            addAll(newList);
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public View getView(final int position, final View convertView, final ViewGroup parent) {
-            PersonItemView itemView;
-            final ParticipantData item = getItem(position);
-            if (convertView != null && convertView instanceof PersonItemView) {
-                itemView = (PersonItemView) convertView;
-            } else {
-                final LayoutInflater inflater = (LayoutInflater) getContext()
-                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-                itemView = (PersonItemView) inflater.inflate(R.layout.people_list_item_view, parent,
-                        false);
-            }
-            final ParticipantListItemData itemData =
-                    DataModel.get().createParticipantListItemData(item);
-            itemView.bind(itemData);
-
-            // Any click on the row should have the same effect as clicking the avatar icon
-            final PersonItemView itemViewClosure = itemView;
-            itemView.setListener(new PersonItemView.PersonItemViewListener() {
-                @Override
-                public void onPersonClicked(final PersonItemData data) {
-                    itemViewClosure.performClickOnAvatar();
-                }
-
-                @Override
-                public boolean onPersonLongClicked(final PersonItemData data) {
-                    if (mBinding.isBound()) {
-                        final CopyContactDetailDialog dialog = new CopyContactDetailDialog(
-                                getContext(), data.getDetails());
-                        dialog.show();
-                        return true;
-                    }
-                    return false;
-                }
-            });
-            return itemView;
-        }
-    }
-
-    /**
-     * Represents a partition/section in the People & Options list (e.g. "general options" and
-     * "people in this conversation" sections).
-     */
-    private class PeopleAndOptionsPartition extends CompositeAdapter.Partition {
-        private final int mHeaderResId;
-        private final boolean mNeedDivider;
-
-        public PeopleAndOptionsPartition(final BaseAdapter adapter, final int headerResId,
-                final boolean needDivider) {
-            super(true /* showIfEmpty */, true /* hasHeader */, adapter);
-            mHeaderResId = headerResId;
-            mNeedDivider = needDivider;
-        }
-
-        @Override
-        public View getHeaderView(final View convertView, final ViewGroup parentView) {
-            View view = null;
-            if (convertView != null && convertView.getId() == R.id.people_and_options_header) {
-                view = convertView;
-            } else {
-                view = LayoutInflater.from(getActivity()).inflate(
-                        R.layout.people_and_options_section_header, parentView, false);
-            }
-            final TextView text = (TextView) view.findViewById(R.id.header_text);
-            final View divider = view.findViewById(R.id.divider);
-            text.setText(mHeaderResId);
-            divider.setVisibility(mNeedDivider ? View.VISIBLE : View.GONE);
-            return view;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/conversationsettings/PeopleOptionsItemView.java b/src/com/android/messaging/ui/conversationsettings/PeopleOptionsItemView.java
deleted file mode 100644
index 5b6f3b0..0000000
--- a/src/com/android/messaging/ui/conversationsettings/PeopleOptionsItemView.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationsettings;
-
-import android.content.Context;
-import android.database.Cursor;
-import androidx.appcompat.widget.SwitchCompat;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.PeopleOptionsItemData;
-import com.android.messaging.util.Assert;
-
-/**
- * The view for a single entry in the options section of people & options activity.
- */
-public class PeopleOptionsItemView extends LinearLayout {
-    /**
-     * Implemented by the host of this view that handles options click event.
-     */
-    public interface HostInterface {
-        void onOptionsItemViewClicked(PeopleOptionsItemData item, boolean isChecked);
-    }
-
-    private TextView mTitle;
-    private TextView mSubtitle;
-    private SwitchCompat mSwitch;
-    private final PeopleOptionsItemData mData;
-    private HostInterface mHostInterface;
-
-    public PeopleOptionsItemView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mData = DataModel.get().createPeopleOptionsItemData(context);
-    }
-
-    @Override
-    protected void onFinishInflate () {
-        mTitle = (TextView) findViewById(R.id.title);
-        mSubtitle = (TextView) findViewById(R.id.subtitle);
-        mSwitch = (SwitchCompat) findViewById(R.id.switch_button);
-        setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(final View v) {
-                mHostInterface.onOptionsItemViewClicked(mData, !mData.getChecked());
-            }
-        });
-    }
-
-    public void bind(final Cursor cursor, final int columnIndex, ParticipantData otherParticipant,
-            final HostInterface hostInterface) {
-        Assert.isTrue(columnIndex < PeopleOptionsItemData.SETTINGS_COUNT && columnIndex >= 0);
-        mData.bind(cursor, otherParticipant, columnIndex);
-        mHostInterface = hostInterface;
-
-        mTitle.setText(mData.getTitle());
-        final String subtitle = mData.getSubtitle();
-        if (TextUtils.isEmpty(subtitle)) {
-            mSubtitle.setVisibility(GONE);
-        } else {
-            mSubtitle.setVisibility(VISIBLE);
-            mSubtitle.setText(subtitle);
-        }
-
-        if (mData.getCheckable()) {
-            mSwitch.setVisibility(VISIBLE);
-            mSwitch.setChecked(mData.getChecked());
-        } else {
-            mSwitch.setVisibility(GONE);
-        }
-
-        final boolean enabled = mData.getEnabled();
-        if (enabled != isEnabled()) {
-            mTitle.setEnabled(enabled);
-            mSubtitle.setEnabled(enabled);
-            mSwitch.setEnabled(enabled);
-            setAlpha(enabled ? 1.0f : 0.5f);
-            setEnabled(enabled);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/debug/DebugMmsConfigActivity.java b/src/com/android/messaging/ui/debug/DebugMmsConfigActivity.java
deleted file mode 100644
index 485dcf7..0000000
--- a/src/com/android/messaging/ui/debug/DebugMmsConfigActivity.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.debug;
-
-import android.os.Bundle;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.BaseBugleActivity;
-
-/**
- * Show list of all MmsConfig key/value pairs and allow editing.
- */
-public class DebugMmsConfigActivity extends BaseBugleActivity {
-
-    @Override
-    protected void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.debug_mmsconfig_activity);
-    }
-}
diff --git a/src/com/android/messaging/ui/debug/DebugMmsConfigFragment.java b/src/com/android/messaging/ui/debug/DebugMmsConfigFragment.java
deleted file mode 100644
index f7da331..0000000
--- a/src/com/android/messaging/ui/debug/DebugMmsConfigFragment.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.debug;
-
-import android.app.Fragment;
-import android.content.Context;
-import android.os.Bundle;
-import android.telephony.SubscriptionInfo;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemSelectedListener;
-import android.widget.ArrayAdapter;
-import android.widget.BaseAdapter;
-import android.widget.ListView;
-import android.widget.Spinner;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.ui.debug.DebugMmsConfigItemView.MmsConfigItemListener;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Show list of all MmsConfig key/value pairs and allow editing.
- */
-public class DebugMmsConfigFragment extends Fragment {
-    @Override
-    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
-            final Bundle savedInstanceState) {
-        final View fragmentView = inflater.inflate(R.layout.mms_config_debug_fragment, container,
-                false);
-        final ListView listView = (ListView) fragmentView.findViewById(android.R.id.list);
-        final Spinner spinner = (Spinner) fragmentView.findViewById(R.id.sim_selector);
-        final Integer[] subIdArray = getActiveSubIds();
-        ArrayAdapter<Integer> spinnerAdapter = new ArrayAdapter<Integer>(getActivity(),
-                android.R.layout.simple_spinner_item, subIdArray);
-        spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
-        spinner.setAdapter(spinnerAdapter);
-        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
-            @Override
-            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
-                listView.setAdapter(new MmsConfigAdapter(getActivity(), subIdArray[position]));
-
-                final int[] mccmnc = PhoneUtils.get(subIdArray[position]).getMccMnc();
-                // Set the title with the mcc/mnc
-                final TextView title = (TextView) fragmentView.findViewById(R.id.sim_title);
-                title.setText("(" + mccmnc[0] + "/" + mccmnc[1] + ") " +
-                        getActivity().getString(R.string.debug_sub_id_spinner_text));
-            }
-
-            @Override
-            public void onNothingSelected(AdapterView<?> parent) {
-            }
-        });
-
-        return fragmentView;
-    }
-
-    public static Integer[] getActiveSubIds() {
-        if (!OsUtil.isAtLeastL_MR1()) {
-            return new Integer[] { ParticipantData.DEFAULT_SELF_SUB_ID };
-        }
-        final List<SubscriptionInfo> subRecords =
-                PhoneUtils.getDefault().toLMr1().getActiveSubscriptionInfoList();
-        if (subRecords == null) {
-            return new Integer[0];
-        }
-        final Integer[] retArray = new Integer[subRecords.size()];
-        for (int i = 0; i < subRecords.size(); i++) {
-            retArray[i] = subRecords.get(i).getSubscriptionId();
-        }
-        return retArray;
-    }
-
-    private class MmsConfigAdapter extends BaseAdapter implements
-            DebugMmsConfigItemView.MmsConfigItemListener {
-        private final LayoutInflater mInflater;
-        private final List<String> mKeys;
-        private final MmsConfig mMmsConfig;
-
-        public MmsConfigAdapter(Context context, int subId) {
-            mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-            mMmsConfig = MmsConfig.get(subId);
-            mKeys = new ArrayList<>(mMmsConfig.keySet());
-            Iterator<String> it = mKeys.iterator();
-            while (it.hasNext()) {
-                // Remove a config if the MmsConfig.sKeyTypeMap doesn't have it.
-                if (MmsConfig.getKeyType(it.next()) == null) {
-                    it.remove();
-                }
-            }
-            Collections.sort(mKeys);
-        }
-
-        @Override
-        public View getView(final int position, final View convertView, final ViewGroup parent) {
-            final DebugMmsConfigItemView view;
-            if (convertView != null && convertView instanceof DebugMmsConfigItemView) {
-                view = (DebugMmsConfigItemView) convertView;
-            } else {
-                view = (DebugMmsConfigItemView) mInflater.inflate(
-                        R.layout.debug_mmsconfig_item_view, parent, false);
-            }
-            final String key = mKeys.get(position);
-            view.bind(key,
-                    MmsConfig.getKeyType(key),
-                    String.valueOf(mMmsConfig.getValue(key)),
-                    this);
-            return view;
-        }
-
-        @Override
-        public void onValueChanged(String key, String keyType, String value) {
-            mMmsConfig.update(keyType, key, value);
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public int getCount() {
-            return mKeys.size();
-        }
-
-        @Override
-        public Object getItem(int position) {
-            return mKeys.get(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/debug/DebugMmsConfigItemView.java b/src/com/android/messaging/ui/debug/DebugMmsConfigItemView.java
deleted file mode 100644
index 7b899c0..0000000
--- a/src/com/android/messaging/ui/debug/DebugMmsConfigItemView.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.debug;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnShowListener;
-import android.text.InputType;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.Switch;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.util.LogUtil;
-
-public class DebugMmsConfigItemView extends LinearLayout implements OnClickListener,
-        OnCheckedChangeListener, DialogInterface.OnClickListener {
-
-    public interface MmsConfigItemListener {
-        void onValueChanged(String key, String keyType, String value);
-    }
-
-    private TextView mTitle;
-    private TextView mTextValue;
-    private Switch mSwitch;
-    private String mKey;
-    private String mKeyType;
-    private MmsConfigItemListener mListener;
-    private EditText mEditText;
-
-    public DebugMmsConfigItemView(Context context, AttributeSet attributeSet) {
-        super(context, attributeSet);
-    }
-
-    @Override
-    protected void onFinishInflate () {
-        mTitle = (TextView) findViewById(R.id.title);
-        mTextValue = (TextView) findViewById(R.id.text_value);
-        mSwitch = (Switch) findViewById(R.id.switch_button);
-        setOnClickListener(this);
-        mSwitch.setOnCheckedChangeListener(this);
-    }
-
-    public void bind(final String key, final String keyType, final String value,
-            final MmsConfigItemListener listener) {
-        mListener = listener;
-        mKey = key;
-        mKeyType = keyType;
-        mTitle.setText(key);
-
-        switch (keyType) {
-            case MmsConfig.KEY_TYPE_BOOL:
-                mSwitch.setVisibility(View.VISIBLE);
-                mTextValue.setVisibility(View.GONE);
-                mSwitch.setChecked(Boolean.valueOf(value));
-                break;
-            case MmsConfig.KEY_TYPE_STRING:
-            case MmsConfig.KEY_TYPE_INT:
-                mTextValue.setVisibility(View.VISIBLE);
-                mSwitch.setVisibility(View.GONE);
-                mTextValue.setText(value);
-                break;
-            default:
-                mTextValue.setVisibility(View.GONE);
-                mSwitch.setVisibility(View.GONE);
-                LogUtil.e(LogUtil.BUGLE_TAG, "Unexpected keytype: " + keyType);
-                break;
-        }
-    }
-
-    @Override
-    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-        mListener.onValueChanged(mKey, mKeyType, String.valueOf(isChecked));
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (MmsConfig.KEY_TYPE_BOOL.equals(mKeyType)) {
-            return;
-        }
-        final Context context = getContext();
-        mEditText = new EditText(context);
-        mEditText.setText(mTextValue.getText());
-        mEditText.setFocusable(true);
-        if (MmsConfig.KEY_TYPE_INT.equals(mKeyType)) {
-            mEditText.setInputType(InputType.TYPE_CLASS_PHONE);
-        } else {
-            mEditText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
-        }
-        final AlertDialog dialog = new AlertDialog.Builder(context)
-                .setTitle(mKey)
-                .setView(mEditText)
-                .setPositiveButton(android.R.string.ok, this)
-                .setNegativeButton(android.R.string.cancel, null)
-                .create();
-        dialog.setOnShowListener(new OnShowListener() {
-            @Override
-            public void onShow(DialogInterface dialog) {
-                mEditText.requestFocus();
-                mEditText.selectAll();
-                ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE))
-                        .toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
-            }
-        });
-        dialog.show();
-    }
-
-    @Override
-    public void onClick(DialogInterface dialog, int which) {
-        mListener.onValueChanged(mKey, mKeyType, mEditText.getText().toString());
-    }
-}
diff --git a/src/com/android/messaging/ui/debug/DebugSmsMmsFromDumpFileDialogFragment.java b/src/com/android/messaging/ui/debug/DebugSmsMmsFromDumpFileDialogFragment.java
deleted file mode 100644
index 1aa8be3..0000000
--- a/src/com/android/messaging/ui/debug/DebugSmsMmsFromDumpFileDialogFragment.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.debug;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Environment;
-import android.telephony.SmsMessage;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.action.ReceiveMmsMessageAction;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.receiver.SmsReceiver;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.util.DebugUtils;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Class that displays UI for choosing SMS/MMS dump files for debugging
- */
-public class DebugSmsMmsFromDumpFileDialogFragment extends DialogFragment {
-    public static final String APPLICATION_OCTET_STREAM = "application/octet-stream";
-    public static final String KEY_DUMP_FILES = "dump_files";
-    public static final String KEY_ACTION = "action";
-
-    public static final String ACTION_LOAD = "load";
-    public static final String ACTION_EMAIL = "email";
-
-    private String[] mDumpFiles;
-    private String mAction;
-
-    public static DebugSmsMmsFromDumpFileDialogFragment newInstance(final String[] dumpFiles,
-            final String action) {
-        final DebugSmsMmsFromDumpFileDialogFragment frag =
-                new DebugSmsMmsFromDumpFileDialogFragment();
-        final Bundle args = new Bundle();
-        args.putSerializable(KEY_DUMP_FILES, dumpFiles);
-        args.putString(KEY_ACTION, action);
-        frag.setArguments(args);
-        return frag;
-    }
-
-    @Override
-    public Dialog onCreateDialog(final Bundle savedInstanceState) {
-        final Bundle args = getArguments();
-        mDumpFiles = (String[]) args.getSerializable(KEY_DUMP_FILES);
-        mAction = args.getString(KEY_ACTION);
-
-        final LayoutInflater inflater = getActivity().getLayoutInflater();
-        final View layout = inflater.inflate(
-                R.layout.debug_sms_mms_from_dump_file_dialog, null/*root*/);
-        final ListView list = (ListView) layout.findViewById(R.id.dump_file_list);
-        list.setAdapter(new DumpFileListAdapter(getActivity(), mDumpFiles));
-        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        final Resources resources = getResources();
-        if (ACTION_LOAD.equals(mAction)) {
-            builder.setTitle(resources.getString(
-                    R.string.load_sms_mms_from_dump_file_dialog_title));
-        } else if (ACTION_EMAIL.equals(mAction)) {
-            builder.setTitle(resources.getString(
-                    R.string.email_sms_mms_from_dump_file_dialog_title));
-        }
-        builder.setView(layout);
-        return builder.create();
-    }
-
-    private class DumpFileListAdapter extends ArrayAdapter<String> {
-        public DumpFileListAdapter(final Context context, final String[] dumpFiles) {
-            super(context, R.layout.sms_mms_dump_file_list_item, dumpFiles);
-        }
-
-        @Override
-        public View getView(final int position, final View view, final ViewGroup parent) {
-            TextView actionItemView;
-            if (view == null || !(view instanceof TextView)) {
-                final LayoutInflater inflater = LayoutInflater.from(getContext());
-                actionItemView = (TextView) inflater.inflate(
-                        R.layout.sms_mms_dump_file_list_item, parent, false);
-            } else {
-                actionItemView = (TextView) view;
-            }
-
-            final String file = getItem(position);
-            actionItemView.setText(file);
-            actionItemView.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(final View view) {
-                    dismiss();
-                    if (ACTION_LOAD.equals(mAction)) {
-                        receiveFromDumpFile(file);
-                    } else if (ACTION_EMAIL.equals(mAction)) {
-                        emailDumpFile(file);
-                    }
-                }
-            });
-            return actionItemView;
-        }
-    }
-
-    /**
-     * Load MMS/SMS from the dump file
-     */
-    private void receiveFromDumpFile(final String dumpFileName) {
-        if (dumpFileName.startsWith(MmsUtils.SMS_DUMP_PREFIX)) {
-            final SmsMessage[] messages = DebugUtils.retreiveSmsFromDumpFile(dumpFileName);
-            if (messages != null) {
-                SmsReceiver.deliverSmsMessages(getActivity(), ParticipantData.DEFAULT_SELF_SUB_ID,
-                        0, messages);
-            } else {
-                LogUtil.e(LogUtil.BUGLE_TAG,
-                        "receiveFromDumpFile: invalid sms dump file " + dumpFileName);
-            }
-        } else if (dumpFileName.startsWith(MmsUtils.MMS_DUMP_PREFIX)) {
-            final byte[] data = MmsUtils.createDebugNotificationInd(dumpFileName);
-            if (data != null) {
-                final ReceiveMmsMessageAction action = new ReceiveMmsMessageAction(
-                        ParticipantData.DEFAULT_SELF_SUB_ID, data);
-                action.start();
-            } else {
-                LogUtil.e(LogUtil.BUGLE_TAG,
-                        "receiveFromDumpFile: invalid mms dump file " + dumpFileName);
-            }
-        } else {
-            LogUtil.e(LogUtil.BUGLE_TAG,
-                    "receiveFromDumpFile: invalid dump file name " + dumpFileName);
-        }
-    }
-
-    /**
-     * Launch email app to send the dump file
-     */
-    private void emailDumpFile(final String file) {
-        final Resources resources = getResources();
-        final String fileLocation = "file://"
-                + Environment.getExternalStorageDirectory() + "/" + file;
-        final Intent sharingIntent = new Intent(Intent.ACTION_SEND);
-        sharingIntent.setType(APPLICATION_OCTET_STREAM);
-        sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileLocation));
-        sharingIntent.putExtra(Intent.EXTRA_SUBJECT,
-                resources.getString(R.string.email_sms_mms_dump_file_subject));
-        getActivity().startActivity(Intent.createChooser(sharingIntent,
-                resources.getString(R.string.email_sms_mms_dump_file_chooser_title)));
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/AudioLevelSource.java b/src/com/android/messaging/ui/mediapicker/AudioLevelSource.java
deleted file mode 100644
index a211058..0000000
--- a/src/com/android/messaging/ui/mediapicker/AudioLevelSource.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import com.google.common.base.Preconditions;
-
-import javax.annotation.concurrent.ThreadSafe;
-
-/**
- * Keeps track of the speech level as last observed by the recognition
- * engine as microphone data flows through it. Can be polled by the UI to
- * animate its views.
- */
-@ThreadSafe
-public class AudioLevelSource {
-    private volatile int mSpeechLevel;
-    private volatile Listener mListener;
-
-    public static final int LEVEL_UNKNOWN = -1;
-
-    public interface Listener {
-        void onSpeechLevel(int speechLevel);
-    }
-
-    public void setSpeechLevel(int speechLevel) {
-        Preconditions.checkArgument(speechLevel >= 0 && speechLevel <= 100 ||
-                speechLevel == LEVEL_UNKNOWN);
-        mSpeechLevel = speechLevel;
-        maybeNotify();
-    }
-
-    public int getSpeechLevel() {
-        return mSpeechLevel;
-    }
-
-    public void reset() {
-        setSpeechLevel(LEVEL_UNKNOWN);
-    }
-
-    public boolean isValid() {
-        return mSpeechLevel > 0;
-    }
-
-    private void maybeNotify() {
-        final Listener l = mListener;
-        if (l != null) {
-            l.onSpeechLevel(mSpeechLevel);
-        }
-    }
-
-    public synchronized void setListener(Listener listener) {
-        mListener = listener;
-    }
-
-    public synchronized void clearListener(Listener listener) {
-        if (mListener == listener) {
-            mListener = null;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/AudioMediaChooser.java b/src/com/android/messaging/ui/mediapicker/AudioMediaChooser.java
deleted file mode 100644
index 5d79293..0000000
--- a/src/com/android/messaging/ui/mediapicker/AudioMediaChooser.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.Manifest;
-import android.content.pm.PackageManager;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.util.OsUtil;
-
-/**
- * Chooser which allows the user to record audio
- */
-class AudioMediaChooser extends MediaChooser implements
-        AudioRecordView.HostInterface {
-    private View mEnabledView;
-    private View mMissingPermissionView;
-
-    AudioMediaChooser(final MediaPicker mediaPicker) {
-        super(mediaPicker);
-    }
-
-    @Override
-    public int getSupportedMediaTypes() {
-        return MediaPicker.MEDIA_TYPE_AUDIO;
-    }
-
-    @Override
-    public int getIconResource() {
-        return R.drawable.ic_audio_light;
-    }
-
-    @Override
-    public int getIconDescriptionResource() {
-        return R.string.mediapicker_audioChooserDescription;
-    }
-
-    @Override
-    public void onAudioRecorded(final MessagePartData item) {
-        mMediaPicker.dispatchItemsSelected(item, true);
-    }
-
-    @Override
-    public void setThemeColor(final int color) {
-        if (mView != null) {
-            ((AudioRecordView) mView).setThemeColor(color);
-        }
-    }
-
-    @Override
-    protected View createView(final ViewGroup container) {
-        final LayoutInflater inflater = getLayoutInflater();
-        final AudioRecordView view = (AudioRecordView) inflater.inflate(
-                R.layout.mediapicker_audio_chooser,
-                container /* root */,
-                false /* attachToRoot */);
-        view.setHostInterface(this);
-        view.setThemeColor(mMediaPicker.getConversationThemeColor());
-        mEnabledView = view.findViewById(R.id.mediapicker_enabled);
-        mMissingPermissionView = view.findViewById(R.id.missing_permission_view);
-        return view;
-    }
-
-    @Override
-    int getActionBarTitleResId() {
-        return R.string.mediapicker_audio_title;
-    }
-
-    @Override
-    public boolean isHandlingTouch() {
-        // Whenever the user is in the process of recording audio, we want to allow the user
-        // to move the finger within the panel without interpreting that as dragging the media
-        // picker panel.
-        return ((AudioRecordView) mView).shouldHandleTouch();
-    }
-
-    @Override
-    public void stopTouchHandling() {
-        ((AudioRecordView) mView).stopTouchHandling();
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        if (mView != null) {
-            ((AudioRecordView) mView).onPause();
-        }
-    }
-
-    @Override
-    protected void setSelected(final boolean selected) {
-        super.setSelected(selected);
-        if (selected && !OsUtil.hasRecordAudioPermission()) {
-            requestRecordAudioPermission();
-        }
-    }
-
-    private void requestRecordAudioPermission() {
-        mMediaPicker.requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO },
-                MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE);
-    }
-
-    @Override
-    protected void onRequestPermissionsResult(
-            final int requestCode, final String permissions[], final int[] grantResults) {
-        if (requestCode == MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE) {
-            final boolean permissionGranted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
-            mEnabledView.setVisibility(permissionGranted ? View.VISIBLE : View.GONE);
-            mMissingPermissionView.setVisibility(permissionGranted ? View.GONE : View.VISIBLE);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/AudioRecordView.java b/src/com/android/messaging/ui/mediapicker/AudioRecordView.java
deleted file mode 100644
index fba493f..0000000
--- a/src/com/android/messaging/ui/mediapicker/AudioRecordView.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.graphics.Color;
-import android.graphics.PorterDuff;
-import android.graphics.Rect;
-import android.graphics.Typeface;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.GradientDrawable;
-import android.media.MediaRecorder;
-import android.net.Uri;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageSubscriptionDataProvider;
-import com.android.messaging.datamodel.data.MediaPickerMessagePartData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.MediaUtil;
-import com.android.messaging.util.MediaUtil.OnCompletionListener;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.util.ThreadUtil;
-import com.android.messaging.util.UiUtils;
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * Hosts an audio recorder with tap and hold to record functionality.
- */
-public class AudioRecordView extends FrameLayout implements
-        MediaRecorder.OnErrorListener,
-        MediaRecorder.OnInfoListener {
-    /**
-     * An interface that communicates with the hosted AudioRecordView.
-     */
-    public interface HostInterface extends DraftMessageSubscriptionDataProvider {
-        void onAudioRecorded(final MessagePartData item);
-    }
-
-    /** The initial state, the user may press and hold to start recording */
-    private static final int MODE_IDLE = 1;
-
-    /** The user has pressed the record button and we are playing the sound indicating the
-     *  start of recording session. Don't record yet since we don't want the beeping sound
-     *  to get into the recording. */
-    private static final int MODE_STARTING = 2;
-
-    /** When the user is actively recording */
-    private static final int MODE_RECORDING = 3;
-
-    /** When the user has finished recording, we need to record for some additional time. */
-    private static final int MODE_STOPPING = 4;
-
-    // Bug: 16020175: The framework's MediaRecorder would cut off the ending portion of the
-    // recorded audio by about half a second. To mitigate this issue, we continue the recording
-    // for some extra time before stopping it.
-    private static final int AUDIO_RECORD_ENDING_BUFFER_MILLIS = 500;
-
-    /**
-     * The minimum duration of any recording. Below this threshold, it will be treated as if the
-     * user clicked the record button and inform the user to tap and hold to record.
-     */
-    private static final int AUDIO_RECORD_MINIMUM_DURATION_MILLIS = 300;
-
-    // For accessibility, the touchable record button is bigger than the record button visual.
-    private ImageView mRecordButtonVisual;
-    private View mRecordButton;
-    private SoundLevels mSoundLevels;
-    private TextView mHintTextView;
-    private PausableChronometer mTimerTextView;
-    private LevelTrackingMediaRecorder mMediaRecorder;
-    private long mAudioRecordStartTimeMillis;
-
-    private int mCurrentMode = MODE_IDLE;
-    private HostInterface mHostInterface;
-    private int mThemeColor;
-
-    public AudioRecordView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mMediaRecorder = new LevelTrackingMediaRecorder();
-    }
-
-    public void setHostInterface(final HostInterface hostInterface) {
-        mHostInterface = hostInterface;
-    }
-
-    @VisibleForTesting
-    public void testSetMediaRecorder(final LevelTrackingMediaRecorder recorder) {
-        mMediaRecorder = recorder;
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mSoundLevels = (SoundLevels) findViewById(R.id.sound_levels);
-        mRecordButtonVisual = (ImageView) findViewById(R.id.record_button_visual);
-        mRecordButton = findViewById(R.id.record_button);
-        mHintTextView = (TextView) findViewById(R.id.hint_text);
-        mTimerTextView = (PausableChronometer) findViewById(R.id.timer_text);
-        mSoundLevels.setLevelSource(mMediaRecorder.getLevelSource());
-        mRecordButton.setOnTouchListener(new OnTouchListener() {
-            @Override
-            public boolean onTouch(final View v, final MotionEvent event) {
-                final int action = event.getActionMasked();
-                switch (action) {
-                    case MotionEvent.ACTION_DOWN:
-                        onRecordButtonTouchDown();
-
-                        // Don't let the record button handle the down event to let it fall through
-                        // so that we can handle it for the entire panel in onTouchEvent(). This is
-                        // done so that: 1) the user taps on the record button to start recording
-                        // 2) the entire panel owns the touch event so we'd keep recording even
-                        // if the user moves outside the button region.
-                        return false;
-                }
-                return false;
-            }
-        });
-    }
-
-    @Override
-    public boolean onTouchEvent(final MotionEvent event) {
-        final int action = event.getActionMasked();
-        switch (action) {
-            case MotionEvent.ACTION_DOWN:
-                return shouldHandleTouch();
-
-            case MotionEvent.ACTION_MOVE:
-                return true;
-
-            case MotionEvent.ACTION_UP:
-            case MotionEvent.ACTION_CANCEL:
-                return onRecordButtonTouchUp();
-        }
-        return super.onTouchEvent(event);
-    }
-
-    public void onPause() {
-        // The conversation draft cannot take any updates when it's paused. Therefore, forcibly
-        // stop recording on pause.
-        stopRecording();
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        stopRecording();
-    }
-
-    private boolean isRecording() {
-        return mMediaRecorder.isRecording() && mCurrentMode == MODE_RECORDING;
-    }
-
-    public boolean shouldHandleTouch() {
-        return mCurrentMode != MODE_IDLE;
-    }
-
-    public void stopTouchHandling() {
-        setMode(MODE_IDLE);
-        stopRecording();
-    }
-
-    private void setMode(final int mode) {
-        if (mCurrentMode != mode) {
-            mCurrentMode = mode;
-            updateVisualState();
-        }
-    }
-
-    private void updateVisualState() {
-        switch (mCurrentMode) {
-            case MODE_IDLE:
-                mHintTextView.setVisibility(VISIBLE);
-                mHintTextView.setTypeface(null, Typeface.NORMAL);
-                mTimerTextView.setVisibility(GONE);
-                mSoundLevels.setEnabled(false);
-                mTimerTextView.stop();
-                break;
-
-            case MODE_RECORDING:
-            case MODE_STOPPING:
-                mHintTextView.setVisibility(GONE);
-                mTimerTextView.setVisibility(VISIBLE);
-                mSoundLevels.setEnabled(true);
-                mTimerTextView.restart();
-                break;
-
-            case MODE_STARTING:
-                break;  // No-Op.
-
-            default:
-                Assert.fail("invalid mode for AudioRecordView!");
-                break;
-        }
-        updateRecordButtonAppearance();
-    }
-
-    public void setThemeColor(final int color) {
-        mThemeColor = color;
-        updateRecordButtonAppearance();
-    }
-
-    private void updateRecordButtonAppearance() {
-        final Drawable foregroundDrawable = getResources().getDrawable(R.drawable.ic_mp_audio_mic);
-        final GradientDrawable backgroundDrawable = ((GradientDrawable) getResources()
-                .getDrawable(R.drawable.audio_record_control_button_background));
-        if (isRecording()) {
-            foregroundDrawable.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);
-            backgroundDrawable.setColor(mThemeColor);
-        } else {
-            foregroundDrawable.setColorFilter(mThemeColor, PorterDuff.Mode.SRC_ATOP);
-            backgroundDrawable.setColor(Color.WHITE);
-        }
-        mRecordButtonVisual.setImageDrawable(foregroundDrawable);
-        mRecordButtonVisual.setBackground(backgroundDrawable);
-    }
-
-    @VisibleForTesting
-    boolean onRecordButtonTouchDown() {
-        if (!mMediaRecorder.isRecording() && mCurrentMode == MODE_IDLE) {
-            setMode(MODE_STARTING);
-            playAudioStartSound(new OnCompletionListener() {
-                @Override
-                public void onCompletion() {
-                    // Double-check the current mode before recording since the user may have
-                    // lifted finger from the button before the beeping sound is played through.
-                    final int maxSize = MmsConfig.get(mHostInterface.getConversationSelfSubId())
-                            .getMaxMessageSize();
-                    if (mCurrentMode == MODE_STARTING &&
-                            mMediaRecorder.startRecording(AudioRecordView.this,
-                                    AudioRecordView.this, maxSize)) {
-                        setMode(MODE_RECORDING);
-                    }
-                }
-            });
-            mAudioRecordStartTimeMillis = System.currentTimeMillis();
-            return true;
-        }
-        return false;
-    }
-
-    @VisibleForTesting
-    boolean onRecordButtonTouchUp() {
-        if (System.currentTimeMillis() - mAudioRecordStartTimeMillis <
-                AUDIO_RECORD_MINIMUM_DURATION_MILLIS) {
-            // The recording is too short, bolden the hint text to instruct the user to
-            // "tap+hold" to record audio.
-            final Uri outputUri = stopRecording();
-            if (outputUri != null) {
-                SafeAsyncTask.executeOnThreadPool(new Runnable() {
-                    @Override
-                    public void run() {
-                        Factory.get().getApplicationContext().getContentResolver().delete(
-                                outputUri, null, null);
-                    }
-                });
-            }
-            setMode(MODE_IDLE);
-            mHintTextView.setTypeface(null, Typeface.BOLD);
-        } else if (isRecording()) {
-            // Record for some extra time to ensure the ending part is saved.
-            setMode(MODE_STOPPING);
-            ThreadUtil.getMainThreadHandler().postDelayed(new Runnable() {
-                @Override
-                public void run() {
-                    onFinishedRecording();
-                }
-            }, AUDIO_RECORD_ENDING_BUFFER_MILLIS);
-        } else {
-            setMode(MODE_IDLE);
-        }
-        return true;
-    }
-
-    private Uri stopRecording() {
-        if (mMediaRecorder.isRecording()) {
-            return mMediaRecorder.stopRecording();
-        }
-        return null;
-    }
-
-    @Override   // From MediaRecorder.OnInfoListener
-    public void onInfo(final MediaRecorder mr, final int what, final int extra) {
-        if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED) {
-            // Max size reached. Finish recording immediately.
-            LogUtil.i(LogUtil.BUGLE_TAG, "Max size reached while recording audio");
-            onFinishedRecording();
-        } else {
-            // These are unknown errors.
-            onErrorWhileRecording(what, extra);
-        }
-    }
-
-    @Override   // From MediaRecorder.OnErrorListener
-    public void onError(final MediaRecorder mr, final int what, final int extra) {
-        onErrorWhileRecording(what, extra);
-    }
-
-    private void onErrorWhileRecording(final int what, final int extra) {
-        LogUtil.e(LogUtil.BUGLE_TAG, "Error occurred during audio recording what=" + what +
-                ", extra=" + extra);
-        UiUtils.showToastAtBottom(R.string.audio_recording_error);
-        setMode(MODE_IDLE);
-        stopRecording();
-    }
-
-    private void onFinishedRecording() {
-        final Uri outputUri = stopRecording();
-        if (outputUri != null) {
-            final Rect startRect = new Rect();
-            mRecordButtonVisual.getGlobalVisibleRect(startRect);
-            final MediaPickerMessagePartData audioItem =
-                    new MediaPickerMessagePartData(startRect,
-                            ContentType.AUDIO_3GPP, outputUri, 0, 0);
-            mHostInterface.onAudioRecorded(audioItem);
-        }
-        playAudioEndSound();
-        setMode(MODE_IDLE);
-    }
-
-    private void playAudioStartSound(final OnCompletionListener completionListener) {
-        MediaUtil.get().playSound(getContext(), R.raw.audio_initiate, completionListener);
-    }
-
-    private void playAudioEndSound() {
-        MediaUtil.get().playSound(getContext(), R.raw.audio_end, null);
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/CameraManager.java b/src/com/android/messaging/ui/mediapicker/CameraManager.java
deleted file mode 100644
index fb5c9bf..0000000
--- a/src/com/android/messaging/ui/mediapicker/CameraManager.java
+++ /dev/null
@@ -1,1201 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.Manifest;
-import android.app.Activity;
-import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.hardware.Camera;
-import android.hardware.Camera.CameraInfo;
-import android.media.MediaRecorder;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Looper;
-import androidx.annotation.NonNull;
-import android.text.TextUtils;
-import android.util.DisplayMetrics;
-import android.view.MotionEvent;
-import android.view.OrientationEventListener;
-import android.view.Surface;
-import android.view.View;
-import android.view.WindowManager;
-
-import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageSubscriptionDataProvider;
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.media.ImageRequest;
-import com.android.messaging.sms.MmsConfig;
-import com.android.messaging.ui.mediapicker.camerafocus.FocusOverlayManager;
-import com.android.messaging.ui.mediapicker.camerafocus.RenderOverlay;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BugleGservicesKeys;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.UiUtils;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-/**
- * Class which manages interactions with the camera, but does not do any UI.  This class is
- * designed to be a singleton to ensure there is one component managing the camera and releasing
- * the native resources.
- * In order to acquire a camera, a caller must:
- * <ul>
- *     <li>Call selectCamera to select front or back camera
- *     <li>Call setSurface to control where the preview is shown
- *     <li>Call openCamera to request the camera start preview
- * </ul>
- * Callers should call onPause and onResume to ensure that the camera is release while the activity
- * is not active.
- * This class is not thread safe.  It should only be called from one thread (the UI thread or test
- * thread)
- */
-class CameraManager implements FocusOverlayManager.Listener {
-    /**
-     * Wrapper around the framework camera API to allow mocking different hardware scenarios while
-     * unit testing
-     */
-    interface CameraWrapper {
-        int getNumberOfCameras();
-        void getCameraInfo(int index, CameraInfo cameraInfo);
-        Camera open(int cameraId);
-        /** Add a wrapper for release because a final method cannot be mocked */
-        void release(Camera camera);
-    }
-
-    /**
-     * Callbacks for the camera manager listener
-     */
-    interface CameraManagerListener {
-        void onCameraError(int errorCode, Exception e);
-        void onCameraChanged();
-    }
-
-    /**
-     * Callback when taking image or video
-     */
-    interface MediaCallback {
-        static final int MEDIA_CAMERA_CHANGED = 1;
-        static final int MEDIA_NO_DATA = 2;
-
-        void onMediaReady(Uri uriToMedia, String contentType, int width, int height);
-        void onMediaFailed(Exception exception);
-        void onMediaInfo(int what);
-    }
-
-    // Error codes
-    static final int ERROR_OPENING_CAMERA = 1;
-    static final int ERROR_SHOWING_PREVIEW = 2;
-    static final int ERROR_INITIALIZING_VIDEO = 3;
-    static final int ERROR_STORAGE_FAILURE = 4;
-    static final int ERROR_RECORDING_VIDEO = 5;
-    static final int ERROR_HARDWARE_ACCELERATION_DISABLED = 6;
-    static final int ERROR_TAKING_PICTURE = 7;
-
-    private static final String TAG = LogUtil.BUGLE_TAG;
-    private static final int NO_CAMERA_SELECTED = -1;
-
-    private static CameraManager sInstance;
-
-    /** Default camera wrapper which directs calls to the framework APIs */
-    private static CameraWrapper sCameraWrapper = new CameraWrapper() {
-        @Override
-        public int getNumberOfCameras() {
-            return Camera.getNumberOfCameras();
-        }
-
-        @Override
-        public void getCameraInfo(final int index, final CameraInfo cameraInfo) {
-            Camera.getCameraInfo(index, cameraInfo);
-        }
-
-        @Override
-        public Camera open(final int cameraId) {
-            return Camera.open(cameraId);
-        }
-
-        @Override
-        public void release(final Camera camera) {
-            camera.release();
-        }
-    };
-
-    /** The CameraInfo for the currently selected camera */
-    private final CameraInfo mCameraInfo;
-
-    /**
-     * The index of the selected camera or NO_CAMERA_SELECTED if a camera hasn't been selected yet
-     */
-    private int mCameraIndex;
-
-    /** True if the device has front and back cameras */
-    private final boolean mHasFrontAndBackCamera;
-
-    /** True if the camera should be open (may not yet be actually open) */
-    private boolean mOpenRequested;
-
-    /** True if the camera is requested to be in video mode */
-    private boolean mVideoModeRequested;
-
-    /** The media recorder for video mode */
-    private MmsVideoRecorder mMediaRecorder;
-
-    /** Callback to call with video recording updates */
-    private MediaCallback mVideoCallback;
-
-    /** The preview view to show the preview on */
-    private CameraPreview mCameraPreview;
-
-    /** The helper classs to handle orientation changes */
-    private OrientationHandler mOrientationHandler;
-
-    /** Tracks whether the preview has hardware acceleration */
-    private boolean mIsHardwareAccelerationSupported;
-
-    /**
-     * The task for opening the camera, so it doesn't block the UI thread
-     * Using AsyncTask rather than SafeAsyncTask because the tasks need to be serialized, but don't
-     * need to be on the UI thread
-     * TODO: If we have other AyncTasks (not SafeAsyncTasks) this may contend and we may
-     * need to create a dedicated thread, or synchronize the threads in the thread pool
-     */
-    private AsyncTask<Integer, Void, Camera> mOpenCameraTask;
-
-    /**
-     * The camera index that is queued to be opened, but not completed yet, or NO_CAMERA_SELECTED if
-     * no open task is pending
-     */
-    private int mPendingOpenCameraIndex = NO_CAMERA_SELECTED;
-
-    /** The instance of the currently opened camera */
-    private Camera mCamera;
-
-    /** The rotation of the screen relative to the camera's natural orientation */
-    private int mRotation;
-
-    /** The callback to notify when errors or other events occur */
-    private CameraManagerListener mListener;
-
-    /** True if the camera is currently in the process of taking an image */
-    private boolean mTakingPicture;
-
-    /** Provides subscription-related data to access per-subscription configurations. */
-    private DraftMessageSubscriptionDataProvider mSubscriptionDataProvider;
-
-    /** Manages auto focus visual and behavior */
-    private final FocusOverlayManager mFocusOverlayManager;
-
-    private CameraManager() {
-        mCameraInfo = new CameraInfo();
-        mCameraIndex = NO_CAMERA_SELECTED;
-
-        // Check to see if a front and back camera exist
-        boolean hasFrontCamera = false;
-        boolean hasBackCamera = false;
-        final CameraInfo cameraInfo = new CameraInfo();
-        final int cameraCount = sCameraWrapper.getNumberOfCameras();
-        try {
-            for (int i = 0; i < cameraCount; i++) {
-                sCameraWrapper.getCameraInfo(i, cameraInfo);
-                if (cameraInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
-                    hasFrontCamera = true;
-                } else if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
-                    hasBackCamera = true;
-                }
-                if (hasFrontCamera && hasBackCamera) {
-                    break;
-                }
-            }
-        } catch (final RuntimeException e) {
-            LogUtil.e(TAG, "Unable to load camera info", e);
-        }
-        mHasFrontAndBackCamera = hasFrontCamera && hasBackCamera;
-        mFocusOverlayManager = new FocusOverlayManager(this, Looper.getMainLooper());
-
-        // Assume the best until we are proven otherwise
-        mIsHardwareAccelerationSupported = true;
-    }
-
-    /** Gets the singleton instance */
-    static CameraManager get() {
-        if (sInstance == null) {
-            sInstance = new CameraManager();
-        }
-        return sInstance;
-    }
-
-    /** Allows tests to inject a custom camera wrapper */
-    @VisibleForTesting
-    static void setCameraWrapper(final CameraWrapper cameraWrapper) {
-        sCameraWrapper = cameraWrapper;
-        sInstance = null;
-    }
-
-    /**
-     * Sets the surface to use to display the preview
-     * This must only be called AFTER the CameraPreview has a texture ready
-     * @param preview The preview surface view
-     */
-    void setSurface(final CameraPreview preview) {
-        if (preview == mCameraPreview) {
-            return;
-        }
-
-        if (preview != null) {
-            Assert.isTrue(preview.isValid());
-            preview.setOnTouchListener(new View.OnTouchListener() {
-                @Override
-                public boolean onTouch(final View view, final MotionEvent motionEvent) {
-                    if ((motionEvent.getActionMasked() & MotionEvent.ACTION_UP) ==
-                            MotionEvent.ACTION_UP) {
-                        mFocusOverlayManager.setPreviewSize(view.getWidth(), view.getHeight());
-                        mFocusOverlayManager.onSingleTapUp(
-                                (int) motionEvent.getX() + view.getLeft(),
-                                (int) motionEvent.getY() + view.getTop());
-                    }
-                    return true;
-                }
-            });
-        }
-        mCameraPreview = preview;
-        tryShowPreview();
-    }
-
-    void setRenderOverlay(final RenderOverlay renderOverlay) {
-        mFocusOverlayManager.setFocusRenderer(renderOverlay != null ?
-                renderOverlay.getPieRenderer() : null);
-    }
-
-    /** Convenience function to swap between front and back facing cameras */
-    void swapCamera() {
-        Assert.isTrue(mCameraIndex >= 0);
-        selectCamera(mCameraInfo.facing == CameraInfo.CAMERA_FACING_FRONT ?
-                CameraInfo.CAMERA_FACING_BACK :
-                CameraInfo.CAMERA_FACING_FRONT);
-    }
-
-    /**
-     * Selects the first camera facing the desired direction, or the first camera if there is no
-     * camera in the desired direction
-     * @param desiredFacing One of the CameraInfo.CAMERA_FACING_* constants
-     * @return True if a camera was selected, or false if selecting a camera failed
-     */
-    boolean selectCamera(final int desiredFacing) {
-        try {
-            // We already selected a camera facing that direction
-            if (mCameraIndex >= 0 && mCameraInfo.facing == desiredFacing) {
-                return true;
-            }
-
-            final int cameraCount = sCameraWrapper.getNumberOfCameras();
-            Assert.isTrue(cameraCount > 0);
-
-            mCameraIndex = NO_CAMERA_SELECTED;
-            setCamera(null);
-            final CameraInfo cameraInfo = new CameraInfo();
-            for (int i = 0; i < cameraCount; i++) {
-                sCameraWrapper.getCameraInfo(i, cameraInfo);
-                if (cameraInfo.facing == desiredFacing) {
-                    mCameraIndex = i;
-                    sCameraWrapper.getCameraInfo(i, mCameraInfo);
-                    break;
-                }
-            }
-
-            // There's no camera in the desired facing direction, just select the first camera
-            // regardless of direction
-            if (mCameraIndex < 0) {
-                mCameraIndex = 0;
-                sCameraWrapper.getCameraInfo(0, mCameraInfo);
-            }
-
-            if (mOpenRequested) {
-                // The camera is open, so reopen with the newly selected camera
-                openCamera();
-            }
-            return true;
-        } catch (final RuntimeException e) {
-            LogUtil.e(TAG, "RuntimeException in CameraManager.selectCamera", e);
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_OPENING_CAMERA, e);
-            }
-            return false;
-        }
-    }
-
-    int getCameraIndex() {
-        return mCameraIndex;
-    }
-
-    void selectCameraByIndex(final int cameraIndex) {
-        if (mCameraIndex == cameraIndex) {
-            return;
-        }
-
-        try {
-            mCameraIndex = cameraIndex;
-            sCameraWrapper.getCameraInfo(mCameraIndex, mCameraInfo);
-            if (mOpenRequested) {
-                openCamera();
-            }
-        } catch (final RuntimeException e) {
-            LogUtil.e(TAG, "RuntimeException in CameraManager.selectCameraByIndex", e);
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_OPENING_CAMERA, e);
-            }
-        }
-    }
-
-    @VisibleForTesting
-    CameraInfo getCameraInfo() {
-        if (mCameraIndex == NO_CAMERA_SELECTED) {
-            return null;
-        }
-        return mCameraInfo;
-    }
-
-    /** @return True if this device has camera capabilities */
-    boolean hasAnyCamera() {
-        return sCameraWrapper.getNumberOfCameras() > 0;
-    }
-
-    /** @return True if the device has both a front and back camera */
-    boolean hasFrontAndBackCamera() {
-        return mHasFrontAndBackCamera;
-    }
-
-    /**
-     * Opens the camera on a separate thread and initiates the preview if one is available
-     */
-    void openCamera() {
-        if (mCameraIndex == NO_CAMERA_SELECTED) {
-            // Ensure a selected camera if none is currently selected. This may happen if the
-            // camera chooser is not the default media chooser.
-            selectCamera(CameraInfo.CAMERA_FACING_BACK);
-        }
-        mOpenRequested = true;
-        // We're already opening the camera or already have the camera handle, nothing more to do
-        if (mPendingOpenCameraIndex == mCameraIndex || mCamera != null) {
-            return;
-        }
-
-        // True if the task to open the camera has to be delayed until the current one completes
-        boolean delayTask = false;
-
-        // Cancel any previous open camera tasks
-        if (mOpenCameraTask != null) {
-            mPendingOpenCameraIndex = NO_CAMERA_SELECTED;
-            delayTask = true;
-        }
-
-        mPendingOpenCameraIndex = mCameraIndex;
-        mOpenCameraTask = new AsyncTask<Integer, Void, Camera>() {
-            private Exception mException;
-
-            @Override
-            protected Camera doInBackground(final Integer... params) {
-                try {
-                    final int cameraIndex = params[0];
-                    if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                        LogUtil.v(TAG, "Opening camera " + mCameraIndex);
-                    }
-                    return sCameraWrapper.open(cameraIndex);
-                } catch (final Exception e) {
-                    LogUtil.e(TAG, "Exception while opening camera", e);
-                    mException = e;
-                    return null;
-                }
-            }
-
-            @Override
-            protected void onPostExecute(final Camera camera) {
-                // If we completed, but no longer want this camera, then release the camera
-                if (mOpenCameraTask != this || !mOpenRequested) {
-                    releaseCamera(camera);
-                    cleanup();
-                    return;
-                }
-
-                cleanup();
-
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "Opened camera " + mCameraIndex + " " + (camera != null));
-                }
-
-                setCamera(camera);
-                if (camera == null) {
-                    if (mListener != null) {
-                        mListener.onCameraError(ERROR_OPENING_CAMERA, mException);
-                    }
-                    LogUtil.e(TAG, "Error opening camera");
-                }
-            }
-
-            @Override
-            protected void onCancelled() {
-                super.onCancelled();
-                cleanup();
-            }
-
-            private void cleanup() {
-                mPendingOpenCameraIndex = NO_CAMERA_SELECTED;
-                if (mOpenCameraTask != null && mOpenCameraTask.getStatus() == Status.PENDING) {
-                    // If there's another task waiting on this one to complete, start it now
-                    mOpenCameraTask.execute(mCameraIndex);
-                } else {
-                    mOpenCameraTask = null;
-                }
-
-            }
-        };
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "Start opening camera " + mCameraIndex);
-        }
-
-        if (!delayTask) {
-            mOpenCameraTask.execute(mCameraIndex);
-        }
-    }
-
-    boolean isVideoMode() {
-        return mVideoModeRequested;
-    }
-
-    boolean isRecording() {
-        return mVideoModeRequested && mVideoCallback != null;
-    }
-
-    void setVideoMode(final boolean videoMode) {
-        if (mVideoModeRequested == videoMode) {
-            return;
-        }
-        mVideoModeRequested = videoMode;
-        tryInitOrCleanupVideoMode();
-    }
-
-    /** Closes the camera releasing the resources it uses */
-    void closeCamera() {
-        mOpenRequested = false;
-        setCamera(null);
-    }
-
-    /** Temporarily closes the camera if it is open */
-    void onPause() {
-        setCamera(null);
-    }
-
-    /** Reopens the camera if it was opened when onPause was called */
-    void onResume() {
-        if (mOpenRequested) {
-            openCamera();
-        }
-    }
-
-    /**
-     * Sets the listener which will be notified of errors or other events in the camera
-     * @param listener The listener to notify
-     */
-    void setListener(final CameraManagerListener listener) {
-        Assert.isMainThread();
-        mListener = listener;
-        if (!mIsHardwareAccelerationSupported && mListener != null) {
-            mListener.onCameraError(ERROR_HARDWARE_ACCELERATION_DISABLED, null);
-        }
-    }
-
-    void setSubscriptionDataProvider(final DraftMessageSubscriptionDataProvider provider) {
-        mSubscriptionDataProvider = provider;
-    }
-
-    void takePicture(final float heightPercent, @NonNull final MediaCallback callback) {
-        Assert.isTrue(!mVideoModeRequested);
-        Assert.isTrue(!mTakingPicture);
-        Assert.notNull(callback);
-        if (mCamera == null) {
-            // The caller should have checked isCameraAvailable first, but just in case, protect
-            // against a null camera by notifying the callback that taking the picture didn't work
-            callback.onMediaFailed(null);
-            return;
-        }
-        final Camera.PictureCallback jpegCallback = new Camera.PictureCallback() {
-            @Override
-            public void onPictureTaken(final byte[] bytes, final Camera camera) {
-                mTakingPicture = false;
-                if (mCamera != camera) {
-                    // This may happen if the camera was changed between front/back while the
-                    // picture is being taken.
-                    callback.onMediaInfo(MediaCallback.MEDIA_CAMERA_CHANGED);
-                    return;
-                }
-
-                if (bytes == null) {
-                    callback.onMediaInfo(MediaCallback.MEDIA_NO_DATA);
-                    return;
-                }
-
-                final Camera.Size size = camera.getParameters().getPictureSize();
-                int width;
-                int height;
-                if (mRotation == 90 || mRotation == 270) {
-                    width = size.height;
-                    height = size.width;
-                } else {
-                    width = size.width;
-                    height = size.height;
-                }
-                new ImagePersistTask(
-                        width, height, heightPercent, bytes, mCameraPreview.getContext(), callback)
-                        .executeOnThreadPool();
-            }
-        };
-
-        mTakingPicture = true;
-        try {
-            mCamera.takePicture(
-                    null /* shutter */,
-                    null /* raw */,
-                    null /* postView */,
-                    jpegCallback);
-        } catch (final RuntimeException e) {
-            LogUtil.e(TAG, "RuntimeException in CameraManager.takePicture", e);
-            mTakingPicture = false;
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_TAKING_PICTURE, e);
-            }
-        }
-    }
-
-    void startVideo(final MediaCallback callback) {
-        Assert.notNull(callback);
-        Assert.isTrue(!isRecording());
-        mVideoCallback = callback;
-        tryStartVideoCapture();
-    }
-
-    /**
-     * Asynchronously releases a camera
-     * @param camera The camera to release
-     */
-    private void releaseCamera(final Camera camera) {
-        if (camera == null) {
-            return;
-        }
-
-        mFocusOverlayManager.onCameraReleased();
-
-        new AsyncTask<Void, Void, Void>() {
-            @Override
-            protected Void doInBackground(final Void... params) {
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "Releasing camera " + mCameraIndex);
-                }
-                sCameraWrapper.release(camera);
-                return null;
-            }
-        }.execute();
-    }
-
-    private void releaseMediaRecorder(final boolean cleanupFile) {
-        if (mMediaRecorder == null) {
-            return;
-        }
-        mVideoModeRequested = false;
-
-        if (cleanupFile) {
-            mMediaRecorder.cleanupTempFile();
-            if (mVideoCallback != null) {
-                final MediaCallback callback = mVideoCallback;
-                mVideoCallback = null;
-                // Notify the callback that we've stopped recording
-                callback.onMediaReady(null /*uri*/, null /*contentType*/, 0 /*width*/,
-                        0 /*height*/);
-            }
-        }
-
-        mMediaRecorder.closeVideoFileDescriptor();
-        mMediaRecorder.release();
-        mMediaRecorder = null;
-
-        if (mCamera != null) {
-            try {
-                mCamera.reconnect();
-            } catch (final IOException e) {
-                LogUtil.e(TAG, "IOException in CameraManager.releaseMediaRecorder", e);
-                if (mListener != null) {
-                    mListener.onCameraError(ERROR_OPENING_CAMERA, e);
-                }
-            } catch (final RuntimeException e) {
-                LogUtil.e(TAG, "RuntimeException in CameraManager.releaseMediaRecorder", e);
-                if (mListener != null) {
-                    mListener.onCameraError(ERROR_OPENING_CAMERA, e);
-                }
-            }
-        }
-        restoreRequestedOrientation();
-    }
-
-    /** Updates the orientation of the camera to match the orientation of the device */
-    private void updateCameraOrientation() {
-        if (mCamera == null || mCameraPreview == null || mTakingPicture) {
-            return;
-        }
-
-        final WindowManager windowManager =
-                (WindowManager) mCameraPreview.getContext().getSystemService(
-                        Context.WINDOW_SERVICE);
-
-        int degrees = 0;
-        switch (windowManager.getDefaultDisplay().getRotation()) {
-            case Surface.ROTATION_0: degrees = 0; break;
-            case Surface.ROTATION_90: degrees = 90; break;
-            case Surface.ROTATION_180: degrees = 180; break;
-            case Surface.ROTATION_270: degrees = 270; break;
-        }
-
-        // The display orientation of the camera (this controls the preview image).
-        int orientation;
-
-        // The clockwise rotation angle relative to the orientation of the camera. This affects
-        // pictures returned by the camera in Camera.PictureCallback.
-        int rotation;
-        if (mCameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
-            orientation = (mCameraInfo.orientation + degrees) % 360;
-            rotation = orientation;
-            // compensate the mirror but only for orientation
-            orientation = (360 - orientation) % 360;
-        } else {  // back-facing
-            orientation = (mCameraInfo.orientation - degrees + 360) % 360;
-            rotation = orientation;
-        }
-        mRotation = rotation;
-        if (mMediaRecorder == null) {
-            try {
-                mCamera.setDisplayOrientation(orientation);
-                final Camera.Parameters params = mCamera.getParameters();
-                params.setRotation(rotation);
-                mCamera.setParameters(params);
-            } catch (final RuntimeException e) {
-                LogUtil.e(TAG, "RuntimeException in CameraManager.updateCameraOrientation", e);
-                if (mListener != null) {
-                    mListener.onCameraError(ERROR_OPENING_CAMERA, e);
-                }
-            }
-        }
-    }
-
-    /** Sets the current camera, releasing any previously opened camera */
-    private void setCamera(final Camera camera) {
-        if (mCamera == camera) {
-            return;
-        }
-
-        releaseMediaRecorder(true /* cleanupFile */);
-        releaseCamera(mCamera);
-        mCamera = camera;
-        tryShowPreview();
-        if (mListener != null) {
-            mListener.onCameraChanged();
-        }
-    }
-
-    /** Shows the preview if the camera is open and the preview is loaded */
-    private void tryShowPreview() {
-        if (mCameraPreview == null || mCamera == null) {
-            if (mOrientationHandler != null) {
-                mOrientationHandler.disable();
-                mOrientationHandler = null;
-            }
-            releaseMediaRecorder(true /* cleanupFile */);
-            mFocusOverlayManager.onPreviewStopped();
-            return;
-        }
-        try {
-            mCamera.stopPreview();
-            updateCameraOrientation();
-
-            final Camera.Parameters params = mCamera.getParameters();
-            final Camera.Size pictureSize = chooseBestPictureSize();
-            final Camera.Size previewSize = chooseBestPreviewSize(pictureSize);
-            params.setPreviewSize(previewSize.width, previewSize.height);
-            params.setPictureSize(pictureSize.width, pictureSize.height);
-            logCameraSize("Setting preview size: ", previewSize);
-            logCameraSize("Setting picture size: ", pictureSize);
-            mCameraPreview.setSize(previewSize, mCameraInfo.orientation);
-            for (final String focusMode : params.getSupportedFocusModes()) {
-                if (TextUtils.equals(focusMode, Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
-                    // Use continuous focus if available
-                    params.setFocusMode(focusMode);
-                    break;
-                }
-            }
-
-            mCamera.setParameters(params);
-            mCameraPreview.startPreview(mCamera);
-            mCamera.startPreview();
-            mCamera.setAutoFocusMoveCallback(new Camera.AutoFocusMoveCallback() {
-                @Override
-                public void onAutoFocusMoving(final boolean start, final Camera camera) {
-                    mFocusOverlayManager.onAutoFocusMoving(start);
-                }
-            });
-            mFocusOverlayManager.setParameters(mCamera.getParameters());
-            mFocusOverlayManager.setMirror(mCameraInfo.facing == CameraInfo.CAMERA_FACING_BACK);
-            mFocusOverlayManager.onPreviewStarted();
-            tryInitOrCleanupVideoMode();
-            if (mOrientationHandler == null) {
-                mOrientationHandler = new OrientationHandler(mCameraPreview.getContext());
-                mOrientationHandler.enable();
-            }
-        } catch (final IOException e) {
-            LogUtil.e(TAG, "IOException in CameraManager.tryShowPreview", e);
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_SHOWING_PREVIEW, e);
-            }
-        } catch (final RuntimeException e) {
-            LogUtil.e(TAG, "RuntimeException in CameraManager.tryShowPreview", e);
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_SHOWING_PREVIEW, e);
-            }
-        }
-    }
-
-    private void tryInitOrCleanupVideoMode() {
-        if (!mVideoModeRequested || mCamera == null || mCameraPreview == null) {
-            releaseMediaRecorder(true /* cleanupFile */);
-            return;
-        }
-
-        if (mMediaRecorder != null) {
-            return;
-        }
-
-        try {
-            mCamera.unlock();
-            final int maxMessageSize = getMmsConfig().getMaxMessageSize();
-            mMediaRecorder = new MmsVideoRecorder(mCamera, mCameraIndex, mRotation, maxMessageSize);
-            mMediaRecorder.prepare();
-        } catch (final FileNotFoundException e) {
-            LogUtil.e(TAG, "FileNotFoundException in CameraManager.tryInitOrCleanupVideoMode", e);
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_STORAGE_FAILURE, e);
-            }
-            setVideoMode(false);
-            return;
-        } catch (final IOException e) {
-            LogUtil.e(TAG, "IOException in CameraManager.tryInitOrCleanupVideoMode", e);
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_INITIALIZING_VIDEO, e);
-            }
-            setVideoMode(false);
-            return;
-        } catch (final RuntimeException e) {
-            LogUtil.e(TAG, "RuntimeException in CameraManager.tryInitOrCleanupVideoMode", e);
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_INITIALIZING_VIDEO, e);
-            }
-            setVideoMode(false);
-            return;
-        }
-
-        tryStartVideoCapture();
-    }
-
-    private void tryStartVideoCapture() {
-        if (mMediaRecorder == null || mVideoCallback == null) {
-            return;
-        }
-
-        mMediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
-            @Override
-            public void onError(final MediaRecorder mediaRecorder, final int what,
-                    final int extra) {
-                if (mListener != null) {
-                    mListener.onCameraError(ERROR_RECORDING_VIDEO, null);
-                }
-                restoreRequestedOrientation();
-            }
-        });
-
-        mMediaRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
-            @Override
-            public void onInfo(final MediaRecorder mediaRecorder, final int what, final int extra) {
-                if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED ||
-                        what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED) {
-                    stopVideo();
-                }
-            }
-        });
-
-        try {
-            mMediaRecorder.start();
-            final Activity activity = UiUtils.getActivity(mCameraPreview.getContext());
-            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-            lockOrientation();
-        } catch (final IllegalStateException e) {
-            LogUtil.e(TAG, "IllegalStateException in CameraManager.tryStartVideoCapture", e);
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_RECORDING_VIDEO, e);
-            }
-            setVideoMode(false);
-            restoreRequestedOrientation();
-        } catch (final RuntimeException e) {
-            LogUtil.e(TAG, "RuntimeException in CameraManager.tryStartVideoCapture", e);
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_RECORDING_VIDEO, e);
-            }
-            setVideoMode(false);
-            restoreRequestedOrientation();
-        }
-    }
-
-    void stopVideo() {
-        int width = ImageRequest.UNSPECIFIED_SIZE;
-        int height = ImageRequest.UNSPECIFIED_SIZE;
-        Uri uri = null;
-        String contentType = null;
-        try {
-            final Activity activity = UiUtils.getActivity(mCameraPreview.getContext());
-            activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-            mMediaRecorder.stop();
-            width = mMediaRecorder.getVideoWidth();
-            height = mMediaRecorder.getVideoHeight();
-            uri = mMediaRecorder.getVideoUri();
-            contentType = mMediaRecorder.getContentType();
-        } catch (final RuntimeException e) {
-            // MediaRecorder.stop will throw a RuntimeException if the video was too short, let the
-            // finally clause call the callback with null uri and handle cleanup
-            LogUtil.e(TAG, "RuntimeException in CameraManager.stopVideo", e);
-        } finally {
-            final MediaCallback videoCallback = mVideoCallback;
-            mVideoCallback = null;
-            releaseMediaRecorder(false /* cleanupFile */);
-            if (uri == null) {
-                tryInitOrCleanupVideoMode();
-            }
-            videoCallback.onMediaReady(uri, contentType, width, height);
-        }
-    }
-
-    boolean isCameraAvailable() {
-        return mCamera != null && !mTakingPicture && mIsHardwareAccelerationSupported;
-    }
-
-    /**
-     * External components call into this to report if hardware acceleration is supported.  When
-     * hardware acceleration isn't supported, we need to report an error through the listener
-     * interface
-     * @param isHardwareAccelerationSupported True if the preview is rendering in a hardware
-     *                                        accelerated view.
-     */
-    void reportHardwareAccelerationSupported(final boolean isHardwareAccelerationSupported) {
-        Assert.isMainThread();
-        if (mIsHardwareAccelerationSupported == isHardwareAccelerationSupported) {
-            // If the value hasn't changed nothing more to do
-            return;
-        }
-
-        mIsHardwareAccelerationSupported = isHardwareAccelerationSupported;
-        if (!isHardwareAccelerationSupported) {
-            LogUtil.e(TAG, "Software rendering - cannot open camera");
-            if (mListener != null) {
-                mListener.onCameraError(ERROR_HARDWARE_ACCELERATION_DISABLED, null);
-            }
-        }
-    }
-
-    /** Returns the scale factor to scale the width/height to max allowed in MmsConfig */
-    private float getScaleFactorForMaxAllowedSize(final int width, final int height,
-            final int maxWidth, final int maxHeight) {
-        if (maxWidth <= 0 || maxHeight <= 0) {
-            // MmsConfig initialization runs asynchronously on application startup, so there's a
-            // chance (albeit a very slight one) that we don't have it yet.
-            LogUtil.w(LogUtil.BUGLE_TAG, "Max image size not loaded in MmsConfig");
-            return 1.0f;
-        }
-
-        if (width <= maxWidth && height <= maxHeight) {
-            // Already meeting requirements.
-            return 1.0f;
-        }
-
-        return Math.min(maxWidth * 1.0f / width, maxHeight * 1.0f / height);
-    }
-
-    private MmsConfig getMmsConfig() {
-        final int subId = mSubscriptionDataProvider != null ?
-                mSubscriptionDataProvider.getConversationSelfSubId() :
-                ParticipantData.DEFAULT_SELF_SUB_ID;
-        return MmsConfig.get(subId);
-    }
-
-    /**
-     * Choose the best picture size by trying to find a size close to the MmsConfig's max size,
-     * which is closest to the screen aspect ratio
-     */
-    private Camera.Size chooseBestPictureSize() {
-        final Context context = mCameraPreview.getContext();
-        final Resources resources = context.getResources();
-        final DisplayMetrics displayMetrics = resources.getDisplayMetrics();
-        final int displayOrientation = resources.getConfiguration().orientation;
-        int cameraOrientation = mCameraInfo.orientation;
-
-        int screenWidth;
-        int screenHeight;
-        if (displayOrientation == Configuration.ORIENTATION_LANDSCAPE) {
-            // Rotate the camera orientation 90 degrees to compensate for the rotated display
-            // metrics. Direction doesn't matter because we're just using it for width/height
-            cameraOrientation += 90;
-        }
-
-        // Check the camera orientation relative to the display.
-        // For 0, 180, 360, the screen width/height are the display width/height
-        // For 90, 270, the screen width/height are inverted from the display
-        if (cameraOrientation % 180 == 0) {
-            screenWidth = displayMetrics.widthPixels;
-            screenHeight = displayMetrics.heightPixels;
-        } else {
-            screenWidth = displayMetrics.heightPixels;
-            screenHeight = displayMetrics.widthPixels;
-        }
-
-        final MmsConfig mmsConfig = getMmsConfig();
-        final int maxWidth = mmsConfig.getMaxImageWidth();
-        final int maxHeight = mmsConfig.getMaxImageHeight();
-
-        // Constrain the size within the max width/height defined by MmsConfig.
-        final float scaleFactor = getScaleFactorForMaxAllowedSize(screenWidth, screenHeight,
-                maxWidth, maxHeight);
-        screenWidth *= scaleFactor;
-        screenHeight *= scaleFactor;
-
-        final float aspectRatio = BugleGservices.get().getFloat(
-                BugleGservicesKeys.CAMERA_ASPECT_RATIO,
-                screenWidth / (float) screenHeight);
-        final List<Camera.Size> sizes = new ArrayList<Camera.Size>(
-                mCamera.getParameters().getSupportedPictureSizes());
-        final int maxPixels = maxWidth * maxHeight;
-
-        // Sort the sizes so the best size is first
-        Collections.sort(sizes, new SizeComparator(maxWidth, maxHeight, aspectRatio, maxPixels));
-
-        return sizes.get(0);
-    }
-
-    /**
-     * Chose the best preview size based on the picture size.  Try to find a size with the same
-     * aspect ratio and size as the picture if possible
-     */
-    private Camera.Size chooseBestPreviewSize(final Camera.Size pictureSize) {
-        final List<Camera.Size> sizes = new ArrayList<Camera.Size>(
-                mCamera.getParameters().getSupportedPreviewSizes());
-        final float aspectRatio = pictureSize.width / (float) pictureSize.height;
-        final int capturePixels = pictureSize.width * pictureSize.height;
-
-        // Sort the sizes so the best size is first
-        Collections.sort(sizes, new SizeComparator(Integer.MAX_VALUE, Integer.MAX_VALUE,
-                aspectRatio, capturePixels));
-
-        return sizes.get(0);
-    }
-
-    private class OrientationHandler extends OrientationEventListener {
-        OrientationHandler(final Context context) {
-            super(context);
-        }
-
-        @Override
-        public void onOrientationChanged(final int orientation) {
-            updateCameraOrientation();
-        }
-    }
-
-    private static class SizeComparator implements Comparator<Camera.Size> {
-        private static final int PREFER_LEFT = -1;
-        private static final int PREFER_RIGHT = 1;
-
-        // The max width/height for the preferred size. Integer.MAX_VALUE if no size limit
-        private final int mMaxWidth;
-        private final int mMaxHeight;
-
-        // The desired aspect ratio
-        private final float mTargetAspectRatio;
-
-        // The desired size (width x height) to try to match
-        private final int mTargetPixels;
-
-        public SizeComparator(final int maxWidth, final int maxHeight,
-                              final float targetAspectRatio, final int targetPixels) {
-            mMaxWidth = maxWidth;
-            mMaxHeight = maxHeight;
-            mTargetAspectRatio = targetAspectRatio;
-            mTargetPixels = targetPixels;
-        }
-
-        /**
-         * Returns a negative value if left is a better choice than right, or a positive value if
-         * right is a better choice is better than left.  0 if they are equal
-         */
-        @Override
-        public int compare(final Camera.Size left, final Camera.Size right) {
-            // If one size is less than the max size prefer it over the other
-            if ((left.width <= mMaxWidth && left.height <= mMaxHeight) !=
-                    (right.width <= mMaxWidth && right.height <= mMaxHeight)) {
-                return left.width <= mMaxWidth ? PREFER_LEFT : PREFER_RIGHT;
-            }
-
-            // If one is closer to the target aspect ratio, prefer it.
-            final float leftAspectRatio = left.width / (float) left.height;
-            final float rightAspectRatio = right.width / (float) right.height;
-            final float leftAspectRatioDiff = Math.abs(leftAspectRatio - mTargetAspectRatio);
-            final float rightAspectRatioDiff = Math.abs(rightAspectRatio - mTargetAspectRatio);
-            if (leftAspectRatioDiff != rightAspectRatioDiff) {
-                return (leftAspectRatioDiff - rightAspectRatioDiff) < 0 ?
-                        PREFER_LEFT : PREFER_RIGHT;
-            }
-
-            // At this point they have the same aspect ratio diff and are either both bigger
-            // than the max size or both smaller than the max size, so prefer the one closest
-            // to target size
-            final int leftDiff = Math.abs((left.width * left.height) - mTargetPixels);
-            final int rightDiff = Math.abs((right.width * right.height) - mTargetPixels);
-            return leftDiff - rightDiff;
-        }
-    }
-
-    @Override // From FocusOverlayManager.Listener
-    public void autoFocus() {
-        if (mCamera == null) {
-            return;
-        }
-
-        try {
-            mCamera.autoFocus(new Camera.AutoFocusCallback() {
-                @Override
-                public void onAutoFocus(final boolean success, final Camera camera) {
-                    mFocusOverlayManager.onAutoFocus(success, false /* shutterDown */);
-                }
-            });
-        } catch (final RuntimeException e) {
-            LogUtil.e(TAG, "RuntimeException in CameraManager.autoFocus", e);
-            // If autofocus fails, the camera should have called the callback with success=false,
-            // but some throw an exception here
-            mFocusOverlayManager.onAutoFocus(false /*success*/, false /*shutterDown*/);
-        }
-    }
-
-    @Override // From FocusOverlayManager.Listener
-    public void cancelAutoFocus() {
-        if (mCamera == null) {
-            return;
-        }
-        try {
-            mCamera.cancelAutoFocus();
-        } catch (final RuntimeException e) {
-            // Ignore
-            LogUtil.e(TAG, "RuntimeException in CameraManager.cancelAutoFocus", e);
-        }
-    }
-
-    @Override // From FocusOverlayManager.Listener
-    public boolean capture() {
-        return false;
-    }
-
-    @Override // From FocusOverlayManager.Listener
-    public void setFocusParameters() {
-        if (mCamera == null) {
-            return;
-        }
-        try {
-            final Camera.Parameters parameters = mCamera.getParameters();
-            parameters.setFocusMode(mFocusOverlayManager.getFocusMode());
-            if (parameters.getMaxNumFocusAreas() > 0) {
-                // Don't set focus areas (even to null) if focus areas aren't supported, camera may
-                // crash
-                parameters.setFocusAreas(mFocusOverlayManager.getFocusAreas());
-            }
-            parameters.setMeteringAreas(mFocusOverlayManager.getMeteringAreas());
-            mCamera.setParameters(parameters);
-        } catch (final RuntimeException e) {
-            // This occurs when the device is out of space or when the camera is locked
-            LogUtil.e(TAG, "RuntimeException in CameraManager setFocusParameters");
-        }
-    }
-
-    private void logCameraSize(final String prefix, final Camera.Size size) {
-        // Log the camera size and aspect ratio for help when examining bug reports for camera
-        // failures
-        LogUtil.i(TAG, prefix + size.width + "x" + size.height +
-                " (" + (size.width / (float) size.height) + ")");
-    }
-
-
-    private Integer mSavedOrientation = null;
-
-    private void lockOrientation() {
-        // when we start recording, lock our orientation
-        final Activity a = UiUtils.getActivity(mCameraPreview.getContext());
-        final WindowManager windowManager =
-                (WindowManager) a.getSystemService(Context.WINDOW_SERVICE);
-        final int rotation = windowManager.getDefaultDisplay().getRotation();
-
-        mSavedOrientation = a.getRequestedOrientation();
-        switch (rotation) {
-            case Surface.ROTATION_0:
-                a.setRequestedOrientation(
-                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
-                break;
-            case Surface.ROTATION_90:
-                a.setRequestedOrientation(
-                        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
-                break;
-            case Surface.ROTATION_180:
-                a.setRequestedOrientation(
-                        ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
-                break;
-            case Surface.ROTATION_270:
-                a.setRequestedOrientation(
-                        ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
-                break;
-        }
-
-    }
-
-    private void restoreRequestedOrientation() {
-        if (mSavedOrientation != null) {
-            final Activity a = UiUtils.getActivity(mCameraPreview.getContext());
-            if (a != null) {
-                a.setRequestedOrientation(mSavedOrientation);
-            }
-            mSavedOrientation = null;
-        }
-    }
-
-    static boolean hasCameraPermission() {
-        return OsUtil.hasPermission(Manifest.permission.CAMERA);
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/CameraMediaChooser.java b/src/com/android/messaging/ui/mediapicker/CameraMediaChooser.java
deleted file mode 100644
index 2c7a7f2..0000000
--- a/src/com/android/messaging/ui/mediapicker/CameraMediaChooser.java
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.Manifest;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.graphics.Rect;
-import android.hardware.Camera;
-import android.net.Uri;
-import android.os.SystemClock;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.AlphaAnimation;
-import android.view.animation.Animation;
-import android.view.animation.AnimationSet;
-import android.widget.Chronometer;
-import android.widget.ImageButton;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.MediaPickerMessagePartData;
-import com.android.messaging.ui.mediapicker.CameraManager.MediaCallback;
-import com.android.messaging.ui.mediapicker.camerafocus.RenderOverlay;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.UiUtils;
-
-/**
- * Chooser which allows the user to take pictures or video without leaving the current app/activity
- */
-class CameraMediaChooser extends MediaChooser implements
-        CameraManager.CameraManagerListener {
-    private CameraPreview.CameraPreviewHost mCameraPreviewHost;
-    private ImageButton mFullScreenButton;
-    private ImageButton mSwapCameraButton;
-    private ImageButton mSwapModeButton;
-    private ImageButton mCaptureButton;
-    private ImageButton mCancelVideoButton;
-    private Chronometer mVideoCounter;
-    private boolean mVideoCancelled;
-    private int mErrorToast;
-    private View mEnabledView;
-    private View mMissingPermissionView;
-
-    CameraMediaChooser(final MediaPicker mediaPicker) {
-        super(mediaPicker);
-    }
-
-    @Override
-    public int getSupportedMediaTypes() {
-        if (CameraManager.get().hasAnyCamera()) {
-            return MediaPicker.MEDIA_TYPE_IMAGE | MediaPicker.MEDIA_TYPE_VIDEO;
-        } else {
-            return MediaPicker.MEDIA_TYPE_NONE;
-        }
-    }
-
-    @Override
-    public View destroyView() {
-        CameraManager.get().closeCamera();
-        CameraManager.get().setListener(null);
-        CameraManager.get().setSubscriptionDataProvider(null);
-        return super.destroyView();
-    }
-
-    @Override
-    protected View createView(final ViewGroup container) {
-        CameraManager.get().setListener(this);
-        CameraManager.get().setSubscriptionDataProvider(this);
-        CameraManager.get().setVideoMode(false);
-        final LayoutInflater inflater = getLayoutInflater();
-        final CameraMediaChooserView view = (CameraMediaChooserView) inflater.inflate(
-                R.layout.mediapicker_camera_chooser,
-                container /* root */,
-                false /* attachToRoot */);
-        mCameraPreviewHost = (CameraPreview.CameraPreviewHost) view.findViewById(
-                R.id.camera_preview);
-        mCameraPreviewHost.getView().setOnTouchListener(new View.OnTouchListener() {
-            @Override
-            public boolean onTouch(final View view, final MotionEvent motionEvent) {
-                if (CameraManager.get().isVideoMode()) {
-                    // Prevent the swipe down in video mode because video is always captured in
-                    // full screen
-                    return true;
-                }
-
-                return false;
-            }
-        });
-
-        final View shutterVisual = view.findViewById(R.id.camera_shutter_visual);
-
-        mFullScreenButton = (ImageButton) view.findViewById(R.id.camera_fullScreen_button);
-        mFullScreenButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(final View view) {
-                mMediaPicker.setFullScreen(true);
-            }
-        });
-
-        mSwapCameraButton = (ImageButton) view.findViewById(R.id.camera_swapCamera_button);
-        mSwapCameraButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(final View view) {
-                CameraManager.get().swapCamera();
-            }
-        });
-
-        mCaptureButton = (ImageButton) view.findViewById(R.id.camera_capture_button);
-        mCaptureButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(final View v) {
-                final float heightPercent = Math.min(mMediaPicker.getViewPager().getHeight() /
-                        (float) mCameraPreviewHost.getView().getHeight(), 1);
-
-                if (CameraManager.get().isRecording()) {
-                    CameraManager.get().stopVideo();
-                } else {
-                    final CameraManager.MediaCallback callback = new CameraManager.MediaCallback() {
-                        @Override
-                        public void onMediaReady(
-                                final Uri uriToVideo, final String contentType,
-                                final int width, final int height) {
-                            mVideoCounter.stop();
-                            if (mVideoCancelled || uriToVideo == null) {
-                                mVideoCancelled = false;
-                            } else {
-                                final Rect startRect = new Rect();
-                                // It's possible to throw out the chooser while taking the
-                                // picture/video.  In that case, still use the attachment, just
-                                // skip the startRect
-                                if (mView != null) {
-                                    mView.getGlobalVisibleRect(startRect);
-                                }
-                                mMediaPicker.dispatchItemsSelected(
-                                        new MediaPickerMessagePartData(startRect, contentType,
-                                                uriToVideo, width, height),
-                                        true /* dismissMediaPicker */);
-                            }
-                            updateViewState();
-                        }
-
-                        @Override
-                        public void onMediaFailed(final Exception exception) {
-                            UiUtils.showToastAtBottom(R.string.camera_media_failure);
-                            updateViewState();
-                        }
-
-                        @Override
-                        public void onMediaInfo(final int what) {
-                            if (what == MediaCallback.MEDIA_NO_DATA) {
-                                UiUtils.showToastAtBottom(R.string.camera_media_failure);
-                            }
-                            updateViewState();
-                        }
-                    };
-                    if (CameraManager.get().isVideoMode()) {
-                        CameraManager.get().startVideo(callback);
-                        mVideoCounter.setBase(SystemClock.elapsedRealtime());
-                        mVideoCounter.start();
-                        updateViewState();
-                    } else {
-                        showShutterEffect(shutterVisual);
-                        CameraManager.get().takePicture(heightPercent, callback);
-                        updateViewState();
-                    }
-                }
-            }
-        });
-
-        mSwapModeButton = (ImageButton) view.findViewById(R.id.camera_swap_mode_button);
-        mSwapModeButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(final View view) {
-                final boolean isSwitchingToVideo = !CameraManager.get().isVideoMode();
-                if (isSwitchingToVideo && !OsUtil.hasRecordAudioPermission()) {
-                    requestRecordAudioPermission();
-                } else {
-                    onSwapMode();
-                }
-            }
-        });
-
-        mCancelVideoButton = (ImageButton) view.findViewById(R.id.camera_cancel_button);
-        mCancelVideoButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(final View view) {
-                mVideoCancelled = true;
-                CameraManager.get().stopVideo();
-                mMediaPicker.dismiss(true);
-            }
-        });
-
-        mVideoCounter = (Chronometer) view.findViewById(R.id.camera_video_counter);
-
-        CameraManager.get().setRenderOverlay((RenderOverlay) view.findViewById(R.id.focus_visual));
-
-        mEnabledView = view.findViewById(R.id.mediapicker_enabled);
-        mMissingPermissionView = view.findViewById(R.id.missing_permission_view);
-
-        // Must set mView before calling updateViewState because it operates on mView
-        mView = view;
-        updateViewState();
-        updateForPermissionState(CameraManager.hasCameraPermission());
-        return view;
-    }
-
-    @Override
-    public int getIconResource() {
-        return R.drawable.ic_camera_light;
-    }
-
-    @Override
-    public int getIconDescriptionResource() {
-        return R.string.mediapicker_cameraChooserDescription;
-    }
-
-    /**
-     * Updates the view when entering or leaving full-screen camera mode
-     * @param fullScreen
-     */
-    @Override
-    void onFullScreenChanged(final boolean fullScreen) {
-        super.onFullScreenChanged(fullScreen);
-        if (!fullScreen && CameraManager.get().isVideoMode()) {
-            CameraManager.get().setVideoMode(false);
-        }
-        updateViewState();
-    }
-
-    /**
-     * Initializes the control to a default state when it is opened / closed
-     * @param open True if the control is opened
-     */
-    @Override
-    void onOpenedChanged(final boolean open) {
-        super.onOpenedChanged(open);
-        updateViewState();
-    }
-
-    @Override
-    protected void setSelected(final boolean selected) {
-        super.setSelected(selected);
-        if (selected) {
-            if (CameraManager.hasCameraPermission()) {
-                // If an error occurred before the chooser was selected, show it now
-                showErrorToastIfNeeded();
-            } else {
-                requestCameraPermission();
-            }
-        }
-    }
-
-    private void requestCameraPermission() {
-        mMediaPicker.requestPermissions(new String[] { Manifest.permission.CAMERA },
-                MediaPicker.CAMERA_PERMISSION_REQUEST_CODE);
-    }
-
-    private void requestRecordAudioPermission() {
-        mMediaPicker.requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO },
-                MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE);
-    }
-
-    @Override
-    protected void onRequestPermissionsResult(
-            final int requestCode, final String permissions[], final int[] grantResults) {
-        if (requestCode == MediaPicker.CAMERA_PERMISSION_REQUEST_CODE) {
-            final boolean permissionGranted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
-            updateForPermissionState(permissionGranted);
-            if (permissionGranted) {
-                mCameraPreviewHost.onCameraPermissionGranted();
-            }
-        } else if (requestCode == MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE) {
-            Assert.isFalse(CameraManager.get().isVideoMode());
-            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
-                // Switch to video mode
-                onSwapMode();
-            } else {
-                // Stay in still-photo mode
-            }
-        }
-    }
-
-    private void updateForPermissionState(final boolean granted) {
-        // onRequestPermissionsResult can sometimes get called before createView().
-        if (mEnabledView == null) {
-            return;
-        }
-
-        mEnabledView.setVisibility(granted ? View.VISIBLE : View.GONE);
-        mMissingPermissionView.setVisibility(granted ? View.GONE : View.VISIBLE);
-    }
-
-    @Override
-    public boolean canSwipeDown() {
-        if (CameraManager.get().isVideoMode()) {
-            return true;
-        }
-        return super.canSwipeDown();
-    }
-
-    /**
-     * Handles an error from the camera manager by showing the appropriate error message to the user
-     * @param errorCode One of the CameraManager.ERROR_* constants
-     * @param e The exception which caused the error, if any
-     */
-    @Override
-    public void onCameraError(final int errorCode, final Exception e) {
-        switch (errorCode) {
-            case CameraManager.ERROR_OPENING_CAMERA:
-            case CameraManager.ERROR_SHOWING_PREVIEW:
-                mErrorToast = R.string.camera_error_opening;
-                break;
-            case CameraManager.ERROR_INITIALIZING_VIDEO:
-                mErrorToast = R.string.camera_error_video_init_fail;
-                updateViewState();
-                break;
-            case CameraManager.ERROR_STORAGE_FAILURE:
-                mErrorToast = R.string.camera_error_storage_fail;
-                updateViewState();
-                break;
-            case CameraManager.ERROR_TAKING_PICTURE:
-                mErrorToast = R.string.camera_error_failure_taking_picture;
-                break;
-            default:
-                mErrorToast = R.string.camera_error_unknown;
-                LogUtil.w(LogUtil.BUGLE_TAG, "Unknown camera error:" + errorCode);
-                break;
-        }
-        showErrorToastIfNeeded();
-    }
-
-    private void showErrorToastIfNeeded() {
-        if (mErrorToast != 0 && mSelected) {
-            UiUtils.showToastAtBottom(mErrorToast);
-            mErrorToast = 0;
-        }
-    }
-
-    @Override
-    public void onCameraChanged() {
-        updateViewState();
-    }
-
-    private void onSwapMode() {
-        CameraManager.get().setVideoMode(!CameraManager.get().isVideoMode());
-        if (CameraManager.get().isVideoMode()) {
-            mMediaPicker.setFullScreen(true);
-
-            // For now we start recording immediately
-            mCaptureButton.performClick();
-        }
-        updateViewState();
-    }
-
-    private void showShutterEffect(final View shutterVisual) {
-        final float maxAlpha = getContext().getResources().getFraction(
-                R.fraction.camera_shutter_max_alpha, 1 /* base */, 1 /* pBase */);
-
-        // Divide by 2 so each half of the animation adds up to the full duration
-        final int animationDuration = getContext().getResources().getInteger(
-                R.integer.camera_shutter_duration) / 2;
-
-        final AnimationSet animation = new AnimationSet(false /* shareInterpolator */);
-        final Animation alphaInAnimation = new AlphaAnimation(0.0f, maxAlpha);
-        alphaInAnimation.setDuration(animationDuration);
-        animation.addAnimation(alphaInAnimation);
-
-        final Animation alphaOutAnimation = new AlphaAnimation(maxAlpha, 0.0f);
-        alphaOutAnimation.setStartOffset(animationDuration);
-        alphaOutAnimation.setDuration(animationDuration);
-        animation.addAnimation(alphaOutAnimation);
-
-        animation.setAnimationListener(new Animation.AnimationListener() {
-            @Override
-            public void onAnimationStart(final Animation animation) {
-                shutterVisual.setVisibility(View.VISIBLE);
-            }
-
-            @Override
-            public void onAnimationEnd(final Animation animation) {
-                shutterVisual.setVisibility(View.GONE);
-            }
-
-            @Override
-            public void onAnimationRepeat(final Animation animation) {
-            }
-        });
-        shutterVisual.startAnimation(animation);
-    }
-
-    /** Updates the state of the buttons and overlays based on the current state of the view */
-    private void updateViewState() {
-        if (mView == null) {
-            return;
-        }
-
-        final Context context = getContext();
-        if (context == null) {
-            // Context is null if the fragment was already removed from the activity
-            return;
-        }
-        final boolean fullScreen = mMediaPicker.isFullScreen();
-        final boolean videoMode = CameraManager.get().isVideoMode();
-        final boolean isRecording = CameraManager.get().isRecording();
-        final boolean isCameraAvailable = isCameraAvailable();
-        final Camera.CameraInfo cameraInfo = CameraManager.get().getCameraInfo();
-        final boolean frontCamera = cameraInfo != null && cameraInfo.facing ==
-                Camera.CameraInfo.CAMERA_FACING_FRONT;
-
-        mView.setSystemUiVisibility(
-                fullScreen ? View.SYSTEM_UI_FLAG_LOW_PROFILE :
-                View.SYSTEM_UI_FLAG_VISIBLE);
-
-        mFullScreenButton.setVisibility(!fullScreen ? View.VISIBLE : View.GONE);
-        mFullScreenButton.setEnabled(isCameraAvailable);
-        mSwapCameraButton.setVisibility(
-                fullScreen && !isRecording && CameraManager.get().hasFrontAndBackCamera() ?
-                        View.VISIBLE : View.GONE);
-        mSwapCameraButton.setImageResource(frontCamera ?
-                R.drawable.ic_camera_front_light :
-                R.drawable.ic_camera_rear_light);
-        mSwapCameraButton.setEnabled(isCameraAvailable);
-
-        mCancelVideoButton.setVisibility(isRecording ? View.VISIBLE : View.GONE);
-        mVideoCounter.setVisibility(isRecording ? View.VISIBLE : View.GONE);
-
-        mSwapModeButton.setImageResource(videoMode ?
-                R.drawable.ic_mp_camera_small_light :
-                R.drawable.ic_mp_video_small_light);
-        mSwapModeButton.setContentDescription(context.getString(videoMode ?
-                R.string.camera_switch_to_still_mode : R.string.camera_switch_to_video_mode));
-        mSwapModeButton.setVisibility(isRecording ? View.GONE : View.VISIBLE);
-        mSwapModeButton.setEnabled(isCameraAvailable);
-
-        if (isRecording) {
-            mCaptureButton.setImageResource(R.drawable.ic_mp_capture_stop_large_light);
-            mCaptureButton.setContentDescription(context.getString(
-                    R.string.camera_stop_recording));
-        } else if (videoMode) {
-            mCaptureButton.setImageResource(R.drawable.ic_mp_video_large_light);
-            mCaptureButton.setContentDescription(context.getString(
-                    R.string.camera_start_recording));
-        } else {
-            mCaptureButton.setImageResource(R.drawable.ic_checkmark_large_light);
-            mCaptureButton.setContentDescription(context.getString(
-                    R.string.camera_take_picture));
-        }
-        mCaptureButton.setEnabled(isCameraAvailable);
-    }
-
-    @Override
-    int getActionBarTitleResId() {
-        return 0;
-    }
-
-    /**
-     * Returns if the camera is currently ready camera is loaded and not taking a picture.
-     * otherwise we should avoid taking another picture, swapping camera or recording video.
-     */
-    private boolean isCameraAvailable() {
-        return CameraManager.get().isCameraAvailable();
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/CameraMediaChooserView.java b/src/com/android/messaging/ui/mediapicker/CameraMediaChooserView.java
deleted file mode 100644
index 64c07b2..0000000
--- a/src/com/android/messaging/ui/mediapicker/CameraMediaChooserView.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.hardware.Camera;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.util.AttributeSet;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import com.android.messaging.R;
-import com.android.messaging.ui.PersistentInstanceState;
-import com.android.messaging.util.ThreadUtil;
-
-public class CameraMediaChooserView extends FrameLayout implements PersistentInstanceState {
-    private static final String KEY_CAMERA_INDEX = "camera_index";
-
-    // True if we have at least queued an update to the view tree to support software rendering
-    // fallback
-    private boolean mIsSoftwareFallbackActive;
-
-    public CameraMediaChooserView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected Parcelable onSaveInstanceState() {
-        final Bundle bundle = new Bundle();
-        bundle.putInt(KEY_CAMERA_INDEX, CameraManager.get().getCameraIndex());
-        return bundle;
-    }
-
-    @Override
-    protected void onRestoreInstanceState(final Parcelable state) {
-        if (!(state instanceof Bundle)) {
-            return;
-        }
-
-        final Bundle bundle = (Bundle) state;
-        CameraManager.get().selectCameraByIndex(bundle.getInt(KEY_CAMERA_INDEX));
-    }
-
-    @Override
-    public Parcelable saveState() {
-        return onSaveInstanceState();
-    }
-
-    @Override
-    public void restoreState(final Parcelable restoredState) {
-        onRestoreInstanceState(restoredState);
-    }
-
-    @Override
-    public void resetState() {
-        CameraManager.get().selectCamera(Camera.CameraInfo.CAMERA_FACING_BACK);
-    }
-
-    @Override
-    protected void onDraw(final Canvas canvas) {
-        super.onDraw(canvas);
-        // If the canvas isn't hardware accelerated, we have to replace the HardwareCameraPreview
-        // with a SoftwareCameraPreview which supports software rendering
-        if (!canvas.isHardwareAccelerated() && !mIsSoftwareFallbackActive) {
-            mIsSoftwareFallbackActive = true;
-            // Post modifying the tree since we can't modify the view tree during a draw pass
-            ThreadUtil.getMainThreadHandler().post(new Runnable() {
-                @Override
-                public void run() {
-                    final HardwareCameraPreview cameraPreview =
-                            (HardwareCameraPreview) findViewById(R.id.camera_preview);
-                    if (cameraPreview == null) {
-                        return;
-                    }
-                    final ViewGroup parent = ((ViewGroup) cameraPreview.getParent());
-                    final int index = parent.indexOfChild(cameraPreview);
-                    final SoftwareCameraPreview softwareCameraPreview =
-                            new SoftwareCameraPreview(getContext());
-                    // Be sure to remove the hardware view before adding the software view to
-                    // prevent having 2 camera previews active at the same time
-                    parent.removeView(cameraPreview);
-                    parent.addView(softwareCameraPreview, index);
-                }
-            });
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/CameraPreview.java b/src/com/android/messaging/ui/mediapicker/CameraPreview.java
deleted file mode 100644
index ecac978..0000000
--- a/src/com/android/messaging/ui/mediapicker/CameraPreview.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.hardware.Camera;
-import android.view.View;
-import android.view.View.MeasureSpec;
-import com.android.messaging.util.Assert;
-
-import java.io.IOException;
-
-/**
- * Contains shared code for SoftwareCameraPreview and HardwareCameraPreview, cannot use inheritance
- * because those classes must inherit from separate Views, so those classes delegate calls to this
- * helper class.  Specifics for each implementation are in CameraPreviewHost
- */
-public class CameraPreview {
-    public interface CameraPreviewHost {
-        View getView();
-        boolean isValid();
-        void startPreview(final Camera camera) throws IOException;
-        void onCameraPermissionGranted();
-
-    }
-
-    private int mCameraWidth = -1;
-    private int mCameraHeight = -1;
-
-    private final CameraPreviewHost mHost;
-
-    public CameraPreview(final CameraPreviewHost host) {
-        Assert.notNull(host);
-        Assert.notNull(host.getView());
-        mHost = host;
-    }
-
-    public void setSize(final Camera.Size size, final int orientation) {
-        switch (orientation) {
-            case 0:
-            case 180:
-                mCameraWidth = size.width;
-                mCameraHeight = size.height;
-                break;
-            case 90:
-            case 270:
-            default:
-                mCameraWidth = size.height;
-                mCameraHeight = size.width;
-        }
-        mHost.getView().requestLayout();
-    }
-
-    public int getWidthMeasureSpec(final int widthMeasureSpec, final int heightMeasureSpec) {
-        if (mCameraHeight >= 0) {
-            final int width = View.MeasureSpec.getSize(widthMeasureSpec);
-            return MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
-        } else {
-            return widthMeasureSpec;
-        }
-    }
-
-    public int getHeightMeasureSpec(final int widthMeasureSpec, final int heightMeasureSpec) {
-        if (mCameraHeight >= 0) {
-            final int orientation = getContext().getResources().getConfiguration().orientation;
-            final int width = View.MeasureSpec.getSize(widthMeasureSpec);
-            final float aspectRatio = (float) mCameraWidth / (float) mCameraHeight;
-            int height;
-            if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
-                height = (int) (width * aspectRatio);
-            } else {
-                height = (int) (width / aspectRatio);
-            }
-            return View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);
-        } else {
-            return heightMeasureSpec;
-        }
-    }
-
-    public void onVisibilityChanged(final int visibility) {
-        if (CameraManager.hasCameraPermission()) {
-            if (visibility == View.VISIBLE) {
-                CameraManager.get().openCamera();
-            } else {
-                CameraManager.get().closeCamera();
-            }
-        }
-    }
-
-    public Context getContext() {
-        return mHost.getView().getContext();
-    }
-
-    public void setOnTouchListener(final View.OnTouchListener listener) {
-        mHost.getView().setOnTouchListener(listener);
-    }
-
-    public int getHeight() {
-        return mHost.getView().getHeight();
-    }
-
-    public void onAttachedToWindow() {
-        if (CameraManager.hasCameraPermission()) {
-            CameraManager.get().openCamera();
-        }
-    }
-
-    public void onDetachedFromWindow() {
-        CameraManager.get().closeCamera();
-    }
-
-    public void onRestoreInstanceState() {
-        if (CameraManager.hasCameraPermission()) {
-            CameraManager.get().openCamera();
-        }
-    }
-
-    public void onCameraPermissionGranted() {
-        CameraManager.get().openCamera();
-    }
-
-    /**
-     * @return True if the view is valid and prepared for the camera to start showing the preview
-     */
-    public boolean isValid() {
-        return mHost.isValid();
-    }
-
-    /**
-     * Starts the camera preview on the current surface.  Abstracts out the differences in API
-     * from the CameraManager
-     * @throws IOException Which is caught by the CameraManager to display an error
-     */
-    public void startPreview(final Camera camera) throws IOException {
-        mHost.startPreview(camera);
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/ContactMediaChooser.java b/src/com/android/messaging/ui/mediapicker/ContactMediaChooser.java
deleted file mode 100644
index a81ed08..0000000
--- a/src/com/android/messaging/ui/mediapicker/ContactMediaChooser.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2020 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.android.messaging.ui.mediapicker;
-
-import android.Manifest;
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract.Contacts;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.PendingAttachmentData;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.SafeAsyncTask;
-
-/**
- * Chooser which allows the user to select an existing contact from contacts apps on this device.
- * Note that this chooser requires the Manifest.permission.READ_CONTACTS which is one of the miminum
- * set of permissions for this app. Thus no case to request READ_CONTACTS permission on it actually.
- */
-class ContactMediaChooser extends MediaChooser {
-    private View mEnabledView;
-    private View mMissingPermissionView;
-
-    ContactMediaChooser(final MediaPicker mediaPicker) {
-        super(mediaPicker);
-    }
-
-    @Override
-    public int getSupportedMediaTypes() {
-        return MediaPicker.MEDIA_TYPE_VCARD;
-    }
-
-    @Override
-    public int getIconResource() {
-        return R.drawable.ic_person_light;
-    }
-
-    @Override
-    public int getIconDescriptionResource() {
-        return R.string.mediapicker_contactChooserDescription;
-    }
-
-    @Override
-    int getActionBarTitleResId() {
-        return R.string.mediapicker_contact_title;
-    }
-
-    @Override
-    protected View createView(final ViewGroup container) {
-        final LayoutInflater inflater = getLayoutInflater();
-        final View view =
-                inflater.inflate(
-                        R.layout.mediapicker_contact_chooser,
-                        container /* root */,
-                        false /* attachToRoot */);
-        mEnabledView = view.findViewById(R.id.mediapicker_enabled);
-        mMissingPermissionView = view.findViewById(R.id.missing_permission_view);
-        mEnabledView.setOnClickListener(
-                new View.OnClickListener() {
-                    @Override
-                    public void onClick(final View v) {
-                        // Launch an external picker to pick a contact as attachment.
-                        UIIntents.get().launchContactCardPicker(mMediaPicker);
-                    }
-                });
-        return view;
-    }
-
-    @Override
-    protected void setSelected(final boolean selected) {
-        super.setSelected(selected);
-        if (selected && !ContactUtil.hasReadContactsPermission()) {
-            mMediaPicker.requestPermissions(
-                    new String[] {Manifest.permission.READ_CONTACTS},
-                    MediaPicker.READ_CONTACT_PERMISSION_REQUEST_CODE);
-        }
-    }
-
-    @Override
-    protected void onRequestPermissionsResult(
-            final int requestCode, final String permissions[], final int[] grantResults) {
-        if (requestCode == MediaPicker.READ_CONTACT_PERMISSION_REQUEST_CODE) {
-            final boolean permissionGranted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
-            mEnabledView.setVisibility(permissionGranted ? View.VISIBLE : View.GONE);
-            mMissingPermissionView.setVisibility(permissionGranted ? View.GONE : View.VISIBLE);
-        }
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == UIIntents.REQUEST_PICK_CONTACT_CARD
-                && resultCode == Activity.RESULT_OK) {
-            Uri contactUri = data.getData();
-            if (contactUri != null) {
-                String lookupKey = null;
-                try (final Cursor c = getContext().getContentResolver().query(
-                                        contactUri,
-                                        new String[] {Contacts.LOOKUP_KEY},
-                                        null,
-                                        null,
-                                        null)) {
-                    if (c != null) {
-                        c.moveToFirst();
-                        lookupKey = c.getString(0);
-                    }
-                }
-                final Uri vCardUri = Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey);
-                if (vCardUri != null) {
-                    SafeAsyncTask.executeOnThreadPool(new Runnable() {
-                        @Override
-                        public void run() {
-                            final PendingAttachmentData pendingItem =
-                                    PendingAttachmentData.createPendingAttachmentData(
-                                            ContentType.TEXT_VCARD.toLowerCase(), vCardUri);
-                            mMediaPicker.dispatchPendingItemAdded(pendingItem);
-                        }
-                    });
-                }
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/DocumentImagePicker.java b/src/com/android/messaging/ui/mediapicker/DocumentImagePicker.java
deleted file mode 100644
index c36467c..0000000
--- a/src/com/android/messaging/ui/mediapicker/DocumentImagePicker.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.app.Fragment;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.data.PendingAttachmentData;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.FileUtil;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.SafeAsyncTask;
-
-/**
- * Wraps around the functionalities to allow the user to pick an image/video/audio from the document
- * picker. Instances of this class must be tied to a Fragment which is able to delegate activity
- * result callbacks.
- */
-public class DocumentImagePicker {
-
-    /**
-     * An interface for a listener that listens for when a document has been picked.
-     */
-    public interface SelectionListener {
-        /**
-         * Called when an document is selected from picker. At this point, the file hasn't been
-         * actually loaded and staged in the temp directory, so we are passing in a pending
-         * MessagePartData, which the consumer should use to display a placeholder image.
-         * @param pendingItem a temporary attachment data for showing the placeholder state.
-         */
-        void onDocumentSelected(PendingAttachmentData pendingItem);
-    }
-
-    // The owning fragment.
-    private final Fragment mFragment;
-
-    // The listener on the picker events.
-    private final SelectionListener mListener;
-
-    private static final String EXTRA_PHOTO_URL = "photo_url";
-
-    /**
-     * Creates a new instance of DocumentImagePicker.
-     * @param activity The activity that owns the picker, or the activity that hosts the owning
-     *        fragment.
-     */
-    public DocumentImagePicker(final Fragment fragment,
-            final SelectionListener listener) {
-        mFragment = fragment;
-        mListener = listener;
-    }
-
-    /**
-     * Intent out to open an image/video from document picker.
-     */
-    public void launchPicker() {
-        UIIntents.get().launchDocumentImagePicker(mFragment);
-    }
-
-    /**
-     * Must be called from the fragment/activity's onActivityResult().
-     */
-    public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
-        // Sometimes called after media item has been picked from the document picker.
-        String url = data.getStringExtra(EXTRA_PHOTO_URL);
-        if (url == null) {
-            // we're using the builtin photo picker which supplies the return
-            // url as it's "data"
-            url = data.getDataString();
-            if (url == null) {
-                final Bundle extras = data.getExtras();
-                if (extras != null) {
-                    final Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);
-                    if (uri != null) {
-                        url = uri.toString();
-                    }
-                }
-            }
-        }
-
-        // Guard against null uri cases for when the activity returns a null/invalid intent.
-        if (url != null) {
-            final Uri uri = Uri.parse(url);
-            prepareDocumentForAttachment(uri);
-        }
-    }
-
-    private void prepareDocumentForAttachment(final Uri documentUri) {
-        // Notify our listener with a PendingAttachmentData containing the metadata.
-        // Asynchronously get the content type for the picked image since
-        // ImageUtils.getContentType() potentially involves I/O and can be expensive.
-        new SafeAsyncTask<Void, Void, String>() {
-            @Override
-            protected String doInBackgroundTimed(final Void... params) {
-                if (FileUtil.isInPrivateDir(documentUri)) {
-                    // hacker sending private app data. Bail out
-                    if (LogUtil.isLoggable(LogUtil.BUGLE_TAG, LogUtil.ERROR)) {
-                        LogUtil.e(LogUtil.BUGLE_TAG, "Aborting attach of private app data ("
-                                + documentUri + ")");
-                    }
-                    return null;
-                }
-                return ImageUtils.getContentType(
-                        Factory.get().getApplicationContext().getContentResolver(), documentUri);
-            }
-
-            @Override
-            protected void onPostExecute(final String contentType) {
-                if (contentType == null) {
-                    return;     // bad uri on input
-                }
-                // Ask the listener to create a temporary placeholder item to show the progress.
-                final PendingAttachmentData pendingItem =
-                        PendingAttachmentData.createPendingAttachmentData(contentType,
-                                documentUri);
-                mListener.onDocumentSelected(pendingItem);
-            }
-        }.executeOnThreadPool();
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/GalleryGridAdapter.java b/src/com/android/messaging/ui/mediapicker/GalleryGridAdapter.java
deleted file mode 100644
index fda3b19..0000000
--- a/src/com/android/messaging/ui/mediapicker/GalleryGridAdapter.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.CursorAdapter;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.mediapicker.GalleryGridItemView.HostInterface;
-import com.android.messaging.util.Assert;
-
-/**
- * Bridges between the image cursor loaded by GalleryBoundCursorLoader and the GalleryGridView.
- */
-public class GalleryGridAdapter extends CursorAdapter {
-    private GalleryGridItemView.HostInterface mGgivHostInterface;
-
-    public GalleryGridAdapter(final Context context, final Cursor cursor) {
-        super(context, cursor, 0);
-    }
-
-    public void setHostInterface(final HostInterface ggivHostInterface) {
-        mGgivHostInterface = ggivHostInterface;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void bindView(final View view, final Context context, final Cursor cursor) {
-        Assert.isTrue(view instanceof GalleryGridItemView);
-        final GalleryGridItemView galleryImageView = (GalleryGridItemView) view;
-        galleryImageView.bind(cursor, mGgivHostInterface);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public View newView(final Context context, final Cursor cursor, final ViewGroup parent) {
-        final LayoutInflater layoutInflater = LayoutInflater.from(context);
-        return layoutInflater.inflate(R.layout.gallery_grid_item_view, parent, false);
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/GalleryGridItemView.java b/src/com/android/messaging/ui/mediapicker/GalleryGridItemView.java
deleted file mode 100644
index 6cf509b..0000000
--- a/src/com/android/messaging/ui/mediapicker/GalleryGridItemView.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.PorterDuff;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.TouchDelegate;
-import android.view.View;
-import android.widget.CheckBox;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.data.GalleryGridItemData;
-import com.android.messaging.ui.AsyncImageView;
-import com.android.messaging.ui.ConversationDrawables;
-import com.android.messaging.util.ContentType;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * Shows an item in the gallery picker grid view. Hosts an FileImageView with a checkbox.
- */
-public class GalleryGridItemView extends FrameLayout {
-    /**
-     * Implemented by the owner of this GalleryGridItemView instance to communicate on media
-     * picking and selection events.
-     */
-    public interface HostInterface {
-        void onItemClicked(View view, GalleryGridItemData data, boolean longClick);
-        boolean isItemSelected(GalleryGridItemData data);
-        boolean isMultiSelectEnabled();
-    }
-
-    @VisibleForTesting
-    GalleryGridItemData mData;
-    private AsyncImageView mImageView;
-    private CheckBox mCheckBox;
-    private RelativeLayout mAdditionalInfo;
-    private ImageView mIcon;
-    private LinearLayout mFileInfo;
-    private TextView mFileName;
-    private TextView mFileType;
-    private HostInterface mHostInterface;
-    private final OnClickListener mOnClickListener = new OnClickListener() {
-        @Override
-        public void onClick(final View v) {
-            mHostInterface.onItemClicked(GalleryGridItemView.this, mData, false /*longClick*/);
-        }
-    };
-
-    public GalleryGridItemView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mData = DataModel.get().createGalleryGridItemData();
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mImageView = (AsyncImageView) findViewById(R.id.thumbnail);
-        mCheckBox = (CheckBox) findViewById(R.id.checkbox);
-        mCheckBox.setOnClickListener(mOnClickListener);
-        mAdditionalInfo = (RelativeLayout) findViewById(R.id.additional_info);
-        mIcon = (ImageView) findViewById(R.id.icon);
-        mFileInfo = (LinearLayout) findViewById(R.id.file_info);
-        mFileName = (TextView) findViewById(R.id.file_name);
-        mFileType = (TextView) findViewById(R.id.file_type);
-        setOnClickListener(mOnClickListener);
-        final OnLongClickListener longClickListener = new OnLongClickListener() {
-            @Override
-            public boolean onLongClick(final View v) {
-                mHostInterface.onItemClicked(v, mData, true /* longClick */);
-                return true;
-            }
-        };
-        setOnLongClickListener(longClickListener);
-        mCheckBox.setOnLongClickListener(longClickListener);
-        addOnLayoutChangeListener(new OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(View v, int left, int top, int right, int bottom,
-                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                // Enlarge the clickable region for the checkbox to fill the entire view.
-                final Rect region = new Rect(0, 0, getWidth(), getHeight());
-                setTouchDelegate(new TouchDelegate(region, mCheckBox) {
-                    @Override
-                    public boolean onTouchEvent(MotionEvent event) {
-                        switch (event.getAction()) {
-                            case MotionEvent.ACTION_DOWN:
-                                setPressed(true);
-                                break;
-                            case MotionEvent.ACTION_UP:
-                            case MotionEvent.ACTION_CANCEL:
-                                setPressed(false);
-                                break;
-                        }
-                        return super.onTouchEvent(event);
-                    }
-                });
-            }
-        });
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        // The grid view auto-fit the columns, so we want to let the height match the width
-        // to make the image square.
-        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
-    }
-
-    public void bind(final Cursor cursor, final HostInterface hostInterface) {
-        final int desiredSize = getResources()
-                .getDimensionPixelSize(R.dimen.gallery_image_cell_size);
-        mData.bind(cursor, desiredSize, desiredSize);
-        mHostInterface = hostInterface;
-        updateViewState();
-    }
-
-    private void updateViewState() {
-        updateImageView();
-        if (mHostInterface.isMultiSelectEnabled() && !mData.isDocumentPickerItem()) {
-            mCheckBox.setVisibility(VISIBLE);
-            mCheckBox.setClickable(true);
-            mCheckBox.setChecked(mHostInterface.isItemSelected(mData));
-        } else {
-            mCheckBox.setVisibility(GONE);
-            mCheckBox.setClickable(false);
-        }
-    }
-
-    private void updateImageView() {
-        if (mData.isDocumentPickerItem()) {
-            setBackgroundColor(ConversationDrawables.get().getConversationThemeColor());
-            mIcon.setImageResource(R.drawable.ic_photo_library_light);
-            mIcon.clearColorFilter();
-            mImageView.setVisibility(GONE);
-            mIcon.setVisibility(VISIBLE);
-            mFileInfo.setVisibility(GONE);
-            mAdditionalInfo.setVisibility(VISIBLE);
-        } else {
-            final String contentType = mData.getContentType();
-            if (ContentType.isAudioType(contentType)) {
-                setBackgroundColor(
-                        getResources().getColor(R.color.gallery_image_default_background));
-                mIcon.setImageResource(R.drawable.ic_music);
-                mIcon.setColorFilter(
-                        ConversationDrawables.get().getConversationThemeColor(),
-                        PorterDuff.Mode.SRC_IN);
-                mFileName.setText(mData.getFileName());
-                String[] type = contentType.split("/");
-                mFileType.setText(type[1].toUpperCase() + " " + type[0]);
-                mImageView.setVisibility(GONE);
-                mIcon.setVisibility(VISIBLE);
-                mFileInfo.setVisibility(VISIBLE);
-                mAdditionalInfo.setVisibility(VISIBLE);
-            } else { // For image and video types
-                mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
-                setBackgroundColor(
-                        getResources().getColor(R.color.gallery_image_default_background));
-                mImageView.setImageResourceId(mData.getImageRequestDescriptor());
-                mImageView.setVisibility(VISIBLE);
-                if (ContentType.isVideoType(mData.getContentType())) {
-                    mIcon.setImageResource(R.drawable.ic_video_play_light);
-                    mIcon.clearColorFilter();
-                    mIcon.setVisibility(VISIBLE);
-                } else {
-                    mIcon.setVisibility(GONE);
-                }
-                mFileInfo.setVisibility(GONE);
-                mAdditionalInfo.setVisibility(VISIBLE);
-                final long dateSeconds = mData.getDateSeconds();
-                final boolean isValidDate = (dateSeconds > 0);
-                final int templateId = isValidDate ?
-                        R.string.mediapicker_gallery_image_item_description :
-                        R.string.mediapicker_gallery_image_item_description_no_date;
-                String contentDescription = String.format(getResources().getString(templateId),
-                        dateSeconds * TimeUnit.SECONDS.toMillis(1));
-                mImageView.setContentDescription(contentDescription);
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/GalleryGridView.java b/src/com/android/messaging/ui/mediapicker/GalleryGridView.java
deleted file mode 100644
index 39912f9..0000000
--- a/src/com/android/messaging/ui/mediapicker/GalleryGridView.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import androidx.collection.ArrayMap;
-import android.util.AttributeSet;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.binding.ImmutableBindingRef;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.GalleryGridItemData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageDataListener;
-import com.android.messaging.ui.PersistentInstanceState;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Shows a list of galley mediae from external storage in a GridView with multi-select capabilities,
- * and with the option to intent out to a standalone media picker.
- */
-public class GalleryGridView extends MediaPickerGridView implements
-        GalleryGridItemView.HostInterface,
-        PersistentInstanceState,
-        DraftMessageDataListener {
-    /**
-     * Implemented by the owner of this GalleryGridView instance to communicate on media picking and
-     * multi-media selection events.
-     */
-    public interface GalleryGridViewListener {
-        void onDocumentPickerItemClicked();
-        void onItemSelected(MessagePartData item);
-        void onItemUnselected(MessagePartData item);
-        void onConfirmSelection();
-        void onUpdate();
-    }
-
-    private GalleryGridViewListener mListener;
-
-    // TODO: Consider putting this into the data model object if we add more states.
-    private final ArrayMap<Uri, MessagePartData> mSelectedImages;
-    private boolean mIsMultiSelectMode = false;
-    private ImmutableBindingRef<DraftMessageData> mDraftMessageDataModel;
-
-    public GalleryGridView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mSelectedImages = new ArrayMap<Uri, MessagePartData>();
-    }
-
-    public void setHostInterface(final GalleryGridViewListener hostInterface) {
-        mListener = hostInterface;
-    }
-
-    public void setDraftMessageDataModel(final BindingBase<DraftMessageData> dataModel) {
-        mDraftMessageDataModel = BindingBase.createBindingReference(dataModel);
-        mDraftMessageDataModel.getData().addListener(this);
-    }
-
-    @Override
-    public void onItemClicked(final View view, final GalleryGridItemData data,
-            final boolean longClick) {
-        if (data.isDocumentPickerItem()) {
-            mListener.onDocumentPickerItemClicked();
-        } else if (ContentType.isMediaType(data.getContentType())) {
-            if (longClick) {
-                // Turn on multi-select mode when an item is long-pressed.
-                setMultiSelectEnabled(true);
-            }
-
-            final Rect startRect = new Rect();
-            view.getGlobalVisibleRect(startRect);
-            if (isMultiSelectEnabled()) {
-                toggleItemSelection(startRect, data);
-            } else {
-                mListener.onItemSelected(data.constructMessagePartData(startRect));
-            }
-        } else {
-            LogUtil.w(LogUtil.BUGLE_TAG,
-                    "Selected item has invalid contentType " + data.getContentType());
-        }
-    }
-
-    @Override
-    public boolean isItemSelected(final GalleryGridItemData data) {
-        return mSelectedImages.containsKey(data.getImageUri());
-    }
-
-    int getSelectionCount() {
-        return mSelectedImages.size();
-    }
-
-    @Override
-    public boolean isMultiSelectEnabled() {
-        return mIsMultiSelectMode;
-    }
-
-    private void toggleItemSelection(final Rect startRect, final GalleryGridItemData data) {
-        Assert.isTrue(isMultiSelectEnabled());
-        if (isItemSelected(data)) {
-            final MessagePartData item = mSelectedImages.remove(data.getImageUri());
-            mListener.onItemUnselected(item);
-            if (mSelectedImages.size() == 0) {
-                // No media is selected any more, turn off multi-select mode.
-                setMultiSelectEnabled(false);
-            }
-        } else {
-            final MessagePartData item = data.constructMessagePartData(startRect);
-            mSelectedImages.put(data.getImageUri(), item);
-            mListener.onItemSelected(item);
-        }
-        invalidateViews();
-    }
-
-    private void toggleMultiSelect() {
-        mIsMultiSelectMode = !mIsMultiSelectMode;
-        invalidateViews();
-    }
-
-    private void setMultiSelectEnabled(final boolean enabled) {
-        if (mIsMultiSelectMode != enabled) {
-            toggleMultiSelect();
-        }
-    }
-
-    private boolean canToggleMultiSelect() {
-        // We allow the user to toggle multi-select mode only when nothing has selected. If
-        // something has been selected, we show a confirm button instead.
-        return mSelectedImages.size() == 0;
-    }
-
-    public void onCreateOptionsMenu(final MenuInflater inflater, final Menu menu) {
-        inflater.inflate(R.menu.gallery_picker_menu, menu);
-        final MenuItem toggleMultiSelect = menu.findItem(R.id.action_multiselect);
-        final MenuItem confirmMultiSelect = menu.findItem(R.id.action_confirm_multiselect);
-        final boolean canToggleMultiSelect = canToggleMultiSelect();
-        toggleMultiSelect.setVisible(canToggleMultiSelect);
-        confirmMultiSelect.setVisible(!canToggleMultiSelect);
-    }
-
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.action_multiselect:
-                Assert.isTrue(canToggleMultiSelect());
-                toggleMultiSelect();
-                return true;
-
-            case R.id.action_confirm_multiselect:
-                Assert.isTrue(!canToggleMultiSelect());
-                mListener.onConfirmSelection();
-                return true;
-        }
-        return false;
-    }
-
-
-    @Override
-    public void onDraftChanged(final DraftMessageData data, final int changeFlags) {
-        mDraftMessageDataModel.ensureBound(data);
-        // Whenever attachment changed, refresh selection state to remove those that are not
-        // selected.
-        if ((changeFlags & DraftMessageData.ATTACHMENTS_CHANGED) ==
-                DraftMessageData.ATTACHMENTS_CHANGED) {
-            refreshImageSelectionStateOnAttachmentChange();
-        }
-    }
-
-    @Override
-    public void onDraftAttachmentLimitReached(final DraftMessageData data) {
-        mDraftMessageDataModel.ensureBound(data);
-        // Whenever draft attachment limit is reach, refresh selection state to remove those
-        // not actually added to draft.
-        refreshImageSelectionStateOnAttachmentChange();
-    }
-
-    @Override
-    public void onDraftAttachmentLoadFailed() {
-        // Nothing to do since the failed attachment gets removed automatically.
-    }
-
-    private void refreshImageSelectionStateOnAttachmentChange() {
-        boolean changed = false;
-        final Iterator<Map.Entry<Uri, MessagePartData>> iterator =
-                mSelectedImages.entrySet().iterator();
-        while (iterator.hasNext()) {
-            Map.Entry<Uri, MessagePartData> entry = iterator.next();
-            if (!mDraftMessageDataModel.getData().containsAttachment(entry.getKey())) {
-                iterator.remove();
-                changed = true;
-            }
-        }
-
-        if (changed) {
-            mListener.onUpdate();
-            invalidateViews();
-        }
-    }
-
-    @Override   // PersistentInstanceState
-    public Parcelable saveState() {
-        return onSaveInstanceState();
-    }
-
-    @Override   // PersistentInstanceState
-    public void restoreState(final Parcelable restoredState) {
-        onRestoreInstanceState(restoredState);
-        invalidateViews();
-    }
-
-    @Override
-    public Parcelable onSaveInstanceState() {
-        final Parcelable superState = super.onSaveInstanceState();
-        final SavedState savedState = new SavedState(superState);
-        savedState.isMultiSelectMode = mIsMultiSelectMode;
-        savedState.selectedImages = mSelectedImages.values()
-                .toArray(new MessagePartData[mSelectedImages.size()]);
-        return savedState;
-    }
-
-    @Override
-    public void onRestoreInstanceState(final Parcelable state) {
-        if (!(state instanceof SavedState)) {
-            super.onRestoreInstanceState(state);
-            return;
-        }
-
-        final SavedState savedState = (SavedState) state;
-        super.onRestoreInstanceState(savedState.getSuperState());
-        mIsMultiSelectMode = savedState.isMultiSelectMode;
-        mSelectedImages.clear();
-        for (int i = 0; i < savedState.selectedImages.length; i++) {
-            final MessagePartData selectedImage = savedState.selectedImages[i];
-            mSelectedImages.put(selectedImage.getContentUri(), selectedImage);
-        }
-    }
-
-    @Override   // PersistentInstanceState
-    public void resetState() {
-        mSelectedImages.clear();
-        mIsMultiSelectMode = false;
-        invalidateViews();
-    }
-
-    public static class SavedState extends BaseSavedState {
-        boolean isMultiSelectMode;
-        MessagePartData[] selectedImages;
-
-        SavedState(final Parcelable superState) {
-            super(superState);
-        }
-
-        private SavedState(final Parcel in) {
-            super(in);
-            isMultiSelectMode = in.readInt() == 1 ? true : false;
-
-            // Read parts
-            final int partCount = in.readInt();
-            selectedImages = new MessagePartData[partCount];
-            for (int i = 0; i < partCount; i++) {
-                selectedImages[i] = ((MessagePartData) in.readParcelable(
-                        MessagePartData.class.getClassLoader()));
-            }
-        }
-
-        @Override
-        public void writeToParcel(final Parcel out, final int flags) {
-            super.writeToParcel(out, flags);
-            out.writeInt(isMultiSelectMode ? 1 : 0);
-
-            // Write parts
-            out.writeInt(selectedImages.length);
-            for (final MessagePartData image : selectedImages) {
-                out.writeParcelable(image, flags);
-            }
-        }
-
-        public static final Parcelable.Creator<SavedState> CREATOR =
-                new Parcelable.Creator<SavedState>() {
-            @Override
-            public SavedState createFromParcel(final Parcel in) {
-                return new SavedState(in);
-            }
-            @Override
-            public SavedState[] newArray(final int size) {
-                return new SavedState[size];
-            }
-        };
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/GalleryMediaChooser.java b/src/com/android/messaging/ui/mediapicker/GalleryMediaChooser.java
deleted file mode 100644
index 6192c4f..0000000
--- a/src/com/android/messaging/ui/mediapicker/GalleryMediaChooser.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.Manifest;
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.database.MergeCursor;
-import androidx.appcompat.app.ActionBar;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.GalleryGridItemData;
-import com.android.messaging.datamodel.data.MediaPickerData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.MediaPickerData.MediaPickerDataListener;
-import com.android.messaging.datamodel.data.PendingAttachmentData;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.mediapicker.DocumentImagePicker.SelectionListener;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.OsUtil;
-
-/**
- * Chooser which allows the user to select one or more existing images or videos or audios.
- */
-class GalleryMediaChooser extends MediaChooser implements
-        GalleryGridView.GalleryGridViewListener, MediaPickerDataListener {
-    private final GalleryGridAdapter mAdapter;
-    private GalleryGridView mGalleryGridView;
-    private View mMissingPermissionView;
-
-    /** Handles picking a media from the document picker. */
-    private DocumentImagePicker mDocumentImagePicker;
-
-    GalleryMediaChooser(final MediaPicker mediaPicker) {
-        super(mediaPicker);
-        mAdapter = new GalleryGridAdapter(Factory.get().getApplicationContext(), null);
-        mDocumentImagePicker = new DocumentImagePicker(mMediaPicker,
-                new SelectionListener() {
-                    @Override
-                    public void onDocumentSelected(final PendingAttachmentData data) {
-                        if (mBindingRef.isBound()) {
-                            mMediaPicker.dispatchPendingItemAdded(data);
-                        }
-                    }
-                });
-    }
-
-    @Override
-    public int getSupportedMediaTypes() {
-        return (MediaPicker.MEDIA_TYPE_IMAGE
-                | MediaPicker.MEDIA_TYPE_VIDEO
-                | MediaPicker.MEDIA_TYPE_AUDIO);
-    }
-
-    @Override
-    public View destroyView() {
-        mGalleryGridView.setAdapter(null);
-        mAdapter.setHostInterface(null);
-        // The loader is started only if startMediaPickerDataLoader() is called
-        if (OsUtil.hasStoragePermission()) {
-            mBindingRef.getData().destroyLoader(MediaPickerData.GALLERY_MEDIA_LOADER);
-        }
-        return super.destroyView();
-    }
-
-    @Override
-    public int getIconResource() {
-        return R.drawable.ic_image_light;
-    }
-
-    @Override
-    public int getIconDescriptionResource() {
-        return R.string.mediapicker_galleryChooserDescription;
-    }
-
-    @Override
-    public boolean canSwipeDown() {
-        return mGalleryGridView.canSwipeDown();
-    }
-
-    @Override
-    public void onItemSelected(final MessagePartData item) {
-        mMediaPicker.dispatchItemsSelected(item, !mGalleryGridView.isMultiSelectEnabled());
-    }
-
-    @Override
-    public void onItemUnselected(final MessagePartData item) {
-        mMediaPicker.dispatchItemUnselected(item);
-    }
-
-    @Override
-    public void onConfirmSelection() {
-        // The user may only confirm if multiselect is enabled.
-        Assert.isTrue(mGalleryGridView.isMultiSelectEnabled());
-        mMediaPicker.dispatchConfirmItemSelection();
-    }
-
-    @Override
-    public void onUpdate() {
-        mMediaPicker.invalidateOptionsMenu();
-    }
-
-    @Override
-    public void onCreateOptionsMenu(final MenuInflater inflater, final Menu menu) {
-        if (mView != null) {
-            mGalleryGridView.onCreateOptionsMenu(inflater, menu);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        return (mView != null) ? mGalleryGridView.onOptionsItemSelected(item) : false;
-    }
-
-    @Override
-    protected View createView(final ViewGroup container) {
-        final LayoutInflater inflater = getLayoutInflater();
-        final View view = inflater.inflate(
-                R.layout.mediapicker_gallery_chooser,
-                container /* root */,
-                false /* attachToRoot */);
-
-        mGalleryGridView = (GalleryGridView) view.findViewById(R.id.gallery_grid_view);
-        mAdapter.setHostInterface(mGalleryGridView);
-        mGalleryGridView.setAdapter(mAdapter);
-        mGalleryGridView.setHostInterface(this);
-        mGalleryGridView.setDraftMessageDataModel(mMediaPicker.getDraftMessageDataModel());
-        if (OsUtil.hasStoragePermission()) {
-            startMediaPickerDataLoader();
-        }
-
-        mMissingPermissionView = view.findViewById(R.id.missing_permission_view);
-        updateForPermissionState(OsUtil.hasStoragePermission());
-        return view;
-    }
-
-    @Override
-    int getActionBarTitleResId() {
-        return R.string.mediapicker_gallery_title;
-    }
-
-    @Override
-    public void onDocumentPickerItemClicked() {
-        // Launch an external picker to pick item from document picker as attachment.
-        mDocumentImagePicker.launchPicker();
-    }
-
-    @Override
-    void updateActionBar(final ActionBar actionBar) {
-        super.updateActionBar(actionBar);
-        if (mGalleryGridView == null) {
-            return;
-        }
-        final int selectionCount = mGalleryGridView.getSelectionCount();
-        if (selectionCount > 0 && mGalleryGridView.isMultiSelectEnabled()) {
-            actionBar.setTitle(getContext().getResources().getString(
-                    R.string.mediapicker_gallery_title_selection,
-                    selectionCount));
-        }
-    }
-
-    @Override
-    public void onMediaPickerDataUpdated(final MediaPickerData mediaPickerData, final Object data,
-            final int loaderId) {
-        mBindingRef.ensureBound(mediaPickerData);
-        Assert.equals(MediaPickerData.GALLERY_MEDIA_LOADER, loaderId);
-        Cursor rawCursor = null;
-        if (data instanceof Cursor) {
-            rawCursor = (Cursor) data;
-        }
-        // Before delivering the cursor, wrap around the local gallery cursor
-        // with an extra item for document picker integration in the front.
-        final MatrixCursor specialItemsCursor =
-                new MatrixCursor(GalleryGridItemData.SPECIAL_ITEM_COLUMNS);
-        specialItemsCursor.addRow(new Object[] { GalleryGridItemData.ID_DOCUMENT_PICKER_ITEM });
-        final MergeCursor cursor =
-                new MergeCursor(new Cursor[] { specialItemsCursor, rawCursor });
-        mAdapter.swapCursor(cursor);
-    }
-
-    @Override
-    public void onResume() {
-        if (OsUtil.hasStoragePermission()) {
-            // Work around a bug in MediaStore where cursors querying the Files provider don't get
-            // updated for changes to Images.Media or Video.Media.
-            startMediaPickerDataLoader();
-        }
-    }
-
-    @Override
-    protected void setSelected(final boolean selected) {
-        super.setSelected(selected);
-        if (selected && !OsUtil.hasStoragePermission()) {
-            mMediaPicker.requestPermissions(
-                    new String[] { Manifest.permission.READ_EXTERNAL_STORAGE },
-                    MediaPicker.GALLERY_PERMISSION_REQUEST_CODE);
-        }
-    }
-
-    private void startMediaPickerDataLoader() {
-        mBindingRef
-                .getData()
-                .startLoader(MediaPickerData.GALLERY_MEDIA_LOADER, mBindingRef, null, this);
-    }
-
-    @Override
-    protected void onRequestPermissionsResult(
-            final int requestCode, final String permissions[], final int[] grantResults) {
-        if (requestCode == MediaPicker.GALLERY_PERMISSION_REQUEST_CODE) {
-            final boolean permissionGranted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
-            if (permissionGranted) {
-                startMediaPickerDataLoader();
-            }
-            updateForPermissionState(permissionGranted);
-        }
-    }
-
-    private void updateForPermissionState(final boolean granted) {
-        // onRequestPermissionsResult can sometimes get called before createView().
-        if (mGalleryGridView == null) {
-            return;
-        }
-
-        mGalleryGridView.setVisibility(granted ? View.VISIBLE : View.GONE);
-        mMissingPermissionView.setVisibility(granted ? View.GONE : View.VISIBLE);
-    }
-
-    @Override
-    protected void onActivityResult(
-            final int requestCode, final int resultCode, final Intent data) {
-        if (requestCode == UIIntents.REQUEST_PICK_MEDIA_FROM_DOCUMENT_PICKER
-                && resultCode == Activity.RESULT_OK) {
-            mDocumentImagePicker.onActivityResult(requestCode, resultCode, data);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/HardwareCameraPreview.java b/src/com/android/messaging/ui/mediapicker/HardwareCameraPreview.java
deleted file mode 100644
index 45d9579..0000000
--- a/src/com/android/messaging/ui/mediapicker/HardwareCameraPreview.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.graphics.SurfaceTexture;
-import android.hardware.Camera;
-import android.os.Parcelable;
-import android.util.AttributeSet;
-import android.view.TextureView;
-import android.view.View;
-
-import java.io.IOException;
-
-/**
- * A hardware accelerated preview texture for the camera.  This is the preferred CameraPreview
- * because it animates smoother.  When hardware acceleration isn't available, SoftwareCameraPreview
- * is used.
- *
- * There is a significant amount of duplication between HardwareCameraPreview and
- * SoftwareCameraPreview which we can't easily share due to a lack of multiple inheritance, The
- * implementations of the shared methods are delegated to CameraPreview
- */
-public class HardwareCameraPreview extends TextureView implements CameraPreview.CameraPreviewHost {
-    private CameraPreview mPreview;
-
-    public HardwareCameraPreview(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        mPreview = new CameraPreview(this);
-        setSurfaceTextureListener(new SurfaceTextureListener() {
-            @Override
-            public void onSurfaceTextureAvailable(final SurfaceTexture surfaceTexture, final int i, final int i2) {
-                CameraManager.get().setSurface(mPreview);
-            }
-
-            @Override
-            public void onSurfaceTextureSizeChanged(final SurfaceTexture surfaceTexture, final int i, final int i2) {
-                CameraManager.get().setSurface(mPreview);
-            }
-
-            @Override
-            public boolean onSurfaceTextureDestroyed(final SurfaceTexture surfaceTexture) {
-                CameraManager.get().setSurface(null);
-                return true;
-            }
-
-            @Override
-            public void onSurfaceTextureUpdated(final SurfaceTexture surfaceTexture) {
-                CameraManager.get().setSurface(mPreview);
-            }
-        });
-    }
-
-    @Override
-    protected void onVisibilityChanged(final View changedView, final int visibility) {
-        super.onVisibilityChanged(changedView, visibility);
-        mPreview.onVisibilityChanged(visibility);
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        mPreview.onDetachedFromWindow();
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        mPreview.onAttachedToWindow();
-    }
-
-    @Override
-    protected void onRestoreInstanceState(final Parcelable state) {
-        super.onRestoreInstanceState(state);
-        mPreview.onRestoreInstanceState();
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        widthMeasureSpec = mPreview.getWidthMeasureSpec(widthMeasureSpec, heightMeasureSpec);
-        heightMeasureSpec = mPreview.getHeightMeasureSpec(widthMeasureSpec, heightMeasureSpec);
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-    }
-
-    @Override
-    public View getView() {
-        return this;
-    }
-
-    @Override
-    public boolean isValid() {
-        return getSurfaceTexture() != null;
-    }
-
-    @Override
-    public void startPreview(final Camera camera) throws IOException {
-        camera.setPreviewTexture(getSurfaceTexture());
-    }
-
-    @Override
-    public void onCameraPermissionGranted() {
-        mPreview.onCameraPermissionGranted();
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/ImagePersistTask.java b/src/com/android/messaging/ui/mediapicker/ImagePersistTask.java
deleted file mode 100644
index 637eb84..0000000
--- a/src/com/android/messaging/ui/mediapicker/ImagePersistTask.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.net.Uri;
-
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.util.exif.ExifInterface;
-import com.android.messaging.util.exif.ExifTag;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-public class ImagePersistTask extends SafeAsyncTask<Void, Void, Void> {
-    private static final String JPEG_EXTENSION = "jpg";
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private int mWidth;
-    private int mHeight;
-    private final float mHeightPercent;
-    private final byte[] mBytes;
-    private final Context mContext;
-    private final CameraManager.MediaCallback mCallback;
-    private Uri mOutputUri;
-    private Exception mException;
-
-    public ImagePersistTask(
-            final int width,
-            final int height,
-            final float heightPercent,
-            final byte[] bytes,
-            final Context context,
-            final CameraManager.MediaCallback callback) {
-        Assert.isTrue(heightPercent >= 0 && heightPercent <= 1);
-        Assert.notNull(bytes);
-        Assert.notNull(context);
-        Assert.notNull(callback);
-        mWidth = width;
-        mHeight = height;
-        mHeightPercent = heightPercent;
-        mBytes = bytes;
-        mContext = context;
-        mCallback = callback;
-        // TODO: We probably want to store directly in MMS storage to prevent this
-        // intermediate step
-        mOutputUri = MediaScratchFileProvider.buildMediaScratchSpaceUri(JPEG_EXTENSION);
-    }
-
-    @Override
-    protected Void doInBackgroundTimed(final Void... params) {
-        OutputStream outputStream = null;
-        Bitmap bitmap = null;
-        Bitmap clippedBitmap = null;
-        try {
-            outputStream =
-                    mContext.getContentResolver().openOutputStream(mOutputUri);
-            if (mHeightPercent != 1.0f) {
-                int orientation = android.media.ExifInterface.ORIENTATION_UNDEFINED;
-                final ExifInterface exifInterface = new ExifInterface();
-                try {
-                    exifInterface.readExif(mBytes);
-                    final Integer orientationValue =
-                            exifInterface.getTagIntValue(ExifInterface.TAG_ORIENTATION);
-                    if (orientationValue != null) {
-                        orientation = orientationValue.intValue();
-                    }
-                    // The thumbnail is of the full image, but we're cropping it, so just clear
-                    // the thumbnail
-                    exifInterface.setCompressedThumbnail((byte[]) null);
-                } catch (IOException e) {
-                    // Couldn't get exif tags, not the end of the world
-                }
-                bitmap = BitmapFactory.decodeByteArray(mBytes, 0, mBytes.length);
-                final int clippedWidth;
-                final int clippedHeight;
-                if (ExifInterface.getOrientationParams(orientation).invertDimensions) {
-                    Assert.equals(mWidth, bitmap.getHeight());
-                    Assert.equals(mHeight, bitmap.getWidth());
-                    clippedWidth = (int) (mHeight * mHeightPercent);
-                    clippedHeight = mWidth;
-                } else {
-                    Assert.equals(mWidth, bitmap.getWidth());
-                    Assert.equals(mHeight, bitmap.getHeight());
-                    clippedWidth = mWidth;
-                    clippedHeight = (int) (mHeight * mHeightPercent);
-                }
-                final int offsetTop = (bitmap.getHeight() - clippedHeight) / 2;
-                final int offsetLeft = (bitmap.getWidth() - clippedWidth) / 2;
-                mWidth = clippedWidth;
-                mHeight = clippedHeight;
-                clippedBitmap = Bitmap.createBitmap(clippedWidth, clippedHeight,
-                        Bitmap.Config.ARGB_8888);
-                clippedBitmap.setDensity(bitmap.getDensity());
-                final Canvas clippedBitmapCanvas = new Canvas(clippedBitmap);
-                final Matrix matrix = new Matrix();
-                matrix.postTranslate(-offsetLeft, -offsetTop);
-                clippedBitmapCanvas.drawBitmap(bitmap, matrix, null /* paint */);
-                clippedBitmapCanvas.save();
-                // EXIF data can take a big chunk of the file size and is often cleared by the
-                // carrier, only store orientation since that's critical
-                ExifTag orientationTag = exifInterface.getTag(ExifInterface.TAG_ORIENTATION);
-                exifInterface.clearExif();
-                exifInterface.setTag(orientationTag);
-                exifInterface.writeExif(clippedBitmap, outputStream);
-            } else {
-                outputStream.write(mBytes);
-            }
-        } catch (final IOException e) {
-            mOutputUri = null;
-            mException = e;
-            LogUtil.e(TAG, "Unable to persist image to temp storage " + e);
-        } finally {
-            if (bitmap != null) {
-                bitmap.recycle();
-            }
-
-            if (clippedBitmap != null) {
-                clippedBitmap.recycle();
-            }
-
-            if (outputStream != null) {
-                try {
-                    outputStream.flush();
-                } catch (final IOException e) {
-                    mOutputUri = null;
-                    mException = e;
-                    LogUtil.e(TAG, "error trying to flush and close the outputStream" + e);
-                } finally {
-                    try {
-                        outputStream.close();
-                    } catch (final IOException e) {
-                        // Do nothing.
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-    @Override
-    protected void onPostExecute(final Void aVoid) {
-        if (mOutputUri != null) {
-            mCallback.onMediaReady(mOutputUri, ContentType.IMAGE_JPEG, mWidth, mHeight);
-        } else {
-            Assert.notNull(mException);
-            mCallback.onMediaFailed(mException);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/LevelTrackingMediaRecorder.java b/src/com/android/messaging/ui/mediapicker/LevelTrackingMediaRecorder.java
deleted file mode 100644
index 06730a3..0000000
--- a/src/com/android/messaging/ui/mediapicker/LevelTrackingMediaRecorder.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.media.MediaRecorder;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.util.UiUtils;
-
-import java.io.IOException;
-
-/**
- * Wraps around the functionalities of MediaRecorder, performs routine setup for audio recording
- * and updates the audio level to be displayed in UI.
- *
- * During the start and end of a recording session, we kick off a thread that polls for audio
- * levels, and updates the thread-safe AudioLevelSource instance. Consumers may bind to the
- * sound level by either polling from the level source, or register for a level change callback
- * on the level source object. In Bugle, the UI element (SoundLevels) polls for the sound level
- * on the UI thread by using animation ticks and invalidating itself.
- *
- * Aside from tracking sound levels, this also encapsulates the functionality to save the file
- * to the scratch space. The saved file is returned by calling stopRecording().
- */
-public class LevelTrackingMediaRecorder {
-    // We refresh sound level every 100ms during a recording session.
-    private static final int REFRESH_INTERVAL_MILLIS = 100;
-
-    // The native amplitude returned from MediaRecorder ranges from 0~32768 (unfortunately, this
-    // is not a constant that's defined anywhere, but the framework's Recorder app is using the
-    // same hard-coded number). Therefore, a constant is needed in order to make it 0~100.
-    private static final int MAX_AMPLITUDE_FACTOR = 32768 / 100;
-
-    // We want to limit the max audio file size by the max message size allowed by MmsConfig,
-    // plus multiplied by this fudge ratio to guarantee that we don't go over limit.
-    private static final float MAX_SIZE_RATIO = 0.8f;
-
-    // Default recorder settings for Bugle.
-    // TODO: Do we want these to be tweakable?
-    private static final int MEDIA_RECORDER_AUDIO_SOURCE = MediaRecorder.AudioSource.MIC;
-    private static final int MEDIA_RECORDER_OUTPUT_FORMAT = MediaRecorder.OutputFormat.THREE_GPP;
-    private static final int MEDIA_RECORDER_AUDIO_ENCODER = MediaRecorder.AudioEncoder.AMR_NB;
-
-    private final AudioLevelSource mLevelSource;
-    private Thread mRefreshLevelThread;
-    private MediaRecorder mRecorder;
-    private Uri mOutputUri;
-    private ParcelFileDescriptor mOutputFD;
-
-    public LevelTrackingMediaRecorder() {
-        mLevelSource = new AudioLevelSource();
-    }
-
-    public AudioLevelSource getLevelSource() {
-        return mLevelSource;
-    }
-
-    /**
-     * @return if we are currently in a recording session.
-     */
-    public boolean isRecording() {
-        return mRecorder != null;
-    }
-
-    /**
-     * Start a new recording session.
-     * @return true if a session is successfully started; false if something went wrong or if
-     *         we are already recording.
-     */
-    public boolean startRecording(final MediaRecorder.OnErrorListener errorListener,
-            final MediaRecorder.OnInfoListener infoListener, int maxSize) {
-        synchronized (LevelTrackingMediaRecorder.class) {
-            if (mRecorder == null) {
-                mOutputUri = MediaScratchFileProvider.buildMediaScratchSpaceUri(
-                        ContentType.THREE_GPP_EXTENSION);
-                mRecorder = new MediaRecorder();
-                try {
-                    // The scratch space file is a Uri, however MediaRecorder
-                    // API only accepts absolute FD's. Therefore, get the
-                    // FileDescriptor from the content resolver to ensure the
-                    // directory is created and get the file path to output the
-                    // audio to.
-                    maxSize *= MAX_SIZE_RATIO;
-                    mOutputFD = Factory.get().getApplicationContext()
-                            .getContentResolver().openFileDescriptor(mOutputUri, "w");
-                    mRecorder.setAudioSource(MEDIA_RECORDER_AUDIO_SOURCE);
-                    mRecorder.setOutputFormat(MEDIA_RECORDER_OUTPUT_FORMAT);
-                    mRecorder.setAudioEncoder(MEDIA_RECORDER_AUDIO_ENCODER);
-                    mRecorder.setOutputFile(mOutputFD.getFileDescriptor());
-                    mRecorder.setMaxFileSize(maxSize);
-                    mRecorder.setOnErrorListener(errorListener);
-                    mRecorder.setOnInfoListener(infoListener);
-                    mRecorder.prepare();
-                    mRecorder.start();
-                    startTrackingSoundLevel();
-                    return true;
-                } catch (final Exception e) {
-                    // There may be a device failure or I/O failure, record the error but
-                    // don't fail.
-                    LogUtil.e(LogUtil.BUGLE_TAG, "Something went wrong when starting " +
-                            "media recorder. " + e);
-                    UiUtils.showToastAtBottom(R.string.audio_recording_start_failed);
-                    stopRecording();
-                }
-            } else {
-                Assert.fail("Trying to start a new recording session while already recording!");
-            }
-            return false;
-        }
-    }
-
-    /**
-     * Stop the current recording session.
-     * @return the Uri of the output file, or null if not currently recording.
-     */
-    public Uri stopRecording() {
-        synchronized (LevelTrackingMediaRecorder.class) {
-            if (mRecorder != null) {
-                try {
-                    mRecorder.stop();
-                } catch (final RuntimeException ex) {
-                    // This may happen when the recording is too short, so just drop the recording
-                    // in this case.
-                    LogUtil.w(LogUtil.BUGLE_TAG, "Something went wrong when stopping " +
-                            "media recorder. " + ex);
-                    if (mOutputUri != null) {
-                        final Uri outputUri = mOutputUri;
-                        SafeAsyncTask.executeOnThreadPool(new Runnable() {
-                            @Override
-                            public void run() {
-                                Factory.get().getApplicationContext().getContentResolver().delete(
-                                        outputUri, null, null);
-                            }
-                        });
-                        mOutputUri = null;
-                    }
-                } finally {
-                    mRecorder.release();
-                    mRecorder = null;
-                }
-            } else {
-                Assert.fail("Not currently recording!");
-                return null;
-            }
-        }
-
-        if (mOutputFD != null) {
-            try {
-                mOutputFD.close();
-            } catch (final IOException e) {
-                // Nothing to do
-            }
-            mOutputFD = null;
-        }
-
-        stopTrackingSoundLevel();
-        return mOutputUri;
-    }
-
-    private int getAmplitude() {
-        synchronized (LevelTrackingMediaRecorder.class) {
-            if (mRecorder != null) {
-                final int maxAmplitude = mRecorder.getMaxAmplitude() / MAX_AMPLITUDE_FACTOR;
-                return Math.min(maxAmplitude, 100);
-            } else {
-                return 0;
-            }
-        }
-    }
-
-    private void startTrackingSoundLevel() {
-        stopTrackingSoundLevel();
-        mRefreshLevelThread = new Thread() {
-            @Override
-            public void run() {
-                try {
-                    while (true) {
-                        synchronized (LevelTrackingMediaRecorder.class) {
-                            if (mRecorder != null) {
-                                mLevelSource.setSpeechLevel(getAmplitude());
-                            } else {
-                                // The recording session is over, finish the thread.
-                                return;
-                            }
-                        }
-                        Thread.sleep(REFRESH_INTERVAL_MILLIS);
-                    }
-                } catch (final InterruptedException e) {
-                    Thread.currentThread().interrupt();
-                }
-            }
-        };
-        mRefreshLevelThread.start();
-    }
-
-    private void stopTrackingSoundLevel() {
-        if (mRefreshLevelThread != null && mRefreshLevelThread.isAlive()) {
-            mRefreshLevelThread.interrupt();
-            mRefreshLevelThread = null;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/MediaChooser.java b/src/com/android/messaging/ui/mediapicker/MediaChooser.java
deleted file mode 100644
index 0549e5b..0000000
--- a/src/com/android/messaging/ui/mediapicker/MediaChooser.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.app.FragmentManager;
-import android.content.Context;
-import android.content.Intent;
-import androidx.appcompat.app.ActionBar;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageButton;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.binding.ImmutableBindingRef;
-import com.android.messaging.datamodel.data.MediaPickerData;
-import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageSubscriptionDataProvider;
-import com.android.messaging.ui.BasePagerViewHolder;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.OsUtil;
-
-abstract class MediaChooser extends BasePagerViewHolder
-        implements DraftMessageSubscriptionDataProvider {
-    /** The media picker that the chooser is hosted in */
-    protected final MediaPicker mMediaPicker;
-
-    /** Referencing the main media picker binding to perform data loading */
-    protected final ImmutableBindingRef<MediaPickerData> mBindingRef;
-
-    /** True if this is the selected chooser */
-    protected boolean mSelected;
-
-    /** True if this chooser is open */
-    protected boolean mOpen;
-
-    /** The button to show in the tab strip */
-    private ImageButton mTabButton;
-
-    /** Used by subclasses to indicate that no loader is required from the data model in order for
-     * this chooser to function.
-     */
-    public static final int NO_LOADER_REQUIRED = -1;
-
-    /**
-     * Initializes a new instance of the Chooser class
-     * @param mediaPicker The media picker that the chooser is hosted in
-     */
-    MediaChooser(final MediaPicker mediaPicker) {
-        Assert.notNull(mediaPicker);
-        mMediaPicker = mediaPicker;
-        mBindingRef = mediaPicker.getMediaPickerDataBinding();
-        mSelected = false;
-    }
-
-    protected void setSelected(final boolean selected) {
-        mSelected = selected;
-        if (selected) {
-            // If we're selected, it must be open
-            mOpen = true;
-        }
-        if (mTabButton != null) {
-            mTabButton.setSelected(selected);
-            mTabButton.setAlpha(selected ? 1 : 0.5f);
-        }
-    }
-
-    ImageButton getTabButton() {
-        return mTabButton;
-    }
-
-    void onCreateTabButton(final LayoutInflater inflater, final ViewGroup parent) {
-        mTabButton = (ImageButton) inflater.inflate(
-                R.layout.mediapicker_tab_button,
-                parent,
-                false /* addToParent */);
-        mTabButton.setImageResource(getIconResource());
-        mTabButton.setContentDescription(
-                inflater.getContext().getResources().getString(getIconDescriptionResource()));
-        setSelected(mSelected);
-        mTabButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(final View view) {
-                mMediaPicker.selectChooser(MediaChooser.this);
-            }
-        });
-    }
-
-    protected Context getContext() {
-        return mMediaPicker.getActivity();
-    }
-
-    protected FragmentManager getFragmentManager() {
-        return OsUtil.isAtLeastJB_MR1() ? mMediaPicker.getChildFragmentManager() :
-                mMediaPicker.getFragmentManager();
-    }
-    protected LayoutInflater getLayoutInflater() {
-        return LayoutInflater.from(getContext());
-    }
-
-    /** Allows the chooser to handle full screen change */
-    void onFullScreenChanged(final boolean fullScreen) {}
-
-    /** Allows the chooser to handle the chooser being opened or closed */
-    void onOpenedChanged(final boolean open) {
-        mOpen = open;
-    }
-
-    /** @return The bit field of media types that this chooser can pick */
-    public abstract int getSupportedMediaTypes();
-
-    /** @return The resource id of the icon for the chooser */
-    abstract int getIconResource();
-
-    /** @return The resource id of the string to use for the accessibility text of the icon */
-    abstract int getIconDescriptionResource();
-
-    /**
-     * Sets up the action bar to show the current state of the full-screen chooser
-     * @param actionBar The action bar to populate
-     */
-    void updateActionBar(final ActionBar actionBar) {
-        final int actionBarTitleResId = getActionBarTitleResId();
-        if (actionBarTitleResId == 0) {
-            actionBar.hide();
-        } else {
-            actionBar.setCustomView(null);
-            actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);
-            actionBar.setDisplayHomeAsUpEnabled(true);
-            actionBar.show();
-            // Use X instead of <- in the action bar
-            actionBar.setHomeAsUpIndicator(R.drawable.ic_remove_small_light);
-            actionBar.setTitle(actionBarTitleResId);
-        }
-    }
-
-    /**
-     * Returns the resource Id used for the action bar title.
-     */
-    abstract int getActionBarTitleResId();
-
-    /**
-     * Throws an exception if the media chooser object doesn't require data support.
-     */
-    public void onDataUpdated(final Object data, final int loaderId) {
-        throw new IllegalStateException();
-    }
-
-    /**
-     * Called by the MediaPicker to determine whether this panel can be swiped down further. If
-     * not, then a swipe down gestured will be captured by the MediaPickerPanel to shrink the
-     * entire panel.
-     */
-    public boolean canSwipeDown() {
-        return false;
-    }
-
-    /**
-     * Typically the media picker is closed when the IME is opened, but this allows the chooser to
-     * specify that showing the IME is okay while the chooser is up
-     */
-    public boolean canShowIme() {
-        return false;
-    }
-
-    public boolean onBackPressed() {
-        return false;
-    }
-
-    public void onCreateOptionsMenu(final MenuInflater inflater, final Menu menu) {
-    }
-
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        return false;
-    }
-
-    public void setThemeColor(final int color) {
-    }
-
-    /**
-     * Returns true if the chooser is owning any incoming touch events, so that the media picker
-     * panel won't process it and slide the panel.
-     */
-    public boolean isHandlingTouch() {
-        return false;
-    }
-
-    public void stopTouchHandling() {
-    }
-
-    protected void onActivityResult(
-            final int requestCode, final int resultCode, final Intent data) {}
-
-    @Override
-    public int getConversationSelfSubId() {
-        return mMediaPicker.getConversationSelfSubId();
-    }
-
-    /** Optional activity life-cycle methods to be overridden by subclasses */
-    public void onPause() { }
-    public void onResume() { }
-    protected void onRequestPermissionsResult(
-            final int requestCode, final String permissions[], final int[] grantResults) { }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/MediaPicker.java b/src/com/android/messaging/ui/mediapicker/MediaPicker.java
deleted file mode 100644
index c7faa33..0000000
--- a/src/com/android/messaging/ui/mediapicker/MediaPicker.java
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.Handler;
-import androidx.viewpager.widget.PagerAdapter;
-import androidx.viewpager.widget.ViewPager;
-import androidx.appcompat.app.ActionBar;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.binding.ImmutableBindingRef;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.MediaPickerData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.PendingAttachmentData;
-import com.android.messaging.datamodel.data.DraftMessageData.DraftMessageSubscriptionDataProvider;
-import com.android.messaging.ui.BugleActionBarActivity;
-import com.android.messaging.ui.FixedViewPagerAdapter;
-import com.android.messaging.util.AccessibilityUtil;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.UiUtils;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * Fragment used to select or capture media to be added to the message
- */
-public class MediaPicker extends Fragment implements DraftMessageSubscriptionDataProvider {
-    /** The listener interface for events from the media picker */
-    public interface MediaPickerListener {
-        /** Called when the media picker is opened so the host can accommodate the UI */
-        void onOpened();
-
-        /**
-         * Called when the media picker goes into or leaves full screen mode so the host can
-         * accommodate the fullscreen UI
-         */
-        void onFullScreenChanged(boolean fullScreen);
-
-        /**
-         * Called when the user selects one or more items
-         * @param items The list of items which were selected
-         */
-        void onItemsSelected(Collection<MessagePartData> items, boolean dismissMediaPicker);
-
-        /**
-         * Called when the user unselects one item.
-         */
-        void onItemUnselected(MessagePartData item);
-
-        /**
-         * Called when the media picker is closed.  Always called immediately after onItemsSelected
-         */
-        void onDismissed();
-
-        /**
-         * Called when media item selection is confirmed in a multi-select action.
-         */
-        void onConfirmItemSelection();
-
-        /**
-         * Called when a pending attachment is added.
-         * @param pendingItem the pending attachment data being loaded.
-         */
-        void onPendingItemAdded(PendingAttachmentData pendingItem);
-
-        /**
-         * Called when a new media chooser is selected.
-         */
-        void onChooserSelected(final int chooserIndex);
-    }
-
-    /** The tag used when registering and finding this fragment */
-    public static final String FRAGMENT_TAG = "mediapicker";
-
-    // Media type constants that the media picker supports
-    public static final int MEDIA_TYPE_DEFAULT     = 0x0000;
-    public static final int MEDIA_TYPE_NONE        = 0x0000;
-    public static final int MEDIA_TYPE_IMAGE       = 0x0001;
-    public static final int MEDIA_TYPE_VIDEO       = 0x0002;
-    public static final int MEDIA_TYPE_AUDIO       = 0x0004;
-    public static final int MEDIA_TYPE_VCARD       = 0x0008;
-    public static final int MEDIA_TYPE_LOCATION    = 0x0010;
-    private static final int MEDA_TYPE_INVALID     = 0x0020;
-    public static final int MEDIA_TYPE_ALL         = 0xFFFF;
-
-    /** The listener to call when events occur */
-    private MediaPickerListener mListener;
-
-    /** The handler used to dispatch calls to the listener */
-    private Handler mListenerHandler;
-
-    /** The bit flags of media types supported */
-    private int mSupportedMediaTypes;
-
-    /** The list of choosers which could be within the media picker */
-    private final MediaChooser[] mChoosers;
-
-    /** The list of currently enabled choosers */
-    private final ArrayList<MediaChooser> mEnabledChoosers;
-
-    /** The currently selected chooser */
-    private MediaChooser mSelectedChooser;
-
-    /** The main panel that controls the custom layout */
-    private MediaPickerPanel mMediaPickerPanel;
-
-    /** The linear layout that holds the icons to select individual chooser tabs */
-    private LinearLayout mTabStrip;
-
-    /** The view pager to swap between choosers */
-    private ViewPager mViewPager;
-
-    /** The current pager adapter for the view pager */
-    private FixedViewPagerAdapter<MediaChooser> mPagerAdapter;
-
-    /** True if the media picker is visible */
-    private boolean mOpen;
-
-    /** The theme color to use to make the media picker match the rest of the UI */
-    private int mThemeColor;
-
-    @VisibleForTesting
-    final Binding<MediaPickerData> mBinding = BindingBase.createBinding(this);
-
-    /** Provides subscription-related data to access per-subscription configurations. */
-    private DraftMessageSubscriptionDataProvider mSubscriptionDataProvider;
-
-    /** Provides access to DraftMessageData associated with the current conversation */
-    private ImmutableBindingRef<DraftMessageData> mDraftMessageDataModel;
-
-    public MediaPicker() {
-        this(Factory.get().getApplicationContext());
-    }
-
-    public MediaPicker(final Context context) {
-        mBinding.bind(DataModel.get().createMediaPickerData(context));
-        mEnabledChoosers = new ArrayList<MediaChooser>();
-        mChoosers = new MediaChooser[] {
-            new CameraMediaChooser(this),
-            new GalleryMediaChooser(this),
-            new AudioMediaChooser(this),
-            new ContactMediaChooser(this),
-        };
-
-        mOpen = false;
-        setSupportedMediaTypes(MEDIA_TYPE_ALL);
-    }
-
-    private boolean mIsAttached;
-    private int mStartingMediaTypeOnAttach = MEDA_TYPE_INVALID;
-    private boolean mAnimateOnAttach;
-
-    @Override
-    public void onAttach (final Activity activity) {
-        super.onAttach(activity);
-        mIsAttached = true;
-        if (mStartingMediaTypeOnAttach != MEDA_TYPE_INVALID) {
-            // open() was previously called. Do the pending open now.
-            doOpen(mStartingMediaTypeOnAttach, mAnimateOnAttach);
-        }
-    }
-
-    @Override
-    public void onCreate(final Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mBinding.getData().init(getLoaderManager());
-    }
-
-    @Override
-    public View onCreateView(
-            final LayoutInflater inflater,
-            final ViewGroup container,
-            final Bundle savedInstanceState) {
-        mMediaPickerPanel = (MediaPickerPanel) inflater.inflate(
-                R.layout.mediapicker_fragment,
-                container,
-                false);
-        mMediaPickerPanel.setMediaPicker(this);
-        mTabStrip = (LinearLayout) mMediaPickerPanel.findViewById(R.id.mediapicker_tabstrip);
-        mTabStrip.setBackgroundColor(mThemeColor);
-        for (final MediaChooser chooser : mChoosers) {
-            chooser.onCreateTabButton(inflater, mTabStrip);
-            final boolean enabled = (chooser.getSupportedMediaTypes() & mSupportedMediaTypes) !=
-                    MEDIA_TYPE_NONE;
-            final ImageButton tabButton = chooser.getTabButton();
-            if (tabButton != null) {
-                tabButton.setVisibility(enabled ? View.VISIBLE : View.GONE);
-                mTabStrip.addView(tabButton);
-            }
-        }
-
-        mViewPager = (ViewPager) mMediaPickerPanel.findViewById(R.id.mediapicker_view_pager);
-        mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
-            @Override
-            public void onPageScrolled(
-                    final int position,
-                    final float positionOffset,
-                    final int positionOffsetPixels) {
-            }
-
-            @Override
-            public void onPageSelected(int position) {
-                // The position returned is relative to if we are in RtL mode. This class never
-                // switches the indices of the elements if we are in RtL mode so we need to
-                // translate the index back. For example, if the user clicked the item most to the
-                // right in RtL mode we would want the index to appear as 0 here, however the
-                // position returned would the last possible index.
-                if (UiUtils.isRtlMode()) {
-                    position = mEnabledChoosers.size() - 1 - position;
-                }
-                selectChooser(mEnabledChoosers.get(position));
-            }
-
-            @Override
-            public void onPageScrollStateChanged(final int state) {
-            }
-        });
-        // Camera initialization is expensive, so don't realize offscreen pages if not needed.
-        mViewPager.setOffscreenPageLimit(0);
-        mViewPager.setAdapter(mPagerAdapter);
-        final boolean isTouchExplorationEnabled = AccessibilityUtil.isTouchExplorationEnabled(
-                getActivity());
-        mMediaPickerPanel.setFullScreenOnly(isTouchExplorationEnabled);
-        mMediaPickerPanel.setExpanded(mOpen, true, mEnabledChoosers.indexOf(mSelectedChooser));
-        return mMediaPickerPanel;
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        CameraManager.get().onPause();
-        for (final MediaChooser chooser : mEnabledChoosers) {
-            chooser.onPause();
-        }
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        CameraManager.get().onResume();
-
-        for (final MediaChooser chooser : mEnabledChoosers) {
-            chooser.onResume();
-        }
-    }
-
-    @Override
-    public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-        mSelectedChooser.onActivityResult(requestCode, resultCode, data);
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        mBinding.unbind();
-    }
-
-    /**
-     * Sets the theme color to make the media picker match the surrounding UI
-     * @param themeColor The new theme color
-     */
-    public void setConversationThemeColor(final int themeColor) {
-        mThemeColor = themeColor;
-        if (mTabStrip != null) {
-            mTabStrip.setBackgroundColor(mThemeColor);
-        }
-
-        for (final MediaChooser chooser : mEnabledChoosers) {
-            chooser.setThemeColor(mThemeColor);
-        }
-    }
-
-    /**
-     * Gets the current conversation theme color.
-     */
-    public int getConversationThemeColor() {
-        return mThemeColor;
-    }
-
-    public void setDraftMessageDataModel(final BindingBase<DraftMessageData> draftBinding) {
-        mDraftMessageDataModel = Binding.createBindingReference(draftBinding);
-    }
-
-    public ImmutableBindingRef<DraftMessageData> getDraftMessageDataModel() {
-        return mDraftMessageDataModel;
-    }
-
-    public void setSubscriptionDataProvider(final DraftMessageSubscriptionDataProvider provider) {
-        mSubscriptionDataProvider = provider;
-    }
-
-    @Override
-    public int getConversationSelfSubId() {
-        return mSubscriptionDataProvider.getConversationSelfSubId();
-    }
-
-    /**
-     * Opens the media picker and optionally shows the chooser for the supplied media type
-     * @param startingMediaType The media type of the chooser to open if {@link #MEDIA_TYPE_DEFAULT}
-     *                          is used, then the default chooser from saved shared prefs is opened
-     */
-    public void open(final int startingMediaType, final boolean animate) {
-        mOpen = true;
-        if (mIsAttached) {
-            doOpen(startingMediaType, animate);
-        } else {
-            // open() can get called immediately after the MediaPicker is created. In that case,
-            // we defer doing work as it may require an attached fragment (eg. calling
-            // Fragment#requestPermission)
-            mStartingMediaTypeOnAttach = startingMediaType;
-            mAnimateOnAttach = animate;
-        }
-    }
-
-    private void doOpen(int startingMediaType, final boolean animate) {
-        final boolean isTouchExplorationEnabled = AccessibilityUtil.isTouchExplorationEnabled(
-                // getActivity() will be null at this point
-                Factory.get().getApplicationContext());
-
-        // If no specific starting type is specified (i.e. MEDIA_TYPE_DEFAULT), try to get the
-        // last opened chooser index from shared prefs.
-        if (startingMediaType == MEDIA_TYPE_DEFAULT) {
-            final int selectedChooserIndex = mBinding.getData().getSelectedChooserIndex();
-            if (selectedChooserIndex >= 0 && selectedChooserIndex < mEnabledChoosers.size()) {
-                selectChooser(mEnabledChoosers.get(selectedChooserIndex));
-            } else {
-                // This is the first time the picker is being used
-                if (isTouchExplorationEnabled) {
-                    // Accessibility defaults to audio attachment mode.
-                    startingMediaType = MEDIA_TYPE_AUDIO;
-                }
-            }
-        }
-
-        if (mSelectedChooser == null) {
-            for (final MediaChooser chooser : mEnabledChoosers) {
-                if (startingMediaType == MEDIA_TYPE_DEFAULT ||
-                        (startingMediaType & chooser.getSupportedMediaTypes()) != MEDIA_TYPE_NONE) {
-                    selectChooser(chooser);
-                    break;
-                }
-            }
-        }
-
-        if (mSelectedChooser == null) {
-            // Fall back to the first chooser.
-            selectChooser(mEnabledChoosers.get(0));
-        }
-
-        if (mMediaPickerPanel != null) {
-            mMediaPickerPanel.setFullScreenOnly(isTouchExplorationEnabled);
-            mMediaPickerPanel.setExpanded(true, animate,
-                    mEnabledChoosers.indexOf(mSelectedChooser));
-        }
-    }
-
-    /** @return True if the media picker is open */
-    public boolean isOpen() {
-        return mOpen;
-    }
-
-    /**
-     * Sets the list of media types to allow the user to select
-     * @param mediaTypes The bit flags of media types to allow.  Can be any combination of the
-     *                   MEDIA_TYPE_* values
-     */
-    void setSupportedMediaTypes(final int mediaTypes) {
-        mSupportedMediaTypes = mediaTypes;
-        mEnabledChoosers.clear();
-        boolean selectNextChooser = false;
-        for (final MediaChooser chooser : mChoosers) {
-            final boolean enabled = (chooser.getSupportedMediaTypes() & mSupportedMediaTypes) !=
-                    MEDIA_TYPE_NONE;
-            if (enabled) {
-                // TODO Add a way to inform the chooser which media types are supported
-                mEnabledChoosers.add(chooser);
-                if (selectNextChooser) {
-                    selectChooser(chooser);
-                    selectNextChooser = false;
-                }
-            } else if (mSelectedChooser == chooser) {
-                selectNextChooser = true;
-            }
-            final ImageButton tabButton = chooser.getTabButton();
-            if (tabButton != null) {
-                tabButton.setVisibility(enabled ? View.VISIBLE : View.GONE);
-            }
-        }
-
-        if (selectNextChooser && mEnabledChoosers.size() > 0) {
-            selectChooser(mEnabledChoosers.get(0));
-        }
-        final MediaChooser[] enabledChoosers = new MediaChooser[mEnabledChoosers.size()];
-        mEnabledChoosers.toArray(enabledChoosers);
-        mPagerAdapter = new FixedViewPagerAdapter<MediaChooser>(enabledChoosers);
-        if (mViewPager != null) {
-            mViewPager.setAdapter(mPagerAdapter);
-        }
-
-        // Only rebind data if we are currently bound. Otherwise, we must have not
-        // bound to any data yet and should wait until onCreate() to bind data.
-        if (mBinding.isBound() && getActivity() != null) {
-            mBinding.unbind();
-            mBinding.bind(DataModel.get().createMediaPickerData(getActivity()));
-            mBinding.getData().init(getLoaderManager());
-        }
-    }
-
-    ViewPager getViewPager() {
-        return mViewPager;
-    }
-
-    /** Hides the media picker, and frees up any resources it’s using */
-    public void dismiss(final boolean animate) {
-        mOpen = false;
-        if (mMediaPickerPanel != null) {
-            mMediaPickerPanel.setExpanded(false, animate, MediaPickerPanel.PAGE_NOT_SET);
-        }
-        mSelectedChooser = null;
-    }
-
-    /**
-     * Sets the listener for the media picker events
-     * @param listener The listener which will receive events
-     */
-    public void setListener(final MediaPickerListener listener) {
-        Assert.isMainThread();
-        mListener = listener;
-        mListenerHandler = listener != null ? new Handler() : null;
-    }
-
-    /** @return True if the media picker is in full-screen mode */
-    public boolean isFullScreen() {
-        return mMediaPickerPanel != null && mMediaPickerPanel.isFullScreen();
-    }
-
-    public void setFullScreen(final boolean fullScreen) {
-        mMediaPickerPanel.setFullScreenView(fullScreen, true);
-    }
-
-    public void updateActionBar(final ActionBar actionBar) {
-        if (getActivity() == null) {
-            return;
-        }
-        if (isFullScreen() && mSelectedChooser != null) {
-            mSelectedChooser.updateActionBar(actionBar);
-        } else {
-            actionBar.hide();
-        }
-    }
-
-    /**
-     * Selects a new chooser
-     * @param newSelectedChooser The newly selected chooser
-     */
-    void selectChooser(final MediaChooser newSelectedChooser) {
-        if (mSelectedChooser == newSelectedChooser) {
-            return;
-        }
-
-        if (mSelectedChooser != null) {
-            mSelectedChooser.setSelected(false);
-        }
-        mSelectedChooser = newSelectedChooser;
-        if (mSelectedChooser != null) {
-            mSelectedChooser.setSelected(true);
-        }
-
-        final int chooserIndex = mEnabledChoosers.indexOf(mSelectedChooser);
-        if (mViewPager != null) {
-            mViewPager.setCurrentItem(chooserIndex, true /* smoothScroll */);
-        }
-
-        if (isFullScreen()) {
-            invalidateOptionsMenu();
-        }
-
-        // Save the newly selected chooser's index so we may directly switch to it the
-        // next time user opens the media picker.
-        mBinding.getData().saveSelectedChooserIndex(chooserIndex);
-        if (mMediaPickerPanel != null) {
-            mMediaPickerPanel.onChooserChanged();
-        }
-        dispatchChooserSelected(chooserIndex);
-    }
-
-    public boolean canShowIme() {
-        if (mSelectedChooser != null) {
-            return mSelectedChooser.canShowIme();
-        }
-        return false;
-    }
-
-    public boolean onBackPressed() {
-        return mSelectedChooser != null && mSelectedChooser.onBackPressed();
-    }
-
-    void invalidateOptionsMenu() {
-        ((BugleActionBarActivity) getActivity()).supportInvalidateOptionsMenu();
-    }
-
-    void dispatchOpened() {
-        setHasOptionsMenu(false);
-        mOpen = true;
-        mPagerAdapter.notifyDataSetChanged();
-        if (mListener != null) {
-            mListenerHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mListener.onOpened();
-                }
-            });
-        }
-        if (mSelectedChooser != null) {
-            mSelectedChooser.onFullScreenChanged(false);
-            mSelectedChooser.onOpenedChanged(true);
-        }
-    }
-
-    void dispatchDismissed() {
-        setHasOptionsMenu(false);
-        mOpen = false;
-        if (mListener != null) {
-            mListenerHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mListener.onDismissed();
-                }
-            });
-        }
-        if (mSelectedChooser != null) {
-            mSelectedChooser.onOpenedChanged(false);
-        }
-    }
-
-    void dispatchFullScreen(final boolean fullScreen) {
-        setHasOptionsMenu(fullScreen);
-        if (mListener != null) {
-            mListenerHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mListener.onFullScreenChanged(fullScreen);
-                }
-            });
-        }
-        if (mSelectedChooser != null) {
-            mSelectedChooser.onFullScreenChanged(fullScreen);
-        }
-    }
-
-    void dispatchItemsSelected(final MessagePartData item, final boolean dismissMediaPicker) {
-        final List<MessagePartData> items = new ArrayList<MessagePartData>(1);
-        items.add(item);
-        dispatchItemsSelected(items, dismissMediaPicker);
-    }
-
-    void dispatchItemsSelected(final Collection<MessagePartData> items,
-            final boolean dismissMediaPicker) {
-        if (mListener != null) {
-            mListenerHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mListener.onItemsSelected(items, dismissMediaPicker);
-                }
-            });
-        }
-
-        if (isFullScreen() && !dismissMediaPicker) {
-            invalidateOptionsMenu();
-        }
-    }
-
-    void dispatchItemUnselected(final MessagePartData item) {
-        if (mListener != null) {
-            mListenerHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mListener.onItemUnselected(item);
-                }
-            });
-        }
-
-        if (isFullScreen()) {
-            invalidateOptionsMenu();
-        }
-    }
-
-    void dispatchConfirmItemSelection() {
-        if (mListener != null) {
-            mListenerHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mListener.onConfirmItemSelection();
-                }
-            });
-        }
-    }
-
-    void dispatchPendingItemAdded(final PendingAttachmentData pendingItem) {
-        if (mListener != null) {
-            mListenerHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mListener.onPendingItemAdded(pendingItem);
-                }
-            });
-        }
-
-        if (isFullScreen()) {
-            invalidateOptionsMenu();
-        }
-    }
-
-    void dispatchChooserSelected(final int chooserIndex) {
-        if (mListener != null) {
-            mListenerHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    mListener.onChooserSelected(chooserIndex);
-                }
-            });
-        }
-    }
-
-    public boolean canSwipeDownChooser() {
-        return mSelectedChooser == null ? false : mSelectedChooser.canSwipeDown();
-    }
-
-    public boolean isChooserHandlingTouch() {
-        return mSelectedChooser == null ? false : mSelectedChooser.isHandlingTouch();
-    }
-
-    public void stopChooserTouchHandling() {
-        if (mSelectedChooser != null) {
-            mSelectedChooser.stopTouchHandling();
-        }
-    }
-
-    boolean getChooserShowsActionBarInFullScreen() {
-        return mSelectedChooser == null ? false : mSelectedChooser.getActionBarTitleResId() != 0;
-    }
-
-    @Override
-    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
-        if (mSelectedChooser != null) {
-            mSelectedChooser.onCreateOptionsMenu(inflater, menu);
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        return (mSelectedChooser != null && mSelectedChooser.onOptionsItemSelected(item)) ||
-                super.onOptionsItemSelected(item);
-    }
-
-    PagerAdapter getPagerAdapter() {
-        return mPagerAdapter;
-    }
-
-    public void resetViewHolderState() {
-        mPagerAdapter.resetState();
-    }
-
-    public ImmutableBindingRef<MediaPickerData> getMediaPickerDataBinding() {
-        return BindingBase.createBindingReference(mBinding);
-    }
-
-    protected static final int CAMERA_PERMISSION_REQUEST_CODE = 1;
-    protected static final int LOCATION_PERMISSION_REQUEST_CODE = 2;
-    protected static final int RECORD_AUDIO_PERMISSION_REQUEST_CODE = 3;
-    protected static final int GALLERY_PERMISSION_REQUEST_CODE = 4;
-    protected static final int READ_CONTACT_PERMISSION_REQUEST_CODE = 5;
-
-    @Override
-    public void onRequestPermissionsResult(
-            final int requestCode, final String permissions[], final int[] grantResults) {
-        if (mSelectedChooser != null) {
-            mSelectedChooser.onRequestPermissionsResult(requestCode, permissions, grantResults);
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/MediaPickerGridView.java b/src/com/android/messaging/ui/mediapicker/MediaPickerGridView.java
deleted file mode 100644
index cc3a4a1..0000000
--- a/src/com/android/messaging/ui/mediapicker/MediaPickerGridView.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.GridView;
-
-public class MediaPickerGridView extends GridView {
-
-    public MediaPickerGridView(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    /**
-     * Returns if the grid view can be swiped down further. It cannot be swiped down
-     * if there's no item or if we are already at the top.
-     */
-    public boolean canSwipeDown() {
-        if (getAdapter() == null || getAdapter().getCount() == 0 || getChildCount() == 0) {
-            return false;
-        }
-
-        final int firstVisiblePosition = getFirstVisiblePosition();
-        if (firstVisiblePosition == 0 && getChildAt(0).getTop() >= 0) {
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/MediaPickerPanel.java b/src/com/android/messaging/ui/mediapicker/MediaPickerPanel.java
deleted file mode 100644
index 56b0a03..0000000
--- a/src/com/android/messaging/ui/mediapicker/MediaPickerPanel.java
+++ /dev/null
@@ -1,563 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.os.Handler;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.view.animation.Animation;
-import android.view.animation.Transformation;
-import android.widget.LinearLayout;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.PagingAwareViewPager;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.UiUtils;
-
-/**
- * Custom layout panel which makes the MediaPicker animations seamless and synchronized
- * Designed to be very specific to the MediaPicker's usage
- */
-public class MediaPickerPanel extends ViewGroup {
-    /**
-     * The window of time in which we might to decide to reinterpret the intent of a gesture.
-     */
-    private static final long TOUCH_RECAPTURE_WINDOW_MS = 500L;
-
-    // The two view components to layout
-    private LinearLayout mTabStrip;
-    private boolean mFullScreenOnly;
-    private PagingAwareViewPager mViewPager;
-
-    /**
-     * True if the MediaPicker is full screen or animating into it
-     */
-    private boolean mFullScreen;
-
-    /**
-     * True if the MediaPicker is open at all
-     */
-    private boolean mExpanded;
-
-    /**
-     * The current desired height of the MediaPicker.  This property may be animated and the
-     * measure pass uses it to determine what size the components are.
-     */
-    private int mCurrentDesiredHeight;
-
-    private final Handler mHandler = new Handler();
-
-    /**
-     * The media picker for dispatching events to the MediaPicker's listener
-     */
-    private MediaPicker mMediaPicker;
-
-    /**
-     * The computed default "half-screen" height of the view pager in px
-     */
-    private final int mDefaultViewPagerHeight;
-
-    /**
-     * The action bar height used to compute the padding on the view pager when it's full screen.
-     */
-    private final int mActionBarHeight;
-
-    private TouchHandler mTouchHandler;
-
-    static final int PAGE_NOT_SET = -1;
-
-    public MediaPickerPanel(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-        // Cache the computed dimension
-        mDefaultViewPagerHeight = getResources().getDimensionPixelSize(
-                R.dimen.mediapicker_default_chooser_height);
-        mActionBarHeight = getResources().getDimensionPixelSize(R.dimen.action_bar_height);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mTabStrip = (LinearLayout) findViewById(R.id.mediapicker_tabstrip);
-        mViewPager = (PagingAwareViewPager) findViewById(R.id.mediapicker_view_pager);
-        mTouchHandler = new TouchHandler();
-        setOnTouchListener(mTouchHandler);
-        mViewPager.setOnTouchListener(mTouchHandler);
-
-        // Make sure full screen mode is updated in landscape mode change when the panel is open.
-        addOnLayoutChangeListener(new OnLayoutChangeListener() {
-            private boolean mLandscapeMode = UiUtils.isLandscapeMode();
-
-            @Override
-            public void onLayoutChange(View v, int left, int top, int right, int bottom,
-                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                final boolean newLandscapeMode = UiUtils.isLandscapeMode();
-                if (mLandscapeMode != newLandscapeMode) {
-                    mLandscapeMode = newLandscapeMode;
-                    if (mExpanded) {
-                        setExpanded(mExpanded, false /* animate */, mViewPager.getCurrentItem(),
-                                true /* force */);
-                    }
-                }
-            }
-        });
-    }
-
-    @Override
-    protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
-        int requestedHeight = MeasureSpec.getSize(heightMeasureSpec);
-        if (mMediaPicker.getChooserShowsActionBarInFullScreen()) {
-            requestedHeight -= mActionBarHeight;
-        }
-        int desiredHeight = Math.min(mCurrentDesiredHeight, requestedHeight);
-        if (mExpanded && desiredHeight == 0) {
-            // If we want to be shown, we have to have a non-0 height.  Returning a height of 0 will
-            // cause the framework to abort the animation from 0, so we must always have some
-            // height once we start expanding
-            desiredHeight = 1;
-        } else if (!mExpanded && desiredHeight == 0) {
-            mViewPager.setVisibility(View.GONE);
-            mViewPager.setAdapter(null);
-        }
-
-        measureChild(mTabStrip, widthMeasureSpec, heightMeasureSpec);
-
-        int tabStripHeight;
-        if (requiresFullScreen()) {
-            // Ensure that the tab strip is always visible, even in full screen.
-            tabStripHeight = mTabStrip.getMeasuredHeight();
-        } else {
-            // Slide out the tab strip at the end of the animation to full screen.
-            tabStripHeight = Math.min(mTabStrip.getMeasuredHeight(),
-                    requestedHeight - desiredHeight);
-        }
-
-        // If we are animating and have an interim desired height, use the default height. We can't
-        // take the max here as on some devices the mDefaultViewPagerHeight may be too big in
-        // landscape mode after animation.
-        final int tabAdjustedDesiredHeight = desiredHeight - tabStripHeight;
-        final int viewPagerHeight =
-                tabAdjustedDesiredHeight <= 1 ? mDefaultViewPagerHeight : tabAdjustedDesiredHeight;
-
-        int viewPagerHeightMeasureSpec = MeasureSpec.makeMeasureSpec(
-                viewPagerHeight, MeasureSpec.EXACTLY);
-        measureChild(mViewPager, widthMeasureSpec, viewPagerHeightMeasureSpec);
-        setMeasuredDimension(mViewPager.getMeasuredWidth(), desiredHeight);
-    }
-
-    @Override
-    protected void onLayout(final boolean changed, final int left, final int top, final int right,
-            final int bottom) {
-        int y = top;
-        final int width = right - left;
-
-        final int viewPagerHeight = mViewPager.getMeasuredHeight();
-        mViewPager.layout(0, y, width, y + viewPagerHeight);
-        y += viewPagerHeight;
-
-        mTabStrip.layout(0, y, width, y + mTabStrip.getMeasuredHeight());
-    }
-
-    void onChooserChanged() {
-        if (mFullScreen) {
-            setDesiredHeight(getDesiredHeight(), true);
-        }
-    }
-
-    void setFullScreenOnly(boolean fullScreenOnly) {
-        mFullScreenOnly = fullScreenOnly;
-    }
-
-    boolean isFullScreen() {
-        return mFullScreen;
-    }
-
-    void setMediaPicker(final MediaPicker mediaPicker) {
-        mMediaPicker = mediaPicker;
-    }
-
-    /**
-     * Get the desired height of the media picker panel for when the panel is not in motion (i.e.
-     * not being dragged by the user).
-     */
-    private int getDesiredHeight() {
-        if (mFullScreen) {
-            int fullHeight = getContext().getResources().getDisplayMetrics().heightPixels;
-            if (OsUtil.isAtLeastKLP() && isAttachedToWindow()) {
-                // When we're attached to the window, we can get an accurate height, not necessary
-                // on older API level devices because they don't include the action bar height
-                View composeContainer =
-                        getRootView().findViewById(R.id.conversation_and_compose_container);
-                if (composeContainer != null) {
-                    // protect against composeContainer having been unloaded already
-                    fullHeight -= UiUtils.getMeasuredBoundsOnScreen(composeContainer).top;
-                }
-            }
-            if (mMediaPicker.getChooserShowsActionBarInFullScreen()) {
-                return fullHeight - mActionBarHeight;
-            } else {
-                return fullHeight;
-            }
-        } else if (mExpanded) {
-            return LayoutParams.WRAP_CONTENT;
-        } else {
-            return 0;
-        }
-    }
-
-    private void setupViewPager(final int startingPage) {
-        mViewPager.setVisibility(View.VISIBLE);
-        if (startingPage >= 0 && startingPage < mMediaPicker.getPagerAdapter().getCount()) {
-            mViewPager.setAdapter(mMediaPicker.getPagerAdapter());
-            mViewPager.setCurrentItem(startingPage);
-        }
-        updateViewPager();
-    }
-
-    /**
-     * Expand the media picker panel. Since we always set the pager adapter to null when the panel
-     * is collapsed, we need to restore the adapter and the starting page.
-     * @param expanded expanded or collapsed
-     * @param animate need animation
-     * @param startingPage the desired selected page to start
-     */
-    void setExpanded(final boolean expanded, final boolean animate, final int startingPage) {
-        setExpanded(expanded, animate, startingPage, false /* force */);
-    }
-
-    private void setExpanded(final boolean expanded, final boolean animate, final int startingPage,
-            final boolean force) {
-        if (expanded == mExpanded && !force) {
-            return;
-        }
-        mFullScreen = false;
-        mExpanded = expanded;
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                setDesiredHeight(getDesiredHeight(), animate);
-            }
-        });
-        if (expanded) {
-            setupViewPager(startingPage);
-            mMediaPicker.dispatchOpened();
-        } else {
-            mMediaPicker.dispatchDismissed();
-        }
-
-        // Call setFullScreenView() when we are in landscape mode so it can go full screen as
-        // soon as it is expanded.
-        if (expanded && requiresFullScreen()) {
-            setFullScreenView(true, animate);
-        }
-    }
-
-    private boolean requiresFullScreen() {
-        return mFullScreenOnly || UiUtils.isLandscapeMode();
-    }
-
-    private void setDesiredHeight(int height, final boolean animate) {
-        final int startHeight = mCurrentDesiredHeight;
-        if (height == LayoutParams.WRAP_CONTENT) {
-            height = measureHeight();
-        }
-        clearAnimation();
-        if (animate) {
-            final int deltaHeight = height - startHeight;
-            final Animation animation = new Animation() {
-                @Override
-                protected void applyTransformation(final float interpolatedTime,
-                        final Transformation t) {
-                    mCurrentDesiredHeight = (int) (startHeight + deltaHeight * interpolatedTime);
-                    requestLayout();
-                }
-
-                @Override
-                public boolean willChangeBounds() {
-                    return true;
-                }
-            };
-            animation.setDuration(UiUtils.MEDIAPICKER_TRANSITION_DURATION);
-            animation.setInterpolator(UiUtils.EASE_OUT_INTERPOLATOR);
-            startAnimation(animation);
-        } else {
-            mCurrentDesiredHeight = height;
-        }
-        requestLayout();
-    }
-
-    /**
-     * @return The minimum total height of the view
-     */
-    private int measureHeight() {
-        final int measureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE, MeasureSpec.AT_MOST);
-        measureChild(mTabStrip, measureSpec, measureSpec);
-        return mDefaultViewPagerHeight + mTabStrip.getMeasuredHeight();
-    }
-
-    /**
-     * Enters or leaves full screen view
-     *
-     * @param fullScreen True to enter full screen view, false to leave
-     * @param animate    True to animate the transition
-     */
-    void setFullScreenView(final boolean fullScreen, final boolean animate) {
-        if (fullScreen == mFullScreen) {
-            return;
-        }
-
-        if (requiresFullScreen() && !fullScreen) {
-            setExpanded(false /* expanded */, true /* animate */, PAGE_NOT_SET);
-            return;
-        }
-        mFullScreen = fullScreen;
-        setDesiredHeight(getDesiredHeight(), animate);
-        mMediaPicker.dispatchFullScreen(mFullScreen);
-        updateViewPager();
-    }
-
-    /**
-     * ViewPager should have its paging disabled when in full screen mode.
-     */
-    private void updateViewPager() {
-        mViewPager.setPagingEnabled(!mFullScreen);
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(final MotionEvent ev) {
-        return mTouchHandler.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev);
-    }
-
-    /**
-     * Helper class to handle touch events and swipe gestures
-     */
-    private class TouchHandler implements OnTouchListener {
-        /**
-         * The height of the view when the touch press started
-         */
-        private int mDownHeight = -1;
-
-        /**
-         * True if the panel moved at all (changed height) during the drag
-         */
-        private boolean mMoved = false;
-
-        // The threshold constants converted from DP to px
-        private final float mFlingThresholdPx;
-        private final float mBigFlingThresholdPx;
-
-        // The system defined pixel size to determine when a movement is considered a drag.
-        private final int mTouchSlop;
-
-        /**
-         * A copy of the MotionEvent that started the drag/swipe gesture
-         */
-        private MotionEvent mDownEvent;
-
-        /**
-         * Whether we are currently moving down. We may not be able to move down in full screen
-         * mode when the child view can swipe down (such as a list view).
-         */
-        private boolean mMovedDown = false;
-
-        /**
-         * Indicates whether the child view contained in the panel can swipe down at the beginning
-         * of the drag event (i.e. the initial down). The MediaPanel can contain
-         * scrollable children such as a list view / grid view. If the child view can swipe down,
-         * We want to let the child view handle the scroll first instead of handling it ourselves.
-         */
-        private boolean mCanChildViewSwipeDown = false;
-
-        /**
-         * Necessary direction ratio for a fling to be considered in one direction this prevents
-         * horizontal swipes with small vertical components from triggering vertical swipe actions
-         */
-        private static final float DIRECTION_RATIO = 1.1f;
-
-        TouchHandler() {
-            final Resources resources = getContext().getResources();
-            final ViewConfiguration configuration = ViewConfiguration.get(getContext());
-            mFlingThresholdPx = resources.getDimensionPixelSize(
-                    R.dimen.mediapicker_fling_threshold);
-            mBigFlingThresholdPx = resources.getDimensionPixelSize(
-                    R.dimen.mediapicker_big_fling_threshold);
-            mTouchSlop = configuration.getScaledTouchSlop();
-        }
-
-        /**
-         * The media picker panel may contain scrollable children such as a GridView, which eats
-         * all touch events before we get to it. Therefore, we'd like to intercept these events
-         * before the children to determine if we should handle swiping down in full screen mode.
-         * In non-full screen mode, we should handle all vertical scrolling events and leave
-         * horizontal scrolling to the view pager.
-         */
-        public boolean onInterceptTouchEvent(final MotionEvent ev) {
-            switch (ev.getActionMasked()) {
-                case MotionEvent.ACTION_DOWN:
-                    // Never capture the initial down, so that the children may handle it
-                    // as well. Let the touch handler know about the down event as well.
-                    mTouchHandler.onTouch(MediaPickerPanel.this, ev);
-
-                    // Ask the MediaPicker whether the contained view can be swiped down.
-                    // We record the value at the start of the drag to decide the swiping mode
-                    // for the entire motion.
-                    mCanChildViewSwipeDown = mMediaPicker.canSwipeDownChooser();
-                    return false;
-
-                case MotionEvent.ACTION_MOVE: {
-                    if (mMediaPicker.isChooserHandlingTouch()) {
-                        if (shouldAllowRecaptureTouch(ev)) {
-                            mMediaPicker.stopChooserTouchHandling();
-                            mViewPager.setPagingEnabled(true);
-                            return false;
-                        }
-                        // If the chooser is claiming ownership on all touch events, then we
-                        // shouldn't try to handle them (neither should the view pager).
-                        mViewPager.setPagingEnabled(false);
-                        return false;
-                    } else if (mCanChildViewSwipeDown) {
-                        // Never capture event if the child view can swipe down.
-                        return false;
-                    } else if (!mFullScreen && mMoved) {
-                        // When we are not fullscreen, we own any vertical drag motion.
-                        return true;
-                    } else if (mMovedDown) {
-                        // We are currently handling the down swipe ourselves, so always
-                        // capture this event.
-                        return true;
-                    } else {
-                        // The current interaction mode is undetermined, so always let the
-                        // touch handler know about this event. However, don't capture this
-                        // event so the child may handle it as well.
-                        mTouchHandler.onTouch(MediaPickerPanel.this, ev);
-
-                        // Capture the touch event from now on if we are handling the drag.
-                        return mFullScreen ? mMovedDown : mMoved;
-                    }
-                }
-            }
-            return false;
-        }
-
-        /**
-         * Determine whether we think the user is actually trying to expand or slide despite the
-         * fact that they touched first on a chooser that captured the input.
-         */
-        private boolean shouldAllowRecaptureTouch(MotionEvent ev) {
-            final long elapsedMs = ev.getEventTime() - ev.getDownTime();
-            if (mDownEvent == null || elapsedMs == 0 || elapsedMs > TOUCH_RECAPTURE_WINDOW_MS) {
-                // Either we don't have info to decide or it's been long enough that we no longer
-                // want to reinterpret user intent.
-                return false;
-            }
-            final float dx = ev.getRawX() - mDownEvent.getRawX();
-            final float dy = ev.getRawY() - mDownEvent.getRawY();
-            final float dt = elapsedMs / 1000.0f;
-            final float maxAbsDelta = Math.max(Math.abs(dx), Math.abs(dy));
-            final float velocity = maxAbsDelta / dt;
-            return velocity > mFlingThresholdPx;
-        }
-
-        @Override
-        public boolean onTouch(final View view, final MotionEvent motionEvent) {
-            switch (motionEvent.getAction()) {
-                case MotionEvent.ACTION_UP: {
-                    if (!mMoved || mDownEvent == null) {
-                        return false;
-                    }
-                    final float dx = motionEvent.getRawX() - mDownEvent.getRawX();
-                    final float dy = motionEvent.getRawY() - mDownEvent.getRawY();
-
-                    final float dt =
-                            (motionEvent.getEventTime() - mDownEvent.getEventTime()) / 1000.0f;
-                    final float yVelocity = dy / dt;
-
-                    boolean handled = false;
-
-                    // Vertical swipe occurred if the direction is as least mostly in the y
-                    // component and has the required velocity (px/sec)
-                    if ((dx == 0 || (Math.abs(dy) / Math.abs(dx)) > DIRECTION_RATIO) &&
-                            Math.abs(yVelocity) > mFlingThresholdPx) {
-                        if (yVelocity < 0 && mExpanded) {
-                            setFullScreenView(true, true);
-                            handled = true;
-                        } else if (yVelocity > 0) {
-                            if (mFullScreen && yVelocity < mBigFlingThresholdPx) {
-                                setFullScreenView(false, true);
-                            } else {
-                                setExpanded(false, true, PAGE_NOT_SET);
-                            }
-                            handled = true;
-                        }
-                    }
-
-                    if (!handled) {
-                        // If they didn't swipe enough, animate back to resting state
-                        setDesiredHeight(getDesiredHeight(), true);
-                    }
-                    resetState();
-                    break;
-                }
-                case MotionEvent.ACTION_DOWN: {
-                    mDownHeight = getHeight();
-                    mDownEvent = MotionEvent.obtain(motionEvent);
-                    // If we are here and care about the return value (i.e. this is not called
-                    // from onInterceptTouchEvent), then presumably no children view in the panel
-                    // handles the down event. We'd like to handle future ACTION_MOVE events, so
-                    // always claim ownership on this event so it doesn't fall through and gets
-                    // cancelled by the framework.
-                    return true;
-                }
-                case MotionEvent.ACTION_MOVE: {
-                    if (mDownEvent == null) {
-                        return mMoved;
-                    }
-
-                    final float dx = mDownEvent.getRawX() - motionEvent.getRawX();
-                    final float dy = mDownEvent.getRawY() - motionEvent.getRawY();
-                    // Don't act if the move is mostly horizontal
-                    if (Math.abs(dy) > mTouchSlop &&
-                            (Math.abs(dy) / Math.abs(dx)) > DIRECTION_RATIO) {
-                        setDesiredHeight((int) (mDownHeight + dy), false);
-                        mMoved = true;
-                        if (dy < -mTouchSlop) {
-                            mMovedDown = true;
-                        }
-                    }
-                    return mMoved;
-                }
-
-            }
-            return mMoved;
-        }
-
-        private void resetState() {
-            mDownEvent = null;
-            mDownHeight = -1;
-            mMoved = false;
-            mMovedDown = false;
-            mCanChildViewSwipeDown = false;
-            updateViewPager();
-        }
-    }
-}
-
diff --git a/src/com/android/messaging/ui/mediapicker/MmsVideoRecorder.java b/src/com/android/messaging/ui/mediapicker/MmsVideoRecorder.java
deleted file mode 100644
index 89241b7..0000000
--- a/src/com/android/messaging/ui/mediapicker/MmsVideoRecorder.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.hardware.Camera;
-import android.media.CamcorderProfile;
-import android.media.MediaRecorder;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.SafeAsyncTask;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-class MmsVideoRecorder extends MediaRecorder {
-    private static final float VIDEO_OVERSHOOT_SLOP = .85F;
-
-    private static final int BITS_PER_BYTE = 8;
-
-    // We think user will expect to be able to record videos at least this long
-    private static final long MIN_DURATION_LIMIT_SECONDS = 25;
-
-    /** The uri where video is being recorded to */
-    private Uri mTempVideoUri;
-
-    private ParcelFileDescriptor mVideoFD;
-
-    /** The settings used for video recording */
-    private final CamcorderProfile mCamcorderProfile;
-
-    public MmsVideoRecorder(final Camera camera, final int cameraIndex, final int orientation,
-            final int maxMessageSize)
-            throws FileNotFoundException {
-        mCamcorderProfile =
-                CamcorderProfile.get(cameraIndex, CamcorderProfile.QUALITY_LOW);
-        mTempVideoUri = MediaScratchFileProvider.buildMediaScratchSpaceUri(
-                ContentType.getExtension(getContentType()));
-
-        // The video recorder can sometimes return a file that's larger than the max we
-        // say we can handle. Try to handle that overshoot by specifying an 85% limit.
-        final long sizeLimit = (long) (maxMessageSize * VIDEO_OVERSHOOT_SLOP);
-
-        // The QUALITY_LOW profile might not be low enough to allow for video of a reasonable
-        // minimum duration.  Adjust a/v bitrates to allow at least MIN_DURATION_LIMIT video
-        // to be recorded.
-        int audioBitRate = mCamcorderProfile.audioBitRate;
-        int videoBitRate = mCamcorderProfile.videoBitRate;
-        final double initialDurationLimit = sizeLimit * BITS_PER_BYTE
-                / (double) (audioBitRate + videoBitRate);
-        if (initialDurationLimit < MIN_DURATION_LIMIT_SECONDS) {
-            // Reduce the suggested bitrates.  These bitrates are only requests, if implementation
-            // can't actually hit these goals it will still record video at higher rate and stop when
-            // it hits the size limit.
-            final double bitRateAdjustmentFactor = initialDurationLimit / MIN_DURATION_LIMIT_SECONDS;
-            audioBitRate *= bitRateAdjustmentFactor;
-            videoBitRate *= bitRateAdjustmentFactor;
-        }
-
-        setCamera(camera);
-        setOrientationHint(orientation);
-        setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
-        setVideoSource(MediaRecorder.VideoSource.CAMERA);
-        setOutputFormat(mCamcorderProfile.fileFormat);
-        mVideoFD = Factory.get().getApplicationContext().getContentResolver()
-                .openFileDescriptor(mTempVideoUri, "w");
-        setOutputFile(mVideoFD.getFileDescriptor());
-
-        // Copy settings from CamcorderProfile to MediaRecorder
-        setAudioEncodingBitRate(audioBitRate);
-        setAudioChannels(mCamcorderProfile.audioChannels);
-        setAudioEncoder(mCamcorderProfile.audioCodec);
-        setAudioSamplingRate(mCamcorderProfile.audioSampleRate);
-        setVideoEncodingBitRate(videoBitRate);
-        setVideoEncoder(mCamcorderProfile.videoCodec);
-        setVideoFrameRate(mCamcorderProfile.videoFrameRate);
-        setVideoSize(
-                mCamcorderProfile.videoFrameWidth, mCamcorderProfile.videoFrameHeight);
-        setMaxFileSize(sizeLimit);
-    }
-
-    Uri getVideoUri() {
-        return mTempVideoUri;
-    }
-
-    int getVideoWidth() {
-        return mCamcorderProfile.videoFrameWidth;
-    }
-
-    int getVideoHeight() {
-        return mCamcorderProfile.videoFrameHeight;
-    }
-
-    void cleanupTempFile() {
-        final Uri tempUri = mTempVideoUri;
-        SafeAsyncTask.executeOnThreadPool(new Runnable() {
-            @Override
-            public void run() {
-                Factory.get().getApplicationContext().getContentResolver().delete(
-                        tempUri, null, null);
-            }
-        });
-        mTempVideoUri = null;
-    }
-
-    String getContentType() {
-        if (mCamcorderProfile.fileFormat == OutputFormat.MPEG_4) {
-            return ContentType.VIDEO_MP4;
-        } else {
-            // 3GPP is the only other video format with a constant in OutputFormat
-            return ContentType.VIDEO_3GPP;
-        }
-    }
-
-    public void closeVideoFileDescriptor() {
-        if (mVideoFD != null) {
-            try {
-                mVideoFD.close();
-            } catch (IOException e) {
-                // Ignore
-            }
-            mVideoFD = null;
-        }
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/PausableChronometer.java b/src/com/android/messaging/ui/mediapicker/PausableChronometer.java
deleted file mode 100644
index dc8f90b..0000000
--- a/src/com/android/messaging/ui/mediapicker/PausableChronometer.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.os.SystemClock;
-import android.util.AttributeSet;
-import android.widget.Chronometer;
-
-import com.android.messaging.ui.PlaybackStateView;
-
-/**
- * A pausable Chronometer implementation. The default Chronometer in Android only stops the UI
- * from updating when you call stop(), but doesn't actually pause it. This implementation adds an
- * additional timestamp that tracks the timespan for the pause and compensate for that.
- */
-public class PausableChronometer extends Chronometer implements PlaybackStateView {
-    // Keeps track of how far long the Chronometer has been tracking when it's paused. We'd like
-    // to start from this time the next time it's resumed.
-    private long mTimeWhenPaused = 0;
-
-    public PausableChronometer(final Context context, final AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    /**
-     * Reset the timer and start counting from zero.
-     */
-    @Override
-    public void restart() {
-        reset();
-        start();
-    }
-
-    /**
-     * Reset the timer to zero, but don't start it.
-     */
-    @Override
-    public void reset() {
-        stop();
-        setBase(SystemClock.elapsedRealtime());
-        mTimeWhenPaused = 0;
-    }
-
-    /**
-     * Resume the timer after a previous pause.
-     */
-    @Override
-    public void resume() {
-        setBase(SystemClock.elapsedRealtime() - mTimeWhenPaused);
-        start();
-    }
-
-    /**
-     * Pause the timer.
-     */
-    @Override
-    public void pause() {
-        stop();
-        mTimeWhenPaused = SystemClock.elapsedRealtime() - getBase();
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/SoftwareCameraPreview.java b/src/com/android/messaging/ui/mediapicker/SoftwareCameraPreview.java
deleted file mode 100644
index 5dc3185..0000000
--- a/src/com/android/messaging/ui/mediapicker/SoftwareCameraPreview.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.hardware.Camera;
-import android.os.Parcelable;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.View;
-
-import java.io.IOException;
-
-/**
- * A software rendered preview surface for the camera.  This renders slower and causes more jank, so
- * HardwareCameraPreview is preferred if possible.
- *
- * There is a significant amount of duplication between HardwareCameraPreview and
- * SoftwareCameraPreview which we can't easily share due to a lack of multiple inheritance, The
- * implementations of the shared methods are delegated to CameraPreview
- */
-public class SoftwareCameraPreview extends SurfaceView implements CameraPreview.CameraPreviewHost {
-    private final CameraPreview mPreview;
-
-    public SoftwareCameraPreview(final Context context) {
-        super(context);
-        mPreview = new CameraPreview(this);
-        getHolder().addCallback(new SurfaceHolder.Callback() {
-            @Override
-            public void surfaceCreated(final SurfaceHolder surfaceHolder) {
-                CameraManager.get().setSurface(mPreview);
-            }
-
-            @Override
-            public void surfaceChanged(final SurfaceHolder surfaceHolder, final int format, final int width,
-                                       final int height) {
-                CameraManager.get().setSurface(mPreview);
-            }
-
-            @Override
-            public void surfaceDestroyed(final SurfaceHolder surfaceHolder) {
-                CameraManager.get().setSurface(null);
-            }
-        });
-    }
-
-
-    @Override
-    protected void onVisibilityChanged(final View changedView, final int visibility) {
-        super.onVisibilityChanged(changedView, visibility);
-        mPreview.onVisibilityChanged(visibility);
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        mPreview.onDetachedFromWindow();
-    }
-
-    @Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        mPreview.onAttachedToWindow();
-    }
-
-    @Override
-    protected void onRestoreInstanceState(final Parcelable state) {
-        super.onRestoreInstanceState(state);
-        mPreview.onRestoreInstanceState();
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        widthMeasureSpec = mPreview.getWidthMeasureSpec(widthMeasureSpec, heightMeasureSpec);
-        heightMeasureSpec = mPreview.getHeightMeasureSpec(widthMeasureSpec, heightMeasureSpec);
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-    }
-
-    @Override
-    public View getView() {
-        return this;
-    }
-
-    @Override
-    public boolean isValid() {
-        return getHolder() != null;
-    }
-
-    @Override
-    public void startPreview(final Camera camera) throws IOException {
-        camera.setPreviewDisplay(getHolder());
-    }
-
-    @Override
-    public void onCameraPermissionGranted() {
-        mPreview.onCameraPermissionGranted();
-    }
-}
-
-
diff --git a/src/com/android/messaging/ui/mediapicker/SoundLevels.java b/src/com/android/messaging/ui/mediapicker/SoundLevels.java
deleted file mode 100644
index 6f4dca6..0000000
--- a/src/com/android/messaging/ui/mediapicker/SoundLevels.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.animation.ObjectAnimator;
-import android.animation.TimeAnimator;
-import android.animation.TimeAnimator.TimeListener;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Paint.Style;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-import android.view.accessibility.AccessibilityNodeInfo;
-
-import com.android.messaging.R;
-import com.android.messaging.util.LogUtil;
-
-/**
- * This view draws circular sound levels. By default the sound levels are black, unless
- * otherwise defined via {@link #mPrimaryLevelPaint}.
- */
-public class SoundLevels extends View {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-    private static final boolean DEBUG = false;
-
-    private boolean mCenterDefined;
-    private int mCenterX;
-    private int mCenterY;
-
-    // Paint for the main level meter, most closely follows the mic.
-    private final Paint mPrimaryLevelPaint;
-
-    // The minimum size of the levels as a percentage of the max, that is the size when volume is 0.
-    private final float mMinimumLevel;
-
-    // The minimum size of the levels, that is the size when volume is 0.
-    private final float mMinimumLevelSize;
-
-    // The maximum size of the levels, that is the size when volume is 100.
-    private final float mMaximumLevelSize;
-
-    // Generates clock ticks for the animation using the global animation loop.
-    private final TimeAnimator mSpeechLevelsAnimator;
-
-    private float mCurrentVolume;
-
-    // Indicates whether we should be animating the sound level.
-    private boolean mIsEnabled;
-
-    // Input level is pulled from here.
-    private AudioLevelSource mLevelSource;
-
-    public SoundLevels(final Context context) {
-        this(context, null);
-    }
-
-    public SoundLevels(final Context context, final AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public SoundLevels(final Context context, final AttributeSet attrs, final int defStyle) {
-        super(context, attrs, defStyle);
-
-        // Safe source, replaced with system one when attached.
-        mLevelSource = new AudioLevelSource();
-        mLevelSource.setSpeechLevel(0);
-
-        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SoundLevels,
-                defStyle, 0);
-
-        mMaximumLevelSize = a.getDimensionPixelOffset(
-                R.styleable.SoundLevels_maxLevelRadius, 0);
-        mMinimumLevelSize = a.getDimensionPixelOffset(
-                R.styleable.SoundLevels_minLevelRadius, 0);
-        mMinimumLevel = mMinimumLevelSize / mMaximumLevelSize;
-
-        mPrimaryLevelPaint = new Paint();
-        mPrimaryLevelPaint.setColor(
-                a.getColor(R.styleable.SoundLevels_primaryColor, Color.BLACK));
-        mPrimaryLevelPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
-
-        a.recycle();
-
-        // This animator generates ticks that invalidate the
-        // view so that the animation is synced with the global animation loop.
-        // TODO: We could probably remove this in favor of using postInvalidateOnAnimation
-        // which might improve things further.
-        mSpeechLevelsAnimator = new TimeAnimator();
-        mSpeechLevelsAnimator.setRepeatCount(ObjectAnimator.INFINITE);
-        mSpeechLevelsAnimator.setTimeListener(new TimeListener() {
-            @Override
-            public void onTimeUpdate(final TimeAnimator animation, final long totalTime,
-                    final long deltaTime) {
-                invalidate();
-            }
-        });
-    }
-
-    @Override
-    protected void onDraw(final Canvas canvas) {
-        if (!mIsEnabled) {
-            return;
-        }
-
-        if (!mCenterDefined) {
-            // One time computation here, because we can't rely on getWidth() to be computed at
-            // constructor time or in onFinishInflate :(.
-            mCenterX = getWidth() / 2;
-            mCenterY = getWidth() / 2;
-            mCenterDefined = true;
-        }
-
-        final int level = mLevelSource.getSpeechLevel();
-        // Either ease towards the target level, or decay away from it depending on whether
-        // its higher or lower than the current.
-        if (level > mCurrentVolume) {
-            mCurrentVolume = mCurrentVolume + ((level - mCurrentVolume) / 4);
-        } else {
-            mCurrentVolume = mCurrentVolume * 0.95f;
-        }
-
-        final float radius = mMinimumLevel + (1f - mMinimumLevel) * mCurrentVolume / 100;
-        mPrimaryLevelPaint.setStyle(Style.FILL);
-        canvas.drawCircle(mCenterX, mCenterY, radius * mMaximumLevelSize, mPrimaryLevelPaint);
-    }
-
-    public void setLevelSource(final AudioLevelSource source) {
-        if (DEBUG) {
-            Log.d(TAG, "Speech source set.");
-        }
-        mLevelSource = source;
-    }
-
-    private void startSpeechLevelsAnimator() {
-        if (DEBUG) {
-            Log.d(TAG, "startAnimator()");
-        }
-        if (!mSpeechLevelsAnimator.isStarted()) {
-            mSpeechLevelsAnimator.start();
-        }
-    }
-
-    private void stopSpeechLevelsAnimator() {
-        if (DEBUG) {
-            Log.d(TAG, "stopAnimator()");
-        }
-        if (mSpeechLevelsAnimator.isStarted()) {
-            mSpeechLevelsAnimator.end();
-        }
-    }
-
-    @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        stopSpeechLevelsAnimator();
-    }
-
-    @Override
-    public void setEnabled(final boolean enabled) {
-        if (enabled == mIsEnabled) {
-            return;
-        }
-        if (DEBUG) {
-            Log.d("TAG", "setEnabled: " + enabled);
-        }
-        super.setEnabled(enabled);
-        mIsEnabled = enabled;
-        setKeepScreenOn(enabled);
-        updateSpeechLevelsAnimatorState();
-    }
-
-    private void updateSpeechLevelsAnimatorState() {
-        if (mIsEnabled) {
-            startSpeechLevelsAnimator();
-        } else {
-            stopSpeechLevelsAnimator();
-        }
-    }
-
-    /**
-     * This is required to make the View findable by uiautomator
-     */
-    @Override
-    public void onInitializeAccessibilityNodeInfo(final AccessibilityNodeInfo info) {
-        super.onInitializeAccessibilityNodeInfo(info);
-        info.setClassName(SoundLevels.class.getCanonicalName());
-    }
-
-    /**
-     * Set the alpha level of the sound circles.
-     */
-    public void setPrimaryColorAlpha(final int alpha) {
-        mPrimaryLevelPaint.setAlpha(alpha);
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/camerafocus/FocusIndicator.java b/src/com/android/messaging/ui/mediapicker/camerafocus/FocusIndicator.java
deleted file mode 100644
index 92ed3c1..0000000
--- a/src/com/android/messaging/ui/mediapicker/camerafocus/FocusIndicator.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker.camerafocus;
-
-public interface FocusIndicator {
-    public void showStart();
-    public void showSuccess(boolean timeout);
-    public void showFail(boolean timeout);
-    public void clear();
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/mediapicker/camerafocus/FocusOverlayManager.java b/src/com/android/messaging/ui/mediapicker/camerafocus/FocusOverlayManager.java
deleted file mode 100644
index e620fc2..0000000
--- a/src/com/android/messaging/ui/mediapicker/camerafocus/FocusOverlayManager.java
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker.camerafocus;
-
-import android.graphics.Matrix;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.hardware.Camera.Area;
-import android.hardware.Camera.Parameters;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.LogUtil;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/* A class that handles everything about focus in still picture mode.
- * This also handles the metering area because it is the same as focus area.
- *
- * The test cases:
- * (1) The camera has continuous autofocus. Move the camera. Take a picture when
- *     CAF is not in progress.
- * (2) The camera has continuous autofocus. Move the camera. Take a picture when
- *     CAF is in progress.
- * (3) The camera has face detection. Point the camera at some faces. Hold the
- *     shutter. Release to take a picture.
- * (4) The camera has face detection. Point the camera at some faces. Single tap
- *     the shutter to take a picture.
- * (5) The camera has autofocus. Single tap the shutter to take a picture.
- * (6) The camera has autofocus. Hold the shutter. Release to take a picture.
- * (7) The camera has no autofocus. Single tap the shutter and take a picture.
- * (8) The camera has autofocus and supports focus area. Touch the screen to
- *     trigger autofocus. Take a picture.
- * (9) The camera has autofocus and supports focus area. Touch the screen to
- *     trigger autofocus. Wait until it times out.
- * (10) The camera has no autofocus and supports metering area. Touch the screen
- *     to change metering area.
- */
-public class FocusOverlayManager {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-    private static final String TRUE = "true";
-    private static final String AUTO_EXPOSURE_LOCK_SUPPORTED = "auto-exposure-lock-supported";
-    private static final String AUTO_WHITE_BALANCE_LOCK_SUPPORTED =
-            "auto-whitebalance-lock-supported";
-
-    private static final int RESET_TOUCH_FOCUS = 0;
-    private static final int RESET_TOUCH_FOCUS_DELAY = 3000;
-
-    private int mState = STATE_IDLE;
-    private static final int STATE_IDLE = 0; // Focus is not active.
-    private static final int STATE_FOCUSING = 1; // Focus is in progress.
-    // Focus is in progress and the camera should take a picture after focus finishes.
-    private static final int STATE_FOCUSING_SNAP_ON_FINISH = 2;
-    private static final int STATE_SUCCESS = 3; // Focus finishes and succeeds.
-    private static final int STATE_FAIL = 4; // Focus finishes and fails.
-
-    private boolean mInitialized;
-    private boolean mFocusAreaSupported;
-    private boolean mMeteringAreaSupported;
-    private boolean mLockAeAwbNeeded;
-    private boolean mAeAwbLock;
-    private Matrix mMatrix;
-
-    private PieRenderer mPieRenderer;
-
-    private int mPreviewWidth; // The width of the preview frame layout.
-    private int mPreviewHeight; // The height of the preview frame layout.
-    private boolean mMirror; // true if the camera is front-facing.
-    private int mDisplayOrientation;
-    private List<Object> mFocusArea; // focus area in driver format
-    private List<Object> mMeteringArea; // metering area in driver format
-    private String mFocusMode;
-    private String mOverrideFocusMode;
-    private Parameters mParameters;
-    private Handler mHandler;
-    Listener mListener;
-
-    public interface Listener {
-        public void autoFocus();
-        public void cancelAutoFocus();
-        public boolean capture();
-        public void setFocusParameters();
-    }
-
-    private class MainHandler extends Handler {
-        public MainHandler(Looper looper) {
-            super(looper);
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case RESET_TOUCH_FOCUS: {
-                    cancelAutoFocus();
-                    break;
-                }
-            }
-        }
-    }
-
-    public FocusOverlayManager(Listener listener, Looper looper) {
-        mHandler = new MainHandler(looper);
-        mMatrix = new Matrix();
-        mListener = listener;
-    }
-
-    public void setFocusRenderer(PieRenderer renderer) {
-        mPieRenderer = renderer;
-        mInitialized = (mMatrix != null);
-    }
-
-    public void setParameters(Parameters parameters) {
-        // parameters can only be null when onConfigurationChanged is called
-        // before camera is open. We will just return in this case, because
-        // parameters will be set again later with the right parameters after
-        // camera is open.
-        if (parameters == null) {
-            return;
-        }
-        mParameters = parameters;
-        mFocusAreaSupported = isFocusAreaSupported(parameters);
-        mMeteringAreaSupported = isMeteringAreaSupported(parameters);
-        mLockAeAwbNeeded = (isAutoExposureLockSupported(mParameters) ||
-                isAutoWhiteBalanceLockSupported(mParameters));
-    }
-
-    public void setPreviewSize(int previewWidth, int previewHeight) {
-        if (mPreviewWidth != previewWidth || mPreviewHeight != previewHeight) {
-            mPreviewWidth = previewWidth;
-            mPreviewHeight = previewHeight;
-            setMatrix();
-        }
-    }
-
-    public void setMirror(boolean mirror) {
-        mMirror = mirror;
-        setMatrix();
-    }
-
-    public void setDisplayOrientation(int displayOrientation) {
-        mDisplayOrientation = displayOrientation;
-        setMatrix();
-    }
-
-    private void setMatrix() {
-        if (mPreviewWidth != 0 && mPreviewHeight != 0) {
-            Matrix matrix = new Matrix();
-            prepareMatrix(matrix, mMirror, mDisplayOrientation,
-                    mPreviewWidth, mPreviewHeight);
-            // In face detection, the matrix converts the driver coordinates to UI
-            // coordinates. In tap focus, the inverted matrix converts the UI
-            // coordinates to driver coordinates.
-            matrix.invert(mMatrix);
-            mInitialized = (mPieRenderer != null);
-        }
-    }
-
-    private void lockAeAwbIfNeeded() {
-        if (mLockAeAwbNeeded && !mAeAwbLock) {
-            mAeAwbLock = true;
-            mListener.setFocusParameters();
-        }
-    }
-
-    private void unlockAeAwbIfNeeded() {
-        if (mLockAeAwbNeeded && mAeAwbLock && (mState != STATE_FOCUSING_SNAP_ON_FINISH)) {
-            mAeAwbLock = false;
-            mListener.setFocusParameters();
-        }
-    }
-
-    public void onShutterDown() {
-        if (!mInitialized) {
-            return;
-        }
-
-        boolean autoFocusCalled = false;
-        if (needAutoFocusCall()) {
-            // Do not focus if touch focus has been triggered.
-            if (mState != STATE_SUCCESS && mState != STATE_FAIL) {
-                autoFocus();
-                autoFocusCalled = true;
-            }
-        }
-
-        if (!autoFocusCalled) {
-            lockAeAwbIfNeeded();
-        }
-    }
-
-    public void onShutterUp() {
-        if (!mInitialized) {
-            return;
-        }
-
-        if (needAutoFocusCall()) {
-            // User releases half-pressed focus key.
-            if (mState == STATE_FOCUSING || mState == STATE_SUCCESS
-                    || mState == STATE_FAIL) {
-                cancelAutoFocus();
-            }
-        }
-
-        // Unlock AE and AWB after cancelAutoFocus. Camera API does not
-        // guarantee setParameters can be called during autofocus.
-        unlockAeAwbIfNeeded();
-    }
-
-    public void doSnap() {
-        if (!mInitialized) {
-            return;
-        }
-
-        // If the user has half-pressed the shutter and focus is completed, we
-        // can take the photo right away. If the focus mode is infinity, we can
-        // also take the photo.
-        if (!needAutoFocusCall() || (mState == STATE_SUCCESS || mState == STATE_FAIL)) {
-            capture();
-        } else if (mState == STATE_FOCUSING) {
-            // Half pressing the shutter (i.e. the focus button event) will
-            // already have requested AF for us, so just request capture on
-            // focus here.
-            mState = STATE_FOCUSING_SNAP_ON_FINISH;
-        } else if (mState == STATE_IDLE) {
-            // We didn't do focus. This can happen if the user press focus key
-            // while the snapshot is still in progress. The user probably wants
-            // the next snapshot as soon as possible, so we just do a snapshot
-            // without focusing again.
-            capture();
-        }
-    }
-
-    public void onAutoFocus(boolean focused, boolean shutterButtonPressed) {
-        if (mState == STATE_FOCUSING_SNAP_ON_FINISH) {
-            // Take the picture no matter focus succeeds or fails. No need
-            // to play the AF sound if we're about to play the shutter
-            // sound.
-            if (focused) {
-                mState = STATE_SUCCESS;
-            } else {
-                mState = STATE_FAIL;
-            }
-            updateFocusUI();
-            capture();
-        } else if (mState == STATE_FOCUSING) {
-            // This happens when (1) user is half-pressing the focus key or
-            // (2) touch focus is triggered. Play the focus tone. Do not
-            // take the picture now.
-            if (focused) {
-                mState = STATE_SUCCESS;
-            } else {
-                mState = STATE_FAIL;
-            }
-            updateFocusUI();
-            // If this is triggered by touch focus, cancel focus after a
-            // while.
-            if (mFocusArea != null) {
-                mHandler.sendEmptyMessageDelayed(RESET_TOUCH_FOCUS, RESET_TOUCH_FOCUS_DELAY);
-            }
-            if (shutterButtonPressed) {
-                // Lock AE & AWB so users can half-press shutter and recompose.
-                lockAeAwbIfNeeded();
-            }
-        } else if (mState == STATE_IDLE) {
-            // User has released the focus key before focus completes.
-            // Do nothing.
-        }
-    }
-
-    public void onAutoFocusMoving(boolean moving) {
-        if (!mInitialized) {
-            return;
-        }
-
-        // Ignore if we have requested autofocus. This method only handles
-        // continuous autofocus.
-        if (mState != STATE_IDLE) {
-            return;
-        }
-
-        if (moving) {
-            mPieRenderer.showStart();
-        } else {
-            mPieRenderer.showSuccess(true);
-        }
-    }
-
-    private void initializeFocusAreas(int focusWidth, int focusHeight,
-            int x, int y, int previewWidth, int previewHeight) {
-        if (mFocusArea == null) {
-            mFocusArea = new ArrayList<Object>();
-            mFocusArea.add(new Area(new Rect(), 1));
-        }
-
-        // Convert the coordinates to driver format.
-        calculateTapArea(focusWidth, focusHeight, 1f, x, y, previewWidth, previewHeight,
-                ((Area) mFocusArea.get(0)).rect);
-    }
-
-    private void initializeMeteringAreas(int focusWidth, int focusHeight,
-            int x, int y, int previewWidth, int previewHeight) {
-        if (mMeteringArea == null) {
-            mMeteringArea = new ArrayList<Object>();
-            mMeteringArea.add(new Area(new Rect(), 1));
-        }
-
-        // Convert the coordinates to driver format.
-        // AE area is bigger because exposure is sensitive and
-        // easy to over- or underexposure if area is too small.
-        calculateTapArea(focusWidth, focusHeight, 1.5f, x, y, previewWidth, previewHeight,
-                ((Area) mMeteringArea.get(0)).rect);
-    }
-
-    public void onSingleTapUp(int x, int y) {
-        if (!mInitialized || mState == STATE_FOCUSING_SNAP_ON_FINISH) {
-            return;
-        }
-
-        // Let users be able to cancel previous touch focus.
-        if ((mFocusArea != null) && (mState == STATE_FOCUSING ||
-                    mState == STATE_SUCCESS || mState == STATE_FAIL)) {
-            cancelAutoFocus();
-        }
-        // Initialize variables.
-        int focusWidth = mPieRenderer.getSize();
-        int focusHeight = mPieRenderer.getSize();
-        if (focusWidth == 0 || mPieRenderer.getWidth() == 0 || mPieRenderer.getHeight() == 0) {
-            return;
-        }
-        int previewWidth = mPreviewWidth;
-        int previewHeight = mPreviewHeight;
-        // Initialize mFocusArea.
-        if (mFocusAreaSupported) {
-            initializeFocusAreas(focusWidth, focusHeight, x, y, previewWidth, previewHeight);
-        }
-        // Initialize mMeteringArea.
-        if (mMeteringAreaSupported) {
-            initializeMeteringAreas(focusWidth, focusHeight, x, y, previewWidth, previewHeight);
-        }
-
-        // Use margin to set the focus indicator to the touched area.
-        mPieRenderer.setFocus(x, y);
-
-        // Set the focus area and metering area.
-        mListener.setFocusParameters();
-        if (mFocusAreaSupported) {
-            autoFocus();
-        } else {  // Just show the indicator in all other cases.
-            updateFocusUI();
-            // Reset the metering area in 3 seconds.
-            mHandler.removeMessages(RESET_TOUCH_FOCUS);
-            mHandler.sendEmptyMessageDelayed(RESET_TOUCH_FOCUS, RESET_TOUCH_FOCUS_DELAY);
-        }
-    }
-
-    public void onPreviewStarted() {
-        mState = STATE_IDLE;
-    }
-
-    public void onPreviewStopped() {
-        // If auto focus was in progress, it would have been stopped.
-        mState = STATE_IDLE;
-        resetTouchFocus();
-        updateFocusUI();
-    }
-
-    public void onCameraReleased() {
-        onPreviewStopped();
-    }
-
-    private void autoFocus() {
-        LogUtil.v(TAG, "Start autofocus.");
-        mListener.autoFocus();
-        mState = STATE_FOCUSING;
-        updateFocusUI();
-        mHandler.removeMessages(RESET_TOUCH_FOCUS);
-    }
-
-    private void cancelAutoFocus() {
-        LogUtil.v(TAG, "Cancel autofocus.");
-
-        // Reset the tap area before calling mListener.cancelAutofocus.
-        // Otherwise, focus mode stays at auto and the tap area passed to the
-        // driver is not reset.
-        resetTouchFocus();
-        mListener.cancelAutoFocus();
-        mState = STATE_IDLE;
-        updateFocusUI();
-        mHandler.removeMessages(RESET_TOUCH_FOCUS);
-    }
-
-    private void capture() {
-        if (mListener.capture()) {
-            mState = STATE_IDLE;
-            mHandler.removeMessages(RESET_TOUCH_FOCUS);
-        }
-    }
-
-    public String getFocusMode() {
-        if (mOverrideFocusMode != null) {
-            return mOverrideFocusMode;
-        }
-        List<String> supportedFocusModes = mParameters.getSupportedFocusModes();
-
-        if (mFocusAreaSupported && mFocusArea != null) {
-            // Always use autofocus in tap-to-focus.
-            mFocusMode = Parameters.FOCUS_MODE_AUTO;
-        } else {
-            mFocusMode = Parameters.FOCUS_MODE_CONTINUOUS_PICTURE;
-        }
-
-        if (!isSupported(mFocusMode, supportedFocusModes)) {
-            // For some reasons, the driver does not support the current
-            // focus mode. Fall back to auto.
-            if (isSupported(Parameters.FOCUS_MODE_AUTO,
-                    mParameters.getSupportedFocusModes())) {
-                mFocusMode = Parameters.FOCUS_MODE_AUTO;
-            } else {
-                mFocusMode = mParameters.getFocusMode();
-            }
-        }
-        return mFocusMode;
-    }
-
-    public List getFocusAreas() {
-        return mFocusArea;
-    }
-
-    public List getMeteringAreas() {
-        return mMeteringArea;
-    }
-
-    public void updateFocusUI() {
-        if (!mInitialized) {
-            return;
-        }
-        FocusIndicator focusIndicator = mPieRenderer;
-
-        if (mState == STATE_IDLE) {
-            if (mFocusArea == null) {
-                focusIndicator.clear();
-            } else {
-                // Users touch on the preview and the indicator represents the
-                // metering area. Either focus area is not supported or
-                // autoFocus call is not required.
-                focusIndicator.showStart();
-            }
-        } else if (mState == STATE_FOCUSING || mState == STATE_FOCUSING_SNAP_ON_FINISH) {
-            focusIndicator.showStart();
-        } else {
-            if (Parameters.FOCUS_MODE_CONTINUOUS_PICTURE.equals(mFocusMode)) {
-                // TODO: check HAL behavior and decide if this can be removed.
-                focusIndicator.showSuccess(false);
-            } else if (mState == STATE_SUCCESS) {
-                focusIndicator.showSuccess(false);
-            } else if (mState == STATE_FAIL) {
-                focusIndicator.showFail(false);
-            }
-        }
-    }
-
-    public void resetTouchFocus() {
-        if (!mInitialized) {
-            return;
-        }
-
-        // Put focus indicator to the center. clear reset position
-        mPieRenderer.clear();
-
-        mFocusArea = null;
-        mMeteringArea = null;
-    }
-
-    private void calculateTapArea(int focusWidth, int focusHeight, float areaMultiple,
-            int x, int y, int previewWidth, int previewHeight, Rect rect) {
-        int areaWidth = (int) (focusWidth * areaMultiple);
-        int areaHeight = (int) (focusHeight * areaMultiple);
-        int left = clamp(x - areaWidth / 2, 0, previewWidth - areaWidth);
-        int top = clamp(y - areaHeight / 2, 0, previewHeight - areaHeight);
-
-        RectF rectF = new RectF(left, top, left + areaWidth, top + areaHeight);
-        mMatrix.mapRect(rectF);
-        rectFToRect(rectF, rect);
-    }
-
-    /* package */ int getFocusState() {
-        return mState;
-    }
-
-    public boolean isFocusCompleted() {
-        return mState == STATE_SUCCESS || mState == STATE_FAIL;
-    }
-
-    public boolean isFocusingSnapOnFinish() {
-        return mState == STATE_FOCUSING_SNAP_ON_FINISH;
-    }
-
-    public void removeMessages() {
-        mHandler.removeMessages(RESET_TOUCH_FOCUS);
-    }
-
-    public void overrideFocusMode(String focusMode) {
-        mOverrideFocusMode = focusMode;
-    }
-
-    public void setAeAwbLock(boolean lock) {
-        mAeAwbLock = lock;
-    }
-
-    public boolean getAeAwbLock() {
-        return mAeAwbLock;
-    }
-
-    private boolean needAutoFocusCall() {
-        String focusMode = getFocusMode();
-        return !(focusMode.equals(Parameters.FOCUS_MODE_INFINITY)
-                || focusMode.equals(Parameters.FOCUS_MODE_FIXED)
-                || focusMode.equals(Parameters.FOCUS_MODE_EDOF));
-    }
-
-    public static boolean isAutoExposureLockSupported(Parameters params) {
-        return TRUE.equals(params.get(AUTO_EXPOSURE_LOCK_SUPPORTED));
-    }
-
-    public static boolean isAutoWhiteBalanceLockSupported(Parameters params) {
-        return TRUE.equals(params.get(AUTO_WHITE_BALANCE_LOCK_SUPPORTED));
-    }
-
-    public static boolean isSupported(String value, List<String> supported) {
-        return supported != null && supported.indexOf(value) >= 0;
-    }
-
-    public static boolean isMeteringAreaSupported(Parameters params) {
-        return params.getMaxNumMeteringAreas() > 0;
-    }
-
-    public static boolean isFocusAreaSupported(Parameters params) {
-        return (params.getMaxNumFocusAreas() > 0
-                && isSupported(Parameters.FOCUS_MODE_AUTO,
-                params.getSupportedFocusModes()));
-    }
-
-    public static void prepareMatrix(Matrix matrix, boolean mirror, int displayOrientation,
-                                     int viewWidth, int viewHeight) {
-        // Need mirror for front camera.
-        matrix.setScale(mirror ? -1 : 1, 1);
-        // This is the value for android.hardware.Camera.setDisplayOrientation.
-        matrix.postRotate(displayOrientation);
-        // Camera driver coordinates range from (-1000, -1000) to (1000, 1000).
-        // UI coordinates range from (0, 0) to (width, height).
-        matrix.postScale(viewWidth / 2000f, viewHeight / 2000f);
-        matrix.postTranslate(viewWidth / 2f, viewHeight / 2f);
-    }
-
-    public static int clamp(int x, int min, int max) {
-        Assert.isTrue(max >= min);
-        if (x > max) {
-            return max;
-        }
-        if (x < min) {
-            return min;
-        }
-        return x;
-    }
-
-    public static void rectFToRect(RectF rectF, Rect rect) {
-        rect.left = Math.round(rectF.left);
-        rect.top = Math.round(rectF.top);
-        rect.right = Math.round(rectF.right);
-        rect.bottom = Math.round(rectF.bottom);
-    }
-}
diff --git a/src/com/android/messaging/ui/mediapicker/camerafocus/OverlayRenderer.java b/src/com/android/messaging/ui/mediapicker/camerafocus/OverlayRenderer.java
deleted file mode 100644
index df6734f..0000000
--- a/src/com/android/messaging/ui/mediapicker/camerafocus/OverlayRenderer.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker.camerafocus;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.view.MotionEvent;
-
-public abstract class OverlayRenderer implements RenderOverlay.Renderer {
-
-    private static final String TAG = "CAM OverlayRenderer";
-    protected RenderOverlay mOverlay;
-
-    protected int mLeft, mTop, mRight, mBottom;
-
-    protected boolean mVisible;
-
-    public void setVisible(boolean vis) {
-        mVisible = vis;
-        update();
-    }
-
-    public boolean isVisible() {
-        return mVisible;
-    }
-
-    // default does not handle touch
-    @Override
-    public boolean handlesTouch() {
-        return false;
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent evt) {
-        return false;
-    }
-
-    public abstract void onDraw(Canvas canvas);
-
-    public void draw(Canvas canvas) {
-        if (mVisible) {
-            onDraw(canvas);
-        }
-    }
-
-    @Override
-    public void setOverlay(RenderOverlay overlay) {
-        mOverlay = overlay;
-    }
-
-    @Override
-    public void layout(int left, int top, int right, int bottom) {
-        mLeft = left;
-        mRight = right;
-        mTop = top;
-        mBottom = bottom;
-    }
-
-    protected Context getContext() {
-        if (mOverlay != null) {
-            return mOverlay.getContext();
-        } else {
-            return null;
-        }
-    }
-
-    public int getWidth() {
-        return mRight - mLeft;
-    }
-
-    public int getHeight() {
-        return mBottom - mTop;
-    }
-
-    protected void update() {
-        if (mOverlay != null) {
-            mOverlay.update();
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/mediapicker/camerafocus/PieItem.java b/src/com/android/messaging/ui/mediapicker/camerafocus/PieItem.java
deleted file mode 100644
index c602852..0000000
--- a/src/com/android/messaging/ui/mediapicker/camerafocus/PieItem.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker.camerafocus;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Path;
-import android.graphics.drawable.Drawable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Pie menu item
- */
-public class PieItem {
-
-    public static interface OnClickListener {
-        void onClick(PieItem item);
-    }
-
-    private Drawable mDrawable;
-    private int level;
-    private float mCenter;
-    private float start;
-    private float sweep;
-    private float animate;
-    private int inner;
-    private int outer;
-    private boolean mSelected;
-    private boolean mEnabled;
-    private List<PieItem> mItems;
-    private Path mPath;
-    private OnClickListener mOnClickListener;
-    private float mAlpha;
-
-    // Gray out the view when disabled
-    private static final float ENABLED_ALPHA = 1;
-    private static final float DISABLED_ALPHA = (float) 0.3;
-    private boolean mChangeAlphaWhenDisabled = true;
-
-    public PieItem(Drawable drawable, int level) {
-        mDrawable = drawable;
-        this.level = level;
-        setAlpha(1f);
-        mEnabled = true;
-        setAnimationAngle(getAnimationAngle());
-        start = -1;
-        mCenter = -1;
-    }
-
-    public boolean hasItems() {
-        return mItems != null;
-    }
-
-    public List<PieItem> getItems() {
-        return mItems;
-    }
-
-    public void addItem(PieItem item) {
-        if (mItems == null) {
-            mItems = new ArrayList<PieItem>();
-        }
-        mItems.add(item);
-    }
-
-    public void setPath(Path p) {
-        mPath = p;
-    }
-
-    public Path getPath() {
-        return mPath;
-    }
-
-    public void setChangeAlphaWhenDisabled (boolean enable) {
-        mChangeAlphaWhenDisabled = enable;
-    }
-
-    public void setAlpha(float alpha) {
-        mAlpha = alpha;
-        mDrawable.setAlpha((int) (255 * alpha));
-    }
-
-    public void setAnimationAngle(float a) {
-        animate = a;
-    }
-
-    public float getAnimationAngle() {
-        return animate;
-    }
-
-    public void setEnabled(boolean enabled) {
-        mEnabled = enabled;
-        if (mChangeAlphaWhenDisabled) {
-            if (mEnabled) {
-                setAlpha(ENABLED_ALPHA);
-            } else {
-                setAlpha(DISABLED_ALPHA);
-            }
-        }
-    }
-
-    public boolean isEnabled() {
-        return mEnabled;
-    }
-
-    public void setSelected(boolean s) {
-        mSelected = s;
-    }
-
-    public boolean isSelected() {
-        return mSelected;
-    }
-
-    public int getLevel() {
-        return level;
-    }
-
-    public void setGeometry(float st, float sw, int inside, int outside) {
-        start = st;
-        sweep = sw;
-        inner = inside;
-        outer = outside;
-    }
-
-    public void setFixedSlice(float center, float sweep) {
-        mCenter = center;
-        this.sweep = sweep;
-    }
-
-    public float getCenter() {
-        return mCenter;
-    }
-
-    public float getStart() {
-        return start;
-    }
-
-    public float getStartAngle() {
-        return start + animate;
-    }
-
-    public float getSweep() {
-        return sweep;
-    }
-
-    public int getInnerRadius() {
-        return inner;
-    }
-
-    public int getOuterRadius() {
-        return outer;
-    }
-
-    public void setOnClickListener(OnClickListener listener) {
-        mOnClickListener = listener;
-    }
-
-    public void performClick() {
-        if (mOnClickListener != null) {
-            mOnClickListener.onClick(this);
-        }
-    }
-
-    public int getIntrinsicWidth() {
-        return mDrawable.getIntrinsicWidth();
-    }
-
-    public int getIntrinsicHeight() {
-        return mDrawable.getIntrinsicHeight();
-    }
-
-    public void setBounds(int left, int top, int right, int bottom) {
-        mDrawable.setBounds(left, top, right, bottom);
-    }
-
-    public void draw(Canvas canvas) {
-        mDrawable.draw(canvas);
-    }
-
-    public void setImageResource(Context context, int resId) {
-        Drawable d = context.getResources().getDrawable(resId).mutate();
-        d.setBounds(mDrawable.getBounds());
-        mDrawable = d;
-        setAlpha(mAlpha);
-    }
-
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/mediapicker/camerafocus/PieRenderer.java b/src/com/android/messaging/ui/mediapicker/camerafocus/PieRenderer.java
deleted file mode 100644
index ce8ca00..0000000
--- a/src/com/android/messaging/ui/mediapicker/camerafocus/PieRenderer.java
+++ /dev/null
@@ -1,825 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker.camerafocus;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.Point;
-import android.graphics.PointF;
-import android.graphics.RectF;
-import android.os.Handler;
-import android.os.Message;
-import android.view.MotionEvent;
-import android.view.ViewConfiguration;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
-import android.view.animation.LinearInterpolator;
-import android.view.animation.Transformation;
-import com.android.messaging.R;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class PieRenderer extends OverlayRenderer
-        implements FocusIndicator {
-    // Sometimes continuous autofocus starts and stops several times quickly.
-    // These states are used to make sure the animation is run for at least some
-    // time.
-    private volatile int mState;
-    private ScaleAnimation mAnimation = new ScaleAnimation();
-    private static final int STATE_IDLE = 0;
-    private static final int STATE_FOCUSING = 1;
-    private static final int STATE_FINISHING = 2;
-    private static final int STATE_PIE = 8;
-
-    private Runnable mDisappear = new Disappear();
-    private Animation.AnimationListener mEndAction = new EndAction();
-    private static final int SCALING_UP_TIME = 600;
-    private static final int SCALING_DOWN_TIME = 100;
-    private static final int DISAPPEAR_TIMEOUT = 200;
-    private static final int DIAL_HORIZONTAL = 157;
-
-    private static final long PIE_FADE_IN_DURATION = 200;
-    private static final long PIE_XFADE_DURATION = 200;
-    private static final long PIE_SELECT_FADE_DURATION = 300;
-
-    private static final int MSG_OPEN = 0;
-    private static final int MSG_CLOSE = 1;
-    private static final float PIE_SWEEP = (float) (Math.PI * 2 / 3);
-    // geometry
-    private Point mCenter;
-    private int mRadius;
-    private int mRadiusInc;
-
-    // the detection if touch is inside a slice is offset
-    // inbounds by this amount to allow the selection to show before the
-    // finger covers it
-    private int mTouchOffset;
-
-    private List<PieItem> mItems;
-
-    private PieItem mOpenItem;
-
-    private Paint mSelectedPaint;
-    private Paint mSubPaint;
-
-    // touch handling
-    private PieItem mCurrentItem;
-
-    private Paint mFocusPaint;
-    private int mSuccessColor;
-    private int mFailColor;
-    private int mCircleSize;
-    private int mFocusX;
-    private int mFocusY;
-    private int mCenterX;
-    private int mCenterY;
-
-    private int mDialAngle;
-    private RectF mCircle;
-    private RectF mDial;
-    private Point mPoint1;
-    private Point mPoint2;
-    private int mStartAnimationAngle;
-    private boolean mFocused;
-    private int mInnerOffset;
-    private int mOuterStroke;
-    private int mInnerStroke;
-    private boolean mTapMode;
-    private boolean mBlockFocus;
-    private int mTouchSlopSquared;
-    private Point mDown;
-    private boolean mOpening;
-    private LinearAnimation mXFade;
-    private LinearAnimation mFadeIn;
-    private volatile boolean mFocusCancelled;
-
-    private Handler mHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            switch(msg.what) {
-                case MSG_OPEN:
-                    if (mListener != null) {
-                        mListener.onPieOpened(mCenter.x, mCenter.y);
-                    }
-                    break;
-                case MSG_CLOSE:
-                    if (mListener != null) {
-                        mListener.onPieClosed();
-                    }
-                    break;
-            }
-        }
-    };
-
-    private PieListener mListener;
-
-    public static interface PieListener {
-        public void onPieOpened(int centerX, int centerY);
-        public void onPieClosed();
-    }
-
-    public void setPieListener(PieListener pl) {
-        mListener = pl;
-    }
-
-    public PieRenderer(Context context) {
-        init(context);
-    }
-
-    private void init(Context ctx) {
-        setVisible(false);
-        mItems = new ArrayList<PieItem>();
-        Resources res = ctx.getResources();
-        mRadius = (int) res.getDimensionPixelSize(R.dimen.pie_radius_start);
-        mCircleSize = mRadius - res.getDimensionPixelSize(R.dimen.focus_radius_offset);
-        mRadiusInc =  (int) res.getDimensionPixelSize(R.dimen.pie_radius_increment);
-        mTouchOffset = (int) res.getDimensionPixelSize(R.dimen.pie_touch_offset);
-        mCenter = new Point(0, 0);
-        mSelectedPaint = new Paint();
-        mSelectedPaint.setColor(Color.argb(255, 51, 181, 229));
-        mSelectedPaint.setAntiAlias(true);
-        mSubPaint = new Paint();
-        mSubPaint.setAntiAlias(true);
-        mSubPaint.setColor(Color.argb(200, 250, 230, 128));
-        mFocusPaint = new Paint();
-        mFocusPaint.setAntiAlias(true);
-        mFocusPaint.setColor(Color.WHITE);
-        mFocusPaint.setStyle(Paint.Style.STROKE);
-        mSuccessColor = Color.GREEN;
-        mFailColor = Color.RED;
-        mCircle = new RectF();
-        mDial = new RectF();
-        mPoint1 = new Point();
-        mPoint2 = new Point();
-        mInnerOffset = res.getDimensionPixelSize(R.dimen.focus_inner_offset);
-        mOuterStroke = res.getDimensionPixelSize(R.dimen.focus_outer_stroke);
-        mInnerStroke = res.getDimensionPixelSize(R.dimen.focus_inner_stroke);
-        mState = STATE_IDLE;
-        mBlockFocus = false;
-        mTouchSlopSquared = ViewConfiguration.get(ctx).getScaledTouchSlop();
-        mTouchSlopSquared = mTouchSlopSquared * mTouchSlopSquared;
-        mDown = new Point();
-    }
-
-    public boolean showsItems() {
-        return mTapMode;
-    }
-
-    public void addItem(PieItem item) {
-        // add the item to the pie itself
-        mItems.add(item);
-    }
-
-    public void removeItem(PieItem item) {
-        mItems.remove(item);
-    }
-
-    public void clearItems() {
-        mItems.clear();
-    }
-
-    public void showInCenter() {
-        if ((mState == STATE_PIE) && isVisible()) {
-            mTapMode = false;
-            show(false);
-        } else {
-            if (mState != STATE_IDLE) {
-                cancelFocus();
-            }
-            mState = STATE_PIE;
-            setCenter(mCenterX, mCenterY);
-            mTapMode = true;
-            show(true);
-        }
-    }
-
-    public void hide() {
-        show(false);
-    }
-
-    /**
-     * guaranteed has center set
-     * @param show
-     */
-    private void show(boolean show) {
-        if (show) {
-            mState = STATE_PIE;
-            // ensure clean state
-            mCurrentItem = null;
-            mOpenItem = null;
-            for (PieItem item : mItems) {
-                item.setSelected(false);
-            }
-            layoutPie();
-            fadeIn();
-        } else {
-            mState = STATE_IDLE;
-            mTapMode = false;
-            if (mXFade != null) {
-                mXFade.cancel();
-            }
-        }
-        setVisible(show);
-        mHandler.sendEmptyMessage(show ? MSG_OPEN : MSG_CLOSE);
-    }
-
-    private void fadeIn() {
-        mFadeIn = new LinearAnimation(0, 1);
-        mFadeIn.setDuration(PIE_FADE_IN_DURATION);
-        mFadeIn.setAnimationListener(new AnimationListener() {
-            @Override
-            public void onAnimationStart(Animation animation) {
-            }
-
-            @Override
-            public void onAnimationEnd(Animation animation) {
-                mFadeIn = null;
-            }
-
-            @Override
-            public void onAnimationRepeat(Animation animation) {
-            }
-        });
-        mFadeIn.startNow();
-        mOverlay.startAnimation(mFadeIn);
-    }
-
-    public void setCenter(int x, int y) {
-        mCenter.x = x;
-        mCenter.y = y;
-        // when using the pie menu, align the focus ring
-        alignFocus(x, y);
-    }
-
-    private void layoutPie() {
-        int rgap = 2;
-        int inner = mRadius + rgap;
-        int outer = mRadius + mRadiusInc - rgap;
-        int gap = 1;
-        layoutItems(mItems, (float) (Math.PI / 2), inner, outer, gap);
-    }
-
-    private void layoutItems(List<PieItem> items, float centerAngle, int inner,
-                             int outer, int gap) {
-        float emptyangle = PIE_SWEEP / 16;
-        float sweep = (float) (PIE_SWEEP - 2 * emptyangle) / items.size();
-        float angle = centerAngle - PIE_SWEEP / 2 + emptyangle + sweep / 2;
-        // check if we have custom geometry
-        // first item we find triggers custom sweep for all
-        // this allows us to re-use the path
-        for (PieItem item : items) {
-            if (item.getCenter() >= 0) {
-                sweep = item.getSweep();
-                break;
-            }
-        }
-        Path path = makeSlice(getDegrees(0) - gap, getDegrees(sweep) + gap,
-                outer, inner, mCenter);
-        for (PieItem item : items) {
-            // shared between items
-            item.setPath(path);
-            if (item.getCenter() >= 0) {
-                angle = item.getCenter();
-            }
-            int w = item.getIntrinsicWidth();
-            int h = item.getIntrinsicHeight();
-            // move views to outer border
-            int r = inner + (outer - inner) * 2 / 3;
-            int x = (int) (r * Math.cos(angle));
-            int y = mCenter.y - (int) (r * Math.sin(angle)) - h / 2;
-            x = mCenter.x + x - w / 2;
-            item.setBounds(x, y, x + w, y + h);
-            float itemstart = angle - sweep / 2;
-            item.setGeometry(itemstart, sweep, inner, outer);
-            if (item.hasItems()) {
-                layoutItems(item.getItems(), angle, inner,
-                        outer + mRadiusInc / 2, gap);
-            }
-            angle += sweep;
-        }
-    }
-
-    private Path makeSlice(float start, float end, int outer, int inner, Point center) {
-        RectF bb =
-                new RectF(center.x - outer, center.y - outer, center.x + outer,
-                        center.y + outer);
-        RectF bbi =
-                new RectF(center.x - inner, center.y - inner, center.x + inner,
-                        center.y + inner);
-        Path path = new Path();
-        path.arcTo(bb, start, end - start, true);
-        path.arcTo(bbi, end, start - end);
-        path.close();
-        return path;
-    }
-
-    /**
-     * converts a
-     * @param angle from 0..PI to Android degrees (clockwise starting at 3 o'clock)
-     * @return skia angle
-     */
-    private float getDegrees(double angle) {
-        return (float) (360 - 180 * angle / Math.PI);
-    }
-
-    private void startFadeOut() {
-        mOverlay.animate().alpha(0).setListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                deselect();
-                show(false);
-                mOverlay.setAlpha(1);
-                super.onAnimationEnd(animation);
-            }
-        }).setDuration(PIE_SELECT_FADE_DURATION);
-    }
-
-    @Override
-    public void onDraw(Canvas canvas) {
-        float alpha = 1;
-        if (mXFade != null) {
-            alpha = mXFade.getValue();
-        } else if (mFadeIn != null) {
-            alpha = mFadeIn.getValue();
-        }
-        int state = canvas.save();
-        if (mFadeIn != null) {
-            float sf = 0.9f + alpha * 0.1f;
-            canvas.scale(sf, sf, mCenter.x, mCenter.y);
-        }
-        drawFocus(canvas);
-        if (mState == STATE_FINISHING) {
-            canvas.restoreToCount(state);
-            return;
-        }
-        if ((mOpenItem == null) || (mXFade != null)) {
-            // draw base menu
-            for (PieItem item : mItems) {
-                drawItem(canvas, item, alpha);
-            }
-        }
-        if (mOpenItem != null) {
-            for (PieItem inner : mOpenItem.getItems()) {
-                drawItem(canvas, inner, (mXFade != null) ? (1 - 0.5f * alpha) : 1);
-            }
-        }
-        canvas.restoreToCount(state);
-    }
-
-    private void drawItem(Canvas canvas, PieItem item, float alpha) {
-        if (mState == STATE_PIE) {
-            if (item.getPath() != null) {
-                if (item.isSelected()) {
-                    Paint p = mSelectedPaint;
-                    int state = canvas.save();
-                    float r = getDegrees(item.getStartAngle());
-                    canvas.rotate(r, mCenter.x, mCenter.y);
-                    canvas.drawPath(item.getPath(), p);
-                    canvas.restoreToCount(state);
-                }
-                alpha = alpha * (item.isEnabled() ? 1 : 0.3f);
-                // draw the item view
-                item.setAlpha(alpha);
-                item.draw(canvas);
-            }
-        }
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent evt) {
-        float x = evt.getX();
-        float y = evt.getY();
-        int action = evt.getActionMasked();
-        PointF polar = getPolar(x, y, !(mTapMode));
-        if (MotionEvent.ACTION_DOWN == action) {
-            mDown.x = (int) evt.getX();
-            mDown.y = (int) evt.getY();
-            mOpening = false;
-            if (mTapMode) {
-                PieItem item = findItem(polar);
-                if ((item != null) && (mCurrentItem != item)) {
-                    mState = STATE_PIE;
-                    onEnter(item);
-                }
-            } else {
-                setCenter((int) x, (int) y);
-                show(true);
-            }
-            return true;
-        } else if (MotionEvent.ACTION_UP == action) {
-            if (isVisible()) {
-                PieItem item = mCurrentItem;
-                if (mTapMode) {
-                    item = findItem(polar);
-                    if (item != null && mOpening) {
-                        mOpening = false;
-                        return true;
-                    }
-                }
-                if (item == null) {
-                    mTapMode = false;
-                    show(false);
-                } else if (!mOpening
-                        && !item.hasItems()) {
-                    item.performClick();
-                    startFadeOut();
-                    mTapMode = false;
-                }
-                return true;
-            }
-        } else if (MotionEvent.ACTION_CANCEL == action) {
-            if (isVisible() || mTapMode) {
-                show(false);
-            }
-            deselect();
-            return false;
-        } else if (MotionEvent.ACTION_MOVE == action) {
-            if (polar.y < mRadius) {
-                if (mOpenItem != null) {
-                    mOpenItem = null;
-                } else {
-                    deselect();
-                }
-                return false;
-            }
-            PieItem item = findItem(polar);
-            boolean moved = hasMoved(evt);
-            if ((item != null) && (mCurrentItem != item) && (!mOpening || moved)) {
-                // only select if we didn't just open or have moved past slop
-                mOpening = false;
-                if (moved) {
-                    // switch back to swipe mode
-                    mTapMode = false;
-                }
-                onEnter(item);
-            }
-        }
-        return false;
-    }
-
-    private boolean hasMoved(MotionEvent e) {
-        return mTouchSlopSquared < (e.getX() - mDown.x) * (e.getX() - mDown.x)
-                + (e.getY() - mDown.y) * (e.getY() - mDown.y);
-    }
-
-    /**
-     * enter a slice for a view
-     * updates model only
-     * @param item
-     */
-    private void onEnter(PieItem item) {
-        if (mCurrentItem != null) {
-            mCurrentItem.setSelected(false);
-        }
-        if (item != null && item.isEnabled()) {
-            item.setSelected(true);
-            mCurrentItem = item;
-            if ((mCurrentItem != mOpenItem) && mCurrentItem.hasItems()) {
-                openCurrentItem();
-            }
-        } else {
-            mCurrentItem = null;
-        }
-    }
-
-    private void deselect() {
-        if (mCurrentItem != null) {
-            mCurrentItem.setSelected(false);
-        }
-        if (mOpenItem != null) {
-            mOpenItem = null;
-        }
-        mCurrentItem = null;
-    }
-
-    private void openCurrentItem() {
-        if ((mCurrentItem != null) && mCurrentItem.hasItems()) {
-            mCurrentItem.setSelected(false);
-            mOpenItem = mCurrentItem;
-            mOpening = true;
-            mXFade = new LinearAnimation(1, 0);
-            mXFade.setDuration(PIE_XFADE_DURATION);
-            mXFade.setAnimationListener(new AnimationListener() {
-                @Override
-                public void onAnimationStart(Animation animation) {
-                }
-
-                @Override
-                public void onAnimationEnd(Animation animation) {
-                    mXFade = null;
-                }
-
-                @Override
-                public void onAnimationRepeat(Animation animation) {
-                }
-            });
-            mXFade.startNow();
-            mOverlay.startAnimation(mXFade);
-        }
-    }
-
-    private PointF getPolar(float x, float y, boolean useOffset) {
-        PointF res = new PointF();
-        // get angle and radius from x/y
-        res.x = (float) Math.PI / 2;
-        x = x - mCenter.x;
-        y = mCenter.y - y;
-        res.y = (float) Math.sqrt(x * x + y * y);
-        if (x != 0) {
-            res.x = (float) Math.atan2(y,  x);
-            if (res.x < 0) {
-                res.x = (float) (2 * Math.PI + res.x);
-            }
-        }
-        res.y = res.y + (useOffset ? mTouchOffset : 0);
-        return res;
-    }
-
-    /**
-     * @param polar x: angle, y: dist
-     * @return the item at angle/dist or null
-     */
-    private PieItem findItem(PointF polar) {
-        // find the matching item:
-        List<PieItem> items = (mOpenItem != null) ? mOpenItem.getItems() : mItems;
-        for (PieItem item : items) {
-            if (inside(polar, item)) {
-                return item;
-            }
-        }
-        return null;
-    }
-
-    private boolean inside(PointF polar, PieItem item) {
-        return (item.getInnerRadius() < polar.y)
-                && (item.getStartAngle() < polar.x)
-                && (item.getStartAngle() + item.getSweep() > polar.x)
-                && (!mTapMode || (item.getOuterRadius() > polar.y));
-    }
-
-    @Override
-    public boolean handlesTouch() {
-        return true;
-    }
-
-    // focus specific code
-
-    public void setBlockFocus(boolean blocked) {
-        mBlockFocus = blocked;
-        if (blocked) {
-            clear();
-        }
-    }
-
-    public void setFocus(int x, int y) {
-        mFocusX = x;
-        mFocusY = y;
-        setCircle(mFocusX, mFocusY);
-    }
-
-    public void alignFocus(int x, int y) {
-        mOverlay.removeCallbacks(mDisappear);
-        mAnimation.cancel();
-        mAnimation.reset();
-        mFocusX = x;
-        mFocusY = y;
-        mDialAngle = DIAL_HORIZONTAL;
-        setCircle(x, y);
-        mFocused = false;
-    }
-
-    public int getSize() {
-        return 2 * mCircleSize;
-    }
-
-    private int getRandomRange() {
-        return (int) (-60 + 120 * Math.random());
-    }
-
-    @Override
-    public void layout(int l, int t, int r, int b) {
-        super.layout(l, t, r, b);
-        mCenterX = (r - l) / 2;
-        mCenterY = (b - t) / 2;
-        mFocusX = mCenterX;
-        mFocusY = mCenterY;
-        setCircle(mFocusX, mFocusY);
-        if (isVisible() && mState == STATE_PIE) {
-            setCenter(mCenterX, mCenterY);
-            layoutPie();
-        }
-    }
-
-    private void setCircle(int cx, int cy) {
-        mCircle.set(cx - mCircleSize, cy - mCircleSize,
-                cx + mCircleSize, cy + mCircleSize);
-        mDial.set(cx - mCircleSize + mInnerOffset, cy - mCircleSize + mInnerOffset,
-                cx + mCircleSize - mInnerOffset, cy + mCircleSize - mInnerOffset);
-    }
-
-    public void drawFocus(Canvas canvas) {
-        if (mBlockFocus) {
-            return;
-        }
-        mFocusPaint.setStrokeWidth(mOuterStroke);
-        canvas.drawCircle((float) mFocusX, (float) mFocusY, (float) mCircleSize, mFocusPaint);
-        if (mState == STATE_PIE) {
-            return;
-        }
-        int color = mFocusPaint.getColor();
-        if (mState == STATE_FINISHING) {
-            mFocusPaint.setColor(mFocused ? mSuccessColor : mFailColor);
-        }
-        mFocusPaint.setStrokeWidth(mInnerStroke);
-        drawLine(canvas, mDialAngle, mFocusPaint);
-        drawLine(canvas, mDialAngle + 45, mFocusPaint);
-        drawLine(canvas, mDialAngle + 180, mFocusPaint);
-        drawLine(canvas, mDialAngle + 225, mFocusPaint);
-        canvas.save();
-        // rotate the arc instead of its offset to better use framework's shape caching
-        canvas.rotate(mDialAngle, mFocusX, mFocusY);
-        canvas.drawArc(mDial, 0, 45, false, mFocusPaint);
-        canvas.drawArc(mDial, 180, 45, false, mFocusPaint);
-        canvas.restore();
-        mFocusPaint.setColor(color);
-    }
-
-    private void drawLine(Canvas canvas, int angle, Paint p) {
-        convertCart(angle, mCircleSize - mInnerOffset, mPoint1);
-        convertCart(angle, mCircleSize - mInnerOffset + mInnerOffset / 3, mPoint2);
-        canvas.drawLine(mPoint1.x + mFocusX, mPoint1.y + mFocusY,
-                mPoint2.x + mFocusX, mPoint2.y + mFocusY, p);
-    }
-
-    private static void convertCart(int angle, int radius, Point out) {
-        double a = 2 * Math.PI * (angle % 360) / 360;
-        out.x = (int) (radius * Math.cos(a) + 0.5);
-        out.y = (int) (radius * Math.sin(a) + 0.5);
-    }
-
-    @Override
-    public void showStart() {
-        if (mState == STATE_PIE) {
-            return;
-        }
-        cancelFocus();
-        mStartAnimationAngle = 67;
-        int range = getRandomRange();
-        startAnimation(SCALING_UP_TIME,
-                false, mStartAnimationAngle, mStartAnimationAngle + range);
-        mState = STATE_FOCUSING;
-    }
-
-    @Override
-    public void showSuccess(boolean timeout) {
-        if (mState == STATE_FOCUSING) {
-            startAnimation(SCALING_DOWN_TIME,
-                    timeout, mStartAnimationAngle);
-            mState = STATE_FINISHING;
-            mFocused = true;
-        }
-    }
-
-    @Override
-    public void showFail(boolean timeout) {
-        if (mState == STATE_FOCUSING) {
-            startAnimation(SCALING_DOWN_TIME,
-                    timeout, mStartAnimationAngle);
-            mState = STATE_FINISHING;
-            mFocused = false;
-        }
-    }
-
-    private void cancelFocus() {
-        mFocusCancelled = true;
-        mOverlay.removeCallbacks(mDisappear);
-        if (mAnimation != null) {
-            mAnimation.cancel();
-        }
-        mFocusCancelled = false;
-        mFocused = false;
-        mState = STATE_IDLE;
-    }
-
-    @Override
-    public void clear() {
-        if (mState == STATE_PIE) {
-            return;
-        }
-        cancelFocus();
-        mOverlay.post(mDisappear);
-    }
-
-    private void startAnimation(long duration, boolean timeout,
-                                float toScale) {
-        startAnimation(duration, timeout, mDialAngle,
-                toScale);
-    }
-
-    private void startAnimation(long duration, boolean timeout,
-                                float fromScale, float toScale) {
-        setVisible(true);
-        mAnimation.reset();
-        mAnimation.setDuration(duration);
-        mAnimation.setScale(fromScale, toScale);
-        mAnimation.setAnimationListener(timeout ? mEndAction : null);
-        mOverlay.startAnimation(mAnimation);
-        update();
-    }
-
-    private class EndAction implements Animation.AnimationListener {
-        @Override
-        public void onAnimationEnd(Animation animation) {
-            // Keep the focus indicator for some time.
-            if (!mFocusCancelled) {
-                mOverlay.postDelayed(mDisappear, DISAPPEAR_TIMEOUT);
-            }
-        }
-
-        @Override
-        public void onAnimationRepeat(Animation animation) {
-        }
-
-        @Override
-        public void onAnimationStart(Animation animation) {
-        }
-    }
-
-    private class Disappear implements Runnable {
-        @Override
-        public void run() {
-            if (mState == STATE_PIE) {
-                return;
-            }
-            setVisible(false);
-            mFocusX = mCenterX;
-            mFocusY = mCenterY;
-            mState = STATE_IDLE;
-            setCircle(mFocusX, mFocusY);
-            mFocused = false;
-        }
-    }
-
-    private class ScaleAnimation extends Animation {
-        private float mFrom = 1f;
-        private float mTo = 1f;
-
-        public ScaleAnimation() {
-            setFillAfter(true);
-        }
-
-        public void setScale(float from, float to) {
-            mFrom = from;
-            mTo = to;
-        }
-
-        @Override
-        protected void applyTransformation(float interpolatedTime, Transformation t) {
-            mDialAngle = (int) (mFrom + (mTo - mFrom) * interpolatedTime);
-        }
-    }
-
-
-    private class LinearAnimation extends Animation {
-        private float mFrom;
-        private float mTo;
-        private float mValue;
-
-        public LinearAnimation(float from, float to) {
-            setFillAfter(true);
-            setInterpolator(new LinearInterpolator());
-            mFrom = from;
-            mTo = to;
-        }
-
-        public float getValue() {
-            return mValue;
-        }
-
-        @Override
-        protected void applyTransformation(float interpolatedTime, Transformation t) {
-            mValue = (mFrom + (mTo - mFrom) * interpolatedTime);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/mediapicker/camerafocus/README.txt b/src/com/android/messaging/ui/mediapicker/camerafocus/README.txt
deleted file mode 100644
index ed4e783..0000000
--- a/src/com/android/messaging/ui/mediapicker/camerafocus/README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-The files in this package were copied from the android-4.4.4_r1 branch of ASOP from the folders
-com/android/camera/ and com/android/camera/ui from files with the same name.  Some modifications
-have been made to remove unneeded features and adjust to our needs.
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/mediapicker/camerafocus/RenderOverlay.java b/src/com/android/messaging/ui/mediapicker/camerafocus/RenderOverlay.java
deleted file mode 100644
index 95cddc4..0000000
--- a/src/com/android/messaging/ui/mediapicker/camerafocus/RenderOverlay.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker.camerafocus;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.FrameLayout;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class RenderOverlay extends FrameLayout {
-
-    interface Renderer {
-
-        public boolean handlesTouch();
-        public boolean onTouchEvent(MotionEvent evt);
-        public void setOverlay(RenderOverlay overlay);
-        public void layout(int left, int top, int right, int bottom);
-        public void draw(Canvas canvas);
-
-    }
-
-    private RenderView mRenderView;
-    private List<Renderer> mClients;
-
-    // reverse list of touch clients
-    private List<Renderer> mTouchClients;
-    private int[] mPosition = new int[2];
-
-    public RenderOverlay(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mRenderView = new RenderView(context);
-        addView(mRenderView, new LayoutParams(LayoutParams.MATCH_PARENT,
-                LayoutParams.MATCH_PARENT));
-        mClients = new ArrayList<Renderer>(10);
-        mTouchClients = new ArrayList<Renderer>(10);
-        setWillNotDraw(false);
-
-        addRenderer(new PieRenderer(context));
-    }
-
-    public PieRenderer getPieRenderer() {
-        for (Renderer renderer : mClients) {
-            if (renderer instanceof PieRenderer) {
-                return (PieRenderer) renderer;
-            }
-        }
-        return null;
-    }
-
-    public void addRenderer(Renderer renderer) {
-        mClients.add(renderer);
-        renderer.setOverlay(this);
-        if (renderer.handlesTouch()) {
-            mTouchClients.add(0, renderer);
-        }
-        renderer.layout(getLeft(), getTop(), getRight(), getBottom());
-    }
-
-    public void addRenderer(int pos, Renderer renderer) {
-        mClients.add(pos, renderer);
-        renderer.setOverlay(this);
-        renderer.layout(getLeft(), getTop(), getRight(), getBottom());
-    }
-
-    public void remove(Renderer renderer) {
-        mClients.remove(renderer);
-        renderer.setOverlay(null);
-    }
-
-    public int getClientSize() {
-        return mClients.size();
-    }
-
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent m) {
-        return false;
-    }
-
-    public boolean directDispatchTouch(MotionEvent m, Renderer target) {
-        mRenderView.setTouchTarget(target);
-        boolean res = super.dispatchTouchEvent(m);
-        mRenderView.setTouchTarget(null);
-        return res;
-    }
-
-    private void adjustPosition() {
-        getLocationInWindow(mPosition);
-    }
-
-    public int getWindowPositionX() {
-        return mPosition[0];
-    }
-
-    public int getWindowPositionY() {
-        return mPosition[1];
-    }
-
-    public void update() {
-        mRenderView.invalidate();
-    }
-
-    private class RenderView extends View {
-
-        private Renderer mTouchTarget;
-
-        public RenderView(Context context) {
-            super(context);
-            setWillNotDraw(false);
-        }
-
-        public void setTouchTarget(Renderer target) {
-            mTouchTarget = target;
-        }
-
-        @Override
-        public boolean onTouchEvent(MotionEvent evt) {
-            if (mTouchTarget != null) {
-                return mTouchTarget.onTouchEvent(evt);
-            }
-            if (mTouchClients != null) {
-                boolean res = false;
-                for (Renderer client : mTouchClients) {
-                    res |= client.onTouchEvent(evt);
-                }
-                return res;
-            }
-            return false;
-        }
-
-        @Override
-        public void onLayout(boolean changed, int left, int top, int right, int bottom) {
-            adjustPosition();
-            super.onLayout(changed, left,  top, right, bottom);
-            if (mClients == null) {
-                return;
-            }
-            for (Renderer renderer : mClients) {
-                renderer.layout(left, top, right, bottom);
-            }
-        }
-
-        @Override
-        public void draw(Canvas canvas) {
-            super.draw(canvas);
-            if (mClients == null) {
-                return;
-            }
-            boolean redraw = false;
-            for (Renderer renderer : mClients) {
-                renderer.draw(canvas);
-                redraw = redraw || ((OverlayRenderer) renderer).isVisible();
-            }
-            if (redraw) {
-                invalidate();
-            }
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/photoviewer/BuglePhotoBitmapLoader.java b/src/com/android/messaging/ui/photoviewer/BuglePhotoBitmapLoader.java
deleted file mode 100644
index 9911456..0000000
--- a/src/com/android/messaging/ui/photoviewer/BuglePhotoBitmapLoader.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.photoviewer;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.support.rastermill.FrameSequenceDrawable;
-import androidx.loader.content.AsyncTaskLoader;
-
-import com.android.ex.photo.PhotoViewController;
-import com.android.ex.photo.loaders.PhotoBitmapLoaderInterface;
-import com.android.ex.photo.loaders.PhotoBitmapLoaderInterface.BitmapResult;
-import com.android.messaging.datamodel.media.ImageRequestDescriptor;
-import com.android.messaging.datamodel.media.ImageResource;
-import com.android.messaging.datamodel.media.MediaRequest;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.datamodel.media.UriImageRequestDescriptor;
-import com.android.messaging.util.ImageUtils;
-
-/**
- * Loader for the bitmap of a photo.
- */
-public class BuglePhotoBitmapLoader extends AsyncTaskLoader<BitmapResult>
-        implements PhotoBitmapLoaderInterface {
-    private String mPhotoUri;
-    private ImageResource mImageResource;
-    // The drawable that is currently "in use" and being presented to the user. This drawable
-    // should never exist without the image resource backing it.
-    private Drawable mDrawable;
-
-    public BuglePhotoBitmapLoader(Context context, String photoUri) {
-        super(context);
-        mPhotoUri = photoUri;
-    }
-
-    @Override
-    public void setPhotoUri(String photoUri) {
-        mPhotoUri = photoUri;
-    }
-
-    @Override
-    public BitmapResult loadInBackground() {
-        final BitmapResult result = new BitmapResult();
-        final Context context = getContext();
-        if (context != null && mPhotoUri != null) {
-            final ImageRequestDescriptor descriptor =
-                    new UriImageRequestDescriptor(Uri.parse(mPhotoUri),
-                            PhotoViewController.sMaxPhotoSize, PhotoViewController.sMaxPhotoSize,
-                            true /* allowCompression */, false /* isStatic */,
-                            false /* cropToCircle */,
-                            ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                            ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */);
-            final MediaRequest<ImageResource> imageRequest =
-                    descriptor.buildSyncMediaRequest(context);
-            final ImageResource imageResource =
-                    MediaResourceManager.get().requestMediaResourceSync(imageRequest);
-            if (imageResource != null) {
-                setImageResource(imageResource);
-                result.status = BitmapResult.STATUS_SUCCESS;
-                result.drawable = mImageResource.getDrawable(context.getResources());
-            } else {
-                releaseImageResource();
-                result.status = BitmapResult.STATUS_EXCEPTION;
-            }
-        } else {
-            result.status = BitmapResult.STATUS_EXCEPTION;
-        }
-        return result;
-    }
-
-    /**
-     * Called when there is new data to deliver to the client. The super class will take care of
-     * delivering it; the implementation here just adds a little more logic.
-     */
-    @Override
-    public void deliverResult(BitmapResult result) {
-        final Drawable drawable = result != null ? result.drawable : null;
-        if (isReset()) {
-            // An async query came in while the loader is stopped. We don't need the result.
-            releaseDrawable(drawable);
-            return;
-        }
-
-        // We are now going to display this drawable so set to mDrawable
-        mDrawable = drawable;
-
-        if (isStarted()) {
-            // If the Loader is currently started, we can immediately deliver its results.
-            super.deliverResult(result);
-        }
-    }
-
-    /**
-     * Handles a request to start the Loader.
-     */
-    @Override
-    protected void onStartLoading() {
-        if (mDrawable != null) {
-            // If we currently have a result available, deliver it
-            // immediately.
-            final BitmapResult result = new BitmapResult();
-            result.status = BitmapResult.STATUS_SUCCESS;
-            result.drawable = mDrawable;
-            deliverResult(result);
-        }
-
-        if (takeContentChanged() || (mImageResource == null)) {
-            // If the data has changed since the last time it was loaded
-            // or is not currently available, start a load.
-            forceLoad();
-        }
-    }
-
-    /**
-     * Handles a request to stop the Loader.
-     */
-    @Override
-    protected void onStopLoading() {
-        // Attempt to cancel the current load task if possible.
-        cancelLoad();
-    }
-
-    /**
-     * Handles a request to cancel a load.
-     */
-    @Override
-    public void onCanceled(BitmapResult result) {
-        super.onCanceled(result);
-
-        // At this point we can release the resources associated with 'drawable' if needed.
-        if (result != null) {
-            releaseDrawable(result.drawable);
-        }
-    }
-
-    /**
-     * Handles a request to completely reset the Loader.
-     */
-    @Override
-    protected void onReset() {
-        super.onReset();
-
-        // Ensure the loader is stopped
-        onStopLoading();
-
-        releaseImageResource();
-    }
-
-    private void releaseDrawable(Drawable drawable) {
-        if (drawable != null && drawable instanceof FrameSequenceDrawable
-                && !((FrameSequenceDrawable) drawable).isDestroyed()) {
-            ((FrameSequenceDrawable) drawable).destroy();
-        }
-
-    }
-
-    private void setImageResource(final ImageResource resource) {
-        if (mImageResource != resource) {
-            // Clear out any information for what is currently used
-            releaseImageResource();
-            mImageResource = resource;
-            // No need to add ref since a ref is already reserved as a result of
-            // requestMediaResourceSync.
-        }
-    }
-
-    private void releaseImageResource() {
-        // If we are getting rid of the imageResource backing the drawable, we must also
-        // destroy the drawable before releasing it.
-        releaseDrawable(mDrawable);
-        mDrawable = null;
-
-        if (mImageResource != null) {
-            mImageResource.release();
-        }
-        mImageResource = null;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/ui/photoviewer/BuglePhotoPageAdapter.java b/src/com/android/messaging/ui/photoviewer/BuglePhotoPageAdapter.java
deleted file mode 100644
index c19070b..0000000
--- a/src/com/android/messaging/ui/photoviewer/BuglePhotoPageAdapter.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.photoviewer;
-
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import androidx.fragment.app.FragmentManager;
-
-import com.android.ex.photo.adapters.PhotoPagerAdapter;
-import com.android.ex.photo.fragments.PhotoViewFragment;
-
-public class BuglePhotoPageAdapter extends PhotoPagerAdapter {
-
-    public BuglePhotoPageAdapter(Context context, FragmentManager fm, Cursor c, float maxScale,
-            boolean thumbsFullScreen) {
-        super(context, fm, c, maxScale, thumbsFullScreen);
-    }
-
-    @Override
-    protected PhotoViewFragment createPhotoViewFragment(Intent intent, int position,
-            boolean onlyShowSpinner) {
-        return BuglePhotoViewFragment.newInstance(intent, position, onlyShowSpinner);
-    }
-}
diff --git a/src/com/android/messaging/ui/photoviewer/BuglePhotoViewActivity.java b/src/com/android/messaging/ui/photoviewer/BuglePhotoViewActivity.java
deleted file mode 100644
index 1924a96..0000000
--- a/src/com/android/messaging/ui/photoviewer/BuglePhotoViewActivity.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.photoviewer;
-
-import com.android.ex.photo.PhotoViewActivity;
-import com.android.ex.photo.PhotoViewController;
-
-/**
- * Activity to display the conversation images in full-screen. Most of the customization is in
- * {@link BuglePhotoViewController}.
- */
-public class BuglePhotoViewActivity extends PhotoViewActivity {
-    @Override
-    public PhotoViewController createController() {
-        return new BuglePhotoViewController(this);
-    }
-}
diff --git a/src/com/android/messaging/ui/photoviewer/BuglePhotoViewController.java b/src/com/android/messaging/ui/photoviewer/BuglePhotoViewController.java
deleted file mode 100644
index 0bb8f11..0000000
--- a/src/com/android/messaging/ui/photoviewer/BuglePhotoViewController.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.photoviewer;
-
-import android.Manifest;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.fragment.app.FragmentManager;
-import androidx.loader.content.Loader;
-import android.text.TextUtils;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.widget.ShareActionProvider;
-import android.widget.Toast;
-
-import com.android.ex.photo.PhotoViewController;
-import com.android.ex.photo.adapters.PhotoPagerAdapter;
-import com.android.ex.photo.loaders.PhotoBitmapLoaderInterface.BitmapResult;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.ConversationImagePartsView.PhotoViewQuery;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.ui.conversation.ConversationFragment;
-import com.android.messaging.util.Dates;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-
-/**
- * Customizations for the photoviewer to display conversation images in full screen.
- */
-public class BuglePhotoViewController extends PhotoViewController {
-    private ShareActionProvider mShareActionProvider;
-    private MenuItem mShareItem;
-    private MenuItem mSaveItem;
-
-    public BuglePhotoViewController(final ActivityInterface activity) {
-        super(activity);
-    }
-
-    @Override
-    public Loader<BitmapResult> onCreateBitmapLoader(
-            final int id, final Bundle args, final String uri) {
-        switch (id) {
-            case BITMAP_LOADER_AVATAR:
-            case BITMAP_LOADER_THUMBNAIL:
-            case BITMAP_LOADER_PHOTO:
-                return new BuglePhotoBitmapLoader(getActivity().getContext(), uri);
-            default:
-                LogUtil.e(LogUtil.BUGLE_TAG,
-                        "Photoviewer unable to open bitmap loader with unknown id: " + id);
-                return null;
-        }
-    }
-
-    @Override
-    public void updateActionBar() {
-        final Cursor cursor = getCursorAtProperPosition();
-
-        if (mSaveItem == null || cursor == null) {
-            // Load not finished, called from framework code before ready
-            return;
-        }
-        // Show the name as the title
-        mActionBarTitle = cursor.getString(PhotoViewQuery.INDEX_SENDER_FULL_NAME);
-        if (TextUtils.isEmpty(mActionBarTitle)) {
-            // If the name is not known, fall back to the phone number
-            mActionBarTitle = cursor.getString(PhotoViewQuery.INDEX_DISPLAY_DESTINATION);
-        }
-
-        // Show the timestamp as the subtitle
-        final long receivedTimestamp = cursor.getLong(PhotoViewQuery.INDEX_RECEIVED_TIMESTAMP);
-        mActionBarSubtitle = Dates.getMessageTimeString(receivedTimestamp).toString();
-
-        setActionBarTitles(getActivity().getActionBarInterface());
-        mSaveItem.setVisible(!isTempFile());
-
-        updateShareActionProvider();
-    }
-
-    private void updateShareActionProvider() {
-        final PhotoPagerAdapter adapter = getAdapter();
-        final Cursor cursor = getCursorAtProperPosition();
-        if (mShareActionProvider == null || mShareItem == null || adapter == null ||
-                cursor == null) {
-            // Not enough stuff loaded to update the share action
-            return;
-        }
-        final String photoUri = adapter.getPhotoUri(cursor);
-        if (isTempFile()) {
-            mShareItem.setVisible(false);
-            return;
-        }
-        final String contentType = adapter.getContentType(cursor);
-
-        final Intent shareIntent = new Intent();
-        shareIntent.setAction(Intent.ACTION_SEND);
-        shareIntent.setType(contentType);
-        shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(photoUri));
-        mShareActionProvider.setShareIntent(shareIntent);
-        mShareItem.setVisible(true);
-    }
-
-    /**
-     * Checks whether the current photo is a temp file.  A temp file can be deleted at any time, so
-     * we need to disable share and save options because the file may no longer be there.
-     */
-    private boolean isTempFile() {
-        final Cursor cursor = getCursorAtProperPosition();
-        final Uri photoUri = Uri.parse(getAdapter().getPhotoUri(cursor));
-        return MediaScratchFileProvider.isMediaScratchSpaceUri(photoUri);
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(final Menu menu) {
-        ((Activity) getActivity()).getMenuInflater().inflate(R.menu.photo_view_menu, menu);
-
-        // Get the ShareActionProvider
-        mShareItem = menu.findItem(R.id.action_share);
-        mShareActionProvider = (ShareActionProvider) mShareItem.getActionProvider();
-        updateShareActionProvider();
-
-        mSaveItem = menu.findItem(R.id.action_save);
-        return true;
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(final Menu menu) {
-        return !mIsEmpty;
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(final MenuItem item) {
-        if (item.getItemId() == R.id.action_save) {
-            if (OsUtil.hasStoragePermission()) {
-                final PhotoPagerAdapter adapter = getAdapter();
-                final Cursor cursor = getCursorAtProperPosition();
-                if (cursor == null) {
-                    final Context context = getActivity().getContext();
-                    final String error = context.getResources().getQuantityString(
-                            R.plurals.attachment_save_error, 1, 1);
-                    Toast.makeText(context, error, Toast.LENGTH_SHORT).show();
-                    return true;
-                }
-                final String photoUri = adapter.getPhotoUri(cursor);
-                new ConversationFragment.SaveAttachmentTask(((Activity) getActivity()),
-                        Uri.parse(photoUri), adapter.getContentType(cursor)).executeOnThreadPool();
-            } else {
-                ((Activity)getActivity()).requestPermissions(
-                        new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
-            }
-            return true;
-        } else {
-            return super.onOptionsItemSelected(item);
-        }
-    }
-
-    @Override
-    public PhotoPagerAdapter createPhotoPagerAdapter(final Context context,
-            final FragmentManager fm, final Cursor c, final float maxScale) {
-        return new BuglePhotoPageAdapter(context, fm, c, maxScale, mDisplayThumbsFullScreen);
-    }
-}
diff --git a/src/com/android/messaging/ui/photoviewer/BuglePhotoViewFragment.java b/src/com/android/messaging/ui/photoviewer/BuglePhotoViewFragment.java
deleted file mode 100644
index a6293dc..0000000
--- a/src/com/android/messaging/ui/photoviewer/BuglePhotoViewFragment.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.photoviewer;
-
-import android.content.Intent;
-import android.graphics.drawable.Drawable;
-import android.support.rastermill.FrameSequenceDrawable;
-import androidx.loader.content.Loader;
-
-import com.android.ex.photo.PhotoViewCallbacks;
-import com.android.ex.photo.fragments.PhotoViewFragment;
-import com.android.ex.photo.loaders.PhotoBitmapLoaderInterface.BitmapResult;
-
-public class BuglePhotoViewFragment extends PhotoViewFragment {
-
-    /** Public no-arg constructor for allowing the framework to handle orientation changes */
-    public BuglePhotoViewFragment() {
-        // Do nothing.
-    }
-
-    public static PhotoViewFragment newInstance(Intent intent, int position,
-            boolean onlyShowSpinner) {
-        final PhotoViewFragment f = new BuglePhotoViewFragment();
-        initializeArguments(intent, position, onlyShowSpinner, f);
-        return f;
-    }
-
-    @Override
-    public void onLoadFinished(Loader<BitmapResult> loader, BitmapResult result) {
-        super.onLoadFinished(loader, result);
-        // Need to check for the first time when we load the photos
-        if (PhotoViewCallbacks.BITMAP_LOADER_PHOTO == loader.getId()
-                && result.status == BitmapResult.STATUS_SUCCESS
-                && mCallback.isFragmentActive(this)) {
-            startGif();
-        }
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        startGif();
-    }
-
-    @Override
-    public void onPause() {
-        stopGif();
-        super.onPause();
-    }
-
-    @Override
-    public void onViewActivated() {
-        super.onViewActivated();
-        startGif();
-    }
-
-    @Override
-    public void resetViews() {
-        super.resetViews();
-        stopGif();
-    }
-
-    private void stopGif() {
-        final Drawable drawable = getDrawable();
-        if (drawable != null && drawable instanceof FrameSequenceDrawable) {
-            ((FrameSequenceDrawable) drawable).stop();
-        }
-    }
-
-    private void startGif() {
-        final Drawable drawable = getDrawable();
-        if (drawable != null && drawable instanceof FrameSequenceDrawable) {
-            ((FrameSequenceDrawable) drawable).start();
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/AccessibilityUtil.java b/src/com/android/messaging/util/AccessibilityUtil.java
deleted file mode 100644
index 788f482..0000000
--- a/src/com/android/messaging/util/AccessibilityUtil.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.content.res.Resources;
-import androidx.core.view.accessibility.AccessibilityEventCompat;
-import androidx.core.view.accessibility.AccessibilityRecordCompat;
-import android.text.TextUtils;
-import android.view.View;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityManager;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-
-import javax.annotation.Nullable;
-
-public class AccessibilityUtil {
-    public static String sContentDescriptionDivider;
-
-    public static boolean isTouchExplorationEnabled(final Context context) {
-        final AccessibilityManager accessibilityManager = (AccessibilityManager)
-                context.getSystemService(Context.ACCESSIBILITY_SERVICE);
-        return accessibilityManager.isTouchExplorationEnabled();
-    }
-
-    public static StringBuilder appendContentDescription(final Context context,
-            final StringBuilder contentDescription, final String val) {
-        if (sContentDescriptionDivider == null) {
-            sContentDescriptionDivider =
-                    context.getResources().getString(R.string.enumeration_comma);
-        }
-        if (contentDescription.length() != 0) {
-            contentDescription.append(sContentDescriptionDivider);
-        }
-        contentDescription.append(val);
-        return contentDescription;
-    }
-
-    public static void announceForAccessibilityCompat(
-            final View view, @Nullable final AccessibilityManager accessibilityManager,
-            final int textResourceId) {
-        final String text = Factory.get().getApplicationContext().getResources().getString(
-                textResourceId);
-        announceForAccessibilityCompat(view, accessibilityManager, text);
-    }
-
-    public static void announceForAccessibilityCompat(
-            final View view, @Nullable AccessibilityManager accessibilityManager,
-            final CharSequence text) {
-        final Context context = view.getContext().getApplicationContext();
-        if (accessibilityManager == null) {
-            accessibilityManager = (AccessibilityManager) context.getSystemService(
-                    Context.ACCESSIBILITY_SERVICE);
-        }
-
-        if (!accessibilityManager.isEnabled()) {
-            return;
-        }
-
-        // Jelly Bean added support for speaking text verbatim
-        final int eventType = OsUtil.isAtLeastJB() ? AccessibilityEvent.TYPE_ANNOUNCEMENT
-                : AccessibilityEvent.TYPE_VIEW_FOCUSED;
-
-        // Construct an accessibility event with the minimum recommended
-        // attributes. An event without a class name or package may be dropped.
-        final AccessibilityEvent event = AccessibilityEvent.obtain(eventType);
-        event.getText().add(text);
-        event.setEnabled(view.isEnabled());
-        event.setClassName(view.getClass().getName());
-        event.setPackageName(context.getPackageName());
-
-        // JellyBean MR1 requires a source view to set the window ID.
-        final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
-        record.setSource(view);
-
-        // Sends the event directly through the accessibility manager. If we only supported SDK 14+
-        // we could have done:
-        // getParent().requestSendAccessibilityEvent(this, event);
-        accessibilityManager.sendAccessibilityEvent(event);
-    }
-
-    /**
-     * Check to see if the current layout is Right-to-Left. This check is only supported for
-     * API 17+.
-     * For earlier versions, this method will just return false.
-     * @return boolean Boolean indicating whether the currently locale is RTL.
-     */
-    public static boolean isLayoutRtl(final View view) {
-        if (OsUtil.isAtLeastJB_MR1()) {
-            return View.LAYOUT_DIRECTION_RTL == view.getLayoutDirection();
-        } else {
-            return false;
-        }
-    }
-
-    public static String getVocalizedPhoneNumber(final Resources res, final String phoneNumber) {
-        if (TextUtils.isEmpty(phoneNumber)) {
-            return "";
-        }
-        final StringBuilder vocalizedPhoneNumber = new StringBuilder();
-        for (final char c : phoneNumber.toCharArray()) {
-            getVocalizedNumber(res, c, vocalizedPhoneNumber);
-        }
-        return vocalizedPhoneNumber.toString();
-    }
-
-    public static void getVocalizedNumber(final Resources res, final char c,
-            final StringBuilder builder) {
-        switch (c) {
-            case '0':
-                builder.append(res.getString(R.string.content_description_for_number_zero));
-                builder.append(" ");
-                return;
-            case '1':
-                builder.append(res.getString(R.string.content_description_for_number_one));
-                builder.append(" ");
-                return;
-            case '2':
-                builder.append(res.getString(R.string.content_description_for_number_two));
-                builder.append(" ");
-                return;
-            case '3':
-                builder.append(res.getString(R.string.content_description_for_number_three));
-                builder.append(" ");
-                return;
-            case '4':
-                builder.append(res.getString(R.string.content_description_for_number_four));
-                builder.append(" ");
-                return;
-            case '5':
-                builder.append(res.getString(R.string.content_description_for_number_five));
-                builder.append(" ");
-                return;
-            case '6':
-                builder.append(res.getString(R.string.content_description_for_number_six));
-                builder.append(" ");
-                return;
-            case '7':
-                builder.append(res.getString(R.string.content_description_for_number_seven));
-                builder.append(" ");
-                return;
-            case '8':
-                builder.append(res.getString(R.string.content_description_for_number_eight));
-                builder.append(" ");
-                return;
-            case '9':
-                builder.append(res.getString(R.string.content_description_for_number_nine));
-                builder.append(" ");
-                return;
-            default:
-                builder.append(c);
-                return;
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/Assert.java b/src/com/android/messaging/util/Assert.java
deleted file mode 100644
index 437965c..0000000
--- a/src/com/android/messaging/util/Assert.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.os.Looper;
-
-import java.util.Arrays;
-
-public final class Assert {
-    public static @interface RunsOnMainThread {}
-    public static @interface DoesNotRunOnMainThread {}
-    public static @interface RunsOnAnyThread {}
-
-    private static final String TEST_THREAD_SUBSTRING = "test";
-
-    private static boolean sIsEngBuild;
-    private static boolean sShouldCrash;
-
-    // Private constructor so no one creates this class.
-    private Assert() {
-    }
-
-    // The proguard rules will strip this method out on user/userdebug builds.
-    // If you change the method signature you MUST edit proguard-release.flags.
-    private static void setIfEngBuild() {
-        sShouldCrash = sIsEngBuild = true;
-    }
-
-    private static void refreshGservices(final BugleGservices gservices) {
-        sShouldCrash = sIsEngBuild;
-        if (!sShouldCrash) {
-            sShouldCrash = gservices.getBoolean(
-                    BugleGservicesKeys.ASSERTS_FATAL,
-                    BugleGservicesKeys.ASSERTS_FATAL_DEFAULT);
-        }
-    }
-
-    // Static initializer block to find out if we're running an eng or
-    // release build.
-    static {
-        setIfEngBuild();
-    }
-
-    // This is called from FactoryImpl once the Gservices class is initialized.
-    public static void initializeGservices (final BugleGservices gservices) {
-        gservices.registerForChanges(new Runnable() {
-            @Override
-            public void run() {
-                refreshGservices(gservices);
-            }
-        });
-        refreshGservices(gservices);
-    }
-
-    /**
-     * Halt execution if this is not an eng build.
-     * <p>Intended for use in code paths that should be run only for tests and never on
-     * a real build.
-     * <p>Note that this will crash on a user build even though asserts don't normally
-     * crash on a user build.
-     */
-    public static void isEngBuild() {
-        isTrueReleaseCheck(sIsEngBuild);
-    }
-
-    /**
-     * Halt execution if this isn't the case.
-     */
-    public static void isTrue(final boolean condition) {
-        if (!condition) {
-            fail("Expected condition to be true", false);
-        }
-    }
-
-    /**
-     * Halt execution if this isn't the case.
-     */
-    public static void isFalse(final boolean condition) {
-        if (condition) {
-            fail("Expected condition to be false", false);
-        }
-    }
-
-    /**
-     * Halt execution even in release builds if this isn't the case.
-     */
-    public static void isTrueReleaseCheck(final boolean condition) {
-        if (!condition) {
-            fail("Expected condition to be true", true);
-        }
-    }
-
-    public static void equals(final int expected, final int actual) {
-        if (expected != actual) {
-            fail("Expected " + expected + " but got " + actual, false);
-        }
-    }
-
-    public static void equals(final long expected, final long actual) {
-        if (expected != actual) {
-            fail("Expected " + expected + " but got " + actual, false);
-        }
-    }
-
-    public static void equals(final Object expected, final Object actual) {
-        if (expected != actual
-                && (expected == null || actual == null || !expected.equals(actual))) {
-            fail("Expected " + expected + " but got " + actual, false);
-        }
-    }
-
-    public static void oneOf(final int actual, final int ...expected) {
-        for (int value : expected) {
-            if (actual == value) {
-                return;
-            }
-        }
-        fail("Expected value to be one of " + Arrays.toString(expected) + " but was " + actual);
-    }
-
-    public static void inRange(
-            final int val, final int rangeMinInclusive, final int rangeMaxInclusive) {
-        if (val < rangeMinInclusive || val > rangeMaxInclusive) {
-            fail("Expected value in range [" + rangeMinInclusive + ", " +
-                    rangeMaxInclusive + "], but was " + val, false);
-        }
-    }
-
-    public static void inRange(
-            final long val, final long rangeMinInclusive, final long rangeMaxInclusive) {
-        if (val < rangeMinInclusive || val > rangeMaxInclusive) {
-            fail("Expected value in range [" + rangeMinInclusive + ", " +
-                    rangeMaxInclusive + "], but was " + val, false);
-        }
-    }
-
-    public static void isMainThread() {
-        if (Looper.myLooper() != Looper.getMainLooper()
-                && !Thread.currentThread().getName().contains(TEST_THREAD_SUBSTRING)) {
-            fail("Expected to run on main thread", false);
-        }
-    }
-
-    public static void isNotMainThread() {
-        if (Looper.myLooper() == Looper.getMainLooper()
-                && !Thread.currentThread().getName().contains(TEST_THREAD_SUBSTRING)) {
-            fail("Not expected to run on main thread", false);
-        }
-    }
-
-    /**
-     * Halt execution if the value passed in is not null
-     * @param obj The object to check
-     */
-    public static void isNull(final Object obj) {
-        if (obj != null) {
-            fail("Expected object to be null", false);
-        }
-    }
-
-    /**
-     * Halt execution if the value passed in is not null
-     * @param obj The object to check
-     * @param failureMessage message to print when halting execution
-     */
-    public static void isNull(final Object obj, final String failureMessage) {
-        if (obj != null) {
-            fail(failureMessage, false);
-        }
-    }
-
-    /**
-     * Halt execution if the value passed in is null
-     * @param obj The object to check
-     */
-    public static void notNull(final Object obj) {
-        if (obj == null) {
-            fail("Expected value to be non-null", false);
-        }
-    }
-
-    public static void fail(final String message) {
-        fail("Assert.fail() called: " + message, false);
-    }
-
-    private static void fail(final String message, final boolean crashRelease) {
-        LogUtil.e(LogUtil.BUGLE_TAG, message);
-        if (crashRelease || sShouldCrash) {
-            throw new AssertionError(message);
-        } else {
-            // Find the method whose assertion failed. We're using a depth of 2, because all public
-            // Assert methods delegate to this one (see javadoc on getCaller() for details).
-            StackTraceElement caller = DebugUtils.getCaller(2);
-            if (caller != null) {
-                // This log message can be de-obfuscated by the Proguard retrace tool, just like a
-                // full stack trace from a crash.
-                LogUtil.e(LogUtil.BUGLE_TAG, "\tat " + caller.toString());
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/AvatarUriUtil.java b/src/com/android/messaging/util/AvatarUriUtil.java
deleted file mode 100644
index b6c65e3..0000000
--- a/src/com/android/messaging/util/AvatarUriUtil.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.graphics.Color;
-import android.net.Uri;
-import android.net.Uri.Builder;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.data.ParticipantData;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A helper utility for creating {@link android.net.Uri}s to describe what avatar to fetch or
- * generate and will help verify and extract information from avatar {@link android.net.Uri}s.
- *
- * There are three types of avatar {@link android.net.Uri}.
- *
- * 1) Group Avatars - These are avatars which are used to represent a group conversation. Group
- * avatars uris are basically multiple avatar uri which can be any of the below types but not
- * another group avatar. The group avatars can hold anywhere from two to four avatars uri and can
- * be in any of the following format
- * messaging://avatar/g?p=<avatarUri>&p=<avatarUri2>
- * messaging://avatar/g?p=<avatarUri>&p=<avatarUri2>&p=<avatarUri3>
- * messaging://avatar/g?p=<avatarUri>&p=<avatarUri2>&p=<avatarUri3>&p=<avatarUri4>
- *
- * 2) Local Resource - A local resource avatar is use when there is a profile photo for the
- * participant. This can be any local resource.
- *
- * 3) Letter Tile - A letter tile is used when a participant has a name but no profile photo. A
- * letter tile will contain the first code point of the participant's name and a background color
- * based on the hash of the participant's full name. Letter tiles will be in the following format.
- * messaging://avatar/l?n=<fullName>
- *
- * 4) Default Avatars - These are avatars are used when the participant has no profile photo or
- * name. In these cases we use the default person icon with a color background. The color
- * background is based on a hash of the normalized phone number.
- *
- * 5) Default Background Avatars - This is a special case for Default Avatars where we use the
- * default background color for the default avatar.
- *
- * 6) SIM Selector Avatars - These are avatars used in the SIM selector. This may either be a
- * regular local resource avatar (2) or an avatar with a SIM identifier (i.e. SIM background with
- * a letter or a slot number).
- */
-public class AvatarUriUtil {
-    private static final int MAX_GROUP_PARTICIPANTS = 4;
-
-    public static final String TYPE_GROUP_URI = "g";
-    public static final String TYPE_LOCAL_RESOURCE_URI = "r";
-    public static final String TYPE_LETTER_TILE_URI = "l";
-    public static final String TYPE_DEFAULT_URI = "d";
-    public static final String TYPE_DEFAULT_BACKGROUND_URI = "b";
-    public static final String TYPE_SIM_SELECTOR_URI = "s";
-
-    private static final String SCHEME = "messaging";
-    private static final String AUTHORITY = "avatar";
-    private static final String PARAM_NAME = "n";
-    private static final String PARAM_PRIMARY_URI = "m";
-    private static final String PARAM_FALLBACK_URI = "f";
-    private static final String PARAM_PARTICIPANT = "p";
-    private static final String PARAM_IDENTIFIER = "i";
-    private static final String PARAM_SIM_COLOR = "c";
-    private static final String PARAM_SIM_SELECTED = "s";
-    private static final String PARAM_SIM_INCOMING = "g";
-
-    public static final Uri DEFAULT_BACKGROUND_AVATAR = new Uri.Builder().scheme(SCHEME)
-            .authority(AUTHORITY).appendPath(TYPE_DEFAULT_BACKGROUND_URI).build();
-
-    private static final Uri BLANK_SIM_INDICATOR_INCOMING_URI = createSimIconUri("",
-            false /* selected */, Color.TRANSPARENT, true /* incoming */);
-    private static final Uri BLANK_SIM_INDICATOR_OUTGOING_URI = createSimIconUri("",
-            false /* selected */, Color.TRANSPARENT, false /* incoming */);
-
-    /**
-     * Creates an avatar uri based on a list of ParticipantData. The list of participants may not
-     * be null or empty. Depending on the size of the list either a group avatar uri will be create
-     * or an individual's avatar will be created. This will never return a null uri.
-     */
-    public static Uri createAvatarUri(@NonNull final List<ParticipantData> participants) {
-        Assert.notNull(participants);
-        Assert.isTrue(!participants.isEmpty());
-
-        if (participants.size() == 1) {
-            return createAvatarUri(participants.get(0));
-        }
-
-        final int numParticipants = Math.min(participants.size(), MAX_GROUP_PARTICIPANTS);
-        final ArrayList<Uri> avatarUris = new ArrayList<Uri>(numParticipants);
-        for (int i = 0; i < numParticipants; i++) {
-            avatarUris.add(createAvatarUri(participants.get(i)));
-        }
-        return AvatarUriUtil.joinAvatarUriToGroup(avatarUris);
-    }
-
-    /**
-     * Joins together a list of valid avatar uri into a group uri.The list of participants may not
-     * be null or empty. If a lit of one is given then the first element will be return back
-     * instead of a group avatar uri. All uris in the list must be a valid avatar uri. This will
-     * never return a null uri.
-     */
-    public static Uri joinAvatarUriToGroup(@NonNull final List<Uri> avatarUris) {
-        Assert.notNull(avatarUris);
-        Assert.isTrue(!avatarUris.isEmpty());
-
-        if (avatarUris.size() == 1) {
-            final Uri firstAvatar = avatarUris.get(0);
-            Assert.isTrue(AvatarUriUtil.isAvatarUri(firstAvatar));
-            return firstAvatar;
-        }
-
-        final Builder builder = new Builder();
-        builder.scheme(SCHEME);
-        builder.authority(AUTHORITY);
-        builder.appendPath(TYPE_GROUP_URI);
-        final int numParticipants = Math.min(avatarUris.size(), MAX_GROUP_PARTICIPANTS);
-        for (int i = 0; i < numParticipants; i++) {
-            final Uri uri = avatarUris.get(i);
-            Assert.notNull(uri);
-            Assert.isTrue(UriUtil.isLocalResourceUri(uri) || AvatarUriUtil.isAvatarUri(uri));
-            builder.appendQueryParameter(PARAM_PARTICIPANT, uri.toString());
-        }
-        return builder.build();
-    }
-
-    /**
-     * Creates an avatar uri based on ParticipantData which may not be null and expected to have
-     * profilePhotoUri, fullName and normalizedDestination populated. This will never return a null
-     * uri.
-     */
-    public static Uri createAvatarUri(@NonNull final ParticipantData participant) {
-        Assert.notNull(participant);
-        final String photoUriString = participant.getProfilePhotoUri();
-        final Uri profilePhotoUri = (photoUriString == null) ? null : Uri.parse(photoUriString);
-        final String name = participant.getFullName();
-        final String destination = participant.getNormalizedDestination();
-        final String contactLookupKey = participant.getLookupKey();
-        return createAvatarUri(profilePhotoUri, name, destination, contactLookupKey);
-    }
-
-    /**
-     * Creates an avatar uri based on a the input data.
-     */
-    public static Uri createAvatarUri(final Uri profilePhotoUri, final CharSequence name,
-            final String defaultIdentifier, final String contactLookupKey) {
-        Uri generatedUri;
-        if (!TextUtils.isEmpty(name) && isValidFirstCharacter(name)) {
-            generatedUri = AvatarUriUtil.fromName(name, contactLookupKey);
-        } else {
-            final String identifier = TextUtils.isEmpty(contactLookupKey)
-                    ? defaultIdentifier : contactLookupKey;
-            generatedUri = AvatarUriUtil.fromIdentifier(identifier);
-        }
-
-        if (profilePhotoUri != null) {
-            if (UriUtil.isLocalResourceUri(profilePhotoUri)) {
-                return fromLocalResourceWithFallback(profilePhotoUri, generatedUri);
-            } else {
-                return profilePhotoUri;
-            }
-        } else {
-            return generatedUri;
-        }
-    }
-
-    public static boolean isValidFirstCharacter(final CharSequence name) {
-        final char c = name.charAt(0);
-        return c != '+';
-    }
-
-    /**
-     * Creates an avatar URI used for the SIM selector.
-     * @param participantData the self participant data for an <i>active</i> SIM
-     * @param slotIdentifier when null, this will simply use a regular avatar; otherwise, the
-     *        first letter of slotIdentifier will be used for the icon.
-     * @param selected is this the currently selected SIM?
-     * @param incoming is this for an incoming message or outgoing message?
-     */
-    public static Uri createAvatarUri(@NonNull final ParticipantData participantData,
-            @Nullable final String slotIdentifier, final boolean selected, final boolean incoming) {
-        Assert.notNull(participantData);
-        Assert.isTrue(participantData.isActiveSubscription());
-        Assert.isTrue(!TextUtils.isEmpty(slotIdentifier) ||
-                !TextUtils.isEmpty(participantData.getProfilePhotoUri()));
-        if (TextUtils.isEmpty(slotIdentifier)) {
-            return createAvatarUri(participantData);
-        }
-
-        return createSimIconUri(slotIdentifier, selected, participantData.getSubscriptionColor(),
-                incoming);
-    }
-
-    private static Uri createSimIconUri(final String slotIdentifier, final boolean selected,
-            final int subColor, final boolean incoming) {
-        final Builder builder = new Builder();
-        builder.scheme(SCHEME);
-        builder.authority(AUTHORITY);
-        builder.appendPath(TYPE_SIM_SELECTOR_URI);
-        builder.appendQueryParameter(PARAM_IDENTIFIER, slotIdentifier);
-        builder.appendQueryParameter(PARAM_SIM_COLOR, String.valueOf(subColor));
-        builder.appendQueryParameter(PARAM_SIM_SELECTED, String.valueOf(selected));
-        builder.appendQueryParameter(PARAM_SIM_INCOMING, String.valueOf(incoming));
-        return builder.build();
-    }
-
-    public static Uri getBlankSimIndicatorUri(final boolean incoming) {
-        return incoming ? BLANK_SIM_INDICATOR_INCOMING_URI : BLANK_SIM_INDICATOR_OUTGOING_URI;
-    }
-
-    /**
-     * Creates an avatar uri from the given local resource Uri, followed by a fallback Uri in case
-     * the local resource one could not be loaded.
-     */
-    private static Uri fromLocalResourceWithFallback(@NonNull final Uri profilePhotoUri,
-            @NonNull Uri fallbackUri) {
-        Assert.notNull(profilePhotoUri);
-        Assert.notNull(fallbackUri);
-        final Builder builder = new Builder();
-        builder.scheme(SCHEME);
-        builder.authority(AUTHORITY);
-        builder.appendPath(TYPE_LOCAL_RESOURCE_URI);
-        builder.appendQueryParameter(PARAM_PRIMARY_URI, profilePhotoUri.toString());
-        builder.appendQueryParameter(PARAM_FALLBACK_URI, fallbackUri.toString());
-        return builder.build();
-    }
-
-    private static Uri fromName(@NonNull final CharSequence name, final String contactLookupKey) {
-        Assert.notNull(name);
-        final Builder builder = new Builder();
-        builder.scheme(SCHEME);
-        builder.authority(AUTHORITY);
-        builder.appendPath(TYPE_LETTER_TILE_URI);
-        final String nameString = String.valueOf(name);
-        builder.appendQueryParameter(PARAM_NAME, nameString);
-        final String identifier =
-                TextUtils.isEmpty(contactLookupKey) ? nameString : contactLookupKey;
-        builder.appendQueryParameter(PARAM_IDENTIFIER, identifier);
-        return builder.build();
-    }
-
-    private static Uri fromIdentifier(@NonNull final String identifier) {
-        final Builder builder = new Builder();
-        builder.scheme(SCHEME);
-        builder.authority(AUTHORITY);
-        builder.appendPath(TYPE_DEFAULT_URI);
-        builder.appendQueryParameter(PARAM_IDENTIFIER, identifier);
-        return builder.build();
-    }
-
-    public static boolean isAvatarUri(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        return uri != null && TextUtils.equals(SCHEME, uri.getScheme()) &&
-                TextUtils.equals(AUTHORITY, uri.getAuthority());
-    }
-
-    public static String getAvatarType(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        final List<String> path = uri.getPathSegments();
-        return path.isEmpty() ? null : path.get(0);
-    }
-
-    public static String getIdentifier(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        return uri.getQueryParameter(PARAM_IDENTIFIER);
-    }
-
-    public static String getName(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        return uri.getQueryParameter(PARAM_NAME);
-    }
-
-    public static List<String> getGroupParticipantUris(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        return uri.getQueryParameters(PARAM_PARTICIPANT);
-    }
-
-    public static int getSimColor(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        return Integer.valueOf(uri.getQueryParameter(PARAM_SIM_COLOR));
-    }
-
-    public static boolean getSimSelected(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        return Boolean.valueOf(uri.getQueryParameter(PARAM_SIM_SELECTED));
-    }
-
-    public static boolean getSimIncoming(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        return Boolean.valueOf(uri.getQueryParameter(PARAM_SIM_INCOMING));
-    }
-
-    public static Uri getPrimaryUri(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        final String primaryUriString = uri.getQueryParameter(PARAM_PRIMARY_URI);
-        return primaryUriString == null ? null : Uri.parse(primaryUriString);
-    }
-
-    public static Uri getFallbackUri(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        final String fallbackUriString = uri.getQueryParameter(PARAM_FALLBACK_URI);
-        return fallbackUriString == null ? null : Uri.parse(fallbackUriString);
-    }
-}
diff --git a/src/com/android/messaging/util/BugleActivityUtil.java b/src/com/android/messaging/util/BugleActivityUtil.java
deleted file mode 100644
index 7f722fd..0000000
--- a/src/com/android/messaging/util/BugleActivityUtil.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.os.UserManager;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.ui.conversation.ConversationActivity;
-import com.android.messaging.ui.conversationlist.ConversationListActivity;
-
-/**
- * Utility class including logic to verify requirements to run Bugle and other activity startup
- * logic. Called from base Bugle activity classes.
- */
-public class BugleActivityUtil {
-
-    private static final int REQUEST_GOOGLE_PLAY_SERVICES = 0;
-
-    /**
-     * Determine if the requirements for the app to run are met. Log any Activity startup
-     * analytics.
-     * @param context
-     * @param activity is used to launch an error Dialog if necessary
-     * @return true if resume should continue normally. Returns false if some requirements to run
-     * are not met.
-     */
-    public static boolean onActivityResume(Context context, Activity activity) {
-        DataModel.get().onActivityResume();
-        Factory.get().onActivityResume();
-
-        // Validate all requirements to run are met
-        return checkHasSmsPermissionsForUser(context, activity);
-    }
-
-    /**
-     * Determine if the user doesn't have SMS permissions. This can happen if you are not the phone
-     * owner and the owner has disabled your SMS permissions.
-     * @param context is the Context used to resolve the user permissions
-     * @param activity is the Activity used to launch an error Dialog if necessary
-     * @return true if the user has SMS permissions, otherwise false.
-     */
-    private static boolean checkHasSmsPermissionsForUser(Context context, Activity activity) {
-        if (!OsUtil.isAtLeastL()) {
-            // UserManager.DISALLOW_SMS added in L. No multiuser phones before this
-            return true;
-        }
-        UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
-        if (userManager.hasUserRestriction(UserManager.DISALLOW_SMS)) {
-            new AlertDialog.Builder(activity)
-                    .setMessage(R.string.requires_sms_permissions_message)
-                    .setCancelable(false)
-                    .setNegativeButton(R.string.requires_sms_permissions_close_button,
-                            new DialogInterface.OnClickListener() {
-                                @Override
-                                public void onClick(final DialogInterface dialog,
-                                        final int button) {
-                                    System.exit(0);
-                                }
-                            })
-                    .show();
-            return false;
-        }
-        return true;
-    }
-}
-
diff --git a/src/com/android/messaging/util/BugleApplicationPrefs.java b/src/com/android/messaging/util/BugleApplicationPrefs.java
deleted file mode 100644
index e9fceb4..0000000
--- a/src/com/android/messaging/util/BugleApplicationPrefs.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-
-/**
- * Provides interface to access application-wide shared preferences. This includes both the user
- * visible preferences (e.g. the general settings in the settings page), and internal preferences
- * under {@link BuglePrefsKeys}.
- */
-public class BugleApplicationPrefs extends BuglePrefsImpl {
-    public BugleApplicationPrefs(Context context) {
-        super(context);
-    }
-
-    @Override
-    public String getSharedPreferencesName() {
-        return SHARED_PREFERENCES_NAME;
-    }
-
-    @Override
-    protected void validateKey(String key) {
-        super.validateKey(key);
-        // Callers shouldn't try to access per-subscription preferences from this class
-        Assert.isFalse(key.startsWith(SHARED_PREFERENCES_PER_SUBSCRIPTION_PREFIX));
-    }
-
-    @Override
-    public void onUpgrade(int oldVersion, int newVersion) {
-    }
-}
diff --git a/src/com/android/messaging/util/BugleGservices.java b/src/com/android/messaging/util/BugleGservices.java
deleted file mode 100644
index 2e095de..0000000
--- a/src/com/android/messaging/util/BugleGservices.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import com.android.messaging.Factory;
-
-/**
- * A thin wrapper for getting GServices value. During constructor time a one time background thread
- * will cache all GServices key with the prefix of "bugle_". All get calls will wait for Gservices
- * to finish caching the first time. In practice, the background thread will finish before any get
- * request.
- */
-public abstract class BugleGservices {
-    static final String BUGLE_GSERVICES_PREFIX = "bugle_";
-
-    public static BugleGservices get() {
-        return Factory.get().getBugleGservices();
-    }
-
-    public abstract void registerForChanges(final Runnable r);
-
-    /**
-     * @param key The key to look up in GServices
-     * @param defaultValue The default value if value in GServices is null or if
-     * NumberFormatException is caught.
-     * @return The corresponding value, or the default value.
-     */
-    public abstract long getLong(final String key, final long defaultValue);
-
-    /**
-     * @param key The key to look up in GServices
-     * @param defaultValue The default value if value in GServices is null or if
-     * NumberFormatException is caught.
-     * @return The corresponding value, or the default value.
-     */
-    public abstract int getInt(final String key, final int defaultValue);
-
-    /**
-     * @param key The key to look up in GServices
-     * @param defaultValue The default value if value in GServices is null.
-     * @return The corresponding value, or the default value.
-     */
-    public abstract boolean getBoolean(final String key, final boolean defaultValue);
-
-    /**
-     * @param key The key to look up in GServices
-     * @param defaultValue The default value if value in GServices is null.
-     * @return The corresponding value, or the default value.
-     */
-    public abstract String getString(final String key, final String defaultValue);
-
-    /**
-     * @param key The key to look up in GServices
-     * @param defaultValue The default value if value in GServices is null.
-     * @return The corresponding value, or the default value.
-     */
-    public abstract float getFloat(final String key, final float defaultValue);
-}
diff --git a/src/com/android/messaging/util/BugleGservicesImpl.java b/src/com/android/messaging/util/BugleGservicesImpl.java
deleted file mode 100644
index 5ef0898..0000000
--- a/src/com/android/messaging/util/BugleGservicesImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-
-/**
- * A thin wrapper for getting GServices value.
- */
-public class BugleGservicesImpl extends BugleGservices {
-    public BugleGservicesImpl(final Context context) {
-    }
-
-    @Override
-    public void registerForChanges(final Runnable r) {
-    }
-
-    /**
-     * Asserts that the key has the expected prefix.
-     */
-    private void assertKeyAndWaitForGservices(final String key) {
-        Assert.isTrue(key.startsWith(BUGLE_GSERVICES_PREFIX));
-    }
-
-    @Override
-    public long getLong(final String key, final long defaultValue) {
-        assertKeyAndWaitForGservices(key);
-        return defaultValue;
-    }
-
-    @Override
-    public int getInt(final String key, final int defaultValue) {
-        assertKeyAndWaitForGservices(key);
-        return defaultValue;
-    }
-
-    @Override
-    public boolean getBoolean(final String key, final boolean defaultValue) {
-        assertKeyAndWaitForGservices(key);
-        return defaultValue;
-    }
-
-    @Override
-    public String getString(final String key, final String defaultValue) {
-        assertKeyAndWaitForGservices(key);
-        return defaultValue;
-    }
-
-    @Override
-    public float getFloat(final String key, final float defaultValue) {
-        assertKeyAndWaitForGservices(key);
-        return defaultValue;
-    }
-}
diff --git a/src/com/android/messaging/util/BugleGservicesKeys.java b/src/com/android/messaging/util/BugleGservicesKeys.java
deleted file mode 100644
index f36dd7f..0000000
--- a/src/com/android/messaging/util/BugleGservicesKeys.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-
-/**
- * List of gservices keys and default values which are in use.
- */
-public final class BugleGservicesKeys {
-    private BugleGservicesKeys() {}   // do not instantiate
-
-    /**
-     * Whether to enable extra debugging features on the client. Default is
-     * {@value #ENABLE_DEBUGGING_FEATURES_DEFAULT}.
-     */
-    public static final String ENABLE_DEBUGGING_FEATURES
-            = "bugle_debugging";
-    public static final boolean ENABLE_DEBUGGING_FEATURES_DEFAULT
-            = false;
-
-    /**
-     * Whether to enable saving extra logs. Default is {@value #ENABLE_LOG_SAVER_DEFAULT}.
-     */
-    public static final String ENABLE_LOG_SAVER = "bugle_logsaver";
-    public static final boolean ENABLE_LOG_SAVER_DEFAULT = false;
-
-    /**
-     * Time in milliseconds of initial (attempt 1) resend backoff for failing messages
-     */
-    public static final String INITIAL_MESSAGE_RESEND_DELAY_MS = "bugle_resend_delay_in_millis";
-    public static final long INITIAL_MESSAGE_RESEND_DELAY_MS_DEFAULT = 5 * 1000L;
-
-    /**
-     * Time in milliseconds of max resend backoff for failing messages
-     */
-    public static final String MAX_MESSAGE_RESEND_DELAY_MS = "bugle_max_resend_delay_in_millis";
-    public static final long MAX_MESSAGE_RESEND_DELAY_MS_DEFAULT = 2 * 60 * 60 * 1000L;
-
-    /**
-     * Time in milliseconds of resend window for unsent messages
-     */
-    public static final String MESSAGE_RESEND_TIMEOUT_MS = "bugle_resend_timeout_in_millis";
-    public static final long MESSAGE_RESEND_TIMEOUT_MS_DEFAULT = 20 * 60 * 1000L;
-
-    /**
-     * Time in milliseconds of download window for new mms notifications
-     */
-    public static final String MESSAGE_DOWNLOAD_TIMEOUT_MS = "bugle_download_timeout_in_millis";
-    public static final long MESSAGE_DOWNLOAD_TIMEOUT_MS_DEFAULT = 20 * 60 * 1000L;
-
-    /**
-     * Time in milliseconds for SMS send timeout
-     */
-    public static final String SMS_SEND_TIMEOUT_IN_MILLIS = "bugle_sms_send_timeout";
-    public static final long SMS_SEND_TIMEOUT_IN_MILLIS_DEFAULT = 5 * 60 * 1000L;
-
-    /**
-     * Keys to control the SMS sync batch size. The batch size is defined by the number
-     * of messages that incur local database change, e.g. importing messages and
-     * deleting messages.
-     *
-     * 1. The minimum size for a batch and
-     * 2. The maximum size for a batch.
-     * The first batch uses the minimum size for probing. Set this to a small number for the
-     * first sync batch to make sure the user sees SMS showing up in conversations quickly
-     * Use these two settings to limit the number of messages to sync in each batch.
-     * The minimum is to make sure we always make progress during sync. The maximum is
-     * to limit the sync batch size within a reasonable range (needs to fit in an intent).
-     * 3. The time limit controls the limit of time duration of a sync batch. We can
-     * not control this directly due to the batching nature of sync. So this provides
-     * heuristics. We may sometime exceeds the limit if our calculation is off due to
-     * whatever reasons. Keeping this low ensures responsiveness of the application.
-     * 4. The limit on number of total messages to scan in one batch.
-     */
-    public static final String SMS_SYNC_BATCH_SIZE_MIN =
-            "bugle_sms_sync_batch_size_min";
-    public static final int SMS_SYNC_BATCH_SIZE_MIN_DEFAULT = 80;
-    public static final String SMS_SYNC_BATCH_SIZE_MAX =
-            "bugle_sms_sync_batch_size_max";
-    public static final int SMS_SYNC_BATCH_SIZE_MAX_DEFAULT = 1000;
-    public static final String SMS_SYNC_BATCH_TIME_LIMIT_MILLIS =
-            "bugle_sms_sync_batch_time_limit";
-    public static final long SMS_SYNC_BATCH_TIME_LIMIT_MILLIS_DEFAULT = 400;
-    public static final String SMS_SYNC_BATCH_MAX_MESSAGES_TO_SCAN =
-            "bugle_sms_sync_batch_max_messages_to_scan";
-    public static final int SMS_SYNC_BATCH_MAX_MESSAGES_TO_SCAN_DEFAULT =
-            SMS_SYNC_BATCH_SIZE_MAX_DEFAULT * 4;
-
-    /**
-     * Time in ms for sync to backoff from "now" to the latest message that will be sync'd.
-     *
-     * This controls the best case for how out of date the application will appear to be
-     * when bringing in changes made outside the application. It also represents a buffer
-     * to ensure that sync doesn't trigger based on changes made within the application.
-     */
-    public static final String SMS_SYNC_BACKOFF_TIME_MILLIS =
-            "bugle_sms_sync_backoff_time";
-    public static final long SMS_SYNC_BACKOFF_TIME_MILLIS_DEFAULT = 5000L;
-
-    /**
-     * Just in case if we fall into a loop of full sync -> still not synchronized -> full sync ...
-     * This forces a backoff time so that we at most do full sync once a while (an hour by default)
-     */
-    public static final String SMS_FULL_SYNC_BACKOFF_TIME_MILLIS =
-            "bugle_sms_full_sync_backoff_time";
-    public static final long SMS_FULL_SYNC_BACKOFF_TIME_MILLIS_DEFAULT = 60 * 60 * 1000;
-
-    /**
-     * Time duration to retain the most recent SMS messages for SMS storage purging
-     *
-     * Format:
-     *   <number>(w|m|y)
-     * Examples:
-     *   "1y" -- a year
-     *   "2w" -- two weeks
-     *   "6m" -- six months
-     */
-    public static final String SMS_STORAGE_PURGING_MESSAGE_RETAINING_DURATION =
-            "bugle_sms_storage_purging_message_retaining_duration";
-    public static final String SMS_STORAGE_PURGING_MESSAGE_RETAINING_DURATION_DEFAULT = "1m";
-
-    /**
-     * MMS UA profile url.
-     *
-     * This is used on all Android devices running Hangout, so cannot just host the profile of the
-     * latest and greatest phones. However, if we're on KitKat or below we can't get the phone's
-     * UA profile and thus we need to send them the default url.
-     */
-    public static final String MMS_UA_PROFILE_URL =
-            "bugle_mms_uaprofurl";
-    public static final String MMS_UA_PROFILE_URL_DEFAULT =
-            "http://www.gstatic.com/android/sms/mms_ua_profile.xml";
-
-    /**
-     * MMS apn mmsc
-     */
-    public static final String MMS_MMSC =
-            "bugle_mms_mmsc";
-
-    /**
-     * MMS apn proxy ip address
-     */
-    public static final String MMS_PROXY_ADDRESS =
-            "bugle_mms_proxy_address";
-
-    /**
-     * MMS apn proxy port
-     */
-    public static final String MMS_PROXY_PORT =
-            "bugle_mms_proxy_port";
-
-    /**
-     * List of known SMS system messages that we will ignore (no deliver, no abort) so that the
-     * user doesn't see them and the appropriate app is able to handle them. We are delivering
-     * these as a \n delimited list of patterns, however we should eventually move to storing
-     * them with the per-carrier mms config xml file.
-     */
-    public static final String SMS_IGNORE_MESSAGE_REGEX =
-            "bugle_sms_ignore_message_regex";
-    public static final String SMS_IGNORE_MESSAGE_REGEX_DEFAULT = "";
-
-    /**
-     * When receiving or importing an mms, limit the length of text to this limit. Huge blocks
-     * of text can cause the app to hang/ANR/or crash in native text code..
-     */
-    public static final String MMS_TEXT_LIMIT = "bugle_mms_text_limit";
-    public static final int MMS_TEXT_LIMIT_DEFAULT = 2000;
-
-    /**
-     * Max number of attachments the user may add to a single message.
-     */
-    public static final String MMS_ATTACHMENT_LIMIT = "bugle_mms_attachment_limit";
-    public static final int MMS_ATTACHMENT_LIMIT_DEFAULT = 10;
-
-    /**
-     * The max number of messages to show in a single conversation notification. We always show
-     * the most recent message. If this value is >1, we may also include prior messages as well.
-     */
-    public static final String MAX_MESSAGES_IN_CONVERSATION_NOTIFICATION =
-            "bugle_max_messages_in_conversation_notification";
-    public static final int MAX_MESSAGES_IN_CONVERSATION_NOTIFICATION_DEFAULT = 7;
-
-    /**
-     * Time (in seconds) between notification ringing for incoming messages of the same
-     * conversation. We won't ding more often than this value for messages coming in at a high rate.
-     */
-    public static final String NOTIFICATION_TIME_BETWEEN_RINGS_SECONDS
-            = "bugle_notification_time_between_rings_seconds";
-    public static final int NOTIFICATION_TIME_BETWEEN_RINGS_SECONDS_DEFAULT = 10;
-
-    /**
-     * The max number of messages to show in a single conversation notification, when a wearable
-     * device (i.e. smartwatch) is paired with the phone. Watches have a different UX model and
-     * less screen real estate, so we may want to optimize for that case. Note that if a wearable
-     * is paired, this value will apply to notifications as shown both on the watch and the phone.
-     */
-    public static final String MAX_MESSAGES_IN_CONVERSATION_NOTIFICATION_WITH_WEARABLE =
-            "bugle_max_messages_in_conversation_notification_with_wearable";
-    public static final int MAX_MESSAGES_IN_CONVERSATION_NOTIFICATION_WITH_WEARABLE_DEFAULT = 1;
-
-    /**
-     * Regular expression to match against query.  If it matches then display
-     * the query plan for this query.
-     */
-    public static final String EXPLAIN_QUERY_PLAN_REGEXP = "bugle_query_plan_regexp";
-
-    /**
-     * Whether asserts are fatal on user/userdebug builds.
-     * Default is {@value #ASSERTS_FATAL_DEFAULT}.
-     */
-    public static final String ASSERTS_FATAL = "bugle_asserts_fatal";
-    public static final boolean ASSERTS_FATAL_DEFAULT = false;
-
-    /**
-     * Whether to use API for sending/downloading MMS (if present, true for L).
-     * Default is {@value #USE_MMS_API_IF_PRESENT_DEFAULT}.
-     */
-    public static final String USE_MMS_API_IF_PRESENT = "bugle_use_mms_api";
-    public static final boolean USE_MMS_API_IF_PRESENT_DEFAULT = true;
-
-    /**
-     * Whether to always auto-complete email addresses for sending MMS. By default, Bugle starts
-     * to auto-complete after the user has typed the "@" character.
-     * Default is (@value ALWAYS_AUTOCOMPLETE_EMAIL_ADDRESS_DEFAULT}.
-     */
-    public static final String ALWAYS_AUTOCOMPLETE_EMAIL_ADDRESS =
-            "bugle_always_autocomplete_email_address";
-    public static final boolean ALWAYS_AUTOCOMPLETE_EMAIL_ADDRESS_DEFAULT = false;
-
-    // We typically request an aspect ratio close the the screen size, but some cameras can be
-    // flaky and not work well in certain aspect ratios.  This allows us to guide the CameraManager
-    // to pick a more reliable aspect ratio.  The value is a float like 1.333f or 1.777f.  There is
-    // no hard coded default because the default is the screen aspect ratio.
-    public static final String CAMERA_ASPECT_RATIO = "bugle_camera_aspect_ratio";
-
-    /**
-     * The recent time range within which we should check MMS WAP Push duplication
-     * If the value is 0, it signals that we should use old dedup algorithm for wap push
-     */
-    public static final String MMS_WAP_PUSH_DEDUP_TIME_LIMIT_SECS =
-            "bugle_mms_wap_push_dedup_time_limit_secs";
-    public static final long MMS_WAP_PUSH_DEDUP_TIME_LIMIT_SECS_DEFAULT = 7 * 24 * 3600; // 7 days
-
-    /**
-     * Whether to use persistent, on-disk LogSaver
-     */
-    public static final String PERSISTENT_LOGSAVER = "bugle_persistent_logsaver";
-    public static final boolean PERSISTENT_LOGSAVER_DEFAULT = false;
-
-    /**
-     * For in-memory LogSaver, what's the size of memory buffer in number of records
-     */
-    public static final String IN_MEMORY_LOGSAVER_RECORD_COUNT =
-            "bugle_in_memory_logsaver_record_count";
-    public static final int IN_MEMORY_LOGSAVER_RECORD_COUNT_DEFAULT = 500;
-
-    /**
-     * For on-disk LogSaver, what's the size of file rotation set
-     */
-    public static final String PERSISTENT_LOGSAVER_ROTATION_SET_SIZE =
-            "bugle_persistent_logsaver_rotation_set_size";
-    public static final int PERSISTENT_LOGSAVER_ROTATION_SET_SIZE_DEFAULT = 8;
-
-    /**
-     * For on-disk LogSaver, what's the byte limit of a single log file
-     */
-    public static final String PERSISTENT_LOGSAVER_FILE_LIMIT_BYTES =
-            "bugle_persistent_logsaver_file_limit";
-    public static final int PERSISTENT_LOGSAVER_FILE_LIMIT_BYTES_DEFAULT = 256 * 1024; // 256KB
-
-    /**
-     * We concatenate all text parts in an MMS to form the message text. This specifies
-     * the separator between the combinated text parts. Default is ' ' (space).
-     */
-    public static final String MMS_TEXT_CONCAT_SEPARATOR = "bugle_mms_text_concat_separator";
-    public static final String MMS_TEXT_CONCAT_SEPARATOR_DEFAULT = " ";
-
-    /**
-     * Whether to enable transcoding GIFs. We sometimes need to compress GIFs to make them small
-     * enough to send via MMS (which often limits messages to 1 MB in size).
-     */
-    public static final String ENABLE_GIF_TRANSCODING = "bugle_gif_transcoding";
-    public static final boolean ENABLE_GIF_TRANSCODING_DEFAULT = true;
-}
diff --git a/src/com/android/messaging/util/BuglePrefs.java b/src/com/android/messaging/util/BuglePrefs.java
deleted file mode 100644
index 74a0d46..0000000
--- a/src/com/android/messaging/util/BuglePrefs.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import com.android.messaging.Factory;
-
-/**
- * Thin wrapper to get/set shared prefs values.
- */
-public abstract class BuglePrefs {
-    /**
-     * Shared preferences name for preferences applicable to the entire app.
-     */
-    public static final String SHARED_PREFERENCES_NAME = "bugle";
-
-    /**
-     * Shared preferences name for subscription-specific preferences.
-     * Note: for all subscription-specific preferences, please prefix the shared preference keys
-     * with "buglesub_", so that Bugle may perform runtime validations on preferences to make sure
-     * you don't accidentally write per-subscription settings into the general pref file, and vice
-     * versa.
-     */
-    public static final String SHARED_PREFERENCES_PER_SUBSCRIPTION_PREFIX = "buglesub_";
-
-    /**
-     * A placeholder base version for Bugle builds where no shared pref version was defined.
-     */
-    public static final int NO_SHARED_PREFERENCES_VERSION = -1;
-
-    /**
-     * Returns the shared preferences file name to use.
-     * Subclasses should override and return the shared preferences file.
-     */
-    public abstract String getSharedPreferencesName();
-
-
-    /**
-     * Handles pref version upgrade.
-     */
-    public abstract void onUpgrade(final int oldVersion, final int newVersion);
-
-    /**
-     * Gets the SharedPreferences accessor to the application-wide preferences.
-     */
-    public static BuglePrefs getApplicationPrefs() {
-        return Factory.get().getApplicationPrefs();
-    }
-
-    /**
-     * Gets the SharedPreferences accessor to the subscription-specific preferences.
-     */
-    public static BuglePrefs getSubscriptionPrefs(final int subId) {
-        return Factory.get().getSubscriptionPrefs(subId);
-    }
-
-    /**
-     * @param key The key to look up in shared prefs
-     * @param defaultValue The default value if value in shared prefs is null or if
-     * NumberFormatException is caught.
-     * @return The corresponding value, or the default value.
-     */
-    public abstract int getInt(final String key, final int defaultValue);
-
-    /**
-     * @param key The key to look up in shared prefs
-     * @param defaultValue The default value if value in shared prefs is null or if
-     * NumberFormatException is caught.
-     * @return The corresponding value, or the default value.
-     */
-    public abstract long getLong(final String key, final long defaultValue);
-
-    /**
-     * @param key The key to look up in shared prefs
-     * @param defaultValue The default value if value in shared prefs is null.
-     * @return The corresponding value, or the default value.
-     */
-    public abstract boolean getBoolean(final String key, final boolean defaultValue);
-
-    /**
-     * @param key The key to look up in shared prefs
-     * @param defaultValue The default value if value in shared prefs is null.
-     * @return The corresponding value, or the default value.
-     */
-    public abstract String getString(final String key, final String defaultValue);
-
-    /**
-     * @param key The key to look up in shared prefs
-     * @return The corresponding value, or null if not found.
-     */
-    public abstract byte[] getBytes(final String key);
-
-    /**
-     * @param key The key to set in shared prefs
-     * @param value The value to assign to the key
-     */
-    public abstract void putInt(final String key, final int value);
-
-    /**
-     * @param key The key to set in shared prefs
-     * @param value The value to assign to the key
-     */
-    public abstract void putLong(final String key, final long value);
-
-    /**
-     * @param key The key to set in shared prefs
-     * @param value The value to assign to the key
-     */
-    public abstract void putBoolean(final String key, final boolean value);
-
-    /**
-     * @param key The key to set in shared prefs
-     * @param value The value to assign to the key
-     */
-    public abstract void putString(final String key, final String value);
-
-    /**
-     * @param key The key to set in shared prefs
-     * @param value The value to assign to the key
-     */
-    public abstract void putBytes(final String key, final byte[] value);
-
-    /**
-     * @param key The key to remove from shared prefs
-     */
-    public abstract void remove(String key);
-}
diff --git a/src/com/android/messaging/util/BuglePrefsImpl.java b/src/com/android/messaging/util/BuglePrefsImpl.java
deleted file mode 100644
index 7563040..0000000
--- a/src/com/android/messaging/util/BuglePrefsImpl.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.util.Base64;
-
-/**
- * Thin wrapper to get/set shared prefs values.
- */
-public abstract class BuglePrefsImpl extends BuglePrefs {
-
-    private final Context mContext;
-
-    public BuglePrefsImpl(final Context context) {
-        mContext = context;
-    }
-
-    /**
-     * Validate the prefs key passed in. Subclasses should override this as needed to perform
-     * runtime checks (such as making sure per-subscription settings don't sneak into application-
-     * wide settings).
-     */
-    protected void validateKey(String key) {
-    }
-
-    @Override
-    public int getInt(final String key, final int defaultValue) {
-        validateKey(key);
-        final SharedPreferences prefs = mContext.getSharedPreferences(
-                getSharedPreferencesName(), Context.MODE_PRIVATE);
-        return prefs.getInt(key, defaultValue);
-    }
-
-    @Override
-    public long getLong(final String key, final long defaultValue) {
-        validateKey(key);
-        final SharedPreferences prefs = mContext.getSharedPreferences(
-                getSharedPreferencesName(), Context.MODE_PRIVATE);
-        return prefs.getLong(key, defaultValue);
-    }
-
-    @Override
-    public boolean getBoolean(final String key, final boolean defaultValue) {
-        validateKey(key);
-        final SharedPreferences prefs = mContext.getSharedPreferences(
-                getSharedPreferencesName(), Context.MODE_PRIVATE);
-        return prefs.getBoolean(key, defaultValue);
-    }
-
-    @Override
-    public String getString(final String key, final String defaultValue) {
-        validateKey(key);
-        final SharedPreferences prefs = mContext.getSharedPreferences(
-                getSharedPreferencesName(), Context.MODE_PRIVATE);
-        return prefs.getString(key, defaultValue);
-    }
-
-    @Override
-    public byte[] getBytes(String key) {
-        final String byteValue = getString(key, null);
-        return byteValue == null ? null : Base64.decode(byteValue, Base64.DEFAULT);
-    }
-
-    @Override
-    public void putInt(final String key, final int value) {
-        validateKey(key);
-        final SharedPreferences prefs = mContext.getSharedPreferences(
-                getSharedPreferencesName(), Context.MODE_PRIVATE);
-        final SharedPreferences.Editor editor = prefs.edit();
-        editor.putInt(key, value);
-        editor.apply();
-    }
-
-    @Override
-    public void putLong(final String key, final long value) {
-        validateKey(key);
-        final SharedPreferences prefs = mContext.getSharedPreferences(
-                getSharedPreferencesName(), Context.MODE_PRIVATE);
-        final SharedPreferences.Editor editor = prefs.edit();
-        editor.putLong(key, value);
-        editor.apply();
-    }
-
-    @Override
-    public void putBoolean(final String key, final boolean value) {
-        validateKey(key);
-        final SharedPreferences prefs = mContext.getSharedPreferences(
-                getSharedPreferencesName(), Context.MODE_PRIVATE);
-        final SharedPreferences.Editor editor = prefs.edit();
-        editor.putBoolean(key, value);
-        editor.apply();
-    }
-
-    @Override
-    public void putString(final String key, final String value) {
-        validateKey(key);
-        final SharedPreferences prefs = mContext.getSharedPreferences(
-                getSharedPreferencesName(), Context.MODE_PRIVATE);
-        final SharedPreferences.Editor editor = prefs.edit();
-        editor.putString(key, value);
-        editor.apply();
-    }
-
-    @Override
-    public void putBytes(String key, byte[] value) {
-        final String encodedBytes = Base64.encodeToString(value, Base64.DEFAULT);
-        putString(key, encodedBytes);
-    }
-
-    @Override
-    public void remove(final String key) {
-        validateKey(key);
-        final SharedPreferences prefs = mContext.getSharedPreferences(
-                getSharedPreferencesName(), Context.MODE_PRIVATE);
-        final SharedPreferences.Editor editor = prefs.edit();
-        editor.remove(key);
-        editor.apply();
-    }
-}
diff --git a/src/com/android/messaging/util/BuglePrefsKeys.java b/src/com/android/messaging/util/BuglePrefsKeys.java
deleted file mode 100644
index a30b5a3..0000000
--- a/src/com/android/messaging/util/BuglePrefsKeys.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-/**
- * List of shared preferences keys and default values. These are all internal
- * (not user-visible) preferences. Preferences that are exposed via the Settings
- * activity should be defined in the constants.xml resource file instead.
- */
-public final class BuglePrefsKeys {
-    private BuglePrefsKeys() {}   // do not instantiate
-
-    /**
-     * Bugle's shared preferences version
-     */
-    public static final String SHARED_PREFERENCES_VERSION =
-            "shared_preferences_version";
-    public static final int SHARED_PREFERENCES_VERSION_DEFAULT =
-            BuglePrefs.NO_SHARED_PREFERENCES_VERSION;
-
-    /**
-     * Last time that we ran a a sync (in millis)
-     */
-    public static final String LAST_SYNC_TIME
-            = "last_sync_time_millis";
-    public static final long LAST_SYNC_TIME_DEFAULT
-            = -1;
-
-    /**
-     * Last time that we ran a full sync (in millis)
-     */
-    public static final String LAST_FULL_SYNC_TIME
-            = "last_full_sync_time_millis";
-    public static final long LAST_FULL_SYNC_TIME_DEFAULT
-            = -1;
-
-    /**
-     * Timestamp of the message for which we last did a message notification.
-     */
-    public static final String LATEST_NOTIFICATION_MESSAGE_TIMESTAMP
-        = "latest_notification_message_timestamp";
-
-    /**
-     * The last selected chooser index in the media picker.
-     */
-    public static final String SELECTED_MEDIA_PICKER_CHOOSER_INDEX
-            = "selected_media_picker_chooser_index";
-    public static final int SELECTED_MEDIA_PICKER_CHOOSER_INDEX_DEFAULT
-            = -1;
-
-    /**
-     * The attempt number when retrying ProcessPendingMessagesAction
-     */
-    public static final String PROCESS_PENDING_MESSAGES_RETRY_COUNT
-            = BuglePrefs.SHARED_PREFERENCES_PER_SUBSCRIPTION_PREFIX + "process_pending_retry";
-
-}
diff --git a/src/com/android/messaging/util/BugleSubscriptionPrefs.java b/src/com/android/messaging/util/BugleSubscriptionPrefs.java
deleted file mode 100644
index 039712a..0000000
--- a/src/com/android/messaging/util/BugleSubscriptionPrefs.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-
-/**
- * Provides interface to access per-subscription shared preferences. We have one instance of
- * this per active subscription.
- */
-public class BugleSubscriptionPrefs extends BuglePrefsImpl {
-    private final int mSubId;
-
-    public BugleSubscriptionPrefs(final Context context, final int subId) {
-        super(context);
-        mSubId = subId;
-    }
-
-    @Override
-    public String getSharedPreferencesName() {
-        return SHARED_PREFERENCES_PER_SUBSCRIPTION_PREFIX + String.valueOf(mSubId);
-    }
-
-    @Override
-    protected void validateKey(String key) {
-        super.validateKey(key);
-        // Callers should only access per-subscription preferences from this class
-        Assert.isTrue(key.startsWith(SHARED_PREFERENCES_PER_SUBSCRIPTION_PREFIX));
-    }
-
-    @Override
-    public void onUpgrade(final int oldVersion, final int newVersion) {
-        switch (oldVersion) {
-            case BuglePrefs.NO_SHARED_PREFERENCES_VERSION:
-                // Upgrade to version 1. Adding per-subscription shared prefs.
-                // Migrate values from the application-wide settings.
-                migratePrefBooleanInternal(BuglePrefs.getApplicationPrefs(), "delivery_reports",
-                        R.string.delivery_reports_pref_key, R.bool.delivery_reports_pref_default);
-                migratePrefBooleanInternal(BuglePrefs.getApplicationPrefs(), "auto_retrieve_mms",
-                        R.string.auto_retrieve_mms_pref_key, R.bool.auto_retrieve_mms_pref_default);
-                migratePrefBooleanInternal(BuglePrefs.getApplicationPrefs(),
-                        "auto_retrieve_mms_when_roaming",
-                        R.string.auto_retrieve_mms_when_roaming_pref_key,
-                        R.bool.auto_retrieve_mms_when_roaming_pref_default);
-                migratePrefBooleanInternal(BuglePrefs.getApplicationPrefs(), "group_messaging",
-                        R.string.group_mms_pref_key, R.bool.group_mms_pref_default);
-
-                if (PhoneUtils.getDefault().getActiveSubscriptionCount() == 1) {
-                    migratePrefStringInternal(BuglePrefs.getApplicationPrefs(), "mms_phone_number",
-                            R.string.mms_phone_number_pref_key, null);
-                }
-        }
-    }
-
-    private void migratePrefBooleanInternal(final BuglePrefs oldPrefs, final String oldKey,
-            final int newKeyResId, final int defaultValueResId) {
-        final Resources resources = Factory.get().getApplicationContext().getResources();
-        final boolean defaultValue = resources.getBoolean(defaultValueResId);
-        final boolean oldValue = oldPrefs.getBoolean(oldKey, defaultValue);
-
-        // Only migrate pref value if it's different than the default.
-        if (oldValue != defaultValue) {
-            putBoolean(resources.getString(newKeyResId), oldValue);
-        }
-    }
-
-    private void migratePrefStringInternal(final BuglePrefs oldPrefs, final String oldKey,
-            final int newKeyResId, final String defaultValue) {
-        final Resources resources = Factory.get().getApplicationContext().getResources();
-        final String oldValue = oldPrefs.getString(oldKey, defaultValue);
-
-        // Only migrate pref value if it's different than the default.
-        if (!TextUtils.equals(oldValue, defaultValue)) {
-            putString(resources.getString(newKeyResId), oldValue);
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/BugleWidgetPrefs.java b/src/com/android/messaging/util/BugleWidgetPrefs.java
deleted file mode 100644
index 63ba567..0000000
--- a/src/com/android/messaging/util/BugleWidgetPrefs.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-
-/**
- * Provides interface to access shared preferences used by bugle widgets.
- */
-public class BugleWidgetPrefs extends BuglePrefsImpl {
-    /**
-     * Shared preferences name for preferences applicable to the entire app.
-     */
-    public static final String SHARED_PREFERENCES_WIDGET_NAME = "bugle_widgets";
-
-    public BugleWidgetPrefs(Context context) {
-        super(context);
-    }
-
-    @Override
-    public String getSharedPreferencesName() {
-        return SHARED_PREFERENCES_WIDGET_NAME;
-    }
-
-    @Override
-    public void onUpgrade(int oldVersion, int newVersion) {
-    }
-}
diff --git a/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java b/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java
deleted file mode 100644
index 6cf2f25..0000000
--- a/src/com/android/messaging/util/ChangeDefaultSmsAppHelper.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.content.ActivityNotFoundException;
-import android.content.Intent;
-import android.view.View;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.SnackBar;
-import com.android.messaging.ui.UIIntents;
-
-public class ChangeDefaultSmsAppHelper {
-    private Runnable mRunAfterMadeDefault;
-    private ChangeSmsAppSettingRunnable mChangeSmsAppSettingRunnable;
-
-    private static final int REQUEST_SET_DEFAULT_SMS_APP = 1;
-
-    /**
-     * When there's some condition that prevents an operation, such as sending a message,
-     * call warnOfMissingActionConditions to put up a toast and allow the user to repair
-     * that condition.
-     * @param sending - true if we're called during a sending operation
-     * @param runAfterMadeDefault - a runnable to run after the user responds
-     *                  positively to the condition prompt and resolves the condition. It is
-     *                  preferable to specify the value in {@link #handleChangeDefaultSmsResult}
-     *                  as that handles the case where the process gets restarted.
-     *                  If null, the user will be shown a generic toast message.
-     * @param composeView - compose view that may have the keyboard opened and focused
-     * @param rootView - if non-null, use this to attach a snackBar
-     * @param activity - calling activity
-     * @param fragment - calling fragment, may be null if called directly from an activity
-     */
-    public void warnOfMissingActionConditions(final boolean sending,
-            final Runnable runAfterMadeDefault,
-            final View composeView, final View rootView,
-            final Activity activity, final Fragment fragment) {
-        final PhoneUtils phoneUtils = PhoneUtils.getDefault();
-        final boolean isSmsCapable = phoneUtils.isSmsCapable();
-        final boolean hasPreferredSmsSim = phoneUtils.getHasPreferredSmsSim();
-        final boolean isDefaultSmsApp = phoneUtils.isDefaultSmsApp();
-
-        // Supports SMS?
-        if (!isSmsCapable) {
-            UiUtils.showToast(R.string.sms_disabled);
-
-        // Has a preferred sim?
-        } else if (!hasPreferredSmsSim) {
-            UiUtils.showToast(R.string.no_preferred_sim_selected);
-
-        // Is the default sms app?
-        } else if (!isDefaultSmsApp) {
-            mChangeSmsAppSettingRunnable = new ChangeSmsAppSettingRunnable(activity, fragment);
-            promptToChangeDefaultSmsApp(sending, runAfterMadeDefault,
-                    composeView, rootView, activity);
-        }
-
-        LogUtil.w(LogUtil.BUGLE_TAG, "Unsatisfied action condition: "
-                + "isSmsCapable=" + isSmsCapable + ", "
-                + "hasPreferredSmsSim=" + hasPreferredSmsSim + ", "
-                + "isDefaultSmsApp=" + isDefaultSmsApp);
-    }
-
-    private void promptToChangeDefaultSmsApp(final boolean sending,
-            final Runnable runAfterMadeDefault,
-            final View composeView, final View rootView,
-            final Activity activity) {
-        if (composeView != null) {
-            // Avoid bug in system which puts soft keyboard over dialog after orientation change
-            ImeUtil.hideSoftInput(activity, composeView);
-        }
-        mRunAfterMadeDefault = runAfterMadeDefault;
-
-        if (rootView == null) {
-            // Immediately open the system "Change default SMS app?" dialog setting.
-            mChangeSmsAppSettingRunnable.run();
-        } else {
-            UiUtils.showSnackBarWithCustomAction(activity,
-                    rootView,
-                    activity.getString(sending ? R.string.requires_default_sms_app_to_send :
-                        R.string.requires_default_sms_app),
-                        SnackBar.Action.createCustomAction(mChangeSmsAppSettingRunnable,
-                                activity.getString(R.string.requires_default_sms_change_button)),
-                                null /* interactions */,
-                                SnackBar.Placement.above(composeView));
-        }
-    }
-
-    private class ChangeSmsAppSettingRunnable implements Runnable {
-        private final Activity mActivity;
-        private final Fragment mFragment;
-
-        public ChangeSmsAppSettingRunnable(final Activity activity, final Fragment fragment) {
-            mActivity = activity;
-            mFragment = fragment;
-        }
-
-        @Override
-        public void run() {
-            try {
-                final Intent intent = UIIntents.get().getChangeDefaultSmsAppIntent(mActivity);
-                if (mFragment != null) {
-                    mFragment.startActivityForResult(intent, REQUEST_SET_DEFAULT_SMS_APP);
-                } else {
-                    mActivity.startActivityForResult(intent, REQUEST_SET_DEFAULT_SMS_APP);
-                }
-            } catch (final ActivityNotFoundException ex) {
-                // We shouldn't get here, but the monkey on JB MR0 can trigger it.
-                LogUtil.w(LogUtil.BUGLE_TAG, "Couldn't find activity:", ex);
-                UiUtils.showToastAtBottom(R.string.activity_not_found_message);
-            }
-        }
-    }
-
-    public void handleChangeDefaultSmsResult(
-            final int requestCode,
-            final int resultCode,
-            Runnable runAfterMadeDefault) {
-        Assert.isTrue(mRunAfterMadeDefault == null || runAfterMadeDefault == null);
-        if (runAfterMadeDefault == null) {
-            runAfterMadeDefault = mRunAfterMadeDefault;
-        }
-
-        if (requestCode == REQUEST_SET_DEFAULT_SMS_APP) {
-            if (resultCode == Activity.RESULT_OK) {
-                // mRunAfterMadeDefault can be null if it was set only in
-                // promptToChangeDefaultSmsApp, and the process subsequently restarted when the
-                // user momentarily switched to another app. In that case, we'll simply show a
-                // generic toast since we do not know what the runnable was supposed to do.
-                if  (runAfterMadeDefault != null) {
-                    runAfterMadeDefault.run();
-                } else {
-                    UiUtils.showToast(R.string.toast_after_setting_default_sms_app);
-                }
-            }
-            mRunAfterMadeDefault = null;    // don't want to accidentally run it again
-        }
-    }
-}
-
-
diff --git a/src/com/android/messaging/util/CircularArray.java b/src/com/android/messaging/util/CircularArray.java
deleted file mode 100644
index db6cf12..0000000
--- a/src/com/android/messaging/util/CircularArray.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-/**
- * Very simple circular array implementation.
- *
- * @param <E> The element type of this list.
- * @LibraryInternal
- */
-public class CircularArray<E> {
-    private int mNextWriter;
-    private boolean mHasWrapped;
-    private int mMaxCount;
-    Object mList[];
-
-    /**
-     * Constructor for CircularArray.
-     *
-     * @param count Max elements to hold in the list.
-     */
-    public CircularArray(int count) {
-        mMaxCount = count;
-        clear();
-    }
-
-    /**
-     * Reset the list.
-     */
-    public void clear() {
-        mNextWriter = 0;
-        mHasWrapped = false;
-        mList = new Object[mMaxCount];
-    }
-
-    /**
-     * Add an element to the end of the list.
-     *
-     * @param object The object to add.
-     */
-    public void add(E object) {
-        mList[mNextWriter] = object;
-        ++mNextWriter;
-        if (mNextWriter == mMaxCount) {
-            mNextWriter = 0;
-            mHasWrapped = true;
-        }
-    }
-
-    /**
-     * Get the number of elements in the list. This will be 0 <= returned count <= max count
-     *
-     * @return Elements in the circular list.
-     */
-    public int count() {
-        if (mHasWrapped) {
-            return mMaxCount;
-        } else {
-            return mNextWriter;
-        }
-    }
-
-    /**
-     * Return null if the list hasn't wrapped yet. Otherwise return the next object that would be
-     * overwritten. Can be useful to avoid extra allocations.
-     *
-     * @return
-     */
-    @SuppressWarnings("unchecked")
-    public E getFree() {
-        if (!mHasWrapped) {
-            return null;
-        } else {
-            return (E) mList[mNextWriter];
-        }
-    }
-
-    /**
-     * Get the object at index. Index 0 is the oldest item inserted into the list. Index (count() -
-     * 1) is the newest.
-     *
-     * @param index Index to retrieve.
-     * @return Object at index.
-     */
-    @SuppressWarnings("unchecked")
-    public E get(int index) {
-        if (mHasWrapped) {
-            int wrappedIndex = index + mNextWriter;
-            if (wrappedIndex >= mMaxCount) {
-                wrappedIndex -= mMaxCount;
-            }
-            return (E) mList[wrappedIndex];
-        } else {
-            return (E) mList[index];
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/ConnectivityUtil.java b/src/com/android/messaging/util/ConnectivityUtil.java
deleted file mode 100644
index a7467e4..0000000
--- a/src/com/android/messaging/util/ConnectivityUtil.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.telephony.PhoneStateListener;
-import android.telephony.ServiceState;
-import android.telephony.TelephonyManager;
-
-import com.android.messaging.datamodel.data.ParticipantData;
-
-/**
- * ConnectivityUtil listens to the network service state changes.
- *
- * On N and beyond, This class instance can be created via ConnectivityUtil(context, subId), use
- * ConnectivityUtil(context) for others.
- *
- * Note that TelephonyManager has createForSubscriptionId() for a specific subId from N but listen()
- * does not use the subId on the manager, and uses the default subId on PhoneStateListener. From O,
- * the manager uses its' own subId in listen().
- */
-public class ConnectivityUtil {
-    // Assume not connected until informed differently
-    private volatile int mCurrentServiceState = ServiceState.STATE_POWER_OFF;
-
-    private final TelephonyManager mTelephonyManager;
-
-    private ConnectivityListener mListener;
-
-    public interface ConnectivityListener {
-        public void onPhoneStateChanged(int serviceState);
-    }
-
-    public ConnectivityUtil(final Context context) {
-        mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-    }
-
-    public ConnectivityUtil(final Context context, final int subId) {
-        Assert.isTrue(OsUtil.isAtLeastN());
-        mTelephonyManager =
-                ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE))
-                        .createForSubscriptionId(subId);
-    }
-
-    public int getCurrentServiceState() {
-        return mCurrentServiceState;
-    }
-
-    private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
-        @Override
-        public void onServiceStateChanged(final ServiceState serviceState) {
-            if (mCurrentServiceState != serviceState.getState()) {
-                mCurrentServiceState = serviceState.getState();
-                onPhoneStateChanged(mCurrentServiceState);
-            }
-        }
-
-        @Override
-        public void onDataConnectionStateChanged(final int state) {
-            mCurrentServiceState = (state == TelephonyManager.DATA_DISCONNECTED) ?
-                    ServiceState.STATE_OUT_OF_SERVICE : ServiceState.STATE_IN_SERVICE;
-        }
-    };
-
-    private void onPhoneStateChanged(final int serviceState) {
-        final ConnectivityListener listener = mListener;
-        if (listener != null) {
-            listener.onPhoneStateChanged(serviceState);
-        }
-    }
-
-    public void register(final ConnectivityListener listener) {
-        Assert.isTrue(mListener == null || mListener == listener);
-        if (mListener == null) {
-            if (mTelephonyManager != null) {
-                mCurrentServiceState = (PhoneUtils.getDefault().isAirplaneModeOn() ?
-                        ServiceState.STATE_POWER_OFF : ServiceState.STATE_IN_SERVICE);
-                mTelephonyManager.listen(mPhoneStateListener,
-                        PhoneStateListener.LISTEN_SERVICE_STATE);
-            }
-        }
-        mListener = listener;
-    }
-
-    public void unregister() {
-        if (mListener != null) {
-            if (mTelephonyManager != null) {
-                mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
-                mCurrentServiceState = ServiceState.STATE_POWER_OFF;
-            }
-        }
-        mListener = null;
-    }
-}
diff --git a/src/com/android/messaging/util/ContactRecipientEntryUtils.java b/src/com/android/messaging/util/ContactRecipientEntryUtils.java
deleted file mode 100644
index 78c6ffd..0000000
--- a/src/com/android/messaging/util/ContactRecipientEntryUtils.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.net.Uri;
-import android.provider.ContactsContract.DisplayNameSources;
-import android.text.TextUtils;
-
-import com.android.ex.chips.RecipientEntry;
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.BugleRecipientEntry;
-import com.android.messaging.datamodel.data.ParticipantData;
-
-/**
- * Provides utility methods around creating RecipientEntry instance specific to Bugle's needs.
- */
-public class ContactRecipientEntryUtils {
-    /**
-     * A special contact id for generated contacts with no display name (number only) and avatar.
-     * By default, the chips UI doesn't load any avatar for chips with no display name, or where
-     * the display name is the same as phone number (which is true for unknown contacts).
-     * Since Bugle always generate a default avatar for all contacts, this is used to replace
-     * those default generated chips with a phone number and no avatars.
-     */
-    private static final long CONTACT_ID_NUMBER_WITH_AVATAR = -1000;
-
-    /**
-     * A generated special contact which says "Send to xxx" in the contact list, which allows
-     * a user to direct send an SMS to a number that was manually typed in.
-     */
-    private static final long CONTACT_ID_SENDTO_DESTINATION = -1001;
-
-    /**
-     * Construct a special "Send to xxx" entry for a given destination.
-     */
-    public static RecipientEntry constructSendToDestinationEntry(final String destination) {
-        return constructSpecialRecipientEntry(destination, CONTACT_ID_SENDTO_DESTINATION);
-    }
-
-    /**
-     * Construct a generated contact entry but with rendered avatar.
-     */
-    public static RecipientEntry constructNumberWithAvatarEntry(final String destination) {
-        return constructSpecialRecipientEntry(destination, CONTACT_ID_NUMBER_WITH_AVATAR);
-    }
-
-    private static RecipientEntry constructSpecialRecipientEntry(final String destination,
-            final long contactId) {
-        // For the send-to-destination (e.g. "Send to xxx" in the auto-complete drop-down)
-        // we want to show a default avatar with a static background so that it doesn't flicker
-        // as the user types.
-        final Uri avatarUri = contactId == CONTACT_ID_SENDTO_DESTINATION ?
-                AvatarUriUtil.DEFAULT_BACKGROUND_AVATAR : null;
-        return BugleRecipientEntry.constructTopLevelEntry(null, DisplayNameSources.STRUCTURED_NAME,
-                destination, RecipientEntry.INVALID_DESTINATION_TYPE, null, contactId,
-                null, contactId, avatarUri, true, null);
-    }
-
-    /**
-     * Gets the display name for contact list only. For most cases this is the same as the normal
-     * contact name, but there are cases where these two differ. For example, for the
-     * send to typed number item, we'd like to show "Send to xxx" in the contact list. However,
-     * when this item is actually added to the chips edit box, we would like to show just the
-     * phone number (i.e. no display name).
-     */
-    public static String getDisplayNameForContactList(final RecipientEntry entry) {
-        if (entry.getContactId() == CONTACT_ID_SENDTO_DESTINATION) {
-            return Factory.get().getApplicationContext().getResources().getString(
-                    R.string.contact_list_send_to_text, formatDestination(entry));
-        } else if (!TextUtils.isEmpty(entry.getDisplayName())) {
-            return entry.getDisplayName();
-        } else {
-            return formatDestination(entry);
-        }
-    }
-
-    public static String formatDestination(final RecipientEntry entry) {
-        return PhoneUtils.getDefault().formatForDisplay(entry.getDestination());
-    }
-
-    /**
-     * Returns true if the given entry has only avatar and number
-     */
-    public static boolean isAvatarAndNumberOnlyContact(final RecipientEntry entry) {
-        return entry.getContactId() == CONTACT_ID_NUMBER_WITH_AVATAR;
-    }
-
-    /**
-     * Returns true if the given entry is a special send to number item.
-     */
-    public static boolean isSendToDestinationContact(final RecipientEntry entry) {
-        return entry.getContactId() == CONTACT_ID_SENDTO_DESTINATION;
-    }
-
-    /**
-     * Returns true if the given participant is a special send to number item.
-     */
-    public static boolean isSendToDestinationContact(final ParticipantData participant) {
-        return participant.getContactId() == CONTACT_ID_SENDTO_DESTINATION;
-    }
-}
diff --git a/src/com/android/messaging/util/ContactUtil.java b/src/com/android/messaging/util/ContactUtil.java
deleted file mode 100644
index 94af3ba..0000000
--- a/src/com/android/messaging/util/ContactUtil.java
+++ /dev/null
@@ -1,556 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.Manifest;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Directory;
-import android.provider.ContactsContract.DisplayNameSources;
-import android.provider.ContactsContract.PhoneLookup;
-import android.provider.ContactsContract.Profile;
-import android.text.TextUtils;
-import android.view.View;
-
-import com.android.ex.chips.RecipientEntry;
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.CursorQueryData;
-import com.android.messaging.datamodel.FrequentContactsCursorQueryData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsSmsUtils;
-import com.android.messaging.ui.contact.AddContactsConfirmationDialog;
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * Utility class including logic to list, filter, and lookup phone and emails in CP2.
- */
-@VisibleForTesting
-public class ContactUtil {
-
-    /**
-     * Index of different columns in phone or email queries. All queries below should confirm to
-     * this column content and ordering so that caller can use the uniformed way to process
-     * returned cursors.
-     */
-    public static final int INDEX_CONTACT_ID              = 0;
-    public static final int INDEX_DISPLAY_NAME            = 1;
-    public static final int INDEX_PHOTO_URI               = 2;
-    public static final int INDEX_PHONE_EMAIL             = 3;
-    public static final int INDEX_PHONE_EMAIL_TYPE        = 4;
-    public static final int INDEX_PHONE_EMAIL_LABEL       = 5;
-
-    // An optional lookup_id column used by PhoneLookupQuery that is needed when querying for
-    // contact information.
-    public static final int INDEX_LOOKUP_KEY              = 6;
-
-    // An optional _id column to query results that need to be displayed in a list view.
-    public static final int INDEX_DATA_ID                 = 7;
-
-    // An optional sort_key column for displaying contact section labels.
-    public static final int INDEX_SORT_KEY                = 8;
-
-    // Lookup key column index specific to frequent contacts query.
-    public static final int INDEX_LOOKUP_KEY_FREQUENT     = 3;
-
-    /**
-     * Constants for listing and filtering phones.
-     */
-    public static class PhoneQuery {
-        public static final String SORT_KEY = Phone.SORT_KEY_PRIMARY;
-
-        public static final String[] PROJECTION = new String[] {
-            Phone.CONTACT_ID,                   // 0
-            Phone.DISPLAY_NAME_PRIMARY,         // 1
-            Phone.PHOTO_THUMBNAIL_URI,          // 2
-            Phone.NUMBER,                       // 3
-            Phone.TYPE,                         // 4
-            Phone.LABEL,                        // 5
-            Phone.LOOKUP_KEY,                   // 6
-            Phone._ID,                          // 7
-            PhoneQuery.SORT_KEY,                // 8
-        };
-    }
-
-    /**
-     * Constants for looking up phone numbers.
-     */
-    public static class PhoneLookupQuery {
-        public static final String[] PROJECTION = new String[] {
-            // The _ID field points to the contact id of the content
-            PhoneLookup._ID,                          // 0
-            PhoneLookup.DISPLAY_NAME,                 // 1
-            PhoneLookup.PHOTO_THUMBNAIL_URI,          // 2
-            PhoneLookup.NUMBER,                       // 3
-            PhoneLookup.TYPE,                         // 4
-            PhoneLookup.LABEL,                        // 5
-            PhoneLookup.LOOKUP_KEY,                   // 6
-            // The data id is not included as part of the projection since it's not part of
-            // PhoneLookup. This is okay because the _id field serves as both the data id and
-            // contact id. Also we never show the results directly in a list view so we are not
-            // concerned about duplicated _id's (namely, the same contact has two same phone
-            // numbers)
-        };
-    }
-
-    public static class FrequentContactQuery {
-        public static final String[] PROJECTION = new String[] {
-            Contacts._ID,                       // 0
-            Contacts.DISPLAY_NAME,              // 1
-            Contacts.PHOTO_URI,                 // 2
-            Phone.LOOKUP_KEY,                   // 3
-        };
-    }
-
-    /**
-     * Constants for listing and filtering emails.
-     */
-    public static class EmailQuery {
-        public static final String SORT_KEY = Email.SORT_KEY_PRIMARY;
-
-        public static final String[] PROJECTION = new String[] {
-            Email.CONTACT_ID,                   // 0
-            Email.DISPLAY_NAME_PRIMARY,         // 1
-            Email.PHOTO_THUMBNAIL_URI,          // 2
-            Email.ADDRESS,                      // 3
-            Email.TYPE,                         // 4
-            Email.LABEL,                        // 5
-            Email.LOOKUP_KEY,                   // 6
-            Email._ID,                          // 7
-            EmailQuery.SORT_KEY,                // 8
-        };
-    }
-
-    public static final int INDEX_SELF_QUERY_LOOKUP_KEY = 3;
-
-    /**
-     * Constants for querying self from CP2.
-     */
-    public static class SelfQuery {
-        public static final String[] PROJECTION = new String[] {
-            Profile._ID,                        // 0
-            Profile.DISPLAY_NAME_PRIMARY,       // 1
-            Profile.PHOTO_THUMBNAIL_URI,        // 2
-            Profile.LOOKUP_KEY                  // 3
-            // Phone number, type, label and data_id is not provided in this projection since
-            // Profile CONTENT_URI doesn't include this information. Also, we don't need it
-            // we just need the name and avatar url.
-        };
-    }
-
-    public static class StructuredNameQuery {
-        public static final String[] PROJECTION = new String[] {
-            StructuredName.DISPLAY_NAME,
-            StructuredName.GIVEN_NAME,
-            StructuredName.FAMILY_NAME,
-            StructuredName.PREFIX,
-            StructuredName.MIDDLE_NAME,
-            StructuredName.SUFFIX
-        };
-    }
-
-    public static final int INDEX_STRUCTURED_NAME_DISPLAY_NAME = 0;
-    public static final int INDEX_STRUCTURED_NAME_GIVEN_NAME = 1;
-    public static final int INDEX_STRUCTURED_NAME_FAMILY_NAME = 2;
-    public static final int INDEX_STRUCTURED_NAME_PREFIX = 3;
-    public static final int INDEX_STRUCTURED_NAME_MIDDLE_NAME = 4;
-    public static final int INDEX_STRUCTURED_NAME_SUFFIX = 5;
-
-    public static final long INVALID_CONTACT_ID = -1;
-
-    /**
-     * This class is static. No need to create an instance.
-     */
-    private ContactUtil() {
-    }
-
-    /**
-     * Shows a contact card or add to contacts dialog for the given contact info
-     * @param view The view whose click triggered this to show
-     * @param contactId The id of the contact in the android contacts DB
-     * @param contactLookupKey The lookup key from contacts DB
-     * @param avatarUri Uri to the avatar image if available
-     * @param normalizedDestination The normalized phone number or email
-     */
-    public static void showOrAddContact(final View view, final long contactId,
-            final String contactLookupKey, final Uri avatarUri,
-            final String normalizedDestination) {
-        if (contactId > ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED
-                && !TextUtils.isEmpty(contactLookupKey)) {
-            final Uri lookupUri =
-                    ContactsContract.Contacts.getLookupUri(contactId, contactLookupKey);
-            ContactsContract.QuickContact.showQuickContact(view.getContext(), view, lookupUri,
-                    ContactsContract.QuickContact.MODE_LARGE, null);
-        } else if (!TextUtils.isEmpty(normalizedDestination) && !TextUtils.equals(
-                normalizedDestination, ParticipantData.getUnknownSenderDestination())) {
-            final AddContactsConfirmationDialog dialog = new AddContactsConfirmationDialog(
-                    view.getContext(), avatarUri, normalizedDestination);
-            dialog.show();
-        }
-    }
-
-    @VisibleForTesting
-    public static CursorQueryData getSelf(final Context context) {
-        if (!ContactUtil.hasReadContactsPermission()) {
-            return CursorQueryData.getEmptyQueryData();
-        }
-        return new CursorQueryData(context, Profile.CONTENT_URI, SelfQuery.PROJECTION, null, null,
-                null);
-    }
-
-    /**
-     * Get a list of phones sorted by contact name. One contact may have multiple phones.
-     * In that case, each phone will be returned as a separate record in the result cursor.
-     */
-    @VisibleForTesting
-    public static CursorQueryData getPhones(final Context context) {
-        if (!ContactUtil.hasReadContactsPermission()) {
-            return CursorQueryData.getEmptyQueryData();
-        }
-
-        // The AOSP Contacts provider allows adding a ContactsContract.REMOVE_DUPLICATE_ENTRIES
-        // query parameter that removes duplicate (raw) numbers. Unfortunately, we can't use that
-        // because it causes the some phones' contacts provider to return incorrect sections.
-        final Uri uri = Phone.CONTENT_URI.buildUpon().appendQueryParameter(
-                ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
-                .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true")
-                .build();
-
-        return new CursorQueryData(context, uri, PhoneQuery.PROJECTION, null, null,
-                PhoneQuery.SORT_KEY);
-    }
-
-    /**
-     * Lookup a destination (phone, email). Supplied destination should be a relatively complete
-     * one for this to succeed. PhoneLookup / EmailLookup URI will apply some smartness to do a
-     * loose match to see whether there is a contact that matches this destination.
-     */
-    public static CursorQueryData lookupDestination(final Context context,
-            final String destination) {
-        if (MmsSmsUtils.isEmailAddress(destination)) {
-            return ContactUtil.lookupEmail(context, destination);
-        } else {
-            return ContactUtil.lookupPhone(context, destination);
-        }
-    }
-
-    /**
-     * Returns whether the search text indicates an email based search or a phone number based one.
-     */
-    private static boolean shouldFilterForEmail(final String searchText) {
-        return searchText != null && searchText.contains("@");
-    }
-
-    /**
-     * Get a list of destinations (phone, email) matching the partial destination.
-     */
-    public static CursorQueryData filterDestination(final Context context,
-            final String destination) {
-        if (shouldFilterForEmail(destination)) {
-            return ContactUtil.filterEmails(context, destination);
-        } else {
-            return ContactUtil.filterPhones(context, destination);
-        }
-    }
-
-    /**
-     * Get a list of destinations (phone, email) matching the partial destination in work profile.
-     */
-    public static CursorQueryData filterDestinationEnterprise(final Context context,
-            final String destination) {
-        if (shouldFilterForEmail(destination)) {
-            return ContactUtil.filterEmailsEnterprise(context, destination);
-        } else {
-            return ContactUtil.filterPhonesEnterprise(context, destination);
-        }
-    }
-
-    /**
-     * Get a list of phones matching a search criteria. The search may be on contact name or
-     * phone number. In case search is on contact name, all matching contact's phone number
-     * will be returned.
-     * NOTE: This is visible for testing only, clients should only call filterDestination() since
-     * we support email addresses as well.
-     */
-    @VisibleForTesting
-    public static CursorQueryData filterPhones(final Context context, final String query) {
-        return filterPhonesInternal(context, Phone.CONTENT_FILTER_URI, query, Directory.DEFAULT);
-    }
-
-    /**
-     * Similar to {@link #filterPhones(Context, String)}, but search in work profile instead.
-     */
-    public static CursorQueryData filterPhonesEnterprise(final Context context,
-            final String query) {
-        return filterPhonesInternal(context, Phone.ENTERPRISE_CONTENT_FILTER_URI, query,
-                Directory.ENTERPRISE_DEFAULT);
-    }
-
-    private static CursorQueryData filterPhonesInternal(final Context context,
-            final Uri phoneFilterBaseUri, final String query, final long directoryId) {
-        if (!ContactUtil.hasReadContactsPermission()) {
-            return CursorQueryData.getEmptyQueryData();
-        }
-        Uri phoneFilterUri = buildDirectorySearchUri(phoneFilterBaseUri, query, directoryId);
-        return new CursorQueryData(context,
-                phoneFilterUri,
-                PhoneQuery.PROJECTION, null, null,
-                PhoneQuery.SORT_KEY);
-    }
-    /**
-     * Lookup a phone based on a phone number. Supplied phone should be a relatively complete
-     * phone number for this to succeed. PhoneLookup URI will apply some smartness to do a
-     * loose match to see whether there is a contact that matches this phone.
-     * NOTE: This is visible for testing only, clients should only call lookupDestination() since
-     * we support email addresses as well.
-     */
-    @VisibleForTesting
-    public static CursorQueryData lookupPhone(final Context context, final String phone) {
-        if (!ContactUtil.hasReadContactsPermission()) {
-            return CursorQueryData.getEmptyQueryData();
-        }
-
-        final Uri uri = getPhoneLookupUri().buildUpon()
-                .appendPath(phone).build();
-
-        return new CursorQueryData(context, uri, PhoneLookupQuery.PROJECTION, null, null, null);
-    }
-
-    /**
-     * Get frequently contacted people. This queries for Contacts.CONTENT_STREQUENT_URI, which
-     * includes both starred or frequently contacted people.
-     */
-    public static CursorQueryData getFrequentContacts(final Context context) {
-        if (!ContactUtil.hasReadContactsPermission()) {
-            return CursorQueryData.getEmptyQueryData();
-        }
-
-        return new FrequentContactsCursorQueryData(context, FrequentContactQuery.PROJECTION,
-                null, null, null);
-    }
-
-    /**
-     * Get a list of emails matching a search criteria. In Bugle, since email is not a common
-     * usage scenario, we should only do email search after user typed in a query indicating
-     * an intention to search by email (for example, "joe@").
-     * NOTE: This is visible for testing only, clients should only call filterDestination() since
-     * we support email addresses as well.
-     */
-    @VisibleForTesting
-    public static CursorQueryData filterEmails(final Context context, final String query) {
-        return filterEmailsInternal(context, Email.CONTENT_FILTER_URI, query, Directory.DEFAULT);
-    }
-
-    /**
-     * Similar to {@link #filterEmails(Context, String)}, but search in work profile instead.
-     */
-    public static CursorQueryData filterEmailsEnterprise(final Context context,
-            final String query) {
-        return filterEmailsInternal(context, Email.ENTERPRISE_CONTENT_FILTER_URI, query,
-                Directory.ENTERPRISE_DEFAULT);
-    }
-
-    private static CursorQueryData filterEmailsInternal(final Context context,
-            final Uri filterEmailsBaseUri, final String query, final long directoryId) {
-        if (!ContactUtil.hasReadContactsPermission()) {
-            return CursorQueryData.getEmptyQueryData();
-        }
-        final Uri filterEmailsUri = buildDirectorySearchUri(filterEmailsBaseUri, query,
-                directoryId);
-        return new CursorQueryData(context,
-                filterEmailsUri,
-                PhoneQuery.PROJECTION, null, null,
-                PhoneQuery.SORT_KEY);
-    }
-
-    /**
-     * Lookup emails based a complete email address. Since there is no special logic needed for
-     * email lookup, this simply calls filterEmails.
-     * NOTE: This is visible for testing only, clients should only call lookupDestination() since
-     * we support email addresses as well.
-     */
-    @VisibleForTesting
-    public static CursorQueryData lookupEmail(final Context context, final String email) {
-        if (!ContactUtil.hasReadContactsPermission()) {
-            return CursorQueryData.getEmptyQueryData();
-        }
-
-        final Uri uri = getEmailContentLookupUri().buildUpon()
-                .appendPath(email).appendQueryParameter(
-                        ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
-                        .build();
-
-        return new CursorQueryData(context, uri, EmailQuery.PROJECTION, null, null,
-                EmailQuery.SORT_KEY);
-    }
-
-    /**
-     * Looks up the structured name for a contact.
-     *
-     * @param primaryOnly If there are multiple raw contacts, set this flag to return only the
-     * name used as the primary display name. Otherwise, this method returns all names.
-     */
-    private static CursorQueryData lookupStructuredName(final Context context, final long contactId,
-            final boolean primaryOnly) {
-        if (!ContactUtil.hasReadContactsPermission()) {
-            return CursorQueryData.getEmptyQueryData();
-        }
-
-        // TODO: Handle enterprise contacts
-        final Uri uri = ContactsContract.Contacts.CONTENT_URI.buildUpon()
-                .appendPath(String.valueOf(contactId))
-                .appendPath(ContactsContract.Contacts.Data.CONTENT_DIRECTORY).build();
-
-        String selection = ContactsContract.Data.MIMETYPE + "=?";
-        final String[] selectionArgs = {
-                StructuredName.CONTENT_ITEM_TYPE
-        };
-        if (primaryOnly) {
-            selection += " AND " + Contacts.DISPLAY_NAME_PRIMARY + "="
-                    + StructuredName.DISPLAY_NAME;
-        }
-
-        return new CursorQueryData(context, uri,
-                StructuredNameQuery.PROJECTION, selection, selectionArgs, null);
-    }
-
-    /**
-     * Looks up the first name for a contact. If there are multiple raw
-     * contacts, this returns the name that is associated with the contact's
-     * primary display name. The name is null when contact id does not exist
-     * (possibly because it is a corp contact) or it does not have a first name.
-     */
-    public static String lookupFirstName(final Context context, final long contactId) {
-        if (isEnterpriseContactId(contactId)) {
-            return null;
-        }
-        String firstName = null;
-        Cursor nameCursor = null;
-        try {
-            nameCursor = ContactUtil.lookupStructuredName(context, contactId, true)
-                    .performSynchronousQuery();
-            if (nameCursor != null && nameCursor.moveToFirst()) {
-                firstName = nameCursor.getString(ContactUtil.INDEX_STRUCTURED_NAME_GIVEN_NAME);
-            }
-        } finally {
-            if (nameCursor != null) {
-                nameCursor.close();
-            }
-        }
-        return firstName;
-    }
-
-    /**
-     * Creates a RecipientEntry from the provided data fields (from the contacts cursor).
-     * @param firstLevel whether this item is the first entry of this contact in the list.
-     */
-    public static RecipientEntry createRecipientEntry(final String displayName,
-            final int displayNameSource, final String destination, final int destinationType,
-            final String destinationLabel, final long contactId, final String lookupKey,
-            final long dataId, final String photoThumbnailUri, final boolean firstLevel) {
-        if (firstLevel) {
-            return RecipientEntry.constructTopLevelEntry(displayName, displayNameSource,
-                    destination, destinationType, destinationLabel, contactId, null, dataId,
-                    photoThumbnailUri, true, lookupKey);
-        } else {
-            return RecipientEntry.constructSecondLevelEntry(displayName, displayNameSource,
-                    destination, destinationType, destinationLabel, contactId, null, dataId,
-                    photoThumbnailUri, true, lookupKey);
-        }
-    }
-
-    /**
-     * Creates a RecipientEntry for PhoneQuery result. The result is then displayed in the
-     * contact search drop down or as replacement chips in the chips edit box.
-     */
-    public static RecipientEntry createRecipientEntryForPhoneQuery(final Cursor cursor,
-            final boolean isFirstLevel) {
-        final long contactId = cursor.getLong(ContactUtil.INDEX_CONTACT_ID);
-        final String displayName = cursor.getString(
-                ContactUtil.INDEX_DISPLAY_NAME);
-        final String photoThumbnailUri = cursor.getString(
-                ContactUtil.INDEX_PHOTO_URI);
-        final String destination = cursor.getString(
-                ContactUtil.INDEX_PHONE_EMAIL);
-        final int destinationType = cursor.getInt(
-                ContactUtil.INDEX_PHONE_EMAIL_TYPE);
-        final String destinationLabel = cursor.getString(
-                ContactUtil.INDEX_PHONE_EMAIL_LABEL);
-        final String lookupKey = cursor.getString(
-                ContactUtil.INDEX_LOOKUP_KEY);
-
-        // PhoneQuery uses the contact id as the data id ("_id").
-        final long dataId = contactId;
-
-        return createRecipientEntry(displayName,
-                DisplayNameSources.STRUCTURED_NAME, destination, destinationType,
-                destinationLabel, contactId, lookupKey, dataId, photoThumbnailUri,
-                isFirstLevel);
-    }
-
-    /**
-     * Returns if a given contact id is valid.
-     */
-    public static boolean isValidContactId(final long contactId) {
-        return contactId >= 0;
-    }
-
-    /**
-     * Returns if a given contact id belongs to managed profile.
-     */
-    public static boolean isEnterpriseContactId(final long contactId) {
-        return OsUtil.isAtLeastL() && ContactsContract.Contacts.isEnterpriseContactId(contactId);
-    }
-
-    /**
-     * Returns Email lookup uri that will query both primary and corp profile
-     */
-    private static Uri getEmailContentLookupUri() {
-        if (OsUtil.isAtLeastM()) {
-            return Email.ENTERPRISE_CONTENT_LOOKUP_URI;
-        }
-        return Email.CONTENT_LOOKUP_URI;
-    }
-
-    /**
-     * Returns PhoneLookup URI.
-     */
-    public static Uri getPhoneLookupUri() {
-        if (OsUtil.isAtLeastM()) {
-            return PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI;
-        }
-        return PhoneLookup.CONTENT_FILTER_URI;
-    }
-
-    public static boolean hasReadContactsPermission() {
-        return OsUtil.hasPermission(Manifest.permission.READ_CONTACTS);
-    }
-
-    private static Uri buildDirectorySearchUri(final Uri uri, final String query,
-            final long directoryId) {
-        return uri.buildUpon()
-                .appendPath(query).appendQueryParameter(
-                        ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId))
-                .build();
-    }
-}
diff --git a/src/com/android/messaging/util/ContentType.java b/src/com/android/messaging/util/ContentType.java
deleted file mode 100644
index 75fff93..0000000
--- a/src/com/android/messaging/util/ContentType.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 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.android.messaging.util;
-
-import android.webkit.MimeTypeMap;
-
-public final class ContentType {
-    public static String THREE_GPP_EXTENSION = "3gp";
-    public static String VIDEO_MP4_EXTENSION = "mp4";
-    // Default extension used when we don't know one.
-    public static String DEFAULT_EXTENSION = "dat";
-
-    public static final int TYPE_IMAGE = 0;
-    public static final int TYPE_VIDEO = 1;
-    public static final int TYPE_AUDIO = 2;
-    public static final int TYPE_VCARD = 3;
-    public static final int TYPE_OTHER = 4;
-
-    public static final String ANY_TYPE          = "*/*";
-    public static final String MMS_MESSAGE       = "application/vnd.wap.mms-message";
-    // The phony content type for generic PDUs (e.g. ReadOrig.ind,
-    // Notification.ind, Delivery.ind).
-    public static final String MMS_GENERIC       = "application/vnd.wap.mms-generic";
-    public static final String MMS_MULTIPART_MIXED   = "application/vnd.wap.multipart.mixed";
-    public static final String MMS_MULTIPART_RELATED = "application/vnd.wap.multipart.related";
-    public static final String MMS_MULTIPART_ALTERNATIVE =
-            "application/vnd.wap.multipart.alternative";
-
-    public static final String TEXT_PLAIN        = "text/plain";
-    public static final String TEXT_HTML         = "text/html";
-    public static final String TEXT_VCALENDAR    = "text/x-vCalendar";
-    public static final String TEXT_VCARD        = "text/x-vCard";
-
-    public static final String IMAGE_PREFIX      = "image/";
-    public static final String IMAGE_UNSPECIFIED = "image/*";
-    public static final String IMAGE_JPEG        = "image/jpeg";
-    public static final String IMAGE_JPG         = "image/jpg";
-    public static final String IMAGE_GIF         = "image/gif";
-    public static final String IMAGE_WBMP        = "image/vnd.wap.wbmp";
-    public static final String IMAGE_PNG         = "image/png";
-    public static final String IMAGE_X_MS_BMP    = "image/x-ms-bmp";
-
-    public static final String AUDIO_UNSPECIFIED = "audio/*";
-    public static final String AUDIO_AAC         = "audio/aac";
-    public static final String AUDIO_AMR         = "audio/amr";
-    public static final String AUDIO_IMELODY     = "audio/imelody";
-    public static final String AUDIO_MID         = "audio/mid";
-    public static final String AUDIO_MIDI        = "audio/midi";
-    public static final String AUDIO_MP3         = "audio/mp3";
-    public static final String AUDIO_MPEG3       = "audio/mpeg3";
-    public static final String AUDIO_MPEG        = "audio/mpeg";
-    public static final String AUDIO_MPG         = "audio/mpg";
-    public static final String AUDIO_MP4         = "audio/mp4";
-    public static final String AUDIO_MP4_LATM    = "audio/mp4-latm";
-    public static final String AUDIO_X_MID       = "audio/x-mid";
-    public static final String AUDIO_X_MIDI      = "audio/x-midi";
-    public static final String AUDIO_X_MP3       = "audio/x-mp3";
-    public static final String AUDIO_X_MPEG3     = "audio/x-mpeg3";
-    public static final String AUDIO_X_MPEG      = "audio/x-mpeg";
-    public static final String AUDIO_X_MPG       = "audio/x-mpg";
-    public static final String AUDIO_3GPP        = "audio/3gpp";
-    public static final String AUDIO_X_WAV       = "audio/x-wav";
-    public static final String AUDIO_OGG         = "application/ogg";
-
-    public static final String MULTIPART_MIXED = "multipart/mixed";
-
-    public static final String VIDEO_UNSPECIFIED = "video/*";
-    public static final String VIDEO_3GP         = "video/3gp";
-    public static final String VIDEO_3GPP        = "video/3gpp";
-    public static final String VIDEO_3G2         = "video/3gpp2";
-    public static final String VIDEO_H263        = "video/h263";
-    public static final String VIDEO_M4V         = "video/m4v";
-    public static final String VIDEO_MP4         = "video/mp4";
-    public static final String VIDEO_MPEG        = "video/mpeg";
-    public static final String VIDEO_MPEG4       = "video/mpeg4";
-    public static final String VIDEO_WEBM        = "video/webm";
-
-    public static final String APP_SMIL          = "application/smil";
-    public static final String APP_WAP_XHTML     = "application/vnd.wap.xhtml+xml";
-    public static final String APP_XHTML         = "application/xhtml+xml";
-
-    public static final String APP_DRM_CONTENT   = "application/vnd.oma.drm.content";
-    public static final String APP_DRM_MESSAGE   = "application/vnd.oma.drm.message";
-
-    // This class should never be instantiated.
-    private ContentType() {
-    }
-
-    public static boolean isTextType(final String contentType) {
-        return TEXT_PLAIN.equals(contentType)
-                || TEXT_HTML.equals(contentType)
-                || APP_WAP_XHTML.equals(contentType);
-    }
-
-    public static boolean isMediaType(final String contentType) {
-        return isImageType(contentType)
-                || isVideoType(contentType)
-                || isAudioType(contentType)
-                || isVCardType(contentType);
-    }
-
-    public static boolean isImageType(final String contentType) {
-        return (null != contentType) && contentType.startsWith(IMAGE_PREFIX);
-    }
-
-    public static boolean isAudioType(final String contentType) {
-        return (null != contentType) &&
-                (contentType.startsWith("audio/") || contentType.equalsIgnoreCase(AUDIO_OGG));
-    }
-
-    public static boolean isVideoType(final String contentType) {
-        return (null != contentType) && contentType.startsWith("video/");
-    }
-
-    public static boolean isVCardType(final String contentType) {
-        return (null != contentType) && contentType.equalsIgnoreCase(TEXT_VCARD);
-    }
-
-    public static boolean isDrmType(final String contentType) {
-        return (null != contentType)
-                && (contentType.equals(APP_DRM_CONTENT)
-                        || contentType.equals(APP_DRM_MESSAGE));
-    }
-
-    public static boolean isUnspecified(final String contentType) {
-        return (null != contentType) && contentType.endsWith("*");
-    }
-
-    /**
-     * If the content type is a type which can be displayed in the conversation list as a preview.
-     */
-    public static boolean isConversationListPreviewableType(final String contentType) {
-        return ContentType.isAudioType(contentType) || ContentType.isVideoType(contentType) ||
-                ContentType.isImageType(contentType) || ContentType.isVCardType(contentType);
-    }
-
-    /**
-     * Given a filename, look at the extension and try and determine the mime type.
-     *
-     * @param fileName a filename to determine the type from, such as img1231.jpg
-     * @param contentTypeDefault type to use when the content type can't be determined from the file
-     *      extension. It can be null or a type such as ContentType.IMAGE_UNSPECIFIED
-     * @return Content type of the extension.
-     */
-    public static String getContentTypeFromExtension(final String fileName,
-            final String contentTypeDefault) {
-        final MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
-        final String extension = MimeTypeMap.getFileExtensionFromUrl(fileName);
-        String contentType = mimeTypeMap.getMimeTypeFromExtension(extension);
-        if (contentType == null) {
-            contentType = contentTypeDefault;
-        }
-        return contentType;
-    }
-
-    public static String getExtensionFromMimeType(final String mimeType) {
-        final MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
-        final String extension = mimeTypeMap.getExtensionFromMimeType(mimeType);
-        return extension;
-    }
-
-    /**
-     * Get the common file extension for a given content type
-     * @param contentType The content type
-     * @return The extension without the .
-     */
-    public static String getExtension(final String contentType) {
-        if (VIDEO_MP4.equals(contentType)) {
-            return VIDEO_MP4_EXTENSION;
-        } else if (VIDEO_3GPP.equals(contentType)) {
-            return THREE_GPP_EXTENSION;
-        } else {
-            return DEFAULT_EXTENSION;
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/ConversationIdSet.java b/src/com/android/messaging/util/ConversationIdSet.java
deleted file mode 100644
index 75bf634..0000000
--- a/src/com/android/messaging/util/ConversationIdSet.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-
-/**
- * Utility class to make it easy to store multiple conversation id strings in a single string
- * with delimeters.
- */
-public class ConversationIdSet extends HashSet<String> {
-    private static final String JOIN_DELIMITER = "|";
-    private static final String SPLIT_DELIMITER = "\\|";
-
-    public ConversationIdSet() {
-        super();
-    }
-
-    public ConversationIdSet(final Collection<String> asList) {
-        super(asList);
-    }
-
-    public String first() {
-        if (size() > 0) {
-            return iterator().next();
-        } else {
-            return null;
-        }
-    }
-
-    public static ConversationIdSet createSet(final String conversationIdSetString) {
-        ConversationIdSet set = null;
-        if (conversationIdSetString != null) {
-            set = new ConversationIdSet(Arrays.asList(conversationIdSetString.split(
-                    SPLIT_DELIMITER)));
-        }
-        return set;
-    }
-
-    public String getDelimitedString() {
-        return OsUtil.joinFromSetWithDelimiter(this, JOIN_DELIMITER);
-    }
-
-    public static String join(final String conversationIdSet1, final String conversationIdSet2) {
-        String joined = null;
-        if (conversationIdSet1 == null) {
-            joined = conversationIdSet2;
-        } else if (conversationIdSet2 != null) {
-            joined = conversationIdSet1 + JOIN_DELIMITER + conversationIdSet2;
-        }
-        return joined;
-    }
-
-}
diff --git a/src/com/android/messaging/util/CubicBezierInterpolator.java b/src/com/android/messaging/util/CubicBezierInterpolator.java
deleted file mode 100644
index 317b3e6..0000000
--- a/src/com/android/messaging/util/CubicBezierInterpolator.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.view.animation.Interpolator;
-
-/**
- * Class that acts as an interpolator to match the cubic-bezier css timing function where p0 is
- * fixed at 0,0 and p3 is fixed at 1,1
- */
-public class CubicBezierInterpolator implements Interpolator {
-    private final float mX1;
-    private final float mY1;
-    private final float mX2;
-    private final float mY2;
-
-    public CubicBezierInterpolator(final float x1, final float y1, final float x2, final float y2) {
-        mX1 = x1;
-        mY1 = y1;
-        mX2 = x2;
-        mY2 = y2;
-    }
-
-    @Override
-    public float getInterpolation(float v) {
-        return getY(getTForXValue(v));
-    }
-
-    private float getX(final float t) {
-        return getCoordinate(t, mX1, mX2);
-    }
-
-    private float getY(final float t) {
-        return getCoordinate(t, mY1, mY2);
-    }
-
-    private float getCoordinate(float t, float p1, float p2) {
-        // Special case start and end.
-        if (t == 0.0f || t == 1.0f) {
-            return t;
-        }
-
-        // Step one - from 4 points to 3.
-        float ip0 = linearInterpolate(0, p1, t);
-        float ip1 = linearInterpolate(p1, p2, t);
-        float ip2 = linearInterpolate(p2, 1, t);
-
-        // Step two - from 3 points to 2.
-        ip0 = linearInterpolate(ip0, ip1, t);
-        ip1 = linearInterpolate(ip1, ip2, t);
-
-        // Final step - last point.
-        return linearInterpolate(ip0, ip1, t);
-    }
-
-    private float linearInterpolate(float a, float b, float progress) {
-        return a + (b - a) * progress;
-    }
-
-    private float getTForXValue(final float x) {
-        final float epsilon = 1e-6f;
-        final int iterations = 8;
-
-        if (x <= 0.0f) {
-            return 0.0f;
-        } else if (x >= 1.0f) {
-            return 1.0f;
-        }
-
-        // Try gradient descent to solve for t. If it works, it is very fast.
-        float t = x;
-        float minT = 0.0f;
-        float maxT = 1.0f;
-        float value = 0.0f;
-        for (int i = 0; i < iterations; i++) {
-            value = getX(t);
-            double derivative = (getX(t + epsilon) - value) / epsilon;
-            if (Math.abs(value - x) < epsilon) {
-                return t;
-            } else if (Math.abs(derivative) < epsilon) {
-                break;
-            } else {
-                if (value < x) {
-                    minT = t;
-                } else {
-                    maxT = t;
-                }
-                t -= (value - x) / derivative;
-            }
-        }
-
-        // If the gradient descent got stuck in a local minimum, e.g. because the
-        // derivative was close to 0, use an interval bisection instead.
-        for (int i = 0; Math.abs(value - x) > epsilon && i < iterations; i++) {
-            if (value < x) {
-                minT = t;
-                t = (t + maxT) / 2.0f;
-            } else {
-                maxT = t;
-                t = (t + minT) / 2.0f;
-            }
-            value = getX(t);
-        }
-        return t;
-    }
-}
diff --git a/src/com/android/messaging/util/Dates.java b/src/com/android/messaging/util/Dates.java
deleted file mode 100644
index 49f0c7f..0000000
--- a/src/com/android/messaging/util/Dates.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.text.format.DateUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.text.SimpleDateFormat;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.temporal.ChronoUnit;
-import java.time.ZoneId;
-import java.util.Date;
-import java.util.Locale;
-
-/**
- * Collection of date utilities.
- */
-public class Dates {
-    public static final long SECOND_IN_MILLIS = 1000;
-    public static final long MINUTE_IN_MILLIS = SECOND_IN_MILLIS * 60;
-    public static final long HOUR_IN_MILLIS = MINUTE_IN_MILLIS * 60;
-    public static final long DAY_IN_MILLIS = HOUR_IN_MILLIS * 24;
-    public static final long WEEK_IN_MILLIS = DAY_IN_MILLIS * 7;
-
-    // Flags to specify whether or not to use 12 or 24 hour mode.
-    // Callers of methods in this class should never have to specify these; this is really
-    // intended only for unit tests.
-    @SuppressWarnings("deprecation")
-    @VisibleForTesting public static final int FORCE_12_HOUR = DateUtils.FORMAT_12HOUR;
-    @SuppressWarnings("deprecation")
-    @VisibleForTesting public static final int FORCE_24_HOUR = DateUtils.FORMAT_24HOUR;
-
-    /**
-     * Private default constructor
-     */
-    private Dates() {
-    }
-
-    private static Context getContext() {
-        return Factory.get().getApplicationContext();
-    }
-    /**
-     * Get the relative time as a string
-     *
-     * @param time The time
-     *
-     * @return The relative time
-     */
-    public static CharSequence getRelativeTimeSpanString(final long time) {
-        final long now = System.currentTimeMillis();
-        if (now - time < DateUtils.MINUTE_IN_MILLIS) {
-            // Also fixes bug where posts appear in the future
-            return getContext().getResources().getText(R.string.posted_just_now);
-        }
-
-        // Workaround for b/5657035. The platform method {@link DateUtils#getRelativeTimeSpan()}
-        // passes a null context to other platform methods. However, on some devices, this
-        // context is dereferenced when it shouldn't be and an NPE is thrown. We catch that
-        // here and use a slightly less precise time.
-        try {
-            return DateUtils.getRelativeTimeSpanString(time, now, DateUtils.MINUTE_IN_MILLIS,
-                    DateUtils.FORMAT_ABBREV_RELATIVE).toString();
-        } catch (final NullPointerException npe) {
-            return getShortRelativeTimeSpanString(time);
-        }
-    }
-
-    public static CharSequence getConversationTimeString(final long time) {
-        return getTimeString(time, true /*abbreviated*/, false /*minPeriodToday*/);
-    }
-
-    public static CharSequence getMessageTimeString(final long time) {
-        return getTimeString(time, false /*abbreviated*/, false /*minPeriodToday*/);
-    }
-
-    public static CharSequence getWidgetTimeString(final long time, final boolean abbreviated) {
-        return getTimeString(time, abbreviated, true /*minPeriodToday*/);
-    }
-
-    public static CharSequence getFastScrollPreviewTimeString(final long time) {
-        return getTimeString(time, true /* abbreviated */, true /* minPeriodToday */);
-    }
-
-    public static CharSequence getMessageDetailsTimeString(final long time) {
-        final Context context = getContext();
-        int flags;
-        if (android.text.format.DateFormat.is24HourFormat(context)) {
-            flags = FORCE_24_HOUR;
-        } else {
-            flags = FORCE_12_HOUR;
-        }
-        return getOlderThanAYearTimestamp(time,
-                context.getResources().getConfiguration().locale, false /*abbreviated*/,
-                flags);
-    }
-
-    private static CharSequence getTimeString(final long time, final boolean abbreviated,
-            final boolean minPeriodToday) {
-        final Context context = getContext();
-        int flags;
-        if (android.text.format.DateFormat.is24HourFormat(context)) {
-            flags = FORCE_24_HOUR;
-        } else {
-            flags = FORCE_12_HOUR;
-        }
-        return getTimestamp(time, System.currentTimeMillis(), abbreviated,
-                context.getResources().getConfiguration().locale, flags, minPeriodToday);
-    }
-
-    @VisibleForTesting
-    public static CharSequence getTimestamp(final long time, final long now,
-            final boolean abbreviated, final Locale locale, final int flags,
-            final boolean minPeriodToday) {
-        final long timeDiff = now - time;
-
-        if (!minPeriodToday && timeDiff < DateUtils.MINUTE_IN_MILLIS) {
-            return getLessThanAMinuteOldTimeString(abbreviated);
-        } else if (!minPeriodToday && timeDiff < DateUtils.HOUR_IN_MILLIS) {
-            return getLessThanAnHourOldTimeString(timeDiff, flags);
-        } else if (getNumberOfDaysPassed(time, now) == 0) {
-            return getTodayTimeStamp(time, flags);
-        } else if (timeDiff < DateUtils.WEEK_IN_MILLIS) {
-            return getThisWeekTimestamp(time, locale, abbreviated, flags);
-        } else if (timeDiff < DateUtils.YEAR_IN_MILLIS) {
-            return getThisYearTimestamp(time, locale, abbreviated, flags);
-        } else {
-            return getOlderThanAYearTimestamp(time, locale, abbreviated, flags);
-        }
-    }
-
-    private static CharSequence getLessThanAMinuteOldTimeString(
-            final boolean abbreviated) {
-        return getContext().getResources().getText(
-                abbreviated ? R.string.posted_just_now : R.string.posted_now);
-    }
-
-    private static CharSequence getLessThanAnHourOldTimeString(final long timeDiff,
-            final int flags) {
-        final long count = (timeDiff / MINUTE_IN_MILLIS);
-        final String format = getContext().getResources().getQuantityString(
-                R.plurals.num_minutes_ago, (int) count);
-        return String.format(format, count);
-    }
-
-    private static CharSequence getTodayTimeStamp(final long time, final int flags) {
-        return DateUtils.formatDateTime(getContext(), time,
-                DateUtils.FORMAT_SHOW_TIME | flags);
-    }
-
-    private static CharSequence getExplicitFormattedTime(final long time, final int flags,
-            final String format24, final String format12) {
-        SimpleDateFormat formatter;
-        if ((flags & FORCE_24_HOUR) == FORCE_24_HOUR) {
-            formatter = new SimpleDateFormat(format24);
-        } else {
-            formatter = new SimpleDateFormat(format12);
-        }
-        return formatter.format(new Date(time));
-    }
-
-    private static CharSequence getThisWeekTimestamp(final long time,
-            final Locale locale, final boolean abbreviated, final int flags) {
-        final Context context = getContext();
-        if (abbreviated) {
-            return DateUtils.formatDateTime(context, time,
-                    DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_ABBREV_WEEKDAY | flags);
-        } else {
-            if (locale.equals(Locale.US)) {
-                return getExplicitFormattedTime(time, flags, "EEE HH:mm", "EEE h:mmaa");
-            } else {
-                return DateUtils.formatDateTime(context, time,
-                        DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_SHOW_TIME
-                        | DateUtils.FORMAT_ABBREV_WEEKDAY
-                        | flags);
-            }
-        }
-    }
-
-    private static CharSequence getThisYearTimestamp(final long time, final Locale locale,
-            final boolean abbreviated, final int flags) {
-        final Context context = getContext();
-        if (abbreviated) {
-            return DateUtils.formatDateTime(context, time,
-                    DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_MONTH
-                    | DateUtils.FORMAT_NO_YEAR | flags);
-        } else {
-            if (locale.equals(Locale.US)) {
-                return getExplicitFormattedTime(time, flags, "MMM d, HH:mm", "MMM d, h:mmaa");
-            } else {
-                return DateUtils.formatDateTime(context, time,
-                        DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME
-                        | DateUtils.FORMAT_ABBREV_MONTH
-                        | DateUtils.FORMAT_NO_YEAR
-                        | flags);
-            }
-        }
-    }
-
-    private static CharSequence getOlderThanAYearTimestamp(final long time,
-            final Locale locale, final boolean abbreviated, final int flags) {
-        final Context context = getContext();
-        if (abbreviated) {
-            if (locale.equals(Locale.US)) {
-                return getExplicitFormattedTime(time, flags, "M/d/yy", "M/d/yy");
-            } else {
-                return DateUtils.formatDateTime(context, time,
-                        DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR
-                        | DateUtils.FORMAT_NUMERIC_DATE);
-            }
-        } else {
-            if (locale.equals(Locale.US)) {
-                return getExplicitFormattedTime(time, flags, "M/d/yy, HH:mm", "M/d/yy, h:mmaa");
-            } else {
-                return DateUtils.formatDateTime(context, time,
-                        DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME
-                        | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_YEAR
-                        | flags);
-            }
-        }
-    }
-
-    public static CharSequence getShortRelativeTimeSpanString(final long time) {
-        final long now = System.currentTimeMillis();
-        final long duration = Math.abs(now - time);
-
-        int resId;
-        long count;
-
-        final Context context = getContext();
-
-        if (duration < HOUR_IN_MILLIS) {
-            count = duration / MINUTE_IN_MILLIS;
-            resId = R.plurals.num_minutes_ago;
-        } else if (duration < DAY_IN_MILLIS) {
-            count = duration / HOUR_IN_MILLIS;
-            resId = R.plurals.num_hours_ago;
-        } else if (duration < WEEK_IN_MILLIS) {
-            count = getNumberOfDaysPassed(time, now);
-            resId = R.plurals.num_days_ago;
-        } else {
-            // Although we won't be showing a time, there is a bug on some devices that use
-            // the passed in context. On these devices, passing in a {@code null} context
-            // here will generate an NPE. See b/5657035.
-            return DateUtils.formatDateRange(context, time, time,
-                    DateUtils.FORMAT_ABBREV_MONTH | DateUtils.FORMAT_ABBREV_RELATIVE);
-        }
-
-        final String format = context.getResources().getQuantityString(resId, (int) count);
-        return String.format(format, count);
-    }
-
-    private static long getNumberOfDaysPassed(final long date1, final long date2) {
-        LocalDateTime dateTime1 = LocalDateTime.ofInstant(Instant.ofEpochMilli(date1),
-                                                          ZoneId.systemDefault());
-        LocalDateTime dateTime2 = LocalDateTime.ofInstant(Instant.ofEpochMilli(date2),
-                                                          ZoneId.systemDefault());
-        return Math.abs(ChronoUnit.DAYS.between(dateTime2, dateTime1));
-    }
-}
diff --git a/src/com/android/messaging/util/DebugUtils.java b/src/com/android/messaging/util/DebugUtils.java
deleted file mode 100644
index 6e33f48..0000000
--- a/src/com/android/messaging/util/DebugUtils.java
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.media.MediaPlayer;
-import android.net.Uri;
-import android.os.Environment;
-import android.telephony.SmsMessage;
-import android.text.TextUtils;
-import android.widget.ArrayAdapter;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.SyncManager;
-import com.android.messaging.datamodel.action.DumpDatabaseAction;
-import com.android.messaging.datamodel.action.LogTelephonyDatabaseAction;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.debug.DebugSmsMmsFromDumpFileDialogFragment;
-import com.google.common.io.ByteStreams;
-
-import java.io.BufferedInputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.StreamCorruptedException;
-
-public class DebugUtils {
-    private static final String TAG = "bugle.util.DebugUtils";
-
-    private static boolean sDebugNoise;
-    private static boolean sDebugClassZeroSms;
-    private static MediaPlayer [] sMediaPlayer;
-    private static final Object sLock = new Object();
-
-    public static final int DEBUG_SOUND_SERVER_REQUEST = 0;
-    public static final int DEBUG_SOUND_DB_OP = 1;
-
-    public static void maybePlayDebugNoise(final Context context, final int sound) {
-        if (sDebugNoise) {
-            synchronized (sLock) {
-                try {
-                    if (sMediaPlayer == null) {
-                        sMediaPlayer = new MediaPlayer[2];
-                        sMediaPlayer[DEBUG_SOUND_SERVER_REQUEST] =
-                                MediaPlayer.create(context, R.raw.server_request_debug);
-                        sMediaPlayer[DEBUG_SOUND_DB_OP] =
-                                MediaPlayer.create(context, R.raw.db_op_debug);
-                        sMediaPlayer[DEBUG_SOUND_DB_OP].setVolume(1.0F, 1.0F);
-                        sMediaPlayer[DEBUG_SOUND_SERVER_REQUEST].setVolume(0.3F, 0.3F);
-                    }
-                    if (sMediaPlayer[sound] != null) {
-                        sMediaPlayer[sound].start();
-                    }
-                } catch (final IllegalArgumentException e) {
-                    LogUtil.e(TAG, "MediaPlayer exception", e);
-                } catch (final SecurityException e) {
-                    LogUtil.e(TAG, "MediaPlayer exception", e);
-                } catch (final IllegalStateException e) {
-                    LogUtil.e(TAG, "MediaPlayer exception", e);
-                }
-            }
-        }
-    }
-
-    public static boolean isDebugEnabled() {
-        return BugleGservices.get().getBoolean(BugleGservicesKeys.ENABLE_DEBUGGING_FEATURES,
-                BugleGservicesKeys.ENABLE_DEBUGGING_FEATURES_DEFAULT);
-    }
-
-    public abstract static class DebugAction {
-        String mTitle;
-        public DebugAction(final String title) {
-            mTitle = title;
-        }
-
-        @Override
-        public String toString() {
-            return mTitle;
-        }
-
-        public abstract void run();
-    }
-
-    public static void showDebugOptions(final Activity host) {
-        final AlertDialog.Builder builder = new AlertDialog.Builder(host);
-
-        final ArrayAdapter<DebugAction> arrayAdapter = new ArrayAdapter<DebugAction>(
-                host, android.R.layout.simple_list_item_1);
-
-        arrayAdapter.add(new DebugAction("Dump Database") {
-            @Override
-            public void run() {
-                DumpDatabaseAction.dumpDatabase();
-            }
-        });
-
-        arrayAdapter.add(new DebugAction("Log Telephony Data") {
-            @Override
-            public void run() {
-                LogTelephonyDatabaseAction.dumpDatabase();
-            }
-        });
-
-        arrayAdapter.add(new DebugAction("Toggle Noise") {
-            @Override
-            public void run() {
-                sDebugNoise = !sDebugNoise;
-            }
-        });
-
-        arrayAdapter.add(new DebugAction("Force sync SMS") {
-            @Override
-            public void run() {
-                final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-                prefs.putLong(BuglePrefsKeys.LAST_FULL_SYNC_TIME, -1);
-                SyncManager.forceSync();
-            }
-        });
-
-        arrayAdapter.add(new DebugAction("Sync SMS") {
-            @Override
-            public void run() {
-                SyncManager.sync();
-            }
-        });
-
-        arrayAdapter.add(new DebugAction("Load SMS/MMS from dump file") {
-            @Override
-            public void run() {
-                new DebugSmsMmsDumpTask(host,
-                        DebugSmsMmsFromDumpFileDialogFragment.ACTION_LOAD).executeOnThreadPool();
-            }
-        });
-
-        arrayAdapter.add(new DebugAction("Email SMS/MMS dump file") {
-            @Override
-            public void run() {
-                new DebugSmsMmsDumpTask(host,
-                        DebugSmsMmsFromDumpFileDialogFragment.ACTION_EMAIL).executeOnThreadPool();
-            }
-        });
-
-        arrayAdapter.add(new DebugAction("MMS Config...") {
-            @Override
-            public void run() {
-                UIIntents.get().launchDebugMmsConfigActivity(host);
-            }
-        });
-
-        arrayAdapter.add(new DebugAction(sDebugClassZeroSms ? "Turn off Class 0 sms test" :
-                "Turn on Class Zero test") {
-            @Override
-            public void run() {
-                sDebugClassZeroSms = !sDebugClassZeroSms;
-            }
-        });
-
-        arrayAdapter.add(new DebugAction("Test sharing a file URI") {
-            @Override
-            public void run() {
-                shareFileUri();
-            }
-        });
-
-        builder.setAdapter(arrayAdapter,
-                new android.content.DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(final DialogInterface arg0, final int pos) {
-                arrayAdapter.getItem(pos).run();
-            }
-        });
-
-        builder.create().show();
-    }
-
-    /**
-     * Task to list all the dump files and perform an action on it
-     */
-    private static class DebugSmsMmsDumpTask extends SafeAsyncTask<Void, Void, String[]> {
-        private final String mAction;
-        private final Activity mHost;
-
-        public DebugSmsMmsDumpTask(final Activity host, final String action) {
-            mHost = host;
-            mAction = action;
-        }
-
-        @Override
-        protected void onPostExecute(final String[] result) {
-            if (result == null || result.length < 1) {
-                return;
-            }
-            final FragmentManager fragmentManager = mHost.getFragmentManager();
-            final FragmentTransaction ft = fragmentManager.beginTransaction();
-            final DebugSmsMmsFromDumpFileDialogFragment dialog =
-                    DebugSmsMmsFromDumpFileDialogFragment.newInstance(result, mAction);
-            dialog.show(fragmentManager, ""/*tag*/);
-        }
-
-        @Override
-        protected String[] doInBackgroundTimed(final Void... params) {
-            final File dir = DebugUtils.getDebugFilesDir();
-            return dir.list(new FilenameFilter() {
-                @Override
-                public boolean accept(final File dir, final String filename) {
-                    return filename != null
-                            && ((mAction == DebugSmsMmsFromDumpFileDialogFragment.ACTION_EMAIL
-                            && filename.equals(DumpDatabaseAction.DUMP_NAME))
-                            || filename.startsWith(MmsUtils.MMS_DUMP_PREFIX)
-                            || filename.startsWith(MmsUtils.SMS_DUMP_PREFIX));
-                }
-            });
-        }
-    }
-
-    /**
-     * Dump the received raw SMS data into a file on external storage
-     *
-     * @param id The ID to use as part of the dump file name
-     * @param messages The raw SMS data
-     */
-    public static void dumpSms(final long id, final android.telephony.SmsMessage[] messages,
-            final String format) {
-        try {
-            final String dumpFileName = MmsUtils.SMS_DUMP_PREFIX + Long.toString(id);
-            final File dumpFile = DebugUtils.getDebugFile(dumpFileName, true);
-            if (dumpFile != null) {
-                final FileOutputStream fos = new FileOutputStream(dumpFile);
-                final DataOutputStream dos = new DataOutputStream(fos);
-                try {
-                    final int chars = (TextUtils.isEmpty(format) ? 0 : format.length());
-                    dos.writeInt(chars);
-                    if (chars > 0) {
-                        dos.writeUTF(format);
-                    }
-                    dos.writeInt(messages.length);
-                    for (final android.telephony.SmsMessage message : messages) {
-                        final byte[] pdu = message.getPdu();
-                        dos.writeInt(pdu.length);
-                        dos.write(pdu, 0, pdu.length);
-                    }
-                    dos.flush();
-                } finally {
-                    dos.close();
-                    ensureReadable(dumpFile);
-                }
-            }
-        } catch (final IOException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "dumpSms: " + e, e);
-        }
-    }
-
-    /**
-     * Load MMS/SMS from the dump file
-     */
-    public static SmsMessage[] retreiveSmsFromDumpFile(final String dumpFileName) {
-        SmsMessage[] messages = null;
-        final File inputFile = DebugUtils.getDebugFile(dumpFileName, false);
-        if (inputFile != null) {
-            FileInputStream fis = null;
-            DataInputStream dis = null;
-            try {
-                fis = new FileInputStream(inputFile);
-                dis = new DataInputStream(fis);
-
-                // SMS dump
-                String format = null;
-                final int chars = dis.readInt();
-                if (chars > 0) {
-                    format = dis.readUTF();
-                }
-                final int count = dis.readInt();
-                final SmsMessage[] messagesTemp = new SmsMessage[count];
-                for (int i = 0; i < count; i++) {
-                    final int length = dis.readInt();
-                    final byte[] pdu = new byte[length];
-                    dis.read(pdu, 0, length);
-                    messagesTemp[i] =
-                            OsUtil.isAtLeastM()
-                                    ? SmsMessage.createFromPdu(pdu, format)
-                                    : SmsMessage.createFromPdu(pdu);
-                }
-                messages = messagesTemp;
-            } catch (final FileNotFoundException e) {
-                // Nothing to do
-            } catch (final StreamCorruptedException e) {
-                // Nothing to do
-            } catch (final IOException e) {
-                // Nothing to do
-            } finally {
-                if (dis != null) {
-                    try {
-                        dis.close();
-                    } catch (final IOException e) {
-                        // Nothing to do
-                    }
-                }
-            }
-        }
-        return messages;
-    }
-
-    public static File getDebugFile(final String fileName, final boolean create) {
-        final File dir = getDebugFilesDir();
-        final File file = new File(dir, fileName);
-        if (create && file.exists()) {
-            file.delete();
-        }
-        return file;
-    }
-
-    public static File getDebugFilesDir() {
-        final File dir = Environment.getExternalStorageDirectory();
-        return dir;
-    }
-
-    /**
-     * Load MMS/SMS from the dump file
-     */
-    public static byte[] receiveFromDumpFile(final String dumpFileName) {
-        byte[] data = null;
-        try {
-            final File inputFile = getDebugFile(dumpFileName, false);
-            if (inputFile != null) {
-                final FileInputStream fis = new FileInputStream(inputFile);
-                final BufferedInputStream bis = new BufferedInputStream(fis);
-                try {
-                    // dump file
-                    data = ByteStreams.toByteArray(bis);
-                    if (data == null || data.length < 1) {
-                        LogUtil.e(LogUtil.BUGLE_TAG, "receiveFromDumpFile: empty data");
-                    }
-                } finally {
-                    bis.close();
-                }
-            }
-        } catch (final IOException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "receiveFromDumpFile: " + e, e);
-        }
-        return data;
-    }
-
-    public static void ensureReadable(final File file) {
-        if (file.exists()){
-            file.setReadable(true, false);
-        }
-    }
-
-    /**
-     * Logs the name of the method that is currently executing, e.g. "MyActivity.onCreate". This is
-     * useful for surgically adding logs for tracing execution while debugging.
-     * <p>
-     * NOTE: This method retrieves the current thread's stack trace, which adds runtime overhead.
-     * However, this method is only executed on eng builds if DEBUG logs are loggable.
-     */
-    public static void logCurrentMethod(String tag) {
-        if (!LogUtil.isLoggable(tag, LogUtil.DEBUG)) {
-            return;
-        }
-        StackTraceElement caller = getCaller(1);
-        if (caller == null) {
-            return;
-        }
-        String className = caller.getClassName();
-        // Strip off the package name
-        int lastDot = className.lastIndexOf('.');
-        if (lastDot > -1) {
-            className = className.substring(lastDot + 1);
-        }
-        LogUtil.d(tag, className + "." + caller.getMethodName());
-    }
-
-    /**
-     * Returns info about the calling method. The {@code depth} parameter controls how far back to
-     * go. For example, if foo() calls bar(), and bar() calls getCaller(0), it returns info about
-     * bar(). If bar() instead called getCaller(1), it would return info about foo(). And so on.
-     * <p>
-     * NOTE: This method retrieves the current thread's stack trace, which adds runtime overhead.
-     * It should only be used in production where necessary to gather context about an error or
-     * unexpected event (e.g. the {@link Assert} class uses it).
-     *
-     * @return stack frame information for the caller (if found); otherwise {@code null}.
-     */
-    public static StackTraceElement getCaller(int depth) {
-        // If the signature of this method is changed, proguard.flags must be updated!
-        if (depth < 0) {
-            throw new IllegalArgumentException("depth cannot be negative");
-        }
-        StackTraceElement[] trace = Thread.currentThread().getStackTrace();
-        if (trace == null || trace.length < (depth + 2)) {
-            return null;
-        }
-        // The stack trace includes some methods we don't care about (e.g. this method).
-        // Walk down until we find this method, and then back up to the caller we're looking for.
-        for (int i = 0; i < trace.length - 1; i++) {
-            String methodName = trace[i].getMethodName();
-            if ("getCaller".equals(methodName)) {
-                return trace[i + depth + 1];
-            }
-        }
-        // Never found ourself in the stack?!
-        return null;
-    }
-
-    /**
-     * Returns a boolean indicating whether ClassZero debugging is enabled. If enabled, any received
-     * sms is treated as if it were a class zero message and displayed by the ClassZeroActivity.
-     */
-    public static boolean debugClassZeroSmsEnabled() {
-        return sDebugClassZeroSms;
-    }
-
-    /** Shares a ringtone file via file URI. */
-    private static void shareFileUri() {
-        final String packageName = "com.android.messaging";
-        final String fileName = "/system/media/audio/ringtones/Andromeda.ogg";
-
-        Intent intent = new Intent(Intent.ACTION_SEND);
-        intent.setPackage(packageName);
-        intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + fileName));
-        intent.setType("image/*");
-        Factory.get().getApplicationContext().startActivity(intent);
-    }
-}
diff --git a/src/com/android/messaging/util/EmailAddress.java b/src/com/android/messaging/util/EmailAddress.java
deleted file mode 100644
index c59170e..0000000
--- a/src/com/android/messaging/util/EmailAddress.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import com.google.common.base.CharMatcher;
-
-/**
- * Parsing the email address
- */
-public final class EmailAddress {
-    private static final CharMatcher ANY_WHITESPACE = CharMatcher.anyOf(
-            " \t\n\r\f\u000B\u0085\u2028\u2029\u200D\uFFEF\uFFFD\uFFFE\uFFFF");
-    private static final CharMatcher EMAIL_ALLOWED_CHARS = CharMatcher.inRange((char) 0, (char) 31)
-            .or(CharMatcher.is((char) 127))
-            .or(CharMatcher.anyOf(" @,:<>"))
-            .negate();
-
-    /**
-     * Helper method that checks whether the input text is valid email address.
-     * TODO: This creates a new EmailAddress object each time
-     * Need to make it more lightweight by pulling out the validation code into a static method.
-     */
-    public static boolean isValidEmail(final String emailText) {
-        return new EmailAddress(emailText).isValid();
-    }
-
-    /**
-     * Parses the specified email address. Internationalized addresses are treated as invalid.
-     *
-     * @param emailString A string representing just an email address. It should
-     * not contain any other tokens. <code>"Name&lt;foo@example.org>"</code> won't be valid.
-     */
-    public EmailAddress(final String emailString) {
-        this(emailString, false);
-    }
-
-    /**
-     * Parses the specified email address.
-     *
-     * @param emailString A string representing just an email address. It should
-     * not contain any other tokens. <code>"Name&lt;foo@example.org>"</code> won't be valid.
-     * @param i18n Accept an internationalized address if it is true.
-     */
-    public EmailAddress(final String emailString, final boolean i18n) {
-        allowI18n = i18n;
-        valid = parseEmail(emailString);
-    }
-
-    /**
-     * Parses the specified email address. Internationalized addresses are treated as invalid.
-     *
-     * @param user A string representing the username in the email prior to the '@' symbol
-     * @param host A string representing the host following the '@' symbol
-     */
-    public EmailAddress(final String user, final String host) {
-        this(user, host, false);
-    }
-
-    /**
-     * Parses the specified email address.
-     *
-     * @param user A string representing the username in the email prior to the '@' symbol
-     * @param host A string representing the host following the '@' symbol
-     * @param i18n Accept an internationalized address if it is true.
-     */
-    public EmailAddress(final String user, final String host, final boolean i18n) {
-        allowI18n = i18n;
-        this.user = user;
-        setHost(host);
-    }
-
-    protected boolean parseEmail(final String emailString) {
-        // check for null
-        if (emailString == null) {
-            return false;
-        }
-
-        // Check for an '@' character. Get the last one, in case the local part is
-        // quoted. See http://b/1944742.
-        final int atIndex = emailString.lastIndexOf('@');
-        if ((atIndex <= 0) || // no '@' character in the email address
-                              // or @ on the first position
-                (atIndex == (emailString.length() - 1))) { // last character, no host
-            return false;
-        }
-
-        user = emailString.substring(0, atIndex);
-        host = emailString.substring(atIndex + 1);
-
-        return isValidInternal();
-    }
-
-    @Override
-    public String toString() {
-        return user + "@" + host;
-    }
-
-    /**
-     * Ensure the email address is valid, conforming to current RFC2821 and
-     * RFC2822 guidelines (although some iffy characters, like ! and ;, are
-     * allowed because they are not technically prohibited in the RFC)
-     */
-    private boolean isValidInternal() {
-        if ((user == null) || (host == null)) {
-            return false;
-        }
-
-        if ((user.length() == 0) || (host.length() == 0)) {
-            return false;
-        }
-
-        // check for white space in the host
-        if (ANY_WHITESPACE.indexIn(host) >= 0) {
-            return false;
-        }
-
-        // ensure the host is above the minimum length
-        if (host.length() < 4) {
-            return false;
-        }
-
-        final int firstDot = host.indexOf('.');
-
-        // ensure host contains at least one dot
-        if (firstDot == -1) {
-            return false;
-        }
-
-        // check if the host contains two continuous dots.
-        if (host.indexOf("..") >= 0) {
-            return false;
-        }
-
-        // check if the first host char is a dot.
-        if (host.charAt(0) == '.') {
-            return false;
-        }
-
-        final int secondDot = host.indexOf(".", firstDot + 1);
-
-        // if there's a dot at the end, there needs to be a second dot
-        if (host.charAt(host.length() - 1) == '.' && secondDot == -1) {
-            return false;
-        }
-
-        // Host must not have any disallowed characters; allowI18n dictates whether
-        // host must be ASCII.
-        if (!EMAIL_ALLOWED_CHARS.matchesAllOf(host)
-                || (!allowI18n && !CharMatcher.ascii().matchesAllOf(host))) {
-            return false;
-        }
-
-        if (user.startsWith("\"")) {
-            if (!isQuotedUserValid()) {
-                return false;
-            }
-        } else {
-            // check for white space in the user
-            if (ANY_WHITESPACE.indexIn(user) >= 0) {
-                return false;
-            }
-
-            // the user cannot contain two continuous dots
-            if (user.indexOf("..") >= 0) {
-                return false;
-            }
-
-            // User must not have any disallowed characters; allow I18n dictates whether
-            // user must be ASCII.
-            if (!EMAIL_ALLOWED_CHARS.matchesAllOf(user)
-                    || (!allowI18n && !CharMatcher.ascii().matchesAllOf(user))) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private boolean isQuotedUserValid() {
-        final int limit = user.length() - 1;
-        if (limit < 1 || !user.endsWith("\"")) {
-            return false;
-        }
-
-        // Unusual loop bounds (looking only at characters between the outer quotes,
-        // not at either quote character). Plus, i is manipulated within the loop.
-        for (int i = 1; i < limit; ++i) {
-            final char ch = user.charAt(i);
-            if (ch == '"' || ch == 127
-                    // No non-whitespace control chars:
-                    || (ch < 32 && !ANY_WHITESPACE.matches(ch))
-                    // No non-ASCII chars, unless i18n is in effect:
-                    || (ch >= 128 && !allowI18n)) {
-                return false;
-            } else if (ch == '\\') {
-                if (i + 1 < limit) {
-                    ++i; // Skip the quoted character
-                } else {
-                    // We have a trailing backslash -- so it can't be quoting anything.
-                    return false;
-                }
-            }
-        }
-
-        return true;
-    }
-
-    @Override
-    public boolean equals(final Object otherObject) {
-        // Do an instance check first as an optimization.
-        if (this == otherObject) {
-            return true;
-        }
-        if (otherObject instanceof EmailAddress) {
-            final EmailAddress otherAddress = (EmailAddress) otherObject;
-            return toString().equals(otherAddress.toString());
-        }
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        // Arbitrary hash code as a function of both host and user.
-        return toString().hashCode();
-    }
-
-    // accessors
-    public boolean isValid() {
-        return valid;
-    }
-
-    public String getUser() {
-        return user;
-    }
-
-    public String getHost() {
-        return host;
-    }
-
-    // used to change the host on an email address and rechecks validity
-
-    /**
-     * Changes the host name of the email address and rechecks the address'
-     * validity. Exercise caution when storing EmailAddress instances in
-     * hash-keyed collections. Calling setHost() with a different host name will
-     * change the return value of hashCode.
-     *
-     * @param hostName The new host name of the email address.
-     */
-    public void setHost(final String hostName) {
-        host = hostName;
-        valid = isValidInternal();
-    }
-
-    protected boolean valid = false;
-    protected String user = null;
-    protected String host = null;
-    protected boolean allowI18n = false;
-}
diff --git a/src/com/android/messaging/util/FallbackStrategies.java b/src/com/android/messaging/util/FallbackStrategies.java
deleted file mode 100644
index 57c208f..0000000
--- a/src/com/android/messaging/util/FallbackStrategies.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Provides a generic and loose-coupled framework to execute one primary and multiple fallback
- * strategies for solving a given task.<p>
- * Basically, what would have been a nasty try-catch that's hard to separate and maintain:
- * <pre><code>
- * try {
- *     // doSomething() that may fail.
- * } catch (Exception ex) {
- *     try {
- *         // fallback1() that may fail.
- *     } catch (Exception ex2) {
- *         try {
- *             // fallback2() that may fail.
- *         } catch (Exception ex3) {
- *             // ...
- *         }
- *     }
- * }
- * </code></pre>
- * Now becomes:<br>
- * <pre><code>
- * FallbackStrategies
- *      .startWith(something)
- *      .thenTry(fallback1)
- *      .thenTry(fallback2)
- *      .execute();
- * </code></pre>
- */
-public class FallbackStrategies<Input, Output> {
-    public interface Strategy<Input, Output> {
-        Output execute(Input params) throws Exception;
-    }
-
-    private final List<Strategy<Input, Output>> mChainedStrategies;
-
-    private FallbackStrategies(final Strategy<Input, Output> primaryStrategy) {
-        mChainedStrategies = new ArrayList<Strategy<Input, Output>>();
-        mChainedStrategies.add(primaryStrategy);
-    }
-
-    public static <Input, Output> FallbackStrategies<Input, Output> startWith(
-            final Strategy<Input, Output> primaryStrategy) {
-        return new FallbackStrategies<Input, Output>(primaryStrategy);
-    }
-
-    public FallbackStrategies<Input, Output> thenTry(final Strategy<Input, Output> strategy) {
-        Assert.isFalse(mChainedStrategies.isEmpty());
-        mChainedStrategies.add(strategy);
-        return this;
-    }
-
-    public Output execute(final Input params) {
-        final int count = mChainedStrategies.size();
-        for (int i = 0; i < count; i++) {
-            final Strategy<Input, Output> strategy = mChainedStrategies.get(i);
-            try {
-                // If succeeds, this will directly return.
-                return strategy.execute(params);
-            } catch (Exception ex) {
-                LogUtil.e(LogUtil.BUGLE_TAG, "Exceptions occured when executing strategy " +
-                        strategy + (i < count - 1 ?
-                                ", attempting fallback " + mChainedStrategies.get(i + 1) :
-                                ", and running out of fallbacks."), ex);
-                // This will fall through and continue with the next strategy (if any).
-            }
-        }
-        // Running out of strategies, return null.
-        // TODO: Should this accept user-defined fallback value other than null?
-        return null;
-    }
-}
diff --git a/src/com/android/messaging/util/FileUtil.java b/src/com/android/messaging/util/FileUtil.java
deleted file mode 100644
index e7d86f2..0000000
--- a/src/com/android/messaging/util/FileUtil.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Environment;
-import android.os.ParcelFileDescriptor;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.google.common.io.Files;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-public class FileUtil {
-    /** Returns a new file name, ensuring that such a file does not already exist. */
-    private static synchronized File getNewFile(File directory, String extension,
-            String fileNameFormat) throws IOException {
-        final Date date = new Date(System.currentTimeMillis());
-        final SimpleDateFormat dateFormat = new SimpleDateFormat(fileNameFormat);
-        final String numberedFileNameFormat = dateFormat.format(date) + "_%02d" + "." + extension;
-        for (int i = 1; i <= 99; i++) { // Only save 99 of the same file name.
-            final String newName = String.format(Locale.US, numberedFileNameFormat, i);
-            File testFile = new File(directory, newName);
-            if (!testFile.exists()) {
-                testFile.createNewFile();
-                return testFile;
-            }
-        }
-        LogUtil.e(LogUtil.BUGLE_TAG, "Too many duplicate file names: " + numberedFileNameFormat);
-        return null;
-    }
-
-    /**
-     * Creates an unused name to use for creating a new file. The format happens to be similar
-     * to that used by the Android camera application.
-     *
-     * @param directory directory that the file should be saved to
-     * @param contentType of the media being saved
-     * @return file name to be used for creating the new file. The caller is responsible for
-     *   actually creating the file.
-     */
-    public static File getNewFile(File directory, String contentType) throws IOException {
-        String fileExtension = ContentType.getExtensionFromMimeType(contentType);
-        final Context context = Factory.get().getApplicationContext();
-        String fileNameFormat = context.getString(ContentType.isImageType(contentType)
-                ? R.string.new_image_file_name_format : R.string.new_file_name_format);
-        return getNewFile(directory, fileExtension, fileNameFormat);
-    }
-
-    /** Delete everything below and including root */
-    public static void removeFileOrDirectory(File root) {
-        removeFileOrDirectoryExcept(root, null);
-    }
-
-    /** Delete everything below and including root except for the given file */
-    public static void removeFileOrDirectoryExcept(File root, File exclude) {
-        if (root.exists()) {
-            if (root.isDirectory()) {
-                for (File file : root.listFiles()) {
-                    if (exclude == null || !file.equals(exclude)) {
-                        removeFileOrDirectoryExcept(file, exclude);
-                    }
-                }
-                root.delete();
-            } else if (root.isFile()) {
-                root.delete();
-            }
-        }
-    }
-
-    /**
-     * Move all files and folders under a directory into the target.
-     */
-    public static void moveAllContentUnderDirectory(File sourceDir, File targetDir) {
-        if (sourceDir.isDirectory() && targetDir.isDirectory()) {
-            if (isSameOrSubDirectory(sourceDir, targetDir)) {
-                LogUtil.e(LogUtil.BUGLE_TAG, "Can't move directory content since the source " +
-                        "directory is a parent of the target");
-                return;
-            }
-            for (File file : sourceDir.listFiles()) {
-                if (file.isDirectory()) {
-                    final File dirTarget = new File(targetDir, file.getName());
-                    dirTarget.mkdirs();
-                    moveAllContentUnderDirectory(file, dirTarget);
-                } else {
-                    try {
-                        final File fileTarget = new File(targetDir, file.getName());
-                        Files.move(file, fileTarget);
-                    } catch (IOException e) {
-                        LogUtil.e(LogUtil.BUGLE_TAG, "Failed to move files", e);
-                        // Try proceed with the next file.
-                    }
-                }
-            }
-        }
-    }
-
-    // Checks if the file is in /data, and don't allow any app to send personal information.
-    // We're told it's possible to create world readable hardlinks to other apps private data
-    // so we ban all /data file uris.
-    public static boolean isInPrivateDir(Uri uri) {
-        return isFileUriInPrivateDir(uri) || isContentUriInPrivateDir(uri);
-    }
-
-    private static boolean isFileUriInPrivateDir(Uri uri) {
-        if (!UriUtil.isFileUri(uri)) {
-            return false;
-        }
-        final File file = new File(uri.getPath());
-        return FileUtil.isSameOrSubDirectory(Environment.getDataDirectory(), file);
-    }
-
-    private static boolean isContentUriInPrivateDir(Uri uri) {
-        if (!uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
-            return false;
-        }
-        try {
-            Context context = Factory.get().getApplicationContext();
-            ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
-            int fd = pfd.getFd();
-            // Use the file descriptor to find out the read file path through symbolic link.
-            Path fdPath = Paths.get("/proc/self/fd/" + fd);
-            Path filePath = java.nio.file.Files.readSymbolicLink(fdPath);
-            pfd.close();
-            return FileUtil.isSameOrSubDirectory(Environment.getDataDirectory(), filePath.toFile());
-        } catch (Exception e) {
-            return false;
-        }
-    }
-
-    /**
-     * Checks, whether the child directory is the same as, or a sub-directory of the base
-     * directory.
-     */
-    private static boolean isSameOrSubDirectory(File base, File child) {
-        try {
-            base = base.getCanonicalFile();
-            child = child.getCanonicalFile();
-            File parentFile = child;
-            while (parentFile != null) {
-                if (base.equals(parentFile)) {
-                    return true;
-                }
-                parentFile = parentFile.getParentFile();
-            }
-            return false;
-        } catch (IOException ex) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Error while accessing file", ex);
-            return false;
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/GifTranscoder.java b/src/com/android/messaging/util/GifTranscoder.java
deleted file mode 100644
index 65413a0..0000000
--- a/src/com/android/messaging/util/GifTranscoder.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.text.format.Formatter;
-
-import com.google.common.base.Stopwatch;
-
-import java.io.File;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Compresses a GIF so it can be sent via MMS.
- * <p>
- * The entry point lives in its own class, we can defer loading the native GIF transcoding library
- * into memory until we actually need it.
- */
-public class GifTranscoder {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static int MIN_HEIGHT = 100;
-    private static int MIN_WIDTH = 100;
-
-    static {
-        System.loadLibrary("giftranscode");
-    }
-
-    public static boolean transcode(Context context, String filePath, String outFilePath) {
-        if (!isEnabled()) {
-            return false;
-        }
-        final long inputSize = new File(filePath).length();
-        Stopwatch stopwatch = Stopwatch.createStarted();
-        final boolean success = transcodeInternal(filePath, outFilePath);
-        stopwatch.stop();
-        final long elapsedMs = stopwatch.elapsed(TimeUnit.MILLISECONDS);
-        final long outputSize = new File(outFilePath).length();
-        final float compression = (inputSize > 0) ? ((float) outputSize / inputSize) : 0;
-
-        if (success) {
-            LogUtil.i(TAG, String.format("Resized GIF (%s) in %d ms, %s => %s (%.0f%%)",
-                    LogUtil.sanitizePII(filePath),
-                    elapsedMs,
-                    Formatter.formatShortFileSize(context, inputSize),
-                    Formatter.formatShortFileSize(context, outputSize),
-                    compression * 100.0f));
-        }
-        return success;
-    }
-
-    private static native boolean transcodeInternal(String filePath, String outFilePath);
-
-    /**
-     * Estimates the size of a GIF transcoded from a GIF with the specified size.
-     */
-    public static long estimateFileSizeAfterTranscode(long fileSize) {
-        // I tested transcoding on ~70 GIFs and found that the transcoded files are in general
-        // about 25-35% the size of the original. This compression ratio is very consistent for the
-        // class of GIFs we care about most: those converted from video clips and 1-3 MB in size.
-        return (long) (fileSize * 0.35f);
-    }
-
-    public static boolean canBeTranscoded(int width, int height) {
-        if (!isEnabled()) {
-            return false;
-        }
-        return width >= MIN_WIDTH && height >= MIN_HEIGHT;
-    }
-
-    private static boolean isEnabled() {
-        final boolean enabled = BugleGservices.get().getBoolean(
-                BugleGservicesKeys.ENABLE_GIF_TRANSCODING,
-                BugleGservicesKeys.ENABLE_GIF_TRANSCODING_DEFAULT);
-        if (!enabled) {
-            LogUtil.w(TAG, "GIF transcoding is disabled");
-        }
-        return enabled;
-    }
-}
diff --git a/src/com/android/messaging/util/ImageUtils.java b/src/com/android/messaging/util/ImageUtils.java
deleted file mode 100644
index e541d69..0000000
--- a/src/com/android/messaging/util/ImageUtils.java
+++ /dev/null
@@ -1,911 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.app.ActivityManager;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.BitmapShader;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.PorterDuff;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Shader.TileMode;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.provider.MediaStore;
-import androidx.annotation.Nullable;
-import android.text.TextUtils;
-import android.view.View;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.media.ImageRequest;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.android.messaging.util.exif.ExifInterface;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.io.Files;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.util.Arrays;
-
-public class ImageUtils {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-    private static final int MAX_OOM_COUNT = 1;
-    private static final byte[] GIF87_HEADER = "GIF87a".getBytes(Charset.forName("US-ASCII"));
-    private static final byte[] GIF89_HEADER = "GIF89a".getBytes(Charset.forName("US-ASCII"));
-
-    // Used for drawBitmapWithCircleOnCanvas.
-    // Default color is transparent for both circle background and stroke.
-    public static final int DEFAULT_CIRCLE_BACKGROUND_COLOR = 0;
-    public static final int DEFAULT_CIRCLE_STROKE_COLOR = 0;
-
-    private static volatile ImageUtils sInstance;
-
-    public static ImageUtils get() {
-        if (sInstance == null) {
-            synchronized (ImageUtils.class) {
-                if (sInstance == null) {
-                    sInstance = new ImageUtils();
-                }
-            }
-        }
-        return sInstance;
-    }
-
-    @VisibleForTesting
-    public static void set(final ImageUtils imageUtils) {
-        sInstance = imageUtils;
-    }
-
-    /**
-     * Transforms a bitmap into a byte array.
-     *
-     * @param quality Value between 0 and 100 that the compressor uses to discern what quality the
-     *                resulting bytes should be
-     * @param bitmap Bitmap to convert into bytes
-     * @return byte array of bitmap
-     */
-    public static byte[] bitmapToBytes(final Bitmap bitmap, final int quality)
-            throws OutOfMemoryError {
-        boolean done = false;
-        int oomCount = 0;
-        byte[] imageBytes = null;
-        while (!done) {
-            try {
-                final ByteArrayOutputStream os = new ByteArrayOutputStream();
-                bitmap.compress(Bitmap.CompressFormat.JPEG, quality, os);
-                imageBytes = os.toByteArray();
-                done = true;
-            } catch (final OutOfMemoryError e) {
-                LogUtil.w(TAG, "OutOfMemory converting bitmap to bytes.");
-                oomCount++;
-                if (oomCount <= MAX_OOM_COUNT) {
-                    Factory.get().reclaimMemory();
-                } else {
-                    done = true;
-                    LogUtil.w(TAG, "Failed to convert bitmap to bytes. Out of Memory.");
-                }
-                throw e;
-            }
-        }
-        return imageBytes;
-    }
-
-    /**
-     * Given the source bitmap and a canvas, draws the bitmap through a circular
-     * mask. Only draws a circle with diameter equal to the destination width.
-     *
-     * @param bitmap The source bitmap to draw.
-     * @param canvas The canvas to draw it on.
-     * @param source The source bound of the bitmap.
-     * @param dest The destination bound on the canvas.
-     * @param bitmapPaint Optional Paint object for the bitmap
-     * @param fillBackground when set, fill the circle with backgroundColor
-     * @param strokeColor draw a border outside the circle with strokeColor
-     */
-    public static void drawBitmapWithCircleOnCanvas(final Bitmap bitmap, final Canvas canvas,
-            final RectF source, final RectF dest, @Nullable Paint bitmapPaint,
-            final boolean fillBackground, final int backgroundColor, int strokeColor) {
-        // Draw bitmap through shader first.
-        final BitmapShader shader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
-        final Matrix matrix = new Matrix();
-
-        // Fit bitmap to bounds.
-        matrix.setRectToRect(source, dest, Matrix.ScaleToFit.CENTER);
-
-        shader.setLocalMatrix(matrix);
-
-        if (bitmapPaint == null) {
-            bitmapPaint = new Paint();
-        }
-
-        bitmapPaint.setAntiAlias(true);
-        if (fillBackground) {
-            bitmapPaint.setColor(backgroundColor);
-            canvas.drawCircle(dest.centerX(), dest.centerX(), dest.width() / 2f, bitmapPaint);
-        }
-
-        bitmapPaint.setShader(shader);
-        canvas.drawCircle(dest.centerX(), dest.centerX(), dest.width() / 2f, bitmapPaint);
-        bitmapPaint.setShader(null);
-
-        if (strokeColor != 0) {
-            final Paint stroke = new Paint();
-            stroke.setAntiAlias(true);
-            stroke.setColor(strokeColor);
-            stroke.setStyle(Paint.Style.STROKE);
-            final float strokeWidth = 6f;
-            stroke.setStrokeWidth(strokeWidth);
-            canvas.drawCircle(dest.centerX(),
-                    dest.centerX(),
-                    dest.width() / 2f - stroke.getStrokeWidth() / 2f,
-                    stroke);
-        }
-    }
-
-    /**
-     * Sets a drawable to the background of a view. setBackgroundDrawable() is deprecated since
-     * JB and replaced by setBackground().
-     */
-    @SuppressWarnings("deprecation")
-    public static void setBackgroundDrawableOnView(final View view, final Drawable drawable) {
-        if (OsUtil.isAtLeastJB()) {
-            view.setBackground(drawable);
-        } else {
-            view.setBackgroundDrawable(drawable);
-        }
-    }
-
-    /**
-     * Based on the input bitmap bounds given by BitmapFactory.Options, compute the required
-     * sub-sampling size for loading a scaled down version of the bitmap to the required size
-     * @param options a BitmapFactory.Options instance containing the bounds info of the bitmap
-     * @param reqWidth the desired width of the bitmap. Can be ImageRequest.UNSPECIFIED_SIZE.
-     * @param reqHeight the desired height of the bitmap.  Can be ImageRequest.UNSPECIFIED_SIZE.
-     * @return
-     */
-    public int calculateInSampleSize(
-            final BitmapFactory.Options options, final int reqWidth, final int reqHeight) {
-        // Raw height and width of image
-        final int height = options.outHeight;
-        final int width = options.outWidth;
-        int inSampleSize = 1;
-
-        final boolean checkHeight = reqHeight != ImageRequest.UNSPECIFIED_SIZE;
-        final boolean checkWidth = reqWidth != ImageRequest.UNSPECIFIED_SIZE;
-        if ((checkHeight && height > reqHeight) ||
-                (checkWidth && width > reqWidth)) {
-
-            final int halfHeight = height / 2;
-            final int halfWidth = width / 2;
-
-            // Calculate the largest inSampleSize value that is a power of 2 and keeps both
-            // height and width larger than the requested height and width.
-            while ((!checkHeight || (halfHeight / inSampleSize) > reqHeight)
-                    && (!checkWidth || (halfWidth / inSampleSize) > reqWidth)) {
-                inSampleSize *= 2;
-            }
-        }
-
-        return inSampleSize;
-    }
-
-    private static final String[] MEDIA_CONTENT_PROJECTION = new String[] {
-        MediaStore.MediaColumns.MIME_TYPE
-    };
-
-    private static final int INDEX_CONTENT_TYPE = 0;
-
-    @DoesNotRunOnMainThread
-    public static String getContentType(final ContentResolver cr, final Uri uri) {
-        // Figure out the content type of media.
-        String contentType = null;
-        Cursor cursor = null;
-        if (UriUtil.isMediaStoreUri(uri)) {
-            try {
-                cursor = cr.query(uri, MEDIA_CONTENT_PROJECTION, null, null, null);
-
-                if (cursor != null && cursor.moveToFirst()) {
-                    contentType = cursor.getString(INDEX_CONTENT_TYPE);
-                }
-            } finally {
-                if (cursor != null) {
-                    cursor.close();
-                }
-            }
-        }
-        if (contentType == null) {
-            // Last ditch effort to get the content type. Look at the file extension.
-            contentType = ContentType.getContentTypeFromExtension(uri.toString(),
-                    ContentType.IMAGE_UNSPECIFIED);
-        }
-        return contentType;
-    }
-
-    /**
-     * @param context Android context
-     * @param uri Uri to the image data
-     * @return The exif orientation value for the image in the specified uri
-     */
-    public static int getOrientation(final Context context, final Uri uri) {
-        try {
-            return getOrientation(context.getContentResolver().openInputStream(uri));
-        } catch (FileNotFoundException e) {
-            LogUtil.e(TAG, "getOrientation couldn't open: " + uri, e);
-        }
-        return android.media.ExifInterface.ORIENTATION_UNDEFINED;
-    }
-
-    /**
-     * @param inputStream The stream to the image file.  Closed on completion
-     * @return The exif orientation value for the image in the specified stream
-     */
-    public static int getOrientation(final InputStream inputStream) {
-        int orientation = android.media.ExifInterface.ORIENTATION_UNDEFINED;
-        if (inputStream != null) {
-            try {
-                final ExifInterface exifInterface = new ExifInterface();
-                exifInterface.readExif(inputStream);
-                final Integer orientationValue =
-                        exifInterface.getTagIntValue(ExifInterface.TAG_ORIENTATION);
-                if (orientationValue != null) {
-                    orientation = orientationValue.intValue();
-                }
-            } catch (IOException e) {
-                // If the image if GIF, PNG, or missing exif header, just use the defaults
-            } finally {
-                try {
-                    if (inputStream != null) {
-                        inputStream.close();
-                    }
-                } catch (IOException e) {
-                    LogUtil.e(TAG, "getOrientation error closing input stream", e);
-                }
-            }
-        }
-        return orientation;
-    }
-
-    /**
-     * Returns whether the resource is a GIF image.
-     */
-    public static boolean isGif(String contentType, Uri contentUri) {
-        if (TextUtils.equals(contentType, ContentType.IMAGE_GIF)) {
-            return true;
-        }
-        if (ContentType.isImageType(contentType)) {
-            try {
-                ContentResolver contentResolver = Factory.get().getApplicationContext()
-                        .getContentResolver();
-                InputStream inputStream = contentResolver.openInputStream(contentUri);
-                return ImageUtils.isGif(inputStream);
-            } catch (Exception e) {
-                LogUtil.w(TAG, "Could not open GIF input stream", e);
-            }
-        }
-        // Assume anything with a non-image content type is not a GIF
-        return false;
-    }
-
-    /**
-     * @param inputStream The stream to the image file. Closed on completion
-     * @return Whether the image stream represents a GIF
-     */
-    public static boolean isGif(InputStream inputStream) {
-        if (inputStream != null) {
-            try {
-                byte[] gifHeaderBytes = new byte[6];
-                int value = inputStream.read(gifHeaderBytes, 0, 6);
-                if (value == 6) {
-                    return Arrays.equals(gifHeaderBytes, GIF87_HEADER)
-                            || Arrays.equals(gifHeaderBytes, GIF89_HEADER);
-                }
-            } catch (IOException e) {
-                return false;
-            } finally {
-                try {
-                    inputStream.close();
-                } catch (IOException e) {
-                    // Ignore
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Read an image and compress it to particular max dimensions and size.
-     * Used to ensure images can fit in an MMS.
-     * TODO: This uses memory very inefficiently as it processes the whole image as a unit
-     *  (rather than slice by slice) but system JPEG functions do not support slicing and dicing.
-     */
-    public static class ImageResizer {
-
-        /**
-         * The quality parameter which is used to compress JPEG images.
-         */
-        private static final int IMAGE_COMPRESSION_QUALITY = 95;
-        /**
-         * The minimum quality parameter which is used to compress JPEG images.
-         */
-        private static final int MINIMUM_IMAGE_COMPRESSION_QUALITY = 50;
-
-        /**
-         * Minimum factor to reduce quality value
-         */
-        private static final double QUALITY_SCALE_DOWN_RATIO = 0.85f;
-
-        /**
-         * Maximum passes through the resize loop before failing permanently
-         */
-        private static final int NUMBER_OF_RESIZE_ATTEMPTS = 6;
-
-        /**
-         * Amount to scale down the picture when it doesn't fit
-         */
-        private static final float MIN_SCALE_DOWN_RATIO = 0.75f;
-
-        /**
-         * When computing sampleSize target scaling of no more than this ratio
-         */
-        private static final float MAX_TARGET_SCALE_FACTOR = 1.5f;
-
-
-        // Current sample size for subsampling image during initial decode
-        private int mSampleSize;
-        // Current bitmap holding initial decoded source image
-        private Bitmap mDecoded;
-        // If scaling is needed this holds the scaled bitmap (else should equal mDecoded)
-        private Bitmap mScaled;
-        // Current JPEG compression quality to use when compressing image
-        private int mQuality;
-        // Current factor to scale down decoded image before compressing
-        private float mScaleFactor;
-        // Flag keeping track of whether cache memory has been reclaimed
-        private boolean mHasReclaimedMemory;
-
-        // Initial size of the image (typically provided but can be UNSPECIFIED_SIZE)
-        private int mWidth;
-        private int mHeight;
-        // Orientation params of image as read from EXIF data
-        private final ExifInterface.OrientationParams mOrientationParams;
-        // Matrix to undo orientation and scale at the same time
-        private final Matrix mMatrix;
-        // Size limit as provided by MMS library
-        private final int mWidthLimit;
-        private final int mHeightLimit;
-        private final int mByteLimit;
-        //  Uri from which to read source image
-        private final Uri mUri;
-        // Application context
-        private final Context mContext;
-        // Cached value of bitmap factory options
-        private final BitmapFactory.Options mOptions;
-        private final String mContentType;
-
-        private final int mMemoryClass;
-
-        /**
-         * Return resized (compressed) image (else null)
-         *
-         * @param width The width of the image (if known)
-         * @param height The height of the image (if known)
-         * @param orientation The orientation of the image as an ExifInterface constant
-         * @param widthLimit The width limit, in pixels
-         * @param heightLimit The height limit, in pixels
-         * @param byteLimit The binary size limit, in bytes
-         * @param uri Uri to the image data
-         * @param context Needed to open the image
-         * @param contentType of image
-         * @return encoded image meeting size requirements else null
-         */
-        public static byte[] getResizedImageData(final int width, final int height,
-                final int orientation, final int widthLimit, final int heightLimit,
-                final int byteLimit, final Uri uri, final Context context,
-                final String contentType) {
-            final ImageResizer resizer = new ImageResizer(width, height, orientation,
-                    widthLimit, heightLimit, byteLimit, uri, context, contentType);
-            return resizer.resize();
-        }
-
-        /**
-         * Create and initialize an image resizer
-         */
-        private ImageResizer(final int width, final int height, final int orientation,
-                final int widthLimit, final int heightLimit, final int byteLimit, final Uri uri,
-                final Context context, final String contentType) {
-            mWidth = width;
-            mHeight = height;
-            mOrientationParams = ExifInterface.getOrientationParams(orientation);
-            mMatrix = new Matrix();
-            mWidthLimit = widthLimit;
-            mHeightLimit = heightLimit;
-            mByteLimit = byteLimit;
-            mUri = uri;
-            mWidth = width;
-            mContext = context;
-            mQuality = IMAGE_COMPRESSION_QUALITY;
-            mScaleFactor = 1.0f;
-            mHasReclaimedMemory = false;
-            mOptions = new BitmapFactory.Options();
-            mOptions.inScaled = false;
-            mOptions.inDensity = 0;
-            mOptions.inTargetDensity = 0;
-            mOptions.inSampleSize = 1;
-            mOptions.inJustDecodeBounds = false;
-            mOptions.inMutable = false;
-            final ActivityManager am =
-                    (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
-            mMemoryClass = Math.max(16, am.getMemoryClass());
-            mContentType = contentType;
-        }
-
-        /**
-         * Try to compress the image
-         *
-         * @return encoded image meeting size requirements else null
-         */
-        private byte[] resize() {
-            return ImageUtils.isGif(mContentType, mUri) ? resizeGifImage() : resizeStaticImage();
-        }
-
-        private byte[] resizeGifImage() {
-            byte[] bytesToReturn = null;
-            final String inputFilePath;
-            if (MediaScratchFileProvider.isMediaScratchSpaceUri(mUri)) {
-                inputFilePath = MediaScratchFileProvider.getFileFromUri(mUri).getAbsolutePath();
-            } else {
-                if (!UriUtil.isFileUri(mUri)) {
-                    Assert.fail("Expected a GIF file uri, but actual uri = " + mUri.toString());
-                }
-                inputFilePath = mUri.getPath();
-            }
-
-            if (GifTranscoder.canBeTranscoded(mWidth, mHeight)) {
-                // Needed to perform the transcoding so that the gif can continue to play in the
-                // conversation while the sending is taking place
-                final Uri tmpUri = MediaScratchFileProvider.buildMediaScratchSpaceUri("gif");
-                final File outputFile = MediaScratchFileProvider.getFileFromUri(tmpUri);
-                final String outputFilePath = outputFile.getAbsolutePath();
-
-                final boolean success =
-                        GifTranscoder.transcode(mContext, inputFilePath, outputFilePath);
-                if (success) {
-                    try {
-                        bytesToReturn = Files.toByteArray(outputFile);
-                    } catch (IOException e) {
-                        LogUtil.e(TAG, "Could not create FileInputStream with path of "
-                                + outputFilePath, e);
-                    }
-                }
-
-                // Need to clean up the new file created to compress the gif
-                mContext.getContentResolver().delete(tmpUri, null, null);
-            } else {
-                // We don't want to transcode the gif because its image dimensions would be too
-                // small so just return the bytes of the original gif
-                try {
-                    bytesToReturn = Files.toByteArray(new File(inputFilePath));
-                } catch (IOException e) {
-                    LogUtil.e(TAG,
-                            "Could not create FileInputStream with path of " + inputFilePath, e);
-                }
-            }
-
-            return bytesToReturn;
-        }
-
-        private byte[] resizeStaticImage() {
-            if (!ensureImageSizeSet()) {
-                // Cannot read image size
-                return null;
-            }
-            // Find incoming image size
-            if (!canBeCompressed()) {
-                return null;
-            }
-
-            //  Decode image - if out of memory - reclaim memory and retry
-            try {
-                for (int attempts = 0; attempts < NUMBER_OF_RESIZE_ATTEMPTS; attempts++) {
-                    final byte[] encoded = recodeImage(attempts);
-
-                    // Only return data within the limit
-                    if (encoded != null && encoded.length <= mByteLimit) {
-                        return encoded;
-                    } else {
-                        final int currentSize = (encoded == null ? 0 : encoded.length);
-                        updateRecodeParameters(currentSize);
-                    }
-                }
-            } catch (final FileNotFoundException e) {
-                LogUtil.e(TAG, "File disappeared during resizing");
-            } finally {
-                // Release all bitmaps
-                if (mScaled != null && mScaled != mDecoded) {
-                    mScaled.recycle();
-                }
-                if (mDecoded != null) {
-                    mDecoded.recycle();
-                }
-            }
-            return null;
-        }
-
-        /**
-         * Ensure that the width and height of the source image are known
-         * @return flag indicating whether size is known
-         */
-        private boolean ensureImageSizeSet() {
-            if (mWidth == MessagingContentProvider.UNSPECIFIED_SIZE ||
-                    mHeight == MessagingContentProvider.UNSPECIFIED_SIZE) {
-                // First get the image data (compressed)
-                final ContentResolver cr = mContext.getContentResolver();
-                InputStream inputStream = null;
-                // Find incoming image size
-                try {
-                    mOptions.inJustDecodeBounds = true;
-                    inputStream = cr.openInputStream(mUri);
-                    BitmapFactory.decodeStream(inputStream, null, mOptions);
-
-                    mWidth = mOptions.outWidth;
-                    mHeight = mOptions.outHeight;
-                    mOptions.inJustDecodeBounds = false;
-
-                    return true;
-                } catch (final FileNotFoundException e) {
-                    LogUtil.e(TAG, "Could not open file corresponding to uri " + mUri, e);
-                } catch (final NullPointerException e) {
-                    LogUtil.e(TAG, "NPE trying to open the uri " + mUri, e);
-                } finally {
-                    if (inputStream != null) {
-                        try {
-                            inputStream.close();
-                        } catch (final IOException e) {
-                            // Nothing to do
-                        }
-                    }
-                }
-
-                return false;
-            }
-            return true;
-        }
-
-        /**
-         * Choose an initial subsamplesize that ensures the decoded image is no more than
-         * MAX_TARGET_SCALE_FACTOR bigger than largest supported image and that it is likely to
-         * compress to smaller than the target size (assuming compression down to 1 bit per pixel).
-         * @return whether the image can be down subsampled
-         */
-        private boolean canBeCompressed() {
-            final boolean logv = LogUtil.isLoggable(LogUtil.BUGLE_IMAGE_TAG, LogUtil.VERBOSE);
-
-            int imageHeight = mHeight;
-            int imageWidth = mWidth;
-
-            // Assume can use half working memory to decode the initial image (4 bytes per pixel)
-            final int workingMemoryPixelLimit = (mMemoryClass * 1024 * 1024 / 8);
-            // Target 1 bits per pixel in final compressed image
-            final int finalSizePixelLimit = mByteLimit * 8;
-            // When choosing to halve the resolution - only do so the image will still be too big
-            // after scaling by MAX_TARGET_SCALE_FACTOR
-            final int heightLimitWithSlop = (int) (mHeightLimit * MAX_TARGET_SCALE_FACTOR);
-            final int widthLimitWithSlop = (int) (mWidthLimit * MAX_TARGET_SCALE_FACTOR);
-            final int pixelLimitWithSlop = (int) (finalSizePixelLimit *
-                    MAX_TARGET_SCALE_FACTOR * MAX_TARGET_SCALE_FACTOR);
-            final int pixelLimit = Math.min(pixelLimitWithSlop, workingMemoryPixelLimit);
-
-            int sampleSize = 1;
-            boolean fits = (imageHeight < heightLimitWithSlop &&
-                    imageWidth < widthLimitWithSlop &&
-                    imageHeight * imageWidth < pixelLimit);
-
-            // Compare sizes to compute sub-sampling needed
-            while (!fits) {
-                sampleSize = sampleSize * 2;
-                // Note that recodeImage may try using mSampleSize * 2. Hence we use the factor of 4
-                if (sampleSize >= (Integer.MAX_VALUE / 4)) {
-                    LogUtil.w(LogUtil.BUGLE_IMAGE_TAG, String.format(
-                            "Cannot resize image: widthLimit=%d heightLimit=%d byteLimit=%d " +
-                            "imageWidth=%d imageHeight=%d", mWidthLimit, mHeightLimit, mByteLimit,
-                            mWidth, mHeight));
-                    Assert.fail("Image cannot be resized"); // http://b/18926934
-                    return false;
-                }
-                if (logv) {
-                    LogUtil.v(LogUtil.BUGLE_IMAGE_TAG,
-                            "computeInitialSampleSize: Increasing sampleSize to " + sampleSize
-                            + " as h=" + imageHeight + " vs " + heightLimitWithSlop
-                            + " w=" + imageWidth  + " vs " +  widthLimitWithSlop
-                            + " p=" + imageHeight * imageWidth + " vs " + pixelLimit);
-                }
-                imageHeight = mHeight / sampleSize;
-                imageWidth = mWidth / sampleSize;
-                fits = (imageHeight < heightLimitWithSlop &&
-                        imageWidth < widthLimitWithSlop &&
-                        imageHeight * imageWidth < pixelLimit);
-            }
-
-            if (logv) {
-                LogUtil.v(LogUtil.BUGLE_IMAGE_TAG,
-                        "computeInitialSampleSize: Initial sampleSize " + sampleSize
-                        + " for h=" + imageHeight + " vs " + heightLimitWithSlop
-                        + " w=" + imageWidth  + " vs " +  widthLimitWithSlop
-                        + " p=" + imageHeight * imageWidth + " vs " + pixelLimit);
-            }
-
-            mSampleSize = sampleSize;
-            return true;
-        }
-
-        /**
-         * Recode the image from initial Uri to encoded JPEG
-         * @param attempt Attempt number
-         * @return encoded image
-         */
-        private byte[] recodeImage(final int attempt) throws FileNotFoundException {
-            byte[] encoded = null;
-            try {
-                final ContentResolver cr = mContext.getContentResolver();
-                final boolean logv = LogUtil.isLoggable(LogUtil.BUGLE_IMAGE_TAG, LogUtil.VERBOSE);
-                if (logv) {
-                    LogUtil.v(LogUtil.BUGLE_IMAGE_TAG, "getResizedImageData: attempt=" + attempt
-                            + " limit (w=" + mWidthLimit + " h=" + mHeightLimit + ") quality="
-                            + mQuality + " scale=" + mScaleFactor + " sampleSize=" + mSampleSize);
-                }
-                if (mScaled == null) {
-                    if (mDecoded == null) {
-                        mOptions.inSampleSize = mSampleSize;
-                        try (final InputStream inputStream = cr.openInputStream(mUri)) {
-                            mDecoded = BitmapFactory.decodeStream(inputStream, null, mOptions);
-                        } catch (IOException e) {
-                            // Ignore
-                        }
-                        if (mDecoded == null) {
-                            if (logv) {
-                                LogUtil.v(LogUtil.BUGLE_IMAGE_TAG,
-                                        "getResizedImageData: got empty decoded bitmap");
-                            }
-                            return null;
-                        }
-                    }
-                    if (logv) {
-                        LogUtil.v(LogUtil.BUGLE_IMAGE_TAG, "getResizedImageData: decoded w,h="
-                                + mDecoded.getWidth() + "," + mDecoded.getHeight());
-                    }
-                    // Make sure to scale the decoded image if dimension is not within limit
-                    final int decodedWidth = mDecoded.getWidth();
-                    final int decodedHeight = mDecoded.getHeight();
-                    if (decodedWidth > mWidthLimit || decodedHeight > mHeightLimit) {
-                        final float minScaleFactor = Math.max(
-                                mWidthLimit == 0 ? 1.0f :
-                                    (float) decodedWidth / (float) mWidthLimit,
-                                    mHeightLimit == 0 ? 1.0f :
-                                        (float) decodedHeight / (float) mHeightLimit);
-                        if (mScaleFactor < minScaleFactor) {
-                            mScaleFactor = minScaleFactor;
-                        }
-                    }
-                    if (mScaleFactor > 1.0 || mOrientationParams.rotation != 0) {
-                        mMatrix.reset();
-                        mMatrix.postRotate(mOrientationParams.rotation);
-                        mMatrix.postScale(mOrientationParams.scaleX / mScaleFactor,
-                                mOrientationParams.scaleY / mScaleFactor);
-                        mScaled = Bitmap.createBitmap(mDecoded, 0, 0, decodedWidth, decodedHeight,
-                                mMatrix, false /* filter */);
-                        if (mScaled == null) {
-                            if (logv) {
-                                LogUtil.v(LogUtil.BUGLE_IMAGE_TAG,
-                                        "getResizedImageData: got empty scaled bitmap");
-                            }
-                            return null;
-                        }
-                        if (logv) {
-                            LogUtil.v(LogUtil.BUGLE_IMAGE_TAG, "getResizedImageData: scaled w,h="
-                                    + mScaled.getWidth() + "," + mScaled.getHeight());
-                        }
-                    } else {
-                        mScaled = mDecoded;
-                    }
-                }
-                // Now encode it at current quality
-                encoded = ImageUtils.bitmapToBytes(mScaled, mQuality);
-                if (encoded != null && logv) {
-                    LogUtil.v(LogUtil.BUGLE_IMAGE_TAG,
-                            "getResizedImageData: Encoded down to " + encoded.length + "@"
-                                    + mScaled.getWidth() + "/" + mScaled.getHeight() + "~"
-                                    + mQuality);
-                }
-            } catch (final OutOfMemoryError e) {
-                LogUtil.w(LogUtil.BUGLE_IMAGE_TAG,
-                        "getResizedImageData - image too big (OutOfMemoryError), will try "
-                                + " with smaller scale factor");
-                // fall through and keep trying with more compression
-            }
-            return encoded;
-        }
-
-        /**
-         * When image recode fails this method updates compression parameters for the next attempt
-         * @param currentSize encoded image size (will be 0 if OOM)
-         */
-        private void updateRecodeParameters(final int currentSize) {
-            final boolean logv = LogUtil.isLoggable(LogUtil.BUGLE_IMAGE_TAG, LogUtil.VERBOSE);
-            // Only return data within the limit
-            if (currentSize > 0 &&
-                    mQuality > MINIMUM_IMAGE_COMPRESSION_QUALITY) {
-                // First if everything succeeded but failed to hit target size
-                // Try quality proportioned to sqrt of size over size limit
-                mQuality = Math.max(MINIMUM_IMAGE_COMPRESSION_QUALITY,
-                        Math.min((int) (mQuality * Math.sqrt((1.0 * mByteLimit) / currentSize)),
-                                (int) (mQuality * QUALITY_SCALE_DOWN_RATIO)));
-                if (logv) {
-                    LogUtil.v(LogUtil.BUGLE_IMAGE_TAG,
-                            "getResizedImageData: Retrying at quality " + mQuality);
-                }
-            } else if (currentSize > 0 &&
-                    mScaleFactor < 2.0 * MIN_SCALE_DOWN_RATIO * MIN_SCALE_DOWN_RATIO) {
-                // JPEG compression failed to hit target size - need smaller image
-                // First try scaling by a little (< factor of 2) just so long resulting scale down
-                // ratio is still significantly bigger than next subsampling step
-                // i.e. mScaleFactor/MIN_SCALE_DOWN_RATIO (new scaling factor) <
-                //       2.0 / MIN_SCALE_DOWN_RATIO (arbitrary limit)
-                mQuality = IMAGE_COMPRESSION_QUALITY;
-                mScaleFactor = mScaleFactor / MIN_SCALE_DOWN_RATIO;
-                if (logv) {
-                    LogUtil.v(LogUtil.BUGLE_IMAGE_TAG,
-                            "getResizedImageData: Retrying at scale " + mScaleFactor);
-                }
-                // Release scaled bitmap to trigger rescaling
-                if (mScaled != null && mScaled != mDecoded) {
-                    mScaled.recycle();
-                }
-                mScaled = null;
-            } else if (currentSize <= 0 && !mHasReclaimedMemory) {
-                // Then before we subsample try cleaning up our cached memory
-                Factory.get().reclaimMemory();
-                mHasReclaimedMemory = true;
-                if (logv) {
-                    LogUtil.v(LogUtil.BUGLE_IMAGE_TAG,
-                            "getResizedImageData: Retrying after reclaiming memory ");
-                }
-            } else {
-                // Last resort - subsample image by another factor of 2 and try again
-                mSampleSize = mSampleSize * 2;
-                mQuality = IMAGE_COMPRESSION_QUALITY;
-                mScaleFactor = 1.0f;
-                if (logv) {
-                    LogUtil.v(LogUtil.BUGLE_IMAGE_TAG,
-                            "getResizedImageData: Retrying at sampleSize " + mSampleSize);
-                }
-                // Release all bitmaps to trigger subsampling
-                if (mScaled != null && mScaled != mDecoded) {
-                    mScaled.recycle();
-                }
-                mScaled = null;
-                if (mDecoded != null) {
-                    mDecoded.recycle();
-                    mDecoded = null;
-                }
-            }
-        }
-    }
-
-    /**
-     * Scales and center-crops a bitmap to the size passed in and returns the new bitmap.
-     *
-     * @param source Bitmap to scale and center-crop
-     * @param newWidth destination width
-     * @param newHeight destination height
-     * @return Bitmap scaled and center-cropped bitmap
-     */
-    public static Bitmap scaleCenterCrop(final Bitmap source, final int newWidth,
-            final int newHeight) {
-        final int sourceWidth = source.getWidth();
-        final int sourceHeight = source.getHeight();
-
-        // Compute the scaling factors to fit the new height and width, respectively.
-        // To cover the final image, the final scaling will be the bigger
-        // of these two.
-        final float xScale = (float) newWidth / sourceWidth;
-        final float yScale = (float) newHeight / sourceHeight;
-        final float scale = Math.max(xScale, yScale);
-
-        // Now get the size of the source bitmap when scaled
-        final float scaledWidth = scale * sourceWidth;
-        final float scaledHeight = scale * sourceHeight;
-
-        // Let's find out the upper left coordinates if the scaled bitmap
-        // should be centered in the new size give by the parameters
-        final float left = (newWidth - scaledWidth) / 2;
-        final float top = (newHeight - scaledHeight) / 2;
-
-        // The target rectangle for the new, scaled version of the source bitmap will now
-        // be
-        final RectF targetRect = new RectF(left, top, left + scaledWidth, top + scaledHeight);
-
-        // Finally, we create a new bitmap of the specified size and draw our new,
-        // scaled bitmap onto it.
-        final Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig());
-        final Canvas canvas = new Canvas(dest);
-        canvas.drawBitmap(source, null, targetRect, null);
-
-        return dest;
-    }
-
-    /**
-     *  The drawable can be a Nine-Patch. If we directly use the same drawable instance for each
-     *  drawable of different sizes, then the drawable sizes would interfere with each other. The
-     *  solution here is to create a new drawable instance for every time with the SAME
-     *  ConstantState (i.e. sharing the same common state such as the bitmap, so that we don't have
-     *  to recreate the bitmap resource), and apply the different properties on top (nine-patch
-     *  size and color tint).
-     *
-     *  TODO: we are creating new drawable instances here, but there are optimizations that
-     *  can be made. For example, message bubbles shouldn't need the mutate() call and the
-     *  play/pause buttons shouldn't need to create new drawable from the constant state.
-     */
-    public static Drawable getTintedDrawable(final Context context, final Drawable drawable,
-            final int color) {
-        // For some reason occassionally drawables on JB has a null constant state
-        final Drawable.ConstantState constantStateDrawable = drawable.getConstantState();
-        final Drawable retDrawable = (constantStateDrawable != null)
-                ? constantStateDrawable.newDrawable(context.getResources()).mutate()
-                : drawable;
-        retDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
-        return retDrawable;
-    }
-
-    /**
-     * Decodes image resource header and returns the image size.
-     */
-    public static Rect decodeImageBounds(final Context context, final Uri imageUri) {
-        final ContentResolver cr = context.getContentResolver();
-        try {
-            final InputStream inputStream = cr.openInputStream(imageUri);
-            if (inputStream != null) {
-                try {
-                    BitmapFactory.Options options = new BitmapFactory.Options();
-                    options.inJustDecodeBounds = true;
-                    BitmapFactory.decodeStream(inputStream, null, options);
-                    return new Rect(0, 0, options.outWidth, options.outHeight);
-                } finally {
-                    try {
-                        inputStream.close();
-                    } catch (IOException e) {
-                        // Do nothing.
-                    }
-                }
-            }
-        } catch (FileNotFoundException e) {
-            LogUtil.e(TAG, "Couldn't open input stream for uri = " + imageUri);
-        }
-        return new Rect(0, 0, ImageRequest.UNSPECIFIED_SIZE, ImageRequest.UNSPECIFIED_SIZE);
-    }
-}
diff --git a/src/com/android/messaging/util/ImeUtil.java b/src/com/android/messaging/util/ImeUtil.java
deleted file mode 100644
index 3f033d0..0000000
--- a/src/com/android/messaging/util/ImeUtil.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import androidx.annotation.NonNull;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-
-import com.google.common.annotations.VisibleForTesting;
-
-public class ImeUtil {
-    public interface ImeStateObserver {
-        void onImeStateChanged(boolean imeOpen);
-    }
-
-    public interface ImeStateHost {
-        void onDisplayHeightChanged(int heightMeasureSpec);
-        void registerImeStateObserver(ImeUtil.ImeStateObserver observer);
-        void unregisterImeStateObserver(ImeUtil.ImeStateObserver observer);
-        boolean isImeOpen();
-    }
-
-    private static volatile ImeUtil sInstance;
-
-    // Used to clear the static cached instance of ImeUtil during testing.  This is necessary
-    // because a previous test may have installed a mocked instance (or vice versa).
-    public static void clearInstance() {
-        sInstance = null;
-    }
-    public static ImeUtil get() {
-        if (sInstance == null) {
-            synchronized (ImeUtil.class) {
-                if (sInstance == null) {
-                    sInstance = new ImeUtil();
-                }
-            }
-        }
-        return sInstance;
-    }
-
-    @VisibleForTesting
-    public static void set(final ImeUtil imeUtil) {
-        sInstance = imeUtil;
-    }
-
-    public void hideImeKeyboard(@NonNull final Context context, @NonNull final View v) {
-        Assert.notNull(context);
-        Assert.notNull(v);
-
-        final InputMethodManager inputMethodManager =
-                (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
-        if (inputMethodManager != null) {
-            inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0 /* flags */);
-        }
-    }
-
-    public void showImeKeyboard(@NonNull final Context context, @NonNull final View v) {
-        Assert.notNull(context);
-        Assert.notNull(v);
-
-        final InputMethodManager inputMethodManager =
-                (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
-        if (inputMethodManager != null) {
-            v.requestFocus();
-            inputMethodManager.showSoftInput(v, 0 /* flags */);
-        }
-    }
-
-    public static void hideSoftInput(@NonNull final Context context, @NonNull final View v) {
-        final InputMethodManager inputMethodManager =
-                (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
-        inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
-    }
-}
diff --git a/src/com/android/messaging/util/LogSaver.java b/src/com/android/messaging/util/LogSaver.java
deleted file mode 100644
index 7d1f2fd..0000000
--- a/src/com/android/messaging/util/LogSaver.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.os.Process;
-import android.util.Log;
-
-import com.android.messaging.Factory;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.text.SimpleDateFormat;
-import java.util.logging.FileHandler;
-import java.util.logging.Formatter;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Save the app's own log to dump along with adb bugreport
- */
-public abstract class LogSaver {
-    /**
-     * Writes the accumulated log entries, from oldest to newest, to the specified PrintWriter.
-     * Log lines are emitted in much the same form as logcat -v threadtime -- specifically,
-     * lines will include a timestamp, pid, tid, level, and tag.
-     *
-     * @param writer The PrintWriter to output
-     */
-    public abstract void dump(PrintWriter writer);
-
-    /**
-     * Log a line
-     *
-     * @param level The log level to use
-     * @param tag The log tag
-     * @param msg The message of the log line
-     */
-    public abstract void log(int level, String tag, String msg);
-
-    /**
-     * Check if the LogSaver still matches the current Gservices settings
-     *
-     * @return true if matches, false otherwise
-     */
-    public abstract boolean isCurrent();
-
-    private LogSaver() {
-    }
-
-    public static LogSaver newInstance() {
-        final boolean persistent = BugleGservices.get().getBoolean(
-                BugleGservicesKeys.PERSISTENT_LOGSAVER,
-                BugleGservicesKeys.PERSISTENT_LOGSAVER_DEFAULT);
-        if (persistent) {
-            final int setSize = BugleGservices.get().getInt(
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER_ROTATION_SET_SIZE,
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER_ROTATION_SET_SIZE_DEFAULT);
-            final int fileLimitBytes = BugleGservices.get().getInt(
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER_FILE_LIMIT_BYTES,
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER_FILE_LIMIT_BYTES_DEFAULT);
-            return new DiskLogSaver(setSize, fileLimitBytes);
-        } else {
-            final int size = BugleGservices.get().getInt(
-                    BugleGservicesKeys.IN_MEMORY_LOGSAVER_RECORD_COUNT,
-                    BugleGservicesKeys.IN_MEMORY_LOGSAVER_RECORD_COUNT_DEFAULT);
-            return new MemoryLogSaver(size);
-        }
-    }
-
-    /**
-     * A circular in-memory log to be used to log potentially verbose logs. The logs will be
-     * persisted in memory in the application and can be dumped by various dump() methods.
-     * For example, adb shell dumpsys activity provider com.android.messaging.
-     * The dump will also show up in bugreports.
-     */
-    private static final class MemoryLogSaver extends LogSaver {
-        /**
-         * Record to store a single log entry. Stores timestamp, tid, level, tag, and message.
-         * It can be reused when the circular log rolls over. This avoids creating new objects.
-         */
-        private static class LogRecord {
-            int mTid;
-            String mLevelString;
-            long mTimeMillis;     // from System.currentTimeMillis
-            String mTag;
-            String mMessage;
-
-            LogRecord() {
-            }
-
-            void set(int tid, int level, long time, String tag, String message) {
-                this.mTid = tid;
-                this.mTimeMillis = time;
-                this.mTag = tag;
-                this.mMessage = message;
-                this.mLevelString = getLevelString(level);
-            }
-        }
-
-        private final int mSize;
-        private final CircularArray<LogRecord> mLogList;
-        private final Object mLock;
-
-        private final SimpleDateFormat mSdf = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
-
-        public MemoryLogSaver(final int size) {
-            mSize = size;
-            mLogList = new CircularArray<LogRecord>(size);
-            mLock = new Object();
-        }
-
-        @Override
-        public void dump(PrintWriter writer) {
-            int pid = Process.myPid();
-            synchronized (mLock) {
-                for (int i = 0; i < mLogList.count(); i++) {
-                    LogRecord rec = mLogList.get(i);
-                    writer.println(String.format("%s %5d %5d %s %s: %s",
-                            mSdf.format(rec.mTimeMillis),
-                            pid, rec.mTid, rec.mLevelString, rec.mTag, rec.mMessage));
-                }
-            }
-        }
-
-        @Override
-        public void log(int level, String tag, String msg) {
-            synchronized (mLock) {
-                LogRecord rec = mLogList.getFree();
-                if (rec == null) {
-                    rec = new LogRecord();
-                }
-                rec.set(Process.myTid(), level, System.currentTimeMillis(), tag, msg);
-                mLogList.add(rec);
-            }
-        }
-
-        @Override
-        public boolean isCurrent() {
-            final boolean persistent = BugleGservices.get().getBoolean(
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER,
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER_DEFAULT);
-            if (persistent) {
-                return false;
-            }
-            final int size = BugleGservices.get().getInt(
-                    BugleGservicesKeys.IN_MEMORY_LOGSAVER_RECORD_COUNT,
-                    BugleGservicesKeys.IN_MEMORY_LOGSAVER_RECORD_COUNT_DEFAULT);
-            return size == mSize;
-        }
-    }
-
-    /**
-     * A persistent, on-disk log saver. It uses the standard Java util logger along with
-     * a rotation log file set to store the logs in app's local file directory "app_logs".
-     */
-    private static final class DiskLogSaver extends LogSaver {
-        private static final String DISK_LOG_DIR_NAME = "logs";
-
-        private final int mSetSize;
-        private final int mFileLimitBytes;
-        private Logger mDiskLogger;
-
-        public DiskLogSaver(final int setSize, final int fileLimitBytes) {
-            Assert.isTrue(setSize > 0);
-            Assert.isTrue(fileLimitBytes > 0);
-            mSetSize = setSize;
-            mFileLimitBytes = fileLimitBytes;
-            initDiskLog();
-        }
-
-        private static void clearDefaultHandlers(Logger logger) {
-            Assert.notNull(logger);
-            for (Handler handler : logger.getHandlers()) {
-                logger.removeHandler(handler);
-            }
-        }
-
-        private void initDiskLog() {
-            mDiskLogger = Logger.getLogger(LogUtil.BUGLE_TAG);
-            // We don't want the default console handler
-            clearDefaultHandlers(mDiskLogger);
-            // Don't want duplicate print in system log
-            mDiskLogger.setUseParentHandlers(false);
-            // FileHandler manages the log files in a fixed rotation set
-            final File logDir = Factory.get().getApplicationContext().getDir(
-                    DISK_LOG_DIR_NAME, 0/*mode*/);
-            FileHandler handler = null;
-            try {
-                handler = new FileHandler(
-                        logDir + "/%g.log", mFileLimitBytes, mSetSize, true/*append*/);
-            } catch (Exception e) {
-                Log.e(LogUtil.BUGLE_TAG, "LogSaver: fail to init disk logger", e);
-                return;
-            }
-            final Formatter formatter = new Formatter() {
-                @Override
-                public String format(java.util.logging.LogRecord r) {
-                    return r.getMessage();
-                }
-            };
-            handler.setFormatter(formatter);
-            handler.setLevel(Level.ALL);
-            mDiskLogger.addHandler(handler);
-        }
-
-        @Override
-        public void dump(PrintWriter writer) {
-            for (int i = mSetSize - 1; i >= 0; i--) {
-                final File logDir = Factory.get().getApplicationContext().getDir(
-                        DISK_LOG_DIR_NAME, 0/*mode*/);
-                final String logFilePath = logDir + "/" + i + ".log";
-                try {
-                    final File logFile = new File(logFilePath);
-                    if (!logFile.exists()) {
-                        continue;
-                    }
-                    final BufferedReader reader = new BufferedReader(new FileReader(logFile));
-                    for (String line; (line = reader.readLine()) != null;) {
-                        line = line.trim();
-                        writer.println(line);
-                    }
-                } catch (FileNotFoundException e) {
-                    Log.w(LogUtil.BUGLE_TAG, "LogSaver: can not find log file " + logFilePath);
-                } catch (IOException e) {
-                    Log.w(LogUtil.BUGLE_TAG, "LogSaver: can not read log file", e);
-                }
-            }
-        }
-
-        @Override
-        public void log(int level, String tag, String msg) {
-            final SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
-            mDiskLogger.info(String.format("%s %5d %5d %s %s: %s\n",
-                    sdf.format(System.currentTimeMillis()),
-                    Process.myPid(), Process.myTid(), getLevelString(level), tag, msg));
-        }
-
-        @Override
-        public boolean isCurrent() {
-            final boolean persistent = BugleGservices.get().getBoolean(
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER,
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER_DEFAULT);
-            if (!persistent) {
-                return false;
-            }
-            final int setSize = BugleGservices.get().getInt(
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER_ROTATION_SET_SIZE,
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER_ROTATION_SET_SIZE_DEFAULT);
-            final int fileLimitBytes = BugleGservices.get().getInt(
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER_FILE_LIMIT_BYTES,
-                    BugleGservicesKeys.PERSISTENT_LOGSAVER_FILE_LIMIT_BYTES_DEFAULT);
-            return setSize == mSetSize && fileLimitBytes == mFileLimitBytes;
-        }
-    }
-
-    private static String getLevelString(final int level) {
-        switch (level) {
-            case android.util.Log.DEBUG:
-                return "D";
-            case android.util.Log.WARN:
-                return "W";
-            case android.util.Log.INFO:
-                return "I";
-            case android.util.Log.VERBOSE:
-                return "V";
-            case android.util.Log.ERROR:
-                return "E";
-            case android.util.Log.ASSERT:
-                return "A";
-            default:
-                return "?";
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/LogUtil.java b/src/com/android/messaging/util/LogUtil.java
deleted file mode 100644
index 021f39b..0000000
--- a/src/com/android/messaging/util/LogUtil.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-/**
- * Log utility class.
- */
-public class LogUtil {
-    public static final String BUGLE_TAG = "MessagingApp";
-    public static final String PROFILE_TAG = "MessagingAppProf";
-    public static final String BUGLE_DATABASE_TAG = "MessagingAppDb";
-    public static final String BUGLE_DATABASE_PERF_TAG = "MessagingAppDbPerf";
-    public static final String BUGLE_DATAMODEL_TAG = "MessagingAppDataModel";
-    public static final String BUGLE_IMAGE_TAG = "MessagingAppImage";
-    public static final String BUGLE_NOTIFICATIONS_TAG = "MessagingAppNotif";
-    public static final String BUGLE_WIDGET_TAG = "MessagingAppWidget";
-
-    public static final int DEBUG = android.util.Log.DEBUG;
-    public static final int WARN = android.util.Log.WARN;
-    public static final int VERBOSE = android.util.Log.VERBOSE;
-    public static final int INFO = android.util.Log.INFO;
-    public static final int ERROR = android.util.Log.ERROR;
-
-    // If this is non-null, DEBUG and higher logs will be tracked in-memory. It will not include
-    // VERBOSE logs.
-    private static LogSaver sDebugLogSaver;
-    private static volatile boolean sCaptureDebugLogs;
-
-    /**
-     * Read Gservices to see if logging should be enabled.
-     */
-    public static void refreshGservices(final BugleGservices gservices) {
-        sCaptureDebugLogs = gservices.getBoolean(
-                BugleGservicesKeys.ENABLE_LOG_SAVER,
-                BugleGservicesKeys.ENABLE_LOG_SAVER_DEFAULT);
-        if (sCaptureDebugLogs && (sDebugLogSaver == null || !sDebugLogSaver.isCurrent())) {
-            // We were not capturing logs before. We are now.
-            sDebugLogSaver = LogSaver.newInstance();
-        } else if (!sCaptureDebugLogs && sDebugLogSaver != null) {
-            // We were capturing logs. We aren't anymore.
-            sDebugLogSaver = null;
-        }
-    }
-
- // This is called from FactoryImpl once the Gservices class is initialized.
-    public static void initializeGservices (final BugleGservices gservices) {
-        gservices.registerForChanges(new Runnable() {
-            @Override
-            public void run() {
-                refreshGservices(gservices);
-            }
-        });
-        refreshGservices(gservices);
-    }
-
-    /**
-     * Send a {@link #VERBOSE} log message.
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     */
-    public static void v(final String tag, final String msg) {
-        println(android.util.Log.VERBOSE, tag, msg);
-    }
-
-    /**
-     * Send a {@link #VERBOSE} log message.
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     * @param tr An exception to log
-     */
-    public static void v(final String tag, final String msg, final Throwable tr) {
-        println(android.util.Log.VERBOSE, tag, msg + '\n'
-                + android.util.Log.getStackTraceString(tr));
-    }
-
-    /**
-     * Send a {@link #DEBUG} log message.
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     */
-    public static void d(final String tag, final String msg) {
-        println(android.util.Log.DEBUG, tag, msg);
-    }
-
-    /**
-     * Send a {@link #DEBUG} log message and log the exception.
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     * @param tr An exception to log
-     */
-    public static void d(final String tag, final String msg, final Throwable tr) {
-        println(android.util.Log.DEBUG, tag, msg + '\n'
-                + android.util.Log.getStackTraceString(tr));
-    }
-
-    /**
-     * Send an {@link #INFO} log message.
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     */
-    public static void i(final String tag, final String msg) {
-        println(android.util.Log.INFO, tag, msg);
-    }
-
-    /**
-     * Send a {@link #INFO} log message and log the exception.
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     * @param tr An exception to log
-     */
-    public static void i(final String tag, final String msg, final Throwable tr) {
-        println(android.util.Log.INFO, tag, msg + '\n'
-                + android.util.Log.getStackTraceString(tr));
-    }
-
-    /**
-     * Send a {@link #WARN} log message.
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     */
-    public static void w(final String tag, final String msg) {
-        println(android.util.Log.WARN, tag, msg);
-    }
-
-    /**
-     * Send a {@link #WARN} log message and log the exception.
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     * @param tr An exception to log
-     */
-    public static void w(final String tag, final String msg, final Throwable tr) {
-        println(android.util.Log.WARN, tag, msg);
-        println(android.util.Log.WARN, tag, android.util.Log.getStackTraceString(tr));
-    }
-
-    /**
-     * Send an {@link #ERROR} log message.
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     */
-    public static void e(final String tag, final String msg) {
-        println(android.util.Log.ERROR, tag, msg);
-    }
-
-    /**
-     * Send a {@link #ERROR} log message and log the exception.
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     * @param tr An exception to log
-     */
-    public static void e(final String tag, final String msg, final Throwable tr) {
-        println(android.util.Log.ERROR, tag, msg);
-        println(android.util.Log.ERROR, tag, android.util.Log.getStackTraceString(tr));
-    }
-
-    /**
-     * What a Terrible Failure: Report a condition that should never happen.
-     * The error will always be logged at level ASSERT with the call stack.
-     * Depending on system configuration, a report may be added to the
-     * {@link android.os.DropBoxManager} and/or the process may be terminated
-     * immediately with an error dialog.
-     * @param tag Used to identify the source of a log message.
-     * @param msg The message you would like logged.
-     */
-    public static void wtf(final String tag, final String msg) {
-        // Make sure this goes into our log buffer
-        println(android.util.Log.ASSERT, tag, "wtf\n" + msg);
-        android.util.Log.wtf(tag, msg, new Exception());
-    }
-
-    /**
-     * What a Terrible Failure: Report a condition that should never happen.
-     * The error will always be logged at level ASSERT with the call stack.
-     * Depending on system configuration, a report may be added to the
-     * {@link android.os.DropBoxManager} and/or the process may be terminated
-     * immediately with an error dialog.
-     * @param tag Used to identify the source of a log message.
-     * @param msg The message you would like logged.
-     * @param tr An exception to log
-     */
-    public static void wtf(final String tag, final String msg, final Throwable tr) {
-        // Make sure this goes into our log buffer
-        println(android.util.Log.ASSERT, tag, "wtf\n" + msg + '\n' +
-                android.util.Log.getStackTraceString(tr));
-        android.util.Log.wtf(tag, msg, tr);
-    }
-
-    /**
-     * Low-level logging call.
-     * @param level The priority/type of this log message
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     */
-    private static void println(final int level, final String tag, final String msg) {
-        android.util.Log.println(level, tag, msg);
-
-        LogSaver serviceLog = sDebugLogSaver;
-        if (serviceLog != null && level >= android.util.Log.DEBUG) {
-            serviceLog.log(level, tag, msg);
-        }
-    }
-
-    /**
-     * Save logging into LogSaver only, for dumping to bug report
-     *
-     * @param level The priority/type of this log message
-     * @param tag Used to identify the source of a log message.  It usually identifies
-     *        the class or activity where the log call occurs.
-     * @param msg The message you would like logged.
-     */
-    public static void save(final int level, final String tag, final String msg) {
-        LogSaver serviceLog = sDebugLogSaver;
-        if (serviceLog != null) {
-            serviceLog.log(level, tag, msg);
-        }
-    }
-
-    /**
-     * Checks to see whether or not a log for the specified tag is loggable at the specified level.
-     * See {@link android.util.Log#isLoggable(String, int)} for more discussion.
-     */
-    public static boolean isLoggable(final String tag, final int level) {
-        return android.util.Log.isLoggable(tag, level);
-    }
-
-    /**
-     * Returns text as is if {@value #BUGLE_TAG}'s log level is set to DEBUG or VERBOSE;
-     * returns "--" otherwise. Useful for log statements where we don't want to log
-     * various strings (e.g., usernames) with default logging to avoid leaking PII in logcat.
-     */
-    public static String sanitizePII(final String text) {
-        if (text == null) {
-            return null;
-        }
-
-        if (android.util.Log.isLoggable(BUGLE_TAG, android.util.Log.DEBUG)) {
-            return text;
-        } else {
-            return "Redacted-" + text.length();
-        }
-    }
-
-    public static void dump(java.io.PrintWriter out) {
-        final LogSaver logsaver = sDebugLogSaver;
-        if (logsaver != null) {
-            logsaver.dump(out);
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/LoggingTimer.java b/src/com/android/messaging/util/LoggingTimer.java
deleted file mode 100644
index d0d41ac..0000000
--- a/src/com/android/messaging/util/LoggingTimer.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.os.SystemClock;
-
-/**
- * A utility timer that logs the execution time of operations
- */
-public class LoggingTimer {
-    private static final int NO_WARN_LIMIT = -1;
-
-    private final String mTag;
-    private final String mName;
-    private final long mWarnLimitMillis;
-    private long mStartMillis;
-
-    public LoggingTimer(final String tag, final String name) {
-        this(tag, name, NO_WARN_LIMIT);
-    }
-
-    public LoggingTimer(final String tag, final String name, final long warnLimitMillis) {
-        mTag = tag;
-        mName = name;
-        mWarnLimitMillis = warnLimitMillis;
-    }
-
-    /**
-     * This method should be called at the start of the operation to be timed.
-     */
-    public void start() {
-        mStartMillis = SystemClock.elapsedRealtime();
-
-        if (LogUtil.isLoggable(mTag, LogUtil.VERBOSE)) {
-            LogUtil.v(mTag, "Timer start for " + mName);
-        }
-    }
-
-    /**
-     * This method should be called at the end of the operation to be timed. It logs the time since
-     * the last call to {@link #start}
-     */
-    public void stopAndLog() {
-        final long elapsedMs = SystemClock.elapsedRealtime() - mStartMillis;
-
-        final String logMessage = String.format("Used %dms for %s", elapsedMs, mName);
-
-        LogUtil.save(LogUtil.DEBUG, mTag, logMessage);
-
-        if (mWarnLimitMillis != NO_WARN_LIMIT && elapsedMs > mWarnLimitMillis) {
-            LogUtil.w(mTag, logMessage);
-        } else if (LogUtil.isLoggable(mTag, LogUtil.VERBOSE)) {
-            LogUtil.v(mTag, logMessage);
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/LongSparseSet.java b/src/com/android/messaging/util/LongSparseSet.java
deleted file mode 100644
index bb3843e..0000000
--- a/src/com/android/messaging/util/LongSparseSet.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import androidx.collection.LongSparseArray;
-
-/**
- * A space saving set for long values using v4 compat LongSparseArray
- */
-public class LongSparseSet {
-    private static final Object THE_ONLY_VALID_VALUE = new Object();
-    private final LongSparseArray<Object> mSet = new LongSparseArray<Object>();
-
-    public LongSparseSet() {
-    }
-
-    /**
-     * @param key The element to check
-     * @return True if the element is in the set, false otherwise
-     */
-    public boolean contains(long key) {
-        if (mSet.get(key, null/*default*/) == THE_ONLY_VALID_VALUE) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Add an element to the set
-     *
-     * @param key The element to add
-     */
-    public void add(long key) {
-        mSet.put(key, THE_ONLY_VALID_VALUE);
-    }
-
-    /**
-     * Remove an element from the set
-     *
-     * @param key The element to remove
-     */
-    public void remove(long key) {
-        mSet.delete(key);
-    }
-}
diff --git a/src/com/android/messaging/util/MaterialPalette.java b/src/com/android/messaging/util/MaterialPalette.java
deleted file mode 100644
index 8dbacbf..0000000
--- a/src/com/android/messaging/util/MaterialPalette.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-
-public class MaterialPalette{
-    public final int mPrimaryColor;
-    public final int mSecondaryColor;
-
-    public MaterialPalette(final int primaryColor, final int secondaryColor) {
-        mPrimaryColor = primaryColor;
-        mSecondaryColor = secondaryColor;
-    }
-}
diff --git a/src/com/android/messaging/util/MediaMetadataRetrieverWrapper.java b/src/com/android/messaging/util/MediaMetadataRetrieverWrapper.java
deleted file mode 100644
index 1a93e9d..0000000
--- a/src/com/android/messaging/util/MediaMetadataRetrieverWrapper.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.ContentResolver;
-import android.content.res.AssetFileDescriptor;
-import android.graphics.Bitmap;
-import android.media.MediaMetadataRetriever;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-
-import java.io.IOException;
-
-/**
- * Convenience wrapper for {@link MediaMetadataRetriever} to help with its eccentric error handling.
- */
-public class MediaMetadataRetrieverWrapper {
-    private final MediaMetadataRetriever mRetriever = new MediaMetadataRetriever();
-
-    public MediaMetadataRetrieverWrapper() {
-    }
-
-    public void setDataSource(Uri uri) throws IOException {
-        ContentResolver resolver = Factory.get().getApplicationContext().getContentResolver();
-        AssetFileDescriptor fd = resolver.openAssetFileDescriptor(uri, "r");
-        if (fd == null) {
-            throw new IOException("openAssetFileDescriptor returned null for " + uri);
-        }
-        try {
-            mRetriever.setDataSource(fd.getFileDescriptor());
-        } catch (RuntimeException e) {
-            release();
-            throw new IOException(e);
-        } finally {
-            fd.close();
-        }
-    }
-
-    public int extractInteger(final int key, final int defaultValue) {
-        final String s = mRetriever.extractMetadata(key);
-        if (TextUtils.isEmpty(s)) {
-            return defaultValue;
-        }
-        return Integer.parseInt(s);
-    }
-
-    public String extractMetadata(final int key) {
-        return mRetriever.extractMetadata(key);
-    }
-
-    public Bitmap getFrameAtTime() {
-        return mRetriever.getFrameAtTime();
-    }
-
-    public Bitmap getFrameAtTime(final long timeUs) {
-        return mRetriever.getFrameAtTime(timeUs);
-    }
-
-    public void release() {
-        try {
-            mRetriever.release();
-        } catch (RuntimeException | IOException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "MediaMetadataRetriever.release failed", e);
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/MediaUtil.java b/src/com/android/messaging/util/MediaUtil.java
deleted file mode 100644
index c23ded3..0000000
--- a/src/com/android/messaging/util/MediaUtil.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-
-import com.android.messaging.Factory;
-
-public abstract class MediaUtil {
-    public static interface OnCompletionListener {
-        public void onCompletion();
-    }
-
-    public static MediaUtil get() {
-        return Factory.get().getMediaUtil();
-    }
-
-    /**
-     * Play sound from local resources given a resource id.
-     */
-    public abstract void playSound(final Context context, final int resId,
-            final OnCompletionListener completionListener);
-
-    public static boolean canAutoAccessIncomingMedia() {
-        return OsUtil.isAtLeastM();
-    }
-}
diff --git a/src/com/android/messaging/util/MediaUtilImpl.java b/src/com/android/messaging/util/MediaUtilImpl.java
deleted file mode 100644
index 272a057..0000000
--- a/src/com/android/messaging/util/MediaUtilImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.content.res.AssetFileDescriptor;
-import android.media.AudioManager;
-import android.media.MediaPlayer;
-
-/**
- * Default implementation of MediaUtil
- */
-public class MediaUtilImpl extends MediaUtil {
-
-    @Override
-    public void playSound(final Context context, final int resId,
-            final OnCompletionListener completionListener) {
-        // We want to play at the media volume and not the ringer volume, but we do want to
-        // avoid playing sound when the ringer/notifications are silenced. This is used for
-        // in app sounds that are not critical and should not impact running silent but also
-        // shouldn't play at full ring volume if you want to hear your ringer but don't want
-        // to be annoyed with in-app volume.
-        AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
-        try {
-            final MediaPlayer mediaPlayer = new MediaPlayer();
-            mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
-            final AssetFileDescriptor afd = context.getResources().openRawResourceFd(resId);
-            mediaPlayer.setDataSource(
-                    afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
-            afd.close();
-            mediaPlayer.prepare();
-            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
-                @Override
-                public void onCompletion(final MediaPlayer mp) {
-                    if (completionListener != null) {
-                        completionListener.onCompletion();
-                    }
-                    mp.stop();
-                    mp.release();
-                }
-            });
-            mediaPlayer.seekTo(0);
-            mediaPlayer.start();
-           return;
-        } catch (final Exception e) {
-            LogUtil.w("MediaUtilImpl", "Error playing sound id: " + resId, e);
-        }
-        if (completionListener != null) {
-            // Call the completion handler to not block functionality if audio play fails
-            completionListener.onCompletion();
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/messaging/util/NotificationPlayer.java b/src/com/android/messaging/util/NotificationPlayer.java
deleted file mode 100644
index a4ed44e..0000000
--- a/src/com/android/messaging/util/NotificationPlayer.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.media.AudioManager;
-import android.media.MediaPlayer;
-import android.media.MediaPlayer.OnCompletionListener;
-import android.net.Uri;
-import android.os.Looper;
-import android.os.PowerManager;
-import android.os.SystemClock;
-
-import com.android.messaging.Factory;
-
-import java.util.LinkedList;
-
-/**
- * This class is provides the same interface and functionality as android.media.AsyncPlayer
- * with the following differences:
- * - whenever audio is played, audio focus is requested,
- * - whenever audio playback is stopped or the playback completed, audio focus is abandoned.
- *
- * This file has been copied from com.android.server.NotificationPlayer. The only modification is
- * the addition of a volume parameter. Hopefully the framework will adapt AsyncPlayer to support
- * all the functionality in this class, at which point this one can be deleted.
- */
-public class NotificationPlayer implements OnCompletionListener {
-    private static final int PLAY = 1;
-    private static final int STOP = 2;
-    private static final boolean mDebug = false;
-
-    private static final class Command {
-        int code;
-        Uri uri;
-        boolean looping;
-        int stream;
-        float volume;
-        long requestTime;
-        boolean releaseFocus;
-
-        @Override
-        public String toString() {
-            return "{ code=" + code + " looping=" + looping + " stream=" + stream
-                    + " uri=" + uri + " }";
-        }
-    }
-
-    private final LinkedList<Command> mCmdQueue = new LinkedList<Command>();
-
-    private Looper mLooper;
-
-    /*
-     * Besides the use of audio focus, the only implementation difference between AsyncPlayer and
-     * NotificationPlayer resides in the creation of the MediaPlayer. For the completion callback,
-     * OnCompletionListener, to be called at the end of the playback, the MediaPlayer needs to
-     * be created with a looper running so its event handler is not null.
-     */
-    private final class CreationAndCompletionThread extends Thread {
-        public Command mCmd;
-        public CreationAndCompletionThread(final Command cmd) {
-            super();
-            mCmd = cmd;
-        }
-
-        @Override
-        public void run() {
-            Looper.prepare();
-            mLooper = Looper.myLooper();
-            synchronized (this) {
-                final AudioManager audioManager =
-                        (AudioManager) Factory.get().getApplicationContext()
-                        .getSystemService(Context.AUDIO_SERVICE);
-                try {
-                    final MediaPlayer player = new MediaPlayer();
-                    player.setAudioStreamType(mCmd.stream);
-                    player.setDataSource(Factory.get().getApplicationContext(), mCmd.uri);
-                    player.setLooping(mCmd.looping);
-                    player.setVolume(mCmd.volume, mCmd.volume);
-                    player.prepare();
-                    if ((mCmd.uri != null) && (mCmd.uri.getEncodedPath() != null)
-                            && (mCmd.uri.getEncodedPath().length() > 0)) {
-                        audioManager.requestAudioFocus(null, mCmd.stream,
-                                mCmd.looping ? AudioManager.AUDIOFOCUS_GAIN_TRANSIENT
-                                        : AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
-                    }
-                    player.setOnCompletionListener(NotificationPlayer.this);
-                    player.start();
-                    if (mPlayer != null) {
-                        mPlayer.release();
-                    }
-                    mPlayer = player;
-                } catch (final Exception e) {
-                    LogUtil.w(mTag, "error loading sound for " + mCmd.uri, e);
-                }
-                mAudioManager = audioManager;
-                this.notify();
-            }
-            Looper.loop();
-        }
-    }
-
-    private void startSound(final Command cmd) {
-        // Preparing can be slow, so if there is something else
-        // is playing, let it continue until we're done, so there
-        // is less of a glitch.
-        try {
-            if (mDebug) {
-                LogUtil.d(mTag, "Starting playback");
-            }
-            //-----------------------------------
-            // This is were we deviate from the AsyncPlayer implementation and create the
-            // MediaPlayer in a new thread with which we're synchronized
-            synchronized (mCompletionHandlingLock) {
-                // if another sound was already playing, it doesn't matter we won't get notified
-                // of the completion, since only the completion notification of the last sound
-                // matters
-                if ((mLooper != null)
-                        && (mLooper.getThread().getState() != Thread.State.TERMINATED)) {
-                    mLooper.quit();
-                }
-                mCompletionThread = new CreationAndCompletionThread(cmd);
-                synchronized (mCompletionThread) {
-                    mCompletionThread.start();
-                    mCompletionThread.wait();
-                }
-            }
-            //-----------------------------------
-
-            final long delay = SystemClock.elapsedRealtime() - cmd.requestTime;
-            if (delay > 1000) {
-                LogUtil.w(mTag, "Notification sound delayed by " + delay + "msecs");
-            }
-        } catch (final Exception e) {
-            LogUtil.w(mTag, "error loading sound for " + cmd.uri, e);
-        }
-    }
-
-    private void stopSound(final Command cmd) {
-        if (mPlayer == null) {
-            return;
-        }
-        final long delay = SystemClock.elapsedRealtime() - cmd.requestTime;
-        if (delay > 1000) {
-            LogUtil.w(mTag, "Notification stop delayed by " + delay + "msecs");
-        }
-        mPlayer.stop();
-        mPlayer.release();
-        mPlayer = null;
-        if (cmd.releaseFocus && mAudioManager != null) {
-            mAudioManager.abandonAudioFocus(null);
-        }
-        mAudioManager = null;
-        if ((mLooper != null) && (mLooper.getThread().getState() != Thread.State.TERMINATED)) {
-            mLooper.quit();
-        }
-    }
-
-    private final class CmdThread extends java.lang.Thread {
-        CmdThread() {
-            super("NotificationPlayer-" + mTag);
-        }
-
-        @Override
-        public void run() {
-            while (true) {
-                Command cmd = null;
-
-                synchronized (mCmdQueue) {
-                    if (mDebug) {
-                        LogUtil.d(mTag, "RemoveFirst");
-                    }
-                    cmd = mCmdQueue.removeFirst();
-                }
-
-                switch (cmd.code) {
-                    case PLAY:
-                        if (mDebug) {
-                            LogUtil.d(mTag, "PLAY");
-                        }
-                        startSound(cmd);
-                        break;
-                    case STOP:
-                        if (mDebug) {
-                            LogUtil.d(mTag, "STOP");
-                        }
-                        stopSound(cmd);
-                        break;
-                }
-
-                synchronized (mCmdQueue) {
-                    if (mCmdQueue.size() == 0) {
-                        // nothing left to do, quit
-                        // doing this check after we're done prevents the case where they
-                        // added it during the operation from spawning two threads and
-                        // trying to do them in parallel.
-                        mThread = null;
-                        releaseWakeLock();
-                        return;
-                    }
-                }
-            }
-        }
-    }
-
-    @Override
-    public void onCompletion(final MediaPlayer mp) {
-        if (mAudioManager != null) {
-            mAudioManager.abandonAudioFocus(null);
-        }
-        // if there are no more sounds to play, end the Looper to listen for media completion
-        synchronized (mCmdQueue) {
-            if (mCmdQueue.size() == 0) {
-                synchronized (mCompletionHandlingLock) {
-                    if (mLooper != null) {
-                        mLooper.quit();
-                    }
-                    mCompletionThread = null;
-                }
-            }
-        }
-    }
-
-    private String mTag;
-    private CmdThread mThread;
-    private CreationAndCompletionThread mCompletionThread;
-    private final Object mCompletionHandlingLock = new Object();
-    private MediaPlayer mPlayer;
-    private PowerManager.WakeLock mWakeLock;
-    private AudioManager mAudioManager;
-
-    // The current state according to the caller.  Reality lags behind
-    // because of the asynchronous nature of this class.
-    private int mState = STOP;
-
-    /**
-     * Construct a NotificationPlayer object.
-     *
-     * @param tag a string to use for debugging
-     */
-    public NotificationPlayer(final String tag) {
-        if (tag != null) {
-            mTag = tag;
-        } else {
-            mTag = "NotificationPlayer";
-        }
-    }
-
-    /**
-     * Start playing the sound.  It will actually start playing at some
-     * point in the future.  There are no guarantees about latency here.
-     * Calling this before another audio file is done playing will stop
-     * that one and start the new one.
-     *
-     * @param uri The URI to play.  (see {@link MediaPlayer#setDataSource(Context, Uri)})
-     * @param looping Whether the audio should loop forever.
-     *          (see {@link MediaPlayer#setLooping(boolean)})
-     * @param stream the AudioStream to use.
-     *          (see {@link MediaPlayer#setAudioStreamType(int)})
-     * @param volume The volume at which to play this sound, as a fraction of the system volume for
-     *          the relevant stream type. A value of 1 is the maximum and means play at the system
-     *          volume with no attenuation.
-     */
-    public void play(final Uri uri, final boolean looping, final int stream, final float volume) {
-        final Command cmd = new Command();
-        cmd.requestTime = SystemClock.elapsedRealtime();
-        cmd.code = PLAY;
-        cmd.uri = uri;
-        cmd.looping = looping;
-        cmd.stream = stream;
-        cmd.volume = volume;
-        synchronized (mCmdQueue) {
-            enqueueLocked(cmd);
-            mState = PLAY;
-        }
-    }
-
-    /** Same as calling stop(true) */
-    public void stop() {
-        stop(true);
-    }
-
-    /**
-     * Stop a previously played sound.  It can't be played again or unpaused
-     * at this point.  Calling this multiple times has no ill effects.
-     * @param releaseAudioFocus whether to release audio focus
-     */
-    public void stop(final boolean releaseAudioFocus) {
-        synchronized (mCmdQueue) {
-            // This check allows stop to be called multiple times without starting
-            // a thread that ends up doing nothing.
-            if (mState != STOP) {
-                final Command cmd = new Command();
-                cmd.requestTime = SystemClock.elapsedRealtime();
-                cmd.code = STOP;
-                cmd.releaseFocus = releaseAudioFocus;
-                enqueueLocked(cmd);
-                mState = STOP;
-            }
-        }
-    }
-
-    private void enqueueLocked(final Command cmd) {
-        mCmdQueue.add(cmd);
-        if (mThread == null) {
-            acquireWakeLock();
-            mThread = new CmdThread();
-            mThread.start();
-        }
-    }
-
-    /**
-     * We want to hold a wake lock while we do the prepare and play.  The stop probably is
-     * optional, but it won't hurt to have it too.  The problem is that if you start a sound
-     * while you're holding a wake lock (e.g. an alarm starting a notification), you want the
-     * sound to play, but if the CPU turns off before mThread gets to work, it won't.  The
-     * simplest way to deal with this is to make it so there is a wake lock held while the
-     * thread is starting or running.  You're going to need the WAKE_LOCK permission if you're
-     * going to call this.
-     *
-     * This must be called before the first time play is called.
-     *
-     * @hide
-     */
-    public void setUsesWakeLock() {
-        if (mWakeLock != null || mThread != null) {
-            // if either of these has happened, we've already played something.
-            // and our releases will be out of sync.
-            throw new RuntimeException("assertion failed mWakeLock=" + mWakeLock
-                    + " mThread=" + mThread);
-        }
-        final PowerManager pm = (PowerManager) Factory.get().getApplicationContext()
-                .getSystemService(Context.POWER_SERVICE);
-        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, mTag);
-    }
-
-    private void acquireWakeLock() {
-        if (mWakeLock != null) {
-            mWakeLock.acquire();
-        }
-    }
-
-    private void releaseWakeLock() {
-        if (mWakeLock != null) {
-            mWakeLock.release();
-        }
-    }
-}
-
diff --git a/src/com/android/messaging/util/OsUtil.java b/src/com/android/messaging/util/OsUtil.java
deleted file mode 100644
index 1d9742a..0000000
--- a/src/com/android/messaging/util/OsUtil.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.Manifest;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.os.UserHandle;
-import android.os.UserManager;
-import androidx.core.os.BuildCompat;
-
-import com.android.messaging.Factory;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Set;
-
-/**
- * Android OS version utilities
- */
-public class OsUtil {
-    private static boolean sIsAtLeastICS_MR1;
-    private static boolean sIsAtLeastJB;
-    private static boolean sIsAtLeastJB_MR1;
-    private static boolean sIsAtLeastJB_MR2;
-    private static boolean sIsAtLeastKLP;
-    private static boolean sIsAtLeastL;
-    private static boolean sIsAtLeastL_MR1;
-    private static boolean sIsAtLeastM;
-    private static boolean sIsAtLeastN;
-
-    private static Boolean sIsSecondaryUser = null;
-
-    static {
-        final int v = getApiVersion();
-        sIsAtLeastICS_MR1 = v >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1;
-        sIsAtLeastJB = v >= android.os.Build.VERSION_CODES.JELLY_BEAN;
-        sIsAtLeastJB_MR1 = v >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
-        sIsAtLeastJB_MR2 = v >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2;
-        sIsAtLeastKLP = v >= android.os.Build.VERSION_CODES.KITKAT;
-        sIsAtLeastL = v >= android.os.Build.VERSION_CODES.LOLLIPOP;
-        sIsAtLeastL_MR1 = v >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1;
-        sIsAtLeastM = v >= android.os.Build.VERSION_CODES.M;
-        sIsAtLeastN = BuildCompat.isAtLeastN();
-    }
-
-    /**
-     * @return True if the version of Android that we're running on is at least Ice Cream Sandwich
-     *  MR1 (API level 15).
-     */
-    public static boolean isAtLeastICS_MR1() {
-        return sIsAtLeastICS_MR1;
-    }
-
-    /**
-     * @return True if the version of Android that we're running on is at least Jelly Bean
-     *  (API level 16).
-     */
-    public static boolean isAtLeastJB() {
-        return sIsAtLeastJB;
-    }
-
-    /**
-     * @return True if the version of Android that we're running on is at least Jelly Bean MR1
-     *  (API level 17).
-     */
-    public static boolean isAtLeastJB_MR1() {
-        return sIsAtLeastJB_MR1;
-    }
-
-    /**
-     * @return True if the version of Android that we're running on is at least Jelly Bean MR2
-     *  (API level 18).
-     */
-    public static boolean isAtLeastJB_MR2() {
-        return sIsAtLeastJB_MR2;
-    }
-
-    /**
-     * @return True if the version of Android that we're running on is at least KLP
-     *  (API level 19).
-     */
-    public static boolean isAtLeastKLP() {
-        return sIsAtLeastKLP;
-    }
-
-    /**
-     * @return True if the version of Android that we're running on is at least L
-     *  (API level 21).
-     */
-    public static boolean isAtLeastL() {
-        return sIsAtLeastL;
-    }
-
-    /**
-     * @return True if the version of Android that we're running on is at least L MR1
-     *  (API level 22).
-     */
-    public static boolean isAtLeastL_MR1() {
-        return sIsAtLeastL_MR1;
-    }
-
-    /**
-     * @return True if the version of Android that we're running on is at least M
-     *  (API level 23).
-     */
-    public static boolean isAtLeastM() {
-        return sIsAtLeastM;
-    }
-
-    /**
-     * @return True if the version of Android that we're running on is at least N
-     *  (API level 24).
-     */
-    public static boolean isAtLeastN() {
-        return sIsAtLeastN;
-    }
-
-    /**
-     * @return The Android API version of the OS that we're currently running on.
-     */
-    public static int getApiVersion() {
-        return android.os.Build.VERSION.SDK_INT;
-    }
-
-    public static boolean isSecondaryUser() {
-        if (sIsSecondaryUser == null) {
-            final Context context = Factory.get().getApplicationContext();
-            boolean isSecondaryUser = false;
-
-            // Only check for newer devices (but not the nexus 10)
-            if (OsUtil.sIsAtLeastJB_MR1 && !"Nexus 10".equals(Build.MODEL)) {
-                final UserHandle uh = android.os.Process.myUserHandle();
-                final UserManager userManager =
-                        (UserManager) context.getSystemService(Context.USER_SERVICE);
-                if (userManager != null) {
-                    final long userSerialNumber = userManager.getSerialNumberForUser(uh);
-                    isSecondaryUser = (0 != userSerialNumber);
-                }
-            }
-            sIsSecondaryUser = isSecondaryUser;
-        }
-        return sIsSecondaryUser;
-    }
-
-    /**
-     * Creates a joined string from a Set<String> using the given delimiter.
-     * @param values
-     * @param delimiter
-     * @return
-     */
-    public static String joinFromSetWithDelimiter(
-            final Set<String> values, final String delimiter) {
-        if (values != null) {
-            final StringBuilder joinedStringBuilder = new StringBuilder();
-            boolean firstValue = true;
-            for (final String value : values) {
-                if (firstValue) {
-                    firstValue = false;
-                } else {
-                    joinedStringBuilder.append(delimiter);
-                }
-                joinedStringBuilder.append(value);
-            }
-            return joinedStringBuilder.toString();
-        }
-        return null;
-    }
-
-    private static Hashtable<String, Integer> sPermissions = new Hashtable<String, Integer>();
-
-    /**
-     * Check if the app has the specified permission. If it does not, the app needs to use
-     * {@link android.app.Activity#requestPermission}. Note that if it
-     * returns true, it cannot return false in the same process as the OS kills the process when
-     * any permission is revoked.
-     * @param permission A permission from {@link android.Manifest.permission}
-     */
-    public static boolean hasPermission(final String permission) {
-        if (OsUtil.isAtLeastM()) {
-            // It is safe to cache the PERMISSION_GRANTED result as the process gets killed if the
-            // user revokes the permission setting. However, PERMISSION_DENIED should not be
-            // cached as the process does not get killed if the user enables the permission setting.
-            if (!sPermissions.containsKey(permission)
-                    || sPermissions.get(permission) == PackageManager.PERMISSION_DENIED) {
-                final Context context = Factory.get().getApplicationContext();
-                final int permissionState = context.checkSelfPermission(permission);
-                sPermissions.put(permission, permissionState);
-            }
-            return sPermissions.get(permission) == PackageManager.PERMISSION_GRANTED;
-        } else {
-            return true;
-        }
-    }
-
-    /** Does the app have all the specified permissions */
-    public static boolean hasPermissions(final String[] permissions) {
-        for (final String permission : permissions) {
-            if (!hasPermission(permission)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public static boolean hasPhonePermission() {
-        return hasPermission(Manifest.permission.READ_PHONE_STATE);
-    }
-
-    public static boolean hasSmsPermission() {
-        return hasPermission(Manifest.permission.READ_SMS);
-    }
-
-    public static boolean hasLocationPermission() {
-        return OsUtil.hasPermission(Manifest.permission.ACCESS_FINE_LOCATION);
-    }
-
-
-    public static boolean hasStoragePermission() {
-        // Note that READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE are granted or denied
-        // together.
-        return OsUtil.hasPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
-    }
-
-    public static boolean hasRecordAudioPermission() {
-        return OsUtil.hasPermission(Manifest.permission.RECORD_AUDIO);
-    }
-
-    /**
-     * Returns array with the set of permissions that have not been granted from the given set.
-     * The array will be empty if the app has all of the specified permissions. Note that calling
-     * {@link Activity#requestPermissions} for an already granted permission can prompt the user
-     * again, and its up to the app to only request permissions that are missing.
-     */
-    public static String[] getMissingPermissions(final String[] permissions) {
-        final ArrayList<String> missingList = new ArrayList<String>();
-        for (final String permission : permissions) {
-            if (!hasPermission(permission)) {
-                missingList.add(permission);
-            }
-        }
-
-        final String[] missingArray = new String[missingList.size()];
-        missingList.toArray(missingArray);
-        return missingArray;
-    }
-
-    private static String[] sRequiredPermissions = new String[] {
-        // Required to read existing SMS threads
-        Manifest.permission.READ_SMS,
-        // Required for knowing the phone number, number of SIMs, etc.
-        Manifest.permission.READ_PHONE_STATE,
-        // This is not strictly required, but simplifies the contact picker scenarios
-        Manifest.permission.READ_CONTACTS,
-    };
-
-    /** Does the app have the minimum set of permissions required to operate. */
-    public static boolean hasRequiredPermissions() {
-        return hasPermissions(sRequiredPermissions);
-    }
-
-    public static String[] getMissingRequiredPermissions() {
-        return getMissingPermissions(sRequiredPermissions);
-    }
-}
diff --git a/src/com/android/messaging/util/PendingIntentConstants.java b/src/com/android/messaging/util/PendingIntentConstants.java
deleted file mode 100644
index 1a594c5..0000000
--- a/src/com/android/messaging/util/PendingIntentConstants.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-
-public class PendingIntentConstants {
-    // Notifications
-    public static final int SMS_NOTIFICATION_ID = 0;
-    public static final int SMS_SECONDARY_USER_NOTIFICATION_ID = 1;
-    public static final int MSG_SEND_ERROR = 2;
-    public static final int SMS_STORAGE_LOW_NOTIFICATION_ID = 3;
-
-    // Request codes
-    public static final int UPDATE_NOTIFICATIONS_ALARM_ACTION_ID = 100;
-
-    public static final int MIN_ASSIGNED_REQUEST_CODE = 1001;
-
-    // Logging
-    private static final String TAG = LogUtil.BUGLE_TAG;
-    private static final boolean VERBOSE = false;
-
-    // Internal Constants
-    private static final String NOTIFICATION_REQUEST_CODE_PREFS = "notificationRequestCodes.v1";
-    private static final String REQUEST_CODE_DELIMITER = "|";
-    private static final String MAX_REQUEST_CODE_KEY = "maxRequestCode";
-}
diff --git a/src/com/android/messaging/util/PhoneUtils.java b/src/com/android/messaging/util/PhoneUtils.java
deleted file mode 100644
index 08889b8..0000000
--- a/src/com/android/messaging/util/PhoneUtils.java
+++ /dev/null
@@ -1,1017 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.database.Cursor;
-import android.net.ConnectivityManager;
-import android.provider.Settings;
-import android.provider.Telephony;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.SmsManager;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-
-import androidx.collection.ArrayMap;
-import androidx.core.os.BuildCompat;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.sms.MmsSmsUtils;
-
-import com.google.i18n.phonenumbers.NumberParseException;
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
-import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * This class abstracts away platform dependency of calling telephony related
- * platform APIs, mostly involving TelephonyManager, SubscriptionManager and
- * a bit of SmsManager.
- *
- * The class instance can only be obtained via the get(int subId) method parameterized
- * by a SIM subscription ID. On pre-L_MR1, the subId is not used and it has to be
- * the default subId (-1).
- *
- * A convenient getDefault() method is provided for default subId (-1) on any platform
- */
-public abstract class PhoneUtils {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private static final int MINIMUM_PHONE_NUMBER_LENGTH_TO_FORMAT = 6;
-
-    private static final List<SubscriptionInfo> EMPTY_SUBSCRIPTION_LIST = new ArrayList<>();
-
-    // The canonical phone number cache
-    // Each country gets its own cache. The following maps from ISO country code to
-    // the country's cache. Each cache maps from original phone number to canonicalized phone
-    private static final ArrayMap<String, ArrayMap<String, String>> sCanonicalPhoneNumberCache =
-            new ArrayMap<>();
-
-    protected final Context mContext;
-    protected final TelephonyManager mTelephonyManager;
-    protected final int mSubId;
-
-    public PhoneUtils(int subId) {
-        mSubId = subId;
-        mContext = Factory.get().getApplicationContext();
-        mTelephonyManager =
-                (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
-    }
-
-    /**
-     * Get the SIM's country code
-     *
-     * @return the country code on the SIM
-     */
-    public abstract String getSimCountry();
-
-    /**
-     * Get number of SIM slots
-     *
-     * @return the SIM slot count
-     */
-    public abstract int getSimSlotCount();
-
-    /**
-     * Get SIM's carrier name
-     *
-     * @return the carrier name of the SIM
-     */
-    public abstract String getCarrierName();
-
-    /**
-     * Check if there is SIM inserted on the device
-     *
-     * @return true if there is SIM inserted, false otherwise
-     */
-    public abstract boolean hasSim();
-
-    /**
-     * Check if the SIM is roaming
-     *
-     * @return true if the SIM is in romaing state, false otherwise
-     */
-    public abstract boolean isRoaming();
-
-    /**
-     * Get the MCC and MNC in integer of the SIM's provider
-     *
-     * @return an array of two ints, [0] is the MCC code and [1] is the MNC code
-     */
-    public abstract int[] getMccMnc();
-
-    /**
-     * Get the mcc/mnc string
-     *
-     * @return the text of mccmnc string
-     */
-    public abstract String getSimOperatorNumeric();
-
-    /**
-     * Get the SIM's self raw number, i.e. not canonicalized
-     *
-     * @param allowOverride Whether to use the app's setting to override the self number
-     * @return the original self number
-     * @throws IllegalStateException if no active subscription on L-MR1+
-     */
-    public abstract String getSelfRawNumber(final boolean allowOverride);
-
-    /**
-     * Returns the "effective" subId, or the subId used in the context of actual messages,
-     * conversations and subscription-specific settings, for the given "nominal" sub id.
-     *
-     * For pre-L-MR1 platform, this should always be
-     * {@value com.android.messaging.datamodel.data.ParticipantData#DEFAULT_SELF_SUB_ID};
-     *
-     * On the other hand, for L-MR1 and above, DEFAULT_SELF_SUB_ID will be mapped to the system
-     * default subscription id for SMS.
-     *
-     * @param subId The input subId
-     * @return the real subId if we can convert
-     */
-    public abstract int getEffectiveSubId(int subId);
-
-    /**
-     * Returns the number of active subscriptions in the device.
-     */
-    public abstract int getActiveSubscriptionCount();
-
-    /**
-     * Get {@link SmsManager} instance
-     *
-     * @return the relevant SmsManager instance based on OS version and subId
-     */
-    public abstract SmsManager getSmsManager();
-
-    /**
-     * Get the default SMS subscription id
-     *
-     * @return the default sub ID
-     */
-    public abstract int getDefaultSmsSubscriptionId();
-
-    /**
-     * Returns if there's currently a system default SIM selected for sending SMS.
-     */
-    public abstract boolean getHasPreferredSmsSim();
-
-    /**
-     * For L_MR1, system may return a negative subId. Convert this into our own
-     * subId, so that we consistently use -1 for invalid or default.
-     *
-     * see b/18629526 and b/18670346
-     *
-     * @param intent The push intent from system
-     * @param extraName The name of the sub id extra
-     * @return the subId that is valid and meaningful for the app
-     */
-    public abstract int getEffectiveIncomingSubIdFromSystem(Intent intent, String extraName);
-
-    /**
-     * Get the subscription_id column value from a telephony provider cursor
-     *
-     * @param cursor The database query cursor
-     * @param subIdIndex The index of the subId column in the cursor
-     * @return the subscription_id column value from the cursor
-     */
-    public abstract int getSubIdFromTelephony(Cursor cursor, int subIdIndex);
-
-    /**
-     * Check if data roaming is enabled
-     *
-     * @return true if data roaming is enabled, false otherwise
-     */
-    public abstract boolean isDataRoamingEnabled();
-
-    /**
-     * Check if mobile data is enabled
-     *
-     * @return true if mobile data is enabled, false otherwise
-     */
-    public abstract boolean isMobileDataEnabled();
-
-    /**
-     * Get the set of self phone numbers, all normalized
-     *
-     * @return the set of normalized self phone numbers
-     */
-    public abstract HashSet<String> getNormalizedSelfNumbers();
-
-    /**
-     * This interface packages methods should only compile on L_MR1.
-     * This is needed to make unit tests happy when mockito tries to
-     * mock these methods. Calling on these methods on L_MR1 requires
-     * an extra invocation of toMr1().
-     */
-    public interface LMr1 {
-        /**
-         * Get this SIM's information. Only applies to L_MR1 above
-         *
-         * @return the subscription info of the SIM
-         */
-        public abstract SubscriptionInfo getActiveSubscriptionInfo();
-
-        /**
-         * Get the list of active SIMs in system. Only applies to L_MR1 above
-         *
-         * @return the list of subscription info for all inserted SIMs
-         */
-        public abstract List<SubscriptionInfo> getActiveSubscriptionInfoList();
-
-        /**
-         * Register subscription change listener. Only applies to L_MR1 above
-         *
-         * @param listener The listener to register
-         */
-        public abstract void registerOnSubscriptionsChangedListener(
-                SubscriptionManager.OnSubscriptionsChangedListener listener);
-    }
-
-    /**
-     * The PhoneUtils class for pre L_MR1
-     */
-    public static class PhoneUtilsPreLMR1 extends PhoneUtils {
-        private final ConnectivityManager mConnectivityManager;
-
-        public PhoneUtilsPreLMR1() {
-            super(ParticipantData.DEFAULT_SELF_SUB_ID);
-            mConnectivityManager =
-                    (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
-        }
-
-        @Override
-        public String getSimCountry() {
-            final String country = mTelephonyManager.getSimCountryIso();
-            if (TextUtils.isEmpty(country)) {
-                return null;
-            }
-            return country.toUpperCase();
-        }
-
-        @Override
-        public int getSimSlotCount() {
-            // Don't support MSIM pre-L_MR1
-            return 1;
-        }
-
-        @Override
-        public String getCarrierName() {
-            return mTelephonyManager.getNetworkOperatorName();
-        }
-
-        @Override
-        public boolean hasSim() {
-            return mTelephonyManager.getSimState() != TelephonyManager.SIM_STATE_ABSENT;
-        }
-
-        @Override
-        public boolean isRoaming() {
-            return mTelephonyManager.isNetworkRoaming();
-        }
-
-        @Override
-        public int[] getMccMnc() {
-            final String mccmnc = mTelephonyManager.getSimOperator();
-            int mcc = 0;
-            int mnc = 0;
-            try {
-                mcc = Integer.parseInt(mccmnc.substring(0, 3));
-                mnc = Integer.parseInt(mccmnc.substring(3));
-            } catch (Exception e) {
-                LogUtil.w(TAG, "PhoneUtils.getMccMnc: invalid string " + mccmnc, e);
-            }
-            return new int[]{mcc, mnc};
-        }
-
-        @Override
-        public String getSimOperatorNumeric() {
-            return mTelephonyManager.getSimOperator();
-        }
-
-        @Override
-        public String getSelfRawNumber(final boolean allowOverride) {
-            if (allowOverride) {
-                final String userDefinedNumber = getNumberFromPrefs(mContext,
-                        ParticipantData.DEFAULT_SELF_SUB_ID);
-                if (!TextUtils.isEmpty(userDefinedNumber)) {
-                    return userDefinedNumber;
-                }
-            }
-            return mTelephonyManager.getLine1Number();
-        }
-
-        @Override
-        public int getEffectiveSubId(int subId) {
-            Assert.equals(ParticipantData.DEFAULT_SELF_SUB_ID, subId);
-            return ParticipantData.DEFAULT_SELF_SUB_ID;
-        }
-
-        @Override
-        public SmsManager getSmsManager() {
-            return SmsManager.getDefault();
-        }
-
-        @Override
-        public int getDefaultSmsSubscriptionId() {
-            Assert.fail("PhoneUtils.getDefaultSmsSubscriptionId(): not supported before L MR1");
-            return ParticipantData.DEFAULT_SELF_SUB_ID;
-        }
-
-        @Override
-        public boolean getHasPreferredSmsSim() {
-            // SIM selection is not supported pre-L_MR1.
-            return true;
-        }
-
-        @Override
-        public int getActiveSubscriptionCount() {
-            return hasSim() ? 1 : 0;
-        }
-
-        @Override
-        public int getEffectiveIncomingSubIdFromSystem(Intent intent, String extraName) {
-            // Pre-L_MR1 always returns the default id
-            return ParticipantData.DEFAULT_SELF_SUB_ID;
-        }
-
-        @Override
-        public int getSubIdFromTelephony(Cursor cursor, int subIdIndex) {
-            // No subscription_id column before L_MR1
-            return ParticipantData.DEFAULT_SELF_SUB_ID;
-        }
-
-        @Override
-        @SuppressWarnings("deprecation")
-        public boolean isDataRoamingEnabled() {
-            if (BuildCompat.isAtLeastT()) {
-                return mTelephonyManager.isDataRoamingEnabled();
-            }
-            boolean dataRoamingEnabled = false;
-            final ContentResolver cr = mContext.getContentResolver();
-            if (OsUtil.isAtLeastJB_MR1()) {
-                dataRoamingEnabled =
-                        (Settings.Global.getInt(cr, Settings.Global.DATA_ROAMING, 0) != 0);
-            } else {
-                dataRoamingEnabled =
-                        (Settings.System.getInt(cr, Settings.System.DATA_ROAMING, 0) != 0);
-            }
-            return dataRoamingEnabled;
-        }
-
-        @Override
-        public boolean isMobileDataEnabled() {
-            boolean mobileDataEnabled = false;
-            try {
-                final Class cmClass = mConnectivityManager.getClass();
-                final Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
-                method.setAccessible(true); // Make the method callable
-                // get the setting for "mobile data"
-                mobileDataEnabled = (Boolean) method.invoke(mConnectivityManager);
-            } catch (final Exception e) {
-                LogUtil.e(TAG, "PhoneUtil.isMobileDataEnabled: system api not found", e);
-            }
-            return mobileDataEnabled;
-        }
-
-        @Override
-        public HashSet<String> getNormalizedSelfNumbers() {
-            final HashSet<String> numbers = new HashSet<>();
-            numbers.add(getCanonicalForSelf(true/*allowOverride*/));
-            return numbers;
-        }
-    }
-
-    /**
-     * The PhoneUtils class for L_MR1
-     */
-    public static class PhoneUtilsLMR1 extends PhoneUtils implements LMr1 {
-        private final SubscriptionManager mSubscriptionManager;
-
-        public PhoneUtilsLMR1(final int subId) {
-            super(subId);
-            mSubscriptionManager = SubscriptionManager.from(Factory.get().getApplicationContext());
-        }
-
-        @Override
-        public String getSimCountry() {
-            final SubscriptionInfo subInfo = getActiveSubscriptionInfo();
-            if (subInfo != null) {
-                final String country = subInfo.getCountryIso();
-                if (TextUtils.isEmpty(country)) {
-                    return null;
-                }
-                return country.toUpperCase();
-            }
-            return null;
-        }
-
-        @Override
-        public int getSimSlotCount() {
-            return mSubscriptionManager.getActiveSubscriptionInfoCountMax();
-        }
-
-        @Override
-        public String getCarrierName() {
-            final SubscriptionInfo subInfo = getActiveSubscriptionInfo();
-            if (subInfo != null) {
-                final CharSequence displayName = subInfo.getDisplayName();
-                if (!TextUtils.isEmpty(displayName)) {
-                    return displayName.toString();
-                }
-                final CharSequence carrierName = subInfo.getCarrierName();
-                if (carrierName != null) {
-                    return carrierName.toString();
-                }
-            }
-            return null;
-        }
-
-        @Override
-        public boolean hasSim() {
-            return mSubscriptionManager.getActiveSubscriptionInfoCount() > 0;
-        }
-
-        @Override
-        public boolean isRoaming() {
-            return mSubscriptionManager.isNetworkRoaming(mSubId);
-        }
-
-        @Override
-        public int[] getMccMnc() {
-            int mcc = 0;
-            int mnc = 0;
-            final SubscriptionInfo subInfo = getActiveSubscriptionInfo();
-            if (subInfo != null) {
-                mcc = subInfo.getMcc();
-                mnc = subInfo.getMnc();
-            }
-            return new int[]{mcc, mnc};
-        }
-
-        @Override
-        public String getSimOperatorNumeric() {
-            // For L_MR1 we return the canonicalized (xxxxxx) string
-            return getMccMncString(getMccMnc());
-        }
-
-        @Override
-        public String getSelfRawNumber(final boolean allowOverride) {
-            if (allowOverride) {
-                final String userDefinedNumber = getNumberFromPrefs(mContext, mSubId);
-                if (!TextUtils.isEmpty(userDefinedNumber)) {
-                    return userDefinedNumber;
-                }
-            }
-
-            final SubscriptionInfo subInfo = getActiveSubscriptionInfo();
-            if (subInfo != null) {
-                String phoneNumber = subInfo.getNumber();
-                if (TextUtils.isEmpty(phoneNumber) && LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                    LogUtil.d(TAG, "SubscriptionInfo phone number for self is empty!");
-                }
-                return phoneNumber;
-            }
-            LogUtil.w(TAG, "PhoneUtils.getSelfRawNumber: subInfo is null for " + mSubId);
-            throw new IllegalStateException("No active subscription");
-        }
-
-        @Override
-        public SubscriptionInfo getActiveSubscriptionInfo() {
-            try {
-                final SubscriptionInfo subInfo =
-                        mSubscriptionManager.getActiveSubscriptionInfo(mSubId);
-                if (subInfo == null) {
-                    if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) {
-                        // This is possible if the sub id is no longer available.
-                        LogUtil.d(TAG, "PhoneUtils.getActiveSubscriptionInfo(): empty sub info for "
-                                + mSubId);
-                    }
-                }
-                return subInfo;
-            } catch (Exception e) {
-                LogUtil.e(TAG, "PhoneUtils.getActiveSubscriptionInfo: system exception for "
-                        + mSubId, e);
-            }
-            return null;
-        }
-
-        @Override
-        public List<SubscriptionInfo> getActiveSubscriptionInfoList() {
-            final List<SubscriptionInfo> subscriptionInfos =
-                    mSubscriptionManager.getActiveSubscriptionInfoList();
-            if (subscriptionInfos != null) {
-                return subscriptionInfos;
-            }
-            return EMPTY_SUBSCRIPTION_LIST;
-        }
-
-        @Override
-        public int getEffectiveSubId(int subId) {
-            if (subId == ParticipantData.DEFAULT_SELF_SUB_ID) {
-                return getDefaultSmsSubscriptionId();
-            }
-            return subId;
-        }
-
-        @Override
-        public void registerOnSubscriptionsChangedListener(
-                SubscriptionManager.OnSubscriptionsChangedListener listener) {
-            mSubscriptionManager.addOnSubscriptionsChangedListener(listener);
-        }
-
-        @Override
-        public SmsManager getSmsManager() {
-            return SmsManager.getSmsManagerForSubscriptionId(mSubId);
-        }
-
-        @Override
-        public int getDefaultSmsSubscriptionId() {
-            final int systemDefaultSubId = SmsManager.getDefaultSmsSubscriptionId();
-            if (systemDefaultSubId < 0) {
-                // Always use -1 for any negative subId from system
-                return ParticipantData.DEFAULT_SELF_SUB_ID;
-            }
-            return systemDefaultSubId;
-        }
-
-        @Override
-        public boolean getHasPreferredSmsSim() {
-            return getDefaultSmsSubscriptionId() != ParticipantData.DEFAULT_SELF_SUB_ID;
-        }
-
-        @Override
-        public int getActiveSubscriptionCount() {
-            return mSubscriptionManager.getActiveSubscriptionInfoCount();
-        }
-
-        @Override
-        public int getEffectiveIncomingSubIdFromSystem(Intent intent, String extraName) {
-            return getEffectiveIncomingSubIdFromSystem(intent.getIntExtra(extraName,
-                    ParticipantData.DEFAULT_SELF_SUB_ID));
-        }
-
-        private int getEffectiveIncomingSubIdFromSystem(int subId) {
-            if (subId < 0) {
-                if (mSubscriptionManager.getActiveSubscriptionInfoCount() > 1) {
-                    // For multi-SIM device, we can not decide which SIM to use if system
-                    // does not know either. So just make it the invalid sub id.
-                    return ParticipantData.DEFAULT_SELF_SUB_ID;
-                }
-                // For single-SIM device, it must come from the only SIM we have
-                return getDefaultSmsSubscriptionId();
-            }
-            return subId;
-        }
-
-        @Override
-        public int getSubIdFromTelephony(Cursor cursor, int subIdIndex) {
-            return getEffectiveIncomingSubIdFromSystem(cursor.getInt(subIdIndex));
-        }
-
-        @Override
-        public boolean isDataRoamingEnabled() {
-            final SubscriptionInfo subInfo = getActiveSubscriptionInfo();
-            if (subInfo == null) {
-                // There is nothing we can do if system give us empty sub info
-                LogUtil.e(TAG, "PhoneUtils.isDataRoamingEnabled: system return empty sub info for "
-                        + mSubId);
-                return false;
-            }
-            return subInfo.getDataRoaming() != SubscriptionManager.DATA_ROAMING_DISABLE;
-        }
-
-        @Override
-        public boolean isMobileDataEnabled() {
-            boolean mobileDataEnabled = false;
-            try {
-                final Class cmClass = mTelephonyManager.getClass();
-                final Method method = cmClass.getDeclaredMethod("getDataEnabled", Integer.TYPE);
-                method.setAccessible(true); // Make the method callable
-                // get the setting for "mobile data"
-                mobileDataEnabled = (Boolean) method.invoke(
-                        mTelephonyManager, Integer.valueOf(mSubId));
-            } catch (final Exception e) {
-                LogUtil.e(TAG, "PhoneUtil.isMobileDataEnabled: system api not found", e);
-            }
-            return mobileDataEnabled;
-
-        }
-
-        @Override
-        public HashSet<String> getNormalizedSelfNumbers() {
-            final HashSet<String> numbers = new HashSet<>();
-            for (SubscriptionInfo info : getActiveSubscriptionInfoList()) {
-                numbers.add(PhoneUtils.get(info.getSubscriptionId()).getCanonicalForSelf(
-                        true/*allowOverride*/));
-            }
-            return numbers;
-        }
-    }
-
-    /**
-     * A convenient get() method that uses the default SIM. Use this when SIM is
-     * not relevant, e.g. isDefaultSmsApp
-     *
-     * @return an instance of PhoneUtils for default SIM
-     */
-    public static PhoneUtils getDefault() {
-        return Factory.get().getPhoneUtils(ParticipantData.DEFAULT_SELF_SUB_ID);
-    }
-
-    /**
-     * Get an instance of PhoneUtils associated with a specific SIM, which is also platform
-     * specific.
-     *
-     * @param subId The SIM's subscription ID
-     * @return the instance
-     */
-    public static PhoneUtils get(int subId) {
-        return Factory.get().getPhoneUtils(subId);
-    }
-
-    public LMr1 toLMr1() {
-        if (OsUtil.isAtLeastL_MR1()) {
-            return (LMr1) this;
-        } else {
-            Assert.fail("PhoneUtils.toLMr1(): invalid OS version");
-            return null;
-        }
-    }
-
-    /**
-     * Check if this device supports SMS
-     *
-     * @return true if SMS is supported, false otherwise
-     */
-    public boolean isSmsCapable() {
-        return mTelephonyManager.isSmsCapable();
-    }
-
-    /**
-     * Check if this device supports voice calling
-     *
-     * @return true if voice calling is supported, false otherwise
-     */
-    public boolean isVoiceCapable() {
-        return mTelephonyManager.isVoiceCapable();
-    }
-
-    /**
-     * Get the ISO country code from system locale setting
-     *
-     * @return the ISO country code from system locale
-     */
-    private static String getLocaleCountry() {
-        final String country = Locale.getDefault().getCountry();
-        if (TextUtils.isEmpty(country)) {
-            return null;
-        }
-        return country.toUpperCase();
-    }
-
-    /**
-     * Get ISO country code from the SIM, if not available, fall back to locale
-     *
-     * @return SIM or locale ISO country code
-     */
-    public String getSimOrDefaultLocaleCountry() {
-        String country = getSimCountry();
-        if (country == null) {
-            country = getLocaleCountry();
-        }
-        return country;
-    }
-
-    // Get or set the cache of canonicalized phone numbers for a specific country
-    private static ArrayMap<String, String> getOrAddCountryMapInCacheLocked(String country) {
-        if (country == null) {
-            country = "";
-        }
-        ArrayMap<String, String> countryMap = sCanonicalPhoneNumberCache.get(country);
-        if (countryMap == null) {
-            countryMap = new ArrayMap<>();
-            sCanonicalPhoneNumberCache.put(country, countryMap);
-        }
-        return countryMap;
-    }
-
-    // Get canonicalized phone number from cache
-    private static String getCanonicalFromCache(final String phoneText, String country) {
-        synchronized (sCanonicalPhoneNumberCache) {
-            final ArrayMap<String, String> countryMap = getOrAddCountryMapInCacheLocked(country);
-            return countryMap.get(phoneText);
-        }
-    }
-
-    // Put canonicalized phone number into cache
-    private static void putCanonicalToCache(final String phoneText, String country,
-            final String canonical) {
-        synchronized (sCanonicalPhoneNumberCache) {
-            final ArrayMap<String, String> countryMap = getOrAddCountryMapInCacheLocked(country);
-            countryMap.put(phoneText, canonical);
-        }
-    }
-
-    /**
-     * Utility method to parse user input number into standard E164 number.
-     *
-     * @param phoneText Phone number text as input by user.
-     * @param country ISO country code based on which to parse the number.
-     * @return E164 phone number. Returns null in case parsing failed.
-     */
-    private static String getValidE164Number(final String phoneText, final String country) {
-        final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
-        try {
-            final PhoneNumber phoneNumber = phoneNumberUtil.parse(phoneText, country);
-            if (phoneNumber != null && phoneNumberUtil.isValidNumber(phoneNumber)) {
-                return phoneNumberUtil.format(phoneNumber, PhoneNumberFormat.E164);
-            }
-        } catch (final NumberParseException e) {
-            LogUtil.e(TAG, "PhoneUtils.getValidE164Number(): Not able to parse phone number "
-                        + LogUtil.sanitizePII(phoneText) + " for country " + country);
-        }
-        return null;
-    }
-
-    /**
-     * Canonicalize phone number using system locale country
-     *
-     * @param phoneText The phone number to canonicalize
-     * @return the canonicalized number
-     */
-    public String getCanonicalBySystemLocale(final String phoneText) {
-        return getCanonicalByCountry(phoneText, getLocaleCountry());
-    }
-
-    /**
-     * Canonicalize phone number using SIM's country, may fall back to system locale country
-     * if SIM country can not be obtained
-     *
-     * @param phoneText The phone number to canonicalize
-     * @return the canonicalized number
-     */
-    public String getCanonicalBySimLocale(final String phoneText) {
-        return getCanonicalByCountry(phoneText, getSimOrDefaultLocaleCountry());
-    }
-
-    /**
-     * Canonicalize phone number using a country code.
-     * This uses an internal cache per country to speed up.
-     *
-     * @param phoneText The phone number to canonicalize
-     * @param country The ISO country code to use
-     * @return the canonicalized number, or the original number if can't be parsed
-     */
-    private String getCanonicalByCountry(final String phoneText, final String country) {
-        Assert.notNull(phoneText);
-
-        String canonicalNumber = getCanonicalFromCache(phoneText, country);
-        if (canonicalNumber != null) {
-            return canonicalNumber;
-        }
-        canonicalNumber = getValidE164Number(phoneText, country);
-        if (canonicalNumber == null) {
-            // If we can't normalize this number, we just use the display string number.
-            // This is possible for short codes and other non-localizable numbers.
-            canonicalNumber = phoneText;
-        }
-        putCanonicalToCache(phoneText, country, canonicalNumber);
-        return canonicalNumber;
-    }
-
-    /**
-     * Canonicalize the self (per SIM) phone number
-     *
-     * @param allowOverride whether to use the override number in app settings
-     * @return the canonicalized self phone number
-     */
-    public String getCanonicalForSelf(final boolean allowOverride) {
-        String selfNumber = null;
-        try {
-            selfNumber = getSelfRawNumber(allowOverride);
-        } catch (IllegalStateException e) {
-            // continue;
-        }
-        if (selfNumber == null) {
-            return "";
-        }
-        return getCanonicalBySimLocale(selfNumber);
-    }
-
-    /**
-     * Get the SIM's phone number in NATIONAL format with only digits, used in sending
-     * as LINE1NOCOUNTRYCODE macro in mms_config
-     *
-     * @return all digits national format number of the SIM
-     */
-    public String getSimNumberNoCountryCode() {
-        String selfNumber = null;
-        try {
-            selfNumber = getSelfRawNumber(false/*allowOverride*/);
-        } catch (IllegalStateException e) {
-            // continue
-        }
-        if (selfNumber == null) {
-            selfNumber = "";
-        }
-        final String country = getSimCountry();
-        final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
-        try {
-            final PhoneNumber phoneNumber = phoneNumberUtil.parse(selfNumber, country);
-            if (phoneNumber != null && phoneNumberUtil.isValidNumber(phoneNumber)) {
-                return phoneNumberUtil
-                        .format(phoneNumber, PhoneNumberFormat.NATIONAL)
-                        .replaceAll("\\D", "");
-            }
-        } catch (final NumberParseException e) {
-            LogUtil.e(TAG, "PhoneUtils.getSimNumberNoCountryCode(): Not able to parse phone number "
-                    + LogUtil.sanitizePII(selfNumber) + " for country " + country);
-        }
-        return selfNumber;
-
-    }
-
-    /**
-     * Format a phone number for displaying, using system locale country.
-     * If the country code matches between the system locale and the input phone number,
-     * it will be formatted into NATIONAL format, otherwise, the INTERNATIONAL format
-     *
-     * @param phoneText The original phone text
-     * @return formatted number
-     */
-    public String formatForDisplay(final String phoneText) {
-        // Only format a valid number which length >=6
-        if (TextUtils.isEmpty(phoneText) ||
-                phoneText.replaceAll("\\D", "").length() < MINIMUM_PHONE_NUMBER_LENGTH_TO_FORMAT) {
-            return phoneText;
-        }
-        final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
-        final String systemCountry = getLocaleCountry();
-        final int systemCountryCode = phoneNumberUtil.getCountryCodeForRegion(systemCountry);
-        try {
-            final PhoneNumber parsedNumber = phoneNumberUtil.parse(phoneText, systemCountry);
-            final PhoneNumberFormat phoneNumberFormat =
-                    (systemCountryCode > 0 && parsedNumber.getCountryCode() == systemCountryCode) ?
-                            PhoneNumberFormat.NATIONAL : PhoneNumberFormat.INTERNATIONAL;
-            return phoneNumberUtil.format(parsedNumber, phoneNumberFormat);
-        } catch (NumberParseException e) {
-            LogUtil.e(TAG, "PhoneUtils.formatForDisplay: invalid phone number "
-                    + LogUtil.sanitizePII(phoneText) + " with country " + systemCountry);
-            return phoneText;
-        }
-    }
-
-    /**
-     * Is Messaging the default SMS app?
-     * - On KLP+ this checks the system setting.
-     * - On JB (and below) this always returns true, since the setting was added in KLP.
-     */
-    public boolean isDefaultSmsApp() {
-        if (OsUtil.isAtLeastKLP()) {
-            final String configuredApplication = Telephony.Sms.getDefaultSmsPackage(mContext);
-            return  mContext.getPackageName().equals(configuredApplication);
-        }
-        return true;
-    }
-
-    /**
-     * Get default SMS app package name
-     *
-     * @return the package name of default SMS app
-     */
-    public String getDefaultSmsApp() {
-        if (OsUtil.isAtLeastKLP()) {
-            return Telephony.Sms.getDefaultSmsPackage(mContext);
-        }
-        return null;
-    }
-
-    /**
-     * Determines if SMS is currently enabled on this device.
-     * - Device must support SMS
-     * - On KLP+ we must be set as the default SMS app
-     */
-    public boolean isSmsEnabled() {
-        return isSmsCapable() && isDefaultSmsApp();
-    }
-
-    /**
-     * Returns the name of the default SMS app, or the empty string if there is
-     * an error or there is no default app (e.g. JB and below).
-     */
-    public String getDefaultSmsAppLabel() {
-        if (OsUtil.isAtLeastKLP()) {
-            final String packageName = Telephony.Sms.getDefaultSmsPackage(mContext);
-            final PackageManager pm = mContext.getPackageManager();
-            try {
-                final ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
-                return pm.getApplicationLabel(appInfo).toString();
-            } catch (NameNotFoundException e) {
-                // Fall through and return empty string
-            }
-        }
-        return "";
-    }
-
-    /**
-     * Gets the state of Airplane Mode.
-     *
-     * @return true if enabled.
-     */
-    @SuppressWarnings("deprecation")
-    public boolean isAirplaneModeOn() {
-        if (OsUtil.isAtLeastJB_MR1()) {
-            return Settings.Global.getInt(mContext.getContentResolver(),
-                    Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
-        } else {
-            return Settings.System.getInt(mContext.getContentResolver(),
-                    Settings.System.AIRPLANE_MODE_ON, 0) != 0;
-        }
-    }
-
-    public static String getMccMncString(int[] mccmnc) {
-        if (mccmnc == null || mccmnc.length != 2) {
-            return "000000";
-        }
-        return String.format("%03d%03d", mccmnc[0], mccmnc[1]);
-    }
-
-    public static String canonicalizeMccMnc(final String mcc, final String mnc) {
-        try {
-            return String.format("%03d%03d", Integer.parseInt(mcc), Integer.parseInt(mnc));
-        } catch (final NumberFormatException e) {
-            // Return invalid as is
-            LogUtil.w(TAG, "canonicalizeMccMnc: invalid mccmnc:" + mcc + " ," + mnc);
-        }
-        return mcc + mnc;
-    }
-
-    /**
-     * Returns whether the given destination is valid for sending SMS/MMS message.
-     */
-    public static boolean isValidSmsMmsDestination(final String destination) {
-        return PhoneNumberUtils.isWellFormedSmsAddress(destination) ||
-                MmsSmsUtils.isEmailAddress(destination);
-    }
-
-    public interface SubscriptionRunnable {
-        void runForSubscription(int subId);
-    }
-
-    /**
-     * A convenience method for iterating through all active subscriptions
-     *
-     * @param runnable a {@link SubscriptionRunnable} for performing work on each subscription.
-     */
-    public static void forEachActiveSubscription(final SubscriptionRunnable runnable) {
-        if (OsUtil.isAtLeastL_MR1()) {
-            final List<SubscriptionInfo> subscriptionList =
-                    getDefault().toLMr1().getActiveSubscriptionInfoList();
-            for (final SubscriptionInfo subscriptionInfo : subscriptionList) {
-                runnable.runForSubscription(subscriptionInfo.getSubscriptionId());
-            }
-        } else {
-            runnable.runForSubscription(ParticipantData.DEFAULT_SELF_SUB_ID);
-        }
-    }
-
-    private static String getNumberFromPrefs(final Context context, final int subId) {
-        final BuglePrefs prefs = BuglePrefs.getSubscriptionPrefs(subId);
-        final String mmsPhoneNumberPrefKey =
-                context.getString(R.string.mms_phone_number_pref_key);
-        final String userDefinedNumber = prefs.getString(mmsPhoneNumberPrefKey, null);
-        if (!TextUtils.isEmpty(userDefinedNumber)) {
-            return userDefinedNumber;
-        }
-        return null;
-    }
-}
diff --git a/src/com/android/messaging/util/RingtoneUtil.java b/src/com/android/messaging/util/RingtoneUtil.java
deleted file mode 100644
index a7facfb..0000000
--- a/src/com/android/messaging/util/RingtoneUtil.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.net.Uri;
-import android.provider.Settings;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-
-public class RingtoneUtil {
-    /**
-     * Return a ringtone Uri for the string representation passed in. Use the app
-     * and system defaults as fallbacks
-     * @param ringtoneString is the ringtone to resolve
-     * @return the Uri of the ringtone or the fallback ringtone
-     */
-    public static Uri getNotificationRingtoneUri(String ringtoneString) {
-        if (ringtoneString == null) {
-            // No override specified, fall back to system-wide setting.
-            final BuglePrefs prefs = BuglePrefs.getApplicationPrefs();
-            final Context context = Factory.get().getApplicationContext();
-            final String prefKey = context.getString(R.string.notification_sound_pref_key);
-            ringtoneString = prefs.getString(prefKey, null);
-        }
-
-        if (!TextUtils.isEmpty(ringtoneString)) {
-            // We have set a value, even if it is the default Uri at some point
-            return Uri.parse(ringtoneString);
-        } else if (ringtoneString == null) {
-            // We have no setting specified (== null), so we default to the system default
-            return Settings.System.DEFAULT_NOTIFICATION_URI;
-        } else {
-            // An empty string (== "") here is the result of selecting "None" as the ringtone
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/SafeAsyncTask.java b/src/com/android/messaging/util/SafeAsyncTask.java
deleted file mode 100644
index 1cce6e9..0000000
--- a/src/com/android/messaging/util/SafeAsyncTask.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Intent;
-import android.os.AsyncTask;
-import android.os.Debug;
-import android.os.SystemClock;
-
-import com.android.messaging.Factory;
-import com.android.messaging.util.Assert.RunsOnAnyThread;
-
-/**
- * Wrapper class which provides explicit API for:
- * <ol>
- *   <li>Threading policy choice - Users of this class should use the explicit API instead of
- *       {@link #execute} which uses different threading policy on different OS versions.
- *   <li>Enforce creation on main thread as required by AsyncTask
- *   <li>Enforce that the background task does not take longer than expected.
- * </ol>
- */
-public abstract class SafeAsyncTask<Params, Progress, Result>
-        extends AsyncTask<Params, Progress, Result> {
-    private static final long DEFAULT_MAX_EXECUTION_TIME_MILLIS = 10 * 1000; // 10 seconds
-
-    /** This is strongly discouraged as it can block other AsyncTasks indefinitely. */
-    public static final long UNBOUNDED_TIME = Long.MAX_VALUE;
-
-    private static final String WAKELOCK_ID = "bugle_safe_async_task_wakelock";
-    protected static final int WAKELOCK_OP = 1000;
-    private static WakeLockHelper sWakeLock = new WakeLockHelper(WAKELOCK_ID);
-
-    private final long mMaxExecutionTimeMillis;
-    private final boolean mCancelExecutionOnTimeout;
-    private boolean mThreadPoolRequested;
-
-    public SafeAsyncTask() {
-        this(DEFAULT_MAX_EXECUTION_TIME_MILLIS, false);
-    }
-
-    public SafeAsyncTask(final long maxTimeMillis) {
-        this(maxTimeMillis, false);
-    }
-
-    /**
-     * @param maxTimeMillis maximum expected time for the background operation. This is just
-     *        a diagnostic tool to catch unexpectedly long operations. If an operation does take
-     *        longer than expected, it is fine to increase this argument. If the value is larger
-     *        than a minute, you should consider using a dedicated thread so as not to interfere
-     *        with other AsyncTasks.
-     *
-     *        <p>Use {@link #UNBOUNDED_TIME} if you do not know the maximum expected time. This
-     *        is strongly discouraged as it can block other AsyncTasks indefinitely.
-     *
-     * @param cancelExecutionOnTimeout whether to attempt to cancel the task execution on timeout.
-     *        If this is set, at execution timeout we will call cancel(), so doInBackgroundTimed()
-     *        should periodically check if the task is to be cancelled and finish promptly if
-     *        possible, and handle the cancel event in onCancelled(). Also, at the end of execution
-     *        we will not crash the execution if it went over limit since we explicitly canceled it.
-     */
-    public SafeAsyncTask(final long maxTimeMillis, final boolean cancelExecutionOnTimeout) {
-        Assert.isMainThread(); // AsyncTask has to be created on the main thread
-        mMaxExecutionTimeMillis = maxTimeMillis;
-        mCancelExecutionOnTimeout = cancelExecutionOnTimeout;
-    }
-
-    public final SafeAsyncTask<Params, Progress, Result> executeOnThreadPool(
-            final Params... params) {
-        Assert.isMainThread(); // AsyncTask requires this
-        mThreadPoolRequested = true;
-        executeOnExecutor(THREAD_POOL_EXECUTOR, params);
-        return this;
-    }
-
-    protected abstract Result doInBackgroundTimed(final Params... params);
-
-    @Override
-    protected final Result doInBackground(final Params... params) {
-        // This enforces that executeOnThreadPool was called, not execute. Ideally, we would
-        // make execute throw an exception, but since it is final, we cannot override it.
-        Assert.isTrue(mThreadPoolRequested);
-
-        if (mCancelExecutionOnTimeout) {
-            ThreadUtil.getMainThreadHandler().postDelayed(new Runnable() {
-                @Override
-                public void run() {
-                    if (getStatus() == Status.RUNNING) {
-                        // Cancel the task if it's still running.
-                        LogUtil.w(LogUtil.BUGLE_TAG, String.format("%s timed out and is canceled",
-                                this));
-                        cancel(true /* mayInterruptIfRunning */);
-                    }
-                }
-            }, mMaxExecutionTimeMillis);
-        }
-
-        final long startTime = SystemClock.elapsedRealtime();
-        try {
-            return doInBackgroundTimed(params);
-        } finally {
-            final long executionTime = SystemClock.elapsedRealtime() - startTime;
-            if (executionTime > mMaxExecutionTimeMillis) {
-                LogUtil.w(LogUtil.BUGLE_TAG, String.format("%s took %dms", this, executionTime));
-                // Don't crash if debugger is attached or if we are asked to cancel on timeout.
-                if (!Debug.isDebuggerConnected() && !mCancelExecutionOnTimeout) {
-                    Assert.fail(this + " took too long");
-                }
-            }
-        }
-
-    }
-
-    @Override
-    protected void onPostExecute(final Result result) {
-        // No need to use AsyncTask at all if there is no onPostExecute
-        Assert.fail("Use SafeAsyncTask.executeOnThreadPool");
-    }
-
-    /**
-     * This provides a way for people to run async tasks but without onPostExecute.
-     * This can be called on any thread.
-     *
-     * Run code in a thread using AsyncTask's thread pool.
-     *
-     * To enable wakelock during the execution, see {@link #executeOnThreadPool(Runnable, boolean)}
-     *
-     * @param runnable The Runnable to execute asynchronously
-     */
-    @RunsOnAnyThread
-    public static void executeOnThreadPool(final Runnable runnable) {
-        executeOnThreadPool(runnable, false);
-    }
-
-    /**
-     * This provides a way for people to run async tasks but without onPostExecute.
-     * This can be called on any thread.
-     *
-     * Run code in a thread using AsyncTask's thread pool.
-     *
-     * @param runnable The Runnable to execute asynchronously
-     * @param withWakeLock when set, a wake lock will be held for the duration of the runnable
-     *        execution
-     */
-    public static void executeOnThreadPool(final Runnable runnable, final boolean withWakeLock) {
-        if (withWakeLock) {
-            final Intent intent = new Intent();
-            sWakeLock.acquire(Factory.get().getApplicationContext(), intent, WAKELOCK_OP);
-            THREAD_POOL_EXECUTOR.execute(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        runnable.run();
-                    } finally {
-                        sWakeLock.release(intent, WAKELOCK_OP);
-                    }
-                }
-            });
-        } else {
-            THREAD_POOL_EXECUTOR.execute(runnable);
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/SwitchCompatUtils.java b/src/com/android/messaging/util/SwitchCompatUtils.java
deleted file mode 100644
index 9c920f6..0000000
--- a/src/com/android/messaging/util/SwitchCompatUtils.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.graphics.Color;
-import android.graphics.PorterDuff;
-import android.graphics.drawable.Drawable;
-import androidx.appcompat.graphics.drawable.DrawableWrapperCompat;
-import androidx.appcompat.widget.SwitchCompat;
-import android.util.TypedValue;
-
-/* Most methods in this file are copied from
- * v7/appcompat/src/androidx.appcompat.internal/widget/TintManager.java. It would be better if
- * we could have just extended the TintManager but this is a final class that we do not have
- * access to. */
-
-/**
- * Util methods for the SwitchCompat widget
- */
-public class SwitchCompatUtils {
-    /**
-     * Given a color and a SwitchCompat view, updates the SwitchCompat to appear with the appropiate
-     * color when enabled and checked
-     */
-    public static void updateSwitchCompatColor(SwitchCompat switchCompat, final int color) {
-        final Context context = switchCompat.getContext();
-        final TypedValue typedValue = new TypedValue();
-
-        switchCompat.setThumbDrawable(getColorTintedDrawable(switchCompat.getThumbDrawable(),
-                getSwitchThumbColorStateList(context, color, typedValue),
-                PorterDuff.Mode.MULTIPLY));
-
-        switchCompat.setTrackDrawable(getColorTintedDrawable(switchCompat.getTrackDrawable(),
-                getSwitchTrackColorStateList(context, color, typedValue), PorterDuff.Mode.SRC_IN));
-    }
-
-    private static Drawable getColorTintedDrawable(Drawable oldDrawable,
-            final ColorStateList colorStateList, final PorterDuff.Mode mode) {
-        final int[] thumbState = oldDrawable.isStateful() ? oldDrawable.getState() : null;
-        if (oldDrawable instanceof DrawableWrapperCompat) {
-            oldDrawable = ((DrawableWrapperCompat) oldDrawable).getDrawable();
-        }
-        final Drawable newDrawable = new TintDrawableWrapper(oldDrawable, colorStateList, mode);
-        if (thumbState != null) {
-            newDrawable.setState(thumbState);
-        }
-        return newDrawable;
-    }
-
-    private static ColorStateList getSwitchThumbColorStateList(final Context context,
-            final int color, final TypedValue typedValue) {
-        final int[][] states = new int[3][];
-        final int[] colors = new int[3];
-        int i = 0;
-        // Disabled state
-        states[i] = new int[] { -android.R.attr.state_enabled };
-        colors[i] = getColor(Color.parseColor("#ffbdbdbd"), 1f);
-        i++;
-        states[i] = new int[] { android.R.attr.state_checked };
-        colors[i] = color;
-        i++;
-        // Default enabled state
-        states[i] = new int[0];
-        colors[i] = getThemeAttrColor(context, typedValue,
-                androidx.appcompat.R.attr.colorSwitchThumbNormal);
-        i++;
-        return new ColorStateList(states, colors);
-    }
-
-    private static ColorStateList getSwitchTrackColorStateList(final Context context,
-            final int color, final TypedValue typedValue) {
-        final int[][] states = new int[3][];
-        final int[] colors = new int[3];
-        int i = 0;
-        // Disabled state
-        states[i] = new int[] { -android.R.attr.state_enabled };
-        colors[i] = getThemeAttrColor(context, typedValue, android.R.attr.colorForeground, 0.1f);
-        i++;
-        states[i] = new int[] { android.R.attr.state_checked };
-        colors[i] = getColor(color, 0.3f);
-        i++;
-        // Default enabled state
-        states[i] = new int[0];
-        colors[i] = getThemeAttrColor(context, typedValue, android.R.attr.colorForeground, 0.3f);
-        i++;
-        return new ColorStateList(states, colors);
-    }
-
-    private static int getThemeAttrColor(final Context context, final TypedValue typedValue,
-            final int attr) {
-        if (context.getTheme().resolveAttribute(attr, typedValue, true)) {
-            if (typedValue.type >= TypedValue.TYPE_FIRST_INT
-                    && typedValue.type <= TypedValue.TYPE_LAST_INT) {
-                return typedValue.data;
-            } else if (typedValue.type == TypedValue.TYPE_STRING) {
-                return context.getResources().getColor(typedValue.resourceId);
-            }
-        }
-        return 0;
-    }
-
-    private static int getThemeAttrColor(final Context context, final TypedValue typedValue,
-            final int attr, final float alpha) {
-        final int color = getThemeAttrColor(context, typedValue, attr);
-        return getColor(color, alpha);
-    }
-
-    private static int getColor(int color, float alpha) {
-        final int originalAlpha = Color.alpha(color);
-        // Return the color, multiplying the original alpha by the disabled value
-        return (color & 0x00ffffff) | (Math.round(originalAlpha * alpha) << 24);
-    }
-}
diff --git a/src/com/android/messaging/util/TextUtil.java b/src/com/android/messaging/util/TextUtil.java
deleted file mode 100644
index f715551..0000000
--- a/src/com/android/messaging/util/TextUtil.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import androidx.annotation.Nullable;
-
-public class TextUtil {
-    /**
-     * Returns true if the string is empty, null or only whitespace.
-     */
-    public static boolean isAllWhitespace(@Nullable String string) {
-      if (string == null || string.isEmpty()) {
-        return true;
-      }
-
-      for (int i = 0; i < string.length(); ++i) {
-        if (!Character.isWhitespace(string.charAt(i))) {
-          return false;
-        }
-      }
-
-      return true;
-    }
-
-    /**
-     * Taken from PhoneNumberUtils, where it is only available in API 21+ Replaces all unicode
-     * (e.g. Arabic, Persian) digits with their decimal digit equivalents.
-     *
-     * @param number the number to perform the replacement on.
-     * @return the replaced number.
-     */
-    public static String replaceUnicodeDigits(String number) {
-        StringBuilder normalizedDigits = new StringBuilder(number.length());
-        for (char c : number.toCharArray()) {
-            int digit = Character.digit(c, 10);
-            if (digit != -1) {
-                normalizedDigits.append(digit);
-            } else {
-                normalizedDigits.append(c);
-            }
-        }
-        return normalizedDigits.toString();
-    }
-
-    /**
-     * Appends text to the stringBuilder.
-     * If stringBuilder already has content, separator is prepended to create a separator between
-     * entries.
-     * @param stringBuilder The stringBuilder to add to
-     * @param text The text to append
-     * @param separator The separator to add if there is already text, typically "," or "\n"
-     */
-    public static void appendWithSeparator(final StringBuilder stringBuilder, final String text,
-            final String separator) {
-        if (stringBuilder.length() > 0) {
-            stringBuilder.append(separator);
-        }
-        stringBuilder.append(text);
-    }
-}
diff --git a/src/com/android/messaging/util/ThreadUtil.java b/src/com/android/messaging/util/ThreadUtil.java
deleted file mode 100644
index 3b935d8..0000000
--- a/src/com/android/messaging/util/ThreadUtil.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.os.Handler;
-import android.os.Looper;
-
-public class ThreadUtil {
-    private static final Handler sHandler = new Handler(Looper.getMainLooper());
-
-    public static Handler getMainThreadHandler() {
-        return sHandler;
-    }
-}
diff --git a/src/com/android/messaging/util/TintDrawableWrapper.java b/src/com/android/messaging/util/TintDrawableWrapper.java
deleted file mode 100644
index b426f8c..0000000
--- a/src/com/android/messaging/util/TintDrawableWrapper.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.res.ColorStateList;
-import android.graphics.Color;
-import android.graphics.PorterDuff;
-import android.graphics.drawable.Drawable;
-import androidx.appcompat.graphics.drawable.DrawableWrapperCompat;
-
-/*
- * This is directly copied from v7/appcompat/src/androidx.appcompat.internal/widget/TintManager.java
- */
-
-/**
- * A {@link DrawableWrapperCompat} which updates it's color filter using a {@link ColorStateList}.
- */
-class TintDrawableWrapper extends DrawableWrapperCompat {
-    private final ColorStateList mTintStateList;
-    private final PorterDuff.Mode mTintMode;
-    private int mCurrentColor;
-    public TintDrawableWrapper(Drawable drawable, ColorStateList tintStateList) {
-        this(drawable, tintStateList, PorterDuff.Mode.SRC_IN);
-    }
-    public TintDrawableWrapper(Drawable drawable, ColorStateList tintStateList,
-            PorterDuff.Mode tintMode) {
-        super(drawable);
-        mTintStateList = tintStateList;
-        mTintMode = tintMode;
-    }
-    @Override
-    public boolean isStateful() {
-        return (mTintStateList != null && mTintStateList.isStateful()) || super.isStateful();
-    }
-    @Override
-    public boolean setState(int[] stateSet) {
-        boolean handled = super.setState(stateSet);
-        handled = updateTint(stateSet) || handled;
-        return handled;
-    }
-    private boolean updateTint(int[] state) {
-        if (mTintStateList != null) {
-            final int color = mTintStateList.getColorForState(state, mCurrentColor);
-            if (color != mCurrentColor) {
-                if (color != Color.TRANSPARENT) {
-                    setColorFilter(color, mTintMode);
-                } else {
-                    clearColorFilter();
-                }
-                mCurrentColor = color;
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/src/com/android/messaging/util/Trace.java b/src/com/android/messaging/util/Trace.java
deleted file mode 100644
index 69910f7..0000000
--- a/src/com/android/messaging/util/Trace.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-
-import android.annotation.TargetApi;
-import android.os.Build;
-
-/**
- * Helper class for systrace (see http://developer.android.com/tools/help/systrace.html).<p>
- * To enable, set log.tag.Bugle_Trace (defined by {@link #TAG} to VERBOSE before
- * the process starts.<p>
- * Note that this will run only on JBMR2 or later; on earlier platforms or if the log
- * tag isn't set, calls to {@link #beginSection(String)} or {@link #endSection()} are no-ops. <p>
- * Internally, calls dispatch to either a class that actually does work or a class that doesn't.
- * This avoids Dalvik complaining when it loads the class on earlier platforms that the
- * opcodes aren't available, and, according to the Dalvik team, using vtable dispatching for
- * something like this should be faster than if (OsUtil.isAtLeast...()) on each call.
- */
-public final class Trace {
-    private static final String TAG = "Bugle_Trace";
-    private abstract static class AbstractTrace {
-        abstract void beginSection(String sectionName);
-        abstract void endSection();
-    }
-
-    private static final AbstractTrace sTrace;
-
-    // Static initializer to pick the correct trace class to handle tracing.
-    static {
-        // Use android.util.Log instead of LogUtil here to avoid pulling in Gservices
-        // too early in app startup.
-        if (OsUtil.isAtLeastJB_MR2() &&
-                android.util.Log.isLoggable(TAG, android.util.Log.VERBOSE)) {
-            sTrace = new TraceJBMR2();
-        } else {
-            sTrace = new TraceShim();
-        }
-    }
-
-    /**
-     * Writes a trace message to indicate that a given section of code has begun. This call must
-     * be followed by a corresponding call to {@link #endSection()} on the same thread.
-     *
-     * <p class="note"> At this time the vertical bar character '|', newline character '\n', and
-     * null character '\0' are used internally by the tracing mechanism.  If sectionName contains
-     * these characters they will be replaced with a space character in the trace.
-     *
-     * @param sectionName The name of the code section to appear in the trace.  This may be at
-     * most 127 Unicode code units long.
-     */
-    public static void beginSection(String sectionName) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "beginSection() " + sectionName);
-        }
-        sTrace.beginSection(sectionName);
-    }
-
-    /**
-     * Writes a trace message to indicate that a given section of code has ended. This call must
-     * be preceeded by a corresponding call to {@link #beginSection(String)}. Calling this method
-     * will mark the end of the most recently begun section of code, so care must be taken to
-     * ensure that beginSection / endSection pairs are properly nested and called from the same
-     * thread.
-     */
-    public static void endSection() {
-        sTrace.endSection();
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "endSection()");
-        }
-    }
-
-    /**
-     * Internal class that we use if we really did enable tracing.
-     */
-    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
-    private static final class TraceJBMR2 extends AbstractTrace {
-        @Override
-        void beginSection(String sectionName) {
-            android.os.Trace.beginSection(sectionName);
-        }
-
-        @Override
-        void endSection() {
-            android.os.Trace.endSection();
-        }
-    }
-
-    /**
-     * Placeholder class that we use if we aren't really tracing.
-     */
-    private static final class TraceShim extends AbstractTrace {
-        @Override
-        void beginSection(String sectionName) {
-        }
-
-        @Override
-        void endSection() {
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/Typefaces.java b/src/com/android/messaging/util/Typefaces.java
deleted file mode 100644
index eb8562c..0000000
--- a/src/com/android/messaging/util/Typefaces.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.graphics.Typeface;
-
-/**
- * Provides access to typefaces used by code. Specially important for typefaces coming from assets,
- * which appear (from platform code inspection) to not be cached.
- * Note: Considered making this a singleton provided by factory/appcontext, but seemed too simple,
- * not worth stubbing.
- */
-public class Typefaces {
-    private static Typeface sRobotoBold;
-    private static Typeface sRobotoNormal;
-
-    public static Typeface getRobotoBold() {
-        Assert.isMainThread();
-        if (sRobotoBold == null) {
-            sRobotoBold = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
-        }
-        return sRobotoBold;
-    }
-
-    public static Typeface getRobotoNormal() {
-        Assert.isMainThread();
-        if (sRobotoNormal == null) {
-            sRobotoNormal = Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL);
-        }
-        return sRobotoNormal;
-    }
-}
diff --git a/src/com/android/messaging/util/UiUtils.java b/src/com/android/messaging/util/UiUtils.java
deleted file mode 100644
index 6e0c16e..0000000
--- a/src/com/android/messaging/util/UiUtils.java
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.content.pm.ActivityInfo;
-import android.content.res.Configuration;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AppCompatActivity;
-import android.text.Html;
-import android.text.Spanned;
-import android.text.TextPaint;
-import android.text.TextUtils;
-import android.text.style.URLSpan;
-import android.view.Gravity;
-import android.view.Surface;
-import android.view.View;
-import android.view.View.OnLayoutChangeListener;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
-import android.view.animation.Interpolator;
-import android.view.animation.ScaleAnimation;
-import android.widget.RemoteViews;
-import android.widget.Toast;
-
-import com.android.messaging.Factory;
-import com.android.messaging.R;
-import com.android.messaging.ui.SnackBar;
-import com.android.messaging.ui.SnackBar.Placement;
-import com.android.messaging.ui.conversationlist.ConversationListActivity;
-import com.android.messaging.ui.SnackBarInteraction;
-import com.android.messaging.ui.SnackBarManager;
-import com.android.messaging.ui.UIIntents;
-
-import java.lang.reflect.Field;
-import java.util.List;
-
-public class UiUtils {
-    /** MediaPicker transition duration in ms */
-    public static final int MEDIAPICKER_TRANSITION_DURATION =
-            getApplicationContext().getResources().getInteger(
-                    R.integer.mediapicker_transition_duration);
-    /** Short transition duration in ms */
-    public static final int ASYNCIMAGE_TRANSITION_DURATION =
-            getApplicationContext().getResources().getInteger(
-                    R.integer.asyncimage_transition_duration);
-    /** Compose transition duration in ms */
-    public static final int COMPOSE_TRANSITION_DURATION =
-            getApplicationContext().getResources().getInteger(
-                    R.integer.compose_transition_duration);
-    /** Generic duration for revealing/hiding a view */
-    public static final int REVEAL_ANIMATION_DURATION =
-            getApplicationContext().getResources().getInteger(
-                    R.integer.reveal_view_animation_duration);
-
-    public static final Interpolator DEFAULT_INTERPOLATOR = new CubicBezierInterpolator(
-            0.4f, 0.0f, 0.2f, 1.0f);
-
-    public static final Interpolator EASE_IN_INTERPOLATOR = new CubicBezierInterpolator(
-            0.4f, 0.0f, 0.8f, 0.5f);
-
-    public static final Interpolator EASE_OUT_INTERPOLATOR = new CubicBezierInterpolator(
-            0.0f, 0.0f, 0.2f, 1f);
-
-    /** Show a simple toast at the bottom */
-    public static void showToastAtBottom(final int messageId) {
-        UiUtils.showToastAtBottom(getApplicationContext().getString(messageId));
-    }
-
-    /** Show a simple toast at the bottom */
-    public static void showToastAtBottom(final String message) {
-        final Toast toast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG);
-        toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
-        toast.show();
-    }
-
-    /** Show a simple toast at the default position */
-    public static void showToast(final int messageId) {
-        final Toast toast = Toast.makeText(getApplicationContext(),
-                getApplicationContext().getString(messageId), Toast.LENGTH_LONG);
-        toast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0);
-        toast.show();
-    }
-
-    /** Show a simple toast at the default position */
-    public static void showToast(final int pluralsMessageId, final int count) {
-        final Toast toast = Toast.makeText(getApplicationContext(),
-                getApplicationContext().getResources().getQuantityString(pluralsMessageId, count),
-                Toast.LENGTH_LONG);
-        toast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0);
-        toast.show();
-    }
-
-    public static void showSnackBar(final Context context, @NonNull final View parentView,
-            final String message, @Nullable final Runnable runnable, final int runnableLabel,
-            @Nullable final List<SnackBarInteraction> interactions) {
-        Assert.notNull(context);
-        SnackBar.Action action = null;
-        switch (runnableLabel) {
-            case SnackBar.Action.SNACK_BAR_UNDO:
-                action = SnackBar.Action.createUndoAction(runnable);
-                break;
-            case SnackBar.Action.SNACK_BAR_RETRY:
-                action =  SnackBar.Action.createRetryAction(runnable);
-                break;
-            default :
-                break;
-        }
-
-        showSnackBarWithCustomAction(context, parentView, message, action, interactions,
-                                        null /* placement */);
-    }
-
-    public static void showSnackBarWithCustomAction(final Context context,
-            @NonNull final View parentView,
-            @NonNull final String message,
-            @NonNull final SnackBar.Action action,
-            @Nullable final List<SnackBarInteraction> interactions,
-            @Nullable final Placement placement) {
-        Assert.notNull(context);
-        Assert.isTrue(!TextUtils.isEmpty(message));
-        Assert.notNull(action);
-        SnackBarManager.get()
-            .newBuilder(parentView)
-            .setText(message)
-            .setAction(action)
-            .withInteractions(interactions)
-            .withPlacement(placement)
-            .show();
-    }
-
-    /**
-     * Run the given runnable once after the next layout pass of the view.
-     */
-    public static void doOnceAfterLayoutChange(final View view, final Runnable runnable) {
-        final OnLayoutChangeListener listener = new OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(final View v, final int left, final int top, final int right,
-                    final int bottom, final int oldLeft, final int oldTop, final int oldRight,
-                    final int oldBottom) {
-                // Call the runnable outside the layout pass because very few actions are allowed in
-                // the layout pass
-                ThreadUtil.getMainThreadHandler().post(runnable);
-                view.removeOnLayoutChangeListener(this);
-            }
-        };
-        view.addOnLayoutChangeListener(listener);
-    }
-
-    public static boolean isLandscapeMode() {
-        return Factory.get().getApplicationContext().getResources().getConfiguration().orientation
-                == Configuration.ORIENTATION_LANDSCAPE;
-    }
-
-    private static Context getApplicationContext() {
-        return Factory.get().getApplicationContext();
-    }
-
-    public static CharSequence commaEllipsize(
-            final String text,
-            final TextPaint paint,
-            final int width,
-            final String oneMore,
-            final String more) {
-        CharSequence ellipsized = TextUtils.commaEllipsize(
-                text,
-                paint,
-                width,
-                oneMore,
-                more);
-        if (TextUtils.isEmpty(ellipsized)) {
-            ellipsized = text;
-        }
-        return ellipsized;
-    }
-
-    /**
-     * Reveals/Hides a view with a scale animation from view center.
-     * @param view the view to animate
-     * @param desiredVisibility desired visibility (e.g. View.GONE) for the animated view.
-     * @param onFinishRunnable an optional runnable called at the end of the animation
-     */
-    public static void revealOrHideViewWithAnimation(final View view, final int desiredVisibility,
-            @Nullable final Runnable onFinishRunnable) {
-        final boolean needAnimation = view.getVisibility() != desiredVisibility;
-        if (needAnimation) {
-            final float fromScale = desiredVisibility == View.VISIBLE ? 0F : 1F;
-            final float toScale = desiredVisibility == View.VISIBLE ? 1F : 0F;
-            final ScaleAnimation showHideAnimation =
-                    new ScaleAnimation(fromScale, toScale, fromScale, toScale,
-                            ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
-                            ScaleAnimation.RELATIVE_TO_SELF, 0.5f);
-            showHideAnimation.setDuration(REVEAL_ANIMATION_DURATION);
-            showHideAnimation.setInterpolator(DEFAULT_INTERPOLATOR);
-            showHideAnimation.setAnimationListener(new AnimationListener() {
-                @Override
-                public void onAnimationStart(final Animation animation) {
-                }
-
-                @Override
-                public void onAnimationRepeat(final Animation animation) {
-                }
-
-                @Override
-                public void onAnimationEnd(final Animation animation) {
-                    if (onFinishRunnable != null) {
-                        // Rather than running this immediately, we post it to happen next so that
-                        // the animation will be completed so that the view can be detached from
-                        // it's window.  Otherwise, we may leak memory.
-                        ThreadUtil.getMainThreadHandler().post(onFinishRunnable);
-                    }
-                }
-            });
-            view.clearAnimation();
-            view.startAnimation(showHideAnimation);
-            // We are playing a view Animation; unlike view property animations, we can commit the
-            // visibility immediately instead of waiting for animation end.
-            view.setVisibility(desiredVisibility);
-        } else if (onFinishRunnable != null) {
-            // Make sure onFinishRunnable is always executed.
-            ThreadUtil.getMainThreadHandler().post(onFinishRunnable);
-        }
-    }
-
-    public static Rect getMeasuredBoundsOnScreen(final View view) {
-        final int[] location = new int[2];
-        view.getLocationOnScreen(location);
-        return new Rect(location[0], location[1],
-                location[0] + view.getMeasuredWidth(), location[1] + view.getMeasuredHeight());
-    }
-
-    public static void setStatusBarColor(final Activity activity, final int color) {
-        if (OsUtil.isAtLeastL()) {
-            // To achieve the appearance of an 80% opacity blend against a black background,
-            // each color channel is reduced in value by 20%.
-            final int blendedRed = (int) Math.floor(0.8 * Color.red(color));
-            final int blendedGreen = (int) Math.floor(0.8 * Color.green(color));
-            final int blendedBlue = (int) Math.floor(0.8 * Color.blue(color));
-
-            activity.getWindow().setStatusBarColor(
-                    Color.rgb(blendedRed, blendedGreen, blendedBlue));
-        }
-    }
-
-    public static void lockOrientation(final Activity activity) {
-        final int orientation = activity.getResources().getConfiguration().orientation;
-        final int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
-
-        // rotation tracks the rotation of the device from its natural orientation
-        // orientation tracks whether the screen is landscape or portrait.
-        // It is possible to have a rotation of 0 (device in its natural orientation) in portrait
-        // (phone), or in landscape (tablet), so we have to check both values to determine what to
-        // pass to setRequestedOrientation.
-        if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
-            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
-                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
-            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
-                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
-            }
-        } else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
-            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
-                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
-            } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
-                activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
-            }
-        }
-    }
-
-    public static void unlockOrientation(final Activity activity) {
-        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
-    }
-
-    public static int getPaddingStart(final View view) {
-        return OsUtil.isAtLeastJB_MR1() ? view.getPaddingStart() : view.getPaddingLeft();
-    }
-
-    public static int getPaddingEnd(final View view) {
-        return OsUtil.isAtLeastJB_MR1() ? view.getPaddingEnd() : view.getPaddingRight();
-    }
-
-    public static boolean isRtlMode() {
-        return OsUtil.isAtLeastJB_MR2() && Factory.get().getApplicationContext().getResources()
-                .getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
-    }
-
-    /**
-     * Check if the activity needs to be redirected to permission check
-     * @return true if {@link Activity#finish()} was called because redirection was performed
-     */
-    public static boolean redirectToPermissionCheckIfNeeded(final Activity activity) {
-        if (!OsUtil.hasRequiredPermissions()) {
-            UIIntents.get().launchPermissionCheckActivity(activity);
-        } else {
-            // No redirect performed
-            return false;
-        }
-
-        // Redirect performed
-        activity.finish();
-        return true;
-    }
-
-    /**
-     * Called to check if all conditions are nominal and a "go" for some action, such as deleting
-     * a message, that requires this app to be the default app. This is also a precondition
-     * required for sending a draft.
-     * @return true if all conditions are nominal and we're ready to send a message
-     */
-    public static boolean isReadyForAction() {
-        final PhoneUtils phoneUtils = PhoneUtils.getDefault();
-
-        // Have all the conditions been met:
-        // Supports SMS?
-        // Has a preferred sim?
-        // Is the default sms app?
-        return phoneUtils.isSmsCapable() &&
-                phoneUtils.getHasPreferredSmsSim() &&
-                phoneUtils.isDefaultSmsApp();
-    }
-
-    /*
-     * Removes all html markup from the text and replaces links with the the text and a text version
-     * of the href.
-     * @param htmlText HTML markup text
-     * @return Sanitized string with link hrefs inlined
-     */
-    public static String stripHtml(final String htmlText) {
-        final StringBuilder result = new StringBuilder();
-        final Spanned markup = Html.fromHtml(htmlText);
-        final String strippedText = markup.toString();
-
-        final URLSpan[] links = markup.getSpans(0, markup.length() - 1, URLSpan.class);
-        int currentIndex = 0;
-        for (final URLSpan link : links) {
-            final int spanStart = markup.getSpanStart(link);
-            final int spanEnd = markup.getSpanEnd(link);
-            if (spanStart > currentIndex) {
-                result.append(strippedText, currentIndex, spanStart);
-            }
-            final String displayText = strippedText.substring(spanStart, spanEnd);
-            final String linkText = link.getURL();
-            result.append(getApplicationContext().getString(R.string.link_display_format,
-                    displayText, linkText));
-            currentIndex = spanEnd;
-        }
-        if (strippedText.length() > currentIndex) {
-            result.append(strippedText, currentIndex, strippedText.length());
-        }
-        return result.toString();
-    }
-
-    public static void setActionBarShadowVisibility(final AppCompatActivity activity, final boolean visible) {
-        final ActionBar actionBar = activity.getSupportActionBar();
-        actionBar.setElevation(visible ?
-                activity.getResources().getDimensionPixelSize(R.dimen.action_bar_elevation) :
-                0);
-        final View actionBarView = activity.getWindow().getDecorView().findViewById(
-                androidx.appcompat.R.id.decor_content_parent);
-        if (actionBarView != null) {
-            // AppCompatActionBar has one drawable Field, which is the shadow for the action bar
-            // set the alpha on that drawable manually
-            final Field[] fields = actionBarView.getClass().getDeclaredFields();
-            try {
-                for (final Field field : fields) {
-                    if (field.getType().equals(Drawable.class)) {
-                        field.setAccessible(true);
-                        final Drawable shadowDrawable = (Drawable) field.get(actionBarView);
-                        if (shadowDrawable != null) {
-                            shadowDrawable.setAlpha(visible ? 255 : 0);
-                            actionBarView.invalidate();
-                            return;
-                        }
-                    }
-                }
-            } catch (final IllegalAccessException ex) {
-                // Not expected, we should avoid this via field.setAccessible(true) above
-                LogUtil.e(LogUtil.BUGLE_TAG, "Error setting shadow visibility", ex);
-            }
-        }
-    }
-
-    /**
-     * Get the activity that's hosting the view, typically casting view.getContext() as an Activity
-     * is sufficient, but sometimes the context is a context wrapper, in which case we need to case
-     * the base context
-     */
-    public static Activity getActivity(final View view) {
-        if (view == null) {
-            return null;
-        }
-        return getActivity(view.getContext());
-    }
-
-    /**
-     * Get the activity for the supplied context, typically casting context as an Activity
-     * is sufficient, but sometimes the context is a context wrapper, in which case we need to case
-     * the base context
-     */
-    public static Activity getActivity(final Context context) {
-        if (context == null) {
-            return null;
-        }
-        if (context instanceof Activity) {
-            return (Activity) context;
-        }
-        if (context instanceof ContextWrapper) {
-            return getActivity(((ContextWrapper) context).getBaseContext());
-        }
-
-        // We've hit a non-activity context such as an app-context
-        return null;
-    }
-
-    public static RemoteViews getWidgetMissingPermissionView(final Context context) {
-        return new RemoteViews(context.getPackageName(), R.layout.widget_missing_permission);
-    }
-}
diff --git a/src/com/android/messaging/util/UriUtil.java b/src/com/android/messaging/util/UriUtil.java
deleted file mode 100644
index f92155f..0000000
--- a/src/com/android/messaging/util/UriUtil.java
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.res.AssetFileDescriptor;
-import android.media.MediaMetadataRetriever;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-import android.provider.MediaStore;
-import androidx.annotation.NonNull;
-import android.text.TextUtils;
-
-import com.android.messaging.Factory;
-import com.android.messaging.datamodel.GalleryBoundCursorLoader;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.util.Assert.DoesNotRunOnMainThread;
-import com.google.common.io.ByteStreams;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Arrays;
-import java.util.HashSet;
-
-public class UriUtil {
-    private static final String SCHEME_SMS = "sms";
-    private static final String SCHEME_SMSTO = "smsto";
-    private static final String SCHEME_MMS = "mms";
-    private static final String SCHEME_MMSTO = "smsto";
-    public static final HashSet<String> SMS_MMS_SCHEMES = new HashSet<String>(
-        Arrays.asList(SCHEME_SMS, SCHEME_MMS, SCHEME_SMSTO, SCHEME_MMSTO));
-    private static final String SCHEME_HTTP = "http";
-    private static final String SCHEME_HTTPS = "https";
-
-    public static final String SCHEME_BUGLE = "bugle";
-    public static final HashSet<String> SUPPORTED_SCHEME = new HashSet<String>(
-        Arrays.asList(ContentResolver.SCHEME_ANDROID_RESOURCE,
-            ContentResolver.SCHEME_CONTENT,
-            ContentResolver.SCHEME_FILE,
-            SCHEME_BUGLE));
-
-    public static final String SCHEME_TEL = "tel:";
-
-    /**
-     * Get a Uri representation of the file path of a resource file.
-     */
-    public static Uri getUriForResourceFile(final String path) {
-        return TextUtils.isEmpty(path) ? null : Uri.fromFile(new File(path));
-    }
-
-    /**
-     * Extract the path from a file:// Uri, or null if the uri is of other scheme.
-     */
-    public static String getFilePathFromUri(final Uri uri) {
-        if (!isFileUri(uri)) {
-            return null;
-        }
-        return uri.getPath();
-    }
-
-    /**
-     * Returns whether the given Uri is local or remote.
-     */
-    public static boolean isLocalResourceUri(final Uri uri) {
-        final String scheme = uri.getScheme();
-        return TextUtils.equals(scheme, ContentResolver.SCHEME_ANDROID_RESOURCE) ||
-                TextUtils.equals(scheme, ContentResolver.SCHEME_CONTENT) ||
-                TextUtils.equals(scheme, ContentResolver.SCHEME_FILE);
-    }
-
-    /**
-     * Returns whether the given Uri is part of Bugle's app package
-     */
-    public static boolean isBugleAppResource(final Uri uri) {
-        final String scheme = uri.getScheme();
-        return TextUtils.equals(scheme, ContentResolver.SCHEME_ANDROID_RESOURCE);
-    }
-
-    /** Returns whether the given Uri is a file. */
-    public static boolean isFileUri(final Uri uri) {
-        return uri != null &&
-                uri.getScheme() != null &&
-                uri.getScheme().trim().toLowerCase().contains(ContentResolver.SCHEME_FILE);
-    }
-
-    /**
-     * Constructs an android.resource:// uri for the given resource id.
-     */
-    public static Uri getUriForResourceId(final Context context, final int resId) {
-        return new Uri.Builder()
-                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
-                .authority(context.getPackageName())
-                .appendPath(String.valueOf(resId))
-                .build();
-    }
-
-    /**
-     * Returns whether the given Uri string is local.
-     */
-    public static boolean isLocalUri(@NonNull final Uri uri) {
-        Assert.notNull(uri);
-        return SUPPORTED_SCHEME.contains(uri.getScheme());
-    }
-
-    private static final String MEDIA_STORE_URI_KLP = "com.android.providers.media.documents";
-
-    /**
-     * Check if a URI is from the MediaStore
-     */
-    public static boolean isMediaStoreUri(final Uri uri) {
-        final String uriAuthority = uri.getAuthority();
-        return TextUtils.equals(ContentResolver.SCHEME_CONTENT, uri.getScheme())
-                && (TextUtils.equals(MediaStore.AUTHORITY, uriAuthority) ||
-                // KK changed the media store authority name
-                TextUtils.equals(MEDIA_STORE_URI_KLP, uriAuthority));
-    }
-
-    /**
-     * Gets the content:// style URI for the given MediaStore row Id in the files table on the
-     * external volume.
-     *
-     * @param id the MediaStore row Id to get the URI for
-     * @return the URI to the files table on the external storage.
-     */
-    public static Uri getContentUriForMediaStoreId(final long id) {
-        return MediaStore.Files.getContentUri(
-                GalleryBoundCursorLoader.MEDIA_SCANNER_VOLUME_EXTERNAL, id);
-    }
-
-    /**
-     * Gets the size in bytes for the content uri. Currently we only support content in the
-     * scratch space.
-     */
-    @DoesNotRunOnMainThread
-    public static long getContentSize(final Uri uri) {
-        Assert.isNotMainThread();
-        if (isLocalResourceUri(uri)) {
-            ParcelFileDescriptor pfd = null;
-            try {
-                pfd = Factory.get().getApplicationContext()
-                        .getContentResolver().openFileDescriptor(uri, "r");
-                return Math.max(pfd.getStatSize(), 0);
-            } catch (final FileNotFoundException e) {
-                LogUtil.e(LogUtil.BUGLE_TAG, "Error getting content size", e);
-            } finally {
-                if (pfd != null) {
-                    try {
-                        pfd.close();
-                    } catch (final IOException e) {
-                        // Do nothing.
-                    }
-                }
-            }
-        } else {
-            Assert.fail("Unsupported uri type!");
-        }
-        return 0;
-    }
-
-    /** @return duration in milliseconds or 0 if not able to determine */
-    public static int getMediaDurationMs(final Uri uri) {
-        final MediaMetadataRetrieverWrapper retriever = new MediaMetadataRetrieverWrapper();
-        try {
-            retriever.setDataSource(uri);
-            return retriever.extractInteger(MediaMetadataRetriever.METADATA_KEY_DURATION, 0);
-        } catch (final IOException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Unable extract duration from media file: " + uri, e);
-            return 0;
-        } finally {
-            retriever.release();
-        }
-    }
-
-    /**
-     * Persist a piece of content from the given input stream, byte by byte to the scratch
-     * directory.
-     * @return the output Uri if the operation succeeded, or null if failed.
-     */
-    @DoesNotRunOnMainThread
-    public static Uri persistContentToScratchSpace(final InputStream inputStream) {
-        final Context context = Factory.get().getApplicationContext();
-        final Uri scratchSpaceUri = MediaScratchFileProvider.buildMediaScratchSpaceUri(null);
-        return copyContent(context, inputStream, scratchSpaceUri);
-    }
-
-    /**
-     * Persist a piece of content from the given sourceUri, byte by byte to the scratch
-     * directory.
-     * @return the output Uri if the operation succeeded, or null if failed.
-     */
-    @DoesNotRunOnMainThread
-    public static Uri persistContentToScratchSpace(final Uri sourceUri) {
-        InputStream inputStream = null;
-        final Context context = Factory.get().getApplicationContext();
-        try {
-            if (UriUtil.isLocalResourceUri(sourceUri)) {
-                inputStream = context.getContentResolver().openInputStream(sourceUri);
-            } else {
-                // The content is remote. Download it.
-                inputStream = getInputStreamFromRemoteUri(sourceUri);
-                if (inputStream == null) {
-                    return null;
-                }
-            }
-            return persistContentToScratchSpace(inputStream);
-        } catch (final Exception ex) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Error while retrieving media ", ex);
-            return null;
-        } finally {
-            if (inputStream != null) {
-                try {
-                    inputStream.close();
-                } catch (final IOException e) {
-                    LogUtil.e(LogUtil.BUGLE_TAG, "error trying to close the inputStream", e);
-                }
-            }
-        }
-    }
-
-    @DoesNotRunOnMainThread
-    private static InputStream getInputStreamFromRemoteUri(final Uri sourceUri)
-            throws IOException {
-        if (isRemoteUri(sourceUri)) {
-            final URL url = new URL(sourceUri.toString());
-            final URLConnection ucon = url.openConnection();
-            return new BufferedInputStream(ucon.getInputStream());
-        } else {
-            return null;
-        }
-    }
-
-    private static boolean isRemoteUri(final Uri sourceUri) {
-        return sourceUri.getScheme().equals(SCHEME_HTTP)
-            || sourceUri.getScheme().equals(SCHEME_HTTPS);
-    }
-
-    /**
-     * Persist a piece of content from the given input stream, byte by byte to the specified
-     * directory.
-     * @return the output Uri if the operation succeeded, or null if failed.
-     */
-    @DoesNotRunOnMainThread
-    public static Uri persistContent(
-            final InputStream inputStream, final File outputDir, final String contentType) {
-        if (!outputDir.exists() && !outputDir.mkdirs()) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Error creating " + outputDir.getAbsolutePath());
-            return null;
-        }
-
-        final Context context = Factory.get().getApplicationContext();
-        try {
-            final Uri targetUri = Uri.fromFile(FileUtil.getNewFile(outputDir, contentType));
-            return copyContent(context, inputStream, targetUri);
-        } catch (final IOException e) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Error creating file in " + outputDir.getAbsolutePath());
-            return null;
-        }
-    }
-
-    /**
-     * Persist a piece of content from the given sourceUri, byte by byte to the
-     * specified output directory.
-     * @return the output Uri if the operation succeeded, or null if failed.
-     */
-    @DoesNotRunOnMainThread
-    public static Uri persistContent(
-            final Uri sourceUri, final File outputDir, final String contentType) {
-        InputStream inputStream = null;
-        final Context context = Factory.get().getApplicationContext();
-        try {
-            if (UriUtil.isLocalResourceUri(sourceUri)) {
-                inputStream = context.getContentResolver().openInputStream(sourceUri);
-            } else {
-                // The content is remote. Download it.
-                inputStream = getInputStreamFromRemoteUri(sourceUri);
-                if (inputStream == null) {
-                    return null;
-                }
-            }
-            return persistContent(inputStream, outputDir, contentType);
-        } catch (final Exception ex) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Error while retrieving media ", ex);
-            return null;
-        } finally {
-            if (inputStream != null) {
-                try {
-                    inputStream.close();
-                } catch (final IOException e) {
-                    LogUtil.e(LogUtil.BUGLE_TAG, "error trying to close the inputStream", e);
-                }
-            }
-        }
-    }
-
-    /** @return uri of target file, or null on error */
-    @DoesNotRunOnMainThread
-    private static Uri copyContent(
-            final Context context, final InputStream inputStream, final Uri targetUri) {
-        Assert.isNotMainThread();
-        OutputStream outputStream = null;
-        try {
-            outputStream = context.getContentResolver().openOutputStream(targetUri);
-            ByteStreams.copy(inputStream, outputStream);
-        } catch (final Exception ex) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Error while copying content ", ex);
-            return null;
-        } finally {
-            if (outputStream != null) {
-                try {
-                    outputStream.flush();
-                } catch (final IOException e) {
-                    LogUtil.e(LogUtil.BUGLE_TAG, "error trying to flush the outputStream", e);
-                    return null;
-                } finally {
-                    try {
-                        outputStream.close();
-                    } catch (final IOException e) {
-                        // Do nothing.
-                    }
-                }
-            }
-        }
-        return targetUri;
-    }
-
-    public static boolean isSmsMmsUri(final Uri uri) {
-        return uri != null && SMS_MMS_SCHEMES.contains(uri.getScheme());
-    }
-
-    /**
-     * Extract recipient destinations from Uri of form SCHEME:destination[,destination]?otherstuff
-     * where SCHEME is one of the supported sms/mms schemes.
-     *
-     * @param uri sms/mms uri
-     * @return a comma-separated list of recipient destinations or null.
-     */
-    public static String parseRecipientsFromSmsMmsUri(final Uri uri) {
-        if (!isSmsMmsUri(uri)) {
-            return null;
-        }
-        final String[] parts = uri.getSchemeSpecificPart().split("\\?");
-        if (TextUtils.isEmpty(parts[0])) {
-            return null;
-        }
-        // replaceUnicodeDigits will replace digits typed in other languages (i.e. Egyptian) with
-        // the usual ascii equivalents.
-        return TextUtil.replaceUnicodeDigits(parts[0]).replace(';', ',');
-    }
-
-    /**
-     * Return the length of the file to which contentUri refers
-     *
-     * @param contentUri URI for the file of which we want the length
-     * @return Length of the file or AssetFileDescriptor.UNKNOWN_LENGTH
-     */
-    public static long getUriContentLength(final Uri contentUri) {
-        final Context context = Factory.get().getApplicationContext();
-        AssetFileDescriptor afd = null;
-        try {
-            afd = context.getContentResolver().openAssetFileDescriptor(contentUri, "r");
-            return afd.getLength();
-        } catch (final FileNotFoundException e) {
-            LogUtil.w(LogUtil.BUGLE_TAG, "Failed to query length of " + contentUri);
-        } finally {
-            if (afd != null) {
-                try {
-                    afd.close();
-                } catch (final IOException e) {
-                    LogUtil.w(LogUtil.BUGLE_TAG, "Failed to close afd for " + contentUri);
-                }
-            }
-        }
-        return AssetFileDescriptor.UNKNOWN_LENGTH;
-    }
-
-    /** @return string representation of URI or null if URI was null */
-    public static String stringFromUri(final Uri uri) {
-        return uri == null ? null : uri.toString();
-    }
-
-    /** @return URI created from string or null if string was null or empty */
-    public static Uri uriFromString(final String uriString) {
-        return TextUtils.isEmpty(uriString) ? null : Uri.parse(uriString);
-     }
-}
diff --git a/src/com/android/messaging/util/VersionUtil.java b/src/com/android/messaging/util/VersionUtil.java
deleted file mode 100644
index b87aa55..0000000
--- a/src/com/android/messaging/util/VersionUtil.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
-
-import java.util.Locale;
-
-public final class VersionUtil {
-    private static final Object sLock = new Object();
-    private static VersionUtil sInstance;
-    private final String mSimpleVersionName;
-    private final int mVersionCode;
-
-    public static VersionUtil getInstance(final Context context) {
-        synchronized (sLock) {
-            if (sInstance == null) {
-                sInstance = new VersionUtil(context);
-            }
-        }
-        return sInstance;
-    }
-
-    private VersionUtil(final Context context) {
-        int versionCode;
-        try {
-            PackageInfo pi = context.getPackageManager().getPackageInfo(
-                    context.getPackageName(), 0);
-            versionCode = pi.versionCode;
-        } catch (final NameNotFoundException exception) {
-            Assert.fail("couldn't get package info " + exception);
-            versionCode = -1;
-        }
-        mVersionCode = versionCode;
-        final int majorBuildNumber = versionCode / 1000;
-        // Use US locale to format version number so that other language characters don't
-        // show up in version string.
-        mSimpleVersionName = String.format(Locale.US, "%d.%d.%03d",
-                majorBuildNumber / 10000,
-                (majorBuildNumber / 1000) % 10,
-                majorBuildNumber % 1000);
-    }
-
-    public int getVersionCode() {
-        return mVersionCode;
-    }
-
-    public String getSimpleName() {
-        return mSimpleVersionName;
-    }
-}
diff --git a/src/com/android/messaging/util/WakeLockHelper.java b/src/com/android/messaging/util/WakeLockHelper.java
deleted file mode 100644
index c9a9152..0000000
--- a/src/com/android/messaging/util/WakeLockHelper.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Debug;
-import android.os.PowerManager;
-import android.os.Process;
-
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * Helper class used to manage wakelock state
- */
-public class WakeLockHelper {
-    private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG;
-    private static final boolean VERBOSE = false;
-
-    @VisibleForTesting
-    public static final String EXTRA_CALLING_PID = "pid";
-
-    private final Object mLock = new Object();
-    private final String mWakeLockId;
-    private final int mMyPid;
-
-    private PowerManager.WakeLock mWakeLock;
-
-    public WakeLockHelper(final String wakeLockId) {
-        mWakeLockId = wakeLockId;
-        mMyPid = Process.myPid();
-    }
-
-    /**
-     * Acquire the wakelock
-     */
-    public void acquire(final Context context, final Intent intent, final int opcode) {
-        synchronized (mLock) {
-            if (mWakeLock == null) {
-                if (VERBOSE) {
-                    LogUtil.v(TAG, "initializing wakelock");
-                }
-                final PowerManager pm = (PowerManager)
-                        context.getSystemService(Context.POWER_SERVICE);
-                mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, mWakeLockId);
-            }
-        }
-        if (VERBOSE) {
-            LogUtil.v(TAG, "acquiring " + mWakeLockId + " for opcode " + opcode);
-        }
-        mWakeLock.acquire();
-        intent.putExtra(EXTRA_CALLING_PID, mMyPid);
-    }
-
-    /**
-     * Check if wakelock held by this process
-     */
-    public boolean isHeld(final Intent intent) {
-        final boolean respectWakeLock = (mMyPid == intent.getIntExtra(EXTRA_CALLING_PID, -1));
-        return (respectWakeLock && mWakeLock.isHeld());
-    }
-
-    /**
-     * Ensure that wakelock is held by this process
-     */
-    public boolean ensure(final Intent intent, final int opcode) {
-        final boolean respectWakeLock = (mMyPid == intent.getIntExtra(EXTRA_CALLING_PID, -1));
-        if (VERBOSE) {
-            LogUtil.v(TAG, "WakeLockHelper.ensure Intent " + intent + " "
-                    + intent.getAction() + " opcode: " + opcode
-                    + " respectWakeLock " + respectWakeLock);
-        }
-
-        if (respectWakeLock) {
-            final boolean isHeld = (respectWakeLock && isHeld(intent));
-            if (!isHeld) {
-                LogUtil.e(TAG, "WakeLockHelper.ensure called " + intent + " " + intent.getAction()
-                        + " opcode: " + opcode + " sWakeLock: " + mWakeLock + " isHeld: "
-                        + ((mWakeLock == null) ? "(null)" : mWakeLock.isHeld()));
-                if (!Debug.isDebuggerConnected()) {
-                    Assert.fail("WakeLock dropped prior to service starting");
-                }
-            }
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Release wakelock (if it is held by this process)
-     */
-    public void release(final Intent intent, final int opcode) {
-        final boolean respectWakeLock = (mMyPid == intent.getIntExtra(EXTRA_CALLING_PID, -1));
-        if (respectWakeLock) {
-            try {
-                mWakeLock.release();
-            } catch (final RuntimeException ex) {
-                LogUtil.e(TAG, "KeepAliveService.onHandleIntent exit crash " + intent + " "
-                        + intent.getAction() + " opcode: " + opcode + " sWakeLock: " + mWakeLock
-                        + " isHeld: " + ((mWakeLock == null) ? "(null)" : mWakeLock.isHeld()));
-                if (!Debug.isDebuggerConnected()) {
-                    Assert.fail("WakeLock no longer held at end of handler");
-                }
-            }
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/YouTubeUtil.java b/src/com/android/messaging/util/YouTubeUtil.java
deleted file mode 100644
index 203a666..0000000
--- a/src/com/android/messaging/util/YouTubeUtil.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.net.Uri;
-import android.text.TextUtils;
-
-public class YouTubeUtil {
-    private static final String YOUTUBE_HOST_1 = "www.youtube.com";
-    private static final String YOUTUBE_HOST_2 = "youtube.com";
-    private static final String YOUTUBE_HOST_3 = "m.youtube.com";
-    private static final String YOUTUBE_HOST_4 = "youtube.googleapis.com";
-    private static final String YOUTUBE_HOST_5 = "youtu.be";
-
-    private static final String YOUTUBE_PATH_1 = "/watch";
-    private static final String YOUTUBE_PATH_2 = "/embed/";
-    private static final String YOUTUBE_PATH_3 = "/v/";
-    private static final String YOUTUBE_PATH_4 = "/apiplayer";
-
-    public static final String YOUTUBE_STATIC_THUMBNAIL_PREFIX = "https://img.youtube.com/vi/";
-    public static final String YOUTUBE_STATIC_THUMBNAIL_END = "/hqdefault.jpg";
-
-    public static String getYoutubePreviewImageLink(String urlString) {
-        // Types of youtube urls:
-        // 1.) http://www.youtube.com/watch?v=VIDEOID
-        // 2.) http://www.youtube.com/embed/VIDEOID
-        // 3.) http://www.youtube.com/v/VIDEOID
-        // 3a.) https://youtube.googleapis.com/v/VIDEOID
-        // 4.) http://www.youtube.com/apiplayer?video_id=VIDEO_ID
-        // 5.) http://youtu.be/VIDEOID
-        if (!urlString.startsWith("http")) {
-            // Apparently the url is not an RFC 2396 compliant uri without the port
-            urlString = "http://" + urlString;
-        }
-        final Uri uri = Uri.parse(urlString);
-        final String host = uri.getHost();
-        if (YOUTUBE_HOST_1.equalsIgnoreCase(host)
-                || YOUTUBE_HOST_2.equalsIgnoreCase(host)
-                || YOUTUBE_HOST_3.equalsIgnoreCase(host)
-                || YOUTUBE_HOST_4.equalsIgnoreCase(host)
-                || YOUTUBE_HOST_5.equalsIgnoreCase(host)) {
-            final String videoId = getYouTubeVideoId(uri);
-            if (!TextUtils.isEmpty(videoId)) {
-                return YOUTUBE_STATIC_THUMBNAIL_PREFIX + videoId + YOUTUBE_STATIC_THUMBNAIL_END;
-            }
-            return null;
-        }
-        return null;
-    }
-
-    private static String getYouTubeVideoId(Uri uri) {
-        final String urlPath = uri.getPath();
-
-        if (TextUtils.isEmpty(urlPath)) {
-            // There is no path so no need to continue.
-            return null;
-        }
-        // Case 1
-        if (urlPath.startsWith(YOUTUBE_PATH_1)) {
-            return uri.getQueryParameter("v");
-        }
-        // Case 2
-        if (urlPath.startsWith(YOUTUBE_PATH_2)) {
-            return getVideoIdFromPath(YOUTUBE_PATH_2, urlPath);
-        }
-        // Case 3
-        if (urlPath.startsWith(YOUTUBE_PATH_3)) {
-            return getVideoIdFromPath(YOUTUBE_PATH_3, urlPath);
-        }
-        // Case 4
-        if (urlPath.startsWith(YOUTUBE_PATH_4)) {
-            return uri.getQueryParameter("video_id");
-        }
-        // Case 5
-        if (YOUTUBE_HOST_5.equalsIgnoreCase(uri.getHost())) {
-            return getVideoIdFromPath("/", urlPath);
-        }
-        return null;
-    }
-
-    private static String getVideoIdFromPath(String prefixSubstring, String urlPath) {
-        return urlPath.substring(prefixSubstring.length());
-    }
-
-}
diff --git a/src/com/android/messaging/util/exif/ByteBufferInputStream.java b/src/com/android/messaging/util/exif/ByteBufferInputStream.java
deleted file mode 100644
index 9db92ef..0000000
--- a/src/com/android/messaging/util/exif/ByteBufferInputStream.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-
-class ByteBufferInputStream extends InputStream {
-
-    private final ByteBuffer mBuf;
-
-    public ByteBufferInputStream(ByteBuffer buf) {
-        mBuf = buf;
-    }
-
-    @Override
-    public int read() {
-        if (!mBuf.hasRemaining()) {
-            return -1;
-        }
-        return mBuf.get() & 0xFF;
-    }
-
-    @Override
-    public int read(byte[] bytes, int off, int len) {
-        if (!mBuf.hasRemaining()) {
-            return -1;
-        }
-
-        len = Math.min(len, mBuf.remaining());
-        mBuf.get(bytes, off, len);
-        return len;
-    }
-}
diff --git a/src/com/android/messaging/util/exif/CountedDataInputStream.java b/src/com/android/messaging/util/exif/CountedDataInputStream.java
deleted file mode 100644
index ce766d9..0000000
--- a/src/com/android/messaging/util/exif/CountedDataInputStream.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-import java.io.EOFException;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.charset.Charset;
-
-class CountedDataInputStream extends FilterInputStream {
-
-    private int mCount = 0;
-
-    // allocate a byte buffer for a long value;
-    private final byte mByteArray[] = new byte[8];
-    private final ByteBuffer mByteBuffer = ByteBuffer.wrap(mByteArray);
-
-    protected CountedDataInputStream(InputStream in) {
-        super(in);
-    }
-
-    public int getReadByteCount() {
-        return mCount;
-    }
-
-    @Override
-    public int read(byte[] b) throws IOException {
-        int r = in.read(b);
-        mCount += (r >= 0) ? r : 0;
-        return r;
-    }
-
-    @Override
-    public int read(byte[] b, int off, int len) throws IOException {
-        int r = in.read(b, off, len);
-        mCount += (r >= 0) ? r : 0;
-        return r;
-    }
-
-    @Override
-    public int read() throws IOException {
-        int r = in.read();
-        mCount += (r >= 0) ? 1 : 0;
-        return r;
-    }
-
-    @Override
-    public long skip(long length) throws IOException {
-        long skip = in.skip(length);
-        mCount += skip;
-        return skip;
-    }
-
-    public void skipOrThrow(long length) throws IOException {
-        if (skip(length) != length) {
-            throw new EOFException();
-        }
-    }
-
-    public void skipTo(long target) throws IOException {
-        long cur = mCount;
-        long diff = target - cur;
-        assert(diff >= 0);
-        skipOrThrow(diff);
-    }
-
-    public void readOrThrow(byte[] b, int off, int len) throws IOException {
-        int r = read(b, off, len);
-        if (r != len) {
-            throw new EOFException();
-        }
-    }
-
-    public void readOrThrow(byte[] b) throws IOException {
-        readOrThrow(b, 0, b.length);
-    }
-
-    public void setByteOrder(ByteOrder order) {
-        mByteBuffer.order(order);
-    }
-
-    public ByteOrder getByteOrder() {
-        return mByteBuffer.order();
-    }
-
-    public short readShort() throws IOException {
-        readOrThrow(mByteArray, 0 , 2);
-        mByteBuffer.rewind();
-        return mByteBuffer.getShort();
-    }
-
-    public int readUnsignedShort() throws IOException {
-        return readShort() & 0xffff;
-    }
-
-    public int readInt() throws IOException {
-        readOrThrow(mByteArray, 0 , 4);
-        mByteBuffer.rewind();
-        return mByteBuffer.getInt();
-    }
-
-    public long readUnsignedInt() throws IOException {
-        return readInt() & 0xffffffffL;
-    }
-
-    public long readLong() throws IOException {
-        readOrThrow(mByteArray, 0 , 8);
-        mByteBuffer.rewind();
-        return mByteBuffer.getLong();
-    }
-
-    public String readString(int n) throws IOException {
-        byte buf[] = new byte[n];
-        readOrThrow(buf);
-        return new String(buf, "UTF8");
-    }
-
-    public String readString(int n, Charset charset) throws IOException {
-        byte buf[] = new byte[n];
-        readOrThrow(buf);
-        return new String(buf, charset);
-    }
-}
diff --git a/src/com/android/messaging/util/exif/ExifData.java b/src/com/android/messaging/util/exif/ExifData.java
deleted file mode 100644
index 77ba4e9..0000000
--- a/src/com/android/messaging/util/exif/ExifData.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-import android.util.Log;
-import com.android.messaging.util.LogUtil;
-
-import java.io.UnsupportedEncodingException;
-import java.nio.ByteOrder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * This class stores the EXIF header in IFDs according to the JPEG
- * specification. It is the result produced by {@link ExifReader}.
- *
- * @see ExifReader
- * @see IfdData
- */
-class ExifData {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-    private static final byte[] USER_COMMENT_ASCII = {
-            0x41, 0x53, 0x43, 0x49, 0x49, 0x00, 0x00, 0x00
-    };
-    private static final byte[] USER_COMMENT_JIS = {
-            0x4A, 0x49, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00
-    };
-    private static final byte[] USER_COMMENT_UNICODE = {
-            0x55, 0x4E, 0x49, 0x43, 0x4F, 0x44, 0x45, 0x00
-    };
-
-    private final IfdData[] mIfdDatas = new IfdData[IfdId.TYPE_IFD_COUNT];
-    private byte[] mThumbnail;
-    private final ArrayList<byte[]> mStripBytes = new ArrayList<byte[]>();
-    private final ByteOrder mByteOrder;
-
-    ExifData(ByteOrder order) {
-        mByteOrder = order;
-    }
-
-    /**
-     * Gets the compressed thumbnail. Returns null if there is no compressed
-     * thumbnail.
-     *
-     * @see #hasCompressedThumbnail()
-     */
-    protected byte[] getCompressedThumbnail() {
-        return mThumbnail;
-    }
-
-    /**
-     * Sets the compressed thumbnail.
-     */
-    protected void setCompressedThumbnail(byte[] thumbnail) {
-        mThumbnail = thumbnail;
-    }
-
-    /**
-     * Returns true it this header contains a compressed thumbnail.
-     */
-    protected boolean hasCompressedThumbnail() {
-        return mThumbnail != null;
-    }
-
-    /**
-     * Adds an uncompressed strip.
-     */
-    protected void setStripBytes(int index, byte[] strip) {
-        if (index < mStripBytes.size()) {
-            mStripBytes.set(index, strip);
-        } else {
-            for (int i = mStripBytes.size(); i < index; i++) {
-                mStripBytes.add(null);
-            }
-            mStripBytes.add(strip);
-        }
-    }
-
-    /**
-     * Gets the strip count.
-     */
-    protected int getStripCount() {
-        return mStripBytes.size();
-    }
-
-    /**
-     * Gets the strip at the specified index.
-     *
-     * @exceptions #IndexOutOfBoundException
-     */
-    protected byte[] getStrip(int index) {
-        return mStripBytes.get(index);
-    }
-
-    /**
-     * Returns true if this header contains uncompressed strip.
-     */
-    protected boolean hasUncompressedStrip() {
-        return mStripBytes.size() != 0;
-    }
-
-    /**
-     * Gets the byte order.
-     */
-    protected ByteOrder getByteOrder() {
-        return mByteOrder;
-    }
-
-    /**
-     * Returns the {@link IfdData} object corresponding to a given IFD if it
-     * exists or null.
-     */
-    protected IfdData getIfdData(int ifdId) {
-        if (ExifTag.isValidIfd(ifdId)) {
-            return mIfdDatas[ifdId];
-        }
-        return null;
-    }
-
-    /**
-     * Adds IFD data. If IFD data of the same type already exists, it will be
-     * replaced by the new data.
-     */
-    protected void addIfdData(IfdData data) {
-        mIfdDatas[data.getId()] = data;
-    }
-
-    /**
-     * Returns the {@link IfdData} object corresponding to a given IFD or
-     * generates one if none exist.
-     */
-    protected IfdData getOrCreateIfdData(int ifdId) {
-        IfdData ifdData = mIfdDatas[ifdId];
-        if (ifdData == null) {
-            ifdData = new IfdData(ifdId);
-            mIfdDatas[ifdId] = ifdData;
-        }
-        return ifdData;
-    }
-
-    /**
-     * Returns the tag with a given TID in the given IFD if the tag exists.
-     * Otherwise returns null.
-     */
-    protected ExifTag getTag(short tag, int ifd) {
-        IfdData ifdData = mIfdDatas[ifd];
-        return (ifdData == null) ? null : ifdData.getTag(tag);
-    }
-
-    /**
-     * Adds the given ExifTag to its default IFD and returns an existing ExifTag
-     * with the same TID or null if none exist.
-     */
-    protected ExifTag addTag(ExifTag tag) {
-        if (tag != null) {
-            int ifd = tag.getIfd();
-            return addTag(tag, ifd);
-        }
-        return null;
-    }
-
-    /**
-     * Adds the given ExifTag to the given IFD and returns an existing ExifTag
-     * with the same TID or null if none exist.
-     */
-    protected ExifTag addTag(ExifTag tag, int ifdId) {
-        if (tag != null && ExifTag.isValidIfd(ifdId)) {
-            IfdData ifdData = getOrCreateIfdData(ifdId);
-            return ifdData.setTag(tag);
-        }
-        return null;
-    }
-
-    protected void clearThumbnailAndStrips() {
-        mThumbnail = null;
-        mStripBytes.clear();
-    }
-
-    /**
-     * Removes the thumbnail and its related tags. IFD1 will be removed.
-     */
-    protected void removeThumbnailData() {
-        clearThumbnailAndStrips();
-        mIfdDatas[IfdId.TYPE_IFD_1] = null;
-    }
-
-    /**
-     * Removes the tag with a given TID and IFD.
-     */
-    protected void removeTag(short tagId, int ifdId) {
-        IfdData ifdData = mIfdDatas[ifdId];
-        if (ifdData == null) {
-            return;
-        }
-        ifdData.removeTag(tagId);
-    }
-
-    /**
-     * Decodes the user comment tag into string as specified in the EXIF
-     * standard. Returns null if decoding failed.
-     */
-    protected String getUserComment() {
-        IfdData ifdData = mIfdDatas[IfdId.TYPE_IFD_0];
-        if (ifdData == null) {
-            return null;
-        }
-        ExifTag tag = ifdData.getTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_USER_COMMENT));
-        if (tag == null) {
-            return null;
-        }
-        if (tag.getComponentCount() < 8) {
-            return null;
-        }
-
-        byte[] buf = new byte[tag.getComponentCount()];
-        tag.getBytes(buf);
-
-        byte[] code = new byte[8];
-        System.arraycopy(buf, 0, code, 0, 8);
-
-        try {
-            if (Arrays.equals(code, USER_COMMENT_ASCII)) {
-                return new String(buf, 8, buf.length - 8, "US-ASCII");
-            } else if (Arrays.equals(code, USER_COMMENT_JIS)) {
-                return new String(buf, 8, buf.length - 8, "EUC-JP");
-            } else if (Arrays.equals(code, USER_COMMENT_UNICODE)) {
-                return new String(buf, 8, buf.length - 8, "UTF-16");
-            } else {
-                return null;
-            }
-        } catch (UnsupportedEncodingException e) {
-            Log.w(TAG, "Failed to decode the user comment");
-            return null;
-        }
-    }
-
-    /**
-     * Returns a list of all {@link ExifTag}s in the ExifData or null if there
-     * are none.
-     */
-    protected List<ExifTag> getAllTags() {
-        ArrayList<ExifTag> ret = new ArrayList<ExifTag>();
-        for (IfdData d : mIfdDatas) {
-            if (d != null) {
-                ExifTag[] tags = d.getAllTags();
-                if (tags != null) {
-                    for (ExifTag t : tags) {
-                        ret.add(t);
-                    }
-                }
-            }
-        }
-        if (ret.size() == 0) {
-            return null;
-        }
-        return ret;
-    }
-
-    /**
-     * Returns a list of all {@link ExifTag}s in a given IFD or null if there
-     * are none.
-     */
-    protected List<ExifTag> getAllTagsForIfd(int ifd) {
-        IfdData d = mIfdDatas[ifd];
-        if (d == null) {
-            return null;
-        }
-        ExifTag[] tags = d.getAllTags();
-        if (tags == null) {
-            return null;
-        }
-        ArrayList<ExifTag> ret = new ArrayList<ExifTag>(tags.length);
-        for (ExifTag t : tags) {
-            ret.add(t);
-        }
-        if (ret.size() == 0) {
-            return null;
-        }
-        return ret;
-    }
-
-    /**
-     * Returns a list of all {@link ExifTag}s with a given TID or null if there
-     * are none.
-     */
-    protected List<ExifTag> getAllTagsForTagId(short tag) {
-        ArrayList<ExifTag> ret = new ArrayList<ExifTag>();
-        for (IfdData d : mIfdDatas) {
-            if (d != null) {
-                ExifTag t = d.getTag(tag);
-                if (t != null) {
-                    ret.add(t);
-                }
-            }
-        }
-        if (ret.size() == 0) {
-            return null;
-        }
-        return ret;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (obj instanceof ExifData) {
-            ExifData data = (ExifData) obj;
-            if (data.mByteOrder != mByteOrder ||
-                    data.mStripBytes.size() != mStripBytes.size() ||
-                    !Arrays.equals(data.mThumbnail, mThumbnail)) {
-                return false;
-            }
-            for (int i = 0; i < mStripBytes.size(); i++) {
-                if (!Arrays.equals(data.mStripBytes.get(i), mStripBytes.get(i))) {
-                    return false;
-                }
-            }
-            for (int i = 0; i < IfdId.TYPE_IFD_COUNT; i++) {
-                IfdData ifd1 = data.getIfdData(i);
-                IfdData ifd2 = getIfdData(i);
-                if (ifd1 != ifd2 && ifd1 != null && !ifd1.equals(ifd2)) {
-                    return false;
-                }
-            }
-            return true;
-        }
-        return false;
-    }
-
-}
diff --git a/src/com/android/messaging/util/exif/ExifInterface.java b/src/com/android/messaging/util/exif/ExifInterface.java
deleted file mode 100644
index b556748..0000000
--- a/src/com/android/messaging/util/exif/ExifInterface.java
+++ /dev/null
@@ -1,2448 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-
-package com.android.messaging.util.exif;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.util.SparseIntArray;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.channels.FileChannel.MapMode;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.TimeZone;
-
-/**
- * This class provides methods and constants for reading and writing jpeg file
- * metadata. It contains a collection of ExifTags, and a collection of
- * definitions for creating valid ExifTags. The collection of ExifTags can be
- * updated by: reading new ones from a file, deleting or adding existing ones,
- * or building new ExifTags from a tag definition. These ExifTags can be written
- * to a valid jpeg image as exif metadata.
- * <p>
- * Each ExifTag has a tag ID (TID) and is stored in a specific image file
- * directory (IFD) as specified by the exif standard. A tag definition can be
- * looked up with a constant that is a combination of TID and IFD. This
- * definition has information about the type, number of components, and valid
- * IFDs for a tag.
- *
- * @see ExifTag
- */
-public class ExifInterface {
-    public static final int TAG_NULL = -1;
-    public static final int IFD_NULL = -1;
-    public static final int DEFINITION_NULL = 0;
-
-    /**
-     * Tag constants for Jeita EXIF 2.2
-     */
-
-    // IFD 0
-    public static final int TAG_IMAGE_WIDTH =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0100);
-    public static final int TAG_IMAGE_LENGTH =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0101); // Image height
-    public static final int TAG_BITS_PER_SAMPLE =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0102);
-    public static final int TAG_COMPRESSION =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0103);
-    public static final int TAG_PHOTOMETRIC_INTERPRETATION =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0106);
-    public static final int TAG_IMAGE_DESCRIPTION =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x010E);
-    public static final int TAG_MAKE =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x010F);
-    public static final int TAG_MODEL =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0110);
-    public static final int TAG_STRIP_OFFSETS =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0111);
-    public static final int TAG_ORIENTATION =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0112);
-    public static final int TAG_SAMPLES_PER_PIXEL =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0115);
-    public static final int TAG_ROWS_PER_STRIP =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0116);
-    public static final int TAG_STRIP_BYTE_COUNTS =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0117);
-    public static final int TAG_X_RESOLUTION =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x011A);
-    public static final int TAG_Y_RESOLUTION =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x011B);
-    public static final int TAG_PLANAR_CONFIGURATION =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x011C);
-    public static final int TAG_RESOLUTION_UNIT =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0128);
-    public static final int TAG_TRANSFER_FUNCTION =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x012D);
-    public static final int TAG_SOFTWARE =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0131);
-    public static final int TAG_DATE_TIME =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0132);
-    public static final int TAG_ARTIST =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x013B);
-    public static final int TAG_WHITE_POINT =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x013E);
-    public static final int TAG_PRIMARY_CHROMATICITIES =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x013F);
-    public static final int TAG_Y_CB_CR_COEFFICIENTS =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0211);
-    public static final int TAG_Y_CB_CR_SUB_SAMPLING =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0212);
-    public static final int TAG_Y_CB_CR_POSITIONING =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0213);
-    public static final int TAG_REFERENCE_BLACK_WHITE =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x0214);
-    public static final int TAG_COPYRIGHT =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x8298);
-    public static final int TAG_EXIF_IFD =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x8769);
-    public static final int TAG_GPS_IFD =
-        defineTag(IfdId.TYPE_IFD_0, (short) 0x8825);
-    // IFD 1
-    public static final int TAG_JPEG_INTERCHANGE_FORMAT =
-        defineTag(IfdId.TYPE_IFD_1, (short) 0x0201);
-    public static final int TAG_JPEG_INTERCHANGE_FORMAT_LENGTH =
-        defineTag(IfdId.TYPE_IFD_1, (short) 0x0202);
-    // IFD Exif Tags
-    public static final int TAG_EXPOSURE_TIME =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x829A);
-    public static final int TAG_F_NUMBER =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x829D);
-    public static final int TAG_EXPOSURE_PROGRAM =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x8822);
-    public static final int TAG_SPECTRAL_SENSITIVITY =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x8824);
-    public static final int TAG_ISO_SPEED_RATINGS =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x8827);
-    public static final int TAG_OECF =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x8828);
-    public static final int TAG_EXIF_VERSION =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9000);
-    public static final int TAG_DATE_TIME_ORIGINAL =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9003);
-    public static final int TAG_DATE_TIME_DIGITIZED =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9004);
-    public static final int TAG_COMPONENTS_CONFIGURATION =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9101);
-    public static final int TAG_COMPRESSED_BITS_PER_PIXEL =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9102);
-    public static final int TAG_SHUTTER_SPEED_VALUE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9201);
-    public static final int TAG_APERTURE_VALUE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9202);
-    public static final int TAG_BRIGHTNESS_VALUE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9203);
-    public static final int TAG_EXPOSURE_BIAS_VALUE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9204);
-    public static final int TAG_MAX_APERTURE_VALUE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9205);
-    public static final int TAG_SUBJECT_DISTANCE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9206);
-    public static final int TAG_METERING_MODE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9207);
-    public static final int TAG_LIGHT_SOURCE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9208);
-    public static final int TAG_FLASH =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9209);
-    public static final int TAG_FOCAL_LENGTH =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x920A);
-    public static final int TAG_SUBJECT_AREA =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9214);
-    public static final int TAG_MAKER_NOTE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x927C);
-    public static final int TAG_USER_COMMENT =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9286);
-    public static final int TAG_SUB_SEC_TIME =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9290);
-    public static final int TAG_SUB_SEC_TIME_ORIGINAL =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9291);
-    public static final int TAG_SUB_SEC_TIME_DIGITIZED =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0x9292);
-    public static final int TAG_FLASHPIX_VERSION =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA000);
-    public static final int TAG_COLOR_SPACE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA001);
-    public static final int TAG_PIXEL_X_DIMENSION =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA002);
-    public static final int TAG_PIXEL_Y_DIMENSION =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA003);
-    public static final int TAG_RELATED_SOUND_FILE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA004);
-    public static final int TAG_INTEROPERABILITY_IFD =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA005);
-    public static final int TAG_FLASH_ENERGY =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA20B);
-    public static final int TAG_SPATIAL_FREQUENCY_RESPONSE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA20C);
-    public static final int TAG_FOCAL_PLANE_X_RESOLUTION =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA20E);
-    public static final int TAG_FOCAL_PLANE_Y_RESOLUTION =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA20F);
-    public static final int TAG_FOCAL_PLANE_RESOLUTION_UNIT =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA210);
-    public static final int TAG_SUBJECT_LOCATION =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA214);
-    public static final int TAG_EXPOSURE_INDEX =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA215);
-    public static final int TAG_SENSING_METHOD =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA217);
-    public static final int TAG_FILE_SOURCE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA300);
-    public static final int TAG_SCENE_TYPE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA301);
-    public static final int TAG_CFA_PATTERN =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA302);
-    public static final int TAG_CUSTOM_RENDERED =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA401);
-    public static final int TAG_EXPOSURE_MODE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA402);
-    public static final int TAG_WHITE_BALANCE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA403);
-    public static final int TAG_DIGITAL_ZOOM_RATIO =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA404);
-    public static final int TAG_FOCAL_LENGTH_IN_35_MM_FILE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA405);
-    public static final int TAG_SCENE_CAPTURE_TYPE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA406);
-    public static final int TAG_GAIN_CONTROL =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA407);
-    public static final int TAG_CONTRAST =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA408);
-    public static final int TAG_SATURATION =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA409);
-    public static final int TAG_SHARPNESS =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA40A);
-    public static final int TAG_DEVICE_SETTING_DESCRIPTION =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA40B);
-    public static final int TAG_SUBJECT_DISTANCE_RANGE =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA40C);
-    public static final int TAG_IMAGE_UNIQUE_ID =
-        defineTag(IfdId.TYPE_IFD_EXIF, (short) 0xA420);
-    // IFD GPS tags
-    public static final int TAG_GPS_VERSION_ID =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 0);
-    public static final int TAG_GPS_LATITUDE_REF =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 1);
-    public static final int TAG_GPS_LATITUDE =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 2);
-    public static final int TAG_GPS_LONGITUDE_REF =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 3);
-    public static final int TAG_GPS_LONGITUDE =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 4);
-    public static final int TAG_GPS_ALTITUDE_REF =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 5);
-    public static final int TAG_GPS_ALTITUDE =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 6);
-    public static final int TAG_GPS_TIME_STAMP =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 7);
-    public static final int TAG_GPS_SATTELLITES =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 8);
-    public static final int TAG_GPS_STATUS =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 9);
-    public static final int TAG_GPS_MEASURE_MODE =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 10);
-    public static final int TAG_GPS_DOP =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 11);
-    public static final int TAG_GPS_SPEED_REF =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 12);
-    public static final int TAG_GPS_SPEED =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 13);
-    public static final int TAG_GPS_TRACK_REF =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 14);
-    public static final int TAG_GPS_TRACK =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 15);
-    public static final int TAG_GPS_IMG_DIRECTION_REF =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 16);
-    public static final int TAG_GPS_IMG_DIRECTION =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 17);
-    public static final int TAG_GPS_MAP_DATUM =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 18);
-    public static final int TAG_GPS_DEST_LATITUDE_REF =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 19);
-    public static final int TAG_GPS_DEST_LATITUDE =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 20);
-    public static final int TAG_GPS_DEST_LONGITUDE_REF =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 21);
-    public static final int TAG_GPS_DEST_LONGITUDE =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 22);
-    public static final int TAG_GPS_DEST_BEARING_REF =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 23);
-    public static final int TAG_GPS_DEST_BEARING =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 24);
-    public static final int TAG_GPS_DEST_DISTANCE_REF =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 25);
-    public static final int TAG_GPS_DEST_DISTANCE =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 26);
-    public static final int TAG_GPS_PROCESSING_METHOD =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 27);
-    public static final int TAG_GPS_AREA_INFORMATION =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 28);
-    public static final int TAG_GPS_DATE_STAMP =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 29);
-    public static final int TAG_GPS_DIFFERENTIAL =
-        defineTag(IfdId.TYPE_IFD_GPS, (short) 30);
-    // IFD Interoperability tags
-    public static final int TAG_INTEROPERABILITY_INDEX =
-        defineTag(IfdId.TYPE_IFD_INTEROPERABILITY, (short) 1);
-
-    /**
-     * Tags that contain offset markers. These are included in the banned
-     * defines.
-     */
-    private static HashSet<Short> sOffsetTags = new HashSet<Short>();
-    static {
-        sOffsetTags.add(getTrueTagKey(TAG_GPS_IFD));
-        sOffsetTags.add(getTrueTagKey(TAG_EXIF_IFD));
-        sOffsetTags.add(getTrueTagKey(TAG_JPEG_INTERCHANGE_FORMAT));
-        sOffsetTags.add(getTrueTagKey(TAG_INTEROPERABILITY_IFD));
-        sOffsetTags.add(getTrueTagKey(TAG_STRIP_OFFSETS));
-    }
-
-    /**
-     * Tags with definitions that cannot be overridden (banned defines).
-     */
-    protected static HashSet<Short> sBannedDefines = new HashSet<Short>(sOffsetTags);
-    static {
-        sBannedDefines.add(getTrueTagKey(TAG_NULL));
-        sBannedDefines.add(getTrueTagKey(TAG_JPEG_INTERCHANGE_FORMAT_LENGTH));
-        sBannedDefines.add(getTrueTagKey(TAG_STRIP_BYTE_COUNTS));
-    }
-
-    /**
-     * Returns the constant representing a tag with a given TID and default IFD.
-     */
-    public static int defineTag(int ifdId, short tagId) {
-        return (tagId & 0x0000ffff) | (ifdId << 16);
-    }
-
-    /**
-     * Returns the TID for a tag constant.
-     */
-    public static short getTrueTagKey(int tag) {
-        // Truncate
-        return (short) tag;
-    }
-
-    /**
-     * Returns the default IFD for a tag constant.
-     */
-    public static int getTrueIfd(int tag) {
-        return tag >>> 16;
-    }
-
-    /**
-     * Constants for {@link TAG_ORIENTATION}. They can be interpreted as
-     * follows:
-     * <ul>
-     * <li>TOP_LEFT is the normal orientation.</li>
-     * <li>TOP_RIGHT is a left-right mirror.</li>
-     * <li>BOTTOM_LEFT is a 180 degree rotation.</li>
-     * <li>BOTTOM_RIGHT is a top-bottom mirror.</li>
-     * <li>LEFT_TOP is mirrored about the top-left<->bottom-right axis.</li>
-     * <li>RIGHT_TOP is a 90 degree clockwise rotation.</li>
-     * <li>LEFT_BOTTOM is mirrored about the top-right<->bottom-left axis.</li>
-     * <li>RIGHT_BOTTOM is a 270 degree clockwise rotation.</li>
-     * </ul>
-     */
-    public static interface Orientation {
-        public static final short TOP_LEFT = 1;
-        public static final short TOP_RIGHT = 2;
-        public static final short BOTTOM_LEFT = 3;
-        public static final short BOTTOM_RIGHT = 4;
-        public static final short LEFT_TOP = 5;
-        public static final short RIGHT_TOP = 6;
-        public static final short LEFT_BOTTOM = 7;
-        public static final short RIGHT_BOTTOM = 8;
-    }
-
-    /**
-     * Constants for {@link TAG_Y_CB_CR_POSITIONING}
-     */
-    public static interface YCbCrPositioning {
-        public static final short CENTERED = 1;
-        public static final short CO_SITED = 2;
-    }
-
-    /**
-     * Constants for {@link TAG_COMPRESSION}
-     */
-    public static interface Compression {
-        public static final short UNCOMPRESSION = 1;
-        public static final short JPEG = 6;
-    }
-
-    /**
-     * Constants for {@link TAG_RESOLUTION_UNIT}
-     */
-    public static interface ResolutionUnit {
-        public static final short INCHES = 2;
-        public static final short CENTIMETERS = 3;
-    }
-
-    /**
-     * Constants for {@link TAG_PHOTOMETRIC_INTERPRETATION}
-     */
-    public static interface PhotometricInterpretation {
-        public static final short RGB = 2;
-        public static final short YCBCR = 6;
-    }
-
-    /**
-     * Constants for {@link TAG_PLANAR_CONFIGURATION}
-     */
-    public static interface PlanarConfiguration {
-        public static final short CHUNKY = 1;
-        public static final short PLANAR = 2;
-    }
-
-    /**
-     * Constants for {@link TAG_EXPOSURE_PROGRAM}
-     */
-    public static interface ExposureProgram {
-        public static final short NOT_DEFINED = 0;
-        public static final short MANUAL = 1;
-        public static final short NORMAL_PROGRAM = 2;
-        public static final short APERTURE_PRIORITY = 3;
-        public static final short SHUTTER_PRIORITY = 4;
-        public static final short CREATIVE_PROGRAM = 5;
-        public static final short ACTION_PROGRAM = 6;
-        public static final short PROTRAIT_MODE = 7;
-        public static final short LANDSCAPE_MODE = 8;
-    }
-
-    /**
-     * Constants for {@link TAG_METERING_MODE}
-     */
-    public static interface MeteringMode {
-        public static final short UNKNOWN = 0;
-        public static final short AVERAGE = 1;
-        public static final short CENTER_WEIGHTED_AVERAGE = 2;
-        public static final short SPOT = 3;
-        public static final short MULTISPOT = 4;
-        public static final short PATTERN = 5;
-        public static final short PARTAIL = 6;
-        public static final short OTHER = 255;
-    }
-
-    /**
-     * Constants for {@link TAG_FLASH} As the definition in Jeita EXIF 2.2
-     * standard, we can treat this constant as bitwise flag.
-     * <p>
-     * e.g.
-     * <p>
-     * short flash = FIRED | RETURN_STROBE_RETURN_LIGHT_DETECTED |
-     * MODE_AUTO_MODE
-     */
-    public static interface Flash {
-        // LSB
-        public static final short DID_NOT_FIRED = 0;
-        public static final short FIRED = 1;
-        // 1st~2nd bits
-        public static final short RETURN_NO_STROBE_RETURN_DETECTION_FUNCTION = 0 << 1;
-        public static final short RETURN_STROBE_RETURN_LIGHT_NOT_DETECTED = 2 << 1;
-        public static final short RETURN_STROBE_RETURN_LIGHT_DETECTED = 3 << 1;
-        // 3rd~4th bits
-        public static final short MODE_UNKNOWN = 0 << 3;
-        public static final short MODE_COMPULSORY_FLASH_FIRING = 1 << 3;
-        public static final short MODE_COMPULSORY_FLASH_SUPPRESSION = 2 << 3;
-        public static final short MODE_AUTO_MODE = 3 << 3;
-        // 5th bit
-        public static final short FUNCTION_PRESENT = 0 << 5;
-        public static final short FUNCTION_NO_FUNCTION = 1 << 5;
-        // 6th bit
-        public static final short RED_EYE_REDUCTION_NO_OR_UNKNOWN = 0 << 6;
-        public static final short RED_EYE_REDUCTION_SUPPORT = 1 << 6;
-    }
-
-    /**
-     * Constants for {@link TAG_COLOR_SPACE}
-     */
-    public static interface ColorSpace {
-        public static final short SRGB = 1;
-        public static final short UNCALIBRATED = (short) 0xFFFF;
-    }
-
-    /**
-     * Constants for {@link TAG_EXPOSURE_MODE}
-     */
-    public static interface ExposureMode {
-        public static final short AUTO_EXPOSURE = 0;
-        public static final short MANUAL_EXPOSURE = 1;
-        public static final short AUTO_BRACKET = 2;
-    }
-
-    /**
-     * Constants for {@link TAG_WHITE_BALANCE}
-     */
-    public static interface WhiteBalance {
-        public static final short AUTO = 0;
-        public static final short MANUAL = 1;
-    }
-
-    /**
-     * Constants for {@link TAG_SCENE_CAPTURE_TYPE}
-     */
-    public static interface SceneCapture {
-        public static final short STANDARD = 0;
-        public static final short LANDSCAPE = 1;
-        public static final short PROTRAIT = 2;
-        public static final short NIGHT_SCENE = 3;
-    }
-
-    /**
-     * Constants for {@link TAG_COMPONENTS_CONFIGURATION}
-     */
-    public static interface ComponentsConfiguration {
-        public static final short NOT_EXIST = 0;
-        public static final short Y = 1;
-        public static final short CB = 2;
-        public static final short CR = 3;
-        public static final short R = 4;
-        public static final short G = 5;
-        public static final short B = 6;
-    }
-
-    /**
-     * Constants for {@link TAG_LIGHT_SOURCE}
-     */
-    public static interface LightSource {
-        public static final short UNKNOWN = 0;
-        public static final short DAYLIGHT = 1;
-        public static final short FLUORESCENT = 2;
-        public static final short TUNGSTEN = 3;
-        public static final short FLASH = 4;
-        public static final short FINE_WEATHER = 9;
-        public static final short CLOUDY_WEATHER = 10;
-        public static final short SHADE = 11;
-        public static final short DAYLIGHT_FLUORESCENT = 12;
-        public static final short DAY_WHITE_FLUORESCENT = 13;
-        public static final short COOL_WHITE_FLUORESCENT = 14;
-        public static final short WHITE_FLUORESCENT = 15;
-        public static final short STANDARD_LIGHT_A = 17;
-        public static final short STANDARD_LIGHT_B = 18;
-        public static final short STANDARD_LIGHT_C = 19;
-        public static final short D55 = 20;
-        public static final short D65 = 21;
-        public static final short D75 = 22;
-        public static final short D50 = 23;
-        public static final short ISO_STUDIO_TUNGSTEN = 24;
-        public static final short OTHER = 255;
-    }
-
-    /**
-     * Constants for {@link TAG_SENSING_METHOD}
-     */
-    public static interface SensingMethod {
-        public static final short NOT_DEFINED = 1;
-        public static final short ONE_CHIP_COLOR = 2;
-        public static final short TWO_CHIP_COLOR = 3;
-        public static final short THREE_CHIP_COLOR = 4;
-        public static final short COLOR_SEQUENTIAL_AREA = 5;
-        public static final short TRILINEAR = 7;
-        public static final short COLOR_SEQUENTIAL_LINEAR = 8;
-    }
-
-    /**
-     * Constants for {@link TAG_FILE_SOURCE}
-     */
-    public static interface FileSource {
-        public static final short DSC = 3;
-    }
-
-    /**
-     * Constants for {@link TAG_SCENE_TYPE}
-     */
-    public static interface SceneType {
-        public static final short DIRECT_PHOTOGRAPHED = 1;
-    }
-
-    /**
-     * Constants for {@link TAG_GAIN_CONTROL}
-     */
-    public static interface GainControl {
-        public static final short NONE = 0;
-        public static final short LOW_UP = 1;
-        public static final short HIGH_UP = 2;
-        public static final short LOW_DOWN = 3;
-        public static final short HIGH_DOWN = 4;
-    }
-
-    /**
-     * Constants for {@link TAG_CONTRAST}
-     */
-    public static interface Contrast {
-        public static final short NORMAL = 0;
-        public static final short SOFT = 1;
-        public static final short HARD = 2;
-    }
-
-    /**
-     * Constants for {@link TAG_SATURATION}
-     */
-    public static interface Saturation {
-        public static final short NORMAL = 0;
-        public static final short LOW = 1;
-        public static final short HIGH = 2;
-    }
-
-    /**
-     * Constants for {@link TAG_SHARPNESS}
-     */
-    public static interface Sharpness {
-        public static final short NORMAL = 0;
-        public static final short SOFT = 1;
-        public static final short HARD = 2;
-    }
-
-    /**
-     * Constants for {@link TAG_SUBJECT_DISTANCE}
-     */
-    public static interface SubjectDistance {
-        public static final short UNKNOWN = 0;
-        public static final short MACRO = 1;
-        public static final short CLOSE_VIEW = 2;
-        public static final short DISTANT_VIEW = 3;
-    }
-
-    /**
-     * Constants for {@link TAG_GPS_LATITUDE_REF},
-     * {@link TAG_GPS_DEST_LATITUDE_REF}
-     */
-    public static interface GpsLatitudeRef {
-        public static final String NORTH = "N";
-        public static final String SOUTH = "S";
-    }
-
-    /**
-     * Constants for {@link TAG_GPS_LONGITUDE_REF},
-     * {@link TAG_GPS_DEST_LONGITUDE_REF}
-     */
-    public static interface GpsLongitudeRef {
-        public static final String EAST = "E";
-        public static final String WEST = "W";
-    }
-
-    /**
-     * Constants for {@link TAG_GPS_ALTITUDE_REF}
-     */
-    public static interface GpsAltitudeRef {
-        public static final short SEA_LEVEL = 0;
-        public static final short SEA_LEVEL_NEGATIVE = 1;
-    }
-
-    /**
-     * Constants for {@link TAG_GPS_STATUS}
-     */
-    public static interface GpsStatus {
-        public static final String IN_PROGRESS = "A";
-        public static final String INTEROPERABILITY = "V";
-    }
-
-    /**
-     * Constants for {@link TAG_GPS_MEASURE_MODE}
-     */
-    public static interface GpsMeasureMode {
-        public static final String MODE_2_DIMENSIONAL = "2";
-        public static final String MODE_3_DIMENSIONAL = "3";
-    }
-
-    /**
-     * Constants for {@link TAG_GPS_SPEED_REF},
-     * {@link TAG_GPS_DEST_DISTANCE_REF}
-     */
-    public static interface GpsSpeedRef {
-        public static final String KILOMETERS = "K";
-        public static final String MILES = "M";
-        public static final String KNOTS = "N";
-    }
-
-    /**
-     * Constants for {@link TAG_GPS_TRACK_REF},
-     * {@link TAG_GPS_IMG_DIRECTION_REF}, {@link TAG_GPS_DEST_BEARING_REF}
-     */
-    public static interface GpsTrackRef {
-        public static final String TRUE_DIRECTION = "T";
-        public static final String MAGNETIC_DIRECTION = "M";
-    }
-
-    /**
-     * Constants for {@link TAG_GPS_DIFFERENTIAL}
-     */
-    public static interface GpsDifferential {
-        public static final short WITHOUT_DIFFERENTIAL_CORRECTION = 0;
-        public static final short DIFFERENTIAL_CORRECTION_APPLIED = 1;
-    }
-
-    private static final String NULL_ARGUMENT_STRING = "Argument is null";
-    private ExifData mData = new ExifData(DEFAULT_BYTE_ORDER);
-    public static final ByteOrder DEFAULT_BYTE_ORDER = ByteOrder.BIG_ENDIAN;
-
-    public ExifInterface() {
-        mGPSDateStampFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
-    }
-
-    /**
-     * Reads the exif tags from a byte array, clearing this ExifInterface
-     * object's existing exif tags.
-     *
-     * @param jpeg a byte array containing a jpeg compressed image.
-     * @throws java.io.IOException
-     */
-    public void readExif(byte[] jpeg) throws IOException {
-        readExif(new ByteArrayInputStream(jpeg));
-    }
-
-    /**
-     * Reads the exif tags from an InputStream, clearing this ExifInterface
-     * object's existing exif tags.
-     *
-     * @param inStream an InputStream containing a jpeg compressed image.
-     * @throws java.io.IOException
-     */
-    public void readExif(InputStream inStream) throws IOException {
-        if (inStream == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        ExifData d = null;
-        try {
-            d = new ExifReader(this).read(inStream);
-        } catch (ExifInvalidFormatException e) {
-            throw new IOException("Invalid exif format : " + e);
-        }
-        mData = d;
-    }
-
-    /**
-     * Reads the exif tags from a file, clearing this ExifInterface object's
-     * existing exif tags.
-     *
-     * @param inFileName a string representing the filepath to jpeg file.
-     * @throws java.io.FileNotFoundException
-     * @throws java.io.IOException
-     */
-    public void readExif(String inFileName) throws FileNotFoundException, IOException {
-        if (inFileName == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        InputStream is = null;
-        try {
-            is = new BufferedInputStream(new FileInputStream(inFileName));
-            readExif(is);
-        } catch (IOException e) {
-            closeSilently(is);
-            throw e;
-        }
-        is.close();
-    }
-
-    /**
-     * Sets the exif tags, clearing this ExifInterface object's existing exif
-     * tags.
-     *
-     * @param tags a collection of exif tags to set.
-     */
-    public void setExif(Collection<ExifTag> tags) {
-        clearExif();
-        setTags(tags);
-    }
-
-    /**
-     * Clears this ExifInterface object's existing exif tags.
-     */
-    public void clearExif() {
-        mData = new ExifData(DEFAULT_BYTE_ORDER);
-    }
-
-    /**
-     * Writes the tags from this ExifInterface object into a jpeg image,
-     * removing prior exif tags.
-     *
-     * @param jpeg a byte array containing a jpeg compressed image.
-     * @param exifOutStream an OutputStream to which the jpeg image with added
-     *            exif tags will be written.
-     * @throws java.io.IOException
-     */
-    public void writeExif(byte[] jpeg, OutputStream exifOutStream) throws IOException {
-        if (jpeg == null || exifOutStream == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        OutputStream s = getExifWriterStream(exifOutStream);
-        s.write(jpeg, 0, jpeg.length);
-        s.flush();
-    }
-
-    /**
-     * Writes the tags from this ExifInterface object into a jpeg compressed
-     * bitmap, removing prior exif tags.
-     *
-     * @param bmap a bitmap to compress and write exif into.
-     * @param exifOutStream the OutputStream to which the jpeg image with added
-     *            exif tags will be written.
-     * @throws java.io.IOException
-     */
-    public void writeExif(Bitmap bmap, OutputStream exifOutStream) throws IOException {
-        if (bmap == null || exifOutStream == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        OutputStream s = getExifWriterStream(exifOutStream);
-        bmap.compress(Bitmap.CompressFormat.JPEG, 90, s);
-        s.flush();
-    }
-
-    /**
-     * Writes the tags from this ExifInterface object into a jpeg stream,
-     * removing prior exif tags.
-     *
-     * @param jpegStream an InputStream containing a jpeg compressed image.
-     * @param exifOutStream an OutputStream to which the jpeg image with added
-     *            exif tags will be written.
-     * @throws java.io.IOException
-     */
-    public void writeExif(InputStream jpegStream, OutputStream exifOutStream) throws IOException {
-        if (jpegStream == null || exifOutStream == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        OutputStream s = getExifWriterStream(exifOutStream);
-        doExifStreamIO(jpegStream, s);
-        s.flush();
-    }
-
-    /**
-     * Writes the tags from this ExifInterface object into a jpeg image,
-     * removing prior exif tags.
-     *
-     * @param jpeg a byte array containing a jpeg compressed image.
-     * @param exifOutFileName a String containing the filepath to which the jpeg
-     *            image with added exif tags will be written.
-     * @throws java.io.FileNotFoundException
-     * @throws java.io.IOException
-     */
-    public void writeExif(byte[] jpeg, String exifOutFileName) throws FileNotFoundException,
-            IOException {
-        if (jpeg == null || exifOutFileName == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        OutputStream s = null;
-        try {
-            s = getExifWriterStream(exifOutFileName);
-            s.write(jpeg, 0, jpeg.length);
-            s.flush();
-        } catch (IOException e) {
-            closeSilently(s);
-            throw e;
-        }
-        s.close();
-    }
-
-    /**
-     * Writes the tags from this ExifInterface object into a jpeg compressed
-     * bitmap, removing prior exif tags.
-     *
-     * @param bmap a bitmap to compress and write exif into.
-     * @param exifOutFileName a String containing the filepath to which the jpeg
-     *            image with added exif tags will be written.
-     * @throws java.io.FileNotFoundException
-     * @throws java.io.IOException
-     */
-    public void writeExif(Bitmap bmap, String exifOutFileName) throws FileNotFoundException,
-            IOException {
-        if (bmap == null || exifOutFileName == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        OutputStream s = null;
-        try {
-            s = getExifWriterStream(exifOutFileName);
-            bmap.compress(Bitmap.CompressFormat.JPEG, 90, s);
-            s.flush();
-        } catch (IOException e) {
-            closeSilently(s);
-            throw e;
-        }
-        s.close();
-    }
-
-    /**
-     * Writes the tags from this ExifInterface object into a jpeg stream,
-     * removing prior exif tags.
-     *
-     * @param jpegStream an InputStream containing a jpeg compressed image.
-     * @param exifOutFileName a String containing the filepath to which the jpeg
-     *            image with added exif tags will be written.
-     * @throws java.io.FileNotFoundException
-     * @throws java.io.IOException
-     */
-    public void writeExif(InputStream jpegStream, String exifOutFileName)
-            throws FileNotFoundException, IOException {
-        if (jpegStream == null || exifOutFileName == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        OutputStream s = null;
-        try {
-            s = getExifWriterStream(exifOutFileName);
-            doExifStreamIO(jpegStream, s);
-            s.flush();
-        } catch (IOException e) {
-            closeSilently(s);
-            throw e;
-        }
-        s.close();
-    }
-
-    /**
-     * Writes the tags from this ExifInterface object into a jpeg file, removing
-     * prior exif tags.
-     *
-     * @param jpegFileName a String containing the filepath for a jpeg file.
-     * @param exifOutFileName a String containing the filepath to which the jpeg
-     *            image with added exif tags will be written.
-     * @throws java.io.FileNotFoundException
-     * @throws java.io.IOException
-     */
-    public void writeExif(String jpegFileName, String exifOutFileName)
-            throws FileNotFoundException, IOException {
-        if (jpegFileName == null || exifOutFileName == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        InputStream is = null;
-        try {
-            is = new FileInputStream(jpegFileName);
-            writeExif(is, exifOutFileName);
-        } catch (IOException e) {
-            closeSilently(is);
-            throw e;
-        }
-        is.close();
-    }
-
-    /**
-     * Wraps an OutputStream object with an ExifOutputStream. Exif tags in this
-     * ExifInterface object will be added to a jpeg image written to this
-     * stream, removing prior exif tags. Other methods of this ExifInterface
-     * object should not be called until the returned OutputStream has been
-     * closed.
-     *
-     * @param outStream an OutputStream to wrap.
-     * @return an OutputStream that wraps the outStream parameter, and adds exif
-     *         metadata. A jpeg image should be written to this stream.
-     */
-    public OutputStream getExifWriterStream(OutputStream outStream) {
-        if (outStream == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        ExifOutputStream eos = new ExifOutputStream(outStream, this);
-        eos.setExifData(mData);
-        return eos;
-    }
-
-    /**
-     * Returns an OutputStream object that writes to a file. Exif tags in this
-     * ExifInterface object will be added to a jpeg image written to this
-     * stream, removing prior exif tags. Other methods of this ExifInterface
-     * object should not be called until the returned OutputStream has been
-     * closed.
-     *
-     * @param exifOutFileName an String containing a filepath for a jpeg file.
-     * @return an OutputStream that writes to the exifOutFileName file, and adds
-     *         exif metadata. A jpeg image should be written to this stream.
-     * @throws java.io.FileNotFoundException
-     */
-    public OutputStream getExifWriterStream(String exifOutFileName) throws FileNotFoundException {
-        if (exifOutFileName == null) {
-            throw new IllegalArgumentException(NULL_ARGUMENT_STRING);
-        }
-        OutputStream out = null;
-        try {
-            out = new FileOutputStream(exifOutFileName);
-        } catch (FileNotFoundException e) {
-            closeSilently(out);
-            throw e;
-        }
-        return getExifWriterStream(out);
-    }
-
-    /**
-     * Attempts to do an in-place rewrite the exif metadata in a file for the
-     * given tags. If tags do not exist or do not have the same size as the
-     * existing exif tags, this method will fail.
-     *
-     * @param filename a String containing a filepath for a jpeg file with exif
-     *            tags to rewrite.
-     * @param tags tags that will be written into the jpeg file over existing
-     *            tags if possible.
-     * @return true if success, false if could not overwrite. If false, no
-     *         changes are made to the file.
-     * @throws java.io.FileNotFoundException
-     * @throws java.io.IOException
-     */
-    public boolean rewriteExif(String filename, Collection<ExifTag> tags)
-            throws FileNotFoundException, IOException {
-        RandomAccessFile file = null;
-        InputStream is = null;
-        boolean ret;
-        try {
-            File temp = new File(filename);
-            is = new BufferedInputStream(new FileInputStream(temp));
-
-            // Parse beginning of APP1 in exif to find size of exif header.
-            ExifParser parser = null;
-            try {
-                parser = ExifParser.parse(is, this);
-            } catch (ExifInvalidFormatException e) {
-                throw new IOException("Invalid exif format : ", e);
-            }
-            long exifSize = parser.getOffsetToExifEndFromSOF();
-
-            // Free up resources
-            is.close();
-            is = null;
-
-            // Open file for memory mapping.
-            file = new RandomAccessFile(temp, "rw");
-            long fileLength = file.length();
-            if (fileLength < exifSize) {
-                throw new IOException("Filesize changed during operation");
-            }
-
-            // Map only exif header into memory.
-            ByteBuffer buf = file.getChannel().map(MapMode.READ_WRITE, 0, exifSize);
-
-            // Attempt to overwrite tag values without changing lengths (avoids
-            // file copy).
-            ret = rewriteExif(buf, tags);
-        } catch (IOException e) {
-            closeSilently(file);
-            throw e;
-        } finally {
-            closeSilently(is);
-        }
-        file.close();
-        return ret;
-    }
-
-    /**
-     * Attempts to do an in-place rewrite the exif metadata in a ByteBuffer for
-     * the given tags. If tags do not exist or do not have the same size as the
-     * existing exif tags, this method will fail.
-     *
-     * @param buf a ByteBuffer containing a jpeg file with existing exif tags to
-     *            rewrite.
-     * @param tags tags that will be written into the jpeg ByteBuffer over
-     *            existing tags if possible.
-     * @return true if success, false if could not overwrite. If false, no
-     *         changes are made to the ByteBuffer.
-     * @throws java.io.IOException
-     */
-    public boolean rewriteExif(ByteBuffer buf, Collection<ExifTag> tags) throws IOException {
-        ExifModifier mod = null;
-        try {
-            mod = new ExifModifier(buf, this);
-            for (ExifTag t : tags) {
-                mod.modifyTag(t);
-            }
-            return mod.commit();
-        } catch (ExifInvalidFormatException e) {
-            throw new IOException("Invalid exif format : " + e);
-        }
-    }
-
-    /**
-     * Attempts to do an in-place rewrite of the exif metadata. If this fails,
-     * fall back to overwriting file. This preserves tags that are not being
-     * rewritten.
-     *
-     * @param filename a String containing a filepath for a jpeg file.
-     * @param tags tags that will be written into the jpeg file over existing
-     *            tags if possible.
-     * @throws java.io.FileNotFoundException
-     * @throws java.io.IOException
-     * @see #rewriteExif
-     */
-    public void forceRewriteExif(String filename, Collection<ExifTag> tags)
-            throws FileNotFoundException,
-            IOException {
-        // Attempt in-place write
-        if (!rewriteExif(filename, tags)) {
-            // Fall back to doing a copy
-            ExifData tempData = mData;
-            mData = new ExifData(DEFAULT_BYTE_ORDER);
-            FileInputStream is = null;
-            ByteArrayOutputStream bytes = null;
-            try {
-                is = new FileInputStream(filename);
-                bytes = new ByteArrayOutputStream();
-                doExifStreamIO(is, bytes);
-                byte[] imageBytes = bytes.toByteArray();
-                readExif(imageBytes);
-                setTags(tags);
-                writeExif(imageBytes, filename);
-            } catch (IOException e) {
-                closeSilently(is);
-                throw e;
-            } finally {
-                is.close();
-                // Prevent clobbering of mData
-                mData = tempData;
-            }
-        }
-    }
-
-    /**
-     * Attempts to do an in-place rewrite of the exif metadata using the tags in
-     * this ExifInterface object. If this fails, fall back to overwriting file.
-     * This preserves tags that are not being rewritten.
-     *
-     * @param filename a String containing a filepath for a jpeg file.
-     * @throws java.io.FileNotFoundException
-     * @throws java.io.IOException
-     * @see #rewriteExif
-     */
-    public void forceRewriteExif(String filename) throws FileNotFoundException, IOException {
-        forceRewriteExif(filename, getAllTags());
-    }
-
-    /**
-     * Get the exif tags in this ExifInterface object or null if none exist.
-     *
-     * @return a List of {@link ExifTag}s.
-     */
-    public List<ExifTag> getAllTags() {
-        return mData.getAllTags();
-    }
-
-    /**
-     * Returns a list of ExifTags that share a TID (which can be obtained by
-     * calling {@link #getTrueTagKey} on a defined tag constant) or null if none
-     * exist.
-     *
-     * @param tagId a TID as defined in the exif standard (or with
-     *            {@link #defineTag}).
-     * @return a List of {@link ExifTag}s.
-     */
-    public List<ExifTag> getTagsForTagId(short tagId) {
-        return mData.getAllTagsForTagId(tagId);
-    }
-
-    /**
-     * Returns a list of ExifTags that share an IFD (which can be obtained by
-     * calling {@link #getTrueIFD} on a defined tag constant) or null if none
-     * exist.
-     *
-     * @param ifdId an IFD as defined in the exif standard (or with
-     *            {@link #defineTag}).
-     * @return a List of {@link ExifTag}s.
-     */
-    public List<ExifTag> getTagsForIfdId(int ifdId) {
-        return mData.getAllTagsForIfd(ifdId);
-    }
-
-    /**
-     * Gets an ExifTag for an IFD other than the tag's default.
-     *
-     * @see #getTag
-     */
-    public ExifTag getTag(int tagId, int ifdId) {
-        if (!ExifTag.isValidIfd(ifdId)) {
-            return null;
-        }
-        return mData.getTag(getTrueTagKey(tagId), ifdId);
-    }
-
-    /**
-     * Returns the ExifTag in that tag's default IFD for a defined tag constant
-     * or null if none exists.
-     *
-     * @param tagId a defined tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @return an {@link ExifTag} or null if none exists.
-     */
-    public ExifTag getTag(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTag(tagId, ifdId);
-    }
-
-    /**
-     * Gets a tag value for an IFD other than the tag's default.
-     *
-     * @see #getTagValue
-     */
-    public Object getTagValue(int tagId, int ifdId) {
-        ExifTag t = getTag(tagId, ifdId);
-        return (t == null) ? null : t.getValue();
-    }
-
-    /**
-     * Returns the value of the ExifTag in that tag's default IFD for a defined
-     * tag constant or null if none exists or the value could not be cast into
-     * the return type.
-     *
-     * @param tagId a defined tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @return the value of the ExifTag or null if none exists.
-     */
-    public Object getTagValue(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTagValue(tagId, ifdId);
-    }
-
-    /*
-     * Getter methods that are similar to getTagValue. Null is returned if the
-     * tag value cannot be cast into the return type.
-     */
-
-    /**
-     * @see #getTagValue
-     */
-    public String getTagStringValue(int tagId, int ifdId) {
-        ExifTag t = getTag(tagId, ifdId);
-        if (t == null) {
-            return null;
-        }
-        return t.getValueAsString();
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public String getTagStringValue(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTagStringValue(tagId, ifdId);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public Long getTagLongValue(int tagId, int ifdId) {
-        long[] l = getTagLongValues(tagId, ifdId);
-        if (l == null || l.length <= 0) {
-            return null;
-        }
-        return new Long(l[0]);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public Long getTagLongValue(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTagLongValue(tagId, ifdId);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public Integer getTagIntValue(int tagId, int ifdId) {
-        int[] l = getTagIntValues(tagId, ifdId);
-        if (l == null || l.length <= 0) {
-            return null;
-        }
-        return new Integer(l[0]);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public Integer getTagIntValue(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTagIntValue(tagId, ifdId);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public Byte getTagByteValue(int tagId, int ifdId) {
-        byte[] l = getTagByteValues(tagId, ifdId);
-        if (l == null || l.length <= 0) {
-            return null;
-        }
-        return new Byte(l[0]);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public Byte getTagByteValue(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTagByteValue(tagId, ifdId);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public Rational getTagRationalValue(int tagId, int ifdId) {
-        Rational[] l = getTagRationalValues(tagId, ifdId);
-        if (l == null || l.length == 0) {
-            return null;
-        }
-        return new Rational(l[0]);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public Rational getTagRationalValue(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTagRationalValue(tagId, ifdId);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public long[] getTagLongValues(int tagId, int ifdId) {
-        ExifTag t = getTag(tagId, ifdId);
-        if (t == null) {
-            return null;
-        }
-        return t.getValueAsLongs();
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public long[] getTagLongValues(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTagLongValues(tagId, ifdId);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public int[] getTagIntValues(int tagId, int ifdId) {
-        ExifTag t = getTag(tagId, ifdId);
-        if (t == null) {
-            return null;
-        }
-        return t.getValueAsInts();
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public int[] getTagIntValues(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTagIntValues(tagId, ifdId);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public byte[] getTagByteValues(int tagId, int ifdId) {
-        ExifTag t = getTag(tagId, ifdId);
-        if (t == null) {
-            return null;
-        }
-        return t.getValueAsBytes();
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public byte[] getTagByteValues(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTagByteValues(tagId, ifdId);
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public Rational[] getTagRationalValues(int tagId, int ifdId) {
-        ExifTag t = getTag(tagId, ifdId);
-        if (t == null) {
-            return null;
-        }
-        return t.getValueAsRationals();
-    }
-
-    /**
-     * @see #getTagValue
-     */
-    public Rational[] getTagRationalValues(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return getTagRationalValues(tagId, ifdId);
-    }
-
-    /**
-     * Checks whether a tag has a defined number of elements.
-     *
-     * @param tagId a defined tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @return true if the tag has a defined number of elements.
-     */
-    public boolean isTagCountDefined(int tagId) {
-        int info = getTagInfo().get(tagId);
-        // No value in info can be zero, as all tags have a non-zero type
-        if (info == 0) {
-            return false;
-        }
-        return getComponentCountFromInfo(info) != ExifTag.SIZE_UNDEFINED;
-    }
-
-    /**
-     * Gets the defined number of elements for a tag.
-     *
-     * @param tagId a defined tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @return the number of elements or {@link ExifTag#SIZE_UNDEFINED} if the
-     *         tag or the number of elements is not defined.
-     */
-    public int getDefinedTagCount(int tagId) {
-        int info = getTagInfo().get(tagId);
-        if (info == 0) {
-            return ExifTag.SIZE_UNDEFINED;
-        }
-        return getComponentCountFromInfo(info);
-    }
-
-    /**
-     * Gets the number of elements for an ExifTag in a given IFD.
-     *
-     * @param tagId a defined tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @param ifdId the IFD containing the ExifTag to check.
-     * @return the number of elements in the ExifTag, if the tag's size is
-     *         undefined this will return the actual number of elements that is
-     *         in the ExifTag's value.
-     */
-    public int getActualTagCount(int tagId, int ifdId) {
-        ExifTag t = getTag(tagId, ifdId);
-        if (t == null) {
-            return 0;
-        }
-        return t.getComponentCount();
-    }
-
-    /**
-     * Gets the default IFD for a tag.
-     *
-     * @param tagId a defined tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @return the default IFD for a tag definition or {@link #IFD_NULL} if no
-     *         definition exists.
-     */
-    public int getDefinedTagDefaultIfd(int tagId) {
-        int info = getTagInfo().get(tagId);
-        if (info == DEFINITION_NULL) {
-            return IFD_NULL;
-        }
-        return getTrueIfd(tagId);
-    }
-
-    /**
-     * Gets the defined type for a tag.
-     *
-     * @param tagId a defined tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @return the type.
-     * @see ExifTag#getDataType()
-     */
-    public short getDefinedTagType(int tagId) {
-        int info = getTagInfo().get(tagId);
-        if (info == 0) {
-            return -1;
-        }
-        return getTypeFromInfo(info);
-    }
-
-    /**
-     * Returns true if tag TID is one of the following: {@link TAG_EXIF_IFD},
-     * {@link TAG_GPS_IFD}, {@link TAG_JPEG_INTERCHANGE_FORMAT},
-     * {@link TAG_STRIP_OFFSETS}, {@link TAG_INTEROPERABILITY_IFD}
-     * <p>
-     * Note: defining tags with these TID's is disallowed.
-     *
-     * @param tag a tag's TID (can be obtained from a defined tag constant with
-     *            {@link #getTrueTagKey}).
-     * @return true if the TID is that of an offset tag.
-     */
-    protected static boolean isOffsetTag(short tag) {
-        return sOffsetTags.contains(tag);
-    }
-
-    /**
-     * Creates a tag for a defined tag constant in a given IFD if that IFD is
-     * allowed for the tag.  This method will fail anytime the appropriate
-     * {@link ExifTag#setValue} for this tag's datatype would fail.
-     *
-     * @param tagId a tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @param ifdId the IFD that the tag should be in.
-     * @param val the value of the tag to set.
-     * @return an ExifTag object or null if one could not be constructed.
-     * @see #buildTag
-     */
-    public ExifTag buildTag(int tagId, int ifdId, Object val) {
-        int info = getTagInfo().get(tagId);
-        if (info == 0 || val == null) {
-            return null;
-        }
-        short type = getTypeFromInfo(info);
-        int definedCount = getComponentCountFromInfo(info);
-        boolean hasDefinedCount = (definedCount != ExifTag.SIZE_UNDEFINED);
-        if (!ExifInterface.isIfdAllowed(info, ifdId)) {
-            return null;
-        }
-        ExifTag t = new ExifTag(getTrueTagKey(tagId), type, definedCount, ifdId, hasDefinedCount);
-        if (!t.setValue(val)) {
-            return null;
-        }
-        return t;
-    }
-
-    /**
-     * Creates a tag for a defined tag constant in the tag's default IFD.
-     *
-     * @param tagId a tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @param val the tag's value.
-     * @return an ExifTag object.
-     */
-    public ExifTag buildTag(int tagId, Object val) {
-        int ifdId = getTrueIfd(tagId);
-        return buildTag(tagId, ifdId, val);
-    }
-
-    protected ExifTag buildUninitializedTag(int tagId) {
-        int info = getTagInfo().get(tagId);
-        if (info == 0) {
-            return null;
-        }
-        short type = getTypeFromInfo(info);
-        int definedCount = getComponentCountFromInfo(info);
-        boolean hasDefinedCount = (definedCount != ExifTag.SIZE_UNDEFINED);
-        int ifdId = getTrueIfd(tagId);
-        ExifTag t = new ExifTag(getTrueTagKey(tagId), type, definedCount, ifdId, hasDefinedCount);
-        return t;
-    }
-
-    /**
-     * Sets the value of an ExifTag if it exists in the given IFD. The value
-     * must be the correct type and length for that ExifTag.
-     *
-     * @param tagId a tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @param ifdId the IFD that the ExifTag is in.
-     * @param val the value to set.
-     * @return true if success, false if the ExifTag doesn't exist or the value
-     *         is the wrong type/length.
-     * @see #setTagValue
-     */
-    public boolean setTagValue(int tagId, int ifdId, Object val) {
-        ExifTag t = getTag(tagId, ifdId);
-        if (t == null) {
-            return false;
-        }
-        return t.setValue(val);
-    }
-
-    /**
-     * Sets the value of an ExifTag if it exists it's default IFD. The value
-     * must be the correct type and length for that ExifTag.
-     *
-     * @param tagId a tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @param val the value to set.
-     * @return true if success, false if the ExifTag doesn't exist or the value
-     *         is the wrong type/length.
-     */
-    public boolean setTagValue(int tagId, Object val) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        return setTagValue(tagId, ifdId, val);
-    }
-
-    /**
-     * Puts an ExifTag into this ExifInterface object's tags, removing a
-     * previous ExifTag with the same TID and IFD. The IFD it is put into will
-     * be the one the tag was created with in {@link #buildTag}.
-     *
-     * @param tag an ExifTag to put into this ExifInterface's tags.
-     * @return the previous ExifTag with the same TID and IFD or null if none
-     *         exists.
-     */
-    public ExifTag setTag(ExifTag tag) {
-        return mData.addTag(tag);
-    }
-
-    /**
-     * Puts a collection of ExifTags into this ExifInterface objects's tags. Any
-     * previous ExifTags with the same TID and IFDs will be removed.
-     *
-     * @param tags a Collection of ExifTags.
-     * @see #setTag
-     */
-    public void setTags(Collection<ExifTag> tags) {
-        for (ExifTag t : tags) {
-            setTag(t);
-        }
-    }
-
-    /**
-     * Removes the ExifTag for a tag constant from the given IFD.
-     *
-     * @param tagId a tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     * @param ifdId the IFD of the ExifTag to remove.
-     */
-    public void deleteTag(int tagId, int ifdId) {
-        mData.removeTag(getTrueTagKey(tagId), ifdId);
-    }
-
-    /**
-     * Removes the ExifTag for a tag constant from that tag's default IFD.
-     *
-     * @param tagId a tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     */
-    public void deleteTag(int tagId) {
-        int ifdId = getDefinedTagDefaultIfd(tagId);
-        deleteTag(tagId, ifdId);
-    }
-
-    /**
-     * Creates a new tag definition in this ExifInterface object for a given TID
-     * and default IFD. Creating a definition with the same TID and default IFD
-     * as a previous definition will override it.
-     *
-     * @param tagId the TID for the tag.
-     * @param defaultIfd the default IFD for the tag.
-     * @param tagType the type of the tag (see {@link ExifTag#getDataType()}).
-     * @param defaultComponentCount the number of elements of this tag's type in
-     *            the tags value.
-     * @param allowedIfds the IFD's this tag is allowed to be put in.
-     * @return the defined tag constant (e.g. {@link #TAG_IMAGE_WIDTH}) or
-     *         {@link #TAG_NULL} if the definition could not be made.
-     */
-    public int setTagDefinition(short tagId, int defaultIfd, short tagType,
-            short defaultComponentCount, int[] allowedIfds) {
-        if (sBannedDefines.contains(tagId)) {
-            return TAG_NULL;
-        }
-        if (ExifTag.isValidType(tagType) && ExifTag.isValidIfd(defaultIfd)) {
-            int tagDef = defineTag(defaultIfd, tagId);
-            if (tagDef == TAG_NULL) {
-                return TAG_NULL;
-            }
-            int[] otherDefs = getTagDefinitionsForTagId(tagId);
-            SparseIntArray infos = getTagInfo();
-            // Make sure defaultIfd is in allowedIfds
-            boolean defaultCheck = false;
-            for (int i : allowedIfds) {
-                if (defaultIfd == i) {
-                    defaultCheck = true;
-                }
-                if (!ExifTag.isValidIfd(i)) {
-                    return TAG_NULL;
-                }
-            }
-            if (!defaultCheck) {
-                return TAG_NULL;
-            }
-
-            int ifdFlags = getFlagsFromAllowedIfds(allowedIfds);
-            // Make sure no identical tags can exist in allowedIfds
-            if (otherDefs != null) {
-                for (int def : otherDefs) {
-                    int tagInfo = infos.get(def);
-                    int allowedFlags = getAllowedIfdFlagsFromInfo(tagInfo);
-                    if ((ifdFlags & allowedFlags) != 0) {
-                        return TAG_NULL;
-                    }
-                }
-            }
-            getTagInfo().put(tagDef, ifdFlags << 24 | (tagType << 16) | defaultComponentCount);
-            return tagDef;
-        }
-        return TAG_NULL;
-    }
-
-    protected int getTagDefinition(short tagId, int defaultIfd) {
-        return getTagInfo().get(defineTag(defaultIfd, tagId));
-    }
-
-    protected int[] getTagDefinitionsForTagId(short tagId) {
-        int[] ifds = IfdData.getIfds();
-        int[] defs = new int[ifds.length];
-        int counter = 0;
-        SparseIntArray infos = getTagInfo();
-        for (int i : ifds) {
-            int def = defineTag(i, tagId);
-            if (infos.get(def) != DEFINITION_NULL) {
-                defs[counter++] = def;
-            }
-        }
-        if (counter == 0) {
-            return null;
-        }
-
-        return Arrays.copyOfRange(defs, 0, counter);
-    }
-
-    protected int getTagDefinitionForTag(ExifTag tag) {
-        short type = tag.getDataType();
-        int count = tag.getComponentCount();
-        int ifd = tag.getIfd();
-        return getTagDefinitionForTag(tag.getTagId(), type, count, ifd);
-    }
-
-    protected int getTagDefinitionForTag(short tagId, short type, int count, int ifd) {
-        int[] defs = getTagDefinitionsForTagId(tagId);
-        if (defs == null) {
-            return TAG_NULL;
-        }
-        SparseIntArray infos = getTagInfo();
-        int ret = TAG_NULL;
-        for (int i : defs) {
-            int info = infos.get(i);
-            short defType = getTypeFromInfo(info);
-            int defCount = getComponentCountFromInfo(info);
-            int[] defIfds = getAllowedIfdsFromInfo(info);
-            boolean validIfd = false;
-            for (int j : defIfds) {
-                if (j == ifd) {
-                    validIfd = true;
-                    break;
-                }
-            }
-            if (validIfd && type == defType
-                    && (count == defCount || defCount == ExifTag.SIZE_UNDEFINED)) {
-                ret = i;
-                break;
-            }
-        }
-        return ret;
-    }
-
-    /**
-     * Removes a tag definition for given defined tag constant.
-     *
-     * @param tagId a defined tag constant, e.g. {@link #TAG_IMAGE_WIDTH}.
-     */
-    public void removeTagDefinition(int tagId) {
-        getTagInfo().delete(tagId);
-    }
-
-    /**
-     * Resets tag definitions to the default ones.
-     */
-    public void resetTagDefinitions() {
-        mTagInfo = null;
-    }
-
-    /**
-     * Returns the thumbnail from IFD1 as a bitmap, or null if none exists.
-     *
-     * @return the thumbnail as a bitmap.
-     */
-    public Bitmap getThumbnailBitmap() {
-        if (mData.hasCompressedThumbnail()) {
-            byte[] thumb = mData.getCompressedThumbnail();
-            return BitmapFactory.decodeByteArray(thumb, 0, thumb.length);
-        } else if (mData.hasUncompressedStrip()) {
-            // TODO: implement uncompressed
-        }
-        return null;
-    }
-
-    /**
-     * Returns the thumbnail from IFD1 as a byte array, or null if none exists.
-     * The bytes may either be an uncompressed strip as specified in the exif
-     * standard or a jpeg compressed image.
-     *
-     * @return the thumbnail as a byte array.
-     */
-    public byte[] getThumbnailBytes() {
-        if (mData.hasCompressedThumbnail()) {
-            return mData.getCompressedThumbnail();
-        } else if (mData.hasUncompressedStrip()) {
-            // TODO: implement this
-        }
-        return null;
-    }
-
-    /**
-     * Returns the thumbnail if it is jpeg compressed, or null if none exists.
-     *
-     * @return the thumbnail as a byte array.
-     */
-    public byte[] getThumbnail() {
-        return mData.getCompressedThumbnail();
-    }
-
-    /**
-     * Check if thumbnail is compressed.
-     *
-     * @return true if the thumbnail is compressed.
-     */
-    public boolean isThumbnailCompressed() {
-        return mData.hasCompressedThumbnail();
-    }
-
-    /**
-     * Check if thumbnail exists.
-     *
-     * @return true if a compressed thumbnail exists.
-     */
-    public boolean hasThumbnail() {
-        // TODO: add back in uncompressed strip
-        return mData.hasCompressedThumbnail();
-    }
-
-    // TODO: uncompressed thumbnail setters
-
-    /**
-     * Sets the thumbnail to be a jpeg compressed image. Clears any prior
-     * thumbnail.
-     *
-     * @param thumb a byte array containing a jpeg compressed image.
-     * @return true if the thumbnail was set.
-     */
-    public boolean setCompressedThumbnail(byte[] thumb) {
-        mData.clearThumbnailAndStrips();
-        mData.setCompressedThumbnail(thumb);
-        return true;
-    }
-
-    /**
-     * Sets the thumbnail to be a jpeg compressed bitmap. Clears any prior
-     * thumbnail.
-     *
-     * @param thumb a bitmap to compress to a jpeg thumbnail.
-     * @return true if the thumbnail was set.
-     */
-    public boolean setCompressedThumbnail(Bitmap thumb) {
-        ByteArrayOutputStream thumbnail = new ByteArrayOutputStream();
-        if (!thumb.compress(Bitmap.CompressFormat.JPEG, 90, thumbnail)) {
-            return false;
-        }
-        return setCompressedThumbnail(thumbnail.toByteArray());
-    }
-
-    /**
-     * Clears the compressed thumbnail if it exists.
-     */
-    public void removeCompressedThumbnail() {
-        mData.setCompressedThumbnail(null);
-    }
-
-    // Convenience methods:
-
-    /**
-     * Decodes the user comment tag into string as specified in the EXIF
-     * standard. Returns null if decoding failed.
-     */
-    public String getUserComment() {
-        return mData.getUserComment();
-    }
-
-    /**
-     * Returns the Orientation ExifTag value for a given number of degrees.
-     *
-     * @param degrees the amount an image is rotated in degrees.
-     */
-    public static short getOrientationValueForRotation(int degrees) {
-        degrees %= 360;
-        if (degrees < 0) {
-            degrees += 360;
-        }
-        if (degrees < 90) {
-            return Orientation.TOP_LEFT; // 0 degrees
-        } else if (degrees < 180) {
-            return Orientation.RIGHT_TOP; // 90 degrees cw
-        } else if (degrees < 270) {
-            return Orientation.BOTTOM_LEFT; // 180 degrees
-        } else {
-            return Orientation.RIGHT_BOTTOM; // 270 degrees cw
-        }
-    }
-
-    /**
-     * Returns the rotation degrees corresponding to an ExifTag Orientation
-     * value.
-     *
-     * @param orientation the ExifTag Orientation value.
-     */
-    public static int getRotationForOrientationValue(short orientation) {
-        switch (orientation) {
-            case Orientation.TOP_LEFT:
-                return 0;
-            case Orientation.RIGHT_TOP:
-                return 90;
-            case Orientation.BOTTOM_LEFT:
-                return 180;
-            case Orientation.RIGHT_BOTTOM:
-                return 270;
-            default:
-                return 0;
-        }
-    }
-
-    public static OrientationParams getOrientationParams(int orientation) {
-        OrientationParams params = new OrientationParams();
-        switch (orientation) {
-            case Orientation.TOP_RIGHT:     // Flip horizontal
-                params.scaleX = -1;
-                break;
-            case Orientation.BOTTOM_RIGHT:  // Flip vertical
-                params.scaleY = -1;
-                break;
-            case Orientation.BOTTOM_LEFT:   // Rotate 180
-                params.rotation = 180;
-                break;
-            case Orientation.RIGHT_BOTTOM:  // Rotate 270
-                params.rotation = 270;
-                params.invertDimensions = true;
-                break;
-            case Orientation.RIGHT_TOP:     // Rotate 90
-                params.rotation = 90;
-                params.invertDimensions = true;
-                break;
-            case Orientation.LEFT_TOP:      // Transpose
-                params.rotation = 90;
-                params.scaleX = -1;
-                params.invertDimensions = true;
-                break;
-            case Orientation.LEFT_BOTTOM:   // Transverse
-                params.rotation = 270;
-                params.scaleX = -1;
-                params.invertDimensions = true;
-                break;
-        }
-        return params;
-    }
-
-    public static class OrientationParams {
-        public int rotation = 0;
-        public int scaleX = 1;
-        public int scaleY = 1;
-        public boolean invertDimensions = false;
-    }
-
-    /**
-     * Gets the double representation of the GPS latitude or longitude
-     * coordinate.
-     *
-     * @param coordinate an array of 3 Rationals representing the degrees,
-     *            minutes, and seconds of the GPS location as defined in the
-     *            exif specification.
-     * @param reference a GPS reference reperesented by a String containing "N",
-     *            "S", "E", or "W".
-     * @return the GPS coordinate represented as degrees + minutes/60 +
-     *         seconds/3600
-     */
-    public static double convertLatOrLongToDouble(Rational[] coordinate, String reference) {
-        try {
-            double degrees = coordinate[0].toDouble();
-            double minutes = coordinate[1].toDouble();
-            double seconds = coordinate[2].toDouble();
-            double result = degrees + minutes / 60.0 + seconds / 3600.0;
-            if ((reference.equals("S") || reference.equals("W"))) {
-                return -result;
-            }
-            return result;
-        } catch (ArrayIndexOutOfBoundsException e) {
-            throw new IllegalArgumentException();
-        }
-    }
-
-    /**
-     * Gets the GPS latitude and longitude as a pair of doubles from this
-     * ExifInterface object's tags, or null if the necessary tags do not exist.
-     *
-     * @return an array of 2 doubles containing the latitude, and longitude
-     *         respectively.
-     * @see #convertLatOrLongToDouble
-     */
-    public double[] getLatLongAsDoubles() {
-        Rational[] latitude = getTagRationalValues(TAG_GPS_LATITUDE);
-        String latitudeRef = getTagStringValue(TAG_GPS_LATITUDE_REF);
-        Rational[] longitude = getTagRationalValues(TAG_GPS_LONGITUDE);
-        String longitudeRef = getTagStringValue(TAG_GPS_LONGITUDE_REF);
-        if (latitude == null || longitude == null || latitudeRef == null || longitudeRef == null
-                || latitude.length < 3 || longitude.length < 3) {
-            return null;
-        }
-        double[] latLon = new double[2];
-        latLon[0] = convertLatOrLongToDouble(latitude, latitudeRef);
-        latLon[1] = convertLatOrLongToDouble(longitude, longitudeRef);
-        return latLon;
-    }
-
-    private static final String GPS_DATE_FORMAT_STR = "yyyy:MM:dd";
-    private static final String DATETIME_FORMAT_STR = "yyyy:MM:dd kk:mm:ss";
-    private final DateFormat mDateTimeStampFormat = new SimpleDateFormat(DATETIME_FORMAT_STR);
-    private final DateFormat mGPSDateStampFormat = new SimpleDateFormat(GPS_DATE_FORMAT_STR);
-    private final Calendar mGPSTimeStampCalendar = Calendar
-            .getInstance(TimeZone.getTimeZone("UTC"));
-
-    /**
-     * Creates, formats, and sets the DateTimeStamp tag for one of:
-     * {@link #TAG_DATE_TIME}, {@link #TAG_DATE_TIME_DIGITIZED},
-     * {@link #TAG_DATE_TIME_ORIGINAL}.
-     *
-     * @param tagId one of the DateTimeStamp tags.
-     * @param timestamp a timestamp to format.
-     * @param timezone a TimeZone object.
-     * @return true if success, false if the tag could not be set.
-     */
-    public boolean addDateTimeStampTag(int tagId, long timestamp, TimeZone timezone) {
-        if (tagId == TAG_DATE_TIME || tagId == TAG_DATE_TIME_DIGITIZED
-                || tagId == TAG_DATE_TIME_ORIGINAL) {
-            mDateTimeStampFormat.setTimeZone(timezone);
-            ExifTag t = buildTag(tagId, mDateTimeStampFormat.format(timestamp));
-            if (t == null) {
-                return false;
-            }
-            setTag(t);
-        } else {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Creates and sets all to the GPS tags for a give latitude and longitude.
-     *
-     * @param latitude a GPS latitude coordinate.
-     * @param longitude a GPS longitude coordinate.
-     * @return true if success, false if they could not be created or set.
-     */
-    public boolean addGpsTags(double latitude, double longitude) {
-        ExifTag latTag = buildTag(TAG_GPS_LATITUDE, toExifLatLong(latitude));
-        ExifTag longTag = buildTag(TAG_GPS_LONGITUDE, toExifLatLong(longitude));
-        ExifTag latRefTag = buildTag(TAG_GPS_LATITUDE_REF,
-                latitude >= 0 ? GpsLatitudeRef.NORTH
-                        : GpsLatitudeRef.SOUTH);
-        ExifTag longRefTag = buildTag(TAG_GPS_LONGITUDE_REF,
-                longitude >= 0 ? GpsLongitudeRef.EAST
-                        : GpsLongitudeRef.WEST);
-        if (latTag == null || longTag == null || latRefTag == null || longRefTag == null) {
-            return false;
-        }
-        setTag(latTag);
-        setTag(longTag);
-        setTag(latRefTag);
-        setTag(longRefTag);
-        return true;
-    }
-
-    /**
-     * Creates and sets the GPS timestamp tag.
-     *
-     * @param timestamp a GPS timestamp.
-     * @return true if success, false if could not be created or set.
-     */
-    public boolean addGpsDateTimeStampTag(long timestamp) {
-        ExifTag t = buildTag(TAG_GPS_DATE_STAMP, mGPSDateStampFormat.format(timestamp));
-        if (t == null) {
-            return false;
-        }
-        setTag(t);
-        mGPSTimeStampCalendar.setTimeInMillis(timestamp);
-        t = buildTag(TAG_GPS_TIME_STAMP, new Rational[] {
-                new Rational(mGPSTimeStampCalendar.get(Calendar.HOUR_OF_DAY), 1),
-                new Rational(mGPSTimeStampCalendar.get(Calendar.MINUTE), 1),
-                new Rational(mGPSTimeStampCalendar.get(Calendar.SECOND), 1)
-        });
-        if (t == null) {
-            return false;
-        }
-        setTag(t);
-        return true;
-    }
-
-    private static Rational[] toExifLatLong(double value) {
-        // convert to the format dd/1 mm/1 ssss/100
-        value = Math.abs(value);
-        int degrees = (int) value;
-        value = (value - degrees) * 60;
-        int minutes = (int) value;
-        value = (value - minutes) * 6000;
-        int seconds = (int) value;
-        return new Rational[] {
-                new Rational(degrees, 1), new Rational(minutes, 1), new Rational(seconds, 100)
-        };
-    }
-
-    private void doExifStreamIO(InputStream is, OutputStream os) throws IOException {
-        byte[] buf = new byte[1024];
-        int ret = is.read(buf, 0, 1024);
-        while (ret != -1) {
-            os.write(buf, 0, ret);
-            ret = is.read(buf, 0, 1024);
-        }
-    }
-
-    protected static void closeSilently(Closeable c) {
-        if (c != null) {
-            try {
-                c.close();
-            } catch (Throwable e) {
-                // ignored
-            }
-        }
-    }
-
-    private SparseIntArray mTagInfo = null;
-
-    protected SparseIntArray getTagInfo() {
-        if (mTagInfo == null) {
-            mTagInfo = new SparseIntArray();
-            initTagInfo();
-        }
-        return mTagInfo;
-    }
-
-    private void initTagInfo() {
-        /**
-         * We put tag information in a 4-bytes integer. The first byte a bitmask
-         * representing the allowed IFDs of the tag, the second byte is the data
-         * type, and the last two byte are a short value indicating the default
-         * component count of this tag.
-         */
-        // IFD0 tags
-        int[] ifdAllowedIfds = {
-                IfdId.TYPE_IFD_0, IfdId.TYPE_IFD_1
-        };
-        int ifdFlags = getFlagsFromAllowedIfds(ifdAllowedIfds) << 24;
-        mTagInfo.put(ExifInterface.TAG_MAKE,
-                ifdFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_IMAGE_WIDTH,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_LONG << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_IMAGE_LENGTH,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_LONG << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_BITS_PER_SAMPLE,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 3);
-        mTagInfo.put(ExifInterface.TAG_COMPRESSION,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_PHOTOMETRIC_INTERPRETATION,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_ORIENTATION, ifdFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16
-                | 1);
-        mTagInfo.put(ExifInterface.TAG_SAMPLES_PER_PIXEL,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_PLANAR_CONFIGURATION,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_Y_CB_CR_SUB_SAMPLING,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_Y_CB_CR_POSITIONING,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_X_RESOLUTION,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_Y_RESOLUTION,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_RESOLUTION_UNIT,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_STRIP_OFFSETS,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_LONG << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_ROWS_PER_STRIP,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_LONG << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_STRIP_BYTE_COUNTS,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_LONG << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_TRANSFER_FUNCTION,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 3 * 256);
-        mTagInfo.put(ExifInterface.TAG_WHITE_POINT,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_PRIMARY_CHROMATICITIES,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 6);
-        mTagInfo.put(ExifInterface.TAG_Y_CB_CR_COEFFICIENTS,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 3);
-        mTagInfo.put(ExifInterface.TAG_REFERENCE_BLACK_WHITE,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 6);
-        mTagInfo.put(ExifInterface.TAG_DATE_TIME,
-                ifdFlags | ExifTag.TYPE_ASCII << 16 | 20);
-        mTagInfo.put(ExifInterface.TAG_IMAGE_DESCRIPTION,
-                ifdFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_MAKE,
-                ifdFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_MODEL,
-                ifdFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_SOFTWARE,
-                ifdFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_ARTIST,
-                ifdFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_COPYRIGHT,
-                ifdFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_EXIF_IFD,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_LONG << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GPS_IFD,
-                ifdFlags | ExifTag.TYPE_UNSIGNED_LONG << 16 | 1);
-        // IFD1 tags
-        int[] ifd1AllowedIfds = {
-            IfdId.TYPE_IFD_1
-        };
-        int ifdFlags1 = getFlagsFromAllowedIfds(ifd1AllowedIfds) << 24;
-        mTagInfo.put(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT,
-                ifdFlags1 | ExifTag.TYPE_UNSIGNED_LONG << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH,
-                ifdFlags1 | ExifTag.TYPE_UNSIGNED_LONG << 16 | 1);
-        // Exif tags
-        int[] exifAllowedIfds = {
-            IfdId.TYPE_IFD_EXIF
-        };
-        int exifFlags = getFlagsFromAllowedIfds(exifAllowedIfds) << 24;
-        mTagInfo.put(ExifInterface.TAG_EXIF_VERSION,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | 4);
-        mTagInfo.put(ExifInterface.TAG_FLASHPIX_VERSION,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | 4);
-        mTagInfo.put(ExifInterface.TAG_COLOR_SPACE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_COMPONENTS_CONFIGURATION,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | 4);
-        mTagInfo.put(ExifInterface.TAG_COMPRESSED_BITS_PER_PIXEL,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_PIXEL_X_DIMENSION,
-                exifFlags | ExifTag.TYPE_UNSIGNED_LONG << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_PIXEL_Y_DIMENSION,
-                exifFlags | ExifTag.TYPE_UNSIGNED_LONG << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_MAKER_NOTE,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_USER_COMMENT,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_RELATED_SOUND_FILE,
-                exifFlags | ExifTag.TYPE_ASCII << 16 | 13);
-        mTagInfo.put(ExifInterface.TAG_DATE_TIME_ORIGINAL,
-                exifFlags | ExifTag.TYPE_ASCII << 16 | 20);
-        mTagInfo.put(ExifInterface.TAG_DATE_TIME_DIGITIZED,
-                exifFlags | ExifTag.TYPE_ASCII << 16 | 20);
-        mTagInfo.put(ExifInterface.TAG_SUB_SEC_TIME,
-                exifFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_SUB_SEC_TIME_ORIGINAL,
-                exifFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_SUB_SEC_TIME_DIGITIZED,
-                exifFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_IMAGE_UNIQUE_ID,
-                exifFlags | ExifTag.TYPE_ASCII << 16 | 33);
-        mTagInfo.put(ExifInterface.TAG_EXPOSURE_TIME,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_F_NUMBER,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_EXPOSURE_PROGRAM,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_SPECTRAL_SENSITIVITY,
-                exifFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_ISO_SPEED_RATINGS,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_OECF,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_SHUTTER_SPEED_VALUE,
-                exifFlags | ExifTag.TYPE_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_APERTURE_VALUE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_BRIGHTNESS_VALUE,
-                exifFlags | ExifTag.TYPE_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_EXPOSURE_BIAS_VALUE,
-                exifFlags | ExifTag.TYPE_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_MAX_APERTURE_VALUE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_SUBJECT_DISTANCE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_METERING_MODE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_LIGHT_SOURCE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_FLASH,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_FOCAL_LENGTH,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_SUBJECT_AREA,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_FLASH_ENERGY,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_SPATIAL_FREQUENCY_RESPONSE,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_FOCAL_PLANE_X_RESOLUTION,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_FOCAL_PLANE_Y_RESOLUTION,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_FOCAL_PLANE_RESOLUTION_UNIT,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_SUBJECT_LOCATION,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_EXPOSURE_INDEX,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_SENSING_METHOD,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_FILE_SOURCE,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_SCENE_TYPE,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_CFA_PATTERN,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_CUSTOM_RENDERED,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_EXPOSURE_MODE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_WHITE_BALANCE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_DIGITAL_ZOOM_RATIO,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_FOCAL_LENGTH_IN_35_MM_FILE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_SCENE_CAPTURE_TYPE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GAIN_CONTROL,
-                exifFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_CONTRAST,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_SATURATION,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_SHARPNESS,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_DEVICE_SETTING_DESCRIPTION,
-                exifFlags | ExifTag.TYPE_UNDEFINED << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_SUBJECT_DISTANCE_RANGE,
-                exifFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_INTEROPERABILITY_IFD, exifFlags
-                | ExifTag.TYPE_UNSIGNED_LONG << 16 | 1);
-        // GPS tag
-        int[] gpsAllowedIfds = {
-            IfdId.TYPE_IFD_GPS
-        };
-        int gpsFlags = getFlagsFromAllowedIfds(gpsAllowedIfds) << 24;
-        mTagInfo.put(ExifInterface.TAG_GPS_VERSION_ID,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_BYTE << 16 | 4);
-        mTagInfo.put(ExifInterface.TAG_GPS_LATITUDE_REF,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_GPS_LONGITUDE_REF,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_GPS_LATITUDE,
-                gpsFlags | ExifTag.TYPE_RATIONAL << 16 | 3);
-        mTagInfo.put(ExifInterface.TAG_GPS_LONGITUDE,
-                gpsFlags | ExifTag.TYPE_RATIONAL << 16 | 3);
-        mTagInfo.put(ExifInterface.TAG_GPS_ALTITUDE_REF,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_BYTE << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GPS_ALTITUDE,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GPS_TIME_STAMP,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 3);
-        mTagInfo.put(ExifInterface.TAG_GPS_SATTELLITES,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_GPS_STATUS,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_GPS_MEASURE_MODE,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_GPS_DOP,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GPS_SPEED_REF,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_GPS_SPEED,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GPS_TRACK_REF,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_GPS_TRACK,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GPS_IMG_DIRECTION_REF,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_GPS_IMG_DIRECTION,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GPS_MAP_DATUM,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_GPS_DEST_LATITUDE_REF,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_GPS_DEST_LATITUDE,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GPS_DEST_BEARING_REF,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_GPS_DEST_BEARING,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GPS_DEST_DISTANCE_REF,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 2);
-        mTagInfo.put(ExifInterface.TAG_GPS_DEST_DISTANCE,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_RATIONAL << 16 | 1);
-        mTagInfo.put(ExifInterface.TAG_GPS_PROCESSING_METHOD,
-                gpsFlags | ExifTag.TYPE_UNDEFINED << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_GPS_AREA_INFORMATION,
-                gpsFlags | ExifTag.TYPE_UNDEFINED << 16 | ExifTag.SIZE_UNDEFINED);
-        mTagInfo.put(ExifInterface.TAG_GPS_DATE_STAMP,
-                gpsFlags | ExifTag.TYPE_ASCII << 16 | 11);
-        mTagInfo.put(ExifInterface.TAG_GPS_DIFFERENTIAL,
-                gpsFlags | ExifTag.TYPE_UNSIGNED_SHORT << 16 | 11);
-        // Interoperability tag
-        int[] interopAllowedIfds = {
-            IfdId.TYPE_IFD_INTEROPERABILITY
-        };
-        int interopFlags = getFlagsFromAllowedIfds(interopAllowedIfds) << 24;
-        mTagInfo.put(TAG_INTEROPERABILITY_INDEX, interopFlags | ExifTag.TYPE_ASCII << 16
-                | ExifTag.SIZE_UNDEFINED);
-    }
-
-    protected static int getAllowedIfdFlagsFromInfo(int info) {
-        return info >>> 24;
-    }
-
-    protected static int[] getAllowedIfdsFromInfo(int info) {
-        int ifdFlags = getAllowedIfdFlagsFromInfo(info);
-        int[] ifds = IfdData.getIfds();
-        ArrayList<Integer> l = new ArrayList<Integer>();
-        for (int i = 0; i < IfdId.TYPE_IFD_COUNT; i++) {
-            int flag = (ifdFlags >> i) & 1;
-            if (flag == 1) {
-                l.add(ifds[i]);
-            }
-        }
-        if (l.size() <= 0) {
-            return null;
-        }
-        int[] ret = new int[l.size()];
-        int j = 0;
-        for (int i : l) {
-            ret[j++] = i;
-        }
-        return ret;
-    }
-
-    protected static boolean isIfdAllowed(int info, int ifd) {
-        int[] ifds = IfdData.getIfds();
-        int ifdFlags = getAllowedIfdFlagsFromInfo(info);
-        for (int i = 0; i < ifds.length; i++) {
-            if (ifd == ifds[i] && ((ifdFlags >> i) & 1) == 1) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    protected static int getFlagsFromAllowedIfds(int[] allowedIfds) {
-        if (allowedIfds == null || allowedIfds.length == 0) {
-            return 0;
-        }
-        int flags = 0;
-        int[] ifds = IfdData.getIfds();
-        for (int i = 0; i < IfdId.TYPE_IFD_COUNT; i++) {
-            for (int j : allowedIfds) {
-                if (ifds[i] == j) {
-                    flags |= 1 << i;
-                    break;
-                }
-            }
-        }
-        return flags;
-    }
-
-    protected static short getTypeFromInfo(int info) {
-        return (short) ((info >> 16) & 0x0ff);
-    }
-
-    protected static int getComponentCountFromInfo(int info) {
-        return info & 0x0ffff;
-    }
-
-}
diff --git a/src/com/android/messaging/util/exif/ExifInvalidFormatException.java b/src/com/android/messaging/util/exif/ExifInvalidFormatException.java
deleted file mode 100644
index a38f8a3..0000000
--- a/src/com/android/messaging/util/exif/ExifInvalidFormatException.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-public class ExifInvalidFormatException extends Exception {
-    public ExifInvalidFormatException(String meg) {
-        super(meg);
-    }
-}
diff --git a/src/com/android/messaging/util/exif/ExifModifier.java b/src/com/android/messaging/util/exif/ExifModifier.java
deleted file mode 100644
index 274022c..0000000
--- a/src/com/android/messaging/util/exif/ExifModifier.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-import android.util.Log;
-import com.android.messaging.util.LogUtil;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.ArrayList;
-import java.util.List;
-
-class ExifModifier {
-    public static final String TAG = LogUtil.BUGLE_TAG;
-    public static final boolean DEBUG = false;
-    private final ByteBuffer mByteBuffer;
-    private final ExifData mTagToModified;
-    private final List<TagOffset> mTagOffsets = new ArrayList<TagOffset>();
-    private final ExifInterface mInterface;
-    private int mOffsetBase;
-
-    private static class TagOffset {
-        final int mOffset;
-        final ExifTag mTag;
-
-        TagOffset(ExifTag tag, int offset) {
-            mTag = tag;
-            mOffset = offset;
-        }
-    }
-
-    protected ExifModifier(ByteBuffer byteBuffer, ExifInterface iRef) throws IOException,
-            ExifInvalidFormatException {
-        mByteBuffer = byteBuffer;
-        mOffsetBase = byteBuffer.position();
-        mInterface = iRef;
-        InputStream is = null;
-        try {
-            is = new ByteBufferInputStream(byteBuffer);
-            // Do not require any IFD;
-            ExifParser parser = ExifParser.parse(is, mInterface);
-            mTagToModified = new ExifData(parser.getByteOrder());
-            mOffsetBase += parser.getTiffStartPosition();
-            mByteBuffer.position(0);
-        } finally {
-            ExifInterface.closeSilently(is);
-        }
-    }
-
-    protected ByteOrder getByteOrder() {
-        return mTagToModified.getByteOrder();
-    }
-
-    protected boolean commit() throws IOException, ExifInvalidFormatException {
-        InputStream is = null;
-        try {
-            is = new ByteBufferInputStream(mByteBuffer);
-            int flag = 0;
-            IfdData[] ifdDatas = new IfdData[] {
-                    mTagToModified.getIfdData(IfdId.TYPE_IFD_0),
-                    mTagToModified.getIfdData(IfdId.TYPE_IFD_1),
-                    mTagToModified.getIfdData(IfdId.TYPE_IFD_EXIF),
-                    mTagToModified.getIfdData(IfdId.TYPE_IFD_INTEROPERABILITY),
-                    mTagToModified.getIfdData(IfdId.TYPE_IFD_GPS)
-            };
-
-            if (ifdDatas[IfdId.TYPE_IFD_0] != null) {
-                flag |= ExifParser.OPTION_IFD_0;
-            }
-            if (ifdDatas[IfdId.TYPE_IFD_1] != null) {
-                flag |= ExifParser.OPTION_IFD_1;
-            }
-            if (ifdDatas[IfdId.TYPE_IFD_EXIF] != null) {
-                flag |= ExifParser.OPTION_IFD_EXIF;
-            }
-            if (ifdDatas[IfdId.TYPE_IFD_GPS] != null) {
-                flag |= ExifParser.OPTION_IFD_GPS;
-            }
-            if (ifdDatas[IfdId.TYPE_IFD_INTEROPERABILITY] != null) {
-                flag |= ExifParser.OPTION_IFD_INTEROPERABILITY;
-            }
-
-            ExifParser parser = ExifParser.parse(is, flag, mInterface);
-            int event = parser.next();
-            IfdData currIfd = null;
-            while (event != ExifParser.EVENT_END) {
-                switch (event) {
-                    case ExifParser.EVENT_START_OF_IFD:
-                        currIfd = ifdDatas[parser.getCurrentIfd()];
-                        if (currIfd == null) {
-                            parser.skipRemainingTagsInCurrentIfd();
-                        }
-                        break;
-                    case ExifParser.EVENT_NEW_TAG:
-                        ExifTag oldTag = parser.getTag();
-                        ExifTag newTag = currIfd.getTag(oldTag.getTagId());
-                        if (newTag != null) {
-                            if (newTag.getComponentCount() != oldTag.getComponentCount()
-                                    || newTag.getDataType() != oldTag.getDataType()) {
-                                return false;
-                            } else {
-                                mTagOffsets.add(new TagOffset(newTag, oldTag.getOffset()));
-                                currIfd.removeTag(oldTag.getTagId());
-                                if (currIfd.getTagCount() == 0) {
-                                    parser.skipRemainingTagsInCurrentIfd();
-                                }
-                            }
-                        }
-                        break;
-                }
-                event = parser.next();
-            }
-            for (IfdData ifd : ifdDatas) {
-                if (ifd != null && ifd.getTagCount() > 0) {
-                    return false;
-                }
-            }
-            modify();
-        } finally {
-            ExifInterface.closeSilently(is);
-        }
-        return true;
-    }
-
-    private void modify() {
-        mByteBuffer.order(getByteOrder());
-        for (TagOffset tagOffset : mTagOffsets) {
-            writeTagValue(tagOffset.mTag, tagOffset.mOffset);
-        }
-    }
-
-    private void writeTagValue(ExifTag tag, int offset) {
-        if (DEBUG) {
-            Log.v(TAG, "modifying tag to: \n" + tag.toString());
-            Log.v(TAG, "at offset: " + offset);
-        }
-        mByteBuffer.position(offset + mOffsetBase);
-        switch (tag.getDataType()) {
-            case ExifTag.TYPE_ASCII:
-                byte buf[] = tag.getStringByte();
-                if (buf.length == tag.getComponentCount()) {
-                    buf[buf.length - 1] = 0;
-                    mByteBuffer.put(buf);
-                } else {
-                    mByteBuffer.put(buf);
-                    mByteBuffer.put((byte) 0);
-                }
-                break;
-            case ExifTag.TYPE_LONG:
-            case ExifTag.TYPE_UNSIGNED_LONG:
-                for (int i = 0, n = tag.getComponentCount(); i < n; i++) {
-                    mByteBuffer.putInt((int) tag.getValueAt(i));
-                }
-                break;
-            case ExifTag.TYPE_RATIONAL:
-            case ExifTag.TYPE_UNSIGNED_RATIONAL:
-                for (int i = 0, n = tag.getComponentCount(); i < n; i++) {
-                    Rational v = tag.getRational(i);
-                    mByteBuffer.putInt((int) v.getNumerator());
-                    mByteBuffer.putInt((int) v.getDenominator());
-                }
-                break;
-            case ExifTag.TYPE_UNDEFINED:
-            case ExifTag.TYPE_UNSIGNED_BYTE:
-                buf = new byte[tag.getComponentCount()];
-                tag.getBytes(buf);
-                mByteBuffer.put(buf);
-                break;
-            case ExifTag.TYPE_UNSIGNED_SHORT:
-                for (int i = 0, n = tag.getComponentCount(); i < n; i++) {
-                    mByteBuffer.putShort((short) tag.getValueAt(i));
-                }
-                break;
-        }
-    }
-
-    public void modifyTag(ExifTag tag) {
-        mTagToModified.addTag(tag);
-    }
-}
diff --git a/src/com/android/messaging/util/exif/ExifOutputStream.java b/src/com/android/messaging/util/exif/ExifOutputStream.java
deleted file mode 100644
index 2016da4..0000000
--- a/src/com/android/messaging/util/exif/ExifOutputStream.java
+++ /dev/null
@@ -1,522 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-import android.util.Log;
-import com.android.messaging.util.LogUtil;
-
-import java.io.BufferedOutputStream;
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.ArrayList;
-
-/**
- * This class provides a way to replace the Exif header of a JPEG image.
- * <p>
- * Below is an example of writing EXIF data into a file
- *
- * <pre>
- * public static void writeExif(byte[] jpeg, ExifData exif, String path) {
- *     OutputStream os = null;
- *     try {
- *         os = new FileOutputStream(path);
- *         ExifOutputStream eos = new ExifOutputStream(os);
- *         // Set the exif header
- *         eos.setExifData(exif);
- *         // Write the original jpeg out, the header will be add into the file.
- *         eos.write(jpeg);
- *     } catch (FileNotFoundException e) {
- *         e.printStackTrace();
- *     } catch (IOException e) {
- *         e.printStackTrace();
- *     } finally {
- *         if (os != null) {
- *             try {
- *                 os.close();
- *             } catch (IOException e) {
- *                 e.printStackTrace();
- *             }
- *         }
- *     }
- * }
- * </pre>
- */
-class ExifOutputStream extends FilterOutputStream {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-    private static final boolean DEBUG = false;
-    private static final int STREAMBUFFER_SIZE = 0x00010000; // 64Kb
-
-    private static final int STATE_SOI = 0;
-    private static final int STATE_FRAME_HEADER = 1;
-    private static final int STATE_JPEG_DATA = 2;
-
-    private static final int EXIF_HEADER = 0x45786966;
-    private static final short TIFF_HEADER = 0x002A;
-    private static final short TIFF_BIG_ENDIAN = 0x4d4d;
-    private static final short TIFF_LITTLE_ENDIAN = 0x4949;
-    private static final short TAG_SIZE = 12;
-    private static final short TIFF_HEADER_SIZE = 8;
-    private static final int MAX_EXIF_SIZE = 65535;
-
-    private ExifData mExifData;
-    private int mState = STATE_SOI;
-    private int mByteToSkip;
-    private int mByteToCopy;
-    private final byte[] mSingleByteArray = new byte[1];
-    private final ByteBuffer mBuffer = ByteBuffer.allocate(4);
-    private final ExifInterface mInterface;
-
-    protected ExifOutputStream(OutputStream ou, ExifInterface iRef) {
-        super(new BufferedOutputStream(ou, STREAMBUFFER_SIZE));
-        mInterface = iRef;
-    }
-
-    /**
-     * Sets the ExifData to be written into the JPEG file. Should be called
-     * before writing image data.
-     */
-    protected void setExifData(ExifData exifData) {
-        mExifData = exifData;
-    }
-
-    /**
-     * Gets the Exif header to be written into the JPEF file.
-     */
-    protected ExifData getExifData() {
-        return mExifData;
-    }
-
-    private int requestByteToBuffer(int requestByteCount, byte[] buffer
-            , int offset, int length) {
-        int byteNeeded = requestByteCount - mBuffer.position();
-        int byteToRead = length > byteNeeded ? byteNeeded : length;
-        mBuffer.put(buffer, offset, byteToRead);
-        return byteToRead;
-    }
-
-    /**
-     * Writes the image out. The input data should be a valid JPEG format. After
-     * writing, it's Exif header will be replaced by the given header.
-     */
-    @Override
-    public void write(byte[] buffer, int offset, int length) throws IOException {
-        while ((mByteToSkip > 0 || mByteToCopy > 0 || mState != STATE_JPEG_DATA)
-                && length > 0) {
-            if (mByteToSkip > 0) {
-                int byteToProcess = length > mByteToSkip ? mByteToSkip : length;
-                length -= byteToProcess;
-                mByteToSkip -= byteToProcess;
-                offset += byteToProcess;
-            }
-            if (mByteToCopy > 0) {
-                int byteToProcess = length > mByteToCopy ? mByteToCopy : length;
-                out.write(buffer, offset, byteToProcess);
-                length -= byteToProcess;
-                mByteToCopy -= byteToProcess;
-                offset += byteToProcess;
-            }
-            if (length == 0) {
-                return;
-            }
-            switch (mState) {
-                case STATE_SOI:
-                    int byteRead = requestByteToBuffer(2, buffer, offset, length);
-                    offset += byteRead;
-                    length -= byteRead;
-                    if (mBuffer.position() < 2) {
-                        return;
-                    }
-                    mBuffer.rewind();
-                    if (mBuffer.getShort() != JpegHeader.SOI) {
-                        throw new IOException("Not a valid jpeg image, cannot write exif");
-                    }
-                    out.write(mBuffer.array(), 0, 2);
-                    mState = STATE_FRAME_HEADER;
-                    mBuffer.rewind();
-                    writeExifData();
-                    break;
-                case STATE_FRAME_HEADER:
-                    // We ignore the APP1 segment and copy all other segments
-                    // until SOF tag.
-                    byteRead = requestByteToBuffer(4, buffer, offset, length);
-                    offset += byteRead;
-                    length -= byteRead;
-                    // Check if this image data doesn't contain SOF.
-                    if (mBuffer.position() == 2) {
-                        short tag = mBuffer.getShort();
-                        if (tag == JpegHeader.EOI) {
-                            out.write(mBuffer.array(), 0, 2);
-                            mBuffer.rewind();
-                        }
-                    }
-                    if (mBuffer.position() < 4) {
-                        return;
-                    }
-                    mBuffer.rewind();
-                    short marker = mBuffer.getShort();
-                    if (marker == JpegHeader.APP1) {
-                        mByteToSkip = (mBuffer.getShort() & 0x0000ffff) - 2;
-                        mState = STATE_JPEG_DATA;
-                    } else if (!JpegHeader.isSofMarker(marker)) {
-                        out.write(mBuffer.array(), 0, 4);
-                        mByteToCopy = (mBuffer.getShort() & 0x0000ffff) - 2;
-                    } else {
-                        out.write(mBuffer.array(), 0, 4);
-                        mState = STATE_JPEG_DATA;
-                    }
-                    mBuffer.rewind();
-            }
-        }
-        if (length > 0) {
-            out.write(buffer, offset, length);
-        }
-    }
-
-    /**
-     * Writes the one bytes out. The input data should be a valid JPEG format.
-     * After writing, it's Exif header will be replaced by the given header.
-     */
-    @Override
-    public void write(int oneByte) throws IOException {
-        mSingleByteArray[0] = (byte) (0xff & oneByte);
-        write(mSingleByteArray);
-    }
-
-    /**
-     * Equivalent to calling write(buffer, 0, buffer.length).
-     */
-    @Override
-    public void write(byte[] buffer) throws IOException {
-        write(buffer, 0, buffer.length);
-    }
-
-    private void writeExifData() throws IOException {
-        if (mExifData == null) {
-            return;
-        }
-        if (DEBUG) {
-            Log.v(TAG, "Writing exif data...");
-        }
-        ArrayList<ExifTag> nullTags = stripNullValueTags(mExifData);
-        createRequiredIfdAndTag();
-        int exifSize = calculateAllOffset();
-        if (exifSize + 8 > MAX_EXIF_SIZE) {
-            throw new IOException("Exif header is too large (>64Kb)");
-        }
-        OrderedDataOutputStream dataOutputStream = new OrderedDataOutputStream(out);
-        dataOutputStream.setByteOrder(ByteOrder.BIG_ENDIAN);
-        dataOutputStream.writeShort(JpegHeader.APP1);
-        dataOutputStream.writeShort((short) (exifSize + 8));
-        dataOutputStream.writeInt(EXIF_HEADER);
-        dataOutputStream.writeShort((short) 0x0000);
-        if (mExifData.getByteOrder() == ByteOrder.BIG_ENDIAN) {
-            dataOutputStream.writeShort(TIFF_BIG_ENDIAN);
-        } else {
-            dataOutputStream.writeShort(TIFF_LITTLE_ENDIAN);
-        }
-        dataOutputStream.setByteOrder(mExifData.getByteOrder());
-        dataOutputStream.writeShort(TIFF_HEADER);
-        dataOutputStream.writeInt(8);
-        writeAllTags(dataOutputStream);
-        writeThumbnail(dataOutputStream);
-        for (ExifTag t : nullTags) {
-            mExifData.addTag(t);
-        }
-    }
-
-    private ArrayList<ExifTag> stripNullValueTags(ExifData data) {
-        ArrayList<ExifTag> nullTags = new ArrayList<ExifTag>();
-        if (data.getAllTags() == null) {
-            return nullTags;
-        }
-        for (ExifTag t : data.getAllTags()) {
-            if (t.getValue() == null && !ExifInterface.isOffsetTag(t.getTagId())) {
-                data.removeTag(t.getTagId(), t.getIfd());
-                nullTags.add(t);
-            }
-        }
-        return nullTags;
-    }
-
-    private void writeThumbnail(OrderedDataOutputStream dataOutputStream) throws IOException {
-        if (mExifData.hasCompressedThumbnail()) {
-            dataOutputStream.write(mExifData.getCompressedThumbnail());
-        } else if (mExifData.hasUncompressedStrip()) {
-            for (int i = 0; i < mExifData.getStripCount(); i++) {
-                dataOutputStream.write(mExifData.getStrip(i));
-            }
-        }
-    }
-
-    private void writeAllTags(OrderedDataOutputStream dataOutputStream) throws IOException {
-        writeIfd(mExifData.getIfdData(IfdId.TYPE_IFD_0), dataOutputStream);
-        writeIfd(mExifData.getIfdData(IfdId.TYPE_IFD_EXIF), dataOutputStream);
-        IfdData interoperabilityIfd = mExifData.getIfdData(IfdId.TYPE_IFD_INTEROPERABILITY);
-        if (interoperabilityIfd != null) {
-            writeIfd(interoperabilityIfd, dataOutputStream);
-        }
-        IfdData gpsIfd = mExifData.getIfdData(IfdId.TYPE_IFD_GPS);
-        if (gpsIfd != null) {
-            writeIfd(gpsIfd, dataOutputStream);
-        }
-        IfdData ifd1 = mExifData.getIfdData(IfdId.TYPE_IFD_1);
-        if (ifd1 != null) {
-            writeIfd(mExifData.getIfdData(IfdId.TYPE_IFD_1), dataOutputStream);
-        }
-    }
-
-    private void writeIfd(IfdData ifd, OrderedDataOutputStream dataOutputStream)
-            throws IOException {
-        ExifTag[] tags = ifd.getAllTags();
-        dataOutputStream.writeShort((short) tags.length);
-        for (ExifTag tag : tags) {
-            dataOutputStream.writeShort(tag.getTagId());
-            dataOutputStream.writeShort(tag.getDataType());
-            dataOutputStream.writeInt(tag.getComponentCount());
-            if (DEBUG) {
-                Log.v(TAG, "\n" + tag.toString());
-            }
-            if (tag.getDataSize() > 4) {
-                dataOutputStream.writeInt(tag.getOffset());
-            } else {
-                ExifOutputStream.writeTagValue(tag, dataOutputStream);
-                for (int i = 0, n = 4 - tag.getDataSize(); i < n; i++) {
-                    dataOutputStream.write(0);
-                }
-            }
-        }
-        dataOutputStream.writeInt(ifd.getOffsetToNextIfd());
-        for (ExifTag tag : tags) {
-            if (tag.getDataSize() > 4) {
-                ExifOutputStream.writeTagValue(tag, dataOutputStream);
-            }
-        }
-    }
-
-    private int calculateOffsetOfIfd(IfdData ifd, int offset) {
-        offset += 2 + ifd.getTagCount() * TAG_SIZE + 4;
-        ExifTag[] tags = ifd.getAllTags();
-        for (ExifTag tag : tags) {
-            if (tag.getDataSize() > 4) {
-                tag.setOffset(offset);
-                offset += tag.getDataSize();
-            }
-        }
-        return offset;
-    }
-
-    private void createRequiredIfdAndTag() throws IOException {
-        // IFD0 is required for all file
-        IfdData ifd0 = mExifData.getIfdData(IfdId.TYPE_IFD_0);
-        if (ifd0 == null) {
-            ifd0 = new IfdData(IfdId.TYPE_IFD_0);
-            mExifData.addIfdData(ifd0);
-        }
-        ExifTag exifOffsetTag = mInterface.buildUninitializedTag(ExifInterface.TAG_EXIF_IFD);
-        if (exifOffsetTag == null) {
-            throw new IOException("No definition for crucial exif tag: "
-                    + ExifInterface.TAG_EXIF_IFD);
-        }
-        ifd0.setTag(exifOffsetTag);
-
-        // Exif IFD is required for all files.
-        IfdData exifIfd = mExifData.getIfdData(IfdId.TYPE_IFD_EXIF);
-        if (exifIfd == null) {
-            exifIfd = new IfdData(IfdId.TYPE_IFD_EXIF);
-            mExifData.addIfdData(exifIfd);
-        }
-
-        // GPS IFD
-        IfdData gpsIfd = mExifData.getIfdData(IfdId.TYPE_IFD_GPS);
-        if (gpsIfd != null) {
-            ExifTag gpsOffsetTag = mInterface.buildUninitializedTag(ExifInterface.TAG_GPS_IFD);
-            if (gpsOffsetTag == null) {
-                throw new IOException("No definition for crucial exif tag: "
-                        + ExifInterface.TAG_GPS_IFD);
-            }
-            ifd0.setTag(gpsOffsetTag);
-        }
-
-        // Interoperability IFD
-        IfdData interIfd = mExifData.getIfdData(IfdId.TYPE_IFD_INTEROPERABILITY);
-        if (interIfd != null) {
-            ExifTag interOffsetTag = mInterface
-                    .buildUninitializedTag(ExifInterface.TAG_INTEROPERABILITY_IFD);
-            if (interOffsetTag == null) {
-                throw new IOException("No definition for crucial exif tag: "
-                        + ExifInterface.TAG_INTEROPERABILITY_IFD);
-            }
-            exifIfd.setTag(interOffsetTag);
-        }
-
-        IfdData ifd1 = mExifData.getIfdData(IfdId.TYPE_IFD_1);
-
-        // thumbnail
-        if (mExifData.hasCompressedThumbnail()) {
-
-            if (ifd1 == null) {
-                ifd1 = new IfdData(IfdId.TYPE_IFD_1);
-                mExifData.addIfdData(ifd1);
-            }
-
-            ExifTag offsetTag = mInterface
-                    .buildUninitializedTag(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT);
-            if (offsetTag == null) {
-                throw new IOException("No definition for crucial exif tag: "
-                        + ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT);
-            }
-
-            ifd1.setTag(offsetTag);
-            ExifTag lengthTag = mInterface
-                    .buildUninitializedTag(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH);
-            if (lengthTag == null) {
-                throw new IOException("No definition for crucial exif tag: "
-                        + ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH);
-            }
-
-            lengthTag.setValue(mExifData.getCompressedThumbnail().length);
-            ifd1.setTag(lengthTag);
-
-            // Get rid of tags for uncompressed if they exist.
-            ifd1.removeTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_STRIP_OFFSETS));
-            ifd1.removeTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_STRIP_BYTE_COUNTS));
-        } else if (mExifData.hasUncompressedStrip()) {
-            if (ifd1 == null) {
-                ifd1 = new IfdData(IfdId.TYPE_IFD_1);
-                mExifData.addIfdData(ifd1);
-            }
-            int stripCount = mExifData.getStripCount();
-            ExifTag offsetTag = mInterface.buildUninitializedTag(ExifInterface.TAG_STRIP_OFFSETS);
-            if (offsetTag == null) {
-                throw new IOException("No definition for crucial exif tag: "
-                        + ExifInterface.TAG_STRIP_OFFSETS);
-            }
-            ExifTag lengthTag = mInterface
-                    .buildUninitializedTag(ExifInterface.TAG_STRIP_BYTE_COUNTS);
-            if (lengthTag == null) {
-                throw new IOException("No definition for crucial exif tag: "
-                        + ExifInterface.TAG_STRIP_BYTE_COUNTS);
-            }
-            long[] lengths = new long[stripCount];
-            for (int i = 0; i < mExifData.getStripCount(); i++) {
-                lengths[i] = mExifData.getStrip(i).length;
-            }
-            lengthTag.setValue(lengths);
-            ifd1.setTag(offsetTag);
-            ifd1.setTag(lengthTag);
-            // Get rid of tags for compressed if they exist.
-            ifd1.removeTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT));
-            ifd1.removeTag(ExifInterface
-                    .getTrueTagKey(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH));
-        } else if (ifd1 != null) {
-            // Get rid of offset and length tags if there is no thumbnail.
-            ifd1.removeTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_STRIP_OFFSETS));
-            ifd1.removeTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_STRIP_BYTE_COUNTS));
-            ifd1.removeTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT));
-            ifd1.removeTag(ExifInterface
-                    .getTrueTagKey(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH));
-        }
-    }
-
-    private int calculateAllOffset() {
-        int offset = TIFF_HEADER_SIZE;
-        IfdData ifd0 = mExifData.getIfdData(IfdId.TYPE_IFD_0);
-        offset = calculateOffsetOfIfd(ifd0, offset);
-        ifd0.getTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_EXIF_IFD)).setValue(offset);
-
-        IfdData exifIfd = mExifData.getIfdData(IfdId.TYPE_IFD_EXIF);
-        offset = calculateOffsetOfIfd(exifIfd, offset);
-
-        IfdData interIfd = mExifData.getIfdData(IfdId.TYPE_IFD_INTEROPERABILITY);
-        if (interIfd != null) {
-            exifIfd.getTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_INTEROPERABILITY_IFD))
-                    .setValue(offset);
-            offset = calculateOffsetOfIfd(interIfd, offset);
-        }
-
-        IfdData gpsIfd = mExifData.getIfdData(IfdId.TYPE_IFD_GPS);
-        if (gpsIfd != null) {
-            ifd0.getTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_GPS_IFD)).setValue(offset);
-            offset = calculateOffsetOfIfd(gpsIfd, offset);
-        }
-
-        IfdData ifd1 = mExifData.getIfdData(IfdId.TYPE_IFD_1);
-        if (ifd1 != null) {
-            ifd0.setOffsetToNextIfd(offset);
-            offset = calculateOffsetOfIfd(ifd1, offset);
-        }
-
-        // thumbnail
-        if (mExifData.hasCompressedThumbnail()) {
-            ifd1.getTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT))
-                    .setValue(offset);
-            offset += mExifData.getCompressedThumbnail().length;
-        } else if (mExifData.hasUncompressedStrip()) {
-            int stripCount = mExifData.getStripCount();
-            long[] offsets = new long[stripCount];
-            for (int i = 0; i < mExifData.getStripCount(); i++) {
-                offsets[i] = offset;
-                offset += mExifData.getStrip(i).length;
-            }
-            ifd1.getTag(ExifInterface.getTrueTagKey(ExifInterface.TAG_STRIP_OFFSETS)).setValue(
-                    offsets);
-        }
-        return offset;
-    }
-
-    static void writeTagValue(ExifTag tag, OrderedDataOutputStream dataOutputStream)
-            throws IOException {
-        switch (tag.getDataType()) {
-            case ExifTag.TYPE_ASCII:
-                byte buf[] = tag.getStringByte();
-                if (buf.length == tag.getComponentCount()) {
-                    buf[buf.length - 1] = 0;
-                    dataOutputStream.write(buf);
-                } else {
-                    dataOutputStream.write(buf);
-                    dataOutputStream.write(0);
-                }
-                break;
-            case ExifTag.TYPE_LONG:
-            case ExifTag.TYPE_UNSIGNED_LONG:
-                for (int i = 0, n = tag.getComponentCount(); i < n; i++) {
-                    dataOutputStream.writeInt((int) tag.getValueAt(i));
-                }
-                break;
-            case ExifTag.TYPE_RATIONAL:
-            case ExifTag.TYPE_UNSIGNED_RATIONAL:
-                for (int i = 0, n = tag.getComponentCount(); i < n; i++) {
-                    dataOutputStream.writeRational(tag.getRational(i));
-                }
-                break;
-            case ExifTag.TYPE_UNDEFINED:
-            case ExifTag.TYPE_UNSIGNED_BYTE:
-                buf = new byte[tag.getComponentCount()];
-                tag.getBytes(buf);
-                dataOutputStream.write(buf);
-                break;
-            case ExifTag.TYPE_UNSIGNED_SHORT:
-                for (int i = 0, n = tag.getComponentCount(); i < n; i++) {
-                    dataOutputStream.writeShort((short) tag.getValueAt(i));
-                }
-                break;
-        }
-    }
-}
diff --git a/src/com/android/messaging/util/exif/ExifParser.java b/src/com/android/messaging/util/exif/ExifParser.java
deleted file mode 100644
index 46f253e..0000000
--- a/src/com/android/messaging/util/exif/ExifParser.java
+++ /dev/null
@@ -1,920 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-import android.util.Log;
-import com.android.messaging.util.LogUtil;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteOrder;
-import java.nio.charset.Charset;
-import java.util.Map.Entry;
-import java.util.TreeMap;
-
-/**
- * This class provides a low-level EXIF parsing API. Given a JPEG format
- * InputStream, the caller can request which IFD's to read via
- * {@link #parse(java.io.InputStream, int)} with given options.
- * <p>
- * Below is an example of getting EXIF data from IFD 0 and EXIF IFD using the
- * parser.
- *
- * <pre>
- * void parse() {
- *     ExifParser parser = ExifParser.parse(mImageInputStream,
- *             ExifParser.OPTION_IFD_0 | ExifParser.OPTIONS_IFD_EXIF);
- *     int event = parser.next();
- *     while (event != ExifParser.EVENT_END) {
- *         switch (event) {
- *             case ExifParser.EVENT_START_OF_IFD:
- *                 break;
- *             case ExifParser.EVENT_NEW_TAG:
- *                 ExifTag tag = parser.getTag();
- *                 if (!tag.hasValue()) {
- *                     parser.registerForTagValue(tag);
- *                 } else {
- *                     processTag(tag);
- *                 }
- *                 break;
- *             case ExifParser.EVENT_VALUE_OF_REGISTERED_TAG:
- *                 tag = parser.getTag();
- *                 if (tag.getDataType() != ExifTag.TYPE_UNDEFINED) {
- *                     processTag(tag);
- *                 }
- *                 break;
- *         }
- *         event = parser.next();
- *     }
- * }
- *
- * void processTag(ExifTag tag) {
- *     // process the tag as you like.
- * }
- * </pre>
- */
-public class ExifParser {
-    private static final boolean LOGV = false;
-    private static final String TAG = LogUtil.BUGLE_TAG;
-    /**
-     * When the parser reaches a new IFD area. Call {@link #getCurrentIfd()} to
-     * know which IFD we are in.
-     */
-    public static final int EVENT_START_OF_IFD = 0;
-    /**
-     * When the parser reaches a new tag. Call {@link #getTag()}to get the
-     * corresponding tag.
-     */
-    public static final int EVENT_NEW_TAG = 1;
-    /**
-     * When the parser reaches the value area of tag that is registered by
-     * {@link #registerForTagValue(ExifTag)} previously. Call {@link #getTag()}
-     * to get the corresponding tag.
-     */
-    public static final int EVENT_VALUE_OF_REGISTERED_TAG = 2;
-
-    /**
-     * When the parser reaches the compressed image area.
-     */
-    public static final int EVENT_COMPRESSED_IMAGE = 3;
-    /**
-     * When the parser reaches the uncompressed image strip. Call
-     * {@link #getStripIndex()} to get the index of the strip.
-     *
-     * @see #getStripIndex()
-     * @see #getStripCount()
-     */
-    public static final int EVENT_UNCOMPRESSED_STRIP = 4;
-    /**
-     * When there is nothing more to parse.
-     */
-    public static final int EVENT_END = 5;
-
-    /**
-     * Option bit to request to parse IFD0.
-     */
-    public static final int OPTION_IFD_0 = 1 << 0;
-    /**
-     * Option bit to request to parse IFD1.
-     */
-    public static final int OPTION_IFD_1 = 1 << 1;
-    /**
-     * Option bit to request to parse Exif-IFD.
-     */
-    public static final int OPTION_IFD_EXIF = 1 << 2;
-    /**
-     * Option bit to request to parse GPS-IFD.
-     */
-    public static final int OPTION_IFD_GPS = 1 << 3;
-    /**
-     * Option bit to request to parse Interoperability-IFD.
-     */
-    public static final int OPTION_IFD_INTEROPERABILITY = 1 << 4;
-    /**
-     * Option bit to request to parse thumbnail.
-     */
-    public static final int OPTION_THUMBNAIL = 1 << 5;
-
-    protected static final int EXIF_HEADER = 0x45786966; // EXIF header "Exif"
-    protected static final short EXIF_HEADER_TAIL = (short) 0x0000; // EXIF header in APP1
-
-    // TIFF header
-    protected static final short LITTLE_ENDIAN_TAG = (short) 0x4949; // "II"
-    protected static final short BIG_ENDIAN_TAG = (short) 0x4d4d; // "MM"
-    protected static final short TIFF_HEADER_TAIL = 0x002A;
-
-    protected static final int TAG_SIZE = 12;
-    protected static final int OFFSET_SIZE = 2;
-
-    private static final Charset US_ASCII = Charset.forName("US-ASCII");
-
-    protected static final int DEFAULT_IFD0_OFFSET = 8;
-
-    private final CountedDataInputStream mTiffStream;
-    private final int mOptions;
-    private int mIfdStartOffset = 0;
-    private int mNumOfTagInIfd = 0;
-    private int mIfdType;
-    private ExifTag mTag;
-    private ImageEvent mImageEvent;
-    private int mStripCount;
-    private ExifTag mStripSizeTag;
-    private ExifTag mJpegSizeTag;
-    private boolean mNeedToParseOffsetsInCurrentIfd;
-    private boolean mContainExifData = false;
-    private int mApp1End;
-    private int mOffsetToApp1EndFromSOF = 0;
-    private byte[] mDataAboveIfd0;
-    private int mIfd0Position;
-    private int mTiffStartPosition;
-    private final ExifInterface mInterface;
-
-    private static final short TAG_EXIF_IFD = ExifInterface
-            .getTrueTagKey(ExifInterface.TAG_EXIF_IFD);
-    private static final short TAG_GPS_IFD = ExifInterface.getTrueTagKey(ExifInterface.TAG_GPS_IFD);
-    private static final short TAG_INTEROPERABILITY_IFD = ExifInterface
-            .getTrueTagKey(ExifInterface.TAG_INTEROPERABILITY_IFD);
-    private static final short TAG_JPEG_INTERCHANGE_FORMAT = ExifInterface
-            .getTrueTagKey(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT);
-    private static final short TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = ExifInterface
-            .getTrueTagKey(ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH);
-    private static final short TAG_STRIP_OFFSETS = ExifInterface
-            .getTrueTagKey(ExifInterface.TAG_STRIP_OFFSETS);
-    private static final short TAG_STRIP_BYTE_COUNTS = ExifInterface
-            .getTrueTagKey(ExifInterface.TAG_STRIP_BYTE_COUNTS);
-
-    private final TreeMap<Integer, Object> mCorrespondingEvent = new TreeMap<Integer, Object>();
-
-    private boolean isIfdRequested(int ifdType) {
-        switch (ifdType) {
-            case IfdId.TYPE_IFD_0:
-                return (mOptions & OPTION_IFD_0) != 0;
-            case IfdId.TYPE_IFD_1:
-                return (mOptions & OPTION_IFD_1) != 0;
-            case IfdId.TYPE_IFD_EXIF:
-                return (mOptions & OPTION_IFD_EXIF) != 0;
-            case IfdId.TYPE_IFD_GPS:
-                return (mOptions & OPTION_IFD_GPS) != 0;
-            case IfdId.TYPE_IFD_INTEROPERABILITY:
-                return (mOptions & OPTION_IFD_INTEROPERABILITY) != 0;
-        }
-        return false;
-    }
-
-    private boolean isThumbnailRequested() {
-        return (mOptions & OPTION_THUMBNAIL) != 0;
-    }
-
-    private ExifParser(InputStream inputStream, int options, ExifInterface iRef)
-            throws IOException, ExifInvalidFormatException {
-        if (inputStream == null) {
-            throw new IOException("Null argument inputStream to ExifParser");
-        }
-        if (LOGV) {
-            Log.v(TAG, "Reading exif...");
-        }
-        mInterface = iRef;
-        mContainExifData = seekTiffData(inputStream);
-        mTiffStream = new CountedDataInputStream(inputStream);
-        mOptions = options;
-        if (!mContainExifData) {
-            return;
-        }
-
-        parseTiffHeader();
-        long offset = mTiffStream.readUnsignedInt();
-        if (offset > Integer.MAX_VALUE) {
-            throw new ExifInvalidFormatException("Invalid offset " + offset);
-        }
-        mIfd0Position = (int) offset;
-        mIfdType = IfdId.TYPE_IFD_0;
-        if (isIfdRequested(IfdId.TYPE_IFD_0) || needToParseOffsetsInCurrentIfd()) {
-            registerIfd(IfdId.TYPE_IFD_0, offset);
-            if (mIfd0Position > DEFAULT_IFD0_OFFSET) {
-                mDataAboveIfd0 = new byte[mIfd0Position - DEFAULT_IFD0_OFFSET];
-                read(mDataAboveIfd0);
-            }
-        }
-    }
-
-    /**
-     * Parses the the given InputStream with the given options
-     *
-     * @exception java.io.IOException
-     * @exception ExifInvalidFormatException
-     */
-    protected static ExifParser parse(InputStream inputStream, int options, ExifInterface iRef)
-            throws IOException, ExifInvalidFormatException {
-        return new ExifParser(inputStream, options, iRef);
-    }
-
-    /**
-     * Parses the the given InputStream with default options; that is, every IFD
-     * and thumbnaill will be parsed.
-     *
-     * @exception java.io.IOException
-     * @exception ExifInvalidFormatException
-     * @see #parse(java.io.InputStream, int)
-     */
-    protected static ExifParser parse(InputStream inputStream, ExifInterface iRef)
-            throws IOException, ExifInvalidFormatException {
-        return new ExifParser(inputStream, OPTION_IFD_0 | OPTION_IFD_1
-                | OPTION_IFD_EXIF | OPTION_IFD_GPS | OPTION_IFD_INTEROPERABILITY
-                | OPTION_THUMBNAIL, iRef);
-    }
-
-    /**
-     * Moves the parser forward and returns the next parsing event
-     *
-     * @exception java.io.IOException
-     * @exception ExifInvalidFormatException
-     * @see #EVENT_START_OF_IFD
-     * @see #EVENT_NEW_TAG
-     * @see #EVENT_VALUE_OF_REGISTERED_TAG
-     * @see #EVENT_COMPRESSED_IMAGE
-     * @see #EVENT_UNCOMPRESSED_STRIP
-     * @see #EVENT_END
-     */
-    protected int next() throws IOException, ExifInvalidFormatException {
-        if (!mContainExifData) {
-            return EVENT_END;
-        }
-        int offset = mTiffStream.getReadByteCount();
-        int endOfTags = mIfdStartOffset + OFFSET_SIZE + TAG_SIZE * mNumOfTagInIfd;
-        if (offset < endOfTags) {
-            mTag = readTag();
-            if (mTag == null) {
-                return next();
-            }
-            if (mNeedToParseOffsetsInCurrentIfd) {
-                checkOffsetOrImageTag(mTag);
-            }
-            return EVENT_NEW_TAG;
-        } else if (offset == endOfTags) {
-            // There is a link to ifd1 at the end of ifd0
-            if (mIfdType == IfdId.TYPE_IFD_0) {
-                long ifdOffset = readUnsignedLong();
-                if (isIfdRequested(IfdId.TYPE_IFD_1) || isThumbnailRequested()) {
-                    if (ifdOffset != 0) {
-                        registerIfd(IfdId.TYPE_IFD_1, ifdOffset);
-                    }
-                }
-            } else {
-                int offsetSize = 4;
-                // Some camera models use invalid length of the offset
-                if (mCorrespondingEvent.size() > 0) {
-                    offsetSize = mCorrespondingEvent.firstEntry().getKey() -
-                            mTiffStream.getReadByteCount();
-                }
-                if (offsetSize < 4) {
-                    Log.w(TAG, "Invalid size of link to next IFD: " + offsetSize);
-                } else {
-                    long ifdOffset = readUnsignedLong();
-                    if (ifdOffset != 0) {
-                        Log.w(TAG, "Invalid link to next IFD: " + ifdOffset);
-                    }
-                }
-            }
-        }
-        while (mCorrespondingEvent.size() != 0) {
-            Entry<Integer, Object> entry = mCorrespondingEvent.pollFirstEntry();
-            Object event = entry.getValue();
-            try {
-                skipTo(entry.getKey());
-            } catch (IOException e) {
-                Log.w(TAG, "Failed to skip to data at: " + entry.getKey() +
-                        " for " + event.getClass().getName() + ", the file may be broken.");
-                continue;
-            }
-            if (event instanceof IfdEvent) {
-                mIfdType = ((IfdEvent) event).ifd;
-                mNumOfTagInIfd = mTiffStream.readUnsignedShort();
-                mIfdStartOffset = entry.getKey();
-
-                if (mNumOfTagInIfd * TAG_SIZE + mIfdStartOffset + OFFSET_SIZE > mApp1End) {
-                    Log.w(TAG, "Invalid size of IFD " + mIfdType);
-                    return EVENT_END;
-                }
-
-                mNeedToParseOffsetsInCurrentIfd = needToParseOffsetsInCurrentIfd();
-                if (((IfdEvent) event).isRequested) {
-                    return EVENT_START_OF_IFD;
-                } else {
-                    skipRemainingTagsInCurrentIfd();
-                }
-            } else if (event instanceof ImageEvent) {
-                mImageEvent = (ImageEvent) event;
-                return mImageEvent.type;
-            } else {
-                ExifTagEvent tagEvent = (ExifTagEvent) event;
-                mTag = tagEvent.tag;
-                if (mTag.getDataType() != ExifTag.TYPE_UNDEFINED) {
-                    readFullTagValue(mTag);
-                    checkOffsetOrImageTag(mTag);
-                }
-                if (tagEvent.isRequested) {
-                    return EVENT_VALUE_OF_REGISTERED_TAG;
-                }
-            }
-        }
-        return EVENT_END;
-    }
-
-    /**
-     * Skips the tags area of current IFD, if the parser is not in the tag area,
-     * nothing will happen.
-     *
-     * @throws java.io.IOException
-     * @throws ExifInvalidFormatException
-     */
-    protected void skipRemainingTagsInCurrentIfd() throws IOException, ExifInvalidFormatException {
-        int endOfTags = mIfdStartOffset + OFFSET_SIZE + TAG_SIZE * mNumOfTagInIfd;
-        int offset = mTiffStream.getReadByteCount();
-        if (offset > endOfTags) {
-            return;
-        }
-        if (mNeedToParseOffsetsInCurrentIfd) {
-            while (offset < endOfTags) {
-                mTag = readTag();
-                offset += TAG_SIZE;
-                if (mTag == null) {
-                    continue;
-                }
-                checkOffsetOrImageTag(mTag);
-            }
-        } else {
-            skipTo(endOfTags);
-        }
-        long ifdOffset = readUnsignedLong();
-        // For ifd0, there is a link to ifd1 in the end of all tags
-        if (mIfdType == IfdId.TYPE_IFD_0
-                && (isIfdRequested(IfdId.TYPE_IFD_1) || isThumbnailRequested())) {
-            if (ifdOffset > 0) {
-                registerIfd(IfdId.TYPE_IFD_1, ifdOffset);
-            }
-        }
-    }
-
-    private boolean needToParseOffsetsInCurrentIfd() {
-        switch (mIfdType) {
-            case IfdId.TYPE_IFD_0:
-                return isIfdRequested(IfdId.TYPE_IFD_EXIF) || isIfdRequested(IfdId.TYPE_IFD_GPS)
-                        || isIfdRequested(IfdId.TYPE_IFD_INTEROPERABILITY)
-                        || isIfdRequested(IfdId.TYPE_IFD_1);
-            case IfdId.TYPE_IFD_1:
-                return isThumbnailRequested();
-            case IfdId.TYPE_IFD_EXIF:
-                // The offset to interoperability IFD is located in Exif IFD
-                return isIfdRequested(IfdId.TYPE_IFD_INTEROPERABILITY);
-            default:
-                return false;
-        }
-    }
-
-    /**
-     * If {@link #next()} return {@link #EVENT_NEW_TAG} or
-     * {@link #EVENT_VALUE_OF_REGISTERED_TAG}, call this function to get the
-     * corresponding tag.
-     * <p>
-     * For {@link #EVENT_NEW_TAG}, the tag may not contain the value if the size
-     * of the value is greater than 4 bytes. One should call
-     * {@link ExifTag#hasValue()} to check if the tag contains value. If there
-     * is no value,call {@link #registerForTagValue(ExifTag)} to have the parser
-     * emit {@link #EVENT_VALUE_OF_REGISTERED_TAG} when it reaches the area
-     * pointed by the offset.
-     * <p>
-     * When {@link #EVENT_VALUE_OF_REGISTERED_TAG} is emitted, the value of the
-     * tag will have already been read except for tags of undefined type. For
-     * tags of undefined type, call one of the read methods to get the value.
-     *
-     * @see #registerForTagValue(ExifTag)
-     * @see #read(byte[])
-     * @see #read(byte[], int, int)
-     * @see #readLong()
-     * @see #readRational()
-     * @see #readString(int)
-     * @see #readString(int, java.nio.charset.Charset)
-     */
-    protected ExifTag getTag() {
-        return mTag;
-    }
-
-    /**
-     * Gets number of tags in the current IFD area.
-     */
-    protected int getTagCountInCurrentIfd() {
-        return mNumOfTagInIfd;
-    }
-
-    /**
-     * Gets the ID of current IFD.
-     *
-     * @see IfdId#TYPE_IFD_0
-     * @see IfdId#TYPE_IFD_1
-     * @see IfdId#TYPE_IFD_GPS
-     * @see IfdId#TYPE_IFD_INTEROPERABILITY
-     * @see IfdId#TYPE_IFD_EXIF
-     */
-    protected int getCurrentIfd() {
-        return mIfdType;
-    }
-
-    /**
-     * When receiving {@link #EVENT_UNCOMPRESSED_STRIP}, call this function to
-     * get the index of this strip.
-     *
-     * @see #getStripCount()
-     */
-    protected int getStripIndex() {
-        return mImageEvent.stripIndex;
-    }
-
-    /**
-     * When receiving {@link #EVENT_UNCOMPRESSED_STRIP}, call this function to
-     * get the number of strip data.
-     *
-     * @see #getStripIndex()
-     */
-    protected int getStripCount() {
-        return mStripCount;
-    }
-
-    /**
-     * When receiving {@link #EVENT_UNCOMPRESSED_STRIP}, call this function to
-     * get the strip size.
-     */
-    protected int getStripSize() {
-        if (mStripSizeTag == null) {
-            return 0;
-        }
-        return (int) mStripSizeTag.getValueAt(0);
-    }
-
-    /**
-     * When receiving {@link #EVENT_COMPRESSED_IMAGE}, call this function to get
-     * the image data size.
-     */
-    protected int getCompressedImageSize() {
-        if (mJpegSizeTag == null) {
-            return 0;
-        }
-        return (int) mJpegSizeTag.getValueAt(0);
-    }
-
-    private void skipTo(int offset) throws IOException {
-        mTiffStream.skipTo(offset);
-        while (!mCorrespondingEvent.isEmpty() && mCorrespondingEvent.firstKey() < offset) {
-            mCorrespondingEvent.pollFirstEntry();
-        }
-    }
-
-    /**
-     * When getting {@link #EVENT_NEW_TAG} in the tag area of IFD, the tag may
-     * not contain the value if the size of the value is greater than 4 bytes.
-     * When the value is not available here, call this method so that the parser
-     * will emit {@link #EVENT_VALUE_OF_REGISTERED_TAG} when it reaches the area
-     * where the value is located.
-     *
-     * @see #EVENT_VALUE_OF_REGISTERED_TAG
-     */
-    protected void registerForTagValue(ExifTag tag) {
-        if (tag.getOffset() >= mTiffStream.getReadByteCount()) {
-            mCorrespondingEvent.put(tag.getOffset(), new ExifTagEvent(tag, true));
-        }
-    }
-
-    private void registerIfd(int ifdType, long offset) {
-        // Cast unsigned int to int since the offset is always smaller
-        // than the size of APP1 (65536)
-        mCorrespondingEvent.put((int) offset, new IfdEvent(ifdType, isIfdRequested(ifdType)));
-    }
-
-    private void registerCompressedImage(long offset) {
-        mCorrespondingEvent.put((int) offset, new ImageEvent(EVENT_COMPRESSED_IMAGE));
-    }
-
-    private void registerUncompressedStrip(int stripIndex, long offset) {
-        mCorrespondingEvent.put((int) offset, new ImageEvent(EVENT_UNCOMPRESSED_STRIP
-                , stripIndex));
-    }
-
-    private ExifTag readTag() throws IOException, ExifInvalidFormatException {
-        short tagId = mTiffStream.readShort();
-        short dataFormat = mTiffStream.readShort();
-        long numOfComp = mTiffStream.readUnsignedInt();
-        if (numOfComp > Integer.MAX_VALUE) {
-            throw new ExifInvalidFormatException(
-                    "Number of component is larger then Integer.MAX_VALUE");
-        }
-        // Some invalid image file contains invalid data type. Ignore those tags
-        if (!ExifTag.isValidType(dataFormat)) {
-            Log.w(TAG, String.format("Tag %04x: Invalid data type %d", tagId, dataFormat));
-            mTiffStream.skip(4);
-            return null;
-        }
-        // TODO: handle numOfComp overflow
-        ExifTag tag = new ExifTag(tagId, dataFormat, (int) numOfComp, mIfdType,
-                ((int) numOfComp) != ExifTag.SIZE_UNDEFINED);
-        int dataSize = tag.getDataSize();
-        if (dataSize > 4) {
-            long offset = mTiffStream.readUnsignedInt();
-            if (offset > Integer.MAX_VALUE) {
-                throw new ExifInvalidFormatException(
-                        "offset is larger then Integer.MAX_VALUE");
-            }
-            // Some invalid images put some undefined data before IFD0.
-            // Read the data here.
-            if (mDataAboveIfd0 != null
-                    && offset < mIfd0Position
-                    && dataFormat == ExifTag.TYPE_UNDEFINED) {
-                byte[] buf = new byte[(int) numOfComp];
-                System.arraycopy(mDataAboveIfd0, (int) offset - DEFAULT_IFD0_OFFSET,
-                        buf, 0, (int) numOfComp);
-                tag.setValue(buf);
-            } else {
-                tag.setOffset((int) offset);
-            }
-        } else {
-            boolean defCount = tag.hasDefinedCount();
-            // Set defined count to 0 so we can add \0 to non-terminated strings
-            tag.setHasDefinedCount(false);
-            // Read value
-            readFullTagValue(tag);
-            tag.setHasDefinedCount(defCount);
-            mTiffStream.skip(4 - dataSize);
-            // Set the offset to the position of value.
-            tag.setOffset(mTiffStream.getReadByteCount() - 4);
-        }
-        return tag;
-    }
-
-    /**
-     * Check the tag, if the tag is one of the offset tag that points to the IFD
-     * or image the caller is interested in, register the IFD or image.
-     */
-    private void checkOffsetOrImageTag(ExifTag tag) {
-        // Some invalid formattd image contains tag with 0 size.
-        if (tag.getComponentCount() == 0) {
-            return;
-        }
-        short tid = tag.getTagId();
-        int ifd = tag.getIfd();
-        if (tid == TAG_EXIF_IFD && checkAllowed(ifd, ExifInterface.TAG_EXIF_IFD)) {
-            if (isIfdRequested(IfdId.TYPE_IFD_EXIF)
-                    || isIfdRequested(IfdId.TYPE_IFD_INTEROPERABILITY)) {
-                registerIfd(IfdId.TYPE_IFD_EXIF, tag.getValueAt(0));
-            }
-        } else if (tid == TAG_GPS_IFD && checkAllowed(ifd, ExifInterface.TAG_GPS_IFD)) {
-            if (isIfdRequested(IfdId.TYPE_IFD_GPS)) {
-                registerIfd(IfdId.TYPE_IFD_GPS, tag.getValueAt(0));
-            }
-        } else if (tid == TAG_INTEROPERABILITY_IFD
-                && checkAllowed(ifd, ExifInterface.TAG_INTEROPERABILITY_IFD)) {
-            if (isIfdRequested(IfdId.TYPE_IFD_INTEROPERABILITY)) {
-                registerIfd(IfdId.TYPE_IFD_INTEROPERABILITY, tag.getValueAt(0));
-            }
-        } else if (tid == TAG_JPEG_INTERCHANGE_FORMAT
-                && checkAllowed(ifd, ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT)) {
-            if (isThumbnailRequested()) {
-                registerCompressedImage(tag.getValueAt(0));
-            }
-        } else if (tid == TAG_JPEG_INTERCHANGE_FORMAT_LENGTH
-                && checkAllowed(ifd, ExifInterface.TAG_JPEG_INTERCHANGE_FORMAT_LENGTH)) {
-            if (isThumbnailRequested()) {
-                mJpegSizeTag = tag;
-            }
-        } else if (tid == TAG_STRIP_OFFSETS && checkAllowed(ifd, ExifInterface.TAG_STRIP_OFFSETS)) {
-            if (isThumbnailRequested()) {
-                if (tag.hasValue()) {
-                    for (int i = 0; i < tag.getComponentCount(); i++) {
-                        if (tag.getDataType() == ExifTag.TYPE_UNSIGNED_SHORT) {
-                            registerUncompressedStrip(i, tag.getValueAt(i));
-                        } else {
-                            registerUncompressedStrip(i, tag.getValueAt(i));
-                        }
-                    }
-                } else {
-                    mCorrespondingEvent.put(tag.getOffset(), new ExifTagEvent(tag, false));
-                }
-            }
-        } else if (tid == TAG_STRIP_BYTE_COUNTS
-                && checkAllowed(ifd, ExifInterface.TAG_STRIP_BYTE_COUNTS)
-                && isThumbnailRequested() && tag.hasValue()) {
-            mStripSizeTag = tag;
-        }
-    }
-
-    private boolean checkAllowed(int ifd, int tagId) {
-        int info = mInterface.getTagInfo().get(tagId);
-        if (info == ExifInterface.DEFINITION_NULL) {
-            return false;
-        }
-        return ExifInterface.isIfdAllowed(info, ifd);
-    }
-
-    protected void readFullTagValue(ExifTag tag) throws IOException {
-        // Some invalid images contains tags with wrong size, check it here
-        short type = tag.getDataType();
-        if (type == ExifTag.TYPE_ASCII || type == ExifTag.TYPE_UNDEFINED ||
-                type == ExifTag.TYPE_UNSIGNED_BYTE) {
-            int size = tag.getComponentCount();
-            if (mCorrespondingEvent.size() > 0) {
-                if (mCorrespondingEvent.firstEntry().getKey() < mTiffStream.getReadByteCount()
-                        + size) {
-                    Object event = mCorrespondingEvent.firstEntry().getValue();
-                    if (event instanceof ImageEvent) {
-                        // Tag value overlaps thumbnail, ignore thumbnail.
-                        Log.w(TAG, "Thumbnail overlaps value for tag: \n" + tag.toString());
-                        Entry<Integer, Object> entry = mCorrespondingEvent.pollFirstEntry();
-                        Log.w(TAG, "Invalid thumbnail offset: " + entry.getKey());
-                    } else {
-                        // Tag value overlaps another tag, shorten count
-                        if (event instanceof IfdEvent) {
-                            Log.w(TAG, "Ifd " + ((IfdEvent) event).ifd
-                                    + " overlaps value for tag: \n" + tag.toString());
-                        } else if (event instanceof ExifTagEvent) {
-                            Log.w(TAG, "Tag value for tag: \n"
-                                    + ((ExifTagEvent) event).tag.toString()
-                                    + " overlaps value for tag: \n" + tag.toString());
-                        }
-                        size = mCorrespondingEvent.firstEntry().getKey()
-                                - mTiffStream.getReadByteCount();
-                        Log.w(TAG, "Invalid size of tag: \n" + tag.toString()
-                                + " setting count to: " + size);
-                        tag.forceSetComponentCount(size);
-                    }
-                }
-            }
-        }
-        switch (tag.getDataType()) {
-            case ExifTag.TYPE_UNSIGNED_BYTE:
-            case ExifTag.TYPE_UNDEFINED: {
-                byte buf[] = new byte[tag.getComponentCount()];
-                read(buf);
-                tag.setValue(buf);
-            }
-                break;
-            case ExifTag.TYPE_ASCII:
-                tag.setValue(readString(tag.getComponentCount()));
-                break;
-            case ExifTag.TYPE_UNSIGNED_LONG: {
-                long value[] = new long[tag.getComponentCount()];
-                for (int i = 0, n = value.length; i < n; i++) {
-                    value[i] = readUnsignedLong();
-                }
-                tag.setValue(value);
-            }
-                break;
-            case ExifTag.TYPE_UNSIGNED_RATIONAL: {
-                Rational value[] = new Rational[tag.getComponentCount()];
-                for (int i = 0, n = value.length; i < n; i++) {
-                    value[i] = readUnsignedRational();
-                }
-                tag.setValue(value);
-            }
-                break;
-            case ExifTag.TYPE_UNSIGNED_SHORT: {
-                int value[] = new int[tag.getComponentCount()];
-                for (int i = 0, n = value.length; i < n; i++) {
-                    value[i] = readUnsignedShort();
-                }
-                tag.setValue(value);
-            }
-                break;
-            case ExifTag.TYPE_LONG: {
-                int value[] = new int[tag.getComponentCount()];
-                for (int i = 0, n = value.length; i < n; i++) {
-                    value[i] = readLong();
-                }
-                tag.setValue(value);
-            }
-                break;
-            case ExifTag.TYPE_RATIONAL: {
-                Rational value[] = new Rational[tag.getComponentCount()];
-                for (int i = 0, n = value.length; i < n; i++) {
-                    value[i] = readRational();
-                }
-                tag.setValue(value);
-            }
-                break;
-        }
-        if (LOGV) {
-            Log.v(TAG, "\n" + tag.toString());
-        }
-    }
-
-    private void parseTiffHeader() throws IOException,
-            ExifInvalidFormatException {
-        short byteOrder = mTiffStream.readShort();
-        if (LITTLE_ENDIAN_TAG == byteOrder) {
-            mTiffStream.setByteOrder(ByteOrder.LITTLE_ENDIAN);
-        } else if (BIG_ENDIAN_TAG == byteOrder) {
-            mTiffStream.setByteOrder(ByteOrder.BIG_ENDIAN);
-        } else {
-            throw new ExifInvalidFormatException("Invalid TIFF header");
-        }
-
-        if (mTiffStream.readShort() != TIFF_HEADER_TAIL) {
-            throw new ExifInvalidFormatException("Invalid TIFF header");
-        }
-    }
-
-    private boolean seekTiffData(InputStream inputStream) throws IOException,
-            ExifInvalidFormatException {
-        CountedDataInputStream dataStream = new CountedDataInputStream(inputStream);
-        if (dataStream.readShort() != JpegHeader.SOI) {
-            throw new ExifInvalidFormatException("Invalid JPEG format");
-        }
-
-        short marker = dataStream.readShort();
-        while (marker != JpegHeader.EOI
-                && !JpegHeader.isSofMarker(marker)) {
-            int length = dataStream.readUnsignedShort();
-            // Some invalid formatted image contains multiple APP1,
-            // try to find the one with Exif data.
-            if (marker == JpegHeader.APP1) {
-                int header = 0;
-                short headerTail = 0;
-                if (length >= 8) {
-                    header = dataStream.readInt();
-                    headerTail = dataStream.readShort();
-                    length -= 6;
-                    if (header == EXIF_HEADER && headerTail == EXIF_HEADER_TAIL) {
-                        mTiffStartPosition = dataStream.getReadByteCount();
-                        mApp1End = length;
-                        mOffsetToApp1EndFromSOF = mTiffStartPosition + mApp1End;
-                        return true;
-                    }
-                }
-            }
-            if (length < 2 || (length - 2) != dataStream.skip(length - 2)) {
-                Log.w(TAG, "Invalid JPEG format.");
-                return false;
-            }
-            marker = dataStream.readShort();
-        }
-        return false;
-    }
-
-    protected int getOffsetToExifEndFromSOF() {
-        return mOffsetToApp1EndFromSOF;
-    }
-
-    protected int getTiffStartPosition() {
-        return mTiffStartPosition;
-    }
-
-    /**
-     * Reads bytes from the InputStream.
-     */
-    protected int read(byte[] buffer, int offset, int length) throws IOException {
-        return mTiffStream.read(buffer, offset, length);
-    }
-
-    /**
-     * Equivalent to read(buffer, 0, buffer.length).
-     */
-    protected int read(byte[] buffer) throws IOException {
-        return mTiffStream.read(buffer);
-    }
-
-    /**
-     * Reads a String from the InputStream with US-ASCII charset. The parser
-     * will read n bytes and convert it to ascii string. This is used for
-     * reading values of type {@link ExifTag#TYPE_ASCII}.
-     */
-    protected String readString(int n) throws IOException {
-        return readString(n, US_ASCII);
-    }
-
-    /**
-     * Reads a String from the InputStream with the given charset. The parser
-     * will read n bytes and convert it to string. This is used for reading
-     * values of type {@link ExifTag#TYPE_ASCII}.
-     */
-    protected String readString(int n, Charset charset) throws IOException {
-        if (n > 0) {
-            return mTiffStream.readString(n, charset);
-        } else {
-            return "";
-        }
-    }
-
-    /**
-     * Reads value of type {@link ExifTag#TYPE_UNSIGNED_SHORT} from the
-     * InputStream.
-     */
-    protected int readUnsignedShort() throws IOException {
-        return mTiffStream.readShort() & 0xffff;
-    }
-
-    /**
-     * Reads value of type {@link ExifTag#TYPE_UNSIGNED_LONG} from the
-     * InputStream.
-     */
-    protected long readUnsignedLong() throws IOException {
-        return readLong() & 0xffffffffL;
-    }
-
-    /**
-     * Reads value of type {@link ExifTag#TYPE_UNSIGNED_RATIONAL} from the
-     * InputStream.
-     */
-    protected Rational readUnsignedRational() throws IOException {
-        long nomi = readUnsignedLong();
-        long denomi = readUnsignedLong();
-        return new Rational(nomi, denomi);
-    }
-
-    /**
-     * Reads value of type {@link ExifTag#TYPE_LONG} from the InputStream.
-     */
-    protected int readLong() throws IOException {
-        return mTiffStream.readInt();
-    }
-
-    /**
-     * Reads value of type {@link ExifTag#TYPE_RATIONAL} from the InputStream.
-     */
-    protected Rational readRational() throws IOException {
-        int nomi = readLong();
-        int denomi = readLong();
-        return new Rational(nomi, denomi);
-    }
-
-    private static class ImageEvent {
-        int stripIndex;
-        int type;
-
-        ImageEvent(int type) {
-            this.stripIndex = 0;
-            this.type = type;
-        }
-
-        ImageEvent(int type, int stripIndex) {
-            this.type = type;
-            this.stripIndex = stripIndex;
-        }
-    }
-
-    private static class IfdEvent {
-        int ifd;
-        boolean isRequested;
-
-        IfdEvent(int ifd, boolean isInterestedIfd) {
-            this.ifd = ifd;
-            this.isRequested = isInterestedIfd;
-        }
-    }
-
-    private static class ExifTagEvent {
-        ExifTag tag;
-        boolean isRequested;
-
-        ExifTagEvent(ExifTag tag, boolean isRequireByUser) {
-            this.tag = tag;
-            this.isRequested = isRequireByUser;
-        }
-    }
-
-    /**
-     * Gets the byte order of the current InputStream.
-     */
-    protected ByteOrder getByteOrder() {
-        return mTiffStream.getByteOrder();
-    }
-}
diff --git a/src/com/android/messaging/util/exif/ExifReader.java b/src/com/android/messaging/util/exif/ExifReader.java
deleted file mode 100644
index eece48a..0000000
--- a/src/com/android/messaging/util/exif/ExifReader.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-import android.util.Log;
-import com.android.messaging.util.LogUtil;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * This class reads the EXIF header of a JPEG file and stores it in
- * {@link ExifData}.
- */
-class ExifReader {
-    private static final String TAG = LogUtil.BUGLE_TAG;
-
-    private final ExifInterface mInterface;
-
-    ExifReader(ExifInterface iRef) {
-        mInterface = iRef;
-    }
-
-    /**
-     * Parses the inputStream and and returns the EXIF data in an
-     * {@link ExifData}.
-     *
-     * @throws ExifInvalidFormatException
-     * @throws java.io.IOException
-     */
-    protected ExifData read(InputStream inputStream) throws ExifInvalidFormatException,
-            IOException {
-        ExifParser parser = ExifParser.parse(inputStream, mInterface);
-        ExifData exifData = new ExifData(parser.getByteOrder());
-        ExifTag tag = null;
-
-        int event = parser.next();
-        while (event != ExifParser.EVENT_END) {
-            switch (event) {
-                case ExifParser.EVENT_START_OF_IFD:
-                    exifData.addIfdData(new IfdData(parser.getCurrentIfd()));
-                    break;
-                case ExifParser.EVENT_NEW_TAG:
-                    tag = parser.getTag();
-                    if (!tag.hasValue()) {
-                        parser.registerForTagValue(tag);
-                    } else {
-                        exifData.getIfdData(tag.getIfd()).setTag(tag);
-                    }
-                    break;
-                case ExifParser.EVENT_VALUE_OF_REGISTERED_TAG:
-                    tag = parser.getTag();
-                    if (tag.getDataType() == ExifTag.TYPE_UNDEFINED) {
-                        parser.readFullTagValue(tag);
-                    }
-                    exifData.getIfdData(tag.getIfd()).setTag(tag);
-                    break;
-                case ExifParser.EVENT_COMPRESSED_IMAGE:
-                    byte buf[] = new byte[parser.getCompressedImageSize()];
-                    if (buf.length == parser.read(buf)) {
-                        exifData.setCompressedThumbnail(buf);
-                    } else {
-                        Log.w(TAG, "Failed to read the compressed thumbnail");
-                    }
-                    break;
-                case ExifParser.EVENT_UNCOMPRESSED_STRIP:
-                    buf = new byte[parser.getStripSize()];
-                    if (buf.length == parser.read(buf)) {
-                        exifData.setStripBytes(parser.getStripIndex(), buf);
-                    } else {
-                        Log.w(TAG, "Failed to read the strip bytes");
-                    }
-                    break;
-            }
-            event = parser.next();
-        }
-        return exifData;
-    }
-}
diff --git a/src/com/android/messaging/util/exif/ExifTag.java b/src/com/android/messaging/util/exif/ExifTag.java
deleted file mode 100644
index da6f4ed..0000000
--- a/src/com/android/messaging/util/exif/ExifTag.java
+++ /dev/null
@@ -1,1008 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-import java.nio.charset.Charset;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Date;
-
-/**
- * This class stores information of an EXIF tag. For more information about
- * defined EXIF tags, please read the Jeita EXIF 2.2 standard. Tags should be
- * instantiated using {@link ExifInterface#buildTag}.
- *
- * @see ExifInterface
- */
-public class ExifTag {
-    /**
-     * The BYTE type in the EXIF standard. An 8-bit unsigned integer.
-     */
-    public static final short TYPE_UNSIGNED_BYTE = 1;
-    /**
-     * The ASCII type in the EXIF standard. An 8-bit byte containing one 7-bit
-     * ASCII code. The final byte is terminated with NULL.
-     */
-    public static final short TYPE_ASCII = 2;
-    /**
-     * The SHORT type in the EXIF standard. A 16-bit (2-byte) unsigned integer
-     */
-    public static final short TYPE_UNSIGNED_SHORT = 3;
-    /**
-     * The LONG type in the EXIF standard. A 32-bit (4-byte) unsigned integer
-     */
-    public static final short TYPE_UNSIGNED_LONG = 4;
-    /**
-     * The RATIONAL type of EXIF standard. It consists of two LONGs. The first
-     * one is the numerator and the second one expresses the denominator.
-     */
-    public static final short TYPE_UNSIGNED_RATIONAL = 5;
-    /**
-     * The UNDEFINED type in the EXIF standard. An 8-bit byte that can take any
-     * value depending on the field definition.
-     */
-    public static final short TYPE_UNDEFINED = 7;
-    /**
-     * The SLONG type in the EXIF standard. A 32-bit (4-byte) signed integer
-     * (2's complement notation).
-     */
-    public static final short TYPE_LONG = 9;
-    /**
-     * The SRATIONAL type of EXIF standard. It consists of two SLONGs. The first
-     * one is the numerator and the second one is the denominator.
-     */
-    public static final short TYPE_RATIONAL = 10;
-
-    private static Charset US_ASCII = Charset.forName("US-ASCII");
-    private static final int TYPE_TO_SIZE_MAP[] = new int[11];
-    private static final int UNSIGNED_SHORT_MAX = 65535;
-    private static final long UNSIGNED_LONG_MAX = 4294967295L;
-    private static final long LONG_MAX = Integer.MAX_VALUE;
-    private static final long LONG_MIN = Integer.MIN_VALUE;
-
-    static {
-        TYPE_TO_SIZE_MAP[TYPE_UNSIGNED_BYTE] = 1;
-        TYPE_TO_SIZE_MAP[TYPE_ASCII] = 1;
-        TYPE_TO_SIZE_MAP[TYPE_UNSIGNED_SHORT] = 2;
-        TYPE_TO_SIZE_MAP[TYPE_UNSIGNED_LONG] = 4;
-        TYPE_TO_SIZE_MAP[TYPE_UNSIGNED_RATIONAL] = 8;
-        TYPE_TO_SIZE_MAP[TYPE_UNDEFINED] = 1;
-        TYPE_TO_SIZE_MAP[TYPE_LONG] = 4;
-        TYPE_TO_SIZE_MAP[TYPE_RATIONAL] = 8;
-    }
-
-    static final int SIZE_UNDEFINED = 0;
-
-    // Exif TagId
-    private final short mTagId;
-    // Exif Tag Type
-    private final short mDataType;
-    // If tag has defined count
-    private boolean mHasDefinedDefaultComponentCount;
-    // Actual data count in tag (should be number of elements in value array)
-    private int mComponentCountActual;
-    // The ifd that this tag should be put in
-    private int mIfd;
-    // The value (array of elements of type Tag Type)
-    private Object mValue;
-    // Value offset in exif header.
-    private int mOffset;
-
-    private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("yyyy:MM:dd kk:mm:ss");
-
-    /**
-     * Returns true if the given IFD is a valid IFD.
-     */
-    public static boolean isValidIfd(int ifdId) {
-        return ifdId == IfdId.TYPE_IFD_0 || ifdId == IfdId.TYPE_IFD_1
-                || ifdId == IfdId.TYPE_IFD_EXIF || ifdId == IfdId.TYPE_IFD_INTEROPERABILITY
-                || ifdId == IfdId.TYPE_IFD_GPS;
-    }
-
-    /**
-     * Returns true if a given type is a valid tag type.
-     */
-    public static boolean isValidType(short type) {
-        return type == TYPE_UNSIGNED_BYTE || type == TYPE_ASCII ||
-                type == TYPE_UNSIGNED_SHORT || type == TYPE_UNSIGNED_LONG ||
-                type == TYPE_UNSIGNED_RATIONAL || type == TYPE_UNDEFINED ||
-                type == TYPE_LONG || type == TYPE_RATIONAL;
-    }
-
-    // Use builtTag in ExifInterface instead of constructor.
-    ExifTag(short tagId, short type, int componentCount, int ifd,
-            boolean hasDefinedComponentCount) {
-        mTagId = tagId;
-        mDataType = type;
-        mComponentCountActual = componentCount;
-        mHasDefinedDefaultComponentCount = hasDefinedComponentCount;
-        mIfd = ifd;
-        mValue = null;
-    }
-
-    /**
-     * Gets the element size of the given data type in bytes.
-     *
-     * @see #TYPE_ASCII
-     * @see #TYPE_LONG
-     * @see #TYPE_RATIONAL
-     * @see #TYPE_UNDEFINED
-     * @see #TYPE_UNSIGNED_BYTE
-     * @see #TYPE_UNSIGNED_LONG
-     * @see #TYPE_UNSIGNED_RATIONAL
-     * @see #TYPE_UNSIGNED_SHORT
-     */
-    public static int getElementSize(short type) {
-        return TYPE_TO_SIZE_MAP[type];
-    }
-
-    /**
-     * Returns the ID of the IFD this tag belongs to.
-     *
-     * @see IfdId#TYPE_IFD_0
-     * @see IfdId#TYPE_IFD_1
-     * @see IfdId#TYPE_IFD_EXIF
-     * @see IfdId#TYPE_IFD_GPS
-     * @see IfdId#TYPE_IFD_INTEROPERABILITY
-     */
-    public int getIfd() {
-        return mIfd;
-    }
-
-    protected void setIfd(int ifdId) {
-        mIfd = ifdId;
-    }
-
-    /**
-     * Gets the TID of this tag.
-     */
-    public short getTagId() {
-        return mTagId;
-    }
-
-    /**
-     * Gets the data type of this tag
-     *
-     * @see #TYPE_ASCII
-     * @see #TYPE_LONG
-     * @see #TYPE_RATIONAL
-     * @see #TYPE_UNDEFINED
-     * @see #TYPE_UNSIGNED_BYTE
-     * @see #TYPE_UNSIGNED_LONG
-     * @see #TYPE_UNSIGNED_RATIONAL
-     * @see #TYPE_UNSIGNED_SHORT
-     */
-    public short getDataType() {
-        return mDataType;
-    }
-
-    /**
-     * Gets the total data size in bytes of the value of this tag.
-     */
-    public int getDataSize() {
-        return getComponentCount() * getElementSize(getDataType());
-    }
-
-    /**
-     * Gets the component count of this tag.
-     */
-
-    // TODO: fix integer overflows with this
-    public int getComponentCount() {
-        return mComponentCountActual;
-    }
-
-    /**
-     * Sets the component count of this tag. Call this function before
-     * setValue() if the length of value does not match the component count.
-     */
-    protected void forceSetComponentCount(int count) {
-        mComponentCountActual = count;
-    }
-
-    /**
-     * Returns true if this ExifTag contains value; otherwise, this tag will
-     * contain an offset value that is determined when the tag is written.
-     */
-    public boolean hasValue() {
-        return mValue != null;
-    }
-
-    /**
-     * Sets integer values into this tag. This method should be used for tags of
-     * type {@link #TYPE_UNSIGNED_SHORT}. This method will fail if:
-     * <ul>
-     * <li>The component type of this tag is not {@link #TYPE_UNSIGNED_SHORT},
-     * {@link #TYPE_UNSIGNED_LONG}, or {@link #TYPE_LONG}.</li>
-     * <li>The value overflows.</li>
-     * <li>The value.length does NOT match the component count in the definition
-     * for this tag.</li>
-     * </ul>
-     */
-    public boolean setValue(int[] value) {
-        if (checkBadComponentCount(value.length)) {
-            return false;
-        }
-        if (mDataType != TYPE_UNSIGNED_SHORT && mDataType != TYPE_LONG &&
-                mDataType != TYPE_UNSIGNED_LONG) {
-            return false;
-        }
-        if (mDataType == TYPE_UNSIGNED_SHORT && checkOverflowForUnsignedShort(value)) {
-            return false;
-        } else if (mDataType == TYPE_UNSIGNED_LONG && checkOverflowForUnsignedLong(value)) {
-            return false;
-        }
-
-        long[] data = new long[value.length];
-        for (int i = 0; i < value.length; i++) {
-            data[i] = value[i];
-        }
-        mValue = data;
-        mComponentCountActual = value.length;
-        return true;
-    }
-
-    /**
-     * Sets integer value into this tag. This method should be used for tags of
-     * type {@link #TYPE_UNSIGNED_SHORT}, or {@link #TYPE_LONG}. This method
-     * will fail if:
-     * <ul>
-     * <li>The component type of this tag is not {@link #TYPE_UNSIGNED_SHORT},
-     * {@link #TYPE_UNSIGNED_LONG}, or {@link #TYPE_LONG}.</li>
-     * <li>The value overflows.</li>
-     * <li>The component count in the definition of this tag is not 1.</li>
-     * </ul>
-     */
-    public boolean setValue(int value) {
-        return setValue(new int[] {
-                value
-        });
-    }
-
-    /**
-     * Sets long values into this tag. This method should be used for tags of
-     * type {@link #TYPE_UNSIGNED_LONG}. This method will fail if:
-     * <ul>
-     * <li>The component type of this tag is not {@link #TYPE_UNSIGNED_LONG}.</li>
-     * <li>The value overflows.</li>
-     * <li>The value.length does NOT match the component count in the definition
-     * for this tag.</li>
-     * </ul>
-     */
-    public boolean setValue(long[] value) {
-        if (checkBadComponentCount(value.length) || mDataType != TYPE_UNSIGNED_LONG) {
-            return false;
-        }
-        if (checkOverflowForUnsignedLong(value)) {
-            return false;
-        }
-        mValue = value;
-        mComponentCountActual = value.length;
-        return true;
-    }
-
-    /**
-     * Sets long values into this tag. This method should be used for tags of
-     * type {@link #TYPE_UNSIGNED_LONG}. This method will fail if:
-     * <ul>
-     * <li>The component type of this tag is not {@link #TYPE_UNSIGNED_LONG}.</li>
-     * <li>The value overflows.</li>
-     * <li>The component count in the definition for this tag is not 1.</li>
-     * </ul>
-     */
-    public boolean setValue(long value) {
-        return setValue(new long[] {
-                value
-        });
-    }
-
-    /**
-     * Sets a string value into this tag. This method should be used for tags of
-     * type {@link #TYPE_ASCII}. The string is converted to an ASCII string.
-     * Characters that cannot be converted are replaced with '?'. The length of
-     * the string must be equal to either (component count -1) or (component
-     * count). The final byte will be set to the string null terminator '\0',
-     * overwriting the last character in the string if the value.length is equal
-     * to the component count. This method will fail if:
-     * <ul>
-     * <li>The data type is not {@link #TYPE_ASCII} or {@link #TYPE_UNDEFINED}.</li>
-     * <li>The length of the string is not equal to (component count -1) or
-     * (component count) in the definition for this tag.</li>
-     * </ul>
-     */
-    public boolean setValue(String value) {
-        if (mDataType != TYPE_ASCII && mDataType != TYPE_UNDEFINED) {
-            return false;
-        }
-
-        byte[] buf = value.getBytes(US_ASCII);
-        byte[] finalBuf = buf;
-        if (buf.length > 0) {
-            finalBuf = (buf[buf.length - 1] == 0 || mDataType == TYPE_UNDEFINED) ? buf : Arrays
-                .copyOf(buf, buf.length + 1);
-        } else if (mDataType == TYPE_ASCII && mComponentCountActual == 1) {
-            finalBuf = new byte[] { 0 };
-        }
-        int count = finalBuf.length;
-        if (checkBadComponentCount(count)) {
-            return false;
-        }
-        mComponentCountActual = count;
-        mValue = finalBuf;
-        return true;
-    }
-
-    /**
-     * Sets Rational values into this tag. This method should be used for tags
-     * of type {@link #TYPE_UNSIGNED_RATIONAL}, or {@link #TYPE_RATIONAL}. This
-     * method will fail if:
-     * <ul>
-     * <li>The component type of this tag is not {@link #TYPE_UNSIGNED_RATIONAL}
-     * or {@link #TYPE_RATIONAL}.</li>
-     * <li>The value overflows.</li>
-     * <li>The value.length does NOT match the component count in the definition
-     * for this tag.</li>
-     * </ul>
-     *
-     * @see Rational
-     */
-    public boolean setValue(Rational[] value) {
-        if (checkBadComponentCount(value.length)) {
-            return false;
-        }
-        if (mDataType != TYPE_UNSIGNED_RATIONAL && mDataType != TYPE_RATIONAL) {
-            return false;
-        }
-        if (mDataType == TYPE_UNSIGNED_RATIONAL && checkOverflowForUnsignedRational(value)) {
-            return false;
-        } else if (mDataType == TYPE_RATIONAL && checkOverflowForRational(value)) {
-            return false;
-        }
-
-        mValue = value;
-        mComponentCountActual = value.length;
-        return true;
-    }
-
-    /**
-     * Sets a Rational value into this tag. This method should be used for tags
-     * of type {@link #TYPE_UNSIGNED_RATIONAL}, or {@link #TYPE_RATIONAL}. This
-     * method will fail if:
-     * <ul>
-     * <li>The component type of this tag is not {@link #TYPE_UNSIGNED_RATIONAL}
-     * or {@link #TYPE_RATIONAL}.</li>
-     * <li>The value overflows.</li>
-     * <li>The component count in the definition for this tag is not 1.</li>
-     * </ul>
-     *
-     * @see Rational
-     */
-    public boolean setValue(Rational value) {
-        return setValue(new Rational[] {
-                value
-        });
-    }
-
-    /**
-     * Sets byte values into this tag. This method should be used for tags of
-     * type {@link #TYPE_UNSIGNED_BYTE} or {@link #TYPE_UNDEFINED}. This method
-     * will fail if:
-     * <ul>
-     * <li>The component type of this tag is not {@link #TYPE_UNSIGNED_BYTE} or
-     * {@link #TYPE_UNDEFINED} .</li>
-     * <li>The length does NOT match the component count in the definition for
-     * this tag.</li>
-     * </ul>
-     */
-    public boolean setValue(byte[] value, int offset, int length) {
-        if (checkBadComponentCount(length)) {
-            return false;
-        }
-        if (mDataType != TYPE_UNSIGNED_BYTE && mDataType != TYPE_UNDEFINED) {
-            return false;
-        }
-        mValue = new byte[length];
-        System.arraycopy(value, offset, mValue, 0, length);
-        mComponentCountActual = length;
-        return true;
-    }
-
-    /**
-     * Equivalent to setValue(value, 0, value.length).
-     */
-    public boolean setValue(byte[] value) {
-        return setValue(value, 0, value.length);
-    }
-
-    /**
-     * Sets byte value into this tag. This method should be used for tags of
-     * type {@link #TYPE_UNSIGNED_BYTE} or {@link #TYPE_UNDEFINED}. This method
-     * will fail if:
-     * <ul>
-     * <li>The component type of this tag is not {@link #TYPE_UNSIGNED_BYTE} or
-     * {@link #TYPE_UNDEFINED} .</li>
-     * <li>The component count in the definition for this tag is not 1.</li>
-     * </ul>
-     */
-    public boolean setValue(byte value) {
-        return setValue(new byte[] {
-                value
-        });
-    }
-
-    /**
-     * Sets the value for this tag using an appropriate setValue method for the
-     * given object. This method will fail if:
-     * <ul>
-     * <li>The corresponding setValue method for the class of the object passed
-     * in would fail.</li>
-     * <li>There is no obvious way to cast the object passed in into an EXIF tag
-     * type.</li>
-     * </ul>
-     */
-    public boolean setValue(Object obj) {
-        if (obj == null) {
-            return false;
-        } else if (obj instanceof Short) {
-            return setValue(((Short) obj).shortValue() & 0x0ffff);
-        } else if (obj instanceof String) {
-            return setValue((String) obj);
-        } else if (obj instanceof int[]) {
-            return setValue((int[]) obj);
-        } else if (obj instanceof long[]) {
-            return setValue((long[]) obj);
-        } else if (obj instanceof Rational) {
-            return setValue((Rational) obj);
-        } else if (obj instanceof Rational[]) {
-            return setValue((Rational[]) obj);
-        } else if (obj instanceof byte[]) {
-            return setValue((byte[]) obj);
-        } else if (obj instanceof Integer) {
-            return setValue(((Integer) obj).intValue());
-        } else if (obj instanceof Long) {
-            return setValue(((Long) obj).longValue());
-        } else if (obj instanceof Byte) {
-            return setValue(((Byte) obj).byteValue());
-        } else if (obj instanceof Short[]) {
-            // Nulls in this array are treated as zeroes.
-            Short[] arr = (Short[]) obj;
-            int[] fin = new int[arr.length];
-            for (int i = 0; i < arr.length; i++) {
-                fin[i] = (arr[i] == null) ? 0 : arr[i].shortValue() & 0x0ffff;
-            }
-            return setValue(fin);
-        } else if (obj instanceof Integer[]) {
-            // Nulls in this array are treated as zeroes.
-            Integer[] arr = (Integer[]) obj;
-            int[] fin = new int[arr.length];
-            for (int i = 0; i < arr.length; i++) {
-                fin[i] = (arr[i] == null) ? 0 : arr[i].intValue();
-            }
-            return setValue(fin);
-        } else if (obj instanceof Long[]) {
-            // Nulls in this array are treated as zeroes.
-            Long[] arr = (Long[]) obj;
-            long[] fin = new long[arr.length];
-            for (int i = 0; i < arr.length; i++) {
-                fin[i] = (arr[i] == null) ? 0 : arr[i].longValue();
-            }
-            return setValue(fin);
-        } else if (obj instanceof Byte[]) {
-            // Nulls in this array are treated as zeroes.
-            Byte[] arr = (Byte[]) obj;
-            byte[] fin = new byte[arr.length];
-            for (int i = 0; i < arr.length; i++) {
-                fin[i] = (arr[i] == null) ? 0 : arr[i].byteValue();
-            }
-            return setValue(fin);
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Sets a timestamp to this tag. The method converts the timestamp with the
-     * format of "yyyy:MM:dd kk:mm:ss" and calls {@link #setValue(String)}. This
-     * method will fail if the data type is not {@link #TYPE_ASCII} or the
-     * component count of this tag is not 20 or undefined.
-     *
-     * @param time the number of milliseconds since Jan. 1, 1970 GMT
-     * @return true on success
-     */
-    public boolean setTimeValue(long time) {
-        // synchronized on TIME_FORMAT as SimpleDateFormat is not thread safe
-        synchronized (TIME_FORMAT) {
-            return setValue(TIME_FORMAT.format(new Date(time)));
-        }
-    }
-
-    /**
-     * Gets the value as a String. This method should be used for tags of type
-     * {@link #TYPE_ASCII}.
-     *
-     * @return the value as a String, or null if the tag's value does not exist
-     *         or cannot be converted to a String.
-     */
-    public String getValueAsString() {
-        if (mValue == null) {
-            return null;
-        } else if (mValue instanceof String) {
-            return (String) mValue;
-        } else if (mValue instanceof byte[]) {
-            return new String((byte[]) mValue, US_ASCII);
-        }
-        return null;
-    }
-
-    /**
-     * Gets the value as a String. This method should be used for tags of type
-     * {@link #TYPE_ASCII}.
-     *
-     * @param defaultValue the String to return if the tag's value does not
-     *            exist or cannot be converted to a String.
-     * @return the tag's value as a String, or the defaultValue.
-     */
-    public String getValueAsString(String defaultValue) {
-        String s = getValueAsString();
-        if (s == null) {
-            return defaultValue;
-        }
-        return s;
-    }
-
-    /**
-     * Gets the value as a byte array. This method should be used for tags of
-     * type {@link #TYPE_UNDEFINED} or {@link #TYPE_UNSIGNED_BYTE}.
-     *
-     * @return the value as a byte array, or null if the tag's value does not
-     *         exist or cannot be converted to a byte array.
-     */
-    public byte[] getValueAsBytes() {
-        if (mValue instanceof byte[]) {
-            return (byte[]) mValue;
-        }
-        return null;
-    }
-
-    /**
-     * Gets the value as a byte. If there are more than 1 bytes in this value,
-     * gets the first byte. This method should be used for tags of type
-     * {@link #TYPE_UNDEFINED} or {@link #TYPE_UNSIGNED_BYTE}.
-     *
-     * @param defaultValue the byte to return if tag's value does not exist or
-     *            cannot be converted to a byte.
-     * @return the tag's value as a byte, or the defaultValue.
-     */
-    public byte getValueAsByte(byte defaultValue) {
-        byte[] b = getValueAsBytes();
-        if (b == null || b.length < 1) {
-            return defaultValue;
-        }
-        return b[0];
-    }
-
-    /**
-     * Gets the value as an array of Rationals. This method should be used for
-     * tags of type {@link #TYPE_RATIONAL} or {@link #TYPE_UNSIGNED_RATIONAL}.
-     *
-     * @return the value as as an array of Rationals, or null if the tag's value
-     *         does not exist or cannot be converted to an array of Rationals.
-     */
-    public Rational[] getValueAsRationals() {
-        if (mValue instanceof Rational[]) {
-            return (Rational[]) mValue;
-        }
-        return null;
-    }
-
-    /**
-     * Gets the value as a Rational. If there are more than 1 Rationals in this
-     * value, gets the first one. This method should be used for tags of type
-     * {@link #TYPE_RATIONAL} or {@link #TYPE_UNSIGNED_RATIONAL}.
-     *
-     * @param defaultValue the Rational to return if tag's value does not exist
-     *            or cannot be converted to a Rational.
-     * @return the tag's value as a Rational, or the defaultValue.
-     */
-    public Rational getValueAsRational(Rational defaultValue) {
-        Rational[] r = getValueAsRationals();
-        if (r == null || r.length < 1) {
-            return defaultValue;
-        }
-        return r[0];
-    }
-
-    /**
-     * Gets the value as a Rational. If there are more than 1 Rationals in this
-     * value, gets the first one. This method should be used for tags of type
-     * {@link #TYPE_RATIONAL} or {@link #TYPE_UNSIGNED_RATIONAL}.
-     *
-     * @param defaultValue the numerator of the Rational to return if tag's
-     *            value does not exist or cannot be converted to a Rational (the
-     *            denominator will be 1).
-     * @return the tag's value as a Rational, or the defaultValue.
-     */
-    public Rational getValueAsRational(long defaultValue) {
-        Rational defaultVal = new Rational(defaultValue, 1);
-        return getValueAsRational(defaultVal);
-    }
-
-    /**
-     * Gets the value as an array of ints. This method should be used for tags
-     * of type {@link #TYPE_UNSIGNED_SHORT}, {@link #TYPE_UNSIGNED_LONG}.
-     *
-     * @return the value as as an array of ints, or null if the tag's value does
-     *         not exist or cannot be converted to an array of ints.
-     */
-    public int[] getValueAsInts() {
-        if (mValue == null) {
-            return null;
-        } else if (mValue instanceof long[]) {
-            long[] val = (long[]) mValue;
-            int[] arr = new int[val.length];
-            for (int i = 0; i < val.length; i++) {
-                arr[i] = (int) val[i]; // Truncates
-            }
-            return arr;
-        }
-        return null;
-    }
-
-    /**
-     * Gets the value as an int. If there are more than 1 ints in this value,
-     * gets the first one. This method should be used for tags of type
-     * {@link #TYPE_UNSIGNED_SHORT}, {@link #TYPE_UNSIGNED_LONG}.
-     *
-     * @param defaultValue the int to return if tag's value does not exist or
-     *            cannot be converted to an int.
-     * @return the tag's value as a int, or the defaultValue.
-     */
-    public int getValueAsInt(int defaultValue) {
-        int[] i = getValueAsInts();
-        if (i == null || i.length < 1) {
-            return defaultValue;
-        }
-        return i[0];
-    }
-
-    /**
-     * Gets the value as an array of longs. This method should be used for tags
-     * of type {@link #TYPE_UNSIGNED_LONG}.
-     *
-     * @return the value as as an array of longs, or null if the tag's value
-     *         does not exist or cannot be converted to an array of longs.
-     */
-    public long[] getValueAsLongs() {
-        if (mValue instanceof long[]) {
-            return (long[]) mValue;
-        }
-        return null;
-    }
-
-    /**
-     * Gets the value or null if none exists. If there are more than 1 longs in
-     * this value, gets the first one. This method should be used for tags of
-     * type {@link #TYPE_UNSIGNED_LONG}.
-     *
-     * @param defaultValue the long to return if tag's value does not exist or
-     *            cannot be converted to a long.
-     * @return the tag's value as a long, or the defaultValue.
-     */
-    public long getValueAsLong(long defaultValue) {
-        long[] l = getValueAsLongs();
-        if (l == null || l.length < 1) {
-            return defaultValue;
-        }
-        return l[0];
-    }
-
-    /**
-     * Gets the tag's value or null if none exists.
-     */
-    public Object getValue() {
-        return mValue;
-    }
-
-    /**
-     * Gets a long representation of the value.
-     *
-     * @param defaultValue value to return if there is no value or value is a
-     *            rational with a denominator of 0.
-     * @return the tag's value as a long, or defaultValue if no representation
-     *         exists.
-     */
-    public long forceGetValueAsLong(long defaultValue) {
-        long[] l = getValueAsLongs();
-        if (l != null && l.length >= 1) {
-            return l[0];
-        }
-        byte[] b = getValueAsBytes();
-        if (b != null && b.length >= 1) {
-            return b[0];
-        }
-        Rational[] r = getValueAsRationals();
-        if (r != null && r.length >= 1 && r[0].getDenominator() != 0) {
-            return (long) r[0].toDouble();
-        }
-        return defaultValue;
-    }
-
-    /**
-     * Gets a string representation of the value.
-     */
-    public String forceGetValueAsString() {
-        if (mValue == null) {
-            return "";
-        } else if (mValue instanceof byte[]) {
-            if (mDataType == TYPE_ASCII) {
-                return new String((byte[]) mValue, US_ASCII);
-            } else {
-                return Arrays.toString((byte[]) mValue);
-            }
-        } else if (mValue instanceof long[]) {
-            if (((long[]) mValue).length == 1) {
-                return String.valueOf(((long[]) mValue)[0]);
-            } else {
-                return Arrays.toString((long[]) mValue);
-            }
-        } else if (mValue instanceof Object[]) {
-            if (((Object[]) mValue).length == 1) {
-                Object val = ((Object[]) mValue)[0];
-                if (val == null) {
-                    return "";
-                } else {
-                    return val.toString();
-                }
-            } else {
-                return Arrays.toString((Object[]) mValue);
-            }
-        } else {
-            return mValue.toString();
-        }
-    }
-
-    /**
-     * Gets the value for type {@link #TYPE_ASCII}, {@link #TYPE_LONG},
-     * {@link #TYPE_UNDEFINED}, {@link #TYPE_UNSIGNED_BYTE},
-     * {@link #TYPE_UNSIGNED_LONG}, or {@link #TYPE_UNSIGNED_SHORT}. For
-     * {@link #TYPE_RATIONAL} or {@link #TYPE_UNSIGNED_RATIONAL}, call
-     * {@link #getRational(int)} instead.
-     *
-     * @exception IllegalArgumentException if the data type is
-     *                {@link #TYPE_RATIONAL} or {@link #TYPE_UNSIGNED_RATIONAL}.
-     */
-    protected long getValueAt(int index) {
-        if (mValue instanceof long[]) {
-            return ((long[]) mValue)[index];
-        } else if (mValue instanceof byte[]) {
-            return ((byte[]) mValue)[index];
-        }
-        throw new IllegalArgumentException("Cannot get integer value from "
-                + convertTypeToString(mDataType));
-    }
-
-    /**
-     * Gets the {@link #TYPE_ASCII} data.
-     *
-     * @exception IllegalArgumentException If the type is NOT
-     *                {@link #TYPE_ASCII}.
-     */
-    protected String getString() {
-        if (mDataType != TYPE_ASCII) {
-            throw new IllegalArgumentException("Cannot get ASCII value from "
-                    + convertTypeToString(mDataType));
-        }
-        return new String((byte[]) mValue, US_ASCII);
-    }
-
-    /*
-     * Get the converted ascii byte. Used by ExifOutputStream.
-     */
-    protected byte[] getStringByte() {
-        return (byte[]) mValue;
-    }
-
-    /**
-     * Gets the {@link #TYPE_RATIONAL} or {@link #TYPE_UNSIGNED_RATIONAL} data.
-     *
-     * @exception IllegalArgumentException If the type is NOT
-     *                {@link #TYPE_RATIONAL} or {@link #TYPE_UNSIGNED_RATIONAL}.
-     */
-    protected Rational getRational(int index) {
-        if ((mDataType != TYPE_RATIONAL) && (mDataType != TYPE_UNSIGNED_RATIONAL)) {
-            throw new IllegalArgumentException("Cannot get RATIONAL value from "
-                    + convertTypeToString(mDataType));
-        }
-        return ((Rational[]) mValue)[index];
-    }
-
-    /**
-     * Equivalent to getBytes(buffer, 0, buffer.length).
-     */
-    protected void getBytes(byte[] buf) {
-        getBytes(buf, 0, buf.length);
-    }
-
-    /**
-     * Gets the {@link #TYPE_UNDEFINED} or {@link #TYPE_UNSIGNED_BYTE} data.
-     *
-     * @param buf the byte array in which to store the bytes read.
-     * @param offset the initial position in buffer to store the bytes.
-     * @param length the maximum number of bytes to store in buffer. If length >
-     *            component count, only the valid bytes will be stored.
-     * @exception IllegalArgumentException If the type is NOT
-     *                {@link #TYPE_UNDEFINED} or {@link #TYPE_UNSIGNED_BYTE}.
-     */
-    protected void getBytes(byte[] buf, int offset, int length) {
-        if ((mDataType != TYPE_UNDEFINED) && (mDataType != TYPE_UNSIGNED_BYTE)) {
-            throw new IllegalArgumentException("Cannot get BYTE value from "
-                    + convertTypeToString(mDataType));
-        }
-        System.arraycopy(mValue, 0, buf, offset,
-                (length > mComponentCountActual) ? mComponentCountActual : length);
-    }
-
-    /**
-     * Gets the offset of this tag. This is only valid if this data size > 4 and
-     * contains an offset to the location of the actual value.
-     */
-    protected int getOffset() {
-        return mOffset;
-    }
-
-    /**
-     * Sets the offset of this tag.
-     */
-    protected void setOffset(int offset) {
-        mOffset = offset;
-    }
-
-    protected void setHasDefinedCount(boolean d) {
-        mHasDefinedDefaultComponentCount = d;
-    }
-
-    protected boolean hasDefinedCount() {
-        return mHasDefinedDefaultComponentCount;
-    }
-
-    private boolean checkBadComponentCount(int count) {
-        if (mHasDefinedDefaultComponentCount && (mComponentCountActual != count)) {
-            return true;
-        }
-        return false;
-    }
-
-    private static String convertTypeToString(short type) {
-        switch (type) {
-            case TYPE_UNSIGNED_BYTE:
-                return "UNSIGNED_BYTE";
-            case TYPE_ASCII:
-                return "ASCII";
-            case TYPE_UNSIGNED_SHORT:
-                return "UNSIGNED_SHORT";
-            case TYPE_UNSIGNED_LONG:
-                return "UNSIGNED_LONG";
-            case TYPE_UNSIGNED_RATIONAL:
-                return "UNSIGNED_RATIONAL";
-            case TYPE_UNDEFINED:
-                return "UNDEFINED";
-            case TYPE_LONG:
-                return "LONG";
-            case TYPE_RATIONAL:
-                return "RATIONAL";
-            default:
-                return "";
-        }
-    }
-
-    private boolean checkOverflowForUnsignedShort(int[] value) {
-        for (int v : value) {
-            if (v > UNSIGNED_SHORT_MAX || v < 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean checkOverflowForUnsignedLong(long[] value) {
-        for (long v : value) {
-            if (v < 0 || v > UNSIGNED_LONG_MAX) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean checkOverflowForUnsignedLong(int[] value) {
-        for (int v : value) {
-            if (v < 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean checkOverflowForUnsignedRational(Rational[] value) {
-        for (Rational v : value) {
-            if (v.getNumerator() < 0 || v.getDenominator() < 0
-                    || v.getNumerator() > UNSIGNED_LONG_MAX
-                    || v.getDenominator() > UNSIGNED_LONG_MAX) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean checkOverflowForRational(Rational[] value) {
-        for (Rational v : value) {
-            if (v.getNumerator() < LONG_MIN || v.getDenominator() < LONG_MIN
-                    || v.getNumerator() > LONG_MAX
-                    || v.getDenominator() > LONG_MAX) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (obj instanceof ExifTag) {
-            ExifTag tag = (ExifTag) obj;
-            if (tag.mTagId != this.mTagId
-                    || tag.mComponentCountActual != this.mComponentCountActual
-                    || tag.mDataType != this.mDataType) {
-                return false;
-            }
-            if (mValue != null) {
-                if (tag.mValue == null) {
-                    return false;
-                } else if (mValue instanceof long[]) {
-                    if (!(tag.mValue instanceof long[])) {
-                        return false;
-                    }
-                    return Arrays.equals((long[]) mValue, (long[]) tag.mValue);
-                } else if (mValue instanceof Rational[]) {
-                    if (!(tag.mValue instanceof Rational[])) {
-                        return false;
-                    }
-                    return Arrays.equals((Rational[]) mValue, (Rational[]) tag.mValue);
-                } else if (mValue instanceof byte[]) {
-                    if (!(tag.mValue instanceof byte[])) {
-                        return false;
-                    }
-                    return Arrays.equals((byte[]) mValue, (byte[]) tag.mValue);
-                } else {
-                    return mValue.equals(tag.mValue);
-                }
-            } else {
-                return tag.mValue == null;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return String.format("tag id: %04X\n", mTagId) + "ifd id: " + mIfd + "\ntype: "
-                + convertTypeToString(mDataType) + "\ncount: " + mComponentCountActual
-                + "\noffset: " + mOffset + "\nvalue: " + forceGetValueAsString() + "\n";
-    }
-
-}
diff --git a/src/com/android/messaging/util/exif/IfdData.java b/src/com/android/messaging/util/exif/IfdData.java
deleted file mode 100644
index 6b8c293..0000000
--- a/src/com/android/messaging/util/exif/IfdData.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This class stores all the tags in an IFD.
- *
- * @see ExifData
- * @see ExifTag
- */
-class IfdData {
-
-    private final int mIfdId;
-    private final Map<Short, ExifTag> mExifTags = new HashMap<Short, ExifTag>();
-    private int mOffsetToNextIfd = 0;
-    private static final int[] sIfds = {
-            IfdId.TYPE_IFD_0, IfdId.TYPE_IFD_1, IfdId.TYPE_IFD_EXIF,
-            IfdId.TYPE_IFD_INTEROPERABILITY, IfdId.TYPE_IFD_GPS
-    };
-    /**
-     * Creates an IfdData with given IFD ID.
-     *
-     * @see IfdId#TYPE_IFD_0
-     * @see IfdId#TYPE_IFD_1
-     * @see IfdId#TYPE_IFD_EXIF
-     * @see IfdId#TYPE_IFD_GPS
-     * @see IfdId#TYPE_IFD_INTEROPERABILITY
-     */
-    IfdData(int ifdId) {
-        mIfdId = ifdId;
-    }
-
-    protected static int[] getIfds() {
-        return sIfds;
-    }
-
-    /**
-     * Get a array the contains all {@link ExifTag} in this IFD.
-     */
-    protected ExifTag[] getAllTags() {
-        return mExifTags.values().toArray(new ExifTag[mExifTags.size()]);
-    }
-
-    /**
-     * Gets the ID of this IFD.
-     *
-     * @see IfdId#TYPE_IFD_0
-     * @see IfdId#TYPE_IFD_1
-     * @see IfdId#TYPE_IFD_EXIF
-     * @see IfdId#TYPE_IFD_GPS
-     * @see IfdId#TYPE_IFD_INTEROPERABILITY
-     */
-    protected int getId() {
-        return mIfdId;
-    }
-
-    /**
-     * Gets the {@link ExifTag} with given tag id. Return null if there is no
-     * such tag.
-     */
-    protected ExifTag getTag(short tagId) {
-        return mExifTags.get(tagId);
-    }
-
-    /**
-     * Adds or replaces a {@link ExifTag}.
-     */
-    protected ExifTag setTag(ExifTag tag) {
-        tag.setIfd(mIfdId);
-        return mExifTags.put(tag.getTagId(), tag);
-    }
-
-    protected boolean checkCollision(short tagId) {
-        return mExifTags.get(tagId) != null;
-    }
-
-    /**
-     * Removes the tag of the given ID
-     */
-    protected void removeTag(short tagId) {
-        mExifTags.remove(tagId);
-    }
-
-    /**
-     * Gets the tags count in the IFD.
-     */
-    protected int getTagCount() {
-        return mExifTags.size();
-    }
-
-    /**
-     * Sets the offset of next IFD.
-     */
-    protected void setOffsetToNextIfd(int offset) {
-        mOffsetToNextIfd = offset;
-    }
-
-    /**
-     * Gets the offset of next IFD.
-     */
-    protected int getOffsetToNextIfd() {
-        return mOffsetToNextIfd;
-    }
-
-    /**
-     * Returns true if all tags in this two IFDs are equal. Note that tags of
-     * IFDs offset or thumbnail offset will be ignored.
-     */
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (obj instanceof IfdData) {
-            IfdData data = (IfdData) obj;
-            if (data.getId() == mIfdId && data.getTagCount() == getTagCount()) {
-                ExifTag[] tags = data.getAllTags();
-                for (ExifTag tag : tags) {
-                    if (ExifInterface.isOffsetTag(tag.getTagId())) {
-                        continue;
-                    }
-                    ExifTag tag2 = mExifTags.get(tag.getTagId());
-                    if (!tag.equals(tag2)) {
-                        return false;
-                    }
-                }
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/src/com/android/messaging/util/exif/IfdId.java b/src/com/android/messaging/util/exif/IfdId.java
deleted file mode 100644
index 06a820d..0000000
--- a/src/com/android/messaging/util/exif/IfdId.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-/**
- * The constants of the IFD ID defined in EXIF spec.
- */
-public interface IfdId {
-    public static final int TYPE_IFD_0 = 0;
-    public static final int TYPE_IFD_1 = 1;
-    public static final int TYPE_IFD_EXIF = 2;
-    public static final int TYPE_IFD_INTEROPERABILITY = 3;
-    public static final int TYPE_IFD_GPS = 4;
-    /* This is used in ExifData to allocate enough IfdData */
-    static final int TYPE_IFD_COUNT = 5;
-
-}
diff --git a/src/com/android/messaging/util/exif/JpegHeader.java b/src/com/android/messaging/util/exif/JpegHeader.java
deleted file mode 100644
index 1dd12a5..0000000
--- a/src/com/android/messaging/util/exif/JpegHeader.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-class JpegHeader {
-    public static final short SOI =  (short) 0xFFD8;
-    public static final short APP1 = (short) 0xFFE1;
-    public static final short APP0 = (short) 0xFFE0;
-    public static final short EOI = (short) 0xFFD9;
-
-    /**
-     *  SOF (start of frame). All value between SOF0 and SOF15 is SOF marker except for DHT, JPG,
-     *  and DAC marker.
-     */
-    public static final short SOF0 = (short) 0xFFC0;
-    public static final short SOF15 = (short) 0xFFCF;
-    public static final short DHT = (short) 0xFFC4;
-    public static final short JPG = (short) 0xFFC8;
-    public static final short DAC = (short) 0xFFCC;
-
-    public static final boolean isSofMarker(short marker) {
-        return marker >= SOF0 && marker <= SOF15 && marker != DHT && marker != JPG
-                && marker != DAC;
-    }
-}
diff --git a/src/com/android/messaging/util/exif/OrderedDataOutputStream.java b/src/com/android/messaging/util/exif/OrderedDataOutputStream.java
deleted file mode 100644
index cf64805..0000000
--- a/src/com/android/messaging/util/exif/OrderedDataOutputStream.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-class OrderedDataOutputStream extends FilterOutputStream {
-    private final ByteBuffer mByteBuffer = ByteBuffer.allocate(4);
-
-    public OrderedDataOutputStream(OutputStream out) {
-        super(out);
-    }
-
-    public OrderedDataOutputStream setByteOrder(ByteOrder order) {
-        mByteBuffer.order(order);
-        return this;
-    }
-
-    public OrderedDataOutputStream writeShort(short value) throws IOException {
-        mByteBuffer.rewind();
-        mByteBuffer.putShort(value);
-        out.write(mByteBuffer.array(), 0, 2);
-        return this;
-    }
-
-    public OrderedDataOutputStream writeInt(int value) throws IOException {
-        mByteBuffer.rewind();
-        mByteBuffer.putInt(value);
-        out.write(mByteBuffer.array());
-        return this;
-    }
-
-    public OrderedDataOutputStream writeRational(Rational rational) throws IOException {
-        writeInt((int) rational.getNumerator());
-        writeInt((int) rational.getDenominator());
-        return this;
-    }
-}
diff --git a/src/com/android/messaging/util/exif/Rational.java b/src/com/android/messaging/util/exif/Rational.java
deleted file mode 100644
index b42ceb7..0000000
--- a/src/com/android/messaging/util/exif/Rational.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2012 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.android.messaging.util.exif;
-
-/**
- * The rational data type of EXIF tag. Contains a pair of longs representing the
- * numerator and denominator of a Rational number.
- */
-public class Rational {
-
-    private final long mNumerator;
-    private final long mDenominator;
-
-    /**
-     * Create a Rational with a given numerator and denominator.
-     *
-     * @param nominator
-     * @param denominator
-     */
-    public Rational(long nominator, long denominator) {
-        mNumerator = nominator;
-        mDenominator = denominator;
-    }
-
-    /**
-     * Create a copy of a Rational.
-     */
-    public Rational(Rational r) {
-        mNumerator = r.mNumerator;
-        mDenominator = r.mDenominator;
-    }
-
-    /**
-     * Gets the numerator of the rational.
-     */
-    public long getNumerator() {
-        return mNumerator;
-    }
-
-    /**
-     * Gets the denominator of the rational
-     */
-    public long getDenominator() {
-        return mDenominator;
-    }
-
-    /**
-     * Gets the rational value as type double. Will cause a divide-by-zero error
-     * if the denominator is 0.
-     */
-    public double toDouble() {
-        return mNumerator / (double) mDenominator;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof Rational) {
-            Rational data = (Rational) obj;
-            return mNumerator == data.mNumerator && mDenominator == data.mDenominator;
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return mNumerator + "/" + mDenominator;
-    }
-}
diff --git a/src/com/android/messaging/widget/BaseWidgetFactory.java b/src/com/android/messaging/widget/BaseWidgetFactory.java
deleted file mode 100644
index 30b80ae..0000000
--- a/src/com/android/messaging/widget/BaseWidgetFactory.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.widget;
-
-import android.appwidget.AppWidgetManager;
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.Typeface;
-import android.net.Uri;
-import android.os.Binder;
-import android.text.Spannable;
-import android.text.SpannableStringBuilder;
-import android.text.style.StyleSpan;
-import android.widget.RemoteViews;
-import android.widget.RemoteViewsService;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.media.AvatarGroupRequestDescriptor;
-import com.android.messaging.datamodel.media.AvatarRequestDescriptor;
-import com.android.messaging.datamodel.media.ImageRequestDescriptor;
-import com.android.messaging.datamodel.media.ImageResource;
-import com.android.messaging.datamodel.media.MediaRequest;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.LogUtil;
-
-/**
- * Remote Views Factory for Bugle Widget.
- */
-abstract class BaseWidgetFactory implements RemoteViewsService.RemoteViewsFactory {
-    protected static final String TAG = LogUtil.BUGLE_WIDGET_TAG;
-
-    protected static final int MAX_ITEMS_TO_SHOW = 25;
-
-    /**
-     * Lock to avoid race condition between widgets.
-     */
-    protected static final Object sWidgetLock = new Object();
-
-    protected final Context mContext;
-    protected final int mAppWidgetId;
-    protected boolean mShouldShowViewMore;
-    protected Cursor mCursor;
-    protected final AppWidgetManager mAppWidgetManager;
-    protected int mIconSize;
-    protected ImageResource mAvatarResource;
-
-    public BaseWidgetFactory(Context context, Intent intent) {
-        mContext = context;
-        mAppWidgetId = intent.getIntExtra(
-                AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
-        mAppWidgetManager = AppWidgetManager.getInstance(context);
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "BaseWidgetFactory intent: " + intent + "widget id: " + mAppWidgetId);
-        }
-        mIconSize = (int) context.getResources()
-                .getDimension(R.dimen.contact_icon_view_normal_size);
-
-    }
-
-    @Override
-    public void onCreate() {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "onCreate");
-        }
-    }
-
-    @Override
-    public void onDestroy() {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "onDestroy");
-        }
-        synchronized (sWidgetLock) {
-            if (mCursor != null && !mCursor.isClosed()) {
-                mCursor.close();
-                mCursor = null;
-            }
-        }
-    }
-
-    @Override
-    public void onDataSetChanged() {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "onDataSetChanged");
-        }
-        synchronized (sWidgetLock) {
-            if (mCursor != null) {
-                mCursor.close();
-                mCursor = null;
-            }
-            final long token = Binder.clearCallingIdentity();
-            try {
-                mCursor = doQuery();
-                onLoadComplete();
-            } finally {
-                Binder.restoreCallingIdentity(token);
-            }
-        }
-    }
-
-    protected abstract Cursor doQuery();
-
-    /**
-     * Returns the number of items that should be shown in the widget list.  This method also
-     * updates the boolean that indicates whether the "show more" item should be shown.
-     * @return the number of items to be displayed in the list.
-     */
-    @Override
-    public int getCount() {
-        synchronized (sWidgetLock) {
-            if (mCursor == null) {
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "getCount: 0");
-                }
-                return 0;
-            }
-            final int count = getItemCount();
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "getCount: " + count);
-            }
-            mShouldShowViewMore = count < mCursor.getCount();
-            return count + (mShouldShowViewMore ? 1 : 0);
-        }
-    }
-
-    /**
-     * Returns the number of messages that should be shown in the widget.  This method
-     * doesn't update the boolean that indicates whether the "show more" item should be included
-     * in the list.
-     * @return
-     */
-    protected int getItemCount() {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "getItemCount: " + mCursor.getCount());
-        }
-        return Math.min(mCursor.getCount(), MAX_ITEMS_TO_SHOW);
-    }
-
-    /*
-     * Make the given text bold if the item is unread
-     */
-    protected CharSequence boldifyIfUnread(CharSequence text, final boolean unread) {
-        if (!unread) {
-            return text;
-        }
-        final SpannableStringBuilder builder = new SpannableStringBuilder(text);
-        builder.setSpan(new StyleSpan(Typeface.BOLD), 0, text.length(),
-                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-        return builder;
-    }
-
-    protected Bitmap getAvatarBitmap(final Uri avatarUri) {
-        final String avatarType = avatarUri == null ?
-                null : AvatarUriUtil.getAvatarType(avatarUri);
-        ImageRequestDescriptor descriptor;
-        if (AvatarUriUtil.TYPE_GROUP_URI.equals(avatarType)) {
-            descriptor = new AvatarGroupRequestDescriptor(avatarUri, mIconSize, mIconSize);
-        } else {
-            descriptor = new AvatarRequestDescriptor(avatarUri, mIconSize, mIconSize);
-        }
-
-        final MediaRequest<ImageResource> imageRequest =
-                descriptor.buildSyncMediaRequest(mContext);
-        final ImageResource imageResource =
-                MediaResourceManager.get().requestMediaResourceSync(imageRequest);
-        if (imageResource != null) {
-            setAvatarResource(imageResource);
-            return mAvatarResource.getBitmap();
-        } else {
-            releaseAvatarResource();
-            return null;
-        }
-    }
-
-    /**
-     * @return the "View more messages" view. When the user taps this item, they're
-     * taken to the conversation in Bugle.
-     */
-    abstract protected RemoteViews getViewMoreItemsView();
-
-    @Override
-    public boolean hasStableIds() {
-        return true;
-    }
-
-    @Override
-    public long getItemId(int position) {
-        return position;
-    }
-
-    private void onLoadComplete() {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "onLoadComplete");
-        }
-        final RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(),
-                getMainLayoutId());
-        mAppWidgetManager.partiallyUpdateAppWidget(mAppWidgetId, remoteViews);
-    }
-
-    protected abstract int getMainLayoutId();
-
-    private void setAvatarResource(final ImageResource resource) {
-        if (mAvatarResource != resource) {
-            // Clear out any information for what is currently used
-            releaseAvatarResource();
-            mAvatarResource = resource;
-        }
-    }
-
-    private void releaseAvatarResource() {
-        if (mAvatarResource != null) {
-            mAvatarResource.release();
-        }
-        mAvatarResource = null;
-    }
-}
diff --git a/src/com/android/messaging/widget/BaseWidgetProvider.java b/src/com/android/messaging/widget/BaseWidgetProvider.java
deleted file mode 100644
index 6632c5f..0000000
--- a/src/com/android/messaging/widget/BaseWidgetProvider.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.widget;
-
-import android.appwidget.AppWidgetManager;
-import android.appwidget.AppWidgetProvider;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.Bundle;
-
-import com.android.messaging.util.LogUtil;
-
-public abstract class BaseWidgetProvider extends AppWidgetProvider {
-    protected static final String TAG = LogUtil.BUGLE_WIDGET_TAG;
-
-    public static final int WIDGET_CONVERSATION_REQUEST_CODE = 987;
-
-    static final String WIDGET_SIZE_KEY = "widgetSizeKey";
-
-    public static final int SIZE_LARGE  = 0;    // undefined == 0, which is the default, large
-    public static final int SIZE_SMALL  = 1;
-    public static final int SIZE_MEDIUM = 2;
-    public static final int SIZE_PRE_JB = 3;
-
-    /**
-     * Update all widgets in the list
-     */
-    @Override
-    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
-        super.onUpdate(context, appWidgetManager, appWidgetIds);
-
-        for (int i = 0; i < appWidgetIds.length; ++i) {
-            updateWidget(context, appWidgetIds[i]);
-        }
-    }
-
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "onReceive intent: " + intent + " for " + this.getClass());
-        }
-        final String action = intent.getAction();
-
-        // The base class AppWidgetProvider's onReceive handles the normal widget intents. Here
-        // we're looking for an intent sent by our app when it knows a message has
-        // been sent or received (or a conversation has been read) and is telling the widget it
-        // needs to update.
-        if (getAction().equals(action)) {
-            final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
-            final int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context,
-                    this.getClass()));
-
-            if (appWidgetIds.length > 0) {
-                // We need to update all Bugle app widgets on the home screen.
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "onReceive notifyAppWidgetViewDataChanged listId: " +
-                            getListId() + " first widgetId: " + appWidgetIds[0]);
-                }
-                appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, getListId());
-            }
-        } else {
-            super.onReceive(context, intent);
-        }
-    }
-
-    @Override
-    public void onEnabled(Context context) {
-        super.onEnabled(context);
-        context.getApplicationContext().registerReceiver(this, new IntentFilter(getAction()));
-    }
-
-    protected abstract String getAction();
-
-    protected abstract int getListId();
-
-    /**
-     * Update the widget appWidgetId
-     */
-    protected abstract void updateWidget(Context context, int appWidgetId);
-
-    private int getWidgetSize(AppWidgetManager appWidgetManager, int appWidgetId) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "BaseWidgetProvider.getWidgetSize");
-        }
-
-        // Get the dimensions
-        final Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId);
-
-        // Get min width and height.
-        final int minWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
-        final int minHeight = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
-
-        // First find out rows and columns based on width provided.
-        final int rows = getCellsForSize(minHeight);
-        final int columns = getCellsForSize(minWidth);
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "BaseWidgetProvider.getWidgetSize row: " + rows
-                    + " columns: " + columns);
-        }
-
-        int size = SIZE_MEDIUM;
-        if (rows == 1) {
-            size = SIZE_SMALL;  // Our widget doesn't let itself get this small. Perhaps in the
-                                // future will add a super-mini widget.
-        } else if (columns > 3) {
-            size = SIZE_LARGE;
-        }
-
-        // put the size in the bundle so our service know what size it's dealing with.
-        final int savedSize = options.getInt(WIDGET_SIZE_KEY);
-        if (savedSize != size) {
-            options.putInt(WIDGET_SIZE_KEY, size);
-            appWidgetManager.updateAppWidgetOptions(appWidgetId, options);
-
-            // The size changed. We have to force the widget to rebuild the list.
-            appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, getListId());
-
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "BaseWidgetProvider.getWidgetSize old size: " + savedSize
-                                + " new size saved: " + size);
-            }
-        }
-
-        return size;
-    }
-
-    /**
-     * Returns number of cells needed for given size of the widget.
-     *
-     * @param size Widget size in dp.
-     * @return Size in number of cells.
-     */
-    private static int getCellsForSize(int size) {
-        // The hardwired sizes in this function come from the hardwired formula found in
-        // Android's UI guidelines for widget design:
-        // http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
-        return (size + 30) / 70;
-    }
-
-    @Override
-    public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager,
-            int appWidgetId, Bundle newOptions) {
-
-        final int widgetSize = getWidgetSize(appWidgetManager, appWidgetId);
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "BaseWidgetProvider.onAppWidgetOptionsChanged new size: " +
-                    widgetSize);
-        }
-
-        super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);
-    }
-
-    protected void deletePreferences(final int widgetId) {
-    }
-
-    /**
-     * Remove preferences when deleting widget
-     */
-    @Override
-    public void onDeleted(Context context, int[] appWidgetIds) {
-        super.onDeleted(context, appWidgetIds);
-
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "BaseWidgetProvider.onDeleted");
-        }
-
-        for (final int widgetId : appWidgetIds) {
-            deletePreferences(widgetId);
-        }
-    }
-
-}
diff --git a/src/com/android/messaging/widget/BugleWidgetProvider.java b/src/com/android/messaging/widget/BugleWidgetProvider.java
deleted file mode 100644
index 50c97b6..0000000
--- a/src/com/android/messaging/widget/BugleWidgetProvider.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.widget;
-
-import android.app.PendingIntent;
-import android.appwidget.AppWidgetManager;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.widget.RemoteViews;
-
-import com.android.messaging.R;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.util.UiUtils;
-
-public class BugleWidgetProvider extends BaseWidgetProvider {
-    public static final String ACTION_NOTIFY_CONVERSATIONS_CHANGED =
-            "com.android.Bugle.intent.action.ACTION_NOTIFY_CONVERSATIONS_CHANGED";
-
-    public static final int WIDGET_NEW_CONVERSATION_REQUEST_CODE = 986;
-
-    /**
-     * Update the widget appWidgetId
-     */
-    @Override
-    protected void updateWidget(final Context context, final int appWidgetId) {
-        if (OsUtil.hasRequiredPermissions()) {
-            SafeAsyncTask.executeOnThreadPool(new Runnable() {
-                @Override
-                public void run() {
-                    rebuildWidget(context, appWidgetId);
-                }
-            });
-        } else {
-            AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId,
-                    UiUtils.getWidgetMissingPermissionView(context));
-        }
-    }
-
-    @Override
-    protected String getAction() {
-        return ACTION_NOTIFY_CONVERSATIONS_CHANGED;
-    }
-
-    @Override
-    protected int getListId() {
-        return R.id.conversation_list;
-    }
-
-    public static void rebuildWidget(final Context context, final int appWidgetId) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "BugleWidgetProvider.rebuildWidget appWidgetId: " + appWidgetId);
-        }
-        final RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
-                R.layout.widget_conversation_list);
-        PendingIntent clickIntent;
-
-        // Launch an intent to avoid ANRs
-        final Intent intent = new Intent(context, WidgetConversationListService.class);
-        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
-        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
-        remoteViews.setRemoteAdapter(appWidgetId, R.id.conversation_list, intent);
-
-        remoteViews.setTextViewText(R.id.widget_label, context.getString(R.string.app_name));
-
-        // Open Bugle's app conversation list when click on header
-        clickIntent = UIIntents.get().getWidgetPendingIntentForConversationListActivity(context);
-        remoteViews.setOnClickPendingIntent(R.id.widget_header, clickIntent);
-
-        // On click intent for Compose
-        clickIntent = UIIntents.get().getWidgetPendingIntentForConversationActivity(context,
-                null /*conversationId*/, WIDGET_NEW_CONVERSATION_REQUEST_CODE);
-        remoteViews.setOnClickPendingIntent(R.id.widget_compose, clickIntent);
-
-        // On click intent for Conversation
-        // Note: the template intent has to be a "naked" intent without any extras. It turns out
-        // that if the template intent does have extras, those particular extras won't get
-        // replaced by the fill-in intent on each list item.
-        clickIntent = UIIntents.get().getWidgetPendingIntentForConversationActivity(context,
-                null /*conversationId*/, WIDGET_CONVERSATION_REQUEST_CODE);
-        remoteViews.setPendingIntentTemplate(R.id.conversation_list, clickIntent);
-
-        AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, remoteViews);
-    }
-
-    /*
-     * notifyDatasetChanged call when the conversation list changes so the Bugle widget will
-     * update and reflect the changes
-     */
-    public static void notifyConversationListChanged(final Context context) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "notifyConversationListChanged");
-        }
-        final Intent intent = new Intent(ACTION_NOTIFY_CONVERSATIONS_CHANGED);
-        context.sendBroadcast(intent);
-    }
-}
diff --git a/src/com/android/messaging/widget/WidgetConversationListService.java b/src/com/android/messaging/widget/WidgetConversationListService.java
deleted file mode 100644
index b67bd79..0000000
--- a/src/com/android/messaging/widget/WidgetConversationListService.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.widget;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Typeface;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.Spannable;
-import android.text.SpannableStringBuilder;
-import android.text.TextPaint;
-import android.text.TextUtils;
-import android.text.style.ForegroundColorSpan;
-import android.text.style.StyleSpan;
-import android.view.View;
-import android.widget.RemoteViews;
-import android.widget.RemoteViewsService;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.conversationlist.ConversationListItemView;
-import com.android.messaging.util.ContentType;
-import com.android.messaging.util.Dates;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-public class WidgetConversationListService extends RemoteViewsService {
-    private static final String TAG = LogUtil.BUGLE_WIDGET_TAG;
-
-    @Override
-    public RemoteViewsFactory onGetViewFactory(Intent intent) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "onGetViewFactory intent: " + intent);
-        }
-        return new WidgetConversationListFactory(getApplicationContext(), intent);
-    }
-
-    /**
-     * Remote Views Factory for Bugle Widget.
-     */
-    private static class WidgetConversationListFactory extends BaseWidgetFactory {
-
-        public WidgetConversationListFactory(Context context, Intent intent) {
-            super(context, intent);
-        }
-
-        @Override
-        protected Cursor doQuery() {
-            return  mContext.getContentResolver().query(MessagingContentProvider.CONVERSATIONS_URI,
-                    ConversationListItemData.PROJECTION,
-                    ConversationListData.WHERE_NOT_ARCHIVED,
-                    null,       // selection args
-                    ConversationListData.SORT_ORDER);
-        }
-
-        /**
-         * @return the {@link RemoteViews} for a specific position in the list.
-         */
-        @Override
-        public RemoteViews getViewAt(int position) {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "getViewAt position: " + position);
-            }
-            synchronized (sWidgetLock) {
-                // "View more conversations" view.
-                if (mCursor == null
-                        || (mShouldShowViewMore && position >= getItemCount())) {
-                    return getViewMoreItemsView();
-                }
-
-                if (!mCursor.moveToPosition(position)) {
-                    // If we ever fail to move to a position, return the "View More conversations"
-                    // view.
-                    LogUtil.w(TAG, "Failed to move to position: " + position);
-                    return getViewMoreItemsView();
-                }
-
-                final ConversationListItemData conv = new ConversationListItemData();
-                conv.bind(mCursor);
-
-                // Inflate and fill out the remote view
-                final RemoteViews remoteViews = new RemoteViews(
-                        mContext.getPackageName(), R.layout.widget_conversation_list_item);
-
-                final boolean hasUnreadMessages = !conv.getIsRead();
-                final Resources resources = mContext.getResources();
-                final boolean isDefaultSmsApp = PhoneUtils.getDefault().isDefaultSmsApp();
-
-                final String timeStamp = conv.getIsSendRequested() ?
-                        resources.getString(R.string.message_status_sending) :
-                            Dates.getWidgetTimeString(conv.getTimestamp(), true /*abbreviated*/)
-                                .toString();
-                // Date/Timestamp or Sending or Error state -- all shown in the date item
-                remoteViews.setTextViewText(R.id.date,
-                        boldifyIfUnread(timeStamp, hasUnreadMessages));
-
-                // From
-                remoteViews.setTextViewText(R.id.from,
-                        boldifyIfUnread(conv.getName(), hasUnreadMessages));
-
-                // Notifications turned off mini-bell icon
-                remoteViews.setViewVisibility(R.id.conversation_notification_bell,
-                        conv.getNotificationEnabled() ? View.GONE : View.VISIBLE);
-
-                // On click intent.
-                final Intent intent = UIIntents.get().getIntentForConversationActivity(mContext,
-                        conv.getConversationId(), null /* draft */);
-
-                remoteViews.setOnClickFillInIntent(R.id.widget_conversation_list_item, intent);
-
-                // Avatar
-                boolean includeAvatar;
-                if (OsUtil.isAtLeastJB()) {
-                    final Bundle options = mAppWidgetManager.getAppWidgetOptions(mAppWidgetId);
-                    if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                        LogUtil.v(TAG, "getViewAt BugleWidgetProvider.WIDGET_SIZE_KEY: " +
-                                options.getInt(BugleWidgetProvider.WIDGET_SIZE_KEY));
-                    }
-
-                    includeAvatar = options.getInt(BugleWidgetProvider.WIDGET_SIZE_KEY) ==
-                            BugleWidgetProvider.SIZE_LARGE;
-                } else {
-                    includeAvatar = true;;
-                }
-
-                // Show the avatar when grande size, otherwise hide it.
-                remoteViews.setViewVisibility(R.id.avatarView, includeAvatar ?
-                        View.VISIBLE : View.GONE);
-
-                Uri iconUri = null;
-                if (conv.getIcon() != null) {
-                    iconUri = Uri.parse(conv.getIcon());
-                }
-                remoteViews.setImageViewBitmap(R.id.avatarView, includeAvatar ?
-                        getAvatarBitmap(iconUri) : null);
-
-                // Error
-                // Only show the fail icon if it is not a group conversation.
-                // And also require that we be the default sms app.
-                final boolean showError =
-                        conv.getIsFailedStatus() && !conv.getIsGroup() && isDefaultSmsApp;
-                final boolean showDraft = conv.getShowDraft() && isDefaultSmsApp;
-                remoteViews.setViewVisibility(R.id.conversation_failed_status_icon,
-                        showError && includeAvatar ?
-                        View.VISIBLE : View.GONE);
-
-                if (showError || showDraft) {
-                    remoteViews.setViewVisibility(R.id.snippet, View.GONE);
-                    remoteViews.setViewVisibility(R.id.errorBlock, View.VISIBLE);
-                    remoteViews.setTextViewText(R.id.errorSnippet, getSnippetText(conv));
-
-                    if (showDraft) {
-                        // Show italicized "Draft" on third line
-                        final String text = resources.getString(
-                                R.string.conversation_list_item_view_draft_message);
-                        SpannableStringBuilder builder = new SpannableStringBuilder(text);
-                        builder.setSpan(new StyleSpan(Typeface.ITALIC), 0, text.length(),
-                                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                        builder.setSpan(new ForegroundColorSpan(
-                                    resources.getColor(R.color.widget_text_color)),
-                                0, text.length(),
-                                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                        remoteViews.setTextViewText(R.id.errorText, builder);
-                    } else {
-                        // Show error message on third line
-                       int failureMessageId = R.string.message_status_download_failed;
-                        if (conv.getIsMessageTypeOutgoing()) {
-                            failureMessageId = MmsUtils.mapRawStatusToErrorResourceId(
-                                    conv.getMessageStatus(),
-                                    conv.getMessageRawTelephonyStatus());
-                        }
-                        remoteViews.setTextViewText(R.id.errorText,
-                                resources.getString(failureMessageId));
-                    }
-                } else {
-                    remoteViews.setViewVisibility(R.id.errorBlock, View.GONE);
-                    remoteViews.setViewVisibility(R.id.snippet, View.VISIBLE);
-                    remoteViews.setTextViewText(R.id.snippet,
-                            boldifyIfUnread(getSnippetText(conv), hasUnreadMessages));
-                }
-
-                // Set the accessibility TalkBack text
-                remoteViews.setContentDescription(R.id.widget_conversation_list_item,
-                        ConversationListItemView.buildContentDescription(mContext.getResources(),
-                                conv, new TextPaint()));
-
-                return remoteViews;
-            }
-        }
-
-        private String getSnippetText(final ConversationListItemData conv) {
-            String snippetText = conv.getShowDraft() ?
-                    conv.getDraftSnippetText() : conv.getSnippetText();
-            final String previewContentType = conv.getShowDraft() ?
-                    conv.getDraftPreviewContentType() : conv.getPreviewContentType();
-            if (TextUtils.isEmpty(snippetText)) {
-                Resources resources = mContext.getResources();
-                // Use the attachment type as a snippet so the preview doesn't look odd
-                if (ContentType.isAudioType(previewContentType)) {
-                    snippetText = resources.getString(
-                            R.string.conversation_list_snippet_audio_clip);
-                } else if (ContentType.isImageType(previewContentType)) {
-                    snippetText = resources.getString(R.string.conversation_list_snippet_picture);
-                } else if (ContentType.isVideoType(previewContentType)) {
-                    snippetText = resources.getString(R.string.conversation_list_snippet_video);
-                } else if (ContentType.isVCardType(previewContentType)) {
-                    snippetText = resources.getString(R.string.conversation_list_snippet_vcard);
-                }
-            }
-            return snippetText;
-        }
-
-        /**
-         * @return the "View more conversations" view. When the user taps this item, they're
-         * taken to the Bugle's conversation list.
-         */
-        @Override
-        protected RemoteViews getViewMoreItemsView() {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "getViewMoreItemsView");
-            }
-            final RemoteViews view = new RemoteViews(mContext.getPackageName(),
-                    R.layout.widget_loading);
-            view.setTextViewText(
-                    R.id.loading_text, mContext.getText(R.string.view_more_conversations));
-
-            // Tapping this "More conversations" item should take us to the ConversationList.
-            // However, the list view is primed with an intent to go to the Conversation activity.
-            // Each normal conversation list item sets the fill-in intent with the
-            // ConversationId for that particular conversation. In other words, the only place
-            // we can go is the ConversationActivity. We add an extra here to tell the
-            // ConversationActivity to really take us to the ConversationListActivity.
-            final Intent intent = new Intent();
-            intent.putExtra(UIIntents.UI_INTENT_EXTRA_GOTO_CONVERSATION_LIST, true);
-            view.setOnClickFillInIntent(R.id.widget_loading, intent);
-            return view;
-        }
-
-        @Override
-        public RemoteViews getLoadingView() {
-            RemoteViews view = new RemoteViews(mContext.getPackageName(), R.layout.widget_loading);
-            view.setTextViewText(
-                    R.id.loading_text, mContext.getText(R.string.loading_conversations));
-            return view;
-        }
-
-        @Override
-        public int getViewTypeCount() {
-            return 2;
-        }
-
-        @Override
-        protected int getMainLayoutId() {
-            return R.layout.widget_conversation_list;
-        }
-    }
-
-}
diff --git a/src/com/android/messaging/widget/WidgetConversationProvider.java b/src/com/android/messaging/widget/WidgetConversationProvider.java
deleted file mode 100644
index 6ae5614..0000000
--- a/src/com/android/messaging/widget/WidgetConversationProvider.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.widget;
-
-import android.app.PendingIntent;
-import android.appwidget.AppWidgetManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Looper;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.RemoteViews;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.WidgetPickConversationActivity;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.SafeAsyncTask;
-import com.android.messaging.util.UiUtils;
-
-public class WidgetConversationProvider extends BaseWidgetProvider {
-    public static final String ACTION_NOTIFY_MESSAGES_CHANGED =
-            "com.android.Bugle.intent.action.ACTION_NOTIFY_MESSAGES_CHANGED";
-
-    public static final int WIDGET_CONVERSATION_TEMPLATE_REQUEST_CODE = 1985;
-    public static final int WIDGET_CONVERSATION_REPLY_CODE = 1987;
-
-    // Intent extras
-    public static final String UI_INTENT_EXTRA_RECIPIENT = "recipient";
-    public static final String UI_INTENT_EXTRA_ICON = "icon";
-
-    /**
-     * Update the widget appWidgetId
-     */
-    @Override
-    protected void updateWidget(final Context context, final int appWidgetId) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "updateWidget appWidgetId: " + appWidgetId);
-        }
-        if (OsUtil.hasRequiredPermissions()) {
-            rebuildWidget(context, appWidgetId);
-        } else {
-            AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId,
-                    UiUtils.getWidgetMissingPermissionView(context));
-        }
-    }
-
-    @Override
-    protected String getAction() {
-        return ACTION_NOTIFY_MESSAGES_CHANGED;
-    }
-
-    @Override
-    protected int getListId() {
-        return R.id.message_list;
-    }
-
-    public static void rebuildWidget(final Context context, final int appWidgetId) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "WidgetConversationProvider.rebuildWidget appWidgetId: " + appWidgetId);
-        }
-        final RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
-                R.layout.widget_conversation);
-        PendingIntent clickIntent;
-        final UIIntents uiIntents = UIIntents.get();
-        if (!isWidgetConfigured(appWidgetId)) {
-            // Widget has not been configured yet. Hide the normal UI elements and show the
-            // configuration view instead.
-            remoteViews.setViewVisibility(R.id.widget_label, View.GONE);
-            remoteViews.setViewVisibility(R.id.message_list, View.GONE);
-            remoteViews.setViewVisibility(R.id.launcher_icon, View.VISIBLE);
-            remoteViews.setViewVisibility(R.id.widget_configuration, View.VISIBLE);
-
-            remoteViews.setOnClickPendingIntent(R.id.widget_configuration,
-                    uiIntents.getWidgetPendingIntentForConfigurationActivity(context, appWidgetId));
-
-            // On click intent for Goto Conversation List
-            clickIntent = uiIntents.getWidgetPendingIntentForConversationListActivity(context);
-            remoteViews.setOnClickPendingIntent(R.id.widget_header, clickIntent);
-
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "WidgetConversationProvider.rebuildWidget appWidgetId: " +
-                        appWidgetId + " going into configure state");
-            }
-        } else {
-            remoteViews.setViewVisibility(R.id.widget_label, View.VISIBLE);
-            remoteViews.setViewVisibility(R.id.message_list, View.VISIBLE);
-            remoteViews.setViewVisibility(R.id.launcher_icon, View.GONE);
-            remoteViews.setViewVisibility(R.id.widget_configuration, View.GONE);
-
-            final String conversationId =
-                    WidgetPickConversationActivity.getConversationIdPref(appWidgetId);
-            final boolean isMainThread =  Looper.myLooper() == Looper.getMainLooper();
-            // If we're running on the UI thread, we can't do the DB access needed to get the
-            // conversation data. We'll do excute this again off of the UI thread.
-            final ConversationListItemData convData = isMainThread ?
-                    null : getConversationData(context, conversationId);
-
-            // Launch an intent to avoid ANRs
-            final Intent intent = new Intent(context, WidgetConversationService.class);
-            intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
-            intent.putExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID, conversationId);
-            intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
-            remoteViews.setRemoteAdapter(appWidgetId, R.id.message_list, intent);
-
-            remoteViews.setTextViewText(R.id.widget_label, convData != null ?
-                    convData.getName() : context.getString(R.string.app_name));
-
-            // On click intent for Goto Conversation List
-            clickIntent = uiIntents.getWidgetPendingIntentForConversationListActivity(context);
-            remoteViews.setOnClickPendingIntent(R.id.widget_goto_conversation_list, clickIntent);
-
-            // Open the conversation when click on header
-            clickIntent = uiIntents.getWidgetPendingIntentForConversationActivity(context,
-                    conversationId, WIDGET_CONVERSATION_REQUEST_CODE);
-            remoteViews.setOnClickPendingIntent(R.id.widget_header, clickIntent);
-
-            // On click intent for Conversation
-            // Note: the template intent has to be a "naked" intent without any extras. It turns out
-            // that if the template intent does have extras, those particular extras won't get
-            // replaced by the fill-in intent on each list item.
-            clickIntent = uiIntents.getWidgetPendingIntentForConversationActivity(context,
-                    conversationId, WIDGET_CONVERSATION_TEMPLATE_REQUEST_CODE);
-            remoteViews.setPendingIntentTemplate(R.id.message_list, clickIntent);
-
-            if (isMainThread) {
-                // We're running on the UI thread and we couldn't update all the parts of the
-                // widget dependent on ConversationListItemData. However, we have to update
-                // the widget regardless, even with those missing pieces. Here we update the
-                // widget again in the background.
-                SafeAsyncTask.executeOnThreadPool(new Runnable() {
-                    @Override
-                    public void run() {
-                        rebuildWidget(context, appWidgetId);
-                    }
-                });
-            }
-        }
-
-        AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, remoteViews);
-
-    }
-
-    /*
-     * notifyMessagesChanged called when the conversation changes so the widget will
-     * update and reflect the changes
-     */
-    public static void notifyMessagesChanged(final Context context, final String conversationId) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "notifyMessagesChanged");
-        }
-        final Intent intent = new Intent(ACTION_NOTIFY_MESSAGES_CHANGED);
-        intent.putExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID, conversationId);
-        context.sendBroadcast(intent);
-    }
-
-    /*
-     * notifyConversationDeleted is called when a conversation is deleted. Look through all the
-     * widgets and if they're displaying that conversation, force the widget into its
-     * configuration state.
-     */
-    public static void notifyConversationDeleted(final Context context,
-            final String conversationId) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "notifyConversationDeleted convId: " + conversationId);
-        }
-
-        final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
-        for (final int appWidgetId : appWidgetManager.getAppWidgetIds(new ComponentName(context,
-                WidgetConversationProvider.class))) {
-            // Retrieve the persisted information for this widget from preferences.
-            final String widgetConvId =
-                    WidgetPickConversationActivity.getConversationIdPref(appWidgetId);
-
-            if (widgetConvId == null || widgetConvId.equals(conversationId)) {
-                if (widgetConvId != null) {
-                    WidgetPickConversationActivity.deleteConversationIdPref(appWidgetId);
-                }
-                rebuildWidget(context, appWidgetId);
-            }
-        }
-    }
-
-    /*
-     * notifyConversationRenamed is called when a conversation is renamed. Look through all the
-     * widgets and if they're displaying that conversation, force the widget to rebuild itself
-     */
-    public static void notifyConversationRenamed(final Context context,
-            final String conversationId) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "notifyConversationRenamed convId: " + conversationId);
-        }
-
-        final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
-        for (final int appWidgetId : appWidgetManager.getAppWidgetIds(new ComponentName(context,
-                WidgetConversationProvider.class))) {
-            // Retrieve the persisted information for this widget from preferences.
-            final String widgetConvId =
-                    WidgetPickConversationActivity.getConversationIdPref(appWidgetId);
-
-            if (widgetConvId != null && widgetConvId.equals(conversationId)) {
-                rebuildWidget(context, appWidgetId);
-            }
-        }
-    }
-
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "WidgetConversationProvider onReceive intent: " + intent);
-        }
-        final String action = intent.getAction();
-
-        // The base class AppWidgetProvider's onReceive handles the normal widget intents. Here
-        // we're looking for an intent sent by our app when it knows a message has
-        // been sent or received (or a conversation has been read) and is telling the widget it
-        // needs to update.
-        if (getAction().equals(action)) {
-            final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
-            final int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context,
-                    this.getClass()));
-
-            if (appWidgetIds.length == 0) {
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "WidgetConversationProvider onReceive no widget ids");
-                }
-                return;
-            }
-            // Normally the conversation id points to a specific conversation and we only update
-            // widgets looking at that conversation. When the conversation id is null, that means
-            // there's been a massive change (such as the initial import) and we need to update
-            // every conversation widget.
-            final String conversationId = intent.getExtras()
-                    .getString(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID);
-
-            // Only update the widgets that match the conversation id that changed.
-            for (final int widgetId : appWidgetIds) {
-                // Retrieve the persisted information for this widget from preferences.
-                final String widgetConvId =
-                        WidgetPickConversationActivity.getConversationIdPref(widgetId);
-                if (conversationId == null || TextUtils.equals(conversationId, widgetConvId)) {
-                    // Update the list portion (i.e. the message list) of the widget
-                    appWidgetManager.notifyAppWidgetViewDataChanged(widgetId, getListId());
-                }
-            }
-        } else {
-            super.onReceive(context, intent);
-        }
-    }
-
-    private static ConversationListItemData getConversationData(final Context context,
-            final String conversationId) {
-        if (TextUtils.isEmpty(conversationId)) {
-            return null;
-        }
-        final Uri uri = MessagingContentProvider.buildConversationMetadataUri(conversationId);
-        Cursor cursor = null;
-        try {
-            cursor = context.getContentResolver().query(uri,
-                    ConversationListItemData.PROJECTION,
-                    null,       // selection
-                    null,       // selection args
-                    null);      // sort order
-            if (cursor != null && cursor.getCount() > 0) {
-                final ConversationListItemData conv = new ConversationListItemData();
-                cursor.moveToFirst();
-                conv.bind(cursor);
-                return conv;
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return null;
-    }
-
-    @Override
-    protected void deletePreferences(final int widgetId) {
-        WidgetPickConversationActivity.deleteConversationIdPref(widgetId);
-    }
-
-    /**
-     * When this widget is created, it's created for a particular conversation and that
-     * ConversationId is stored in shared prefs. If the associated conversation is deleted,
-     * the widget doesn't get deleted. Instead, it goes into a "tap to configure" state. This
-     * function determines whether the widget has been configured and has an associated
-     * ConversationId.
-     */
-    public static boolean isWidgetConfigured(final int appWidgetId) {
-        final String conversationId =
-                WidgetPickConversationActivity.getConversationIdPref(appWidgetId);
-        return !TextUtils.isEmpty(conversationId);
-    }
-
-}
diff --git a/src/com/android/messaging/widget/WidgetConversationService.java b/src/com/android/messaging/widget/WidgetConversationService.java
deleted file mode 100644
index 5b8587b..0000000
--- a/src/com/android/messaging/widget/WidgetConversationService.java
+++ /dev/null
@@ -1,522 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.widget;
-
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-import android.text.format.Formatter;
-import android.text.style.ForegroundColorSpan;
-import android.view.View;
-import android.widget.RemoteViews;
-import android.widget.RemoteViewsService;
-
-import com.android.messaging.R;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.data.ConversationMessageData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.media.ImageResource;
-import com.android.messaging.datamodel.media.MediaRequest;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.datamodel.media.MessagePartImageRequestDescriptor;
-import com.android.messaging.datamodel.media.MessagePartVideoThumbnailRequestDescriptor;
-import com.android.messaging.datamodel.media.UriImageRequestDescriptor;
-import com.android.messaging.datamodel.media.VideoThumbnailRequest;
-import com.android.messaging.sms.MmsUtils;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.AvatarUriUtil;
-import com.android.messaging.util.Dates;
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import java.util.List;
-
-public class WidgetConversationService extends RemoteViewsService {
-    private static final String TAG = LogUtil.BUGLE_WIDGET_TAG;
-
-    private static final int IMAGE_ATTACHMENT_SIZE = 400;
-
-    @Override
-    public RemoteViewsFactory onGetViewFactory(Intent intent) {
-        if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-            LogUtil.v(TAG, "onGetViewFactory intent: " + intent);
-        }
-        return new WidgetConversationFactory(getApplicationContext(), intent);
-    }
-
-    /**
-     * Remote Views Factory for the conversation widget.
-     */
-    private static class WidgetConversationFactory extends BaseWidgetFactory {
-        private ImageResource mImageResource;
-        private String mConversationId;
-
-        public WidgetConversationFactory(Context context, Intent intent) {
-            super(context, intent);
-
-            mConversationId = intent.getStringExtra(UIIntents.UI_INTENT_EXTRA_CONVERSATION_ID);
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "BugleFactory intent: " + intent + "widget id: " + mAppWidgetId);
-            }
-            mIconSize = (int) context.getResources()
-                    .getDimension(R.dimen.contact_icon_view_normal_size);
-        }
-
-        @Override
-        public void onCreate() {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "onCreate");
-            }
-            super.onCreate();
-
-            // If the conversation for this widget has been removed, we want to update the widget to
-            // "Tap to configure" mode.
-            if (!WidgetConversationProvider.isWidgetConfigured(mAppWidgetId)) {
-                WidgetConversationProvider.rebuildWidget(mContext, mAppWidgetId);
-            }
-        }
-
-        @Override
-        protected Cursor doQuery() {
-            if (TextUtils.isEmpty(mConversationId)) {
-                LogUtil.w(TAG, "doQuery no conversation id");
-                return null;
-            }
-            final Uri uri = MessagingContentProvider.buildConversationMessagesUri(mConversationId);
-            if (uri != null) {
-                LogUtil.w(TAG, "doQuery uri: " + uri.toString());
-            }
-            return mContext.getContentResolver().query(uri,
-                    ConversationMessageData.getProjection(),
-                    null,       // where
-                    null,       // selection args
-                    null        // sort order
-                    );
-        }
-
-        /**
-         * @return the {@link RemoteViews} for a specific position in the list.
-         */
-        @Override
-        public RemoteViews getViewAt(final int originalPosition) {
-            synchronized (sWidgetLock) {
-                // "View more messages" view.
-                if (mCursor == null
-                        || (mShouldShowViewMore && originalPosition == 0)) {
-                    return getViewMoreItemsView();
-                }
-                // The message cursor is in reverse order for performance reasons.
-                final int position = getCount() - originalPosition - 1;
-                if (!mCursor.moveToPosition(position)) {
-                    // If we ever fail to move to a position, return the "View More messages"
-                    // view.
-                    LogUtil.w(TAG, "Failed to move to position: " + position);
-                    return getViewMoreItemsView();
-                }
-
-                final ConversationMessageData message = new ConversationMessageData();
-                message.bind(mCursor);
-
-                // Inflate and fill out the remote view
-                final RemoteViews remoteViews = new RemoteViews(
-                        mContext.getPackageName(), message.getIsIncoming() ?
-                                R.layout.widget_message_item_incoming :
-                                    R.layout.widget_message_item_outgoing);
-
-                final boolean hasUnreadMessages = false; //!message.getIsRead();
-
-                // Date
-                remoteViews.setTextViewText(R.id.date, boldifyIfUnread(
-                        Dates.getWidgetTimeString(message.getReceivedTimeStamp(),
-                                false /*abbreviated*/),
-                        hasUnreadMessages));
-
-                // On click intent.
-                final Intent intent = UIIntents.get().getIntentForConversationActivity(mContext,
-                        mConversationId, null /* draft */);
-
-                // Attachments
-                int attachmentStringId = 0;
-                remoteViews.setViewVisibility(R.id.attachmentFrame, View.GONE);
-
-                int scrollToPosition = originalPosition;
-                final int cursorCount = mCursor.getCount();
-                if (cursorCount > MAX_ITEMS_TO_SHOW) {
-                    scrollToPosition += cursorCount - MAX_ITEMS_TO_SHOW;
-                }
-                if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                    LogUtil.v(TAG, "getViewAt position: " + originalPosition +
-                            " computed position: " + position +
-                            " scrollToPosition: " + scrollToPosition +
-                            " cursorCount: " + cursorCount +
-                            " MAX_ITEMS_TO_SHOW: " + MAX_ITEMS_TO_SHOW);
-                }
-
-                intent.putExtra(UIIntents.UI_INTENT_EXTRA_MESSAGE_POSITION, scrollToPosition);
-                if (message.hasAttachments()) {
-                    final List<MessagePartData> attachments = message.getAttachments();
-                    for (MessagePartData part : attachments) {
-                        final boolean videoWithThumbnail = part.isVideo()
-                                && (VideoThumbnailRequest.shouldShowIncomingVideoThumbnails()
-                                || !message.getIsIncoming());
-                        if (part.isImage() || videoWithThumbnail) {
-                            final Uri uri = part.getContentUri();
-                            remoteViews.setViewVisibility(R.id.attachmentFrame, View.VISIBLE);
-                            remoteViews.setViewVisibility(R.id.playButton, part.isVideo() ?
-                                    View.VISIBLE : View.GONE);
-                            remoteViews.setImageViewBitmap(R.id.attachment,
-                                    getAttachmentBitmap(part));
-                            intent.putExtra(UIIntents.UI_INTENT_EXTRA_ATTACHMENT_URI ,
-                                    uri.toString());
-                            intent.putExtra(UIIntents.UI_INTENT_EXTRA_ATTACHMENT_TYPE ,
-                                    part.getContentType());
-                            break;
-                        } else if (part.isVideo()) {
-                            attachmentStringId = R.string.conversation_list_snippet_video;
-                            break;
-                        }
-                        if (part.isAudio()) {
-                            attachmentStringId = R.string.conversation_list_snippet_audio_clip;
-                            break;
-                        }
-                        if (part.isVCard()) {
-                            attachmentStringId = R.string.conversation_list_snippet_vcard;
-                            break;
-                        }
-                    }
-                }
-
-                remoteViews.setOnClickFillInIntent(message.getIsIncoming() ?
-                        R.id.widget_message_item_incoming :
-                            R.id.widget_message_item_outgoing,
-                        intent);
-
-                // Avatar
-                boolean includeAvatar;
-                if (OsUtil.isAtLeastJB()) {
-                    final Bundle options = mAppWidgetManager.getAppWidgetOptions(mAppWidgetId);
-                    if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                        LogUtil.v(TAG, "getViewAt BugleWidgetProvider.WIDGET_SIZE_KEY: " +
-                                options.getInt(BugleWidgetProvider.WIDGET_SIZE_KEY));
-                    }
-
-                    includeAvatar = options.getInt(BugleWidgetProvider.WIDGET_SIZE_KEY)
-                            == BugleWidgetProvider.SIZE_LARGE;
-                } else {
-                    includeAvatar = true;
-                }
-
-                // Show the avatar (and shadow) when grande size, otherwise hide it.
-                remoteViews.setViewVisibility(R.id.avatarView, includeAvatar ?
-                        View.VISIBLE : View.GONE);
-                remoteViews.setViewVisibility(R.id.avatarShadow, includeAvatar ?
-                        View.VISIBLE : View.GONE);
-
-                final Uri avatarUri = AvatarUriUtil.createAvatarUri(
-                        message.getSenderProfilePhotoUri(),
-                        message.getSenderFullName(),
-                        message.getSenderNormalizedDestination(),
-                        message.getSenderContactLookupKey());
-
-                remoteViews.setImageViewBitmap(R.id.avatarView, includeAvatar ?
-                        getAvatarBitmap(avatarUri) : null);
-
-                String text = message.getText();
-                if (attachmentStringId != 0) {
-                    final String attachment = mContext.getString(attachmentStringId);
-                    if (!TextUtils.isEmpty(text)) {
-                        text += '\n' + attachment;
-                    } else {
-                        text = attachment;
-                    }
-                }
-
-                remoteViews.setViewVisibility(R.id.message, View.VISIBLE);
-                updateViewContent(text, message, remoteViews);
-
-                return remoteViews;
-            }
-        }
-
-        // updateViewContent figures out what to show in the message and date fields based on
-        // the message status. This code came from ConversationMessageView.updateViewContent, but
-        // had to be simplified to work with our simple widget list item.
-        // updateViewContent also builds the accessibility content description for the list item.
-        private void updateViewContent(final String messageText,
-                final ConversationMessageData message,
-                final RemoteViews remoteViews) {
-            int titleResId = -1;
-            int statusResId = -1;
-            boolean showInRed = false;
-            String statusText = null;
-            switch(message.getStatus()) {
-                case MessageData.BUGLE_STATUS_INCOMING_AUTO_DOWNLOADING:
-                case MessageData.BUGLE_STATUS_INCOMING_MANUAL_DOWNLOADING:
-                case MessageData.BUGLE_STATUS_INCOMING_RETRYING_AUTO_DOWNLOAD:
-                case MessageData.BUGLE_STATUS_INCOMING_RETRYING_MANUAL_DOWNLOAD:
-                    titleResId = R.string.message_title_downloading;
-                    statusResId = R.string.message_status_downloading;
-                    break;
-
-                case MessageData.BUGLE_STATUS_INCOMING_YET_TO_MANUAL_DOWNLOAD:
-                    if (!OsUtil.isSecondaryUser()) {
-                        titleResId = R.string.message_title_manual_download;
-                        statusResId = R.string.message_status_download;
-                    }
-                    break;
-
-                case MessageData.BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE:
-                    if (!OsUtil.isSecondaryUser()) {
-                        titleResId = R.string.message_title_download_failed;
-                        statusResId = R.string.message_status_download_error;
-                        showInRed = true;
-                    }
-                    break;
-
-                case MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED:
-                    if (!OsUtil.isSecondaryUser()) {
-                        titleResId = R.string.message_title_download_failed;
-                        statusResId = R.string.message_status_download;
-                        showInRed = true;
-                    }
-                    break;
-
-                case MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND:
-                case MessageData.BUGLE_STATUS_OUTGOING_SENDING:
-                    statusResId = R.string.message_status_sending;
-                    break;
-
-                case MessageData.BUGLE_STATUS_OUTGOING_RESENDING:
-                case MessageData.BUGLE_STATUS_OUTGOING_AWAITING_RETRY:
-                    statusResId = R.string.message_status_send_retrying;
-                    break;
-
-                case MessageData.BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER:
-                    statusResId = R.string.message_status_send_failed_emergency_number;
-                    showInRed = true;
-                    break;
-
-                case MessageData.BUGLE_STATUS_OUTGOING_FAILED:
-                    // don't show the error state unless we're the default sms app
-                    if (PhoneUtils.getDefault().isDefaultSmsApp()) {
-                        statusResId = MmsUtils.mapRawStatusToErrorResourceId(
-                                message.getStatus(), message.getRawTelephonyStatus());
-                        showInRed = true;
-                        break;
-                    }
-                    // FALL THROUGH HERE
-
-                case MessageData.BUGLE_STATUS_OUTGOING_COMPLETE:
-                case MessageData.BUGLE_STATUS_OUTGOING_DELIVERED:
-                case MessageData.BUGLE_STATUS_INCOMING_COMPLETE:
-                default:
-                    if (!message.getCanClusterWithNextMessage()) {
-                        statusText = Dates.getWidgetTimeString(message.getReceivedTimeStamp(),
-                                false /*abbreviated*/).toString();
-                    }
-                    break;
-            }
-
-            // Build the content description while we're populating the various fields.
-            final StringBuilder description = new StringBuilder();
-            final String separator = mContext.getString(R.string.enumeration_comma);
-            // Sender information
-            final boolean hasPlainTextMessage = !(TextUtils.isEmpty(message.getText()));
-            if (message.getIsIncoming()) {
-                int senderResId = hasPlainTextMessage
-                    ? R.string.incoming_text_sender_content_description
-                    : R.string.incoming_sender_content_description;
-                description.append(mContext.getString(senderResId, message.getSenderDisplayName()));
-            } else {
-                int senderResId = hasPlainTextMessage
-                    ? R.string.outgoing_text_sender_content_description
-                    : R.string.outgoing_sender_content_description;
-                description.append(mContext.getString(senderResId));
-            }
-
-            final boolean titleVisible = (titleResId >= 0);
-            if (titleVisible) {
-                final String titleText = mContext.getString(titleResId);
-                remoteViews.setTextViewText(R.id.message, titleText);
-
-                final String mmsInfoText = mContext.getString(
-                        R.string.mms_info,
-                        Formatter.formatFileSize(mContext, message.getSmsMessageSize()),
-                        DateUtils.formatDateTime(
-                                mContext,
-                                message.getMmsExpiry(),
-                                DateUtils.FORMAT_SHOW_DATE |
-                                DateUtils.FORMAT_SHOW_TIME |
-                                DateUtils.FORMAT_NUMERIC_DATE |
-                                DateUtils.FORMAT_NO_YEAR));
-                remoteViews.setTextViewText(R.id.date, mmsInfoText);
-                description.append(separator);
-                description.append(mmsInfoText);
-            } else if (!TextUtils.isEmpty(messageText)) {
-                remoteViews.setTextViewText(R.id.message, messageText);
-                description.append(separator);
-                description.append(messageText);
-            } else {
-                remoteViews.setViewVisibility(R.id.message, View.GONE);
-            }
-
-            final String subjectText = MmsUtils.cleanseMmsSubject(mContext.getResources(),
-                    message.getMmsSubject());
-            if (!TextUtils.isEmpty(subjectText)) {
-                description.append(separator);
-                description.append(subjectText);
-            }
-
-            if (statusResId >= 0) {
-                statusText = mContext.getString(statusResId);
-                final Spannable colorStr = new SpannableString(statusText);
-                if (showInRed) {
-                    colorStr.setSpan(new ForegroundColorSpan(
-                            mContext.getResources().getColor(R.color.timestamp_text_failed)),
-                            0, statusText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-                }
-                remoteViews.setTextViewText(R.id.date, colorStr);
-                description.append(separator);
-                description.append(colorStr);
-            } else {
-                description.append(separator);
-                description.append(Dates.getWidgetTimeString(message.getReceivedTimeStamp(),
-                        false /*abbreviated*/));
-            }
-
-            if (message.hasAttachments()) {
-                final List<MessagePartData> attachments = message.getAttachments();
-                int stringId;
-                for (MessagePartData part : attachments) {
-                    if (part.isImage()) {
-                        stringId = R.string.conversation_list_snippet_picture;
-                    } else if (part.isVideo()) {
-                        stringId = R.string.conversation_list_snippet_video;
-                    } else if (part.isAudio()) {
-                        stringId = R.string.conversation_list_snippet_audio_clip;
-                    } else if (part.isVCard()) {
-                        stringId = R.string.conversation_list_snippet_vcard;
-                    } else {
-                        stringId = 0;
-                    }
-                    if (stringId > 0) {
-                        description.append(separator);
-                        description.append(mContext.getString(stringId));
-                    }
-                }
-            }
-            remoteViews.setContentDescription(message.getIsIncoming() ?
-                    R.id.widget_message_item_incoming :
-                        R.id.widget_message_item_outgoing, description);
-        }
-
-        private Bitmap getAttachmentBitmap(final MessagePartData part) {
-            UriImageRequestDescriptor descriptor;
-            if (part.isImage()) {
-                descriptor = new MessagePartImageRequestDescriptor(part,
-                        IMAGE_ATTACHMENT_SIZE, // desiredWidth
-                        IMAGE_ATTACHMENT_SIZE,  // desiredHeight
-                        true // isStatic
-                        );
-            } else if (part.isVideo()) {
-                descriptor = new MessagePartVideoThumbnailRequestDescriptor(part);
-            } else {
-                return null;
-            }
-
-            final MediaRequest<ImageResource> imageRequest =
-                    descriptor.buildSyncMediaRequest(mContext);
-            final ImageResource imageResource =
-                    MediaResourceManager.get().requestMediaResourceSync(imageRequest);
-            if (imageResource != null && imageResource.getBitmap() != null) {
-                setImageResource(imageResource);
-                return Bitmap.createBitmap(imageResource.getBitmap());
-            } else {
-                releaseImageResource();
-                return null;
-            }
-        }
-
-        /**
-         * @return the "View more messages" view. When the user taps this item, they're
-         * taken to the conversation in Bugle.
-         */
-        @Override
-        protected RemoteViews getViewMoreItemsView() {
-            if (LogUtil.isLoggable(TAG, LogUtil.VERBOSE)) {
-                LogUtil.v(TAG, "getViewMoreConversationsView");
-            }
-            final RemoteViews view = new RemoteViews(mContext.getPackageName(),
-                    R.layout.widget_loading);
-            view.setTextViewText(
-                    R.id.loading_text, mContext.getText(R.string.view_more_messages));
-
-            // Tapping this "More messages" item should take us to the conversation.
-            final Intent intent = UIIntents.get().getIntentForConversationActivity(mContext,
-                    mConversationId, null /* draft */);
-            view.setOnClickFillInIntent(R.id.widget_loading, intent);
-            return view;
-        }
-
-        @Override
-        public RemoteViews getLoadingView() {
-            final RemoteViews view = new RemoteViews(mContext.getPackageName(),
-                    R.layout.widget_loading);
-            view.setTextViewText(
-                    R.id.loading_text, mContext.getText(R.string.loading_messages));
-            return view;
-        }
-
-        @Override
-        public int getViewTypeCount() {
-            return 3;   // Number of different list items that can be returned -
-                        // 1- incoming list item
-                        // 2- outgoing list item
-                        // 3- more items list item
-        }
-
-        @Override
-        protected int getMainLayoutId() {
-            return R.layout.widget_conversation;
-        }
-
-        private void setImageResource(final ImageResource resource) {
-            if (mImageResource != resource) {
-                // Clear out any information for what is currently used
-                releaseImageResource();
-                mImageResource = resource;
-            }
-        }
-
-        private void releaseImageResource() {
-            if (mImageResource != null) {
-                mImageResource.release();
-            }
-            mImageResource = null;
-        }
-    }
-
-}
diff --git a/tests/Android.bp b/tests/Android.bp
deleted file mode 100644
index 4db1efd..0000000
--- a/tests/Android.bp
+++ /dev/null
@@ -1,45 +0,0 @@
-//  Copyright (C) 2015 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 {
-    default_team: "trendy_team_messages",
-    // See: http://go/android-license-faq
-    default_applicable_licenses: [
-        "Android-Apache-2.0",
-    ],
-}
-
-android_test {
-    name: "messagingtests",
-    srcs: ["src/**/*.java"],
-    instrumentation_for: "messaging",
-    optimize: {
-        enabled: false,
-    },
-    sdk_version: "current",
-    test_suites: ["general-tests"],
-    certificate: "platform",
-    static_libs: [
-        "mockito-target",
-        "androidx.test.rules",
-    ],
-    libs: [
-        "android.test.mock.stubs",
-        "android.test.runner.stubs",
-        "android.test.base.stubs",
-    ],
-    data: [
-        ":messaging",
-    ],
-}
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
deleted file mode 100644
index 07f0d17..0000000
--- a/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    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.android.messaging.test" >
-
-    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="24"/>
-
-    <application android:label="Messaging Tests" >
-        <uses-library android:name="android.test.runner" />
-    </application>
-
-    <instrumentation
-        android:label="Messaging Tests"
-        android:name="android.test.InstrumentationTestRunner"
-        android:targetPackage="com.android.messaging"
-        android:windowSoftInputMode="stateHidden|adjustResize" />
-</manifest>
diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml
deleted file mode 100644
index cd66c48..0000000
--- a/tests/AndroidTest.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2019 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.
--->
-<configuration description="Runs Messaging Tests.">
-    <option name="test-suite-tag" value="apct" />
-    <option name="test-suite-tag" value="apct-instrumentation" />
-    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
-        <option name="cleanup-apks" value="true" />
-        <option name="test-file-name" value="messagingtests.apk" />
-        <option name="test-file-name" value="messaging.apk" />
-    </target_preparer>
-
-    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="com.android.messaging.test" />
-        <option name="runner" value="android.test.InstrumentationTestRunner" />
-    </test>
-</configuration>
-
diff --git a/tests/src/com/android/messaging/BugleTestCase.java b/tests/src/com/android/messaging/BugleTestCase.java
deleted file mode 100644
index 64c6c86..0000000
--- a/tests/src/com/android/messaging/BugleTestCase.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging;
-
-import android.content.Context;
-import android.test.AndroidTestCase;
-
-/*
- * Base class for service tests that takes care of housekeeping that is common amongst basic test
- * cases.
- */
-public abstract class BugleTestCase extends AndroidTestCase {
-
-    static {
-        // Set flag during loading of test cases to prevent application initialization starting
-        setTestsRunning();
-    }
-
-    public static void setTestsRunning() {
-        BugleApplication.setTestsRunning();
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        TestUtil.testSetup(super.getContext(), this);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        TestUtil.testTeardown(this);
-    }
-
-    @Override
-    public Context getContext() {
-        // This doesn't really get the "application context" - just the fake context
-        // that the factory has been initialized with for each test case.
-        return Factory.get().getApplicationContext();
-    }
-
-    public Context getTestContext() {
-        return super.getContext();
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/messaging/FakeContentProvider.java b/tests/src/com/android/messaging/FakeContentProvider.java
deleted file mode 100644
index eb90cbb..0000000
--- a/tests/src/com/android/messaging/FakeContentProvider.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging;
-
-import android.content.ContentProvider;
-import android.content.ContentProviderClient;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.pm.ProviderInfo;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.RemoteException;
-import androidx.collection.SimpleArrayMap;
-import android.text.TextUtils;
-
-import com.android.messaging.datamodel.FakeCursor;
-import com.android.messaging.util.LogUtil;
-
-import java.util.ArrayList;
-
-public class FakeContentProvider extends ContentProvider {
-
-    private static class ContentOverride {
-        private final String uri;
-        private final String where;
-        private final String args;
-        private final String[] columns;
-        private final Object[][] data;
-
-        ContentOverride(final String uri, final String where, final String args,
-                final String[] columns, final Object[][] data) {
-            this.uri = uri;
-            this.where = where;
-            this.args = args;
-            this.columns = columns;
-            this.data = data;
-        }
-
-        boolean match(final String uri, final String where, final String[] args) {
-            if (!this.uri.equals(uri) || !TextUtils.equals(this.where, where)) {
-                return false;
-            }
-
-            if (this.args == null || args == null) {
-                return this.args == null && args == null;
-            }
-
-            return this.args.equals(TextUtils.join(";", args));
-        }
-    }
-
-    private final Context mGlobalContext;
-    private final ArrayList<ContentOverride> mOverrides = new ArrayList<ContentOverride>();
-    private final SimpleArrayMap<String, String> mTypes = new SimpleArrayMap<String, String>();
-    private final ContentProviderClient mProvider;
-    private final Uri mUri;
-
-    public FakeContentProvider(final Context context, final Uri uri, final boolean canDelegate) {
-        mGlobalContext = context;
-        mUri = uri;
-        if (canDelegate) {
-            mProvider = mGlobalContext.getContentResolver().acquireContentProviderClient(mUri);
-        } else {
-            mProvider = null;
-        }
-
-        ProviderInfo providerInfo = new ProviderInfo();
-        providerInfo.authority = uri.getAuthority();
-
-        this.attachInfo(mGlobalContext, providerInfo);
-    }
-
-    public void addOverrideData(final Uri uri, final String where, final String args,
-            final String[] columns, final Object[][] data) {
-        mOverrides.add(new ContentOverride(uri.toString(), where, args, columns, data));
-    }
-
-    public void addOverrideType(final Uri uri, final String type) {
-        mTypes.put(uri.toString(), type);
-    }
-
-    @Override
-    public boolean onCreate() {
-        return false;
-    }
-
-    @Override
-    public void shutdown() {
-        if (mProvider != null) {
-            mProvider.release();
-        }
-    }
-
-    @Override
-    public Cursor query(final Uri uri, final String[] projection, final String selection,
-            final String[] selectionArgs, final String sortOrder) {
-        LogUtil.w(LogUtil.BUGLE_TAG, "FakeContentProvider: query " + uri.toString()
-                + " for " + (projection == null ? null : TextUtils.join(",", projection))
-                + " where " + selection
-                + " with " + (selectionArgs == null ? null : TextUtils.join(";", selectionArgs)));
-
-        for(final ContentOverride content : mOverrides) {
-            if (content.match(uri.toString(), selection, selectionArgs)) {
-                return new FakeCursor(projection, content.columns, content.data);
-            }
-        }
-        if (mProvider != null) {
-            try {
-                LogUtil.w(LogUtil.BUGLE_TAG, "FakeContentProvider: delgating");
-
-                final Cursor cursor = mProvider.query(uri, projection, selection, selectionArgs,
-                        sortOrder);
-
-                LogUtil.w(LogUtil.BUGLE_TAG, "FakeContentProvider: response size "
-                        + cursor.getCount() + " contains " + TextUtils.join(",",
-                                cursor.getColumnNames()) + " type(0) " + cursor.getType(0));
-
-                return cursor;
-            } catch (final RemoteException e) {
-                e.printStackTrace();
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public String getType(final Uri uri) {
-        String type = mTypes.get(uri.toString());
-        if (type == null) {
-            try {
-                type = mProvider.getType(uri);
-            } catch (final RemoteException e) {
-                e.printStackTrace();
-            }
-        }
-        return type;
-    }
-
-    @Override
-    public Uri insert(final Uri uri, final ContentValues values) {
-        // TODO: Add code to track insert operations and return correct status
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int delete(final Uri uri, final String selection, final String[] selectionArgs) {
-        // TODO: Add code to track delete operations and return correct status
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int update(final Uri uri, final ContentValues values, final String selection,
-            final String[] selectionArgs) {
-        // TODO: Add code to track update operations and return correct status
-        throw new UnsupportedOperationException();
-    }
-
-    public Bundle call(final String callingPkg, final String method, final String arg,
-            final Bundle extras) {
-        return null;
-    }
-}
diff --git a/tests/src/com/android/messaging/FakeContext.java b/tests/src/com/android/messaging/FakeContext.java
deleted file mode 100644
index 671e0f3..0000000
--- a/tests/src/com/android/messaging/FakeContext.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging;
-
-import android.content.ComponentName;
-import android.content.ContentProvider;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.test.RenamingDelegatingContext;
-import android.test.mock.MockContentResolver;
-import android.util.Log;
-
-import java.util.ArrayList;
-
-public class FakeContext extends RenamingDelegatingContext {
-    private static final String TAG = "FakeContext";
-
-    public interface FakeContextHost {
-        public String getServiceClassName();
-        public void startServiceForStub(Intent intent);
-        public void onStartCommandForStub(Intent intent, int flags, int startid);
-    }
-
-    ArrayList<Intent> mStartedIntents;
-    boolean mServiceStarted = false;
-    private final FakeContextHost mService;
-    private final MockContentResolver mContentResolver;
-
-
-    public FakeContext(final Context context, final FakeContextHost service) {
-        super(context, "test_");
-        mService = service;
-        mStartedIntents = new ArrayList<Intent>();
-        mContentResolver = new MockContentResolver();
-    }
-
-    public FakeContext(final Context context) {
-        this(context, null);
-    }
-
-    public ArrayList<Intent> extractIntents() {
-        final ArrayList<Intent> intents = mStartedIntents;
-        mStartedIntents = new ArrayList<Intent>();
-        return intents;
-    }
-
-    @Override
-    public ComponentName startService(final Intent intent) {
-        // Record that a startService occurred with the intent that was passed.
-        Log.d(TAG, "MockContext receiving startService. intent=" + intent.toString());
-        mStartedIntents.add(intent);
-        if (mService == null) {
-            return super.startService(intent);
-        } else if (intent.getComponent() != null &&
-                intent.getComponent().getClassName().equals(mService.getServiceClassName())) {
-            if (!mServiceStarted) {
-                Log.d(TAG, "MockContext first start service.");
-                mService.startServiceForStub(intent);
-            } else {
-                Log.d(TAG, "MockContext not first start service. Calling onStartCommand.");
-                mService.onStartCommandForStub(intent, 0, 0);
-            }
-            mServiceStarted = true;
-            return new ComponentName(this, intent.getComponent().getClassName());
-        }
-        return null;
-    }
-
-    @Override
-    public ContentResolver getContentResolver() {
-        // If you want to use a content provider in your test, then you need to add it
-        // explicitly.
-        return mContentResolver;
-    }
-
-    public void addContentProvider(final String name, final ContentProvider provider) {
-        mContentResolver.addProvider(name, provider);
-    }
-
-    public void addDefaultProvider(final Context context, final Uri uri) {
-        final FakeContentProvider provider = new FakeContentProvider(context, uri, true);
-        mContentResolver.addProvider(uri.getAuthority(), provider);
-    }
-
-}
diff --git a/tests/src/com/android/messaging/FakeFactory.java b/tests/src/com/android/messaging/FakeFactory.java
deleted file mode 100644
index 4c7c9de..0000000
--- a/tests/src/com/android/messaging/FakeFactory.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging;
-
-import android.content.ContentProvider;
-import android.content.Context;
-import android.net.Uri;
-import android.provider.Settings;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.MemoryCacheManager;
-import com.android.messaging.datamodel.ParticipantRefresh.ContactContentObserver;
-import com.android.messaging.datamodel.media.MediaCacheManager;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.sms.ApnDatabase;
-import com.android.messaging.sms.BugleCarrierConfigValuesLoader;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.BuglePrefs;
-import com.android.messaging.util.FakeBugleGservices;
-import com.android.messaging.util.FakeBuglePrefs;
-import com.android.messaging.util.MediaUtil;
-import com.android.messaging.util.OsUtil;
-import com.android.messaging.util.PhoneUtils;
-
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class FakeFactory extends Factory {
-    private Context mContext;
-    private FakeContext mFakeContext;
-    private BugleGservices mBugleGservices;
-    private BuglePrefs mBuglePrefs;
-    private DataModel mDataModel;
-    private UIIntents mUIIntents;
-    private MemoryCacheManager mMemoryCacheManager;
-    private MediaResourceManager mMediaResourceManager;
-    private MediaCacheManager mMediaCacheManager;
-    @Mock protected PhoneUtils mPhoneUtils;
-    private MediaUtil mMediaUtil;
-    private BugleCarrierConfigValuesLoader mCarrierConfigValuesLoader;
-
-    private FakeFactory() {
-    }
-
-    public static FakeFactory registerWithFakeContext(final Context context,
-            final FakeContext fake) {
-        // In tests we currently NEVER run the application/factory initialization
-        Assert.isTrue(!sRegistered);
-        Assert.isTrue(!sInitialized);
-
-        final FakeFactory factory = new FakeFactory();
-        Factory.setInstance(factory);
-
-        // At this point Factory is published. Services can now get initialized and depend on
-        // Factory.get().
-        factory.mContext = context;
-        factory.mFakeContext = fake;
-        factory.mMediaResourceManager = Mockito.mock(MediaResourceManager.class);
-        factory.mBugleGservices = new FakeBugleGservices();
-        factory.mBuglePrefs = new FakeBuglePrefs();
-        factory.mPhoneUtils = Mockito.mock(PhoneUtils.class);
-
-        ApnDatabase.initializeAppContext(context);
-
-        Mockito.when(factory.mPhoneUtils.getCanonicalBySystemLocale(Matchers.anyString()))
-                .thenAnswer(new Answer<String>() {
-                        @Override
-                        public String answer(final InvocationOnMock invocation) throws Throwable {
-                            final Object[] args = invocation.getArguments();
-                            return (String) args[0];
-                        }
-                    }
-                );
-        Mockito.when(factory.mPhoneUtils.getCanonicalBySimLocale(Matchers.anyString())).thenAnswer(
-                new Answer<String>() {
-                    @Override
-                    public String answer(final InvocationOnMock invocation) throws Throwable {
-                        final Object[] args = invocation.getArguments();
-                        return (String) args[0];
-                    }
-                }
-        );
-        Mockito.when(factory.mPhoneUtils.formatForDisplay(Matchers.anyString())).thenAnswer(
-                new Answer<String>() {
-                    @Override
-                    public String answer(final InvocationOnMock invocation) throws Throwable {
-                        return (String) invocation.getArguments()[0];
-                    }
-                }
-        );
-        if (OsUtil.isAtLeastL_MR1()) {
-            Mockito.when(factory.mPhoneUtils.toLMr1()).thenReturn(
-                    new PhoneUtils.LMr1() {
-                        @Override
-                        public SubscriptionInfo getActiveSubscriptionInfo() {
-                            return null;
-                        }
-
-                        @Override
-                        public List<SubscriptionInfo> getActiveSubscriptionInfoList() {
-                            // Return empty list
-                            return new ArrayList<>();
-                        }
-
-                        @Override
-                        public void registerOnSubscriptionsChangedListener(
-                                final SubscriptionManager.OnSubscriptionsChangedListener listener) {
-                        }
-                    }
-            );
-        }
-        // By default only allow reading of system settings (that we provide) - can delegate
-        // to real provider if required.
-        final FakeContentProvider settings = new FakeContentProvider(context,
-                Settings.System.CONTENT_URI, false);
-        settings.addOverrideData(Settings.System.CONTENT_URI, "name=?", "time_12_24",
-                new String[] { "value" }, new Object[][] { { "12" } });
-        settings.addOverrideData(Settings.System.CONTENT_URI, "name=?", "sound_effects_enabled",
-                new String[] { "value" }, new Object[][] { { 1 } });
-
-        factory.withProvider(Settings.System.CONTENT_URI, settings);
-
-        return factory;
-    }
-
-    public static FakeFactory register(final Context applicationContext) {
-        final FakeContext context = new FakeContext(applicationContext);
-        return registerWithFakeContext(applicationContext, context);
-    }
-
-    public static FakeFactory registerWithoutFakeContext(final Context applicationContext) {
-        return registerWithFakeContext(applicationContext, null);
-    }
-
-    @Override
-    public void onRequiredPermissionsAcquired() {
-    }
-
-    @Override
-    public Context getApplicationContext() {
-        return ((mFakeContext != null) ? mFakeContext : mContext );
-    }
-
-    @Override
-    public DataModel getDataModel() {
-        return mDataModel;
-    }
-
-    @Override
-    public BugleGservices getBugleGservices() {
-        return mBugleGservices;
-    }
-
-    @Override
-    public BuglePrefs getApplicationPrefs() {
-        return mBuglePrefs;
-    }
-
-    @Override
-    public BuglePrefs getWidgetPrefs() {
-        return mBuglePrefs;
-    }
-
-    @Override
-    public BuglePrefs getSubscriptionPrefs(final int subId) {
-        return mBuglePrefs;
-    }
-
-    @Override
-    public UIIntents getUIIntents() {
-        return mUIIntents;
-    }
-
-    @Override
-    public MemoryCacheManager getMemoryCacheManager() {
-        return mMemoryCacheManager;
-    }
-
-    @Override
-    public MediaResourceManager getMediaResourceManager() {
-        return mMediaResourceManager;
-    }
-
-    @Override
-    public MediaCacheManager getMediaCacheManager() {
-        return mMediaCacheManager;
-    }
-
-    @Override
-    public PhoneUtils getPhoneUtils(final int subId) {
-        return mPhoneUtils;
-    }
-
-    @Override
-    public MediaUtil getMediaUtil() {
-        return mMediaUtil;
-    }
-
-    @Override
-    public BugleCarrierConfigValuesLoader getCarrierConfigValuesLoader() {
-        return mCarrierConfigValuesLoader;
-    }
-
-    @Override
-    public ContactContentObserver getContactContentObserver() {
-        return null;
-    }
-
-    @Override
-    public void reclaimMemory() {
-    }
-
-    @Override
-    public void onActivityResume() {
-    }
-
-    public FakeFactory withDataModel(final DataModel dataModel) {
-        this.mDataModel = dataModel;
-        return this;
-    }
-
-    public FakeFactory withUIIntents(final UIIntents uiIntents) {
-        this.mUIIntents = uiIntents;
-        return this;
-    }
-
-    public FakeFactory withMemoryCacheManager(final MemoryCacheManager memoryCacheManager) {
-        this.mMemoryCacheManager = memoryCacheManager;
-        return this;
-    }
-
-    public FakeFactory withBugleGservices(final BugleGservices bugleGservices) {
-        this.mBugleGservices = bugleGservices;
-        return this;
-    }
-
-    public FakeFactory withMediaCacheManager(final MediaCacheManager mediaCacheManager) {
-        this.mMediaCacheManager = mediaCacheManager;
-        return this;
-    }
-
-    public FakeFactory withProvider(final Uri uri, final ContentProvider provider) {
-        if (mFakeContext != null) {
-            mFakeContext.addContentProvider(uri.getAuthority(), provider);
-        }
-        return this;
-    }
-
-    public FakeFactory withDefaultProvider(final Uri uri) {
-        if (mFakeContext != null) {
-            mFakeContext.addDefaultProvider(this.mContext, uri);
-        }
-        return this;
-    }
-
-    public FakeFactory withMediaUtil(final MediaUtil mediaUtil) {
-        this.mMediaUtil = mediaUtil;
-        return this;
-    }
-
-    public FakeFactory withCarrierConfigValuesLoader(
-            final BugleCarrierConfigValuesLoader carrierConfigValuesLoader) {
-        this.mCarrierConfigValuesLoader = carrierConfigValuesLoader;
-        return this;
-    }
-}
diff --git a/tests/src/com/android/messaging/TestUtil.java b/tests/src/com/android/messaging/TestUtil.java
deleted file mode 100644
index 77a8450..0000000
--- a/tests/src/com/android/messaging/TestUtil.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging;
-
-import android.appwidget.AppWidgetManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.os.PowerManager;
-import android.test.InstrumentationTestCase;
-
-import com.android.messaging.util.LogUtil;
-import com.android.messaging.widget.BugleWidgetProvider;
-import com.android.messaging.widget.WidgetConversationProvider;
-
-import junit.framework.TestCase;
-
-import org.mockito.MockitoAnnotations;
-
-/**
- * Helpers that can be called from all test base classes to 'reset' state and prevent as much as
- * possible having side effects leak from one test to another.
- */
-public class TestUtil {
-    public static void testSetup(final Context context, final TestCase testCase) {
-        haltIfTestsAreNotAbleToRun(context);
-
-        // Workaround to get mockito to work.
-        // See https://code.google.com/p/dexmaker/issues/detail?id=2. TODO: Apparently
-        // solvable by using a different runner.
-        System.setProperty("dexmaker.dexcache",
-                context.getCacheDir().getPath());
-
-        // Initialize @Mock objects.
-        MockitoAnnotations.initMocks(testCase);
-
-        // Tests have to explicitly override this
-        Factory.setInstance(null);
-    }
-
-    public static void testTeardown(final TestCase testCase) {
-        if (testCase instanceof InstrumentationTestCase) {
-            // Make sure the test case is finished running or we'll get NPEs when accessing
-            // Fragment.get()
-            ((InstrumentationTestCase) testCase).getInstrumentation().waitForIdleSync();
-        }
-        Factory.setInstance(null);
-    }
-
-    private static void haltIfTestsAreNotAbleToRun(final Context context) {
-        final PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
-        if (!pm.isScreenOn()) {
-            // Ideally we could turn it on for you using the WindowManager, but we currently run
-            // the tests independently of the activity life cycle.
-            LogUtil.wtf(LogUtil.BUGLE_TAG, "You need to turn on your screen to run tests!");
-        }
-
-        final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
-        int [] conversationWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context,
-                WidgetConversationProvider.class));
-        int [] conversationListWidgetIds = appWidgetManager.getAppWidgetIds(new
-                ComponentName(context, BugleWidgetProvider.class));
-
-        if ((conversationWidgetIds.length > 0) || (conversationListWidgetIds.length > 0)) {
-            // Currently widgets asynchronously access our content providers and singletons which
-            // interacts badly with our test setup and tear down.
-            LogUtil.wtf(LogUtil.BUGLE_TAG, "You currently can't reliably run unit tests" +
-                    " with a Messaging widget on your desktop!");
-        }
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/BindingTest.java b/tests/src/com/android/messaging/datamodel/BindingTest.java
deleted file mode 100644
index 6052ed1..0000000
--- a/tests/src/com/android/messaging/datamodel/BindingTest.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.datamodel.binding.BindableData;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.binding.ImmutableBindingRef;
-
-/**
- * Test binding
- */
-@SmallTest
-public class BindingTest extends BugleTestCase {
-    private static final Object TEST_DATA_ID = "myDataId";
-    private static final Object YOUR_DATA_ID = "yourDataId";
-
-    public void testBindingStartsUnbound() {
-        final Binding<TestBindableData> binding = BindingBase.createBinding(this);
-        assertNull(binding.getBindingId());
-    }
-
-    public void testDataStartsUnbound() {
-        final TestBindableData data = new TestBindableData(TEST_DATA_ID);
-        assertFalse(data.isBound());
-    }
-
-    public void testBindingUpdatesDataAndBindee() {
-        final Binding<TestBindableData> binding = BindingBase.createBinding(this);
-        final TestBindableData data = new TestBindableData(TEST_DATA_ID);
-        binding.bind(data);
-        assertTrue(binding.isBound());
-        assertEquals(binding.getData(), data);
-        assertTrue(data.isBound(binding.getBindingId()));
-        assertFalse(data.isBound("SomeRandomString"));
-        assertNotNull(binding.getBindingId());
-        assertFalse(data.mListenersUnregistered);
-    }
-
-    public void testRebindingFails() {
-        final Binding<TestBindableData> binding = BindingBase.createBinding(this);
-        final TestBindableData yours = new TestBindableData(YOUR_DATA_ID);
-        binding.bind(yours);
-        assertEquals(binding.getData(), yours);
-        assertTrue(yours.isBound(binding.getBindingId()));
-        final TestBindableData data = new TestBindableData(TEST_DATA_ID);
-        try {
-            binding.bind(data);
-            fail();
-        } catch (final IllegalStateException e) {
-        }
-        assertTrue(binding.isBound());
-        assertEquals(binding.getData(), yours);
-        assertTrue(yours.isBound(binding.getBindingId()));
-    }
-
-    public void testUnbindingClearsDataAndBindee() {
-        final Binding<TestBindableData> binding = BindingBase.createBinding(this);
-        final TestBindableData data = new TestBindableData(TEST_DATA_ID);
-        binding.bind(data);
-        assertTrue(data.isBound(binding.getBindingId()));
-        assertTrue(binding.isBound());
-        binding.unbind();
-        try {
-            final TestBindableData other = binding.getData();
-            fail();
-        } catch (final IllegalStateException e) {
-        }
-        assertFalse(data.isBound());
-        assertNull(binding.getBindingId());
-        assertTrue(data.mListenersUnregistered);
-    }
-
-    public void testUnbindingAndRebinding() {
-        final Binding<TestBindableData> binding = BindingBase.createBinding(this);
-        final TestBindableData yours = new TestBindableData(YOUR_DATA_ID);
-        binding.bind(yours);
-        assertEquals(binding.getData(), yours);
-        assertTrue(yours.isBound(binding.getBindingId()));
-        binding.unbind();
-        assertFalse(yours.isBound());
-        assertNull(binding.getBindingId());
-
-        final TestBindableData data = new TestBindableData(TEST_DATA_ID);
-        binding.bind(data);
-        assertEquals(binding.getData(), data);
-        assertTrue(data.isBound(binding.getBindingId()));
-        assertFalse(data.isBound("SomeRandomString"));
-        assertTrue(binding.isBound());
-        assertNotNull(binding.getBindingId());
-    }
-
-    public void testBindingReference() {
-        final Binding<TestBindableData> binding = BindingBase.createBinding(this);
-        final TestBindableData data = new TestBindableData(TEST_DATA_ID);
-        binding.bind(data);
-        assertEquals(binding.getData(), data);
-        assertTrue(data.isBound(binding.getBindingId()));
-
-        final ImmutableBindingRef<TestBindableData> bindingRef =
-                BindingBase.createBindingReference(binding);
-        assertEquals(bindingRef.getData(), data);
-        assertTrue(data.isBound(bindingRef.getBindingId()));
-
-        binding.unbind();
-        assertFalse(binding.isBound());
-        assertNull(binding.getBindingId());
-        assertFalse(bindingRef.isBound());
-        assertNull(bindingRef.getBindingId());
-    }
-
-    static class TestBindableData extends BindableData {
-        private final Object mDataId;
-        public boolean mListenersUnregistered;
-
-        public TestBindableData(final Object dataId) {
-            mDataId = dataId;
-            mListenersUnregistered = false;
-        }
-
-        @Override
-        public void unregisterListeners() {
-            mListenersUnregistered = true;
-        }
-
-        @Override
-        public boolean isBound() {
-            return super.isBound();
-        }
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/BitmapPoolTest.java b/tests/src/com/android/messaging/datamodel/BitmapPoolTest.java
deleted file mode 100644
index c7bb3d9..0000000
--- a/tests/src/com/android/messaging/datamodel/BitmapPoolTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-
-import org.mockito.Mock;
-
-import java.util.HashSet;
-import java.util.Set;
-
-@SmallTest
-public class BitmapPoolTest extends BugleTestCase {
-    private static final int POOL_SIZE = 5;
-    private static final int IMAGE_DIM = 1;
-    private static final String NAME = "BitmapPoolTest";
-
-    @Mock private MemoryCacheManager mockMemoryCacheManager;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        FakeFactory.register(getTestContext())
-                .withMemoryCacheManager(mockMemoryCacheManager);
-    }
-
-    private Set<Bitmap> fillPoolAndGetPoolContents(final BitmapPool pool, final int width,
-            final int height) {
-        final Set<Bitmap> returnedBitmaps = new HashSet<Bitmap>();
-        for (int i = 0; i < POOL_SIZE; i++) {
-            final Bitmap temp = pool.createOrReuseBitmap(width, height);
-            assertFalse(returnedBitmaps.contains(temp));
-            returnedBitmaps.add(temp);
-        }
-        for (final Bitmap b : returnedBitmaps) {
-            pool.reclaimBitmap(b);
-        }
-        assertTrue(pool.isFull(width, height));
-        return returnedBitmaps;
-    }
-
-    public void testCreateAndPutBackInPoolTest() {
-        final BitmapPool pool = new BitmapPool(POOL_SIZE, NAME);
-        final Bitmap bitmap = pool.createOrReuseBitmap(IMAGE_DIM, IMAGE_DIM);
-        assertFalse(bitmap.isRecycled());
-        assertFalse(pool.isFull(IMAGE_DIM, IMAGE_DIM));
-        pool.reclaimBitmap(bitmap);
-
-        // Don't recycle because the pool isn't full yet.
-        assertFalse(bitmap.isRecycled());
-    }
-
-    public void testCreateBeyondFullAndCheckReuseTest() {
-        final BitmapPool pool = new BitmapPool(POOL_SIZE, NAME);
-        final Set<Bitmap> returnedBitmaps =
-                fillPoolAndGetPoolContents(pool, IMAGE_DIM, IMAGE_DIM);
-        final Bitmap overflowBitmap = pool.createOrReuseBitmap(IMAGE_DIM, IMAGE_DIM);
-        assertFalse(overflowBitmap.isRecycled());
-        assertTrue(returnedBitmaps.contains(overflowBitmap));
-    }
-
-    /**
-     * Make sure that we have the correct options to create mutable for bitmap pool reuse.
-     */
-    public void testAssertBitmapOptionsAreMutable() {
-        final BitmapFactory.Options options =
-                BitmapPool.getBitmapOptionsForPool(false, IMAGE_DIM, IMAGE_DIM);
-        assertTrue(options.inMutable);
-    }
-
-    public void testDecodeFromResourceBitmap() {
-        final BitmapPool pool = new BitmapPool(POOL_SIZE, NAME);
-        final BitmapFactory.Options options =
-                BitmapPool.getBitmapOptionsForPool(true, IMAGE_DIM, IMAGE_DIM);
-        final Resources resources = getContext().getResources();
-        final Bitmap resourceBitmap = pool.decodeSampledBitmapFromResource(
-                R.drawable.msg_bubble_incoming, resources, options, IMAGE_DIM, IMAGE_DIM);
-        assertNotNull(resourceBitmap);
-        assertTrue(resourceBitmap.getByteCount() > 0);
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/BugleServiceTestCase.java b/tests/src/com/android/messaging/datamodel/BugleServiceTestCase.java
deleted file mode 100644
index 42eb647..0000000
--- a/tests/src/com/android/messaging/datamodel/BugleServiceTestCase.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.app.Service;
-import android.test.ServiceTestCase;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.TestUtil;
-
-
-/*
- * Base class for service tests that takes care of housekeeping that is commong amongst our service
- * test case.
- */
-public abstract class BugleServiceTestCase<T extends Service> extends ServiceTestCase<T> {
-
-    static {
-        // Set flag during loading of test cases to prevent application initialization starting
-        BugleTestCase.setTestsRunning();
-    }
-
-    public BugleServiceTestCase(final Class<T> serviceClass) {
-        super(serviceClass);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-      super.setUp();
-      TestUtil.testSetup(getContext(), this);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        TestUtil.testTeardown(this);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/messaging/datamodel/ConversationListTest.java b/tests/src/com/android/messaging/datamodel/ConversationListTest.java
deleted file mode 100644
index b9ef5d0..0000000
--- a/tests/src/com/android/messaging/datamodel/ConversationListTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-
-@SmallTest
-public class ConversationListTest extends BugleTestCase {
-    public void testTesting() {
-        assertTrue(true);
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/DataModelTest.java b/tests/src/com/android/messaging/datamodel/DataModelTest.java
deleted file mode 100644
index 701f053..0000000
--- a/tests/src/com/android/messaging/datamodel/DataModelTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.data.ConversationData;
-import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListData.ConversationListDataListener;
-
-import org.mockito.Mock;
-
-public class DataModelTest extends BugleTestCase {
-
-    DataModel dataModel;
-    @Mock protected ConversationDataListener mockConversationDataListener;
-    @Mock protected ConversationListDataListener mockConversationListDataListener;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        FakeFactory factory = FakeFactory.register(mContext);
-        dataModel = new DataModelImpl(getTestContext());
-        factory.withDataModel(dataModel);
-    }
-
-    @SmallTest
-    public void testCreateConversationList() {
-        final ConversationListData list = dataModel.createConversationListData(getContext(),
-                        mockConversationListDataListener, true);
-        assertTrue(list instanceof ConversationListData);
-        final ConversationData conv = dataModel.createConversationData(getContext(),
-                mockConversationDataListener, "testConversation");
-        assertTrue(conv instanceof ConversationData);
-    }
-
-    private static final String FOCUSED_CONV_ID = "focused_conv_id";
-
-    @SmallTest
-    public void testFocusedConversationIsObservable() {
-        dataModel.setFocusedConversation(FOCUSED_CONV_ID);
-        assertTrue(dataModel.isNewMessageObservable(FOCUSED_CONV_ID));
-        dataModel.setFocusedConversation(null);
-        assertFalse(dataModel.isNewMessageObservable(FOCUSED_CONV_ID));
-    }
-
-    @SmallTest
-    public void testConversationIsObservableInList() {
-        dataModel.setConversationListScrolledToNewestConversation(true);
-        assertTrue(dataModel.isNewMessageObservable(FOCUSED_CONV_ID));
-        dataModel.setConversationListScrolledToNewestConversation(false);
-        assertFalse(dataModel.isNewMessageObservable(FOCUSED_CONV_ID));
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/FakeCursor.java b/tests/src/com/android/messaging/datamodel/FakeCursor.java
deleted file mode 100644
index 59d1b89..0000000
--- a/tests/src/com/android/messaging/datamodel/FakeCursor.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.os.Bundle;
-import android.test.mock.MockCursor;
-
-import java.util.ArrayList;
-
-/**
- * A simple in memory fake cursor that can be used for UI tests.
- */
-public class FakeCursor extends MockCursor {
-    private final ArrayList<Integer> mProjection;
-    private final String[] mColumnNamesOfData;
-    private final Object[][] mData;
-    private int mIndex;
-
-    public FakeCursor(final String[] projection, final String[] columnNames,
-            final Object[][] data) {
-        mColumnNamesOfData = columnNames;
-        mData = data;
-        mIndex = -1;
-        mProjection = new ArrayList<Integer>(projection.length);
-        for (final String column : projection) {
-            mProjection.add(getColumnIndex(column));
-        }
-    }
-
-    public Object getAt(final String columnName, final int row) {
-        final int dataIdx = getColumnIndex(columnName);
-        return (dataIdx < 0 || row < 0 || row >= mData.length) ? 0 : mData[row][dataIdx];
-    }
-
-    @Override
-    public int getCount() {
-        return mData.length;
-    }
-
-    @Override
-    public boolean isFirst() {
-        return mIndex == 0;
-    }
-
-    @Override
-    public boolean isLast() {
-        return mIndex == mData.length - 1;
-    }
-
-    @Override
-    public boolean moveToFirst() {
-        if (mData.length == 0) {
-            return false;
-        }
-        mIndex = 0;
-        return true;
-    }
-
-    @Override
-    public boolean moveToPosition(final int position) {
-        if (position < 0 || position >= mData.length) {
-            return false;
-        }
-        mIndex = position;
-        return true;
-    }
-
-    @Override
-    public int getPosition() {
-        return mIndex;
-    }
-
-    @Override
-    public boolean moveToPrevious() {
-        if (mIndex <= 0) {
-            return false;
-        }
-        mIndex--;
-        return true;
-    }
-
-    @Override
-    public boolean moveToNext() {
-        if (mIndex == mData.length - 1) {
-            return false;
-        }
-
-        mIndex++;
-        return true;
-    }
-
-    @Override
-    public int getColumnCount() {
-        return mColumnNamesOfData.length;
-    }
-
-    @Override
-    public int getColumnIndex(final String columnName) {
-        for (int i = 0 ; i < mColumnNamesOfData.length ; i++) {
-            if (mColumnNamesOfData[i].equals(columnName)) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    @Override
-    public int getColumnIndexOrThrow(final String columnName) {
-        final int result = getColumnIndex(columnName);
-        if (result == -1) {
-            throw new IllegalArgumentException();
-        }
-
-        return result;
-    }
-
-    @Override
-    public String getString(final int columnIndex) {
-        final int dataIdx = mProjection.get(columnIndex);
-        final Object obj = (dataIdx < 0 ? null : mData[mIndex][dataIdx]);
-        return (obj == null ? null : obj.toString());
-    }
-
-    @Override
-    public int getInt(final int columnIndex) {
-        final int dataIdx = mProjection.get(columnIndex);
-        return (dataIdx < 0 ? 0 : (Integer) mData[mIndex][dataIdx]);
-    }
-
-    @Override
-    public long getLong(final int columnIndex) {
-        final int dataIdx = mProjection.get(columnIndex);
-        return (dataIdx < 0 ? 0 : (Long) mData[mIndex][dataIdx]);
-    }
-
-    @Override
-    public void close() {
-    }
-
-    @Override
-    public boolean isClosed() {
-        return false;
-    }
-
-    @Override
-    public Bundle getExtras() { return null; }
-}
diff --git a/tests/src/com/android/messaging/datamodel/FakeDataModel.java b/tests/src/com/android/messaging/datamodel/FakeDataModel.java
deleted file mode 100644
index 1daaa20..0000000
--- a/tests/src/com/android/messaging/datamodel/FakeDataModel.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.Context;
-import android.database.sqlite.SQLiteDatabase;
-import android.net.Uri;
-import android.test.RenamingDelegatingContext;
-
-import com.android.messaging.datamodel.action.ActionService;
-import com.android.messaging.datamodel.action.BackgroundWorker;
-import com.android.messaging.datamodel.data.BlockedParticipantsData;
-import com.android.messaging.datamodel.data.BlockedParticipantsData.BlockedParticipantsDataListener;
-import com.android.messaging.datamodel.data.ContactListItemData;
-import com.android.messaging.datamodel.data.ContactPickerData;
-import com.android.messaging.datamodel.data.ContactPickerData.ContactPickerDataListener;
-import com.android.messaging.datamodel.data.ConversationData;
-import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.ConversationListData.ConversationListDataListener;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.GalleryGridItemData;
-import com.android.messaging.datamodel.data.LaunchConversationData;
-import com.android.messaging.datamodel.data.LaunchConversationData.LaunchConversationDataListener;
-import com.android.messaging.datamodel.data.MediaPickerData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.ParticipantListItemData;
-import com.android.messaging.datamodel.data.PeopleAndOptionsData;
-import com.android.messaging.datamodel.data.PeopleAndOptionsData.PeopleAndOptionsDataListener;
-import com.android.messaging.datamodel.data.PeopleOptionsItemData;
-import com.android.messaging.datamodel.data.SettingsData;
-import com.android.messaging.datamodel.data.SettingsData.SettingsDataListener;
-import com.android.messaging.datamodel.data.SubscriptionListData;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.datamodel.data.VCardContactItemData;
-
-public class FakeDataModel extends DataModel {
-    private BackgroundWorker mWorker;
-    private ActionService mActionService;
-    private final DatabaseHelper mDatabaseHelper;
-    private ConversationListData mConversationListData;
-    private ContactPickerData mContactPickerData;
-    private MediaPickerData mMediaPickerData;
-    private PeopleAndOptionsData mPeopleAndOptionsData;
-    private SyncManager mSyncManager;
-    private SettingsData mSettingsData;
-    private DraftMessageData mDraftMessageData;
-
-    public FakeDataModel(final Context context) {
-        super();
-        if (context instanceof RenamingDelegatingContext) {
-            mDatabaseHelper = DatabaseHelper.getNewInstanceForTest(context);
-        } else {
-            mDatabaseHelper = null;
-        }
-    }
-
-    @Override
-    public BackgroundWorker getBackgroundWorkerForActionService() {
-        return mWorker;
-    }
-
-    public FakeDataModel withBackgroundWorkerForActionService(final BackgroundWorker worker) {
-        mWorker = worker;
-        return this;
-    }
-
-    public FakeDataModel withActionService(final ActionService ActionService) {
-        mActionService = ActionService;
-        return this;
-    }
-
-    public FakeDataModel withConversationListData(final ConversationListData conversationListData) {
-        mConversationListData = conversationListData;
-        return this;
-    }
-
-    public FakeDataModel withContactPickerData(final ContactPickerData contactPickerData) {
-        mContactPickerData = contactPickerData;
-        return this;
-    }
-
-    public FakeDataModel withMediaPickerData(final MediaPickerData mediaPickerData) {
-        mMediaPickerData = mediaPickerData;
-        return this;
-    }
-
-    public FakeDataModel withSyncManager(final SyncManager syncManager) {
-        mSyncManager = syncManager;
-        return this;
-    }
-
-    public FakeDataModel withPeopleAndOptionsData(final PeopleAndOptionsData peopleAndOptionsData) {
-        mPeopleAndOptionsData = peopleAndOptionsData;
-        return this;
-    }
-
-    public FakeDataModel withSettingsData(final SettingsData settingsData) {
-        mSettingsData = settingsData;
-        return this;
-    }
-
-    public FakeDataModel withDraftMessageData(final DraftMessageData draftMessageData) {
-        mDraftMessageData = draftMessageData;
-        return this;
-    }
-
-    @Override
-    public ConversationListData createConversationListData(final Context context,
-            final ConversationListDataListener listener, final boolean archivedMode) {
-        return mConversationListData;
-    }
-
-    @Override
-    public ConversationData createConversationData(final Context context,
-            final ConversationDataListener listener, final String conversationId) {
-        throw new IllegalStateException("Add withXXX or mock this method");
-    }
-
-    @Override
-    public ContactListItemData createContactListItemData() {
-        // This is a lightweight data holder object for each individual list item for which
-        // we don't perform any data request, so we can directly return a new instance.
-        return new ContactListItemData();
-    }
-
-    @Override
-    public ContactPickerData createContactPickerData(final Context context,
-            final ContactPickerDataListener listener) {
-        return mContactPickerData;
-    }
-
-    @Override
-    public MediaPickerData createMediaPickerData(final Context context) {
-        return mMediaPickerData;
-    }
-
-    @Override
-    public GalleryGridItemData createGalleryGridItemData() {
-        // This is a lightweight data holder object for each individual grid item for which
-        // we don't perform any data request, so we can directly return a new instance.
-        return new GalleryGridItemData();
-    }
-
-    @Override
-    public LaunchConversationData createLaunchConversationData(
-            final LaunchConversationDataListener listener) {
-       return new LaunchConversationData(listener);
-    }
-
-    @Override
-    public PeopleOptionsItemData createPeopleOptionsItemData(final Context context) {
-        return new PeopleOptionsItemData(context);
-    }
-
-    @Override
-    public PeopleAndOptionsData createPeopleAndOptionsData(final String conversationId,
-            final Context context, final PeopleAndOptionsDataListener listener) {
-        return mPeopleAndOptionsData;
-    }
-
-    @Override
-    public VCardContactItemData createVCardContactItemData(final Context context,
-            final MessagePartData data) {
-        return new VCardContactItemData(context, data);
-    }
-
-    @Override
-    public VCardContactItemData createVCardContactItemData(final Context context,
-            final Uri vCardUri) {
-        return new VCardContactItemData(context, vCardUri);
-    }
-
-    @Override
-    public ParticipantListItemData createParticipantListItemData(
-            final ParticipantData participant) {
-        return new ParticipantListItemData(participant);
-    }
-
-    @Override
-    public SubscriptionListData createSubscriptonListData(Context context) {
-        return new SubscriptionListData(context);
-    }
-
-    @Override
-    public SettingsData createSettingsData(Context context, SettingsDataListener listener) {
-        return mSettingsData;
-    }
-
-    @Override
-    public DraftMessageData createDraftMessageData(String conversationId) {
-        return mDraftMessageData;
-    }
-
-    @Override
-    public ActionService getActionService() {
-        return mActionService;
-    }
-
-    @Override
-    public SyncManager getSyncManager() {
-        return mSyncManager;
-    }
-
-    @Override
-    public DatabaseWrapper getDatabase() {
-        // Note this will crash unless the application context is redirected...
-        // This is by design so that tests do not inadvertently use the real database
-        return mDatabaseHelper.getDatabase();
-    }
-
-    @Override
-    void onCreateTables(final SQLiteDatabase db) {
-        TestDataFactory.createTestData(db);
-    }
-
-    @Override
-    public void onActivityResume() {
-    }
-
-    @Override
-    public void onApplicationCreated() {
-    }
-
-    @Override
-    public BlockedParticipantsData createBlockedParticipantsData(Context context,
-            BlockedParticipantsDataListener listener) {
-        return new BlockedParticipantsData(context, listener);
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/FrequentContactsCursorBuilderTest.java b/tests/src/com/android/messaging/datamodel/FrequentContactsCursorBuilderTest.java
deleted file mode 100644
index afa95bb..0000000
--- a/tests/src/com/android/messaging/datamodel/FrequentContactsCursorBuilderTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.database.Cursor;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.util.ContactUtil;
-
-@SmallTest
-public class FrequentContactsCursorBuilderTest extends BugleTestCase {
-
-    private void verifyBuiltCursor(final Cursor expected, final Cursor actual) {
-        final int rowCount = expected.getCount();
-        final int columnCount = expected.getColumnCount();
-        assertEquals(rowCount, actual.getCount());
-        assertEquals(columnCount, actual.getColumnCount());
-        for (int i = 0; i < rowCount; i++) {
-            expected.moveToPosition(i);
-            actual.moveToPosition(i);
-            assertEquals(expected.getLong(ContactUtil.INDEX_DATA_ID),
-                    actual.getLong(ContactUtil.INDEX_DATA_ID));
-            assertEquals(expected.getLong(ContactUtil.INDEX_CONTACT_ID),
-                    actual.getLong(ContactUtil.INDEX_CONTACT_ID));
-            assertEquals(expected.getString(ContactUtil.INDEX_LOOKUP_KEY),
-                    actual.getString(ContactUtil.INDEX_LOOKUP_KEY));
-            assertEquals(expected.getString(ContactUtil.INDEX_DISPLAY_NAME),
-                    actual.getString(ContactUtil.INDEX_DISPLAY_NAME));
-            assertEquals(expected.getString(ContactUtil.INDEX_PHOTO_URI),
-                    actual.getString(ContactUtil.INDEX_PHOTO_URI));
-            assertEquals(expected.getString(ContactUtil.INDEX_PHONE_EMAIL),
-                    actual.getString(ContactUtil.INDEX_PHONE_EMAIL));
-            assertEquals(expected.getInt(ContactUtil.INDEX_PHONE_EMAIL_TYPE),
-                    actual.getInt(ContactUtil.INDEX_PHONE_EMAIL_TYPE));
-            assertEquals(expected.getString(ContactUtil.INDEX_PHONE_EMAIL_LABEL),
-                    actual.getString(ContactUtil.INDEX_PHONE_EMAIL_LABEL));
-        }
-    }
-
-    public void testIncompleteBuild() {
-        final FrequentContactsCursorBuilder builder = new FrequentContactsCursorBuilder();
-        assertNull(builder.build());
-        assertNull(builder.setFrequents(TestDataFactory.getStrequentContactsCursor()).build());
-        builder.resetBuilder();
-        assertNull(builder.build());
-        assertNull(builder.setAllContacts(TestDataFactory.getAllContactListCursor()).build());
-    }
-
-    public void testBuildOnce() {
-        final Cursor cursor = new FrequentContactsCursorBuilder()
-            .setAllContacts(TestDataFactory.getAllContactListCursor())
-            .setFrequents(TestDataFactory.getStrequentContactsCursor())
-            .build();
-        assertNotNull(cursor);
-        verifyBuiltCursor(TestDataFactory.getFrequentContactListCursor(), cursor);
-    }
-
-    public void testBuildTwice() {
-        final FrequentContactsCursorBuilder builder = new FrequentContactsCursorBuilder();
-        final Cursor firstCursor = builder
-            .setAllContacts(TestDataFactory.getAllContactListCursor())
-            .setFrequents(TestDataFactory.getStrequentContactsCursor())
-            .build();
-        assertNotNull(firstCursor);
-        builder.resetBuilder();
-        assertNull(builder.build());
-
-        final Cursor secondCursor = builder
-                .setAllContacts(TestDataFactory.getAllContactListCursor())
-                .setFrequents(TestDataFactory.getStrequentContactsCursor())
-                .build();
-        assertNotNull(firstCursor);
-        verifyBuiltCursor(TestDataFactory.getFrequentContactListCursor(), secondCursor);
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/MemoryCacheManagerTest.java b/tests/src/com/android/messaging/datamodel/MemoryCacheManagerTest.java
deleted file mode 100644
index a4d8849..0000000
--- a/tests/src/com/android/messaging/datamodel/MemoryCacheManagerTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.test.AndroidTestCase;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.datamodel.MemoryCacheManager.MemoryCache;
-
-import org.mockito.Mockito;
-
-@SmallTest
-public class MemoryCacheManagerTest extends AndroidTestCase {
-
-    public void testRegisterCachesGetReclaimed() {
-        final MemoryCache mockMemoryCache = Mockito.mock(MemoryCache.class);
-        final MemoryCache otherMockMemoryCache = Mockito.mock(MemoryCache.class);
-        final MemoryCacheManager memoryCacheManager = new MemoryCacheManager();
-
-        memoryCacheManager.registerMemoryCache(mockMemoryCache);
-        memoryCacheManager.registerMemoryCache(otherMockMemoryCache);
-        memoryCacheManager.reclaimMemory();
-        memoryCacheManager.unregisterMemoryCache(otherMockMemoryCache);
-        memoryCacheManager.reclaimMemory();
-
-        Mockito.verify(mockMemoryCache, Mockito.times(2)).reclaim();
-        Mockito.verify(otherMockMemoryCache, Mockito.times(1)).reclaim();
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/ParticipantRefreshTest.java b/tests/src/com/android/messaging/datamodel/ParticipantRefreshTest.java
deleted file mode 100644
index c0d5c0a..0000000
--- a/tests/src/com/android/messaging/datamodel/ParticipantRefreshTest.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel;
-
-import android.content.ContentProvider;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeContentProvider;
-import com.android.messaging.FakeContext;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.ParticipantData.ParticipantsQuery;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.util.ContactUtil;
-
-import org.junit.Assert;
-import org.mockito.Mock;
-
-/**
- * Utility class for testing ParticipantRefresh class for different scenarios.
- */
-@SmallTest
-public class ParticipantRefreshTest extends BugleTestCase {
-    private FakeContext mContext;
-    FakeFactory mFakeFactory;
-    @Mock protected UIIntents mMockUIIntents;
-    protected FakeDataModel mFakeDataModel;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-
-        mContext = new FakeContext(getTestContext());
-
-        final ContentProvider provider = new MessagingContentProvider();
-        provider.attachInfo(mContext, null);
-        mContext.addContentProvider(MessagingContentProvider.AUTHORITY, provider);
-
-        mFakeDataModel = new FakeDataModel(mContext);
-        mFakeFactory = FakeFactory.registerWithFakeContext(getTestContext(), mContext)
-                .withDataModel(mFakeDataModel)
-                .withUIIntents(mMockUIIntents);
-    }
-
-    /**
-     * Add some phonelookup result into take PhoneLookup content provider. This will be
-     * used for doing phone lookup during participant refresh.
-     */
-    private void addPhoneLookup(final String phone, final Object[][] lookupResult) {
-        final Uri uri = ContactUtil.lookupPhone(mContext, phone).getUri();
-        final FakeContentProvider phoneLookup = new FakeContentProvider(mContext,
-                uri, false);
-        phoneLookup.addOverrideData(uri, null, null, ContactUtil.PhoneLookupQuery.PROJECTION,
-                lookupResult);
-        mFakeFactory.withProvider(uri, phoneLookup);
-    }
-
-    /**
-     * Add some participant to test database.
-     */
-    private void addParticipant(final String normalizedDestination, final long contactId,
-            final String name, final String photoUrl) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final ContentValues values = new ContentValues();
-
-        values.put(ParticipantColumns.NORMALIZED_DESTINATION, normalizedDestination);
-        values.put(ParticipantColumns.CONTACT_ID, contactId);
-        values.put(ParticipantColumns.FULL_NAME, name);
-        values.put(ParticipantColumns.PROFILE_PHOTO_URI, photoUrl);
-
-        db.beginTransaction();
-        try {
-            db.insert(DatabaseHelper.PARTICIPANTS_TABLE, null, values);
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-    }
-
-    /**
-     * Verify that participant in the database has expected contacdtId, name and photoUrl fields.
-     */
-    private void verifyParticipant(final String normalizedDestination, final long contactId,
-            final String name, final String photoUrl) {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        db.beginTransaction();
-        try {
-            final String selection = ParticipantColumns.NORMALIZED_DESTINATION + "=?";
-            final String[] selectionArgs = new String[] { normalizedDestination };
-
-            final Cursor cursor = db.query(DatabaseHelper.PARTICIPANTS_TABLE,
-                    ParticipantsQuery.PROJECTION, selection, selectionArgs, null, null, null);
-
-            if (cursor == null || cursor.getCount() != 1) {
-                Assert.fail("Should have participants for:" + normalizedDestination);
-                return;
-            }
-
-            cursor.moveToFirst();
-            final int currentContactId = cursor.getInt(ParticipantsQuery.INDEX_CONTACT_ID);
-            final String currentName = cursor.getString(ParticipantsQuery.INDEX_FULL_NAME);
-            final String currentPhotoUrl =
-                    cursor.getString(ParticipantsQuery.INDEX_PROFILE_PHOTO_URI);
-            if (currentContactId != contactId) {
-                Assert.fail("Contact Id doesn't match. normalizedNumber=" + normalizedDestination +
-                        " expected=" + contactId + " actual=" + currentContactId);
-                return;
-            }
-
-            if (!TextUtils.equals(currentName, name)) {
-                Assert.fail("Name doesn't match. normalizedNumber=" + normalizedDestination +
-                        " expected=" + name + " actual=" + currentName);
-                return;
-            }
-
-            if (!TextUtils.equals(currentPhotoUrl, photoUrl)) {
-                Assert.fail("Contact Id doesn't match. normalizedNumber=" + normalizedDestination +
-                        " expected=" + photoUrl + " actual=" + currentPhotoUrl);
-                return;
-            }
-
-            db.setTransactionSuccessful();
-        } finally {
-            db.endTransaction();
-        }
-    }
-
-    /**
-     * Verify that incremental refresh will resolve previously not resolved participants.
-     */
-    public void testIncrementalRefreshNotResolvedSingleMatch() {
-        addParticipant("650-123-1233", ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED,
-                null, null);
-        addPhoneLookup("650-123-1233", new Object[][] {
-                { 1L, "John", "content://photo/john", "650-123-1233", null, null, null }
-        });
-
-        ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_INCREMENTAL);
-        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
-    }
-
-    /**
-     * Verify that incremental refresh will resolve previously not resolved participants.
-     */
-    public void testIncrementalRefreshNotResolvedMultiMatch() {
-        addParticipant("650-123-1233", ParticipantData.PARTICIPANT_CONTACT_ID_NOT_RESOLVED,
-                null, null);
-        addPhoneLookup("650-123-1233", new Object[][] {
-                { 1L, "John", "content://photo/john", "650-123-1233", null, null, null },
-                { 2L, "Joe", "content://photo/joe", "650-123-1233", null, null, null }
-        });
-
-        ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_INCREMENTAL);
-        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
-    }
-
-    /**
-     * Verify that incremental refresh will not touch already-resolved participants.
-     */
-    public void testIncrementalRefreshResolvedSingleMatch() {
-        addParticipant("650-123-1233", 1, "Joh", "content://photo/joh");
-        addPhoneLookup("650-123-1233", new Object[][] {
-                { 1L, "John", "content://photo/john", "650-123-1233", null, null, null }
-        });
-
-        ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_INCREMENTAL);
-        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
-    }
-
-    /**
-     * Verify that full refresh will correct already-resolved participants if needed
-     */
-    public void testFullRefreshResolvedSingleMatch() {
-        addParticipant("650-123-1233", 1, "Joh", "content://photo/joh");
-        addPhoneLookup("650-123-1233", new Object[][] {
-                { 1L, "John", "content://photo/john", "650-123-1233", null, null, null }
-        });
-
-        ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_FULL);
-        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
-    }
-
-    /**
-     * Verify that incremental refresh will not touch participant that is marked as not found.
-     */
-    public void testIncrementalRefreshNotFound() {
-        addParticipant("650-123-1233", ParticipantData.PARTICIPANT_CONTACT_ID_NOT_FOUND,
-                null, null);
-        addPhoneLookup("650-123-1233", new Object[][] {
-                { 1L, "John", "content://photo/john", "650-123-1233", null, null, null }
-        });
-
-        ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_INCREMENTAL);
-        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
-    }
-
-    /**
-     * Verify that full refresh will resolve participant that is marked as not found.
-     */
-    public void testFullRefreshNotFound() {
-        addParticipant("650-123-1233", ParticipantData.PARTICIPANT_CONTACT_ID_NOT_FOUND,
-                null, null);
-        addPhoneLookup("650-123-1233", new Object[][] {
-                { 1L, "John", "content://photo/john", "650-123-1233", null, null, null }
-        });
-
-        ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_FULL);
-        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
-    }
-
-    /**
-     * Verify that refresh take consideration of current contact_id when having multiple matches.
-     */
-    public void testFullRefreshResolvedMultiMatch1() {
-        addParticipant("650-123-1233", 1, "Joh", "content://photo/joh");
-        addPhoneLookup("650-123-1233", new Object[][] {
-                { 1L, "John", "content://photo/john", "650-123-1233", null, null, null },
-                { 2L, "Joe", "content://photo/joe", "650-123-1233", null, null, null }
-        });
-
-        ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_FULL);
-        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
-    }
-
-    /**
-     * Verify that refresh take consideration of current contact_id when having multiple matches.
-     */
-    public void testFullRefreshResolvedMultiMatch2() {
-        addParticipant("650-123-1233", 2, "Joh", "content://photo/joh");
-        addPhoneLookup("650-123-1233", new Object[][] {
-                { 1L, "John", "content://photo/john", "650-123-1233", null, null, null },
-                { 2L, "Joe", "content://photo/joe", "650-123-1233", null, null, null }
-        });
-
-        ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_FULL);
-        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
-    }
-
-    /**
-     * Verify that refresh take first contact in case current contact_id no longer matches.
-     */
-    public void testFullRefreshResolvedMultiMatch3() {
-        addParticipant("650-123-1233", 3, "Joh", "content://photo/joh");
-        addPhoneLookup("650-123-1233", new Object[][] {
-                { 1L, "John", "content://photo/john", "650-123-1233", null, null, null },
-                { 2L, "Joe", "content://photo/joe", "650-123-1233", null, null, null }
-        });
-
-        ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_FULL);
-        verifyParticipant("650-123-1233", 1, "John", "content://photo/john");
-    }
-
-    /**
-     * Verify that refresh take first contact in case current contact_id no longer matches.
-     */
-    public void testFullRefreshResolvedBeforeButNotFoundNow() {
-        addParticipant("650-123-1233", 1, "Joh", "content://photo/joh");
-        addPhoneLookup("650-123-1233", new Object[][] {});
-
-        ParticipantRefresh.refreshParticipants(ParticipantRefresh.REFRESH_MODE_FULL);
-        verifyParticipant("650-123-1233", ParticipantData.PARTICIPANT_CONTACT_ID_NOT_FOUND,
-                null, null);
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/action/ActionServiceSystemTest.java b/tests/src/com/android/messaging/datamodel/action/ActionServiceSystemTest.java
deleted file mode 100644
index 725f159..0000000
--- a/tests/src/com/android/messaging/datamodel/action/ActionServiceSystemTest.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.Log;
-
-import androidx.test.filters.MediumTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.Factory;
-import com.android.messaging.FakeContext;
-import com.android.messaging.FakeContext.FakeContextHost;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.BugleServiceTestCase;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.action.ActionMonitor.ActionCompletedListener;
-import com.android.messaging.datamodel.action.ActionMonitor.ActionExecutedListener;
-import com.android.messaging.datamodel.action.ActionTestHelpers.ResultTracker;
-import com.android.messaging.datamodel.action.ActionTestHelpers.StubBackgroundWorker;
-import com.android.messaging.datamodel.action.ActionTestHelpers.StubLoader;
-
-@MediumTest
-public class ActionServiceSystemTest extends BugleServiceTestCase<ActionServiceImpl>
-        implements ActionCompletedListener, ActionExecutedListener, FakeContextHost {
-    private static final String TAG = "ActionServiceSystemTest";
-
-    static {
-        // Set flag during loading of test cases to prevent application initialization starting
-        BugleTestCase.setTestsRunning();
-    }
-
-    @Override
-    public void onActionSucceeded(final ActionMonitor monitor,
-            final Action action, final Object data, final Object result) {
-        final TestChatAction test = (TestChatAction) action;
-        assertEquals("Expect correct action parameter", parameter, test.parameter);
-        final ResultTracker tracker = (ResultTracker) data;
-        tracker.completionResult = result;
-        synchronized(tracker) {
-            tracker.notifyAll();
-        }
-    }
-
-    @Override
-    public void onActionFailed(final ActionMonitor monitor, final Action action,
-            final Object data, final Object result) {
-        final TestChatAction test = (TestChatAction) action;
-        assertEquals("Expect correct action parameter", parameter, test.parameter);
-        final ResultTracker tracker = (ResultTracker) data;
-        tracker.completionResult = result;
-        synchronized(tracker) {
-            tracker.notifyAll();
-        }
-    }
-
-    @Override
-    public void onActionExecuted(final ActionMonitor monitor, final Action action,
-            final Object data, final Object result) {
-        final TestChatAction test = (TestChatAction) action;
-        assertEquals("Expect correct action parameter", parameter, test.parameter);
-        final ResultTracker tracker = (ResultTracker) data;
-        tracker.executionResult = result;
-    }
-
-    public ActionServiceSystemTest() {
-        super(ActionServiceImpl.class);
-    }
-
-    public void testChatActionSucceeds() {
-        final ResultTracker tracker = new ResultTracker();
-
-        final ActionService service = DataModel.get().getActionService();
-        final TestChatActionMonitor monitor = new TestChatActionMonitor(null, tracker, this, this);
-        final TestChatAction initial = new TestChatAction(monitor.getActionKey(), parameter);
-
-        assertNull("Expect completion result to start null", tracker.completionResult);
-        assertNull("Expect execution result to start null", tracker.executionResult);
-
-        final Parcel parcel = Parcel.obtain();
-        parcel.writeParcelable(initial, 0);
-        parcel.setDataPosition(0);
-        final TestChatAction action = parcel.readParcelable(mContext.getClassLoader());
-
-        synchronized(mWorker) {
-            try {
-                action.start(monitor);
-                // Wait for callback across threads
-                mWorker.wait(2000);
-            } catch (final InterruptedException e) {
-                assertTrue("Interrupted waiting for execution", false);
-            }
-        }
-
-        assertEquals("Expect to see 1 server request queued", 1,
-                mWorker.getRequestsMade().size());
-        final Action request = mWorker.getRequestsMade().get(0);
-        assertTrue("Expect Test type", request instanceof TestChatAction);
-
-        final Bundle response = new Bundle();
-        response.putString(TestChatAction.RESPONSE_TEST, processResponseResult);
-        synchronized(tracker) {
-            try {
-                request.markBackgroundWorkStarting();
-                request.markBackgroundWorkQueued();
-
-                request.markBackgroundWorkStarting();
-                request.markBackgroundCompletionQueued();
-                service.handleResponseFromBackgroundWorker(request, response);
-                // Wait for callback across threads
-                tracker.wait(2000);
-            } catch (final InterruptedException e) {
-                assertTrue("Interrupted waiting for response processing", false);
-            }
-        }
-
-        // TODO
-        //assertEquals("Expect execution result set", executeActionResult, tracker.executionResult);
-        assertEquals("Expect completion result set", processResponseResult,
-                tracker.completionResult);
-    }
-
-    public void testChatActionFails() {
-        final ResultTracker tracker = new ResultTracker();
-
-        final ActionService service = DataModel.get().getActionService();
-        final TestChatActionMonitor monitor = new TestChatActionMonitor(null, tracker, this, this);
-        final TestChatAction action = new TestChatAction(monitor.getActionKey(), parameter);
-
-        assertNull("Expect completion result to start null", tracker.completionResult);
-        assertNull("Expect execution result to start null", tracker.executionResult);
-
-        synchronized(mWorker) {
-            try {
-                action.start(monitor);
-                // Wait for callback across threads
-                mWorker.wait(2000);
-            } catch (final InterruptedException e) {
-                assertTrue("Interrupted waiting for requests", false);
-            }
-        }
-
-        assertEquals("Expect to see 1 server request queued", 1,
-                mWorker.getRequestsMade().size());
-        final Action request = mWorker.getRequestsMade().get(0);
-        assertTrue("Expect Test type", request instanceof TestChatAction);
-
-        synchronized(tracker) {
-            try {
-                request.markBackgroundWorkStarting();
-                request.markBackgroundWorkQueued();
-
-                request.markBackgroundWorkStarting();
-                request.markBackgroundCompletionQueued();
-                service.handleFailureFromBackgroundWorker(request, new Exception("It went wrong"));
-                // Wait for callback across threads
-                tracker.wait(2000);
-            } catch (final InterruptedException e) {
-                assertTrue("Interrupted waiting for response processing", false);
-            }
-        }
-
-        // TODO
-        //assertEquals("Expect execution result set", executeActionResult, tracker.executionResult);
-        assertEquals("Expect completion result set", processFailureResult,
-                tracker.completionResult);
-    }
-
-    public void testChatActionNoMonitor() {
-        final ActionService service = DataModel.get().getActionService();
-        final TestChatAction action =
-                new TestChatAction(Action.generateUniqueActionKey(null), parameter);
-
-        synchronized(mWorker) {
-            try {
-                action.start();
-                // Wait for callback across threads
-                mWorker.wait(2000);
-            } catch (final InterruptedException e) {
-                assertTrue("Interrupted waiting for execution", false);
-            }
-        }
-
-        assertEquals("Expect to see 1 server request queued", 1,
-                mWorker.getRequestsMade().size());
-        Action request = mWorker.getRequestsMade().get(0);
-        assertTrue("Expect Test type", request instanceof TestChatAction);
-
-        final Bundle response = new Bundle();
-        response.putString(TestChatAction.RESPONSE_TEST, processResponseResult);
-        synchronized(mWorker) {
-            try {
-                service.handleResponseFromBackgroundWorker(request, response);
-                // Wait for callback across threads
-                mWorker.wait(2000);
-            } catch (final InterruptedException e) {
-                assertTrue("Interrupted waiting for response processing", false);
-            }
-        }
-
-        assertEquals("Expect to see second server request queued",
-                2, mWorker.getRequestsMade().size());
-        request = mWorker.getRequestsMade().get(1);
-        assertTrue("Expect other type",
-                request instanceof TestChatActionOther);
-    }
-
-    public void testChatActionUnregisterListener() {
-        final ResultTracker tracker = new ResultTracker();
-
-        final ActionService service = DataModel.get().getActionService();
-        final TestChatActionMonitor monitor = new TestChatActionMonitor(null, tracker, this, this);
-        final TestChatAction action = new TestChatAction(monitor.getActionKey(), parameter);
-
-        assertNull("Expect completion result to start null", tracker.completionResult);
-        assertNull("Expect execution result to start null", tracker.executionResult);
-
-        synchronized(mWorker) {
-            try {
-                action.start(monitor);
-                // Wait for callback across threads
-                mWorker.wait(2000);
-            } catch (final InterruptedException e) {
-                assertTrue("Interrupted waiting for execution", false);
-            }
-        }
-
-        assertEquals("Expect to see 1 server request queued", 1,
-                mWorker.getRequestsMade().size());
-        final Action request = mWorker.getRequestsMade().get(0);
-        assertTrue("Expect Test type", request instanceof TestChatAction);
-
-        monitor.unregister();
-
-        final Bundle response = new Bundle();
-        synchronized(mWorker) {
-            try {
-                request.markBackgroundWorkStarting();
-                request.markBackgroundWorkQueued();
-
-                request.markBackgroundWorkStarting();
-                request.markBackgroundCompletionQueued();
-                service.handleResponseFromBackgroundWorker(request, response);
-                // Wait for callback across threads
-                mWorker.wait(2000);
-            } catch (final InterruptedException e) {
-                assertTrue("Interrupted waiting for response processing", false);
-            }
-        }
-
-        //assertEquals("Expect execution result set", executeActionResult, tracker.executionResult);
-        assertEquals("Expect completion never called", null, tracker.completionResult);
-    }
-
-    StubBackgroundWorker mWorker;
-    FakeContext mContext;
-    StubLoader mLoader;
-
-    private static final String parameter = "parameter";
-    private static final Object executeActionResult = "executeActionResult";
-    private static final String processResponseResult = "processResponseResult";
-    private static final Object processFailureResult = "processFailureResult";
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        Log.d(TAG, "ChatActionTest setUp");
-
-        mContext = new FakeContext(getContext(), this);
-        mWorker = new StubBackgroundWorker();
-        FakeFactory.registerWithFakeContext(getContext(), mContext)
-                .withDataModel(new FakeDataModel(mContext)
-                .withBackgroundWorkerForActionService(mWorker)
-                .withActionService(new ActionService()));
-
-        mLoader = new StubLoader();
-        setContext(Factory.get().getApplicationContext());
-    }
-
-    @Override
-    public String getServiceClassName() {
-        return ActionServiceImpl.class.getName();
-    }
-
-    @Override
-    public void startServiceForStub(final Intent intent) {
-        this.startService(intent);
-    }
-
-    @Override
-    public void onStartCommandForStub(final Intent intent, final int flags, final int startId) {
-        this.getService().onStartCommand(intent, flags, startId);
-    }
-
-    public static class TestChatAction extends Action implements Parcelable {
-        public static String RESPONSE_TEST = "response_test";
-        public static String KEY_PARAMETER = "parameter";
-
-        protected TestChatAction(final String key, final String parameter) {
-            super(key);
-            this.actionParameters.putString(KEY_PARAMETER, parameter);
-            // Cache parameter as a member variable
-            this.parameter = parameter;
-        }
-
-        // An example parameter
-        public final String parameter;
-
-        /**
-         * Process the action locally - runs on datamodel service thread
-         */
-        @Override
-        protected Object executeAction() {
-            requestBackgroundWork();
-            return executeActionResult;
-        }
-
-        /**
-         * Process the response from the server - runs on datamodel service thread
-         */
-        @Override
-        protected Object processBackgroundResponse(final Bundle response) {
-            requestBackgroundWork(new TestChatActionOther(null, parameter));
-            return response.get(RESPONSE_TEST);
-        }
-
-        /**
-         * Called in case of failures when sending requests - runs on datamodel service thread
-         */
-        @Override
-        protected Object processBackgroundFailure() {
-            return processFailureResult;
-        }
-
-        private TestChatAction(final Parcel in) {
-            super(in);
-            // Cache parameter as a member variable
-            parameter = actionParameters.getString(KEY_PARAMETER);
-        }
-
-        public static final Parcelable.Creator<TestChatAction> CREATOR
-                = new Parcelable.Creator<TestChatAction>() {
-            @Override
-            public TestChatAction createFromParcel(final Parcel in) {
-                return new TestChatAction(in);
-            }
-
-            @Override
-            public TestChatAction[] newArray(final int size) {
-                return new TestChatAction[size];
-            }
-        };
-
-        @Override
-        public void writeToParcel(final Parcel parcel, final int flags) {
-            writeActionToParcel(parcel, flags);
-        }
-    }
-
-    public static class TestChatActionOther extends Action implements Parcelable {
-        protected TestChatActionOther(final String key, final String parameter) {
-            super(generateUniqueActionKey(key));
-            this.parameter = parameter;
-        }
-
-        public final String parameter;
-
-        private TestChatActionOther(final Parcel in) {
-            super(in);
-            parameter = in.readString();
-        }
-
-        public static final Parcelable.Creator<TestChatActionOther> CREATOR
-                = new Parcelable.Creator<TestChatActionOther>() {
-            @Override
-            public TestChatActionOther createFromParcel(final Parcel in) {
-                return new TestChatActionOther(in);
-            }
-
-            @Override
-            public TestChatActionOther[] newArray(final int size) {
-                return new TestChatActionOther[size];
-            }
-        };
-
-        @Override
-        public void writeToParcel(final Parcel parcel, final int flags) {
-            writeActionToParcel(parcel, flags);
-            parcel.writeString(parameter);
-        }
-    }
-
-    /**
-     * An operation that notifies a listener upon completion
-     */
-    public static class TestChatActionMonitor extends ActionMonitor {
-        /**
-         * Create action state wrapping an BlockUserAction instance
-         * @param account - account in which to block the user
-         * @param baseKey - suggested action key from BlockUserAction
-         * @param data - optional action specific data that is handed back to listener
-         * @param listener - action completed listener
-         */
-        public TestChatActionMonitor(final String baseKey, final Object data,
-                final ActionCompletedListener completed, final ActionExecutedListener executed) {
-            super(STATE_CREATED, Action.generateUniqueActionKey(baseKey), data);
-            setCompletedListener(completed);
-            setExecutedListener(executed);
-        }
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/action/ActionServiceTest.java b/tests/src/com/android/messaging/datamodel/action/ActionServiceTest.java
deleted file mode 100644
index 19c6c00..0000000
--- a/tests/src/com/android/messaging/datamodel/action/ActionServiceTest.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.Looper;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.Log;
-
-import androidx.test.filters.MediumTest;
-
-import com.android.messaging.Factory;
-import com.android.messaging.FakeContext;
-import com.android.messaging.FakeContext.FakeContextHost;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.BugleServiceTestCase;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.action.ActionMonitor.ActionCompletedListener;
-import com.android.messaging.datamodel.action.ActionMonitor.ActionStateChangedListener;
-import com.android.messaging.datamodel.action.ActionTestHelpers.ResultTracker;
-import com.android.messaging.datamodel.action.ActionTestHelpers.StubBackgroundWorker;
-import com.android.messaging.datamodel.action.ActionTestHelpers.StubLoader;
-
-import java.util.ArrayList;
-
-@MediumTest
-public class ActionServiceTest extends BugleServiceTestCase<ActionServiceImpl>
-        implements FakeContextHost, ActionStateChangedListener, ActionCompletedListener {
-    private static final String TAG = "ActionServiceTest";
-
-    @Override
-    public void onActionStateChanged(final Action action, final int state) {
-        mStates.add(state);
-    }
-
-    @Override
-    public void onActionSucceeded(final ActionMonitor monitor,
-            final Action action, final Object data, final Object result) {
-        final TestChatAction test = (TestChatAction) action;
-        assertNotSame(test.dontRelyOnMe, dontRelyOnMe);
-        // This will be true - but only briefly
-        assertEquals(test.dontRelyOnMe, becauseIChange);
-
-        final ResultTracker tracker = (ResultTracker) data;
-        tracker.completionResult = result;
-        synchronized(tracker) {
-            tracker.notifyAll();
-        }
-    }
-
-    @Override
-    public void onActionFailed(final ActionMonitor monitor, final Action action,
-            final Object data, final Object result) {
-        final TestChatAction test = (TestChatAction) action;
-        assertNotSame(test.dontRelyOnMe, dontRelyOnMe);
-        // This will be true - but only briefly
-        assertEquals(test.dontRelyOnMe, becauseIChange);
-
-        final ResultTracker tracker = (ResultTracker) data;
-        tracker.completionResult = result;
-        synchronized(tracker) {
-            tracker.notifyAll();
-        }
-    }
-
-    /**
-     * For a chat action verify that the service intent is constructed and queued correctly and
-     * that when that intent is processed it actually executes the action.
-     */
-    public void testChatServiceCreatesIntentAndExecutesAction() {
-        final ResultTracker tracker = new ResultTracker();
-
-        final TestChatActionMonitor monitor = new TestChatActionMonitor(null, tracker, this, this);
-        final TestChatAction action = new TestChatAction(monitor.getActionKey(), parameter);
-
-        action.dontRelyOnMe = dontRelyOnMe;
-        assertFalse("Expect service initially stopped", mServiceStarted);
-
-        synchronized(mWorker) {
-            try {
-                action.start(monitor);
-                // Wait for callback across threads
-                mWorker.wait(2000);
-                mServiceStarted = true;
-            } catch (final InterruptedException e) {
-                assertTrue("Interrupted waiting for execution", false);
-            }
-        }
-
-        assertTrue("Expect service started", mServiceStarted);
-
-        assertEquals("Expect three states ", mStates.size(), 3);
-        assertEquals("State-0 should be STATE_QUEUED", (int)mStates.get(0),
-                ActionMonitor.STATE_QUEUED);
-        assertEquals("State-1 should be STATE_EXECUTING", (int)mStates.get(1),
-                ActionMonitor.STATE_EXECUTING);
-        assertEquals("State-2 should be STATE_COMPLETE", (int)mStates.get(2),
-                ActionMonitor.STATE_COMPLETE);
-    }
-
-    StubBackgroundWorker mWorker;
-    FakeContext mContext;
-    StubLoader mLoader;
-    ActionService mService;
-
-    ArrayList<Integer> mStates;
-
-    private static final String parameter = "parameter";
-    private static final Object dontRelyOnMe = "dontRelyOnMe";
-    private static final Object becauseIChange = "becauseIChange";
-    private static final Object executeActionResult = "executeActionResult";
-    private static final Object processResponseResult = "processResponseResult";
-    private static final Object processFailureResult = "processFailureResult";
-
-    public ActionServiceTest() {
-        super(ActionServiceImpl.class);
-    }
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        Log.d(TAG, "ChatActionTest setUp");
-
-        sLooper = Looper.myLooper();
-
-        mWorker = new StubBackgroundWorker();
-        mContext = new FakeContext(getContext(), this);
-        FakeFactory.registerWithFakeContext(getContext(),mContext)
-                .withDataModel(new FakeDataModel(mContext)
-                .withBackgroundWorkerForActionService(mWorker)
-                .withActionService(new ActionService()));
-
-        mStates = new ArrayList<Integer>();
-        setContext(Factory.get().getApplicationContext());
-    }
-
-    @Override
-    public String getServiceClassName() {
-        return ActionServiceImpl.class.getName();
-    }
-
-    boolean mServiceStarted = false;
-
-    @Override
-    public void startServiceForStub(final Intent intent) {
-        // Do nothing until later
-        assertFalse(mServiceStarted);
-        mServiceStarted = true;
-    }
-
-    @Override
-    public void onStartCommandForStub(final Intent intent, final int flags, final int startId) {
-        assertTrue(mServiceStarted);
-    }
-
-    private static Looper sLooper;
-    public static void assertRunsOnOtherThread() {
-        assertTrue (Looper.myLooper() != Looper.getMainLooper());
-        assertTrue (Looper.myLooper() != sLooper);
-    }
-
-    public static class TestChatAction extends Action implements Parcelable {
-        public static String RESPONSE_TEST = "response_test";
-        public static String KEY_PARAMETER = "parameter";
-
-        protected TestChatAction(final String key, final String parameter) {
-            super(key);
-            this.actionParameters.putString(KEY_PARAMETER, parameter);
-        }
-
-        transient Object dontRelyOnMe;
-
-        /**
-         * Process the action locally - runs on service thread
-         */
-        @Override
-        protected Object executeAction() {
-            this.dontRelyOnMe = becauseIChange;
-            assertRunsOnOtherThread();
-            return executeActionResult;
-        }
-
-        /**
-         * Process the response from the server - runs on service thread
-         */
-        @Override
-        protected Object processBackgroundResponse(final Bundle response) {
-            assertRunsOnOtherThread();
-            return processResponseResult;
-        }
-
-        /**
-         * Called in case of failures when sending requests - runs on service thread
-         */
-        @Override
-        protected Object processBackgroundFailure() {
-            assertRunsOnOtherThread();
-            return processFailureResult;
-        }
-
-        private TestChatAction(final Parcel in) {
-            super(in);
-        }
-
-        public static final Parcelable.Creator<TestChatAction> CREATOR
-                = new Parcelable.Creator<TestChatAction>() {
-            @Override
-            public TestChatAction createFromParcel(final Parcel in) {
-                return new TestChatAction(in);
-            }
-
-            @Override
-            public TestChatAction[] newArray(final int size) {
-                return new TestChatAction[size];
-            }
-        };
-
-        @Override
-        public void writeToParcel(final Parcel parcel, final int flags) {
-            writeActionToParcel(parcel, flags);
-        }
-    }
-
-    /**
-     * An operation that notifies a listener upon state changes, execution and completion
-     */
-    public static class TestChatActionMonitor extends ActionMonitor {
-        public TestChatActionMonitor(final String baseKey, final Object data,
-                final ActionStateChangedListener listener, final ActionCompletedListener executed) {
-            super(STATE_CREATED, Action.generateUniqueActionKey(baseKey), data);
-            setStateChangedListener(listener);
-            setCompletedListener(executed);
-            assertEquals("Initial state should be STATE_CREATED", mState, STATE_CREATED);
-        }
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/action/ActionTest.java b/tests/src/com/android/messaging/datamodel/action/ActionTest.java
deleted file mode 100644
index c24884d..0000000
--- a/tests/src/com/android/messaging/datamodel/action/ActionTest.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.os.Bundle;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import androidx.test.filters.MediumTest;
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.DataModelImpl;
-import com.android.messaging.datamodel.action.ActionTestHelpers.StubChatActionMonitor;
-
-import java.util.ArrayList;
-
-@MediumTest
-public class ActionTest extends BugleTestCase {
-    private static final String parameter = "parameter";
-    private static final Object executeActionResult = "executeActionResult";
-    private static final Object processResponseResult = "processResponseResult";
-    private static final Object processFailureResult = "processFailureResult";
-
-    private static final String mActionKey = "TheActionKey";
-    private static final Object mData = "PrivateData";
-    private StubChatActionMonitor mMonitor;
-    private TestChatAction mAction;
-
-    private ArrayList<StubChatActionMonitor.StateTransition> mTransitions;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        FakeFactory.register(getTestContext())
-                .withDataModel(new DataModelImpl(getContext()));
-
-        mMonitor = new StubChatActionMonitor(ActionMonitor.STATE_CREATED, mActionKey,
-                mData);
-        mAction = new TestChatAction(mActionKey, parameter);
-        mTransitions = mMonitor.getTransitions();
-    }
-
-    private void verifyState(final int count, final int from, final int to) {
-        assertEquals(to, mMonitor.getState());
-        assertEquals(mTransitions.size(), count);
-        verifyTransition(count-1, from , to);
-    }
-
-    private void verifyTransition(final int index, final int from, final int to) {
-        assertTrue(mTransitions.size() > index);
-        assertEquals(mAction, mTransitions.get(index).action);
-        assertEquals(from, mTransitions.get(index).from);
-        assertEquals(to, mTransitions.get(index).to);
-    }
-
-    @SmallTest
-    public void testActionStartTransitionsCorrectly() {
-        mMonitor.setState(ActionMonitor.STATE_CREATED);
-
-        ActionMonitor.registerActionMonitor(mAction.actionKey, mMonitor);
-        assertTrue(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertTrue(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-        assertEquals(ActionMonitor.sActionMonitors.get(mAction.actionKey), mMonitor);
-
-        mAction.markStart();
-        assertEquals("After start state: STATE_QUEUED", ActionMonitor.STATE_QUEUED,
-                mMonitor.getState());
-        verifyState(1, ActionMonitor.STATE_CREATED, ActionMonitor.STATE_QUEUED);
-
-        ActionMonitor.unregisterActionMonitor(mAction.actionKey, mMonitor);
-
-        assertFalse(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertFalse(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-    }
-
-    @SmallTest
-    public void testActionStartAssertsFromIncorrectState() {
-        mMonitor.setState(ActionMonitor.STATE_UNDEFINED);
-
-        ActionMonitor.registerActionMonitor(mAction.actionKey, mMonitor);
-        assertTrue(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertTrue(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-        assertEquals(ActionMonitor.sActionMonitors.get(mAction.actionKey), mMonitor);
-
-        try {
-            mAction.markStart();
-            fail("Expect assertion when starting from STATE_UNDEFINED");
-        } catch (final IllegalStateException ex){
-        }
-        ActionMonitor.unregisterActionMonitor(mAction.actionKey, mMonitor);
-
-        assertFalse(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertFalse(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-    }
-
-    public void testActionTransitionsEndToEndWithRequests() {
-        assertEquals("Start state: STATE_CREATED", ActionMonitor.STATE_CREATED,
-                mMonitor.getState());
-
-        ActionMonitor.registerActionMonitor(mAction.actionKey, mMonitor);
-        assertTrue(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertTrue(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-        assertEquals(ActionMonitor.sActionMonitors.get(mAction.actionKey), mMonitor);
-
-        mAction.markStart();
-
-        verifyState(1, ActionMonitor.STATE_CREATED, ActionMonitor.STATE_QUEUED);
-
-        mAction.markBeginExecute();
-
-        verifyState(2, ActionMonitor.STATE_QUEUED, ActionMonitor.STATE_EXECUTING);
-
-        final Object result = mAction.executeAction();
-        mAction.requestBackgroundWork();
-
-        assertEquals("Check executeAction result", result, executeActionResult);
-
-        mAction.markEndExecute(result);
-
-        verifyState(3, ActionMonitor.STATE_EXECUTING,
-                ActionMonitor.STATE_BACKGROUND_ACTIONS_QUEUED);
-
-        mAction.markBackgroundWorkStarting();
-
-        verifyState(4, ActionMonitor.STATE_BACKGROUND_ACTIONS_QUEUED,
-                ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION);
-
-        mAction.markBackgroundWorkQueued();
-
-        verifyState(5, ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION,
-                ActionMonitor.STATE_BACKGROUND_ACTIONS_QUEUED);
-
-        mAction.markBackgroundWorkStarting();
-
-        verifyState(6, ActionMonitor.STATE_BACKGROUND_ACTIONS_QUEUED,
-                ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION);
-
-        final Bundle response = null;
-
-        mAction.markBackgroundCompletionQueued();
-
-        verifyState(7, ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION,
-                ActionMonitor.STATE_BACKGROUND_COMPLETION_QUEUED);
-
-        assertTrue(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertTrue(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-        assertEquals(ActionMonitor.sActionMonitors.get(mAction.actionKey), mMonitor);
-
-        mAction.processBackgroundWorkResponse(response);
-
-        verifyTransition(7, ActionMonitor.STATE_BACKGROUND_COMPLETION_QUEUED,
-                ActionMonitor.STATE_PROCESSING_BACKGROUND_RESPONSE);
-
-        verifyState(9, ActionMonitor.STATE_PROCESSING_BACKGROUND_RESPONSE,
-                ActionMonitor.STATE_COMPLETE);
-
-        assertFalse(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertFalse(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-    }
-
-    public void testActionTransitionsEndToEndFailsRequests() {
-        assertEquals("Start state: STATE_CREATED", ActionMonitor.STATE_CREATED,
-                mMonitor.getState());
-
-        ActionMonitor.registerActionMonitor(mAction.actionKey, mMonitor);
-        assertTrue(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertTrue(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-        assertEquals(ActionMonitor.sActionMonitors.get(mAction.actionKey), mMonitor);
-
-        mAction.markStart();
-
-        verifyState(1, ActionMonitor.STATE_CREATED, ActionMonitor.STATE_QUEUED);
-
-        mAction.markBeginExecute();
-
-        verifyState(2, ActionMonitor.STATE_QUEUED, ActionMonitor.STATE_EXECUTING);
-
-        final Object result = mAction.executeAction();
-        mAction.requestBackgroundWork();
-
-        assertEquals("Check executeAction result", result, executeActionResult);
-
-        mAction.markEndExecute(result);
-
-        verifyState(3, ActionMonitor.STATE_EXECUTING,
-                ActionMonitor.STATE_BACKGROUND_ACTIONS_QUEUED);
-
-        mAction.markBackgroundWorkStarting();
-
-        verifyState(4, ActionMonitor.STATE_BACKGROUND_ACTIONS_QUEUED,
-                ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION);
-
-        mAction.markBackgroundWorkQueued();
-
-        verifyState(5, ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION,
-                ActionMonitor.STATE_BACKGROUND_ACTIONS_QUEUED);
-
-        mAction.markBackgroundWorkStarting();
-
-        verifyState(6, ActionMonitor.STATE_BACKGROUND_ACTIONS_QUEUED,
-                ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION);
-
-        assertTrue(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertTrue(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-        assertEquals(ActionMonitor.sActionMonitors.get(mAction.actionKey), mMonitor);
-
-        mAction.processBackgroundWorkFailure();
-
-        verifyState(7, ActionMonitor.STATE_EXECUTING_BACKGROUND_ACTION,
-                ActionMonitor.STATE_COMPLETE);
-
-        assertFalse(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertFalse(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-    }
-
-    public void testActionTransitionsEndToEndNoRequests() {
-        assertEquals("Start state: STATE_CREATED", ActionMonitor.STATE_CREATED,
-                mMonitor.getState());
-
-        ActionMonitor.registerActionMonitor(mAction.actionKey, mMonitor);
-        assertTrue(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertTrue(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-        assertEquals(ActionMonitor.sActionMonitors.get(mAction.actionKey), mMonitor);
-
-        mAction.markStart();
-
-        verifyState(1, ActionMonitor.STATE_CREATED, ActionMonitor.STATE_QUEUED);
-
-        mAction.markBeginExecute();
-
-        verifyState(2, ActionMonitor.STATE_QUEUED, ActionMonitor.STATE_EXECUTING);
-
-        final Object result = mAction.executeAction();
-
-        assertEquals("Check executeAction result", result, executeActionResult);
-
-        assertTrue(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertTrue(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-        assertEquals(ActionMonitor.sActionMonitors.get(mAction.actionKey), mMonitor);
-
-        mAction.markEndExecute(result);
-
-        verifyState(3, ActionMonitor.STATE_EXECUTING,
-                ActionMonitor.STATE_COMPLETE);
-
-        assertFalse(ActionMonitor.sActionMonitors.containsKey(mAction.actionKey));
-        assertFalse(ActionMonitor.sActionMonitors.containsValue(mMonitor));
-    }
-
-    public static class TestChatAction extends Action implements Parcelable {
-        protected TestChatAction(final String key, final String parameter) {
-            super(key);
-            this.parameter = parameter;
-        }
-
-        public final String parameter;
-
-        /**
-         * Process the action locally - runs on service thread
-         */
-        @Override
-        protected Object executeAction() {
-            assertEquals("Check parameter", parameter, ActionTest.parameter);
-            return executeActionResult;
-        }
-
-        /**
-         * Process the response from the server - runs on service thread
-         */
-        @Override
-        protected Object processBackgroundResponse(final Bundle response) {
-            assertEquals("Check parameter", parameter, ActionTest.parameter);
-            return processResponseResult;
-        }
-
-        /**
-         * Called in case of failures when sending requests - runs on service thread
-         */
-        @Override
-        protected Object processBackgroundFailure() {
-            assertEquals("Check parameter", parameter, ActionTest.parameter);
-            return processFailureResult;
-        }
-
-        private TestChatAction(final Parcel in) {
-            super(in);
-            parameter = in.readString();
-        }
-
-        public static final Parcelable.Creator<TestChatAction> CREATOR
-                = new Parcelable.Creator<TestChatAction>() {
-            @Override
-            public TestChatAction createFromParcel(final Parcel in) {
-                return new TestChatAction(in);
-            }
-
-            @Override
-            public TestChatAction[] newArray(final int size) {
-                return new TestChatAction[size];
-            }
-        };
-
-        @Override
-        public void writeToParcel(final Parcel parcel, final int flags) {
-            writeActionToParcel(parcel, flags);
-            parcel.writeString(parameter);
-        }
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/action/ActionTestHelpers.java b/tests/src/com/android/messaging/datamodel/action/ActionTestHelpers.java
deleted file mode 100644
index 00aa267..0000000
--- a/tests/src/com/android/messaging/datamodel/action/ActionTestHelpers.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.Context;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.Bundle;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class ActionTestHelpers {
-    private static final String TAG = "DataModelTestHelpers";
-
-    static class StubLoader extends ContentObserver {
-        ArrayList<Uri> mUriList = new ArrayList<Uri>();
-
-        StubLoader() {
-            super(null);
-        }
-
-        public void clear() {
-            mUriList.clear();
-        }
-
-        @Override
-        public void onChange(final boolean selfChange) {
-            // Handle change.
-            mUriList.add(null);
-        }
-
-        // Implement the onChange(boolean, Uri) method to take advantage of the new Uri argument.
-        // Only supported on platform 16 and above...
-        @Override
-        public void onChange(final boolean selfChange, final Uri uri) {
-            // Handle change.
-            mUriList.add(uri);
-        }
-    }
-
-    static class StubBackgroundWorker extends BackgroundWorker {
-        public StubBackgroundWorker() {
-            super();
-            mActions = new ArrayList<Action>();
-        }
-
-        ArrayList<Action> mActions;
-        public ArrayList<Action> getRequestsMade() {
-            return mActions;
-        }
-
-        @Override
-        public void queueBackgroundWork(final List<Action> actions) {
-            mActions.addAll(actions);
-
-            synchronized(this) {
-                this.notifyAll();
-            }
-        }
-    }
-
-    static class ResultTracker {
-        public Object executionResult;
-        public Object completionResult;
-    }
-
-    static class StubChatActionMonitor extends ActionMonitor {
-        static public class StateTransition {
-            Action action;
-            int from;
-            int to;
-            public StateTransition(final Action action, final int from, final int to) {
-                this.action = action;
-                this.from = from;
-                this.to = to;
-            }
-        }
-
-        private final ArrayList<StateTransition> mTransitions;
-        public ArrayList<StateTransition> getTransitions() {
-            return mTransitions;
-        }
-
-        protected StubChatActionMonitor(final int initialState, final String actionKey,
-                final Object data) {
-            super(initialState, actionKey, data);
-            mTransitions =  new ArrayList<StateTransition>();
-        }
-
-        @Override
-        protected void updateState(final Action action, final int expectedState,
-                final int state) {
-            mTransitions.add(new StateTransition(action, mState, state));
-            super.updateState(action, expectedState, state);
-        }
-
-        public void setState(final int state) {
-            mState = state;
-        }
-
-        public int getState() {
-            return mState;
-        }
-    }
-
-    public static class StubActionService extends ActionService {
-        public static class StubActionServiceCallLog {
-            public final Action action;
-            public final Action request;
-            public final Bundle response;
-            public final Exception exception;
-            public final Action update;
-
-            public StubActionServiceCallLog(final Action action,
-                    final Action request,
-                    final Bundle response,
-                    final Exception exception,
-                    final Action update) {
-                this.action = action;
-                this.request = request;
-                this.response = response;
-                this.exception = exception;
-                this.update = update;
-            }
-        }
-
-        private final ArrayList<StubActionServiceCallLog> mServiceCalls =
-                new ArrayList<StubActionServiceCallLog>();
-
-        public ArrayList<StubActionServiceCallLog> getCalls() {
-            return mServiceCalls;
-        }
-
-        @Override
-        public void startAction(final Action action) {
-            mServiceCalls.add(new StubActionServiceCallLog(action, null, null, null, null));
-            synchronized(this) {
-                this.notifyAll();
-            }
-        }
-
-        @Override
-        public void handleResponseFromBackgroundWorker(final Action request,
-                final Bundle response) {
-            mServiceCalls.add(new StubActionServiceCallLog(null, request, response, null, null));
-            synchronized(this) {
-                this.notifyAll();
-            }
-        }
-
-        @Override
-        protected void handleFailureFromBackgroundWorker(final Action request,
-                final Exception exception) {
-            mServiceCalls.add(new StubActionServiceCallLog(null, request, null, exception, null));
-            synchronized(this) {
-                this.notifyAll();
-            }
-        }
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java b/tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java
deleted file mode 100644
index 24f488a..0000000
--- a/tests/src/com/android/messaging/datamodel/action/GetOrCreateConversationActionTest.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.pm.ProviderInfo;
-import android.database.Cursor;
-import android.net.Uri;
-import android.test.mock.MockContentProvider;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeContext;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.action.ActionTestHelpers.StubActionService;
-import com.android.messaging.datamodel.action.ActionTestHelpers.StubActionService.StubActionServiceCallLog;
-import com.android.messaging.datamodel.action.GetOrCreateConversationAction.GetOrCreateConversationActionListener;
-import com.android.messaging.datamodel.action.GetOrCreateConversationAction.GetOrCreateConversationActionMonitor;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.sms.MmsUtils;
-
-import org.mockito.Mock;
-
-import java.util.ArrayList;
-
-@SmallTest
-public class GetOrCreateConversationActionTest extends BugleTestCase {
-
-    @Mock GetOrCreateConversationActionListener mockListener;
-
-    public void testGetOrCreateConversation() {
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final ArrayList<String> recipients = new ArrayList<String>();
-        recipients.add("5551234567");
-        recipients.add("5551234568");
-
-        // Generate a list of partially formed participants
-        final ArrayList<ParticipantData> participants = new
-                ArrayList<ParticipantData>();
-
-
-        for (final String recipient : recipients) {
-            participants.add(ParticipantData.getFromRawPhoneBySystemLocale(recipient));
-        }
-
-        // Test that we properly stubbed the SMS provider to return a thread id
-        final long threadId = MmsUtils.getOrCreateThreadId(mContext, recipients);
-        assertEquals(TestDataFactory.SMS_MMS_THREAD_ID_CURSOR_VALUE, threadId);
-
-        ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
-        GetOrCreateConversationActionMonitor monitor =
-                GetOrCreateConversationAction.getOrCreateConversation(participants, null,
-                        mockListener);
-
-        assertEquals("Failed to start service once for action", calls.size(), 1);
-        assertTrue("Action not GetOrCreateConversationAction", calls.get(0).action instanceof
-                GetOrCreateConversationAction);
-
-        GetOrCreateConversationAction action = (GetOrCreateConversationAction)
-                calls.get(0).action;
-
-        Object result = action.executeAction();
-
-        assertTrue(result instanceof String);
-
-        // Make sure that we created a new conversation
-        int expectedConversationId = TestDataFactory.NUM_TEST_CONVERSATIONS + 1;
-        assertEquals(expectedConversationId, Integer.parseInt((String) result));
-
-        // Now get the conversation that we just created again
-        monitor = GetOrCreateConversationAction.getOrCreateConversation(participants, null,
-                        mockListener);
-
-        calls = mService.getCalls();
-        assertEquals("Failed to start service for second action", calls.size(), 2);
-        assertTrue("Action not GetOrCreateConversationAction", calls.get(1).action instanceof
-                GetOrCreateConversationAction);
-        action = (GetOrCreateConversationAction)calls.get(1).action;
-        result = action.executeAction();
-
-        assertTrue(result instanceof String);
-
-        final String conversationId = (String) result;
-
-        // Make sure that we found the same conversation id
-        assertEquals(expectedConversationId, Integer.parseInt((String) result));
-
-        final ArrayList<ParticipantData> conversationParticipants =
-                BugleDatabaseOperations.getParticipantsForConversation(db, conversationId);
-
-        assertEquals("Participant count mismatch", recipients.size(),
-                conversationParticipants.size());
-        for(final ParticipantData participant : conversationParticipants) {
-            assertTrue(recipients.contains(participant.getSendDestination()));
-        }
-
-        final Uri conversationParticipantsUri =
-                MessagingContentProvider.buildConversationParticipantsUri(conversationId);
-        final Cursor cursor = mContext.getContentResolver().query(conversationParticipantsUri,
-                ParticipantData.ParticipantsQuery.PROJECTION, null, null, null);
-
-        int countSelf = 0;
-        while(cursor.moveToNext()) {
-            final ParticipantData participant = ParticipantData.getFromCursor(cursor);
-            if (participant.isSelf()) {
-                countSelf++;
-            } else {
-                assertTrue(recipients.contains(participant.getSendDestination()));
-            }
-        }
-        cursor.close();
-        assertEquals("Expect one self participant in conversations", 1, countSelf);
-        assertEquals("Cursor count mismatch", recipients.size(), cursor.getCount() - countSelf);
-
-        final String realId = BugleDatabaseOperations.getExistingConversation(db, threadId, false);
-        assertEquals("Conversation already exists", realId, conversationId);
-    }
-
-    private FakeContext mContext;
-    private StubActionService mService;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-
-        mContext = new FakeContext(getTestContext());
-
-        final MockContentProvider mockProvider = new MockContentProvider() {
-            @Override
-            public Cursor query(final Uri uri, final String[] projection, final String selection,
-                    final String[] selectionArgs, final String sortOrder) {
-                return TestDataFactory.getSmsMmsThreadIdCursor();
-            }
-        };
-
-        mContext.addContentProvider("mms-sms", mockProvider);
-        final MessagingContentProvider provider = new MessagingContentProvider();
-        final ProviderInfo providerInfo = new ProviderInfo();
-        providerInfo.authority = MessagingContentProvider.AUTHORITY;
-        provider.attachInfo(mContext, providerInfo);
-        mContext.addContentProvider(MessagingContentProvider.AUTHORITY, provider);
-
-        mService = new StubActionService();
-        final FakeDataModel fakeDataModel = new FakeDataModel(mContext)
-            .withActionService(mService);
-        FakeFactory.registerWithFakeContext(getTestContext(), mContext)
-                .withDataModel(fakeDataModel);
-        provider.setDatabaseForTest(fakeDataModel.getDatabase());
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/action/ReadWriteDraftMessageActionTest.java b/tests/src/com/android/messaging/datamodel/action/ReadWriteDraftMessageActionTest.java
deleted file mode 100644
index 518a722..0000000
--- a/tests/src/com/android/messaging/datamodel/action/ReadWriteDraftMessageActionTest.java
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.action;
-
-import android.content.ContentProvider;
-import android.content.pm.ProviderInfo;
-import android.database.Cursor;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeContext;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns;
-import com.android.messaging.datamodel.DatabaseWrapper;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.MediaScratchFileProvider;
-import com.android.messaging.datamodel.MessagingContentProvider;
-import com.android.messaging.datamodel.action.ActionTestHelpers.StubActionService;
-import com.android.messaging.datamodel.action.ActionTestHelpers.StubActionService.StubActionServiceCallLog;
-import com.android.messaging.datamodel.action.ReadDraftDataAction.ReadDraftDataActionListener;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.util.ContentType;
-
-import org.mockito.Mock;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-
-@SmallTest
-public class ReadWriteDraftMessageActionTest extends BugleTestCase {
-
-    @Mock ReadDraftDataActionListener mockListener;
-
-    // TODO: Add test cases
-    //  1. Make sure drafts can include attachments and multiple parts
-    //  2. Make sure attachments get cleaned up appropriately
-    //  3. Make sure messageId and partIds not reused (currently each draft is a new message).
-    public void testWriteDraft() {
-        final String draftMessage = "draftMessage";
-        final long threadId = 1234567;
-        final boolean senderBlocked = false;
-        final String participantNumber = "5551234567";
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final String conversationId = getOrCreateConversation(db, participantNumber, threadId,
-                senderBlocked);
-        final String selfId = getOrCreateSelfId(db);
-
-        // Should clear/stub DB
-        final ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
-        final MessageData message = MessageData.createDraftSmsMessage(conversationId, selfId,
-                draftMessage);
-
-        WriteDraftMessageAction.writeDraftMessage(conversationId, message);
-
-        assertEquals("Failed to start service once for action", calls.size(), 1);
-        assertTrue("Action not SaveDraftMessageAction",
-                calls.get(0).action instanceof WriteDraftMessageAction);
-
-        final Action save = calls.get(0).action;
-
-        final Object result = save.executeAction();
-
-        assertTrue("Expect row number string as result", result instanceof String);
-        final String messageId = (String) result;
-
-        // Should check DB
-        final MessageData actual = BugleDatabaseOperations.readMessage(db, messageId);
-        assertNotNull("Database missing draft", actual);
-        assertEquals("Draft text changed", draftMessage, actual.getMessageText());
-    }
-
-    private static String getOrCreateSelfId(final DatabaseWrapper db) {
-        db.beginTransaction();
-        final String selfId = BugleDatabaseOperations.getOrCreateParticipantInTransaction(db,
-                ParticipantData.getSelfParticipant(ParticipantData.DEFAULT_SELF_SUB_ID));
-        db.setTransactionSuccessful();
-        db.endTransaction();
-        return selfId;
-    }
-
-    private static String getOrCreateConversation(final DatabaseWrapper db,
-            final String participantNumber, final long threadId, final boolean senderBlocked) {
-        final ArrayList<ParticipantData> participants =
-                new ArrayList<ParticipantData>();
-        participants.add(ParticipantData.getFromRawPhoneBySystemLocale(participantNumber));
-
-        final String conversationId = BugleDatabaseOperations.getOrCreateConversation(db, threadId,
-                senderBlocked, participants, false, false, null);
-        assertNotNull("No conversation", conversationId);
-        return conversationId;
-    }
-
-    public void testReadDraft() {
-        final Object data = "data";
-        final String draftMessage = "draftMessage";
-        final long threadId = 1234567;
-        final boolean senderBlocked = false;
-        final String participantNumber = "5552345678";
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final String conversationId = getOrCreateConversation(db, participantNumber, threadId,
-                senderBlocked);
-        final String selfId = getOrCreateSelfId(db);
-
-        // Should clear/stub DB
-        final ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
-        final MessageData message = MessageData.createDraftSmsMessage(conversationId, selfId,
-                draftMessage);
-
-        BugleDatabaseOperations.updateDraftMessageData(db, conversationId, message,
-                BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
-
-        final ActionMonitor monitor =
-                ReadDraftDataAction.readDraftData(conversationId, null, data, mockListener);
-
-        assertEquals("Unexpected number of calls to service", 1, calls.size());
-        assertTrue("Action not of type ReadDraftMessageAction",
-                calls.get(0).action instanceof ReadDraftDataAction);
-
-        final Action read = calls.get(0).action;
-
-        final Object result = read.executeAction();
-
-        assertTrue(result instanceof ReadDraftDataAction.DraftData);
-        final ReadDraftDataAction.DraftData draft = (ReadDraftDataAction.DraftData) result;
-
-        assertEquals("Draft message text differs", draftMessage, draft.message.getMessageText());
-        assertEquals("Draft self differs", selfId, draft.message.getSelfId());
-        assertEquals("Draft conversation differs", conversationId,
-                draft.conversation.getConversationId());
-    }
-
-    public void testReadDraftForNewConversation() {
-        final Object data = "data";
-        long threadId = 1234567;
-        final boolean senderBlocked = false;
-        long phoneNumber = 5557654567L;
-        final String notConversationId = "ThisIsNotValidConversationId";
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final String selfId = getOrCreateSelfId(db);
-
-        // Unless set a new conversation should have a null draft message
-        final MessageData blank = BugleDatabaseOperations.readDraftMessageData(db,
-                notConversationId, selfId);
-        assertNull(blank);
-
-        String conversationId = null;
-        do {
-            conversationId = BugleDatabaseOperations.getExistingConversation(db,
-                    threadId, senderBlocked);
-            threadId++;
-            phoneNumber++;
-        }
-        while(!TextUtils.isEmpty(conversationId));
-
-        final ArrayList<ParticipantData> participants =
-                new ArrayList<ParticipantData>();
-        participants.add(ParticipantData.getFromRawPhoneBySystemLocale(Long.toString(phoneNumber)));
-
-        conversationId = BugleDatabaseOperations.getOrCreateConversation(db, threadId,
-                senderBlocked, participants, false, false, null);
-        assertNotNull("No conversation", conversationId);
-
-        final MessageData actual = BugleDatabaseOperations.readDraftMessageData(db, conversationId,
-                selfId);
-        assertNull(actual);
-
-        // Should clear/stub DB
-        final ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
-        final ActionMonitor monitor =
-                ReadDraftDataAction.readDraftData(conversationId, null, data, mockListener);
-
-        assertEquals("Unexpected number of calls to service", 1, calls.size());
-        assertTrue("Action not of type ReadDraftMessageAction",
-                calls.get(0).action instanceof ReadDraftDataAction);
-
-        final Action read = calls.get(0).action;
-
-        final Object result = read.executeAction();
-
-        assertTrue(result instanceof ReadDraftDataAction.DraftData);
-        final ReadDraftDataAction.DraftData draft = (ReadDraftDataAction.DraftData) result;
-
-        assertEquals("Draft message text differs", "", draft.message.getMessageText());
-        assertEquals("Draft self differs", selfId, draft.message.getSelfId());
-        assertEquals("Draft conversation differs", conversationId,
-                draft.conversation.getConversationId());
-    }
-
-    public void testWriteAndReadDraft() {
-        final Object data = "data";
-        final String draftMessage = "draftMessage";
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-        final Cursor conversations = db.query(DatabaseHelper.CONVERSATIONS_TABLE,
-                new String[] { ConversationColumns._ID, ConversationColumns.CURRENT_SELF_ID }, null,
-                null, null /* groupBy */, null /* having */, null /* orderBy */);
-
-        if (conversations.moveToFirst()) {
-            final String conversationId = conversations.getString(0);
-            final String selfId = getOrCreateSelfId(db);
-
-            // Should clear/stub DB
-            final ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
-            final MessageData message = MessageData.createDraftSmsMessage(conversationId, selfId,
-                    draftMessage);
-
-            WriteDraftMessageAction.writeDraftMessage(conversationId, message);
-
-            assertEquals("Failed to start service once for action", calls.size(), 1);
-            assertTrue("Action not SaveDraftMessageAction",
-                    calls.get(0).action instanceof WriteDraftMessageAction);
-
-            final Action save = calls.get(0).action;
-
-            Object result = save.executeAction();
-
-            assertTrue("Expect row number string as result", result instanceof String);
-
-            // Should check DB
-
-            final ActionMonitor monitor =
-                    ReadDraftDataAction.readDraftData(conversationId, null, data,
-                            mockListener);
-
-            assertEquals("Expect two calls queued", 2, calls.size());
-            assertTrue("Expect action", calls.get(1).action instanceof ReadDraftDataAction);
-
-            final Action read = calls.get(1).action;
-
-            result = read.executeAction();
-
-            assertTrue(result instanceof ReadDraftDataAction.DraftData);
-            final ReadDraftDataAction.DraftData draft = (ReadDraftDataAction.DraftData) result;
-
-            assertEquals("Draft message text differs", draftMessage, draft.message.getMessageText());
-            // The conversation's self id is used as the draft's self id.
-            assertEquals("Draft self differs", conversations.getString(1),
-                    draft.message.getSelfId());
-            assertEquals("Draft conversation differs", conversationId,
-                    draft.conversation.getConversationId());
-        } else {
-            fail("No conversations in database");
-        }
-    }
-
-    public void testUpdateDraft() {
-        final String initialMessage = "initialMessage";
-        final String draftMessage = "draftMessage";
-        final long threadId = 1234567;
-        final boolean senderBlocked = false;
-        final String participantNumber = "5553456789";
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final String conversationId = getOrCreateConversation(db, participantNumber, threadId,
-                senderBlocked);
-        final String selfId = getOrCreateSelfId(db);
-
-        final ArrayList<StubActionServiceCallLog> calls = mService.getCalls();
-
-        // Insert initial message
-        MessageData initial = MessageData.createDraftSmsMessage(conversationId, selfId,
-                initialMessage);
-
-        BugleDatabaseOperations.updateDraftMessageData(db, conversationId, initial,
-                BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
-
-        initial = BugleDatabaseOperations.readDraftMessageData(db,
-                conversationId, selfId);
-        assertEquals("Initial text mismatch", initialMessage, initial.getMessageText());
-
-        // Now update the draft
-        final MessageData message = MessageData.createDraftSmsMessage(conversationId, selfId,
-                draftMessage);
-        WriteDraftMessageAction.writeDraftMessage(conversationId, message);
-
-        assertEquals("Failed to start service once for action", calls.size(), 1);
-        assertTrue("Action not SaveDraftMessageAction",
-                calls.get(0).action instanceof WriteDraftMessageAction);
-
-        final Action save = calls.get(0).action;
-
-        final Object result = save.executeAction();
-
-        assertTrue("Expect row number string as result", result instanceof String);
-
-        // Check DB
-        final MessageData actual =  BugleDatabaseOperations.readDraftMessageData(db,
-                conversationId, selfId);
-        assertNotNull("Database missing draft", actual);
-        assertEquals("Draft text mismatch", draftMessage, actual.getMessageText());
-        assertNull("Draft messageId should be null", actual.getMessageId());
-    }
-
-    public void testBugleDatabaseDraftOperations() {
-        final String initialMessage = "initialMessage";
-        final String draftMessage = "draftMessage";
-        final long threadId = 1234599;
-        final boolean senderBlocked = false;
-        final String participantNumber = "5553456798";
-        final String subject = "subject here";
-
-        final DatabaseWrapper db = DataModel.get().getDatabase();
-
-        final String conversationId = getOrCreateConversation(db, participantNumber, threadId,
-                senderBlocked);
-        final String selfId = getOrCreateSelfId(db);
-
-        final String text = "This is some text";
-        final Uri mOutputUri = MediaScratchFileProvider.buildMediaScratchSpaceUri("txt");
-        OutputStream outputStream = null;
-        try {
-            outputStream = mContext.getContentResolver().openOutputStream(mOutputUri);
-            outputStream.write(text.getBytes());
-        } catch (final FileNotFoundException e) {
-            fail("Cannot open output file");
-        } catch (final IOException e) {
-            fail("Cannot write output file");
-        }
-
-        final MessageData initial =
-                MessageData.createDraftMmsMessage(conversationId, selfId, initialMessage, subject);
-        initial.addPart(MessagePartData.createMediaMessagePart(ContentType.MULTIPART_MIXED,
-                mOutputUri, 0, 0));
-
-        final String initialMessageId = BugleDatabaseOperations.updateDraftMessageData(db,
-                conversationId, initial, BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
-        assertNotNull(initialMessageId);
-
-        final MessageData initialDraft = BugleDatabaseOperations.readMessage(db, initialMessageId);
-        assertNotNull(initialDraft);
-        int cnt = 0;
-        for(final MessagePartData part : initialDraft.getParts()) {
-            if (part.isAttachment()) {
-                assertEquals(part.getContentUri(), mOutputUri);
-            } else {
-                assertEquals(part.getText(), initialMessage);
-            }
-            cnt++;
-        }
-        assertEquals("Wrong number of parts", 2, cnt);
-
-        InputStream inputStream = null;
-        try {
-            inputStream = mContext.getContentResolver().openInputStream(mOutputUri);
-            final byte[] buffer = new byte[256];
-            final int read = inputStream.read(buffer);
-            assertEquals(read, text.getBytes().length);
-        } catch (final FileNotFoundException e) {
-            fail("Cannot open input file");
-        } catch (final IOException e) {
-            fail("Cannot read input file");
-        }
-
-        final String moreText = "This is some more text";
-        final Uri mAnotherUri = MediaScratchFileProvider.buildMediaScratchSpaceUri("txt");
-        outputStream = null;
-        try {
-            outputStream = mContext.getContentResolver().openOutputStream(mAnotherUri);
-            outputStream.write(moreText.getBytes());
-        } catch (final FileNotFoundException e) {
-            fail("Cannot open output file");
-        } catch (final IOException e) {
-            fail("Cannot write output file");
-        }
-
-        final MessageData another =
-                MessageData.createDraftMmsMessage(conversationId, selfId, draftMessage, subject);
-        another.addPart(MessagePartData.createMediaMessagePart(ContentType.MMS_MULTIPART_MIXED,
-                mAnotherUri, 0, 0));
-
-        final String anotherMessageId = BugleDatabaseOperations.updateDraftMessageData(db,
-                conversationId, another, BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
-        assertNotNull(anotherMessageId);
-
-        final MessageData anotherDraft = BugleDatabaseOperations.readMessage(db, anotherMessageId);
-        assertNotNull(anotherDraft);
-        cnt = 0;
-        for(final MessagePartData part : anotherDraft.getParts()) {
-            if (part.isAttachment()) {
-                assertEquals(part.getContentUri(), mAnotherUri);
-            } else {
-                assertEquals(part.getText(), draftMessage);
-            }
-            cnt++;
-        }
-        assertEquals("Wrong number of parts", 2, cnt);
-
-        inputStream = null;
-        try {
-            inputStream = mContext.getContentResolver().openInputStream(mOutputUri);
-            assertNull("Original draft content should have been deleted", inputStream);
-        } catch (final FileNotFoundException e) {
-        }
-        inputStream = null;
-        try {
-            inputStream = mContext.getContentResolver().openInputStream(mAnotherUri);
-            final byte[] buffer = new byte[256];
-            final int read = inputStream.read(buffer);
-            assertEquals(read, moreText.getBytes().length);
-        } catch (final FileNotFoundException e) {
-            fail("Cannot open input file");
-        } catch (final IOException e) {
-            fail("Cannot read input file");
-        }
-
-        final MessageData last = null;
-        final String lastPartId = BugleDatabaseOperations.updateDraftMessageData(db,
-                conversationId, last, BugleDatabaseOperations.UPDATE_MODE_ADD_DRAFT);
-        assertNull(lastPartId);
-
-        inputStream = null;
-        try {
-            inputStream = mContext.getContentResolver().openInputStream(mAnotherUri);
-            assertNull("Original draft content should have been deleted", inputStream);
-        } catch (final FileNotFoundException e) {
-        }
-
-    }
-
-    private StubActionService mService;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-
-        final FakeContext context = new FakeContext(getTestContext());
-
-        final ContentProvider bugleProvider = new MessagingContentProvider();
-        final ProviderInfo bugleProviderInfo = new ProviderInfo();
-        bugleProviderInfo.authority = MessagingContentProvider.AUTHORITY;
-        bugleProvider.attachInfo(mContext, bugleProviderInfo);
-        context.addContentProvider(MessagingContentProvider.AUTHORITY, bugleProvider);
-        final ContentProvider mediaProvider = new MediaScratchFileProvider();
-        final ProviderInfo mediaProviderInfo = new ProviderInfo();
-        mediaProviderInfo.authority = MediaScratchFileProvider.AUTHORITY;
-        mediaProvider.attachInfo(mContext, mediaProviderInfo);
-        context.addContentProvider(MediaScratchFileProvider.AUTHORITY, mediaProvider);
-
-        mService = new StubActionService();
-        final FakeDataModel fakeDataModel = new FakeDataModel(context)
-                .withActionService(mService);
-        FakeFactory.registerWithFakeContext(getTestContext(), context)
-                .withDataModel(fakeDataModel);
-
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/data/ConversationMessageDataTest.java b/tests/src/com/android/messaging/datamodel/data/ConversationMessageDataTest.java
deleted file mode 100644
index 42b51fd..0000000
--- a/tests/src/com/android/messaging/datamodel/data/ConversationMessageDataTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.FakeCursor;
-import com.android.messaging.datamodel.data.ConversationMessageData.ConversationMessageViewColumns;
-
-@SmallTest
-public class ConversationMessageDataTest extends BugleTestCase {
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        FakeFactory.register(getTestContext());
-    }
-
-    public void testBindFirstMessage() {
-        final FakeCursor testCursor = TestDataFactory.getConversationMessageCursor();
-        final ConversationMessageData data = new ConversationMessageData();
-        testCursor.moveToFirst();
-        data.bind(testCursor);
-        // TODO: Add before checking in all bound fields...
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.STATUS, 0).equals(
-                MessageData.BUGLE_STATUS_INCOMING_COMPLETE), data.getIsIncoming());
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.SENDER_PROFILE_PHOTO_URI,
-                0), data.getSenderProfilePhotoUri());
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.SENDER_FULL_NAME, 0),
-                data.getSenderFullName());
-    }
-
-    public void testBindTwice() {
-        final FakeCursor testCursor = TestDataFactory.getConversationMessageCursor();
-        final ConversationMessageData data = new ConversationMessageData();
-        testCursor.moveToPosition(1);
-        data.bind(testCursor);
-        assertEquals(TestDataFactory.getMessageText(testCursor, 1), data.getText());
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.RECEIVED_TIMESTAMP, 1),
-                data.getReceivedTimeStamp());
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.STATUS, 1).equals(
-                MessageData.BUGLE_STATUS_INCOMING_COMPLETE), data.getIsIncoming());
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.SENDER_PROFILE_PHOTO_URI,
-                1), data.getSenderProfilePhotoUri());
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.SENDER_FULL_NAME, 1),
-                data.getSenderFullName());
-        testCursor.moveToPosition(2);
-        data.bind(testCursor);
-        assertEquals(TestDataFactory.getMessageText(testCursor, 2), data.getText());
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.RECEIVED_TIMESTAMP, 2),
-                data.getReceivedTimeStamp());
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.STATUS, 2).equals(
-                MessageData.BUGLE_STATUS_INCOMING_COMPLETE), data.getIsIncoming());
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.SENDER_PROFILE_PHOTO_URI,
-                2), data.getSenderProfilePhotoUri());
-        assertEquals(testCursor.getAt(ConversationMessageViewColumns.SENDER_FULL_NAME, 2),
-                data.getSenderFullName());
-    }
-
-    public void testMessageClustering() {
-        final FakeCursor testCursor = TestDataFactory.getConversationMessageCursor();
-        final ConversationMessageData data = new ConversationMessageData();
-        testCursor.moveToPosition(0);
-        data.bind(testCursor);
-        assertFalse(data.getCanClusterWithPreviousMessage());
-        assertFalse(data.getCanClusterWithNextMessage());
-
-        testCursor.moveToPosition(1);
-        data.bind(testCursor);
-        assertFalse(data.getCanClusterWithPreviousMessage());
-        assertFalse(data.getCanClusterWithNextMessage());
-
-        testCursor.moveToPosition(2);
-        data.bind(testCursor);
-        assertFalse(data.getCanClusterWithPreviousMessage());
-        assertTrue(data.getCanClusterWithNextMessage());  // 2 and 3 can be clustered
-        testCursor.moveToPosition(3);
-
-        data.bind(testCursor);
-        assertTrue(data.getCanClusterWithPreviousMessage());  // 2 and 3 can be clustered
-        assertFalse(data.getCanClusterWithNextMessage());
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/data/ConversationParticipantsDataTest.java b/tests/src/com/android/messaging/datamodel/data/ConversationParticipantsDataTest.java
deleted file mode 100644
index b250f80..0000000
--- a/tests/src/com/android/messaging/datamodel/data/ConversationParticipantsDataTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.FakeCursor;
-
-@SmallTest
-public class ConversationParticipantsDataTest extends BugleTestCase {
-    public void testBindParticipants() {
-        final FakeCursor testCursor = TestDataFactory.getConversationParticipantsCursor();
-        final ConversationParticipantsData data = new ConversationParticipantsData();
-        data.bind(testCursor);
-
-        assertEquals(data.getParticipantListExcludingSelf().size(), testCursor.getCount());
-        final ParticipantData participant2 = data.getParticipantById("2");
-        assertNotNull(participant2);
-        assertEquals(participant2.getFirstName(), testCursor.getAt(
-                ParticipantColumns.FIRST_NAME, 1) );
-        assertEquals(participant2.getSendDestination(), testCursor.getAt(
-                ParticipantColumns.SEND_DESTINATION, 1));
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/data/TestDataFactory.java b/tests/src/com/android/messaging/datamodel/data/TestDataFactory.java
deleted file mode 100644
index 033caa2..0000000
--- a/tests/src/com/android/messaging/datamodel/data/TestDataFactory.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.data;
-
-import android.content.ContentValues;
-import android.database.sqlite.SQLiteDatabase;
-import android.net.Uri;
-import android.provider.BaseColumns;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Contacts;
-import android.provider.MediaStore.Images.Media;
-
-import com.android.messaging.datamodel.BugleDatabaseOperations;
-import com.android.messaging.datamodel.DatabaseHelper;
-import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns;
-import com.android.messaging.datamodel.DatabaseHelper.MessageColumns;
-import com.android.messaging.datamodel.DatabaseHelper.PartColumns;
-import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns;
-import com.android.messaging.datamodel.FakeCursor;
-import com.android.messaging.datamodel.data.ConversationListItemData.ConversationListViewColumns;
-import com.android.messaging.datamodel.data.ConversationMessageData.ConversationMessageViewColumns;
-import com.android.messaging.util.Assert;
-import com.android.messaging.util.ContactUtil;
-import com.android.messaging.util.ContentType;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * A factory for fake objects that can be useful for multiple tests.
- */
-public class TestDataFactory {
-    private final static String[] sConversationListCursorColumns = new String[] {
-        ConversationListViewColumns._ID,
-        ConversationListViewColumns.NAME,
-        ConversationListViewColumns.ICON,
-        ConversationListViewColumns.SNIPPET_TEXT,
-        ConversationListViewColumns.PREVIEW_URI,
-        ConversationListViewColumns.SORT_TIMESTAMP,
-        ConversationListViewColumns.READ,
-        ConversationListViewColumns.PREVIEW_CONTENT_TYPE,
-        ConversationListViewColumns.MESSAGE_STATUS,
-    };
-
-    private final static String[] sContactCursorColumns = new String[] {
-            Phone.CONTACT_ID,
-            Phone.DISPLAY_NAME_PRIMARY,
-            Phone.PHOTO_THUMBNAIL_URI,
-            Phone.NUMBER,
-            Phone.TYPE,
-            Phone.LABEL,
-            Phone.LOOKUP_KEY,
-            Phone._ID,
-            Phone.SORT_KEY_PRIMARY,
-    };
-
-    private final static String[] sFrequentContactCursorColumns = new String[] {
-            Contacts._ID,
-            Contacts.DISPLAY_NAME,
-            Contacts.PHOTO_URI,
-            Phone.LOOKUP_KEY,
-    };
-
-    private final static String[] sConversationMessageCursorColumns = new String[] {
-        ConversationMessageViewColumns._ID,
-        ConversationMessageViewColumns.CONVERSATION_ID,
-        ConversationMessageViewColumns.PARTICIPANT_ID,
-        ConversationMessageViewColumns.SENT_TIMESTAMP,
-        ConversationMessageViewColumns.RECEIVED_TIMESTAMP,
-        ConversationMessageViewColumns.STATUS,
-        ConversationMessageViewColumns.SENDER_FULL_NAME,
-        ConversationMessageViewColumns.SENDER_PROFILE_PHOTO_URI,
-        ConversationMessageViewColumns.PARTS_IDS,
-        ConversationMessageViewColumns.PARTS_CONTENT_TYPES,
-        ConversationMessageViewColumns.PARTS_CONTENT_URIS,
-        ConversationMessageViewColumns.PARTS_WIDTHS,
-        ConversationMessageViewColumns.PARTS_HEIGHTS,
-        ConversationMessageViewColumns.PARTS_TEXTS,
-        ConversationMessageViewColumns.PARTS_COUNT
-    };
-
-    private final static String[] sGalleryCursorColumns = new String[] {
-        Media._ID,
-        Media.DATA,
-        Media.WIDTH,
-        Media.HEIGHT,
-        Media.MIME_TYPE
-    };
-
-    public static FakeCursor getConversationListCursor() {
-        final Object[][] cursorData = new Object[][] {
-                new Object[] { Long.valueOf(1), "name1", "content://icon1",
-                        "snippetText1", "content://snippetUri1", Long.valueOf(10), 1,
-                        ContentType.IMAGE_JPEG, MessageData.BUGLE_STATUS_INCOMING_COMPLETE},
-                new Object[] { Long.valueOf(2), "name2", "content://icon2",
-                        "snippetText2", "content://snippetUri2", Long.valueOf(20) + 24*60*60*1000,
-                        0, ContentType.IMAGE_JPEG, MessageData.BUGLE_STATUS_INCOMING_COMPLETE},
-                new Object[] { Long.valueOf(3), "name3", "content://icon3",
-                        "snippetText3", "content://snippetUri3", Long.valueOf(30) + 2*24*60*60*1000,
-                        0, ContentType.IMAGE_JPEG, MessageData.BUGLE_STATUS_OUTGOING_COMPLETE}
-        };
-        return new FakeCursor(ConversationListItemData.PROJECTION, sConversationListCursorColumns,
-                cursorData);
-    }
-    public static final int CONVERSATION_LIST_CURSOR_READ_MESSAGE_INDEX = 0;
-    public static final int CONVERSATION_LIST_CURSOR_UNREAD_MESSAGE_INDEX = 1;
-
-    public static FakeCursor getEmptyConversationListCursor() {
-        return new FakeCursor(ConversationListItemData.PROJECTION, sConversationListCursorColumns,
-                new Object[][] {});
-    }
-
-    public static FakeCursor getConversationMessageCursor() {
-        final Object[][] cursorData = new Object[][] {
-                new Object[] { Long.valueOf(0), Long.valueOf(1), Long.valueOf(1),
-                        Long.valueOf(10), Long.valueOf(10),
-                        MessageData.BUGLE_STATUS_INCOMING_COMPLETE, "Alice", null,
-                        "0", "text/plain", "''", -1, -1, "msg0", 1},
-                new Object[] { Long.valueOf(1), Long.valueOf(1), Long.valueOf(2),
-                        Long.valueOf(20), Long.valueOf(20),
-                        MessageData.BUGLE_STATUS_OUTGOING_COMPLETE, "Bob", null,
-                        "1", "text/plain", "''", -1, -1, "msg1", 1},
-                new Object[] { Long.valueOf(2), Long.valueOf(1), Long.valueOf(1),
-                        Long.valueOf(30), Long.valueOf(30),
-                        MessageData.BUGLE_STATUS_OUTGOING_COMPLETE, "Alice", null,
-                        "2", "contentType3", "'content://fakeUri3'", "0", "0", "msg1", 1},
-                new Object[] { Long.valueOf(3), Long.valueOf(1), Long.valueOf(1),
-                        Long.valueOf(40), Long.valueOf(40),
-                        MessageData.BUGLE_STATUS_OUTGOING_COMPLETE, "Alice", null,
-                        "3|4", "'contentType4'|'text/plain'", "'content://fakeUri4'|''", "0|-1", "0|-1", "''|'msg3'", 2},
-        };
-        return new FakeCursor(
-                ConversationMessageData.getProjection(),
-                sConversationMessageCursorColumns,
-                cursorData);
-    }
-
-    public static String getMessageText(final FakeCursor messageCursor, final int row) {
-        final String allPartsText = messageCursor.getAt(ConversationMessageViewColumns.PARTS_TEXTS, row)
-                .toString();
-        final int partsCount = (Integer) messageCursor.getAt(
-                ConversationMessageViewColumns.PARTS_COUNT, row);
-        final String messageId = messageCursor.getAt(
-                ConversationMessageViewColumns._ID, row).toString();
-        final List<MessagePartData> parts = ConversationMessageData.makeParts(
-                messageCursor.getAt(ConversationMessageViewColumns.PARTS_IDS, row).toString(),
-                messageCursor.getAt(ConversationMessageViewColumns.PARTS_CONTENT_TYPES, row).toString(),
-                messageCursor.getAt(ConversationMessageViewColumns.PARTS_CONTENT_URIS, row).toString(),
-                messageCursor.getAt(ConversationMessageViewColumns.PARTS_WIDTHS, row).toString(),
-                messageCursor.getAt(ConversationMessageViewColumns.PARTS_HEIGHTS, row).toString(),
-                messageCursor.getAt(ConversationMessageViewColumns.PARTS_TEXTS, row).toString(),
-                partsCount,
-                messageId);
-
-        for (final MessagePartData part : parts) {
-            if (part.isText()) {
-                return part.getText();
-            }
-        }
-        return null;
-    }
-
-    // Indexes where to find consecutive and non consecutive messages from same participant
-    // (respect to index - 1).
-    public static final int MESSAGE_WITH_SAME_PARTICIPANT_AS_PREVIOUS = 3;
-    public static final int MESSAGE_WITH_DIFFERENT_PARTICIPANT_AS_PREVIOUS = 2;
-
-    public static FakeCursor getConversationParticipantsCursor() {
-        final String[] sConversationParticipantsCursorColumns = new String[] {
-                ParticipantColumns._ID,
-                ParticipantColumns.SUB_ID,
-                ParticipantColumns.NORMALIZED_DESTINATION,
-                ParticipantColumns.SEND_DESTINATION,
-                ParticipantColumns.FULL_NAME,
-                ParticipantColumns.FIRST_NAME,
-                ParticipantColumns.PROFILE_PHOTO_URI,
-        };
-
-        final Object[][] cursorData = new Object[][] {
-                new Object[] { 1, ParticipantData.OTHER_THAN_SELF_SUB_ID, "+15554567890",
-                        "(555)456-7890", "alice in wonderland", "alice", "alice.png" },
-                new Object[] { 2, ParticipantData.OTHER_THAN_SELF_SUB_ID, "+15551011121",
-                        "(555)101-1121", "bob the baker", "bob", "bob.png"},
-                new Object[] { 3, ParticipantData.OTHER_THAN_SELF_SUB_ID, "+15551314152",
-                        "(555)131-4152", "charles in charge", "charles", "charles.png" },
-        };
-
-        return new FakeCursor(ParticipantData.ParticipantsQuery.PROJECTION,
-                sConversationParticipantsCursorColumns, cursorData);
-    }
-
-    public static final int CONTACT_LIST_CURSOR_FIRST_LEVEL_CONTACT_INDEX = 0;
-    public static final int CONTACT_LIST_CURSOR_SECOND_LEVEL_CONTACT_INDEX = 2;
-
-    /**
-     * Returns a cursor for the all contacts list consumable by ContactPickerFragment.
-     */
-    public static FakeCursor getAllContactListCursor() {
-        final Object[][] cursorData = new Object[][] {
-                new Object[] { Long.valueOf(0), "John Smith", "content://uri1",
-                        "425-555-1234", Phone.TYPE_HOME, "", "0", Long.valueOf(0), 0 },
-                new Object[] { Long.valueOf(1), "Sun Woo Kong", "content://uri2",
-                        "425-555-1235", Phone.TYPE_MOBILE, "", "1", Long.valueOf(1), 1 },
-                new Object[] { Long.valueOf(1), "Sun Woo Kong", "content://uri2",
-                        "425-555-1238", Phone.TYPE_HOME, "", "1", Long.valueOf(2), 2 },
-                new Object[] { Long.valueOf(2), "Anna Kinney", "content://uri3",
-                        "425-555-1236", Phone.TYPE_MAIN, "", "3", Long.valueOf(3), 3 },
-                new Object[] { Long.valueOf(3), "Mike Jones", "content://uri3",
-                        "425-555-1236", Phone.TYPE_MAIN, "", "5", Long.valueOf(4), 4 },
-        };
-        return new FakeCursor(ContactUtil.PhoneQuery.PROJECTION, sContactCursorColumns,
-                cursorData);
-    }
-
-    /**
-     * Returns a cursor for the frequent contacts list consumable by ContactPickerFragment.
-     * Note: make it so that this cursor is the generated result of getStrequentContactsCursor()
-     * and getAllContactListCursor(), i.e., expand the entries in getStrequentContactsCursor()
-     * with the details from getAllContactListCursor()
-     */
-    public static FakeCursor getFrequentContactListCursor() {
-        final Object[][] cursorData = new Object[][] {
-                new Object[] { Long.valueOf(2), "Anna Kinney", "content://uri3",
-                        "425-555-1236", Phone.TYPE_MAIN, "", "3", Long.valueOf(3), 0 },
-                new Object[] { Long.valueOf(1), "Sun Woo Kong", "content://uri2",
-                        "425-555-1235", Phone.TYPE_MOBILE, "", "1", Long.valueOf(1), 1},
-                new Object[] { Long.valueOf(1), "Sun Woo Kong", "content://uri2",
-                        "425-555-1238", Phone.TYPE_HOME, "", "1", Long.valueOf(2), 2 },
-                new Object[] { Long.valueOf(0), "John Smith", "content://uri1",
-                        "425-555-1234", Phone.TYPE_HOME, "", "0", Long.valueOf(0), 3 },
-        };
-        return new FakeCursor(ContactUtil.PhoneQuery.PROJECTION, sContactCursorColumns,
-                cursorData);
-    }
-
-    /**
-     * Returns a strequent (starred + frequent) cursor (like the one produced by android contact
-     * provider's CONTENT_STREQUENT_URI query) that's consumable by FrequentContactsCursorBuilder.
-     */
-    public static FakeCursor getStrequentContactsCursor() {
-        final Object[][] cursorData = new Object[][] {
-                new Object[] { Long.valueOf(0), "Anna Kinney", "content://uri1", "3" },
-                new Object[] { Long.valueOf(1), "Sun Woo Kong", "content://uri2", "1" },
-                new Object[] { Long.valueOf(2), "John Smith", "content://uri3", "0" },
-                // Email-only entry that shouldn't be included in the result.
-                new Object[] { Long.valueOf(3), "Email Contact", "content://uri4", "100" },
-        };
-        return new FakeCursor(ContactUtil.FrequentContactQuery.PROJECTION,
-                sFrequentContactCursorColumns, cursorData);
-    }
-
-    public static final int SMS_MMS_THREAD_ID_CURSOR_VALUE = 123456789;
-
-    public static FakeCursor getSmsMmsThreadIdCursor() {
-        final String[] ID_PROJECTION = { BaseColumns._ID };
-        final Object[][] cursorData = new Object[][] {
-                new Object[] { Long.valueOf(SMS_MMS_THREAD_ID_CURSOR_VALUE) },
-        };
-        return new FakeCursor(ID_PROJECTION, ID_PROJECTION, cursorData);
-    }
-
-    public static FakeCursor getGalleryGridCursor() {
-        final Object[][] cursorData = new Object[][] {
-                new Object[] { Long.valueOf(0), "/sdcard/image1", 100, 100, "image/jpeg" },
-                new Object[] { Long.valueOf(1), "/sdcard/image2", 200, 200, "image/png" },
-                new Object[] { Long.valueOf(2), "/sdcard/image3", 300, 300, "image/jpeg" },
-        };
-        return new FakeCursor(GalleryGridItemData.MEDIA_PROJECTION, sGalleryCursorColumns,
-                cursorData);
-    }
-
-    public static final int NUM_TEST_CONVERSATIONS = 10;
-
-    /**
-     * Create test data in our db.
-     *
-     * Ideally this will create more realistic data with more variety.
-     */
-    public static void createTestData(final SQLiteDatabase db) {
-        BugleDatabaseOperations.clearParticipantIdCache();
-
-        // Timestamp for 1 day ago
-        final long yesterday = System.currentTimeMillis() - (24 * 60 * 60 * 1000);
-
-        final ContentValues conversationValues = new ContentValues();
-        for (int i = 1; i <= NUM_TEST_CONVERSATIONS; i++) {
-            conversationValues.put(ConversationColumns.NAME, "Conversation " + i);
-            final long conversationId = db.insert(DatabaseHelper.CONVERSATIONS_TABLE, null,
-                    conversationValues);
-
-            final ContentValues messageValues = new ContentValues();
-            for (int m = 1; m <= 25; m++) {
-                // Move forward ten minutes per conversation, 1 minute per message.
-                final long messageTime = yesterday + (i * 10 * 60 * 1000) + (m * 60 * 1000);
-                messageValues.put(MessageColumns.RECEIVED_TIMESTAMP, messageTime);
-                messageValues.put(MessageColumns.CONVERSATION_ID, conversationId);
-                messageValues.put(MessageColumns.SENDER_PARTICIPANT_ID,
-                        Math.abs(("" + messageTime).hashCode()) % 2);
-                final long messageId = db.insert(DatabaseHelper.MESSAGES_TABLE, null, messageValues);
-
-                // Create a text part for this message
-                final ContentValues partValues = new ContentValues();
-                partValues.put(PartColumns.MESSAGE_ID, messageId);
-                partValues.put(PartColumns.CONVERSATION_ID, conversationId);
-                partValues.put(PartColumns.TEXT, "Conversation: " + conversationId +
-                        " Message: " + m);
-                db.insert(DatabaseHelper.PARTS_TABLE, null, partValues);
-
-                // Update the snippet for this conversation to the latest message inserted
-                conversationValues.clear();
-                conversationValues.put(ConversationColumns.LATEST_MESSAGE_ID, messageId);
-                final int updatedCount = db.update(DatabaseHelper.CONVERSATIONS_TABLE,
-                        conversationValues,
-                        "_id=?", new String[]{String.valueOf(conversationId)});
-                Assert.isTrue(updatedCount == 1);
-            }
-        }
-    }
-
-    public static List<MessagePartData> getTestDraftAttachments() {
-        final MessagePartData[] retParts = new MessagePartData[] {
-                new MessagePartData(ContentType.IMAGE_JPEG, Uri.parse("content://image"),
-                        100, 100),
-                new MessagePartData(ContentType.VIDEO_3GPP, Uri.parse("content://video"),
-                        100, 100),
-                new MessagePartData(ContentType.TEXT_VCARD, Uri.parse("content://vcard"),
-                        0, 0),
-                new MessagePartData(ContentType.AUDIO_3GPP, Uri.parse("content://audio"),
-                        0, 0)
-        };
-        return Arrays.asList(retParts);
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/media/FakeImageRequest.java b/tests/src/com/android/messaging/datamodel/media/FakeImageRequest.java
deleted file mode 100644
index 7f6ac3f..0000000
--- a/tests/src/com/android/messaging/datamodel/media/FakeImageRequest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.text.TextUtils;
-
-import java.util.List;
-
-public class FakeImageRequest implements MediaRequest<FakeImageResource> {
-    public static final String INVALID_KEY = "invalid";
-    private final String mKey;
-    private final int mSize;
-
-    public FakeImageRequest(final String key, final int size) {
-        mKey = key;
-        mSize = size;
-    }
-
-    @Override
-    public String getKey() {
-        return mKey;
-    }
-
-    @Override
-    public FakeImageResource loadMediaBlocking(List<MediaRequest<FakeImageResource>> chainedTask)
-            throws Exception {
-        if (TextUtils.equals(mKey, INVALID_KEY)) {
-            throw new Exception();
-        } else {
-            return new FakeImageResource(mSize, mKey);
-        }
-    }
-
-    @Override
-    public int getCacheId() {
-        return FakeMediaCacheManager.FAKE_IMAGE_CACHE;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public MediaCache<FakeImageResource> getMediaCache() {
-        return (MediaCache<FakeImageResource>) MediaCacheManager.get().getOrCreateMediaCacheById(
-                getCacheId());
-    }
-
-    @Override
-    public int getRequestType() {
-        return MediaRequest.REQUEST_LOAD_MEDIA;
-    }
-
-    @Override
-    public MediaRequestDescriptor<FakeImageResource> getDescriptor() {
-        return null;
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/media/FakeImageResource.java b/tests/src/com/android/messaging/datamodel/media/FakeImageResource.java
deleted file mode 100644
index 969854f..0000000
--- a/tests/src/com/android/messaging/datamodel/media/FakeImageResource.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-public class FakeImageResource extends RefCountedMediaResource {
-    private boolean mClosed = false;
-    private boolean mCached = false;
-    private final int mSize;
-    private final String mImageId;
-
-    public FakeImageResource(final int size, final String imageId) {
-        super(null);
-        mSize = size;
-        mImageId = imageId;
-    }
-
-    public boolean isClosed() {
-        return mClosed;
-    }
-
-    public String getImageId() {
-        return mImageId;
-    }
-
-    public void setCached(final boolean cached) {
-        mCached = cached;
-    }
-
-    public boolean getCached() {
-        return mCached;
-    }
-
-    @Override
-    public int getMediaSize() {
-        return mSize;
-    }
-
-    @Override
-    protected void close() {
-        mClosed = true;
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/media/FakeMediaCacheManager.java b/tests/src/com/android/messaging/datamodel/media/FakeMediaCacheManager.java
deleted file mode 100644
index 34b3a55..0000000
--- a/tests/src/com/android/messaging/datamodel/media/FakeMediaCacheManager.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-public class FakeMediaCacheManager extends MediaCacheManager {
-    // List of available fake cache ids.
-    public static final int FAKE_IMAGE_CACHE = 1;
-    public static final int FAKE_BATCH_IMAGE_CACHE = 2;
-
-    @Override
-    public MediaCache<?> createMediaCacheById(final int id) {
-        switch (id) {
-            case FAKE_IMAGE_CACHE:
-                // Make a cache of only 3 KB of data.
-                return new MediaCache<FakeImageResource>(3, FAKE_IMAGE_CACHE, "FakeImageCache");
-
-            case FAKE_BATCH_IMAGE_CACHE:
-                return new MediaCache<FakeImageResource>(10, FAKE_BATCH_IMAGE_CACHE,
-                        "FakeBatchImageCache");
-        }
-        return null;
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/media/ImageRequestTest.java b/tests/src/com/android/messaging/datamodel/media/ImageRequestTest.java
deleted file mode 100644
index 3e0f4e0..0000000
--- a/tests/src/com/android/messaging/datamodel/media/ImageRequestTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import android.content.ContentResolver;
-import android.graphics.BitmapFactory;
-import android.net.Uri;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.MemoryCacheManager;
-import com.android.messaging.util.ImageUtils;
-
-import org.mockito.ArgumentCaptor;
-import org.mockito.Matchers;
-import org.mockito.Mockito;
-import org.mockito.Spy;
-
-import java.io.IOException;
-
-@SmallTest
-public class ImageRequestTest extends BugleTestCase {
-    private static final int DOWNSAMPLE_IMAGE_SIZE = 2;
-
-    @Spy protected ImageUtils spyImageUtils;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        FakeFactory.register(getTestContext())
-                   .withMemoryCacheManager(new MemoryCacheManager())
-                   .withMediaCacheManager(new BugleMediaCacheManager());
-        spyImageUtils = Mockito.spy(new ImageUtils());
-        ImageUtils.set(spyImageUtils);
-    }
-
-    public void testLoadImageUnspecifiedSize() {
-        final String uriString = ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
-                getContext().getPackageName() + "/" + R.drawable.ic_audio_light;
-        final Uri uri = Uri.parse(uriString);
-        final UriImageRequest imageRequest = new UriImageRequest(getContext(),
-                new UriImageRequestDescriptor(uri));
-        try {
-            final ImageResource imageResource = imageRequest.loadMediaBlocking(null);
-            final ArgumentCaptor<BitmapFactory.Options> options =
-                    ArgumentCaptor.forClass(BitmapFactory.Options.class);
-            Mockito.verify(spyImageUtils).calculateInSampleSize(
-                    options.capture(),
-                    Matchers.eq(ImageRequest.UNSPECIFIED_SIZE),
-                    Matchers.eq(ImageRequest.UNSPECIFIED_SIZE));
-            assertEquals(1, options.getValue().inSampleSize);
-            assertNotNull(imageResource);
-            assertNotNull(imageResource.getBitmap());
-
-            // Make sure there's no scaling on the bitmap.
-            final int bitmapWidth = imageResource.getBitmap().getWidth();
-            final int bitmapHeight = imageResource.getBitmap().getHeight();
-            assertEquals(options.getValue().outWidth, bitmapWidth);
-            assertEquals(options.getValue().outHeight, bitmapHeight);
-        } catch (final IOException e) {
-            fail("IO exception while trying to load image resource");
-        }
-    }
-
-    public void testLoadImageWithDownsampling() {
-        final String uriString = ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
-                getContext().getPackageName() + "/" + R.drawable.ic_audio_light;
-        final Uri uri = Uri.parse(uriString);
-        final UriImageRequest imageRequest = new UriImageRequest(getContext(),
-                new UriImageRequestDescriptor(uri, DOWNSAMPLE_IMAGE_SIZE, DOWNSAMPLE_IMAGE_SIZE,
-                        false, true /* isStatic */, false /* cropToCircle */,
-                        ImageUtils.DEFAULT_CIRCLE_BACKGROUND_COLOR /* circleBackgroundColor */,
-                        ImageUtils.DEFAULT_CIRCLE_STROKE_COLOR /* circleStrokeColor */));
-        try {
-            final ImageResource imageResource = imageRequest.loadMediaBlocking(null);
-            final ArgumentCaptor<BitmapFactory.Options> options =
-                    ArgumentCaptor.forClass(BitmapFactory.Options.class);
-            Mockito.verify(spyImageUtils).calculateInSampleSize(
-                    options.capture(),
-                    Matchers.eq(DOWNSAMPLE_IMAGE_SIZE), Matchers.eq(DOWNSAMPLE_IMAGE_SIZE));
-            assertNotSame(1, options.getValue().inSampleSize);
-            assertNotNull(imageResource);
-            assertNotNull(imageResource.getBitmap());
-
-            // Make sure there's down sampling on the bitmap.
-            final int bitmapWidth = imageResource.getBitmap().getWidth();
-            final int bitmapHeight = imageResource.getBitmap().getHeight();
-            assertTrue(bitmapWidth >= DOWNSAMPLE_IMAGE_SIZE &&
-                    bitmapHeight >= DOWNSAMPLE_IMAGE_SIZE &&
-                    (bitmapWidth <= DOWNSAMPLE_IMAGE_SIZE * 4 ||
-                    bitmapHeight <= DOWNSAMPLE_IMAGE_SIZE * 4));
-        } catch (final IOException e) {
-            fail("IO exception while trying to load image resource");
-        }
-    }
-}
diff --git a/tests/src/com/android/messaging/datamodel/media/MediaResourceManagerTest.java b/tests/src/com/android/messaging/datamodel/media/MediaResourceManagerTest.java
deleted file mode 100644
index c5054ad..0000000
--- a/tests/src/com/android/messaging/datamodel/media/MediaResourceManagerTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.datamodel.media;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.MemoryCacheManager;
-import com.android.messaging.datamodel.media.MediaResourceManager.MediaResourceLoadListener;
-
-import java.util.concurrent.CountDownLatch;
-
-@SmallTest
-public class MediaResourceManagerTest extends BugleTestCase {
-    private static final int KB = 1024;
-
-    // Loaded image resource from the MediaResourceManager callback.
-    private FakeImageResource mImageResource;
-    private BindableMediaRequest<FakeImageResource> mImageRequest;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        FakeFactory.register(getTestContext())
-                .withMemoryCacheManager(new MemoryCacheManager())
-                .withMediaCacheManager(new FakeMediaCacheManager());
-    }
-
-    public void testLoadFromCache() {
-        final MediaResourceManager mediaResourceManager =
-                new MediaResourceManager();
-        MediaCacheManager.get().reclaim();
-        assertNotNull(mediaResourceManager);
-
-        // Load one image of 1KB
-        loadImage(mediaResourceManager, "image1", 1 * KB, false /* shouldBeCached */, false);
-        assertEquals("image1", mImageResource.getImageId());
-        final FakeImageResource loadedResource = mImageResource;
-
-        // Load the same image.
-        loadImage(mediaResourceManager, "image1", 1 * KB, true /* shouldBeCached */, false);
-        assertEquals(loadedResource, mImageResource);
-    }
-
-    public void testCacheEviction() {
-        final MediaResourceManager mediaResourceManager =
-                new MediaResourceManager();
-        MediaCacheManager.get().reclaim();
-        assertNotNull(mediaResourceManager);
-
-        // Load one image of 1KB
-        loadImage(mediaResourceManager, "image1", 1 * KB, false /* shouldBeCached */, false);
-        assertEquals("image1", mImageResource.getImageId());
-
-        // Load another image
-        loadImage(mediaResourceManager, "image2", 2 * KB, false /* shouldBeCached */, false);
-        assertEquals("image2", mImageResource.getImageId());
-
-        // Load another image. This should fill the cache and cause eviction of image1.
-        loadImage(mediaResourceManager, "image3", 2 * KB, false /* shouldBeCached */, false);
-        assertEquals("image3", mImageResource.getImageId());
-
-        // Load image1. It shouldn't be cached any more.
-        loadImage(mediaResourceManager, "image1", 1 * KB, false /* shouldBeCached */, false);
-        assertEquals("image1", mImageResource.getImageId());
-    }
-
-    public void testReclaimMemoryFromMediaCache() {
-        final MediaResourceManager mediaResourceManager =
-                new MediaResourceManager();
-        MediaCacheManager.get().reclaim();
-        assertNotNull(mediaResourceManager);
-
-        // Load one image of 1KB
-        loadImage(mediaResourceManager, "image1", 1 * KB, false /* shouldBeCached */, false);
-        assertEquals("image1", mImageResource.getImageId());
-
-        // Purge everything from the cache, now the image should no longer be cached.
-        MediaCacheManager.get().reclaim();
-
-        // The image resource should have no ref left.
-        assertEquals(0, mImageResource.getRefCount());
-        assertTrue(mImageResource.isClosed());
-        loadImage(mediaResourceManager, "image1", 1 * KB, false /* shouldBeCached */, false);
-        assertEquals("image1", mImageResource.getImageId());
-    }
-
-    public void testLoadInvalidImage() {
-        final MediaResourceManager mediaResourceManager =
-                new MediaResourceManager();
-        MediaCacheManager.get().reclaim();
-        assertNotNull(mediaResourceManager);
-
-        // Test the failure case with invalid resource.
-        loadImage(mediaResourceManager, FakeImageRequest.INVALID_KEY, 1 * KB, false,
-                true /* shouldFail */);
-    }
-
-    public void testLoadImageSynchronously() {
-        final MediaResourceManager mediaResourceManager =
-                new MediaResourceManager();
-        MediaCacheManager.get().reclaim();
-        assertNotNull(mediaResourceManager);
-
-        // Test a normal sync load.
-        final FakeImageRequest request = new FakeImageRequest("image1", 1 * KB);
-        final FakeImageResource resource = mediaResourceManager.requestMediaResourceSync(request);
-        assertNotNull(resource);
-        assertFalse(resource.isClosed());
-        assertNotSame(0, resource.getRefCount());
-        resource.release();
-
-        // Test a failed sync load.
-        final FakeImageRequest invalidRequest =
-                new FakeImageRequest(FakeImageRequest.INVALID_KEY, 1 * KB);
-        assertNull(mediaResourceManager.requestMediaResourceSync(invalidRequest));
-    }
-
-    private void loadImage(final MediaResourceManager manager, final String key,
-            final int size, final boolean shouldBeCached, final boolean shouldFail) {
-        try {
-            final CountDownLatch signal = new CountDownLatch(1);
-            mImageRequest = AsyncMediaRequestWrapper.createWith(new FakeImageRequest(key, size),
-                    createAssertListener(shouldBeCached, shouldFail, signal));
-            mImageRequest.bind("1");
-            manager.requestMediaResourceAsync(mImageRequest);
-
-            // Wait for the asynchronous callback before proceeding.
-            signal.await();
-        } catch (final InterruptedException e) {
-            fail("Something interrupted the signal await.");
-        }
-    }
-
-    private MediaResourceLoadListener<FakeImageResource> createAssertListener(
-            final boolean shouldBeCached, final boolean shouldFail, final CountDownLatch signal) {
-        return new MediaResourceLoadListener<FakeImageResource>() {
-            @Override
-            public void onMediaResourceLoaded(final MediaRequest<FakeImageResource> request,
-                    final FakeImageResource resource, final boolean isCached) {
-                assertEquals(mImageRequest, request);
-                assertNotNull(resource);
-                assertFalse(resource.isClosed());
-                assertNotSame(0, resource.getRefCount());
-                assertFalse(shouldFail);
-                assertEquals(shouldBeCached, resource.getCached());
-                resource.setCached(true);
-                mImageResource = resource;
-                signal.countDown();
-            }
-
-            @Override
-            public void onMediaResourceLoadError(
-                    final MediaRequest<FakeImageResource> request, final Exception exception) {
-                assertTrue(shouldFail);
-                mImageResource = null;
-                signal.countDown();
-            }};
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/ActivityInstrumentationTestCaseIntent.java b/tests/src/com/android/messaging/ui/ActivityInstrumentationTestCaseIntent.java
deleted file mode 100644
index 5ea6aa7..0000000
--- a/tests/src/com/android/messaging/ui/ActivityInstrumentationTestCaseIntent.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-
-
-/**
- * Purpose of this class is providing a workaround for https://b/14561718
- */
-public class ActivityInstrumentationTestCaseIntent extends Intent {
-    public ActivityInstrumentationTestCaseIntent(Context packageContext, Class<?> cls) {
-        super(packageContext, cls);
-    }
-    @Override
-    public Intent setComponent(ComponentName component) {
-        // Ignore the ComponentName set, as the one ActivityUnitTest does is wrong (and actually
-        // unnecessary).
-        return this;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/messaging/ui/BugleActivityInstrumentationTestCase.java b/tests/src/com/android/messaging/ui/BugleActivityInstrumentationTestCase.java
deleted file mode 100644
index 60cddff..0000000
--- a/tests/src/com/android/messaging/ui/BugleActivityInstrumentationTestCase.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Activity;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.TestUtil;
-
-/**
- * Helper class that extends ActivityInstrumentationTestCase2 to provide some extra common
- * initialization (eg. Mockito boilerplate).
- */
-public class BugleActivityInstrumentationTestCase<T extends Activity>
-    extends android.test.ActivityInstrumentationTestCase2<T> {
-
-    static {
-        // Set flag during loading of test cases to prevent application initialization starting
-        BugleTestCase.setTestsRunning();
-    }
-
-    public BugleActivityInstrumentationTestCase(final Class<T> activityClass) {
-        super(activityClass);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-      super.setUp();
-      setActivityInitialTouchMode(false);
-      TestUtil.testSetup(getInstrumentation().getTargetContext(), this);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        TestUtil.testTeardown(this);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/messaging/ui/BugleActivityTest.java b/tests/src/com/android/messaging/ui/BugleActivityTest.java
deleted file mode 100644
index 05e32fa..0000000
--- a/tests/src/com/android/messaging/ui/BugleActivityTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.DataModel;
-
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-public abstract class BugleActivityTest extends BugleActivityUnitTestCase<BugleActionBarActivity> {
-    @Mock protected DataModel mDataModel;
-
-    public BugleActivityTest() {
-        super(BugleActionBarActivity.class);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        // Create activity
-        final ActivityInstrumentationTestCaseIntent intent =
-                new ActivityInstrumentationTestCaseIntent(getInstrumentation().getTargetContext(),
-                TestActivity.class);
-        startActivity(intent, null, null);
-
-        FakeFactory.register(getInstrumentation().getTargetContext())
-            .withDataModel(mDataModel);
-    }
-
-    public void testOnResumeDataModelCallback() {
-        getInstrumentation().callActivityOnStart(getActivity());
-        getInstrumentation().callActivityOnResume(getActivity());
-        Mockito.verify(mDataModel).onActivityResume();
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/BugleActivityUnitTestCase.java b/tests/src/com/android/messaging/ui/BugleActivityUnitTestCase.java
deleted file mode 100644
index dcbd785..0000000
--- a/tests/src/com/android/messaging/ui/BugleActivityUnitTestCase.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Activity;
-import android.view.ContextThemeWrapper;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.R;
-import com.android.messaging.TestUtil;
-
-/**
- * Base class for activity unit test cases, provides boilerplate setup/teardown.
- */
-public abstract class BugleActivityUnitTestCase<T extends Activity> extends
-    android.test.ActivityUnitTestCase<T> {
-
-    static {
-        // Set flag during loading of test cases to prevent application initialization starting
-        BugleTestCase.setTestsRunning();
-    }
-
-    public BugleActivityUnitTestCase(final Class<T> activityClass) {
-        super(activityClass);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        TestUtil.testSetup(getInstrumentation().getTargetContext(), this);
-
-        setActivityContext(new ContextThemeWrapper(getInstrumentation().getTargetContext(),
-                R.style.Theme_AppCompat_Light_DarkActionBar));
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        TestUtil.testTeardown(this);
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/CustomHeaderViewPagerTest.java b/tests/src/com/android/messaging/ui/CustomHeaderViewPagerTest.java
deleted file mode 100644
index 373fb41..0000000
--- a/tests/src/com/android/messaging/ui/CustomHeaderViewPagerTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import androidx.viewpager.widget.ViewPager;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.SimpleCursorAdapter;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-
-public class CustomHeaderViewPagerTest extends ViewTest<CustomHeaderViewPager> {
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        FakeFactory.register(getInstrumentation().getTargetContext());
-    }
-
-    public void testBindFirstLevel() {
-        final CustomHeaderViewPager view = new CustomHeaderViewPager(getActivity(), null);
-        final SimpleCursorAdapter adapter =
-                new SimpleCursorAdapter(getActivity(), 0, null, null, null, 0);
-        final CustomHeaderPagerViewHolder[] viewHolders = {
-                new FakeListViewHolder(getActivity(), adapter),
-                new FakeListViewHolder(getActivity(), adapter)
-        };
-
-        view.setViewHolders(viewHolders);
-        final ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
-        final ViewGroup tabStrip = (ViewGroup) view.findViewById(R.id.tab_strip);
-        final ViewPagerTabStrip realTab = (ViewPagerTabStrip) tabStrip.getChildAt(0);
-
-        assertEquals(2, realTab.getChildCount());
-        View headerTitleButton = realTab.getChildAt(1);
-        // Click on the first page. Now the view pager should switch to that page accordingly.
-        clickButton(headerTitleButton);
-        assertEquals(1, pager.getCurrentItem());
-    }
-
-    @Override
-    protected int getLayoutIdForView() {
-        // All set up should be done by creating a CustomHeaderViewPager which handles inflating
-        // the layout
-        return 0;
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/FakeListViewHolder.java b/tests/src/com/android/messaging/ui/FakeListViewHolder.java
deleted file mode 100644
index d4de885..0000000
--- a/tests/src/com/android/messaging/ui/FakeListViewHolder.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.content.Context;
-import android.widget.CursorAdapter;
-
-import com.android.messaging.R;
-
-/**
- * A fake {@link CustomHeaderPagerListViewHolder} for CustomHeaderViewPager tests only.
- */
-public class FakeListViewHolder extends CustomHeaderPagerListViewHolder {
-    public FakeListViewHolder(final Context context, final CursorAdapter adapter) {
-        super(context, adapter);
-    }
-
-    @Override
-    protected int getLayoutResId() {
-        return 0;
-    }
-
-    @Override
-    protected int getPageTitleResId() {
-        return android.R.string.untitled;
-    }
-
-    @Override
-    protected int getEmptyViewResId() {
-        return R.id.empty_view;
-    }
-
-    @Override
-    protected int getListViewResId() {
-        return android.R.id.list;
-    }
-
-    @Override
-    protected int getEmptyViewTitleResId() {
-        return R.string.contact_list_empty_text;
-    }
-
-    @Override
-    protected int getEmptyViewImageResId() {
-        return R.drawable.ic_oobe_freq_list;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/messaging/ui/FragmentTestCase.java b/tests/src/com/android/messaging/ui/FragmentTestCase.java
deleted file mode 100644
index eb65dc6..0000000
--- a/tests/src/com/android/messaging/ui/FragmentTestCase.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.app.Fragment;
-import android.app.FragmentManager;
-import android.content.res.Configuration;
-import android.view.View;
-
-/**
- * Helper class that extends Bugle.ui.ActivityInstrumentationTestCase to provide common behavior
- * across fragment tests.
- */
-public abstract class FragmentTestCase<T extends Fragment>
-    extends BugleActivityInstrumentationTestCase<TestActivity> {
-
-    protected T mFragment;
-    protected Class<T> mFragmentClass;
-
-    public FragmentTestCase(final Class<T> fragmentClass) {
-        super(TestActivity.class);
-        mFragmentClass = fragmentClass;
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-      super.setUp();
-    }
-
-    protected T getFragment() {
-        // Fragment creation deferred (typically until test time) so that factory/appcontext is
-        // ready.
-        if (mFragment == null) {
-            try {
-                mFragment = mFragmentClass.newInstance();
-            } catch (final InstantiationException e) {
-                throw new IllegalStateException("Failed to instantiate fragment");
-            } catch (final IllegalAccessException e) {
-                throw new IllegalStateException("Failed to instantiate fragment");
-            }
-        }
-
-        return mFragment;
-    }
-
-    protected void attachFragment() {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                final FragmentManager fragmentManager = getActivity().getFragmentManager();
-                fragmentManager.beginTransaction().add(mFragment, null /* tag */).commit();
-            }
-        });
-
-        getInstrumentation().waitForIdleSync();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        // In landscape mode, sleep for a second first.
-        // The reason is: our UI tests don't wait for the UI thread to finish settling down
-        // before exiting (because they can't know when the UI thread is done). In portrait mode,
-        // things generally work fine here -- the UI thread is done by the time the test is done.
-        // In landscape mode, though, since the launcher is in portrait mode, there is a lot of
-        // extra work that happens in our UI when the app launches into landscape mode, and the
-        // UI is often not done by the time the test finishes running. So then our teardown
-        // nulls out the Factory, and then the UI keeps running and derefs the null factory,
-        // and things blow up.
-        // So ... as a cheap hack, sleep for one second before finishing the teardown of UI
-        // tests, but only do it in landscape mode (so that developers running it in portrait
-        // mode can still run the tests faster).
-        if (this.getInstrumentation().getTargetContext().getResources().
-                getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
-            try {
-                Thread.sleep(1000);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-        }
-        super.tearDown();
-    }
-
-    protected void clickButton(final View view) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                view.performClick();
-            }
-        });
-        getInstrumentation().waitForIdleSync();
-    }
-
-    protected void setFocus(final View view, final boolean focused) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (focused) {
-                    view.requestFocus();
-                } else {
-                    view.clearFocus();
-                }
-            }
-        });
-        getInstrumentation().waitForIdleSync();
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/messaging/ui/MultiAttachmentLayoutTest.java b/tests/src/com/android/messaging/ui/MultiAttachmentLayoutTest.java
deleted file mode 100644
index db3ff3a..0000000
--- a/tests/src/com/android/messaging/ui/MultiAttachmentLayoutTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-
-import android.content.Context;
-import android.net.Uri;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import androidx.test.filters.MediumTest;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.datamodel.data.MessagePartData;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-@MediumTest
-public class MultiAttachmentLayoutTest extends ViewTest<MultiAttachmentLayout> {
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        final Context context = getInstrumentation().getTargetContext();
-        FakeFactory.register(context);
-    }
-
-    @Override
-    protected MultiAttachmentLayout getView() {
-        if (mView == null) {
-            // View creation deferred (typically until test time) so that factory/appcontext is
-            // ready.
-            mView = new MultiAttachmentLayout(getActivity(), null);
-            mView.setLayoutParams(new ViewGroup.LayoutParams(100, 100));
-        }
-        return mView;
-    }
-
-    protected void verifyContent(
-            final MultiAttachmentLayout view,
-            final int imageCount,
-            final int plusCount) {
-        final int count = view.getChildCount();
-        int actualImageCount = 0;
-        final boolean needPlusText = plusCount > 0;
-        boolean hasPlusText = false;
-        for (int i = 0; i < count; i++) {
-            final View child = view.getChildAt(i);
-            if (child instanceof AsyncImageView) {
-                actualImageCount++;
-            } else if (child instanceof TextView) {
-                assertTrue(plusCount > 0);
-                assertTrue(((TextView) child).getText().toString().contains("" + plusCount));
-                hasPlusText = true;
-            } else {
-                // Nothing other than image and overflow text view should appear in this layout.
-                fail("unexpected view in layout. view = " + child);
-            }
-        }
-        assertEquals(imageCount, actualImageCount);
-        assertEquals(needPlusText, hasPlusText);
-    }
-
-    public void testBindTwoAttachments() {
-        final MultiAttachmentLayout view = getView();
-        final MessagePartData testAttachment1 = MessagePartData.createMediaMessagePart(
-                "image/jpeg", Uri.parse("content://uri1"), 100, 100);
-        final MessagePartData testAttachment2 = MessagePartData.createMediaMessagePart(
-                "image/jpeg", Uri.parse("content://uri2"), 100, 100);
-
-        view.bindAttachments(createAttachmentList(testAttachment1, testAttachment2),
-                null /* transitionRect */, 2);
-        verifyContent(view, 2, 0);
-    }
-
-    public void testBindFiveAttachments() {
-        final MultiAttachmentLayout view = getView();
-        final MessagePartData testAttachment1 = MessagePartData.createMediaMessagePart(
-                "image/jpeg", Uri.parse("content://uri1"), 100, 100);
-        final MessagePartData testAttachment2 = MessagePartData.createMediaMessagePart(
-                "image/jpeg", Uri.parse("content://uri2"), 100, 100);
-        final MessagePartData testAttachment3 = MessagePartData.createMediaMessagePart(
-                "image/jpeg", Uri.parse("content://uri3"), 100, 100);
-        final MessagePartData testAttachment4 = MessagePartData.createMediaMessagePart(
-                "image/jpeg", Uri.parse("content://uri4"), 100, 100);
-        final MessagePartData testAttachment5 = MessagePartData.createMediaMessagePart(
-                "image/jpeg", Uri.parse("content://uri5"), 100, 100);
-
-        view.bindAttachments(createAttachmentList(testAttachment1, testAttachment2, testAttachment3,
-                testAttachment4, testAttachment5), null /* transitionRect */, 5);
-        verifyContent(view, 4, 1);
-    }
-
-    public void testBindTwice() {
-        // Put the above two tests together so we can simulate binding twice.
-        testBindTwoAttachments();
-        testBindFiveAttachments();
-    }
-
-    private Iterable<MessagePartData> createAttachmentList(final MessagePartData... attachments) {
-        return Collections.unmodifiableList(Arrays.asList(attachments));
-    }
-
-    @Override
-    protected int getLayoutIdForView() {
-        return 0;   // We construct the view with getView().
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/messaging/ui/ViewTest.java b/tests/src/com/android/messaging/ui/ViewTest.java
deleted file mode 100644
index c4e8431..0000000
--- a/tests/src/com/android/messaging/ui/ViewTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui;
-
-import android.view.View;
-
-
-/**
- * Base class for view tests. Derived class just has to provide a layout id. Tests can then just
- * call getView() to get a created view and test its behavior.
- */
-public abstract class ViewTest<T extends View> extends BugleActivityUnitTestCase<TestActivity> {
-    public ViewTest() {
-        super(TestActivity.class);
-    }
-
-    protected T mView;
-
-    @SuppressWarnings("unchecked")
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        // Create activity
-        final ActivityInstrumentationTestCaseIntent intent =
-                new ActivityInstrumentationTestCaseIntent(getInstrumentation().getTargetContext(),
-                TestActivity.class);
-        startActivity(intent, null, null);
-    }
-
-    @SuppressWarnings("unchecked")
-    protected T getView() {
-        if (mView == null) {
-            // View creation deferred (typically until test time) so that factory/appcontext is
-            // ready.
-            mView = (T) getActivity().getLayoutInflater().inflate(getLayoutIdForView(), null);
-        }
-        return mView;
-    }
-
-    protected void clickButton(final View view) {
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                view.performClick();
-            }
-        });
-        getInstrumentation().waitForIdleSync();
-    }
-
-    protected abstract int getLayoutIdForView();
-}
diff --git a/tests/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragmentTest.java b/tests/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragmentTest.java
deleted file mode 100644
index d723a40..0000000
--- a/tests/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragmentTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.attachmentchooser;
-
-import android.app.Fragment;
-import android.widget.CheckBox;
-
-import androidx.test.filters.LargeTest;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.ui.FragmentTestCase;
-import com.android.messaging.ui.TestActivity.FragmentEventListener;
-import com.android.messaging.ui.attachmentchooser.AttachmentChooserFragment.AttachmentChooserFragmentHost;
-import com.android.messaging.ui.conversationlist.ConversationListFragment;
-
-import org.mockito.ArgumentMatcher;
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Unit tests for {@link ConversationListFragment}.
- */
-@LargeTest
-public class AttachmentChooserFragmentTest extends FragmentTestCase<AttachmentChooserFragment> {
-
-    @Mock protected DataModel mockDataModel;
-    @Mock protected DraftMessageData mockDraftMessageData;
-    @Mock protected AttachmentChooserFragmentHost mockHost;
-
-    private static final String CONVERSATION_ID = "cid";
-
-    /** A custom argument matcher that checks whether the set argument passed in is a set
-     * with identical attachment data as the given set.
-     */
-    private class IsSetOfGivenAttachments implements ArgumentMatcher<Set<MessagePartData>> {
-        private final Set<MessagePartData> mGivenParts;
-        public IsSetOfGivenAttachments(final Set<MessagePartData> givenParts) {
-            mGivenParts = givenParts;
-        }
-
-        @Override
-        public boolean matches(final Set<MessagePartData> actualSet) {
-            if (actualSet.size() != mGivenParts.size()) {
-                return false;
-            }
-            return mGivenParts.containsAll(actualSet) && actualSet.containsAll(mGivenParts);
-        }
-     }
-
-    public AttachmentChooserFragmentTest() {
-        super(AttachmentChooserFragment.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        FakeFactory.register(this.getInstrumentation().getTargetContext())
-            .withDataModel(mockDataModel);
-    }
-
-    private void loadWith(final List<MessagePartData> attachments) {
-        Mockito.when(mockDraftMessageData.isBound(Matchers.anyString()))
-            .thenReturn(true);
-        Mockito.doReturn(mockDraftMessageData)
-            .when(mockDataModel)
-            .createDraftMessageData(Mockito.anyString());
-        Mockito.doReturn(attachments)
-            .when(mockDraftMessageData)
-            .getReadOnlyAttachments();
-        Mockito.when(mockDataModel.createDraftMessageData(
-                Matchers.anyString()))
-            .thenReturn(mockDraftMessageData);
-
-        // Create fragment synchronously to avoid need for volatile, synchronization etc.
-        final AttachmentChooserFragment fragment = getFragment();
-        // Binding to model happens when attaching fragment to activity, so hook into test
-        // activity to do so.
-        getActivity().setFragmentEventListener(new FragmentEventListener() {
-            @Override
-            public void onAttachFragment(final Fragment attachedFragment) {
-                if (fragment == attachedFragment) {
-                    fragment.setConversationId(CONVERSATION_ID);
-                }
-            }
-        });
-
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                fragment.setHost(mockHost);
-                getActivity().setFragment(fragment);
-                Mockito.verify(mockDataModel).createDraftMessageData(
-                        Mockito.matches(CONVERSATION_ID));
-                Mockito.verify(mockDraftMessageData).loadFromStorage(
-                        Matchers.eq(fragment.mBinding), Matchers.eq((MessageData) null),
-                        Matchers.eq(false));
-            }
-        });
-        // Now load the cursor
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                fragment.onDraftChanged(mockDraftMessageData, DraftMessageData.ALL_CHANGED);
-            }
-        });
-        getInstrumentation().waitForIdleSync();
-    }
-
-    public void testUnselect() {
-        final List<MessagePartData> attachments = TestDataFactory.getTestDraftAttachments();
-        loadWith(attachments);
-        final AttachmentGridView attachmentGridView = (AttachmentGridView)
-                getFragment().getView().findViewById(R.id.grid);
-        assertEquals("bad view count", attachments.size(),
-                attachmentGridView.getAdapter().getCount());
-
-        final AttachmentGridItemView itemView = (AttachmentGridItemView)
-                attachmentGridView.getChildAt(0);
-        assertEquals(attachmentGridView, itemView.testGetHostInterface());
-        final CheckBox checkBox = (CheckBox) itemView.findViewById(R.id.checkbox);
-        assertEquals(true, checkBox.isChecked());
-        assertEquals(true, attachmentGridView.isItemSelected(itemView.mAttachmentData));
-        clickButton(checkBox);
-        assertEquals(false, checkBox.isChecked());
-        assertEquals(false, attachmentGridView.isItemSelected(itemView.mAttachmentData));
-
-        final AttachmentGridItemView itemView2 = (AttachmentGridItemView)
-                attachmentGridView.getChildAt(1);
-        final CheckBox checkBox2 = (CheckBox) itemView2.findViewById(R.id.checkbox);
-        clickButton(checkBox2);
-
-        getFragment().confirmSelection();
-        final MessagePartData[] attachmentsToRemove = new MessagePartData[] {
-                itemView.mAttachmentData, itemView2.mAttachmentData };
-        Mockito.verify(mockDraftMessageData).removeExistingAttachments(Matchers.argThat(
-                new IsSetOfGivenAttachments(new HashSet<>(Arrays.asList(attachmentsToRemove)))));
-        Mockito.verify(mockDraftMessageData).saveToStorage(Matchers.eq(getFragment().mBinding));
-        Mockito.verify(mockHost).onConfirmSelection();
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/contact/ContactListItemViewTest.java b/tests/src/com/android/messaging/ui/contact/ContactListItemViewTest.java
deleted file mode 100644
index de4c583..0000000
--- a/tests/src/com/android/messaging/ui/contact/ContactListItemViewTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.content.Context;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Contacts;
-import android.view.View;
-import android.widget.TextView;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.FakeCursor;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.data.ContactListItemData;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.ui.ContactIconView;
-import com.android.messaging.ui.ViewTest;
-
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-public class ContactListItemViewTest extends ViewTest<ContactListItemView> {
-
-    @Mock ContactListItemView.HostInterface mockHost;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        final Context context = getInstrumentation().getTargetContext();
-        FakeFactory.register(context)
-            .withDataModel(new FakeDataModel(context));
-    }
-
-    protected void verifyAddedContactForData(final ContactListItemData data,
-            final ContactListItemView view) {
-        Mockito.verify(mockHost).onContactListItemClicked(data, view);
-    }
-
-    protected void verifyContent(
-            final ContactListItemView view,
-            final String contactName,
-            final String contactDetail,
-            final String avatarUrl,
-            final boolean showAvatar) {
-        final TextView contactNameView = (TextView) view.findViewById(R.id.contact_name);
-        final TextView contactDetailView = (TextView) view.findViewById(R.id.contact_details);
-        final ContactIconView avatarView = (ContactIconView) view.findViewById(R.id.contact_icon);
-
-        assertNotNull(contactNameView);
-        assertEquals(contactName, contactNameView.getText());
-        assertNotNull(contactDetail);
-        assertEquals(contactDetail, contactDetailView.getText());
-        assertNotNull(avatarView);
-        if (showAvatar) {
-            assertTrue(avatarView.mImageRequestBinding.isBound());
-            assertEquals(View.VISIBLE, avatarView.getVisibility());
-        } else {
-            assertFalse(avatarView.mImageRequestBinding.isBound());
-            assertEquals(View.INVISIBLE, avatarView.getVisibility());
-        }
-    }
-
-    public void testBindFirstLevel() {
-        final ContactListItemView view = getView();
-        final FakeCursor cursor = TestDataFactory.getAllContactListCursor();
-        final int row = TestDataFactory.CONTACT_LIST_CURSOR_FIRST_LEVEL_CONTACT_INDEX;
-        cursor.moveToPosition(row);
-        view.bind(cursor, mockHost, false, null);
-        verifyContent(view, (String) cursor.getAt(Contacts.DISPLAY_NAME, row),
-                (String) cursor.getAt(Phone.NUMBER, row),
-                (String) cursor.getAt(Contacts.PHOTO_THUMBNAIL_URI, row), true);
-    }
-
-    public void testBindSecondLevel() {
-        final ContactListItemView view = getView();
-        final FakeCursor cursor = TestDataFactory.getAllContactListCursor();
-        final int row = TestDataFactory.CONTACT_LIST_CURSOR_SECOND_LEVEL_CONTACT_INDEX;
-        cursor.moveToPosition(row);
-        view.bind(cursor, mockHost, false, null);
-        verifyContent(view, (String) cursor.getAt(Contacts.DISPLAY_NAME, row),
-                (String) cursor.getAt(Phone.NUMBER, row),
-                (String) cursor.getAt(Contacts.PHOTO_THUMBNAIL_URI, row), false);
-    }
-
-    public void testClickAddedContact() {
-        final ContactListItemView view = getView();
-        final FakeCursor cursor = TestDataFactory.getAllContactListCursor();
-        cursor.moveToFirst();
-
-        view.bind(cursor, mockHost, false, null);
-        view.performClick();
-        verifyAddedContactForData(view.mData, view);
-    }
-
-    public void testBindTwice() {
-        final ContactListItemView view = getView();
-        final FakeCursor cursor = TestDataFactory.getAllContactListCursor();
-
-        cursor.moveToFirst();
-        view.bind(cursor, mockHost, false, null);
-
-        cursor.moveToNext();
-        view.bind(cursor, mockHost, false, null);
-        verifyContent(view, (String) cursor.getAt(Contacts.DISPLAY_NAME, 1),
-                (String) cursor.getAt(Phone.NUMBER, 1),
-                (String) cursor.getAt(Contacts.PHOTO_THUMBNAIL_URI, 1), true);
-    }
-
-    @Override
-    protected int getLayoutIdForView() {
-        return R.layout.contact_list_item_view;
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/contact/ContactPickerFragmentTest.java b/tests/src/com/android/messaging/ui/contact/ContactPickerFragmentTest.java
deleted file mode 100644
index 4983cd3..0000000
--- a/tests/src/com/android/messaging/ui/contact/ContactPickerFragmentTest.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.contact;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.view.View;
-import android.widget.ListView;
-
-import androidx.test.filters.LargeTest;
-import androidx.viewpager.widget.ViewPager;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.action.ActionTestHelpers;
-import com.android.messaging.datamodel.action.ActionTestHelpers.StubActionService;
-import com.android.messaging.datamodel.action.GetOrCreateConversationAction;
-import com.android.messaging.datamodel.data.ContactPickerData;
-import com.android.messaging.datamodel.data.ParticipantData;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.ui.CustomHeaderViewPagerAdapter;
-import com.android.messaging.ui.FragmentTestCase;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.contact.ContactPickerFragment.ContactPickerFragmentHost;
-
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-import java.util.List;
-
-/**
- * Unit tests for {@link ContactPickerFragment}.
- */
-@LargeTest
-public class ContactPickerFragmentTest
-    extends FragmentTestCase<ContactPickerFragment> {
-
-    @Mock protected ContactPickerData mMockContactPickerData;
-    @Mock protected UIIntents mMockUIIntents;
-    @Mock protected ContactPickerFragmentHost mockHost;
-    protected FakeDataModel mFakeDataModel;
-    private ActionTestHelpers.StubActionService mService;
-
-    public ContactPickerFragmentTest() {
-        super(ContactPickerFragment.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        final Context context = getInstrumentation().getTargetContext();
-        mService = new StubActionService();
-        mFakeDataModel = new FakeDataModel(context)
-            .withContactPickerData(mMockContactPickerData)
-            .withActionService(mService);
-        FakeFactory.register(context)
-                .withDataModel(mFakeDataModel)
-                .withUIIntents(mMockUIIntents);
-    }
-
-    /**
-     * Helper method to initialize the ContactPickerFragment and its data.
-     */
-    private ContactPickerFragmentTest initFragment(final int initialMode) {
-        Mockito.when(mMockContactPickerData.isBound(Matchers.anyString()))
-            .thenReturn(true);
-
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                final ContactPickerFragment fragment = getFragment();
-                fragment.setHost(mockHost);
-                fragment.setContactPickingMode(initialMode, false);
-
-                getActivity().setFragment(fragment);
-                Mockito.verify(mMockContactPickerData).init(fragment.getLoaderManager(),
-                        fragment.mBinding);
-            }
-        });
-        getInstrumentation().waitForIdleSync();
-        return this;
-    }
-
-    /**
-     * Bind the datamodel with all contacts cursor to populate the all contacts list in the
-     * fragment.
-     */
-    private ContactPickerFragmentTest loadWithAllContactsCursor(final Cursor cursor) {
-        Mockito.when(mMockContactPickerData.isBound(Matchers.anyString()))
-            .thenReturn(true);
-
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                getFragment().onAllContactsCursorUpdated(cursor);
-            }
-        });
-        getInstrumentation().waitForIdleSync();
-        return this;
-    }
-
-    /**
-     * Bind the datamodel with frequent contacts cursor to populate the contacts list in the
-     * fragment.
-     */
-    private ContactPickerFragmentTest loadWithFrequentContactsCursor(final Cursor cursor) {
-        Mockito.when(mMockContactPickerData.isBound(Matchers.anyString()))
-            .thenReturn(true);
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                getFragment().onFrequentContactsCursorUpdated(cursor);
-            }
-        });
-        getInstrumentation().waitForIdleSync();
-        return this;
-    }
-
-    /**
-     * Test the initial state of the fragment before loading data.
-     */
-    public void testInitialState() {
-        initFragment(ContactPickerFragment.MODE_PICK_INITIAL_CONTACT);
-
-        // Make sure that the frequent contacts view is shown by default.
-        final ViewPager pager = (ViewPager) getFragment().getView().findViewById(R.id.pager);
-        final View currentPagedView = pager.getChildAt(pager.getCurrentItem());
-        final View frequentContactsView = ((CustomHeaderViewPagerAdapter) pager.getAdapter())
-                .getViewHolder(0).getView(null);
-        assertEquals(frequentContactsView, currentPagedView);
-    }
-
-    /**
-     * Verifies that list view gets correctly populated given a cursor.
-     */
-    public void testLoadAllContactsList() {
-        final Cursor cursor = TestDataFactory.getAllContactListCursor();
-        initFragment(ContactPickerFragment.MODE_PICK_INITIAL_CONTACT)
-                .loadWithAllContactsCursor(cursor);
-        final ListView listView = (ListView) getFragment().getView()
-                .findViewById(R.id.all_contacts_list);
-        assertEquals(cursor.getCount(), listView.getCount());
-    }
-
-    /**
-     * Verifies that list view gets correctly populated given a cursor.
-     */
-    public void testLoadFrequentContactsList() {
-        final Cursor cursor = TestDataFactory.getFrequentContactListCursor();
-        initFragment(ContactPickerFragment.MODE_PICK_INITIAL_CONTACT)
-                .loadWithFrequentContactsCursor(cursor);
-        final ListView listView = (ListView) getFragment().getView()
-                .findViewById(R.id.frequent_contacts_list);
-        assertEquals(cursor.getCount(), listView.getCount());
-    }
-
-    public void testPickInitialContact() {
-        final Cursor cursor = TestDataFactory.getFrequentContactListCursor();
-        initFragment(ContactPickerFragment.MODE_PICK_INITIAL_CONTACT)
-                .loadWithFrequentContactsCursor(cursor);
-        final ListView listView = (ListView) getFragment().getView()
-                .findViewById(R.id.frequent_contacts_list);
-        // Click on the first contact to add it.
-        final ContactListItemView cliv = (ContactListItemView) listView.getChildAt(0);
-        clickButton(cliv);
-        final ContactRecipientAutoCompleteView chipsView = (ContactRecipientAutoCompleteView)
-                getFragment().getView()
-                .findViewById(R.id.recipient_text_view);
-        // Verify the contact is added to the chips view.
-        final List<ParticipantData> participants =
-                chipsView.getRecipientParticipantDataForConversationCreation();
-        assertEquals(1, participants.size());
-        assertEquals(cliv.mData.getDestination(), participants.get(0).getSendDestination());
-        assertTrue(mService.getCalls().get(0).action instanceof GetOrCreateConversationAction);
-    }
-
-    public void testLeaveChipsMode() {
-        final Cursor cursor = TestDataFactory.getFrequentContactListCursor();
-        initFragment(ContactPickerFragment.MODE_CHIPS_ONLY)
-                .loadWithFrequentContactsCursor(cursor);
-        // Click on the add more participants button
-        // TODO: Figure out a way to click on the add more participants button now that
-        // it's part of the menu.
-        // final ImageButton AddMoreParticipantsButton = (ImageButton) getFragment().getView()
-        //         .findViewById(R.id.add_more_participants_button);
-        // clickButton(AddMoreParticipantsButton);
-        // Mockito.verify(mockHost).onInitiateAddMoreParticipants();
-    }
-
-    public void testPickMoreContacts() {
-        final Cursor cursor = TestDataFactory.getFrequentContactListCursor();
-        initFragment(ContactPickerFragment.MODE_PICK_MORE_CONTACTS)
-                .loadWithFrequentContactsCursor(cursor);
-        final ListView listView = (ListView) getFragment().getView()
-                .findViewById(R.id.frequent_contacts_list);
-        // Click on the first contact to add it.
-        final ContactListItemView cliv = (ContactListItemView) listView.getChildAt(0);
-        clickButton(cliv);
-        // Verify that we don't attempt to create a conversation right away.
-        assertEquals(0, mService.getCalls().size());
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/conversation/ComposeMessageViewTest.java b/tests/src/com/android/messaging/ui/conversation/ComposeMessageViewTest.java
deleted file mode 100644
index 9d55b6e..0000000
--- a/tests/src/com/android/messaging/ui/conversation/ComposeMessageViewTest.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.isNull;
-
-import android.content.Context;
-import android.media.MediaPlayer;
-import android.view.View;
-import android.widget.EditText;
-
-import androidx.test.filters.MediumTest;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.ConversationData;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.DraftMessageData.CheckDraftForSendTask;
-import com.android.messaging.datamodel.data.DraftMessageData.CheckDraftTaskCallback;
-import com.android.messaging.datamodel.data.MessageData;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.ui.ViewTest;
-import com.android.messaging.ui.conversation.ComposeMessageView.IComposeMessageViewHost;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.FakeMediaUtil;
-import com.android.messaging.util.ImeUtil;
-
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
-import java.util.ArrayList;
-import java.util.Collections;
-
-@MediumTest
-public class ComposeMessageViewTest extends ViewTest<ComposeMessageView> {
-    private Context mContext;
-
-    @Mock protected DataModel mockDataModel;
-    @Mock protected DraftMessageData mockDraftMessageData;
-    @Mock protected BugleGservices mockBugleGservices;
-    @Mock protected ImeUtil mockImeUtil;
-    @Mock protected IComposeMessageViewHost mockIComposeMessageViewHost;
-    @Mock protected MediaPlayer mockMediaPlayer;
-    @Mock protected ConversationInputManager mockInputManager;
-    @Mock protected ConversationData mockConversationData;
-
-    Binding<ConversationData> mConversationBinding;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mContext = getInstrumentation().getTargetContext();
-        FakeFactory.register(mContext)
-                .withDataModel(mockDataModel)
-                .withBugleGservices(mockBugleGservices)
-                .withMediaUtil(new FakeMediaUtil(mockMediaPlayer));
-
-        Mockito.doReturn(true).when(mockConversationData).isBound(Mockito.anyString());
-        mConversationBinding = BindingBase.createBinding(this);
-        mConversationBinding.bind(mockConversationData);
-    }
-
-    @Override
-    protected ComposeMessageView getView() {
-        final ComposeMessageView view = super.getView();
-        view.setInputManager(mockInputManager);
-        view.setConversationDataModel(BindingBase.createBindingReference(mConversationBinding));
-        return view;
-    }
-
-    @Override
-    protected int getLayoutIdForView() {
-        return R.layout.compose_message_view;
-    }
-
-    public void testSend() {
-        Mockito.when(mockDraftMessageData.getReadOnlyAttachments())
-                .thenReturn(Collections.unmodifiableList(new ArrayList<MessagePartData>()));
-        Mockito.when(mockDraftMessageData.getIsDefaultSmsApp()).thenReturn(true);
-        Mockito.when(mockIComposeMessageViewHost.isReadyForAction()).thenReturn(true);
-        final ComposeMessageView view = getView();
-
-        final MessageData message = MessageData.createDraftSmsMessage("fake_id", "just_a_self_id",
-                "Sample Message");
-
-        Mockito.when(mockDraftMessageData.isBound(Matchers.anyString()))
-                .thenReturn(true);
-        Mockito.when(mockDraftMessageData.getMessageText()).thenReturn(message.getMessageText());
-        Mockito.when(mockDraftMessageData.prepareMessageForSending(
-                Matchers.<BindingBase<DraftMessageData>>any()))
-                .thenReturn(message);
-        Mockito.when(mockDraftMessageData.hasPendingAttachments()).thenReturn(false);
-        Mockito.doAnswer(new Answer() {
-            @Override
-            public Object answer(InvocationOnMock invocation) throws Throwable {
-                // Synchronously pass the draft check and callback.
-                ((CheckDraftTaskCallback)invocation.getArguments()[2]).onDraftChecked(
-                        mockDraftMessageData, CheckDraftForSendTask.RESULT_PASSED);
-                return null;
-            }
-        }).when(mockDraftMessageData).checkDraftForAction(Mockito.anyBoolean(), Mockito.anyInt(),
-                Mockito.<CheckDraftTaskCallback>any(),
-                Mockito.<Binding<DraftMessageData>>any());
-
-        view.bind(mockDraftMessageData, mockIComposeMessageViewHost);
-
-        final EditText composeEditText = (EditText) view.findViewById(R.id.compose_message_text);
-        final View sendButton = view.findViewById(R.id.send_message_button);
-
-        view.requestDraftMessage(false);
-
-        Mockito.verify(mockDraftMessageData).loadFromStorage(any(BindingBase.class),
-                isNull(), Mockito.eq(false));
-
-        view.onDraftChanged(mockDraftMessageData, DraftMessageData.ALL_CHANGED);
-
-        assertEquals(message.getMessageText(), composeEditText.getText().toString());
-
-        sendButton.performClick();
-        Mockito.verify(mockIComposeMessageViewHost).sendMessage(
-                Mockito.argThat(o -> {
-                    assertEquals(message.getMessageText(), o.getMessageText());
-                    return true;
-                }));
-    }
-
-    public void testNotDefaultSms() {
-        Mockito.when(mockDraftMessageData.getReadOnlyAttachments())
-                .thenReturn(Collections.unmodifiableList(new ArrayList<MessagePartData>()));
-        Mockito.when(mockDraftMessageData.getIsDefaultSmsApp()).thenReturn(false);
-        Mockito.when(mockIComposeMessageViewHost.isReadyForAction()).thenReturn(false);
-        final ComposeMessageView view = getView();
-
-        final MessageData message = MessageData.createDraftSmsMessage("fake_id", "just_a_self_id",
-                "Sample Message");
-
-        Mockito.when(mockDraftMessageData.isBound(Matchers.anyString()))
-                .thenReturn(true);
-        Mockito.when(mockDraftMessageData.getMessageText()).thenReturn(message.getMessageText());
-        Mockito.when(mockDraftMessageData.prepareMessageForSending(
-                Matchers.<BindingBase<DraftMessageData>>any()))
-                .thenReturn(message);
-        Mockito.when(mockDraftMessageData.hasPendingAttachments()).thenReturn(false);
-
-        view.bind(mockDraftMessageData, mockIComposeMessageViewHost);
-
-        final EditText composeEditText = (EditText) view.findViewById(R.id.compose_message_text);
-        final View sendButton = view.findViewById(R.id.send_message_button);
-
-        view.requestDraftMessage(false);
-
-        Mockito.verify(mockDraftMessageData).loadFromStorage(any(BindingBase.class),
-                isNull(), Mockito.eq(false));
-
-        view.onDraftChanged(mockDraftMessageData, DraftMessageData.ALL_CHANGED);
-
-        assertEquals(message.getMessageText(), composeEditText.getText().toString());
-
-        sendButton.performClick();
-        Mockito.verify(mockIComposeMessageViewHost).warnOfMissingActionConditions(
-                any(Boolean.class), any(Runnable.class));
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/conversation/ConversationActivityUiStateTest.java b/tests/src/com/android/messaging/ui/conversation/ConversationActivityUiStateTest.java
deleted file mode 100644
index 0fec12e..0000000
--- a/tests/src/com/android/messaging/ui/conversation/ConversationActivityUiStateTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.text.TextUtils;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.ui.contact.ContactPickerFragment;
-import com.android.messaging.ui.conversation.ConversationActivityUiState.ConversationActivityUiStateHost;
-
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-@SmallTest
-public class ConversationActivityUiStateTest extends BugleTestCase {
-    @Mock protected ConversationActivityUiStateHost mockListener;
-
-    /**
-     * Test the Ui state where we start off with the contact picker to pick the first contact.
-     */
-    public void testPickInitialContact() {
-        final ConversationActivityUiState uiState = new ConversationActivityUiState(null);
-        uiState.setHost(mockListener);
-        assertTrue(uiState.shouldShowContactPickerFragment());
-        assertFalse(uiState.shouldShowConversationFragment());
-        assertEquals(ContactPickerFragment.MODE_PICK_INITIAL_CONTACT,
-                uiState.getDesiredContactPickingMode());
-        uiState.onGetOrCreateConversation("conversation1");
-        Mockito.verify(mockListener, Mockito.times(1)).onConversationContactPickerUiStateChanged(
-                Mockito.eq(ConversationActivityUiState.STATE_CONTACT_PICKER_ONLY_INITIAL_CONTACT),
-                Mockito.eq(
-                        ConversationActivityUiState.STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW),
-                Mockito.anyBoolean());
-        assertTrue(uiState.shouldShowContactPickerFragment());
-        assertTrue(uiState.shouldShowConversationFragment());
-        assertTrue(TextUtils.equals("conversation1", uiState.getConversationId()));
-        assertEquals(ContactPickerFragment.MODE_CHIPS_ONLY,
-                uiState.getDesiredContactPickingMode());
-    }
-
-    /**
-     * Test the Ui state where we have both the chips view and the conversation view and we
-     * start message compose.
-     */
-    public void testHybridUiStateStartCompose() {
-        final ConversationActivityUiState uiState = new ConversationActivityUiState("conv1");
-        uiState.testSetUiState(
-                ConversationActivityUiState.STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW);
-        uiState.setHost(mockListener);
-
-        // Start message compose.
-        uiState.onStartMessageCompose();
-        Mockito.verify(mockListener, Mockito.times(1)).onConversationContactPickerUiStateChanged(
-                Mockito.eq(
-                        ConversationActivityUiState.STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW),
-                Mockito.eq(ConversationActivityUiState.STATE_CONVERSATION_ONLY),
-                Mockito.anyBoolean());
-        assertFalse(uiState.shouldShowContactPickerFragment());
-        assertTrue(uiState.shouldShowConversationFragment());
-    }
-
-    /**
-     * Test the Ui state where we have both the chips view and the conversation view and we
-     * try to add a participant.
-     */
-    public void testHybridUiStateAddParticipant() {
-        final ConversationActivityUiState uiState = new ConversationActivityUiState("conv1");
-        uiState.testSetUiState(
-                ConversationActivityUiState.STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW);
-        uiState.setHost(mockListener);
-
-        uiState.onAddMoreParticipants();
-        Mockito.verify(mockListener, Mockito.times(1)).onConversationContactPickerUiStateChanged(
-                Mockito.eq(
-                        ConversationActivityUiState.STATE_HYBRID_WITH_CONVERSATION_AND_CHIPS_VIEW),
-                Mockito.eq(
-                        ConversationActivityUiState.STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS),
-                Mockito.anyBoolean());
-        assertTrue(uiState.shouldShowContactPickerFragment());
-        assertFalse(uiState.shouldShowConversationFragment());
-        assertEquals(ContactPickerFragment.MODE_PICK_MORE_CONTACTS,
-                uiState.getDesiredContactPickingMode());
-    }
-
-    /**
-     * Test the Ui state where we are trying to add more participants and commit.
-     */
-    public void testCommitAddParticipant() {
-        final ConversationActivityUiState uiState = new ConversationActivityUiState(null);
-        uiState.testSetUiState(
-                ConversationActivityUiState.STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS);
-        uiState.setHost(mockListener);
-
-        uiState.onGetOrCreateConversation("conversation1");
-
-        // After adding more contacts, the terminal state is always conversation only (i.e. we
-        // don't go back to hybrid mode).
-        Mockito.verify(mockListener, Mockito.times(1)).onConversationContactPickerUiStateChanged(
-                Mockito.eq(ConversationActivityUiState.STATE_CONTACT_PICKER_ONLY_ADD_MORE_CONTACTS),
-                Mockito.eq(ConversationActivityUiState.STATE_CONVERSATION_ONLY),
-                Mockito.anyBoolean());
-        assertFalse(uiState.shouldShowContactPickerFragment());
-        assertTrue(uiState.shouldShowConversationFragment());
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/conversation/ConversationFragmentTest.java b/tests/src/com/android/messaging/ui/conversation/ConversationFragmentTest.java
deleted file mode 100644
index 030306a..0000000
--- a/tests/src/com/android/messaging/ui/conversation/ConversationFragmentTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.database.Cursor;
-
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.test.filters.LargeTest;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.DataModel;
-import com.android.messaging.datamodel.MemoryCacheManager;
-import com.android.messaging.datamodel.data.ConversationData;
-import com.android.messaging.datamodel.data.ConversationData.ConversationDataListener;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.datamodel.media.MediaResourceManager;
-import com.android.messaging.ui.FragmentTestCase;
-import com.android.messaging.ui.PlainTextEditText;
-import com.android.messaging.ui.TestActivity.FragmentEventListener;
-import com.android.messaging.ui.conversation.ConversationFragment.ConversationFragmentHost;
-import com.android.messaging.ui.conversationlist.ConversationListFragment;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.ImeUtil;
-
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-/**
- * Unit tests for {@link ConversationListFragment}.
- */
-@LargeTest
-public class ConversationFragmentTest extends FragmentTestCase<ConversationFragment> {
-
-    @Mock protected DataModel mockDataModel;
-    @Mock protected ConversationData mockConversationData;
-    @Mock protected DraftMessageData mockDraftMessageData;
-    @Mock protected MediaResourceManager mockMediaResourceManager;
-    @Mock protected BugleGservices mockBugleGservices;
-    @Mock protected ConversationFragmentHost mockHost;
-    @Mock protected MemoryCacheManager mockMemoryCacheManager;
-
-    private ImeUtil mSpiedImeUtil;
-
-    private static final String CONVERSATION_ID = "cid";
-
-
-    public ConversationFragmentTest() {
-        super(ConversationFragment.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-      super.setUp();
-      ImeUtil.clearInstance();
-      mSpiedImeUtil = Mockito.spy(new ImeUtil());
-      FakeFactory.register(this.getInstrumentation().getTargetContext())
-          .withDataModel(mockDataModel)
-          .withBugleGservices(mockBugleGservices)
-          .withMemoryCacheManager(mockMemoryCacheManager);
-    }
-
-    /**
-     * Helper that will do the 'binding' of ConversationFragmentTest with ConversationData and
-     * leave fragment in 'ready' state.
-     * @param cursor
-     */
-    private void loadWith(final Cursor cursor) {
-        Mockito.when(mockDraftMessageData.isBound(Matchers.anyString()))
-            .thenReturn(true);
-        Mockito.when(mockConversationData.isBound(Matchers.anyString()))
-            .thenReturn(true);
-        Mockito.doReturn(mockDraftMessageData)
-            .when(mockDataModel)
-            .createDraftMessageData(Mockito.anyString());
-        Mockito.doReturn(mockDraftMessageData)
-            .when(mockDataModel)
-            .createDraftMessageData(null);
-        Mockito.when(mockDataModel.createConversationData(
-                Matchers.any(Activity.class),
-                Matchers.any(ConversationDataListener.class),
-                Matchers.anyString()))
-            .thenReturn(mockConversationData);
-
-        // Create fragment synchronously to avoid need for volatile, synchronization etc.
-        final ConversationFragment fragment = getFragment();
-        // Binding to model happens when attaching fragment to activity, so hook into test
-        // activity to do so.
-        getActivity().setFragmentEventListener(new FragmentEventListener() {
-            @Override
-            public void onAttachFragment(final Fragment attachedFragment) {
-                if (fragment == attachedFragment) {
-                    fragment.setConversationInfo(getActivity(), CONVERSATION_ID, null);
-                }
-            }
-        });
-
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                fragment.setHost(mockHost);
-                getActivity().setFragment(fragment);
-                Mockito.verify(mockDataModel).createConversationData(
-                        getActivity(), fragment, CONVERSATION_ID);
-                Mockito.verify(mockConversationData).init(fragment.getLoaderManager(),
-                        fragment.mBinding);
-            }
-        });
-        // Wait for initial layout pass to work around crash in recycler view
-        getInstrumentation().waitForIdleSync();
-        // Now load the cursor
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                fragment.onConversationMessagesCursorUpdated(mockConversationData, cursor, null,
-                        false);
-            }
-        });
-        getInstrumentation().waitForIdleSync();
-    }
-
-    /**
-     * Verifies that list view gets correctly populated given a cursor.
-     */
-    public void testLoadListView() {
-        final Cursor cursor = TestDataFactory.getConversationMessageCursor();
-        loadWith(cursor);
-        final RecyclerView listView =
-                (RecyclerView) getFragment().getView().findViewById(android.R.id.list);
-        assertEquals("bad cursor", cursor.getCount(), listView.getAdapter().getItemCount());
-        assertEquals("bad cursor count", cursor.getCount(), listView.getChildCount());
-    }
-
-    public void testClickComposeMessageView() {
-        final Cursor cursor = TestDataFactory.getConversationMessageCursor();
-        loadWith(cursor);
-
-        final PlainTextEditText composeEditText = (PlainTextEditText) getFragment().getView()
-                .findViewById(R.id.compose_message_text);
-        setFocus(composeEditText, false);
-        Mockito.verify(mockHost, Mockito.never()).onStartComposeMessage();
-        setFocus(composeEditText, true);
-        Mockito.verify(mockHost).onStartComposeMessage();
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/conversation/ConversationInputManagerTest.java b/tests/src/com/android/messaging/ui/conversation/ConversationInputManagerTest.java
deleted file mode 100644
index 6dff635..0000000
--- a/tests/src/com/android/messaging/ui/conversation/ConversationInputManagerTest.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.os.Bundle;
-import android.widget.EditText;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.ConversationData;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.SubscriptionListData;
-import com.android.messaging.ui.conversation.ConversationInputManager.ConversationInputHost;
-import com.android.messaging.ui.conversation.ConversationInputManager.ConversationInputSink;
-import com.android.messaging.ui.mediapicker.MediaPicker;
-import com.android.messaging.util.BugleGservices;
-import com.android.messaging.util.ImeUtil;
-import com.android.messaging.util.ImeUtil.ImeStateHost;
-
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.Spy;
-
-@SmallTest
-public class ConversationInputManagerTest extends BugleTestCase {
-    @Spy protected ImeUtil spyImeUtil;
-    @Mock protected BugleGservices mockBugleGservices;
-    @Mock protected FragmentManager mockFragmentManager;
-    @Mock protected ConversationInputHost mockConversationInputHost;
-    @Mock protected ConversationInputSink mockConversationInputSink;
-    @Mock protected ImeStateHost mockImeStateHost;
-    @Mock protected ConversationData mockConversationData;
-    @Mock protected DraftMessageData mockDraftMessageData;
-    @Mock protected MediaPicker mockMediaPicker;
-    @Mock protected SubscriptionListData mockSubscriptionListData;
-    @Mock protected FragmentTransaction mockFragmentTransaction;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        FakeFactory.register(getTestContext())
-                .withBugleGservices(mockBugleGservices);
-        spyImeUtil = Mockito.spy(new ImeUtil());
-        ImeUtil.set(spyImeUtil);
-    }
-
-    private ConversationInputManager initNewInputManager(final Bundle savedState) {
-        // Set up the mocks.
-        Mockito.when(mockConversationInputHost.getSimSelectorView())
-                .thenReturn(new SimSelectorView(getTestContext(), null));
-        Mockito.when(mockConversationInputHost.createMediaPicker()).thenReturn(mockMediaPicker);
-        Mockito.when(mockConversationInputSink.getComposeEditText())
-                .thenReturn(new EditText(getTestContext()));
-        Mockito.doReturn(mockFragmentTransaction).when(mockFragmentTransaction).replace(
-                Mockito.eq(R.id.mediapicker_container), Mockito.any(MediaPicker.class),
-                Mockito.anyString());
-        Mockito.when(mockFragmentManager.findFragmentByTag(MediaPicker.FRAGMENT_TAG))
-                .thenReturn(null);
-        Mockito.when(mockFragmentManager.beginTransaction()).thenReturn(mockFragmentTransaction);
-        Mockito.when(mockSubscriptionListData.hasData()).thenReturn(true);
-        Mockito.when(mockConversationData.getSubscriptionListData())
-                .thenReturn(mockSubscriptionListData);
-        Mockito.doReturn(true).when(mockConversationData).isBound(Mockito.anyString());
-        Mockito.doReturn(true).when(mockDraftMessageData).isBound(Mockito.anyString());
-
-        final Binding<ConversationData> dataBinding = BindingBase.createBinding(this);
-        dataBinding.bind(mockConversationData);
-        final Binding<DraftMessageData> draftBinding = BindingBase.createBinding(this);
-        draftBinding.bind(mockDraftMessageData);
-        final ConversationInputManager inputManager = new ConversationInputManager(getTestContext(),
-                mockConversationInputHost, mockConversationInputSink, mockImeStateHost,
-                mockFragmentManager, dataBinding, draftBinding, savedState);
-        return inputManager;
-    }
-
-    public void testShowHideInputs() {
-        final ConversationInputManager inputManager = initNewInputManager(new Bundle());
-        Mockito.when(mockMediaPicker.isOpen()).thenReturn(true);
-        inputManager.showHideMediaPicker(true /* show */, true /* animate */);
-        Mockito.verify(mockFragmentTransaction).replace(
-                Mockito.eq(R.id.mediapicker_container), Mockito.any(MediaPicker.class),
-                Mockito.anyString());
-        Mockito.verify(mockMediaPicker).open(Mockito.anyInt(), Mockito.eq(true /* animate */));
-
-        assertEquals(true, inputManager.isMediaPickerVisible());
-        assertEquals(false, inputManager.isSimSelectorVisible());
-        assertEquals(false, inputManager.isImeKeyboardVisible());
-
-        Mockito.when(mockMediaPicker.isOpen()).thenReturn(false);
-        inputManager.showHideMediaPicker(false /* show */, true /* animate */);
-        Mockito.verify(mockMediaPicker).dismiss(Mockito.eq(true /* animate */));
-
-        assertEquals(false, inputManager.isMediaPickerVisible());
-        assertEquals(false, inputManager.isSimSelectorVisible());
-        assertEquals(false, inputManager.isImeKeyboardVisible());
-    }
-
-    public void testShowTwoInputsSequentially() {
-        // First show the media picker, then show the IME keyboard.
-        final ConversationInputManager inputManager = initNewInputManager(new Bundle());
-        Mockito.when(mockMediaPicker.isOpen()).thenReturn(true);
-        inputManager.showHideMediaPicker(true /* show */, true /* animate */);
-
-        assertEquals(true, inputManager.isMediaPickerVisible());
-        assertEquals(false, inputManager.isSimSelectorVisible());
-        assertEquals(false, inputManager.isImeKeyboardVisible());
-
-        Mockito.when(mockMediaPicker.isOpen()).thenReturn(false);
-        inputManager.showHideImeKeyboard(true /* show */, true /* animate */);
-
-        assertEquals(false, inputManager.isMediaPickerVisible());
-        assertEquals(false, inputManager.isSimSelectorVisible());
-        assertEquals(true, inputManager.isImeKeyboardVisible());
-    }
-
-    public void testOnKeyboardShow() {
-        final ConversationInputManager inputManager = initNewInputManager(new Bundle());
-        Mockito.when(mockMediaPicker.isOpen()).thenReturn(true);
-        inputManager.showHideMediaPicker(true /* show */, true /* animate */);
-
-        assertEquals(true, inputManager.isMediaPickerVisible());
-        assertEquals(false, inputManager.isSimSelectorVisible());
-        assertEquals(false, inputManager.isImeKeyboardVisible());
-
-        Mockito.when(mockMediaPicker.isOpen()).thenReturn(false);
-        inputManager.testNotifyImeStateChanged(true /* imeOpen */);
-
-        assertEquals(false, inputManager.isMediaPickerVisible());
-        assertEquals(false, inputManager.isSimSelectorVisible());
-        assertEquals(true, inputManager.isImeKeyboardVisible());
-    }
-
-    public void testRestoreState() {
-        final ConversationInputManager inputManager = initNewInputManager(new Bundle());
-        Mockito.when(mockMediaPicker.isOpen()).thenReturn(true);
-        inputManager.showHideMediaPicker(true /* show */, true /* animate */);
-
-        assertEquals(true, inputManager.isMediaPickerVisible());
-        assertEquals(false, inputManager.isSimSelectorVisible());
-        assertEquals(false, inputManager.isImeKeyboardVisible());
-
-        Bundle savedInstanceState = new Bundle();
-        inputManager.onSaveInputState(savedInstanceState);
-
-        // Now try to restore the state
-        final ConversationInputManager restoredInputManager =
-                initNewInputManager(savedInstanceState);
-
-        // Make sure the state is preserved.
-        assertEquals(true, restoredInputManager.isMediaPickerVisible());
-        assertEquals(false, restoredInputManager.isSimSelectorVisible());
-        assertEquals(false, restoredInputManager.isImeKeyboardVisible());
-    }
-
-    public void testBackPress() {
-        final ConversationInputManager inputManager = initNewInputManager(new Bundle());
-        Mockito.when(mockMediaPicker.isOpen()).thenReturn(true);
-        inputManager.showHideMediaPicker(true /* show */, true /* animate */);
-
-        assertEquals(true, inputManager.isMediaPickerVisible());
-        assertEquals(false, inputManager.isSimSelectorVisible());
-        assertEquals(false, inputManager.isImeKeyboardVisible());
-
-        Mockito.when(mockMediaPicker.isOpen()).thenReturn(false);
-        assertEquals(true, inputManager.onBackPressed());
-
-        assertEquals(false, inputManager.isMediaPickerVisible());
-        assertEquals(false, inputManager.isSimSelectorVisible());
-        assertEquals(false, inputManager.isImeKeyboardVisible());
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/conversation/ConversationMessageViewTest.java b/tests/src/com/android/messaging/ui/conversation/ConversationMessageViewTest.java
deleted file mode 100644
index 6833df2..0000000
--- a/tests/src/com/android/messaging/ui/conversation/ConversationMessageViewTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversation;
-
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.test.filters.MediumTest;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.FakeCursor;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.ui.ViewTest;
-import com.android.messaging.ui.conversation.ConversationMessageView.ConversationMessageViewHost;
-import com.android.messaging.util.Dates;
-
-import org.mockito.Mock;
-
-@MediumTest
-public class ConversationMessageViewTest extends ViewTest<ConversationMessageView> {
-    @Mock ConversationMessageViewHost mockHost;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        FakeFactory.register(getInstrumentation().getTargetContext());
-    }
-
-    @Override
-    protected ConversationMessageView getView() {
-        final ConversationMessageView view = super.getView();
-        view.setHost(mockHost);
-        return view;
-    }
-
-    protected void verifyContent(final ConversationMessageView view, final String messageText,
-            final boolean showTimestamp, final String timestampText) {
-
-        final TextView messageTextView = (TextView) view.findViewById(R.id.message_text);
-        final TextView statusTextView = (TextView) view.findViewById(R.id.message_status);
-
-        assertNotNull(messageTextView);
-        assertEquals(messageText, messageTextView.getText());
-
-        if (showTimestamp) {
-            assertEquals(View.VISIBLE, statusTextView.getVisibility());
-            assertEquals(timestampText, statusTextView.getText());
-        } else {
-            assertEquals(View.GONE, statusTextView.getVisibility());
-        }
-    }
-
-    public void testBind() {
-        final ConversationMessageView view = getView();
-
-        final FakeCursor cursor = TestDataFactory.getConversationMessageCursor();
-        cursor.moveToFirst();
-
-        view.bind(cursor);
-        verifyContent(view, TestDataFactory.getMessageText(cursor, 0), true, Dates
-                .getMessageTimeString((Long) cursor.getAt("received_timestamp", 0)).toString());
-    }
-
-    public void testBindTwice() {
-        final ConversationMessageView view = getView();
-
-        final FakeCursor cursor = TestDataFactory.getConversationMessageCursor();
-        cursor.moveToFirst();
-        view.bind(cursor);
-
-        cursor.moveToNext();
-        view.bind(cursor);
-        verifyContent(view, TestDataFactory.getMessageText(cursor, 1), true, Dates
-                .getMessageTimeString((Long) cursor.getAt("received_timestamp", 1)).toString());
-    }
-
-    public void testBindLast() {
-        final ConversationMessageView view = getView();
-
-        final FakeCursor cursor = TestDataFactory.getConversationMessageCursor();
-        final int lastPos = cursor.getCount() - 1;
-        cursor.moveToPosition(lastPos);
-
-        view.bind(cursor);
-        verifyContent(view, TestDataFactory.getMessageText(cursor, lastPos), true, Dates
-                .getMessageTimeString((Long) cursor.getAt("received_timestamp", lastPos))
-                .toString());
-    }
-
-    @Override
-    protected int getLayoutIdForView() {
-        return R.layout.conversation_message_view;
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/conversationlist/ConversationListFragmentTest.java b/tests/src/com/android/messaging/ui/conversationlist/ConversationListFragmentTest.java
deleted file mode 100644
index c3da81c..0000000
--- a/tests/src/com/android/messaging/ui/conversationlist/ConversationListFragmentTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.view.View;
-import android.widget.ImageView;
-
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.test.filters.LargeTest;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.data.ConversationListData;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.ui.FragmentTestCase;
-import com.android.messaging.ui.UIIntents;
-import com.android.messaging.ui.conversationlist.ConversationListFragment.ConversationListFragmentHost;
-
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-/**
- * Unit tests for {@link ConversationListFragment}.
- */
-@LargeTest
-public class ConversationListFragmentTest
-    extends FragmentTestCase<ConversationListFragment> {
-
-    @Mock protected ConversationListData mMockConversationListData;
-    @Mock protected ConversationListFragmentHost mMockConversationHostListHost;
-    @Mock protected UIIntents mMockUIIntents;
-    protected FakeDataModel mFakeDataModel;
-
-    public ConversationListFragmentTest() {
-        super(ConversationListFragment.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        final Context context = getInstrumentation().getTargetContext();
-        mFakeDataModel = new FakeDataModel(context)
-            .withConversationListData(mMockConversationListData);
-        FakeFactory.register(context)
-                .withDataModel(mFakeDataModel)
-                .withUIIntents(mMockUIIntents);
-    }
-
-    /**
-     * Helper that will do the 'binding' of ConversationListFragmentTest with ConversationListData
-     * and leave fragment in 'ready' state.
-     * @param cursor
-     */
-    private void loadWith(final Cursor cursor) {
-        Mockito.when(mMockConversationListData.isBound(Matchers.anyString()))
-            .thenReturn(true);
-
-        final ConversationListFragment fragment = getFragment();
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                fragment.setHost(mMockConversationHostListHost);
-                getActivity().setFragment(fragment);
-                Mockito.verify(mMockConversationListData).init(fragment.getLoaderManager(),
-                        fragment.mListBinding);
-                fragment.onConversationListCursorUpdated(mMockConversationListData, cursor);
-            }
-        });
-        getInstrumentation().waitForIdleSync();
-    }
-
-    /**
-     * Verifies that list view gets correctly populated given a cursor.
-     */
-    public void testLoadListView() {
-        final Cursor cursor = TestDataFactory.getConversationListCursor();
-        loadWith(cursor);
-        final RecyclerView listView =
-                (RecyclerView) getFragment().getView().findViewById(android.R.id.list);
-        //assertEquals(cursor.getCount(), listView.getCount());
-        assertEquals(cursor.getCount(), listView.getChildCount());
-    }
-
-    /**
-     * Verifies that 'empty list' promo is rendered with an empty cursor.
-     */
-    public void testEmptyView() {
-        loadWith(TestDataFactory.getEmptyConversationListCursor());
-        final RecyclerView listView =
-                (RecyclerView) getFragment().getView().findViewById(android.R.id.list);
-        final View emptyMessageView =
-                getFragment().getView().findViewById(R.id.no_conversations_view);
-        assertEquals(View.VISIBLE, emptyMessageView.getVisibility());
-        assertEquals(0, listView.getChildCount());
-    }
-
-    /**
-     * Verifies that the button to start a new conversation works.
-     */
-    public void testStartNewConversation() {
-        final Cursor cursor = TestDataFactory.getConversationListCursor();
-        loadWith(cursor);
-        final ImageView startNewConversationButton = (ImageView)
-                getFragment().getView().findViewById(R.id.start_new_conversation_button);
-
-        clickButton(startNewConversationButton);
-        Mockito.verify(mMockConversationHostListHost).onCreateConversationClick();
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/conversationlist/ConversationListItemViewTest.java b/tests/src/com/android/messaging/ui/conversationlist/ConversationListItemViewTest.java
deleted file mode 100644
index c96ab44..0000000
--- a/tests/src/com/android/messaging/ui/conversationlist/ConversationListItemViewTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.conversationlist;
-
-import android.content.Context;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.test.filters.MediumTest;
-
-import com.android.messaging.Factory;
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.FakeCursor;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.data.ConversationListItemData;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.ui.AsyncImageView;
-import com.android.messaging.ui.UIIntentsImpl;
-import com.android.messaging.ui.ViewTest;
-import com.android.messaging.util.Dates;
-
-import org.mockito.ArgumentMatcher;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-@MediumTest
-public class ConversationListItemViewTest extends ViewTest<ConversationListItemView> {
-
-    @Mock private ConversationListItemView.HostInterface mockHost;
-    private FakeCursor mCursor;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        final Context context = getInstrumentation().getTargetContext();
-        FakeFactory.register(context)
-            .withDataModel(new FakeDataModel(context))
-            .withUIIntents(new UIIntentsImpl());
-        mCursor = TestDataFactory.getConversationListCursor();
-    }
-
-
-    protected void verifyLaunchedConversationForId(final String id,
-            final ConversationListItemView conversationView) {
-        // Must be a short click.
-        final ArgumentMatcher<ConversationListItemData> itemDataIdMatcher =
-                arg -> TextUtils.equals(id, arg.getConversationId());
-        Mockito.verify(mockHost).onConversationClicked(
-                Mockito.argThat(itemDataIdMatcher), Mockito.eq(false),
-                Mockito.eq(conversationView));
-    }
-
-    protected void verifyContent(
-            final ConversationListItemView view, final FakeCursor cursor, final int index) {
-        /* ConversationQueryColumns.NAME */
-        final String  conversationQueryColumnsName = "name";
-        final String name = (String) cursor.getAt(conversationQueryColumnsName, index);
-
-        /* ConversationQueryColumns.SNIPPET_TEXT */
-        final String  conversationQueryColumnsSnippetText = "snippet_text";
-        final String snippet = (String) cursor.getAt(conversationQueryColumnsSnippetText, index);
-
-        /* ConversationQueryColumns.SORT_TIMESTAMP */
-        final String  conversationQueryColumnsSortTimestamp = "sort_timestamp";
-        final String timestamp = Dates.getConversationTimeString(
-                (Long) cursor.getAt(conversationQueryColumnsSortTimestamp, index)).toString();
-
-        final boolean unread = !isRead(cursor, index);
-        verifyContent(view, name,  snippet, timestamp, unread);
-    }
-
-    protected void verifyContent(
-            final ConversationListItemView view,
-            final String conversationName,
-            final String snippet,
-            final String timestamp,
-            final boolean unread) {
-        final TextView conversationNameView =
-                (TextView) view.findViewById(R.id.conversation_name);
-        final TextView snippetTextView = (TextView) view.findViewById(R.id.conversation_snippet);
-        final TextView timestampTextView = (TextView) view.findViewById(
-                R.id.conversation_timestamp);
-        final AsyncImageView imagePreviewView =
-                (AsyncImageView) view.findViewById(R.id.conversation_image_preview);
-
-        final Context context = Factory.get().getApplicationContext();
-        assertNotNull(conversationNameView);
-        assertEquals(conversationName, conversationNameView.getText());
-        assertNotNull(snippetTextView);
-        if (unread) {
-            assertEquals(ConversationListItemView.UNREAD_SNIPPET_LINE_COUNT,
-                    snippetTextView.getMaxLines());
-            assertEquals(context.getResources().getColor(R.color.conversation_list_item_unread),
-                    snippetTextView.getCurrentTextColor());
-            assertEquals(context.getResources().getColor(R.color.conversation_list_item_unread),
-                    conversationNameView.getCurrentTextColor());
-
-        } else {
-            assertEquals(ConversationListItemView.NO_UNREAD_SNIPPET_LINE_COUNT,
-                    snippetTextView.getMaxLines());
-            assertEquals(context.getResources().getColor(R.color.conversation_list_item_read),
-                    snippetTextView.getCurrentTextColor());
-            assertEquals(context.getResources().getColor(R.color.conversation_list_item_read),
-                    conversationNameView.getCurrentTextColor());
-        }
-
-        assertEquals(View.VISIBLE, imagePreviewView.getVisibility());
-        assertTrue(snippetTextView.getText().toString().contains(snippet));
-        assertEquals(timestamp, timestampTextView.getText());
-    }
-
-    protected boolean isRead(final FakeCursor cursor, final int index) {
-        return 1 == ((Integer) cursor.getAt("read", index)).intValue();
-    }
-
-    public void testBindUnread() {
-        final ConversationListItemView view = getView();
-        final int messageIndex = TestDataFactory.CONVERSATION_LIST_CURSOR_UNREAD_MESSAGE_INDEX;
-        mCursor.moveToPosition(messageIndex);
-        assertFalse(isRead(mCursor, messageIndex));
-        view.bind(mCursor, mockHost);
-        verifyContent(view, mCursor, messageIndex);
-    }
-
-    public void testBindRead() {
-        final ConversationListItemView view = getView();
-
-        final int messageIndex = TestDataFactory.CONVERSATION_LIST_CURSOR_READ_MESSAGE_INDEX;
-        mCursor.moveToPosition(messageIndex);
-        assertTrue(isRead(mCursor, messageIndex));
-        view.bind(mCursor, mockHost);
-        verifyContent(view, mCursor, messageIndex);
-    }
-
-    public void testClickLaunchesConversation() {
-        final ConversationListItemView view = getView();
-        final View swipeableContainer = view.findViewById(R.id.swipeableContainer);
-        mCursor.moveToFirst();
-        view.bind(mCursor, mockHost);
-        swipeableContainer.performClick();
-        verifyLaunchedConversationForId(
-                mCursor.getAt("_id" /* ConversationQueryColumns._ID */, 0).toString(), view);
-    }
-
-    public void testBindTwice() {
-        final ConversationListItemView view = getView();
-
-        mCursor.moveToFirst();
-        view.bind(mCursor, mockHost);
-
-        mCursor.moveToNext();
-        view.bind(mCursor, mockHost);
-        verifyContent(view, mCursor, mCursor.getPosition());
-    }
-
-    @Override
-    protected int getLayoutIdForView() {
-        return R.layout.conversation_list_item_view;
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/mediapicker/AudioRecordViewTest.java b/tests/src/com/android/messaging/ui/mediapicker/AudioRecordViewTest.java
deleted file mode 100644
index a38dac2..0000000
--- a/tests/src/com/android/messaging/ui/mediapicker/AudioRecordViewTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.media.MediaPlayer;
-import android.media.MediaRecorder.OnErrorListener;
-import android.media.MediaRecorder.OnInfoListener;
-import android.net.Uri;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.data.MessagePartData;
-import com.android.messaging.ui.ViewTest;
-import com.android.messaging.util.FakeMediaUtil;
-
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-public class AudioRecordViewTest extends ViewTest<AudioRecordView> {
-
-    @Mock AudioRecordView.HostInterface mockHost;
-    @Mock LevelTrackingMediaRecorder mockRecorder;
-    @Mock MediaPlayer mockMediaPlayer;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        FakeFactory.register(getInstrumentation().getContext())
-                .withMediaUtil(new FakeMediaUtil(mockMediaPlayer));
-    }
-
-    private void verifyAudioSubmitted() {
-        Mockito.verify(mockHost).onAudioRecorded(Matchers.any(MessagePartData.class));
-    }
-
-    private AudioRecordView initView() {
-        final AudioRecordView view = getView();
-        view.testSetMediaRecorder(mockRecorder);
-        view.setHostInterface(mockHost);
-        return view;
-    }
-
-    public void testRecording() {
-        Mockito.when(mockRecorder.isRecording()).thenReturn(false);
-        Mockito.when(mockRecorder.startRecording(Matchers.<OnErrorListener>any(),
-                Matchers.<OnInfoListener>any(), Matchers.anyInt())).thenReturn(true);
-        Mockito.when(mockRecorder.stopRecording()).thenReturn(Uri.parse("content://someaudio/2"));
-        final AudioRecordView view = initView();
-        view.onRecordButtonTouchDown();
-        Mockito.verify(mockRecorder).startRecording(Matchers.<OnErrorListener>any(),
-                Matchers.<OnInfoListener>any(), Matchers.anyInt());
-        Mockito.when(mockRecorder.isRecording()).thenReturn(true);
-        // Record for 1 second to make it meaningful.
-        sleepNoThrow(1000);
-        view.onRecordButtonTouchUp();
-        // We added some buffer to the end of the audio recording, so sleep for sometime and
-        // verify audio is recorded.
-        sleepNoThrow(700);
-        Mockito.verify(mockRecorder).stopRecording();
-        verifyAudioSubmitted();
-    }
-
-    private void sleepNoThrow(final long duration) {
-        try {
-            Thread.sleep(duration);
-        } catch (final InterruptedException e) {
-            Thread.currentThread().interrupt();
-        }
-    }
-
-    @Override
-    protected int getLayoutIdForView() {
-        return R.layout.mediapicker_audio_chooser;
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/mediapicker/CameraManagerTest.java b/tests/src/com/android/messaging/ui/mediapicker/CameraManagerTest.java
deleted file mode 100644
index 7417c32..0000000
--- a/tests/src/com/android/messaging/ui/mediapicker/CameraManagerTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.hardware.Camera;
-import android.hardware.Camera.CameraInfo;
-import android.os.AsyncTask;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.ui.mediapicker.CameraManager.CameraWrapper;
-
-import org.mockito.InOrder;
-import org.mockito.Mockito;
-
-@SmallTest
-public class CameraManagerTest extends BugleTestCase {
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        // Force each test to set up a camera wrapper to match their needs
-        CameraManager.setCameraWrapper(null);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        MockCameraFactory.cleanup();
-    }
-
-    public void testNoCameraDeviceGetInfo() {
-        CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper());
-        assertEquals(false, CameraManager.get().hasAnyCamera());
-        assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
-        boolean threw = false;
-        try {
-            CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
-        } catch (AssertionError e) {
-            threw = true;
-        }
-        if (!threw) {
-            fail("selectCamera should have thrown");
-        }
-    }
-
-    public void testFrontFacingOnlyGetInfo() {
-        CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
-                MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT)
-        ));
-        assertEquals(true, CameraManager.get().hasAnyCamera());
-        assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
-        CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
-        assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
-        CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
-        assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
-    }
-
-    public void testBackFacingOnlyGetInfo() {
-        CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
-                MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
-        ));
-        assertEquals(true, CameraManager.get().hasAnyCamera());
-        assertEquals(false, CameraManager.get().hasFrontAndBackCamera());
-        CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
-        assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
-        CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
-        assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
-    }
-
-    public void testFrontAndBackGetInfo() {
-        CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
-                MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT),
-                MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
-        ));
-        assertEquals(true, CameraManager.get().hasAnyCamera());
-        assertEquals(true, CameraManager.get().hasFrontAndBackCamera());
-        CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
-        assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
-        CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
-        assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
-    }
-
-    public void testSwapCamera() {
-        CameraManager.setCameraWrapper(MockCameraFactory.createCameraWrapper(
-                MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT),
-                MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK)
-        ));
-        CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_FRONT);
-        assertEquals(CameraInfo.CAMERA_FACING_FRONT, CameraManager.get().getCameraInfo().facing);
-        CameraManager.get().swapCamera();
-        assertEquals(CameraInfo.CAMERA_FACING_BACK, CameraManager.get().getCameraInfo().facing);
-    }
-
-    public void testOpenCamera() {
-        Camera backCamera = MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_BACK);
-        Camera frontCamera = MockCameraFactory.createCamera(CameraInfo.CAMERA_FACING_FRONT);
-        CameraWrapper wrapper = MockCameraFactory.createCameraWrapper(frontCamera, backCamera);
-        CameraManager.setCameraWrapper(wrapper);
-        CameraManager.get().selectCamera(CameraInfo.CAMERA_FACING_BACK);
-        CameraManager.get().openCamera();
-        CameraManager.get().openCamera();
-        CameraManager.get().openCamera();
-        waitForPendingAsyncTasks();
-        Mockito.verify(wrapper, Mockito.never()).open(0);
-        Mockito.verify(wrapper).open(1);
-        Mockito.verify(wrapper, Mockito.never()).release(frontCamera);
-        Mockito.verify(wrapper, Mockito.never()).release(backCamera);
-        CameraManager.get().swapCamera();
-        waitForPendingAsyncTasks();
-        Mockito.verify(wrapper).open(0);
-        Mockito.verify(wrapper).open(1);
-        Mockito.verify(wrapper, Mockito.never()).release(frontCamera);
-        Mockito.verify(wrapper).release(backCamera);
-        InOrder inOrder = Mockito.inOrder(wrapper);
-        inOrder.verify(wrapper).open(1);
-        inOrder.verify(wrapper).release(backCamera);
-        inOrder.verify(wrapper).open(0);
-    }
-
-    private void waitForPendingAsyncTasks() {
-        try {
-            final Object lockObject = new Object();
-
-            new AsyncTask<Void, Void, Void>() {
-                @Override
-                protected Void doInBackground(Void... voids) {
-                    return null;
-                }
-
-                @Override
-                protected void onPostExecute(Void aVoid) {
-                    super.onPostExecute(aVoid);
-                    synchronized (lockObject) {
-                        lockObject.notifyAll();
-                    }
-                }
-            }.execute();
-
-            synchronized (lockObject) {
-                lockObject.wait(500);
-            }
-        } catch (InterruptedException e) {
-            fail();
-        }
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/mediapicker/GalleryGridItemViewTest.java b/tests/src/com/android/messaging/ui/mediapicker/GalleryGridItemViewTest.java
deleted file mode 100644
index 304cc74..0000000
--- a/tests/src/com/android/messaging/ui/mediapicker/GalleryGridItemViewTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.provider.MediaStore.Images.Media;
-import android.view.View;
-import android.widget.CheckBox;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.FakeCursor;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.data.GalleryGridItemData;
-import com.android.messaging.datamodel.data.TestDataFactory;
-import com.android.messaging.ui.AsyncImageView;
-import com.android.messaging.ui.ViewTest;
-import com.android.messaging.util.UriUtil;
-
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-public class GalleryGridItemViewTest extends ViewTest<GalleryGridItemView> {
-
-    @Mock GalleryGridItemView.HostInterface mockHost;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        final Context context = getInstrumentation().getTargetContext();
-        FakeFactory.register(context)
-            .withDataModel(new FakeDataModel(context));
-    }
-
-    protected void verifyClickedItem(final View view, final GalleryGridItemData data) {
-        Mockito.verify(mockHost).onItemClicked(view, data, false /* longClick */);
-    }
-
-    protected void verifyContent(
-            final GalleryGridItemView view,
-            final String imageUrl,
-            final boolean showCheckbox,
-            final boolean isSelected) {
-        final AsyncImageView imageView = (AsyncImageView) view.findViewById(R.id.thumbnail);
-        final CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);
-
-        assertNotNull(imageView);
-        assertTrue(imageView.mImageRequestBinding.isBound());
-        assertTrue(imageView.mImageRequestBinding.getData().getKey().startsWith(imageUrl));
-        assertNotNull(checkBox);
-        if (showCheckbox) {
-            assertEquals(View.VISIBLE, checkBox.getVisibility());
-            assertEquals(isSelected, checkBox.isChecked());
-        } else {
-            assertNotSame(View.VISIBLE, checkBox.getVisibility());
-        }
-    }
-
-    public void testBind() {
-        Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(false);
-        Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any()))
-                .thenReturn(false);
-        final GalleryGridItemView view = getView();
-        final FakeCursor cursor = TestDataFactory.getGalleryGridCursor();
-        cursor.moveToFirst();
-        final String path = (String) cursor.getAt(Media.DATA, 0);
-        view.bind(cursor, mockHost);
-        verifyContent(view, UriUtil.getUriForResourceFile(path).toString(),
-                false, false);
-    }
-
-    public void testBindMultiSelectUnSelected() {
-        Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(true);
-        Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any()))
-                .thenReturn(false);
-        final GalleryGridItemView view = getView();
-        final FakeCursor cursor = TestDataFactory.getGalleryGridCursor();
-        cursor.moveToFirst();
-        final String path = (String) cursor.getAt(Media.DATA, 0);
-        view.bind(cursor, mockHost);
-        verifyContent(view, UriUtil.getUriForResourceFile(path).toString(),
-                true, false);
-    }
-
-    public void testBindMultiSelectSelected() {
-        Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(true);
-        Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any()))
-                .thenReturn(true);
-        final GalleryGridItemView view = getView();
-        final FakeCursor cursor = TestDataFactory.getGalleryGridCursor();
-        cursor.moveToFirst();
-        final String path = (String) cursor.getAt(Media.DATA, 0);
-        view.bind(cursor, mockHost);
-        verifyContent(view, UriUtil.getUriForResourceFile(path).toString(),
-                true, true);
-    }
-
-    public void testClick() {
-        Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(false);
-        Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any()))
-                .thenReturn(false);
-        final GalleryGridItemView view = getView();
-        final FakeCursor cursor = TestDataFactory.getGalleryGridCursor();
-        cursor.moveToFirst();
-        view.bind(cursor, mockHost);
-        view.performClick();
-        verifyClickedItem(view, view.mData);
-    }
-
-    public void testBindTwice() {
-        Mockito.when(mockHost.isMultiSelectEnabled()).thenReturn(true);
-        Mockito.when(mockHost.isItemSelected(Matchers.<GalleryGridItemData>any()))
-                .thenReturn(false);
-        final GalleryGridItemView view = getView();
-        final FakeCursor cursor = TestDataFactory.getGalleryGridCursor();
-
-        cursor.moveToFirst();
-        view.bind(cursor, mockHost);
-
-        cursor.moveToNext();
-        final String path = (String) cursor.getAt(Media.DATA, 1);
-        view.bind(cursor, mockHost);
-        verifyContent(view, UriUtil.getUriForResourceFile(path).toString(),
-                true, false);
-    }
-
-    @Override
-    protected int getLayoutIdForView() {
-        return R.layout.gallery_grid_item_view;
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/mediapicker/MediaPickerTest.java b/tests/src/com/android/messaging/ui/mediapicker/MediaPickerTest.java
deleted file mode 100644
index 4e7c2d2..0000000
--- a/tests/src/com/android/messaging/ui/mediapicker/MediaPickerTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.content.Context;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageButton;
-
-import com.android.messaging.FakeFactory;
-import com.android.messaging.R;
-import com.android.messaging.datamodel.FakeDataModel;
-import com.android.messaging.datamodel.binding.Binding;
-import com.android.messaging.datamodel.binding.BindingBase;
-import com.android.messaging.datamodel.data.DraftMessageData;
-import com.android.messaging.datamodel.data.MediaPickerData;
-import com.android.messaging.ui.FragmentTestCase;
-
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-
-public class MediaPickerTest extends FragmentTestCase<MediaPicker> {
-    @Mock protected MediaPickerData mMockMediaPickerData;
-    @Mock protected DraftMessageData mMockDraftMessageData;
-    protected FakeDataModel mFakeDataModel;
-
-    public MediaPickerTest() {
-        super(MediaPicker.class);
-    }
-
-    @Override
-    protected MediaPicker getFragment() {
-        if (mFragment == null) {
-            mFragment = new MediaPicker(getInstrumentation().getTargetContext());
-        }
-        return mFragment;
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        final Context context = getInstrumentation().getTargetContext();
-        mFakeDataModel = new FakeDataModel(context)
-                   .withMediaPickerData(mMockMediaPickerData);
-        FakeFactory.register(context)
-                   .withDataModel(mFakeDataModel);
-    }
-
-    /**
-     * Helper method to initialize the MediaPicker and its data.
-     */
-    private void initFragment(final int supportedMediaTypes, final Integer[] expectedLoaderIds,
-            final boolean filterTabBeforeAttach) {
-        Mockito.when(mMockMediaPickerData.isBound(Matchers.anyString()))
-            .thenReturn(true);
-        Mockito.when(mMockDraftMessageData.isBound(Matchers.anyString()))
-            .thenReturn(true);
-        final Binding<DraftMessageData> draftBinding = BindingBase.createBinding(this);
-        draftBinding.bind(mMockDraftMessageData);
-
-        getActivity().runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                final MediaPicker fragment = getFragment();
-                if (filterTabBeforeAttach) {
-                    fragment.setSupportedMediaTypes(supportedMediaTypes);
-                    getActivity().setFragment(fragment);
-                } else {
-                    getActivity().setFragment(fragment);
-                    fragment.setSupportedMediaTypes(supportedMediaTypes);
-                }
-                fragment.setDraftMessageDataModel(draftBinding);
-                Mockito.verify(mMockMediaPickerData,
-                        Mockito.atLeastOnce()).init(
-                        Matchers.eq(fragment.getLoaderManager()));
-                fragment.open(MediaPicker.MEDIA_TYPE_ALL, false);
-            }
-        });
-        getInstrumentation().waitForIdleSync();
-    }
-
-    public void testDefaultTabs() {
-        Mockito.when(mMockMediaPickerData.getSelectedChooserIndex()).thenReturn(0);
-        initFragment(MediaPicker.MEDIA_TYPE_ALL, new Integer[] {
-                MediaPickerData.GALLERY_MEDIA_LOADER },
-                false);
-        final MediaPicker mediaPicker = getFragment();
-        final View view = mediaPicker.getView();
-        assertNotNull(view);
-        final ViewGroup tabStrip = (ViewGroup) view.findViewById(R.id.mediapicker_tabstrip);
-        assertEquals(tabStrip.getChildCount(), 4);
-        for (int i = 0; i < tabStrip.getChildCount(); i++) {
-            final ImageButton tabButton = (ImageButton) tabStrip.getChildAt(i);
-            assertEquals(View.VISIBLE, tabButton.getVisibility());
-            assertEquals(i == 0, tabButton.isSelected());
-        }
-    }
-
-    public void testFilterTabsBeforeAttach() {
-        Mockito.when(mMockMediaPickerData.getSelectedChooserIndex()).thenReturn(0);
-        initFragment(MediaPicker.MEDIA_TYPE_IMAGE, new Integer[] {
-                MediaPickerData.GALLERY_MEDIA_LOADER },
-                true);
-        final MediaPicker mediaPicker = getFragment();
-        final View view = mediaPicker.getView();
-        assertNotNull(view);
-        final ViewGroup tabStrip = (ViewGroup) view.findViewById(R.id.mediapicker_tabstrip);
-        assertEquals(tabStrip.getChildCount(), 4);
-        for (int i = 0; i < tabStrip.getChildCount(); i++) {
-            final ImageButton tabButton = (ImageButton) tabStrip.getChildAt(i);
-            assertEquals(i == 0, tabButton.isSelected());
-        }
-    }
-}
diff --git a/tests/src/com/android/messaging/ui/mediapicker/MockCameraFactory.java b/tests/src/com/android/messaging/ui/mediapicker/MockCameraFactory.java
deleted file mode 100644
index 789a78f..0000000
--- a/tests/src/com/android/messaging/ui/mediapicker/MockCameraFactory.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.ui.mediapicker;
-
-import android.hardware.Camera;
-import android.hardware.Camera.CameraInfo;
-
-import com.android.messaging.ui.mediapicker.CameraManager.CameraWrapper;
-import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
-import java.util.HashMap;
-import java.util.Map;
-
-class MockCameraFactory {
-    private static Map<Camera, CameraInfo> sCameraInfos = new HashMap<Camera, CameraInfo>();
-
-    public static Camera createCamera(int facing) {
-        Camera camera = Mockito.mock(Camera.class);
-        CameraInfo cameraInfo = new CameraInfo();
-        cameraInfo.facing = facing;
-        sCameraInfos.put(camera, cameraInfo);
-        return camera;
-    }
-
-    public static void getCameraInfo(Camera camera, CameraInfo outCameraInfo) {
-        CameraInfo cameraInfo = sCameraInfos.get(camera);
-        outCameraInfo.facing = cameraInfo.facing;
-        outCameraInfo.orientation = cameraInfo.orientation;
-        outCameraInfo.canDisableShutterSound = cameraInfo.canDisableShutterSound;
-    }
-
-    public static CameraWrapper createCameraWrapper(final Camera... cameras) {
-        CameraWrapper wrapper = Mockito.mock(CameraWrapper.class);
-        Mockito.when(wrapper.getNumberOfCameras()).thenReturn(cameras.length);
-        Mockito.when(wrapper.open(Mockito.anyInt())).then(new Answer<Camera>() {
-            @Override
-            public Camera answer(InvocationOnMock invocation) {
-                return cameras[(Integer) invocation.getArguments()[0]];
-            }
-        });
-        Mockito.doAnswer(new Answer<Void>() {
-            @Override
-            public Void answer(InvocationOnMock invocation) throws Throwable {
-                getCameraInfo(
-                        cameras[(Integer) invocation.getArguments()[0]],
-                        (CameraInfo) invocation.getArguments()[1]
-                );
-                return null;
-            }
-        }).when(wrapper).getCameraInfo(Mockito.anyInt(), Mockito.any(CameraInfo.class));
-        return wrapper;
-    }
-
-    public static void cleanup() {
-        sCameraInfos.clear();
-    }
-}
diff --git a/tests/src/com/android/messaging/util/BugleGservicesTest.java b/tests/src/com/android/messaging/util/BugleGservicesTest.java
deleted file mode 100644
index e8f1a22..0000000
--- a/tests/src/com/android/messaging/util/BugleGservicesTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-
-@SmallTest
-public class BugleGservicesTest extends BugleTestCase {
-
-    public void testGServiceGet() {
-        final BugleGservices bugleGservices = new FakeBugleGservices();
-
-        assertEquals(BugleGservicesKeys.SMS_IGNORE_MESSAGE_REGEX_DEFAULT,
-                bugleGservices.getString(
-                        BugleGservicesKeys.SMS_IGNORE_MESSAGE_REGEX,
-                        BugleGservicesKeys.SMS_IGNORE_MESSAGE_REGEX_DEFAULT));
-    }
-}
diff --git a/tests/src/com/android/messaging/util/ContactUtilTest.java b/tests/src/com/android/messaging/util/ContactUtilTest.java
deleted file mode 100644
index 0a3cfe8..0000000
--- a/tests/src/com/android/messaging/util/ContactUtilTest.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.ContentProviderOperation;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts;
-import android.text.TextUtils;
-
-import androidx.test.filters.LargeTest;
-
-import com.android.messaging.BugleTestCase;
-import com.android.messaging.FakeFactory;
-
-import org.junit.Assert;
-
-import java.util.ArrayList;
-
-/*
- * Class for testing ContactUtil.
- */
-@LargeTest
-public class ContactUtilTest extends BugleTestCase {
-    private static final String TEST_NAME_PREFIX = "BugleTest:";
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        // TODO: This test will actually mess with contacts on your phone.
-        // Ideally we would use a fake content provider to give us contact data...
-        FakeFactory.registerWithoutFakeContext(getTestContext());
-
-        // add test contacts.
-        addTestContact("John", "650-123-1233", "john@gmail.com", false);
-        addTestContact("Joe", "(650)123-1233", "joe@gmail.com", false);
-        addTestContact("Jim", "650 123 1233", "jim@gmail.com", false);
-        addTestContact("Samantha", "650-123-1235", "samantha@gmail.com", true);
-        addTestContact("Adrienne", "650-123-1236", "adrienne@gmail.com", true);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        deleteTestContacts();
-        super.tearDown();
-    }
-
-    /**
-     * Add a test contact based on contact name, phone and email.
-     */
-    private void addTestContact(
-            final String name, final String phone, final String email, final boolean starred)
-            throws Exception {
-        final ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
-
-        ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
-                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
-                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
-                .build());
-
-        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
-                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
-                .withValue(ContactsContract.Data.MIMETYPE,
-                        ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
-                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
-                        TEST_NAME_PREFIX + name).build());
-
-        if (phone != null) {
-            ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
-                    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
-                    .withValue(ContactsContract.Data.MIMETYPE,
-                            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
-                    .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
-                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
-                            ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
-                    .build());
-        }
-
-        if (email != null) {
-            ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
-                    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
-                    .withValue(ContactsContract.Data.MIMETYPE,
-                            ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
-                    .withValue(ContactsContract.CommonDataKinds.Email.DATA, email)
-                    .withValue(ContactsContract.CommonDataKinds.Email.TYPE,
-                            ContactsContract.CommonDataKinds.Email.TYPE_WORK)
-                    .build());
-        }
-
-        mContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
-
-        // Star the whole contact if needed.
-        if (starred) {
-            final ContentValues values = new ContentValues();
-            values.put(Contacts.STARRED, 1);
-            getContext().getContentResolver().update(Contacts.CONTENT_URI, values,
-                    Contacts.DISPLAY_NAME + "= ?", new String[] { TEST_NAME_PREFIX + name });
-        }
-    }
-
-    /**
-     * Remove test contacts added during test setup.
-     */
-    private void deleteTestContacts() {
-        final Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
-                Uri.encode(TEST_NAME_PREFIX));
-        final Cursor cur =
-                mContext.getContentResolver().query(contactUri, null, null, null, null);
-        try {
-            if (cur.moveToFirst()) {
-                do {
-                    final String lookupKey = cur.getString(cur.getColumnIndex(Contacts.LOOKUP_KEY));
-                    final Uri uri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey);
-                    mContext.getContentResolver().delete(uri, null, null);
-                } while (cur.moveToNext());
-            }
-        } catch (final Exception e) {
-            LogUtil.e(LogUtil.BUGLE_TAG, "Failed to delete test contacts", e);
-        }
-    }
-
-    /**
-     * Verify ContactUtil.getPhone will return all phones, including the ones added for test.
-     */
-    public void ingoredTestGetPhones() {
-        final Cursor cur = ContactUtil.getPhones(getContext())
-                .performSynchronousQuery();
-
-        LogUtil.i(LogUtil.BUGLE_TAG, "testGetPhones: Number of phones on the device:" +
-                cur.getCount());
-
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "Samantha");
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "Adrienne");
-    }
-
-    /**
-     * Verify ContactUtil.filterPhone will work on name based matches.
-     */
-    public void ingoredTestFilterPhonesByName() {
-        final Cursor cur = ContactUtil.filterPhones(getContext(), TEST_NAME_PREFIX)
-                .performSynchronousQuery();
-
-        if (cur.getCount() != 5) {
-            Assert.fail("Cursor should have size of 5");
-            return;
-        }
-
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "Samantha");
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "Adrienne");
-    }
-
-    /**
-     * Verify ContactUtil.filterPhone will work on partial number matches.
-     */
-    public void ingoredTestFilterPhonesByPartialNumber() {
-        final String[] filters = new String[] { "650123", "650-123", "(650)123", "650 123" };
-
-        for (final String filter : filters) {
-            final Cursor cur = ContactUtil.filterPhones(getContext(), filter)
-                    .performSynchronousQuery();
-
-            LogUtil.i(LogUtil.BUGLE_TAG, "testFilterPhonesByPartialNumber: Number of phones:" +
-                    cur.getCount());
-
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "Samantha");
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "Adrienne");
-        }
-    }
-
-    /**
-     * Verify ContactUtil.filterPhone will work on full number matches.
-     */
-    public void ingoredTestFilterPhonesByFullNumber() {
-        final String[] filters = new String[] {
-                "6501231233", "650-123-1233", "(650)123-1233", "650 123 1233" };
-
-        for (final String filter : filters) {
-            final Cursor cur = ContactUtil.filterPhones(getContext(), filter)
-                    .performSynchronousQuery();
-
-            LogUtil.i(LogUtil.BUGLE_TAG, "testFilterPhonesByFullNumber: Number of phones:" +
-                    cur.getCount());
-
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
-        }
-    }
-
-    /**
-     * Verify ContactUtil.lookPhone will work on number including area code.
-     */
-    public void ingoredTestLookupPhoneWithAreaCode() {
-        final String[] filters = new String[] {
-                "6501231233", "650-123-1233", "(650)123-1233", "650 123 1233" };
-
-        for (final String filter : filters) {
-            final Cursor cur = ContactUtil.lookupPhone(getContext(), filter)
-                    .performSynchronousQuery();
-
-            LogUtil.i(LogUtil.BUGLE_TAG, "testLookupPhoneWithAreaCode: Number of phones:" +
-                    cur.getCount());
-
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
-        }
-    }
-
-    /**
-     * Verify ContactUtil.lookPhone will work on number without area code.
-     */
-    public void ingoredTestLookupPhoneWithoutAreaCode() {
-        final String[] filters = new String[] {
-                "1231233", "123-1233", "123 1233" };
-
-        for (final String filter : filters) {
-            final Cursor cur = ContactUtil.lookupPhone(getContext(), filter)
-                    .performSynchronousQuery();
-
-            LogUtil.i(LogUtil.BUGLE_TAG, "testLookupPhoneWithoutAreaCode: Number of phones:" +
-                    cur.getCount());
-
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
-            verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
-        }
-    }
-
-    public void ingoredTestGetFrequentPhones() {
-        final Cursor cur = ContactUtil.getFrequentContacts(getContext())
-                .performSynchronousQuery();
-
-        LogUtil.i(LogUtil.BUGLE_TAG, "testGetFrequentPhones: Number of phones on the device:" +
-                cur.getCount());
-
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "Samantha");
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "Adrienne");
-    }
-
-    /**
-     * Verify ContactUtil.filterEmails will work on partial email.
-     */
-    public void ingoredTestFilterEmails() {
-        final Cursor cur = ContactUtil.filterEmails(getContext(), "john@")
-                .performSynchronousQuery();
-
-        LogUtil.i(LogUtil.BUGLE_TAG, "testFilterEmails: Number of emails:" +
-                cur.getCount());
-
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
-    }
-
-    /**
-     * Verify ContactUtil.lookupEmail will work on full email.
-     */
-    public void ingoredTestLookupEmail() {
-        final Cursor cur = ContactUtil.lookupEmail(getContext(), "john@gmail.com")
-                .performSynchronousQuery();
-
-        LogUtil.i(LogUtil.BUGLE_TAG, "testLookupEmail: Number of emails:" +
-                cur.getCount());
-
-        verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
-    }
-
-    /**
-     * Utility method to check whether cursor contains a particular contact.
-     */
-    private void verifyCursorContains(final Cursor cursor, final String nameToVerify) {
-        if (cursor.moveToFirst()) {
-            do {
-                final String name = cursor.getString(ContactUtil.INDEX_DISPLAY_NAME);
-                if (TextUtils.equals(name, nameToVerify)) {
-                    return;
-                }
-            } while (cursor.moveToNext());
-        }
-        Assert.fail("Cursor should have " + nameToVerify);
-    }
-}
diff --git a/tests/src/com/android/messaging/util/FakeBugleGservices.java b/tests/src/com/android/messaging/util/FakeBugleGservices.java
deleted file mode 100644
index f7d90da..0000000
--- a/tests/src/com/android/messaging/util/FakeBugleGservices.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-/**
- * Fake implementation which just returns the default values.
- */
-public class FakeBugleGservices extends BugleGservices {
-    public FakeBugleGservices() {
-    }
-
-    @Override
-    public void registerForChanges(final Runnable r) {
-    }
-
-    @Override
-    public long getLong(final String key, final long defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public int getInt(final String key, final int defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public boolean getBoolean(final String key, final boolean defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public String getString(final String key, final String defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public float getFloat(String key, float defaultValue) {
-        return defaultValue;
-    }
-
-}
diff --git a/tests/src/com/android/messaging/util/FakeBuglePrefs.java b/tests/src/com/android/messaging/util/FakeBuglePrefs.java
deleted file mode 100644
index b3429a6..0000000
--- a/tests/src/com/android/messaging/util/FakeBuglePrefs.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-
-/**
- * Fake implementation which just returns the default values and ignores put operations.
- */
-public class FakeBuglePrefs extends BuglePrefs {
-    public FakeBuglePrefs() {
-    }
-
-    @Override
-    public int getInt(final String key, final int defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public long getLong(final String key, final long defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public boolean getBoolean(final String key, final boolean defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public String getString(final String key, final String defaultValue) {
-        return defaultValue;
-    }
-
-    @Override
-    public byte[] getBytes(String key) {
-        return null;
-    }
-
-    @Override
-    public void putInt(final String key, final int value) {
-    }
-
-    @Override
-    public void putLong(final String key, final long value) {
-    }
-
-    @Override
-    public void putBoolean(final String key, final boolean value) {
-    }
-
-    @Override
-    public void putString(final String key, final String value) {
-    }
-
-    @Override
-    public void putBytes(String key, byte[] value) {
-    }
-
-    @Override
-    public String getSharedPreferencesName() {
-        return "FakeBuglePrefs";
-    }
-
-    @Override
-    public void onUpgrade(int oldVersion, int newVersion) {
-    }
-
-    @Override
-    public void remove(String key) {
-    }
-}
diff --git a/tests/src/com/android/messaging/util/FakeMediaUtil.java b/tests/src/com/android/messaging/util/FakeMediaUtil.java
deleted file mode 100644
index e37ff0c..0000000
--- a/tests/src/com/android/messaging/util/FakeMediaUtil.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import android.content.Context;
-import android.media.MediaPlayer;
-
-public class FakeMediaUtil extends MediaUtil {
-    private final MediaPlayer mMediaPlayer;
-    public FakeMediaUtil(final MediaPlayer mediaPlayer) {
-        mMediaPlayer = mediaPlayer;
-    }
-
-    @Override
-    public void playSound(Context context, int resId, OnCompletionListener completionListener) {
-        if (completionListener != null) {
-            completionListener.onCompletion();
-        }
-    }
-}
diff --git a/tests/src/com/android/messaging/util/YouTubeUtilTest.java b/tests/src/com/android/messaging/util/YouTubeUtilTest.java
deleted file mode 100644
index 072d3e5..0000000
--- a/tests/src/com/android/messaging/util/YouTubeUtilTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2015 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.android.messaging.util;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.messaging.BugleTestCase;
-
-/*
- * Class for testing YouTubeUtil.
- */
-@SmallTest
-public class YouTubeUtilTest extends BugleTestCase {
-    public void testGetYoutubePreviewImageLink() {
-        final String videoId = "dQw4w9WgXcQ";
-        final String videoThumbnailUrl = YouTubeUtil.YOUTUBE_STATIC_THUMBNAIL_PREFIX + videoId
-                + YouTubeUtil.YOUTUBE_STATIC_THUMBNAIL_END;
-
-        // Check known valid youtube links to videos
-        assertEquals(
-                YouTubeUtil.getYoutubePreviewImageLink("http://www.youtube.com/watch?v=" + videoId),
-                videoThumbnailUrl);
-        assertEquals(
-                YouTubeUtil.getYoutubePreviewImageLink("https://www.youtube.com/watch?v=" + videoId
-                        + "&feature=youtu.be"), videoThumbnailUrl);
-        assertEquals(
-                YouTubeUtil.getYoutubePreviewImageLink("www.youtube.com/watch?v=" + videoId),
-                videoThumbnailUrl);
-        assertEquals(
-                YouTubeUtil.getYoutubePreviewImageLink("http://www.youtube.com/embed/" + videoId),
-                videoThumbnailUrl);
-        assertEquals(YouTubeUtil.getYoutubePreviewImageLink("http://www.youtube.com/v/" + videoId),
-                videoThumbnailUrl);
-        assertEquals(
-                YouTubeUtil.getYoutubePreviewImageLink("https://youtube.googleapis.com/v/"
-                        + videoId), videoThumbnailUrl);
-        assertEquals(
-                YouTubeUtil.getYoutubePreviewImageLink("http://www.youtube.com/apiplayer?video_id="
-                        + videoId), videoThumbnailUrl);
-        // This is the type of links that are used as shares from YouTube and will be the most
-        // likely case that we see
-        assertEquals(YouTubeUtil.getYoutubePreviewImageLink("http://youtu.be/" + videoId),
-                videoThumbnailUrl);
-
-        // Try links that shouldn't work
-        assertNull(YouTubeUtil.getYoutubePreviewImageLink("http://www.youtube.com"));
-    }
-}
\ No newline at end of file
diff --git a/tools/buglesql b/tools/buglesql
deleted file mode 100755
index c9ac8ef..0000000
--- a/tools/buglesql
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/bash
-#  Copyright (C) 2015 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.
-
-usage='buglesql [-c] [-r] sql
-  -c display in columns with headers (default)
-  -r display as records'
-
-opts='-column -header'
-
-while test $# -gt 0
-do
-    case $1 in
-        -c)
-            opts='-column -header'
-            shift
-            ;;
-        -r)
-            opts='-line'
-            shift
-            ;;
-        *)
-            break;
-    esac
-done
-
-if [ $# -lt 1 ]; then
-    echo "$usage"
-    exit 1
-fi
-
-adb shell su -c sqlite3 $opts data/data/com.android.messaging/databases/bugle_db "$1"
diff --git a/tools/dumpapkversion.sh b/tools/dumpapkversion.sh
deleted file mode 100755
index 48ff590..0000000
--- a/tools/dumpapkversion.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-#  Copyright (C) 2015 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.
-for i in `find . -name \*.apk`
-do
-	echo -n $i
-	echo -n " "
-	aapt dump badging $i | grep versionCode | sed -E 's/^.*versionCode/versionCode/'
-done
diff --git a/tools/messagegen/fillsms b/tools/messagegen/fillsms
deleted file mode 100644
index dc2e507..0000000
--- a/tools/messagegen/fillsms
+++ /dev/null
@@ -1,298 +0,0 @@
-#!/bin/bash
-#  Copyright (C) 2015 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.
-###################################################################
-## Script that generates SMS and MMS messages and fills the Android
-## telephony provider mmssms.db. This is used for testing SMS/MMS.
-###################################################################
-
-AREA_CODE=605
-
-TABLE_CANONICAL_ADDRESSES_START_ID=100
-TABLE_THREADS_START_ID=100
-TABLE_SMS_START_ID=1000
-
-START_TIMESTAMP_IN_SECONDS=1357683093 # 1/8/2013 2:11:33 PM
-TIMESTAMP_INC_IN_SECONDS=120
-
-PART_DIR="/data/data/com.android.providers.telephony/app_parts"
-
-USAGE='fillsms [-f] [-x] <device_phone_number> <# of threads> <# of sms per thread> <# of mms per thread> <image list file> <sql file>
-    -f -- Only generates the SQL file, do not push to the device
-    -x -- Only execute a SQL file
-    -g -- For GB devices
-Examples:
-    # Generate 2 threads each with 10 SMSes and 10 MMSes on device with phone
-    # number +16508619525. MMS messages use images listed in ./images, which list
-    # *.jpg and *.gif files in local directory. The SQL commands are in sql.txt
-    fillsms +16508619525 2 10 10 images sql.txt
-
-    # Same as above but only creating the SQL command file without pushing to
-    # device
-    fillsms -f +16508619525 2 10 10 images sql.txt
-
-    # Just push the sql.txt to device without generating new SQLs
-    fillsms -x +16508619525 2 10 10 images sql.txt
-'
-
-SMIL='<smil> <head> <layout> <root-layout height="%dpx" width="%dpx"> <region fit="meet" height="%dpx" id="Image" left="0" top="0" width="%dpx"/></root-layout> </layout> </head> <body> <par dur="5000ms"> <img region="Image" src="%s"/> </par> </body> </smil>'
-
-MAX_WORDS_PER_MESSAGE=15
-
-DICT=american-english
-
-# don't actually run the sql on device
-opt_sql_only=0
-opt_exec_only=0
-opt_for_gb=0
-
-while test $# -gt 0
-do
-  case $1 in
-    -f)
-      opt_sql_only=1
-      shift
-      ;;
-    -x)
-      opt_exec_only=1
-      shift
-      ;;
-    -g)
-      opt_for_gb=1
-      shift
-      ;;
-    *)
-      break;
-  esac
-done
-
-
-if [ $opt_sql_only -eq "1" -a $opt_exec_only -eq "1" ]; then
-  echo "-f and -x can not coexist"
-  echo "$USAGE"
-  exit 1
-fi
-
-if [ $# -lt 6 ]; then
-  echo "$USAGE"
-  exit 1
-fi
-device_phone=$1
-shift
-num_of_threads=$1
-shift
-sms_per_thread=$1
-shift
-mms_per_thread=$1
-shift
-image_list_file=$1
-shift
-sql_file=$1
-shift
-echo $image_list_file
-
-dict_lines=`wc -l < $DICT`
-image_files=`wc -l < $image_list_file`
-echo $image_files
-
-if [ $mms_per_thread -gt "0" ]; then
-  if [ ! -f $image_list_file ]; then
-    echo "No image files for creating MMS messages"
-    exit 1
-  fi
-fi
-
-echoerr ()
-{
-  echo "$@" 1>&2;
-}
-
-random_value ()
-{
-  echo $(( $RANDOM % $1 + 1 ))
-}
-
-dict_word ()
-{
-  local v=$(random_value $dict_lines)
-  sed $v"q;d" $DICT
-}
-
-gen_message ()
-{
-  local words=$(random_value $MAX_WORDS_PER_MESSAGE)
-  local message=
-  for k in `seq 1 $words`;
-  do
-    local word=$(dict_word)
-    message="$message $word"
-  done
-  echo $message | sed -e "s/'//g"
-}
-
-random_image ()
-{
-  local v=$(random_value $image_files)
-  sed $v"q;d" $image_list_file
-}
-
-add_sql ()
-{
-  echo $1 >> $sql_file
-}
-
-adb_sql ()
-{
-  echo $1
-  adb shell sqlite3 data/data/com.android.providers.telephony/databases/mmssms.db "$1"
-}
-
-adb_sql_with_quotes ()
-{
-  echo $1
-  adb shell "sqlite3 data/data/com.android.providers.telephony/databases/mmssms.db \"$1\""
-}
-######################################################################################
-######################################################################################
-
-if [ $opt_exec_only -eq "0" ]; then
-  # clean up sql file
-  rm -f $sql_file
-
-  add_sql "PRAGMA trusted_schema=1;"
-  # add sql to clean up database
-  add_sql "delete from pdu where _id>=$TABLE_SMS_START_ID;"
-  add_sql "delete from part where _id>=$TABLE_SMS_START_ID;"
-  add_sql "delete from addr where _id>=$TABLE_SMS_START_ID;"
-  add_sql "delete from sms where _id>=$TABLE_SMS_START_ID;"
-  add_sql "delete from threads where _id>=$TABLE_THREADS_START_ID;"
-  add_sql "delete from canonical_addresses where _id>=$TABLE_CANONICAL_ADDRESSES_START_ID;"
-
-  for i in `seq 1 $num_of_threads`;
-  do
-    echo
-    echo "Creating thread $i ......"
-    echo
-
-    # Get random phone number
-    value=$(random_value 1000)
-    middle=$(printf '%03d' $value)
-    value=$(random_value 10000)
-    last=$(printf '%04d' $value)
-    phone="+1$AREA_CODE$middle$last"
-    echo $phone
-    echo
-
-    timestamp=$(( $START_TIMESTAMP_IN_SECONDS + 5 * $TIMESTAMP_INC_IN_SECONDS * $i ))
-
-    # Generate threads
-    addr_id=$(( $TABLE_CANONICAL_ADDRESSES_START_ID + $i ))
-    add_sql "insert into canonical_addresses (_id,address) values ($addr_id,'$phone');"
-
-    thread_id=$(( $TABLE_THREADS_START_ID + $i ))
-    add_sql "insert into threads (_id,date,message_count,recipient_ids,snippet,snippet_cs,read,type,error,has_attachment) values ($thread_id, $timestamp, $sms_per_thread, $addr_id, 'snippet', 0, 1, 0, 0, 0);"
-
-    # Generate SMS
-    if [ $sms_per_thread -gt "0" ]; then
-      add_sql "PRAGMA trusted_schema=1;"
-      half_timestamp_inc=$(( 500 + ((($sms_per_thread + $mms_per_thread) * $TIMESTAMP_INC_IN_SECONDS) * 500 / $sms_per_thread) ))
-      for j in `seq 1 $sms_per_thread`;
-      do
-        message=$(gen_message)
-        date=$(( ( 1000 * $timestamp ) - $half_timestamp_inc * ( 2 * ($sms_per_thread - $j) + ( $i % 2 ) ) ))
-        message_id=$(( $TABLE_SMS_START_ID + $sms_per_thread * $i * 2 + (2 * $j) ))
-        message_type=$(( $j % 2 + 1 ))
-        add_sql "insert into sms (_id,thread_id,address,person,date,status,type,body,read,seen) values ($message_id, $thread_id, '$phone', '$phone', $date, -1, $message_type, '$message', 1, 1);"
-      done
-    fi
-
-    # Generate MMS
-    if [ $mms_per_thread -gt "0" ]; then
-      half_timestamp_inc=$(( 1 + ((($sms_per_thread + $mms_per_thread) * $TIMESTAMP_INC_IN_SECONDS) / ( 2 * $mms_per_thread) ) ))
-      for j in `seq 1 $mms_per_thread`;
-      do
-        image_line=$(random_image)
-        image=`echo $image_line | awk '{ print $1 }'`
-        width=`echo $image_line | awk '{ print $2 }'`
-        height=`echo $image_line | awk '{ print $3 }'`
-        size=`echo $image_line | awk '{ print $4 }'`
-        date=$(( $timestamp - $half_timestamp_inc * ( 2 * ($mms_per_thread - $j) + ( ($i+1) % 2 ) ) ))
-        message_id=$(( $TABLE_SMS_START_ID + $sms_per_thread * $i * 2 + (2 * $j + 1) ))
-        message_type=$(( $j % 2 + 1 ))
-        if [ $message_type -eq '1' ]; then
-          m_type=132
-        else
-          m_type=128
-        fi
-        if [ $opt_for_gb -eq "0" ]; then
-          add_sql "insert into pdu (_id,thread_id,date,date_sent,msg_box,read,m_id,sub,sub_cs,ct_t,m_cls,m_type,v,m_size,pri,rr,tr_id,d_rpt,locked,seen,text_only) values ($message_id, $thread_id, $date, 0, $message_type, 1, 'hmma3p5s1a3m526@w.tmomail.net', 'no subject', 106, 'application/vnd.wap.multipart.related', 'personal', $m_type, 18, $size, 129, 129 , '$message_id', 129, 0, 1, 0);"
-        else
-          add_sql "insert into pdu (_id,thread_id,date,msg_box,read,m_id,sub,sub_cs,ct_t,m_cls,m_type,v,m_size,pri,rr,tr_id,d_rpt,locked,seen) values ($message_id, $thread_id, $date, $message_type, 1, 'hmma3p5s1a3m526@w.tmomail.net', 'no subject', 106, 'application/vnd.wap.multipart.related', 'personal', $m_type, 18, $size, 129, 129 , '$message_id', 129, 0, 1);"
-        fi
-        id_1=$(( $message_id ))
-        id_2=$(( $message_id + 1 ))
-        smil=$(printf "$SMIL" $height $width $height $width $image)
-        add_sql "insert into part (_id,mid,seq,ct,cid,cl,text) values ($id_1, $message_id, -1, 'application/smil', '<smil>', 'smil.xml', '$smil');"
-        image_no_suffix=${image%.*}
-        add_sql "insert into part (_id,mid,seq,ct,cid,cl,_data) values ($id_2, $message_id, 0, 'image/jpeg', '$image_no_suffix', '$image', '$PART_DIR/$image');"
-        if [ $message_type -eq '1' ]; then
-          add_sql "insert into addr (_id,msg_id,address,type,charset) values ($id_1, $message_id, '$phone', 137, 106);"
-          add_sql "insert into addr (_id,msg_id,address,type,charset) values ($id_2, $message_id, '$device_phone', 151, 106);"
-        else
-          add_sql "insert into addr (_id,msg_id,address,type,charset) values ($id_1, $message_id, 'insert-address-token', 137, 106);"
-          add_sql "insert into addr (_id,msg_id,address,type,charset) values ($id_2, $message_id, '$phone', 151, 106);"
-        fi
-      done
-    fi
-  done
-fi
-
-# Push to device
-if [ $opt_sql_only -eq "0" ]; then
-  # make sure we have access
-  adb root
-
-  # Push all local jpgs or gifs to device, being lazy here.
-  if [ $mms_per_thread -gt "0" ]; then
-    for file in `ls *.jpg *.gif`;
-    do
-      echo "adb push $file $PART_DIR/$file"
-      adb push $file $PART_DIR/$file
-    done
-  fi
-
-  echo "adb push $sql_file /data/fillsms"
-  adb push $sql_file /data/fillsms
-  echo
-  adb_sql ".read /data/fillsms"
-  echo
-  add_sql "PRAGMA trusted_schema=1;"
-  echo
-  adb_sql_with_quotes "select count(*) from canonical_addresses where _id>=$TABLE_CANONICAL_ADDRESSES_START_ID;"
-  echo
-  adb_sql_with_quotes "select count(*) from threads where _id>=$TABLE_THREADS_START_ID;"
-  echo
-  if [ $sms_per_thread -gt "0" ]; then
-    adb_sql_with_quotes "select count(*) from sms where _id>=$TABLE_SMS_START_ID;"
-    echo
-  fi
-  if [ $mms_per_thread -gt "0" ]; then
-    adb_sql_with_quotes "select count(*) from pdu where _id>=$TABLE_SMS_START_ID;"
-    echo
-    adb_sql_with_quotes "select count(*) from part where _id>=$TABLE_SMS_START_ID;"
-    echo
-    adb_sql_with_quotes "select count(*) from addr where _id>=$TABLE_SMS_START_ID;"
-    echo
-  fi
-fi
diff --git a/tools/messagegen/listimages b/tools/messagegen/listimages
deleted file mode 100755
index 9c50072..0000000
--- a/tools/messagegen/listimages
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-#  Copyright (C) 2015 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.
-
-for file in `ls *.jpg *.gif`;
-do
-  dimension=`identify -format "%w %h" $file`
-  size=`stat -c%s $file`
-  echo "$file $dimension $size"
-done
diff --git a/tools/mmssql b/tools/mmssql
deleted file mode 100755
index 1643dbb..0000000
--- a/tools/mmssql
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/bash
-#  Copyright (C) 2015 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.
-
-usage='mmssql [-c] [-r] sql
-  -c display in columns with headers (default)
-  -r display as records'
-
-opts='-column -header'
-
-while test $# -gt 0
-do
-    case $1 in
-        -c)
-            opts='-column -header'
-            shift
-            ;;
-        -r)
-            opts='-line'
-            shift
-            ;;
-        *)
-            break;
-    esac
-done
-
-if [ $# -lt 1 ]; then
-    echo "$usage"
-    exit 1
-fi
-
-adb shell su -c sqlite3 $opts data/data/com.android.providers.telephony/databases/mmssms.db "$1"
